diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PageUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PageUtil.java new file mode 100644 index 000000000..fe62ec525 --- /dev/null +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PageUtil.java @@ -0,0 +1,40 @@ +package com.jero.common.util; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import java.util.ArrayList; +import java.util.List; + +/** + * @description + * @date 2022/12/7 14:02 + * @auth zhn + */ +public class PageUtil { + public static Page getPages(Integer currentPage, Integer pageSize, List entityList){ + Page page =new Page(); + if(entityList==null){ + return null; + } + int size = entityList.size(); + if(pageSize > size){ + pageSize = size; + } + if(pageSize!=0){ + //求出最⼤页数,防⽌currentPage越界 + int maxPage = size % pageSize ==0? size / pageSize : size / pageSize +1; + if(currentPage > maxPage){ + currentPage = maxPage; + } + } + //当前页第⼀条数据的下标 + int curIdx = currentPage >1?(currentPage -1)* pageSize :0; + List pageList =new ArrayList(); + //将当前页的数据放进pageList + for(int i =0; i < pageSize && curIdx + i < size; i++){ + pageList.add(entityList.get(curIdx + i)); + } + page.setCurrent(currentPage).setSize(pageSize).setTotal(entityList.size()).setRecords(pageList); + return page; + } +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/RoleEnum.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/RoleEnum.java index 2dcb85b76..d772b2765 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/RoleEnum.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/enums/RoleEnum.java @@ -6,8 +6,10 @@ public enum RoleEnum { COUNTRU_CARD_MANAGE("countryCard管理员","countryCardManage","countryCardManage","1564916346120916993",4), ENGINEERING_INTERFACE_PERSON("工程接口人","engineeringInterfacePerson","engineeringInterfacePerson","1534020084667674626",5), ENGINEER("工程师","engineer","engineer","1534020318437208065",6), - HOMOLOGATION_ENGINEER("认证工程师","homologationEngineer","homologationEngineer","1534019729326239745",8), REGULATION_OWNER("法规工程师","regulationOwner","regulationOwner","1534021004067500034",7), + HOMOLOGATION_ENGINEER("认证工程师","homologationEngineer","homologationEngineer","1534019729326239745",8), + OTA_MANAGER("OTA Manager","OTA Manager","OTA Manager","1664108901072678913",9), + STUDIO("R&H Studio","R&H Studio","R&H Studio","1534019911296118786",10), ; String name; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageApplyEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageApplyEOController.java new file mode 100644 index 000000000..ff5d721a0 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageApplyEOController.java @@ -0,0 +1,348 @@ +package com.jero.modules.ota.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.util.PageUtil; +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.jero.modules.ota.service.IOtaManageApplyEOService; +import com.jero.modules.ota.vo.VersionVO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @Description: 数据对接表 + * @Author: jero-boot + * @Date: 2023-08-09 + * @Version: V1.0 + */ +@Api(tags="数据对接表") +@RestController +@RequestMapping("/ota/otaManageApplyEO") +@Slf4j +public class OtaManageApplyEOController extends JeroController { + @Autowired + private IOtaManageApplyEOService otaManageApplyEOService; + + /** + * OTA管理列表和全车型列表-分页列表查询 + * + * @param otaManageApplyEO + * @param pageNo + * @param pageSize + * @return + */ + @AutoLog(value = "OTA管理列表和全车型列表-分页列表查询") + @ApiOperation(value="OTA管理列表和全车型列表-分页列表查询", notes="OTA管理列表和全车型列表-分页列表查询") + @GetMapping(value = "/getOtaPage") + public Result getOtaPage(OtaManageApplyEO otaManageApplyEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + + List list = otaManageApplyEOService.getOtaPage(otaManageApplyEO); + Page pages = PageUtil.getPages(pageNo, pageSize, list); + return Result.OK(pages); + } + + @AutoLog(value = "全车型列表-分页列表查询") + @ApiOperation(value="全车型列表-分页列表查询", notes="全车型列表-分页列表查询") + @GetMapping(value = "/getAllCarPage") + public Result getAllCarPage(OtaManageApplyEO otaManageApplyEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + + List list = otaManageApplyEOService.getAllCarPage(otaManageApplyEO); + Page pages = PageUtil.getPages(pageNo, pageSize, list); + return Result.OK(pages); + } + /** + * 分车型列表-分页列表查询 + * + * @param otaManageApplyEO + * @param pageNo + * @param pageSize + * @return + */ + @AutoLog(value = "分车型列表-分页列表查询") + @ApiOperation(value="分车型列表-分页列表查询", notes="分车型列表-分页列表查询") + @GetMapping(value = "/getOtaCarPage") + public Result getOtaCarPage(OtaManageApplyEO otaManageApplyEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + String cut) { + + List list = otaManageApplyEOService.getOtaCarPage(otaManageApplyEO, cut); + Page pages = PageUtil.getPages(pageNo, pageSize, list); + return Result.OK(pages); + } + /** + * 下拉数据-软件版本,适用车型,市场 + * + * @return + */ + @AutoLog(value = "下拉数据-软件版本,适用车型,市场") + @ApiOperation(value="下拉数据-软件版本,适用车型,市场", notes="下拉数据-软件版本,适用车型,市场") + @GetMapping(value = "/getPullDownList") + public Result getPullDownList() { + Map result = otaManageApplyEOService.getPullDownList(); + return Result.OK(result); + } + + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "数据对接表-通过id删除") + @ApiOperation(value="数据对接表-通过id删除", notes="数据对接表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + otaManageApplyEOService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "数据对接表-批量删除") + @ApiOperation(value="数据对接表-批量删除", notes="数据对接表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.otaManageApplyEOService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过适用车型查询 + * + * @param appliedVehicleProject + * @return + */ + @AutoLog(value = "通过适用车型查询") + @ApiOperation(value="通过适用车型查询", notes="通过适用车型查询") + @GetMapping(value = "/getByAppliedVehicleProject") + public Result getByAppliedVehicleProject(@RequestParam(name="appliedVehicleProject",required=true) String appliedVehicleProject) { + List byAppliedVehicleProject = otaManageApplyEOService.getByAppliedVehicleProject(appliedVehicleProject); + return Result.OK(byAppliedVehicleProject); + } + + /** + * 导出excel + * + * @param request + * @param otaManageApplyEO + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + return super.exportXls(request, otaManageApplyEO, OtaManageApplyEO.class, "数据对接表"); + } + + @AutoLog(value = "下拉数据-全部和分车型(不含年款)") + @ApiOperation(value="下拉数据-全部和分车型(不含年款)", notes="下拉数据-全部和分车型(不含年款)") + @GetMapping(value = "/getCarList") + public Result getCarList(String cut,String plannedBpLaunchBatch) { + List result = otaManageApplyEOService.getCarList(cut,plannedBpLaunchBatch); + return Result.OK(result); + } + + @AutoLog(value = "项目版本下拉数据") + @ApiOperation(value="项目版本下拉数据", notes="项目版本下拉数据") + @GetMapping(value = "/getProjectVersionList") + public Result getProjectVersionList(String carMarket,String cut) { + List result = otaManageApplyEOService.getProjectVersionList(carMarket,cut); + return Result.OK(result); + } + + @AutoLog(value = "全车型和分车型详情") + @ApiOperation(value="分车型详情", notes="分车型详情") + @GetMapping(value = "/getVersionInfo") + public Result getVersionInfo(String vdr,String car,String cut) { + List result = otaManageApplyEOService.getVersionInfo(vdr,car,cut); + return Result.OK(result); + } + + @AutoLog(value = "下发通知") + @ApiOperation(value="下发通知", notes="下发通知") + @GetMapping(value = "/issueNotice") + public Result issueNotice(String id) { + otaManageApplyEOService.issueNotice(id); + return Result.OK("下发通知成功!"); + } + + @AutoLog(value = "保存") + @ApiOperation(value = "保存", notes = "保存") + @PostMapping(value = "/temporarySave") + public Result temporarySave(@RequestBody JSONObject jsonObject) { + JSONArray array = jsonObject.getJSONArray("list"); + String cut = jsonObject.getString("cut"); + List list = new ArrayList<>(); + OtaManageApplyEO oma = null; + for (Object obj : array) { + oma = JSONObject.parseObject(JSONObject.toJSONString(obj), OtaManageApplyEO.class); + if (ObjectUtils.isNotEmpty(oma)) { + list.add(oma); + } + } + otaManageApplyEOService.temporarySave(list, cut); + return Result.OK("保存成功!"); + } + + @AutoLog(value = "提交") + @ApiOperation(value = "提交", notes = "提交") + @PostMapping(value = "/submit") + public Result submit(@RequestBody JSONObject jsonObject) { + JSONArray array = jsonObject.getJSONArray("list"); + String cut = jsonObject.getString("cut"); + List list = new ArrayList<>(); + OtaManageApplyEO oma = null; + for (Object obj : array) { + oma = JSONObject.parseObject(JSONObject.toJSONString(obj), OtaManageApplyEO.class); + if (ObjectUtils.isNotEmpty(oma)) { + list.add(oma); + } + } + List msgList = otaManageApplyEOService.submit(list, cut); + Map res = new HashMap<>(); + res.put("msgList",msgList); + return Result.OK("操作成功!", res); + } + + @AutoLog(value = "批量设置") + @ApiOperation(value = "批量设置", notes = "批量设置") + @PostMapping(value = "/updateVdrBatch") + public Result updateVdrBatch(@RequestBody JSONObject jsonObject) { + JSONArray array = jsonObject.getJSONArray("list"); + List list = new ArrayList<>(); + OtaManageApplyEO oma = null; + for (Object obj : array) { + oma = JSONObject.parseObject(JSONObject.toJSONString(obj), OtaManageApplyEO.class); + if (ObjectUtils.isNotEmpty(oma)) { + list.add(oma); + } + } + String projectVersion = jsonObject.getString("projectVersion"); + String attestationSchedule = jsonObject.getString("attestationSchedule"); + String remark = jsonObject.getString("remark"); + String cut = jsonObject.getString("cut"); + + List msgList = otaManageApplyEOService.updateVdrBatch(list, projectVersion, attestationSchedule, remark, cut); + Map res = new HashMap<>(); + res.put("msgList",msgList); + return Result.OK("操作成功!", res); + } + + @AutoLog(value = "申请重新匹配") + @ApiOperation(value = "申请重新匹配", notes = "申请重新匹配") + @GetMapping(value = "/applyRematch") + public Result applyRematch(String ids,String projectVersion,String cut) { + List msgList = otaManageApplyEOService.applyRematch(ids,projectVersion, cut); + Map res = new HashMap<>(); + res.put("msgList",msgList); + return Result.OK("操作成功!", res); + } + + @AutoLog(value = "确认") + @ApiOperation(value = "确认", notes = "确认") + @GetMapping(value = "/confirm") + public Result confirm(String ids,String cut) { + List msgList = otaManageApplyEOService.confirm(ids, cut); + Map res = new HashMap<>(); + res.put("msgList",msgList); + return Result.OK("操作成功!", res); + } + + @AutoLog(value = "退回") + @ApiOperation(value = "退回", notes = "退回") + @GetMapping(value = "/reject") + public Result reject(String ids,String rejectReason,String cut) { + List msgList = otaManageApplyEOService.reject(ids, rejectReason, cut); + Map res = new HashMap<>(); + res.put("msgList",msgList); + return Result.OK("操作成功!", res); + } + + @AutoLog(value = "查询项目涉及的VDR版本") + @ApiOperation(value = "查询项目涉及的VDR版本", notes = "查询项目涉及的VDR版本") + @GetMapping(value = "/getVdrListByProject") + public Result getVdrListByProject(String projectId, String cut) { + List resList = otaManageApplyEOService.getVdrListByProject(projectId, cut); + return Result.OK("操作成功!", resList); + } + + @AutoLog(value = "通过软件版本和项目ID查询状态") + @ApiOperation(value = "通过软件版本和项目ID查询状态", notes = "通过软件版本和项目ID查询状态") + @GetMapping(value = "/getStatisticalStatus") + public Result getStatisticalStatus(String projectId, String plannedBpLaunchBatch, String cut) { + List projectLibraryBaseList = new ArrayList<>(); + List> res = otaManageApplyEOService.getStatisticalStatus(projectId, plannedBpLaunchBatch, cut,projectLibraryBaseList); + if(!res.isEmpty()){ + return Result.OK("操作成功!", res.get(0)); + }else{ + return Result.OK("操作成功!", new HashMap<>()); + } + } + + /** + * OTA管理导出excel + * + * @param request + * @param otaManageApplyEO + */ + @RequestMapping(value = "/otaExportXls") + @ApiOperation(value = "OTA管理导出excel", notes = "OTA管理导出excel") + public ModelAndView otaExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + return otaManageApplyEOService.otaExportXls(request, otaManageApplyEO); + } + /** + * 全车型导出excel + * + * @param request + * @param otaManageApplyEO + */ + @RequestMapping(value = "/allCarExportXls") + @ApiOperation(value = "全车型导出excel", notes = "OTA管理导出excel") + public ModelAndView allCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + return otaManageApplyEOService.allCarExportXls(request, otaManageApplyEO); + } + /** + * 分车型导出excel + * + * @param request + * @param otaManageApplyEO + */ + @RequestMapping(value = "/oneCarExportXls") + @ApiOperation(value = "分车型导出excel", notes = "OTA管理导出excel") + public ModelAndView oneCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + return otaManageApplyEOService.oneCarExportXls(request, otaManageApplyEO); + } + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageHistoryController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageHistoryController.java new file mode 100644 index 000000000..2d7ca3eee --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageHistoryController.java @@ -0,0 +1,180 @@ +package com.jero.modules.ota.controller; + +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.enums.CutEnum; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.ota.entity.OtaManageHistory; +import com.jero.modules.ota.service.IOtaManageHistoryService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.jero.common.aspect.annotation.AutoLog; + + + /** + * @Description: OTA管理列表历史记录 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +@Api(tags="OTA管理列表历史记录") +@RestController +@RequestMapping("/ota/otaManageHistory") +@Slf4j +public class OtaManageHistoryController extends JeroController { + @Autowired + private IOtaManageHistoryService otaManageHistoryService; + + /** + * 分页列表查询 + * + * @param otaManageHistory + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-分页列表查询") + @ApiOperation(value="OTA管理列表历史记录-分页列表查询", notes="OTA管理列表历史记录-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(OtaManageHistory otaManageHistory,String cut, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(otaManageHistory, req.getParameterMap()); + queryWrapper.orderByDesc("create_time"); + Page page = new Page(pageNo, pageSize); + IPage pageList = otaManageHistoryService.page(page, queryWrapper); + List records = pageList.getRecords(); + for (OtaManageHistory omh : records) { + if (CutEnum.CN.getValue().equals(cut)) { + omh.setContent(omh.getContentCn()); + } else { + omh.setContent(omh.getContentEn()); + } + } + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-列表查询") + @ApiOperation(value="OTA管理列表历史记录-列表查询", notes="OTA管理列表历史记录-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = otaManageHistoryService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param otaManageHistory + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-添加") + @ApiOperation(value="OTA管理列表历史记录-添加", notes="OTA管理列表历史记录-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody OtaManageHistory otaManageHistory) { + otaManageHistoryService.add(otaManageHistory); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param otaManageHistory + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-编辑") + @ApiOperation(value="OTA管理列表历史记录-编辑", notes="OTA管理列表历史记录-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody OtaManageHistory otaManageHistory) { + otaManageHistoryService.editById(otaManageHistory); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-通过id删除") + @ApiOperation(value="OTA管理列表历史记录-通过id删除", notes="OTA管理列表历史记录-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + otaManageHistoryService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-批量删除") + @ApiOperation(value="OTA管理列表历史记录-批量删除", notes="OTA管理列表历史记录-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.otaManageHistoryService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理列表历史记录-通过id查询") + @ApiOperation(value="OTA管理列表历史记录-通过id查询", notes="OTA管理列表历史记录-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + OtaManageHistory otaManageHistory = otaManageHistoryService.queryById(id); + if(otaManageHistory==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(otaManageHistory); + } + + /** + * 导出excel + * + * @param request + * @param otaManageHistory + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, OtaManageHistory otaManageHistory) { + return super.exportXls(request, otaManageHistory, OtaManageHistory.class, "OTA管理列表历史记录"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, OtaManageHistory.class); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManagePermissionController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManagePermissionController.java new file mode 100644 index 000000000..a43edf15d --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManagePermissionController.java @@ -0,0 +1,170 @@ +package com.jero.modules.ota.controller; + +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.ota.entity.OtaManagePermission; +import com.jero.modules.ota.service.IOtaManagePermissionService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.jero.common.aspect.annotation.AutoLog; + + + /** + * @Description: OTA管理权限列表 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +@Api(tags="OTA管理权限列表") +@RestController +@RequestMapping("/ota/otaManagePermission") +@Slf4j +public class OtaManagePermissionController extends JeroController { + @Autowired + private IOtaManagePermissionService otaManagePermissionService; + + /** + * 分页列表查询 + * + * @param otaManagePermission + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "OTA管理权限列表-分页列表查询") + @ApiOperation(value="OTA管理权限列表-分页列表查询", notes="OTA管理权限列表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(OtaManagePermission otaManagePermission, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(otaManagePermission, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = otaManagePermissionService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "OTA管理权限列表-列表查询") + @ApiOperation(value="OTA管理权限列表-列表查询", notes="OTA管理权限列表-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = otaManagePermissionService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param otaManagePermission + * @return + */ + @AutoLog(value = "OTA管理权限列表-添加") + @ApiOperation(value="OTA管理权限列表-添加", notes="OTA管理权限列表-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody OtaManagePermission otaManagePermission) { + otaManagePermissionService.add(otaManagePermission); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param otaManagePermission + * @return + */ + @AutoLog(value = "OTA管理权限列表-编辑") + @ApiOperation(value="OTA管理权限列表-编辑", notes="OTA管理权限列表-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody OtaManagePermission otaManagePermission) { + otaManagePermissionService.editById(otaManagePermission); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理权限列表-通过id删除") + @ApiOperation(value="OTA管理权限列表-通过id删除", notes="OTA管理权限列表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + otaManagePermissionService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "OTA管理权限列表-批量删除") + @ApiOperation(value="OTA管理权限列表-批量删除", notes="OTA管理权限列表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.otaManagePermissionService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理权限列表-通过id查询") + @ApiOperation(value="OTA管理权限列表-通过id查询", notes="OTA管理权限列表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + OtaManagePermission otaManagePermission = otaManagePermissionService.queryById(id); + if(otaManagePermission==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(otaManagePermission); + } + + /** + * 导出excel + * + * @param request + * @param otaManagePermission + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, OtaManagePermission otaManagePermission) { + return super.exportXls(request, otaManagePermission, OtaManagePermission.class, "OTA管理权限列表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, OtaManagePermission.class); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageReceiveController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageReceiveController.java new file mode 100644 index 000000000..95ce9ffe4 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageReceiveController.java @@ -0,0 +1,170 @@ +package com.jero.modules.ota.controller; + +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.ota.entity.OtaManageReceive; +import com.jero.modules.ota.service.IOtaManageReceiveService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.jero.common.aspect.annotation.AutoLog; + + + /** + * @Description: OTA管理 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +@Api(tags="OTA管理") +@RestController +@RequestMapping("/ota/otaManageReceive") +@Slf4j +public class OtaManageReceiveController extends JeroController { + @Autowired + private IOtaManageReceiveService otaManageReceiveService; + + /** + * 分页列表查询 + * + * @param otaManageReceive + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "OTA管理-分页列表查询") + @ApiOperation(value="OTA管理-分页列表查询", notes="OTA管理-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(OtaManageReceive otaManageReceive, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(otaManageReceive, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = otaManageReceiveService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "OTA管理-列表查询") + @ApiOperation(value="OTA管理-列表查询", notes="OTA管理-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = otaManageReceiveService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param otaManageReceive + * @return + */ + @AutoLog(value = "OTA管理-添加") + @ApiOperation(value="OTA管理-添加", notes="OTA管理-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody OtaManageReceive otaManageReceive) { + otaManageReceiveService.add(otaManageReceive); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param otaManageReceive + * @return + */ + @AutoLog(value = "OTA管理-编辑") + @ApiOperation(value="OTA管理-编辑", notes="OTA管理-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody OtaManageReceive otaManageReceive) { + otaManageReceiveService.editById(otaManageReceive); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理-通过id删除") + @ApiOperation(value="OTA管理-通过id删除", notes="OTA管理-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + otaManageReceiveService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "OTA管理-批量删除") + @ApiOperation(value="OTA管理-批量删除", notes="OTA管理-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.otaManageReceiveService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理-通过id查询") + @ApiOperation(value="OTA管理-通过id查询", notes="OTA管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + OtaManageReceive otaManageReceive = otaManageReceiveService.queryById(id); + if(otaManageReceive==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(otaManageReceive); + } + + /** + * 导出excel + * + * @param request + * @param otaManageReceive + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, OtaManageReceive otaManageReceive) { + return super.exportXls(request, otaManageReceive, OtaManageReceive.class, "OTA管理"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, OtaManageReceive.class); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageReceiveNsdpController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageReceiveNsdpController.java new file mode 100644 index 000000000..c01815aec --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/controller/OtaManageReceiveNsdpController.java @@ -0,0 +1,170 @@ +package com.jero.modules.ota.controller; + +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.ota.entity.OtaManageReceiveNsdp; +import com.jero.modules.ota.service.IOtaManageReceiveNsdpService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.jero.common.aspect.annotation.AutoLog; + + + /** + * @Description: OTA管理NSDP同步表 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +@Api(tags="OTA管理NSDP同步表") +@RestController +@RequestMapping("/ota/otaManageReceiveNsdp") +@Slf4j +public class OtaManageReceiveNsdpController extends JeroController { + @Autowired + private IOtaManageReceiveNsdpService otaManageReceiveNsdpService; + + /** + * 分页列表查询 + * + * @param otaManageReceiveNsdp + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-分页列表查询") + @ApiOperation(value="OTA管理NSDP同步表-分页列表查询", notes="OTA管理NSDP同步表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(OtaManageReceiveNsdp otaManageReceiveNsdp, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(otaManageReceiveNsdp, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = otaManageReceiveNsdpService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-列表查询") + @ApiOperation(value="OTA管理NSDP同步表-列表查询", notes="OTA管理NSDP同步表-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = otaManageReceiveNsdpService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param otaManageReceiveNsdp + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-添加") + @ApiOperation(value="OTA管理NSDP同步表-添加", notes="OTA管理NSDP同步表-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody OtaManageReceiveNsdp otaManageReceiveNsdp) { + otaManageReceiveNsdpService.add(otaManageReceiveNsdp); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param otaManageReceiveNsdp + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-编辑") + @ApiOperation(value="OTA管理NSDP同步表-编辑", notes="OTA管理NSDP同步表-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody OtaManageReceiveNsdp otaManageReceiveNsdp) { + otaManageReceiveNsdpService.editById(otaManageReceiveNsdp); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-通过id删除") + @ApiOperation(value="OTA管理NSDP同步表-通过id删除", notes="OTA管理NSDP同步表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + otaManageReceiveNsdpService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-批量删除") + @ApiOperation(value="OTA管理NSDP同步表-批量删除", notes="OTA管理NSDP同步表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.otaManageReceiveNsdpService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "OTA管理NSDP同步表-通过id查询") + @ApiOperation(value="OTA管理NSDP同步表-通过id查询", notes="OTA管理NSDP同步表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + OtaManageReceiveNsdp otaManageReceiveNsdp = otaManageReceiveNsdpService.queryById(id); + if(otaManageReceiveNsdp==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(otaManageReceiveNsdp); + } + + /** + * 导出excel + * + * @param request + * @param otaManageReceiveNsdp + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, OtaManageReceiveNsdp otaManageReceiveNsdp) { + return super.exportXls(request, otaManageReceiveNsdp, OtaManageReceiveNsdp.class, "OTA管理NSDP同步表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, OtaManageReceiveNsdp.class); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageApplyEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageApplyEO.java new file mode 100644 index 000000000..5408c129a --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageApplyEO.java @@ -0,0 +1,219 @@ +package com.jero.modules.ota.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.modules.ota.vo.VersionVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * @Description: 数据对接表 + * @Author: jero-boot + * @Date: 2023-08-09 + * @Version: V1.0 + */ +@Data +@TableName("ota_manage_apply") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ota_manage_apply对象", description="数据对接表") +public class OtaManageApplyEO implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; + + @ApiModelProperty(value = "VDR") + private java.lang.String vdr; + + /**项目版本*/ + @Excel(name = "项目版本", width = 15) + @ApiModelProperty(value = "项目版本-id") + private java.lang.String projectVersion; + + /**认证进度*/ + @Excel(name = "认证进度", width = 15) + @ApiModelProperty(value = "认证进度") + private java.lang.String attestationSchedule; + + /**匹配状态*/ + @Excel(name = "匹配状态", width = 15) + @ApiModelProperty(value = "匹配状态") + private java.lang.String matchStatus; + + @TableField(exist = false) + @ApiModelProperty(value = "匹配状态显示文字") + private java.lang.String matchStatusText; + + /**备注*/ + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private java.lang.String remark; + + + /**适用车型*/ + @Excel(name = "适用车型", width = 15) + @ApiModelProperty(value = "适用车型") + private java.lang.String vehicleType; + //-------------------------------------------------------- + + @TableField(exist = false) + @ApiModelProperty(value = "软件版本") + private java.lang.String plannedBpLaunchBatch; + + @TableField(exist = false) + @ApiModelProperty(value = "适用车型") + private java.lang.String appliedVehicleProject; + + + @TableField(exist = false) + @ApiModelProperty(value = "市场") + private java.lang.String market; + + @TableField(exist = false) + @ApiModelProperty(value = "软件发布时间") + private String releaseDate; + + @TableField(exist = false) + @ApiModelProperty(value = "软件发布时间") + private java.util.Date releaseNameDate; + + @TableField(exist = false) + @ApiModelProperty(value = "软件发布时间-开始") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + private java.util.Date softwareIssueTimeStart; + + @TableField(exist = false) + @ApiModelProperty(value = "软件发布时间-结束") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + private java.util.Date softwareIssueTimeEnd; + + @TableField(exist = false) + @ApiModelProperty(value = "主题") + private java.lang.String summary; + + @TableField(exist = false) + @ApiModelProperty(value = "VDR状态") + private java.lang.String status; + + @TableField(exist = false) + @ApiModelProperty(value = "认证影响") + private java.lang.String homologationImpact; + + @TableField(exist = false) + @ApiModelProperty(value = "影响描述") + private java.lang.String homologation; + + @TableField(exist = false) + @ApiModelProperty(value = "影响法规-CN") + private java.lang.String impactCnHomo; + + @TableField(exist = false) + @ApiModelProperty(value = "影响法规-EU") + private java.lang.String impactEuHomo; + + @TableField(exist = false) + @ApiModelProperty(value = "影响法规-查询条件") + private java.lang.String impactHomo; + + @TableField(exist = false) + @ApiModelProperty(value = "责任部门") + private java.lang.String masterDomain; + + @TableField(exist = false) + @ApiModelProperty(value = "R&H Studio") + private java.lang.String studio; + + @TableField(exist = false) + @ApiModelProperty(value = "R&H Studio中文名") + private java.lang.String studioText; + + @TableField(exist = false) + @ApiModelProperty(value = "认证开始") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date attestationStartTime; + + @TableField(exist = false) + @ApiModelProperty(value = "认证申报") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date certificationSubmission; + + @TableField(exist = false) + @ApiModelProperty(value = "认证批准") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date attestationEndTime; + + @TableField(exist = false) + @ApiModelProperty(value = "项目版本下拉选项") + private List versionVOList; + + @ApiModelProperty(value = "项目版本-中文") + @TableField(exist = false) + private java.lang.String projectVersionText; + + @ApiModelProperty(value = "是否禁用版本和进度编辑") + @TableField(exist = false) + private boolean disabled; + + @TableField(exist = false) + @ApiModelProperty(value = "表头排序字段") + private java.lang.String orderByField; + + @TableField(exist = false) + @ApiModelProperty(value = "排序") + private java.lang.String orderBy; + + @TableField(exist = false) + @ApiModelProperty(value = "导出文件名") + private String exportName; + + @TableField(exist = false) + @ApiModelProperty(value = "中英文切换") + private String cut; + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageHistory.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageHistory.java new file mode 100644 index 000000000..7a7730941 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageHistory.java @@ -0,0 +1,85 @@ +package com.jero.modules.ota.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: OTA管理列表历史记录 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +@Data +@TableName("ota_manage_history") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ota_manage_history对象", description="OTA管理列表历史记录") +public class OtaManageHistory implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + + /**关联applyID*/ + @Excel(name = "关联applyID", width = 15) + @ApiModelProperty(value = "关联applyID") + private String applyId; + + /**操作记录cn*/ + @Excel(name = "操作记录cn", width = 15) + @ApiModelProperty(value = "操作记录cn") + private String contentCn; + + /**操作记录en*/ + @Excel(name = "操作记录en", width = 15) + @ApiModelProperty(value = "操作记录en") + private String contentEn; + + + @TableField(exist = false) + @ApiModelProperty(value = "操作记录") + private String content; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManagePermission.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManagePermission.java new file mode 100644 index 000000000..bdfd2c301 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManagePermission.java @@ -0,0 +1,74 @@ +package com.jero.modules.ota.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: OTA管理权限列表 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +@Data +@TableName("ota_manage_permission") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ota_manage_permission对象", description="OTA管理权限列表") +public class OtaManagePermission implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + + /**人员ID*/ + @Excel(name = "人员ID", width = 15) + @ApiModelProperty(value = "人员ID") + private String userId; + + /**对应applyID*/ + @Excel(name = "对应applyID", width = 15) + @ApiModelProperty(value = "对应applyID") + private String applyId; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceive.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceive.java new file mode 100644 index 000000000..87712f25e --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceive.java @@ -0,0 +1,121 @@ +package com.jero.modules.ota.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: OTA管理 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +@Data +@TableName("ota_manage_receive") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ota_manage_receive对象", description="OTA管理") +public class OtaManageReceive implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + + /**软件版本*/ + @Excel(name = "软件版本", width = 15) + @ApiModelProperty(value = "软件版本") + private String plannedBpLaunchBatch; + + /**更新时间(yyyyMMdd)*/ + @Excel(name = "更新时间(yyyyMMdd)", width = 15) + @ApiModelProperty(value = "更新时间(yyyyMMdd)") + private String updateDate; + + /**主题*/ + @Excel(name = "主题", width = 15) + @ApiModelProperty(value = "主题") + private String summary; + + /**VDR状态*/ + @Excel(name = "VDR状态", width = 15) + @ApiModelProperty(value = "VDR状态") + private String status; + + /**认证影响*/ + @Excel(name = "认证影响", width = 15) + @ApiModelProperty(value = "认证影响") + private String homologationImpact; + + /**影响描述*/ + @Excel(name = "影响描述", width = 15) + @ApiModelProperty(value = "影响描述") + private String homologation; + + /**影响法规-CN*/ + @Excel(name = "影响法规-CN", width = 15) + @ApiModelProperty(value = "影响法规-CN") + private String impactCnHomo; + + /**影响法规-EU*/ + @Excel(name = "影响法规-EU", width = 15) + @ApiModelProperty(value = "影响法规-EU") + private String impactEuHomo; + + /**责任部门*/ + @Excel(name = "责任部门", width = 15) + @ApiModelProperty(value = "责任部门") + private String masterDomain; + + /**适用车型*/ + @Excel(name = "适用车型", width = 15) + @ApiModelProperty(value = "适用车型") + private String appliedVehicleProject; + + /**发布时间*/ + @Excel(name = "发布时间", width = 15) + @ApiModelProperty(value = "发布时间") + private String releaseDate; + + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceiveNsdp.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceiveNsdp.java new file mode 100644 index 000000000..c4d1c3a8a --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceiveNsdp.java @@ -0,0 +1,96 @@ +package com.jero.modules.ota.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: OTA管理NSDP同步表 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +@Data +@TableName("ota_manage_receive_nsdp") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ota_manage_receive_nsdp对象", description="OTA管理NSDP同步表") +public class OtaManageReceiveNsdp implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + + /**平台*/ + @Excel(name = "平台", width = 15) + @ApiModelProperty(value = "平台") + private String platformName; + + /**发布版本*/ + @Excel(name = "发布版本", width = 15) + @ApiModelProperty(value = "发布版本") + private String releaseName; + + /**发布类型*/ + @Excel(name = "发布类型", width = 15) + @ApiModelProperty(value = "发布类型") + private String releaseType; + + /**名称*/ + @Excel(name = "名称", width = 15) + @ApiModelProperty(value = "名称") + private String dateName; + + /**发布时间*/ + @Excel(name = "发布时间", width = 15) + @ApiModelProperty(value = "发布时间") + private String releaseDate; + + /**创建时间*/ + @Excel(name = "创建时间", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "创建时间") + private java.util.Date createdAt; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceiveNsdpEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceiveNsdpEO.java new file mode 100644 index 000000000..264cd6d96 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/entity/OtaManageReceiveNsdpEO.java @@ -0,0 +1,17 @@ +package com.jero.modules.ota.entity; + +import lombok.Data; + +/** + * @description + * @date 2023/8/17 18:38 + * @auth zhn + */ +@Data +public class OtaManageReceiveNsdpEO { + //软件版本 + private String releaseName; + + //发布时间 + private String releaseDate; +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaCarEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaCarEnum.java new file mode 100644 index 000000000..58c3cb394 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaCarEnum.java @@ -0,0 +1,47 @@ +package com.jero.modules.ota.enums; + +import java.util.ArrayList; +import java.util.List; + +public enum OtaCarEnum { + + + ALL("All", "All"), + CN_ALL("CN All", "EU All"), + EU_ALL("EU All", "EU All"); + + String name; + String value; + + OtaCarEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + + + public static List getOtaNameList() { + List nameList = new ArrayList<>(); + for (OtaCarEnum e : values()) { + nameList.add(e.getName()); + } + return nameList; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaHomoImpactEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaHomoImpactEnum.java new file mode 100644 index 000000000..5062ae15f --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaHomoImpactEnum.java @@ -0,0 +1,39 @@ +package com.jero.modules.ota.enums; + +import java.util.ArrayList; +import java.util.List; + +public enum OtaHomoImpactEnum { + + YES("Yes", "Yes"), + INTER_VALID("Internal Validation", "Internal Validation"), + HOMOEX_RETEST("Homo Extension - Retest", "Homo Extension - Retest"), + HOMOEX_PAPERWORK("Homo Extension - Paperwork", "Homo Extension - Paperwork"); + + String name; + String value; + + OtaHomoImpactEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaStatusEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaStatusEnum.java new file mode 100644 index 000000000..3bff8c564 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/enums/OtaStatusEnum.java @@ -0,0 +1,60 @@ +package com.jero.modules.ota.enums; + +import org.apache.commons.lang3.StringUtils; + +public enum OtaStatusEnum { + + //待匹配、待审批、锁定、退回、待重新匹配 + + TO_BE_MATCHED("to_be_matched", "待匹配","To be matched"), + TO_BE_APPROVED("to_be_approved", "待审批","To be approved"), + LOCKED("locked", "锁定","Locked"), + REJECTED("rejected", "退回","Rejected"), + TO_BE_REMATCHED("to_be_rematched", "待重新匹配","To be rematched"), + NA("--", "--","--"); + + String key; + String nameCN; + String nameEN; + + OtaStatusEnum(String key, String nameCN,String nameEN) { + this.key = key; + this.nameCN = nameCN; + this.nameEN = nameEN; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getNameCN() { + return nameCN; + } + + public void setNameCN(String nameCN) { + this.nameCN = nameCN; + } + + public String getNameEN() { + return nameEN; + } + + public void setNameEN(String nameEN) { + this.nameEN = nameEN; + } + + public static OtaStatusEnum getByKey(String key){ + String result = ""; + for (OtaStatusEnum enu : OtaStatusEnum.values()) { + if(StringUtils.equals(enu.key,key)){ + return enu; + } + } + return OtaStatusEnum.NA; + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/job/OtaDataUpdate.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/job/OtaDataUpdate.java new file mode 100644 index 000000000..a8120b94c --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/job/OtaDataUpdate.java @@ -0,0 +1,211 @@ +package com.jero.modules.ota.job; + +import com.jero.modules.ota.entity.OtaManageReceive; +import com.jero.modules.ota.entity.OtaManageReceiveNsdp; +import com.jero.modules.ota.service.IOtaManageReceiveNsdpService; +import com.jero.modules.ota.service.IOtaManageReceiveService; +import com.jero.modules.system.util.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +public class OtaDataUpdate implements Job { + + @Autowired + private IOtaManageReceiveService otaManageReceiveService; + @Autowired + private IOtaManageReceiveNsdpService otaManageReceiveNsdpService; + + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + /** + * OTA数据更新 + * + * @param jobExecutionContext + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + List omrSyncList = otaManageReceiveService.getReceiveSync(); + List omrList = otaManageReceiveService.queryList(); + + List addList = new ArrayList<>(); + List delList = new ArrayList<>(); + List updateList = new ArrayList<>(); + + for (OtaManageReceive omr : omrList) { + boolean delFlag = true; + for (OtaManageReceive omrSync : omrSyncList) { + if (omr.getId().equals(omrSync.getId())) { + delFlag = false; + if (!compareReceive(omr, omrSync)) { + updateList.add(omrSync); + } + } + } + if (delFlag) { + //同步数据中被删除 + delList.add(omr.getId()); + } + } + + for (OtaManageReceive omrSync : omrSyncList) { + boolean addFlag = true; + for (OtaManageReceive omr : omrList) { + if (omr.getId().equals(omrSync.getId())) { + addFlag = false; + } + } + if (addFlag) { + //同步数据中新增 + addList.add(omrSync); + } + } + if (CollectionUtils.isNotEmpty(addList)) { + otaManageReceiveService.saveBatch(addList); + } + if (CollectionUtils.isNotEmpty(addList)) { + otaManageReceiveService.deleteByIds(delList); + } + if (CollectionUtils.isNotEmpty(updateList)) { + otaManageReceiveService.updateBatchById(updateList); + } + + + List omrnSyncList = otaManageReceiveNsdpService.getOtaManageReceiveNsdpSync(); + List omrnList = otaManageReceiveNsdpService.queryList(); + + List addNsdpList = new ArrayList<>(); + List delNsdpList = new ArrayList<>(); + List updateNsdpList = new ArrayList<>(); + + for (OtaManageReceiveNsdp omrn : omrnList) { + boolean delFlag = true; + for (OtaManageReceiveNsdp omrnSync : omrnSyncList) { + if (omrn.getId().equals(omrnSync.getId())) { + delFlag = false; + if (!compareReceive(omrn, omrnSync)) { + updateNsdpList.add(omrnSync); + } + } + } + if (delFlag) { + //同步数据中被删除 + delNsdpList.add(omrn.getId()); + } + } + + Map releaceDateMap = new HashMap<>(); + Date today = new Date(); + + for (OtaManageReceiveNsdp omrnSync : omrnSyncList) { + boolean addFlag = true; + for (OtaManageReceiveNsdp omrn : omrnList) { + if (omrn.getId().equals(omrnSync.getId())) { + addFlag = false; + } + } + if (addFlag) { + //同步数据中新增 + addNsdpList.add(omrnSync); + } + //找到最快来临的发布时间 + Date releaceDate = releaceDateMap.get(omrnSync.getReleaseName()); + try { + Date syncDate = sdf.parse(omrnSync.getReleaseDate()); + if (null == releaceDate) { + releaceDateMap.put(omrnSync.getReleaseName(), syncDate); + } else { + if (syncDate.after(today) && syncDate.before(releaceDate)) { + releaceDateMap.put(omrnSync.getReleaseName(), syncDate); + } + } + } catch (ParseException e) { + e.printStackTrace(); + } + } + + if (CollectionUtils.isNotEmpty(addNsdpList)) { + otaManageReceiveNsdpService.saveBatch(addNsdpList); + } + if (CollectionUtils.isNotEmpty(delNsdpList)) { + otaManageReceiveNsdpService.deleteByIds(delNsdpList); + } + if (CollectionUtils.isNotEmpty(updateNsdpList)) { + otaManageReceiveNsdpService.updateBatchById(updateNsdpList); + } + + + List dateUpdateList = new ArrayList<>(); + List omrListForDate = otaManageReceiveService.queryList(); + for (OtaManageReceive omr : omrListForDate) { + if(releaceDateMap.containsKey(omr.getPlannedBpLaunchBatch())){ + omr.setReleaseDate(sdf.format(releaceDateMap.get(omr.getPlannedBpLaunchBatch()))); + dateUpdateList.add(omr); + } + } + if (CollectionUtils.isNotEmpty(dateUpdateList)) { + otaManageReceiveService.updateBatchById(dateUpdateList); + } + } + + private boolean compareReceive(OtaManageReceiveNsdp omrn, OtaManageReceiveNsdp omrnSync) { + if (!StringUtils.equals(omrn.getPlatformName(), omrnSync.getPlatformName())) { + return false; + } + if (!StringUtils.equals(omrn.getReleaseName(), omrnSync.getReleaseName())) { + return false; + } + if (!StringUtils.equals(omrn.getReleaseType(), omrnSync.getReleaseType())) { + return false; + } + if (!StringUtils.equals(omrn.getDateName(), omrnSync.getDateName())) { + return false; + } + if (!StringUtils.equals(omrn.getReleaseDate(), omrnSync.getReleaseDate())) { + return false; + } + return true; + } + + private boolean compareReceive(OtaManageReceive omr, OtaManageReceive omrSync) { + if (!StringUtils.equals(omr.getPlannedBpLaunchBatch(), omrSync.getPlannedBpLaunchBatch())) { + return false; + } + if (!StringUtils.equals(omr.getSummary(), omrSync.getSummary())) { + return false; + } + if (!StringUtils.equals(omr.getStatus(), omrSync.getStatus())) { + return false; + } + if (!StringUtils.equals(omr.getHomologationImpact(), omrSync.getHomologationImpact())) { + return false; + } + if (!StringUtils.equals(omr.getHomologation(), omrSync.getHomologation())) { + return false; + } + if (!StringUtils.equals(omr.getImpactCnHomo(), omrSync.getImpactCnHomo())) { + return false; + } + if (!StringUtils.equals(omr.getImpactEuHomo(), omrSync.getImpactEuHomo())) { + return false; + } + if (!StringUtils.equals(omr.getMasterDomain(), omrSync.getMasterDomain())) { + return false; + } + if (!StringUtils.equals(omr.getAppliedVehicleProject(), omrSync.getAppliedVehicleProject())) { + return false; + } + return true; + } + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageApplyEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageApplyEOMapper.java new file mode 100644 index 000000000..6a2513245 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageApplyEOMapper.java @@ -0,0 +1,43 @@ +package com.jero.modules.ota.mapper; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.modules.ota.entity.OtaManageReceiveNsdpEO; +import com.jero.modules.ota.vo.VersionVO; +import org.apache.ibatis.annotations.Param; +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.pptx4j.pml.STTLTriggerRuntimeNode; + +import java.util.List; + +/** + * @Description: 数据对接表 + * @Author: jero-boot + * @Date: 2023-08-09 + * @Version: V1.0 + */ +public interface OtaManageApplyEOMapper extends BaseMapper { + +// Page getOtaPage(Page page, @Param("otaManageApplyEO") OtaManageApplyEO otaManageApplyEO); + List getOtaList(@Param("otaManageApplyEO") OtaManageApplyEO otaManageApplyEO); + + /** + * 分车型列表-分页列表查询 + * @param otaManageApplyEO + * @return + */ + List getOtaCarPage(@Param("otaManageApplyEO") OtaManageApplyEO otaManageApplyEO); + + List getByAppliedVehicleProject(@Param("appliedVehicleProject") String appliedVehicleProject); + + List getOtaCarList(@Param("plannedBpLaunchBatch") String plannedBpLaunchBatch); + + List getReleaseDate(@Param("plannedBpLaunchBatchList") List plannedBpLaunchBatchList); + + List getProjectVersion(@Param("car") String car, @Param("market") String market); + + List getVersionInfo(@Param("vdr") String vdr); + + List getListByProjectId(@Param("projectId") String projectId,@Param("plannedBpLaunchBatch") String plannedBpLaunchBatch); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageHistoryMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageHistoryMapper.java new file mode 100644 index 000000000..dd380419d --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageHistoryMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.ota.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.ota.entity.OtaManageHistory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: OTA管理列表历史记录 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +public interface OtaManageHistoryMapper extends BaseMapper { + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManagePermissionMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManagePermissionMapper.java new file mode 100644 index 000000000..2586bd800 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManagePermissionMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.ota.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.ota.entity.OtaManagePermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: OTA管理权限列表 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +public interface OtaManagePermissionMapper extends BaseMapper { + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageReceiveMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageReceiveMapper.java new file mode 100644 index 000000000..68deba413 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageReceiveMapper.java @@ -0,0 +1,21 @@ +package com.jero.modules.ota.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.ota.entity.OtaManageReceive; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: OTA管理 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +public interface OtaManageReceiveMapper extends BaseMapper { + List getReceiveByVdr(@Param("vdrList") List vdrList); + + List getReceiveList(); + List getReceiveSync(); + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageReceiveNsdpMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageReceiveNsdpMapper.java new file mode 100644 index 000000000..629945995 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/OtaManageReceiveNsdpMapper.java @@ -0,0 +1,19 @@ +package com.jero.modules.ota.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.ota.entity.OtaManageReceiveNsdp; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: OTA管理NSDP同步表 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +public interface OtaManageReceiveNsdpMapper extends BaseMapper { + + List getOtaManageReceiveNsdpSync(); + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageApplyEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageApplyEOMapper.xml new file mode 100644 index 000000000..e0b2200c3 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageApplyEOMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageHistoryMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageHistoryMapper.xml new file mode 100644 index 000000000..cb0bdd8b2 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageHistoryMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManagePermissionMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManagePermissionMapper.xml new file mode 100644 index 000000000..968d254a8 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManagePermissionMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageReceiveMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageReceiveMapper.xml new file mode 100644 index 000000000..eced34af0 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageReceiveMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageReceiveNsdpMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageReceiveNsdpMapper.xml new file mode 100644 index 000000000..79e66dee0 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/mapper/xml/OtaManageReceiveNsdpMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageApplyEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageApplyEOService.java new file mode 100644 index 000000000..45220cbb6 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageApplyEOService.java @@ -0,0 +1,137 @@ +package com.jero.modules.ota.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.jero.modules.ota.vo.VersionVO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * @Description: 数据对接表 + * @Author: jero-boot + * @Date: 2023-08-09 + * @Version: V1.0 + */ +public interface IOtaManageApplyEOService extends IService { + + /** + * 保存 + * + * @param otaManageApplyEO + * @return + */ + void add(OtaManageApplyEO otaManageApplyEO); + + /** + * 更新 + * + * @param otaManageApplyEO + * @return + */ + void editById(OtaManageApplyEO otaManageApplyEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过适用车型查询 + * + * @param appliedVehicleProject + * @return + */ + List getByAppliedVehicleProject(String appliedVehicleProject); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + /** + * OTA管理列表 + * @param otaManageApplyEO + * @return + */ + List getOtaPage(OtaManageApplyEO otaManageApplyEO); + + /** + * 全车型列表-分页列表查询 + * @param otaManageApplyEO + * @return + */ + List getAllCarPage(OtaManageApplyEO otaManageApplyEO); + + /** + * 分车型列表-分页列表查询 + * @param otaManageApplyEO + * @return + */ + List getOtaCarPage(OtaManageApplyEO otaManageApplyEO,String cut); + /** + * 下拉数据-软件版本,适用车型,市场 + * @return + */ + Map getPullDownList(); + + /** + 下拉数据-全部和分车型(不含年款) + * @return + */ + List getCarList(String cut,String plannedBpLaunchBatch); + + /** + * + * @param carMarket + * @return + */ + List getProjectVersionList(String carMarket,String cut); + + /** + * 全车型和分车型详情 + * @param vdr + * @return + */ + List getVersionInfo(String vdr,String car,String cut); + + void issueNotice(String id); + + List submit(List list, String cut); + + void temporarySave(List list, String cut); + + List updateVdrBatch(List list, String projectVersion, String attestationSchedule, String remark, String cut); + + List applyRematch(String ids, String projectVersion,String cut); + + List confirm(String ids, String cut); + + List reject(String ids, String rejectReason,String cut); + + List getVdrListByProject(String projectId, String cut); + + List> getStatisticalStatus(String projectId, String plannedBpLaunchBatch, String cut,List projectLibraryBaseList); + + ModelAndView otaExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO); + + ModelAndView allCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO); + + ModelAndView oneCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageHistoryService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageHistoryService.java new file mode 100644 index 000000000..2afa9fbea --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageHistoryService.java @@ -0,0 +1,64 @@ +package com.jero.modules.ota.service; + +import com.jero.modules.ota.entity.OtaManageHistory; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: OTA管理列表历史记录 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +public interface IOtaManageHistoryService extends IService { + + /** + * 保存 + * + * @param otaManageHistory + * @return + */ + void add(OtaManageHistory otaManageHistory); + + + void add(String appId,String contentCn, String contentEn); + + /** + * 更新 + * + * @param otaManageHistory + * @return + */ + void editById(OtaManageHistory otaManageHistory); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + OtaManageHistory queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManagePermissionService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManagePermissionService.java new file mode 100644 index 000000000..1a1a5ab1e --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManagePermissionService.java @@ -0,0 +1,61 @@ +package com.jero.modules.ota.service; + +import com.jero.modules.ota.entity.OtaManagePermission; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: OTA管理权限列表 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +public interface IOtaManagePermissionService extends IService { + + /** + * 保存 + * + * @param otaManagePermission + * @return + */ + void add(OtaManagePermission otaManagePermission); + + /** + * 更新 + * + * @param otaManagePermission + * @return + */ + void editById(OtaManagePermission otaManagePermission); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + OtaManagePermission queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageReceiveNsdpService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageReceiveNsdpService.java new file mode 100644 index 000000000..1e4ffbc38 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageReceiveNsdpService.java @@ -0,0 +1,64 @@ +package com.jero.modules.ota.service; + +import com.jero.modules.ota.entity.OtaManageReceiveNsdp; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: OTA管理NSDP同步表 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +public interface IOtaManageReceiveNsdpService extends IService { + + /** + * 保存 + * + * @param otaManageReceiveNsdp + * @return + */ + void add(OtaManageReceiveNsdp otaManageReceiveNsdp); + + /** + * 更新 + * + * @param otaManageReceiveNsdp + * @return + */ + void editById(OtaManageReceiveNsdp otaManageReceiveNsdp); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + OtaManageReceiveNsdp queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + + List getOtaManageReceiveNsdpSync(); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageReceiveService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageReceiveService.java new file mode 100644 index 000000000..765eb5aed --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/IOtaManageReceiveService.java @@ -0,0 +1,70 @@ +package com.jero.modules.ota.service; + +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.jero.modules.ota.entity.OtaManageReceive; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: OTA管理 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +public interface IOtaManageReceiveService extends IService { + + /** + * 保存 + * + * @param otaManageReceive + * @return + */ + void add(OtaManageReceive otaManageReceive); + + /** + * 更新 + * + * @param otaManageReceive + * @return + */ + void editById(OtaManageReceive otaManageReceive); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + OtaManageReceive queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + List getReceiveByVdr(List vdrList); + + List getReceiveByplanned(String plannedBpLaunchBatch); + + List getReceiveSync(); + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageApplyEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageApplyEOServiceImpl.java new file mode 100644 index 000000000..c9c7f0af8 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageApplyEOServiceImpl.java @@ -0,0 +1,1926 @@ +package com.jero.modules.ota.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.constant.enums.CutEnum; +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.DateUtils; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.dummy.enums.OrderEnum; +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.jero.modules.ota.entity.OtaManageHistory; +import com.jero.modules.ota.entity.OtaManagePermission; +import com.jero.modules.ota.entity.OtaManageReceive; +import com.jero.modules.ota.enums.OtaCarEnum; +import com.jero.modules.ota.enums.OtaHomoImpactEnum; +import com.jero.modules.ota.enums.OtaStatusEnum; +import com.jero.modules.ota.mapper.OtaManageApplyEOMapper; +import com.jero.modules.ota.service.IOtaManageApplyEOService; +import com.jero.modules.ota.service.IOtaManageHistoryService; +import com.jero.modules.ota.service.IOtaManagePermissionService; +import com.jero.modules.ota.service.IOtaManageReceiveService; +import com.jero.modules.ota.vo.AllCarExportCnVO; +import com.jero.modules.ota.vo.AllCarExportEnVO; +import com.jero.modules.ota.vo.OneCarExportCnVO; +import com.jero.modules.ota.vo.OneCarExportEnVO; +import com.jero.modules.ota.vo.OtaExportCnVO; +import com.jero.modules.ota.vo.OtaExportEnVO; +import com.jero.modules.ota.vo.VersionVO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectNameInfoEO; +import com.jero.modules.project.entity.ProjectTaskPlanning; +import com.jero.modules.project.enums.CertificationProgressEnum; +import com.jero.modules.project.enums.ComplianceFlowStatusEnum; +import com.jero.modules.project.service.IProjectLibraryBaseService; +import com.jero.modules.project.service.impl.ProjectNameInfoEOServiceImpl; +import com.jero.modules.project.service.impl.ProjectTaskPlanningServiceImpl; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.entity.SysUserRole; +import com.jero.modules.system.enums.DicCodeEnum; +import com.jero.modules.system.enums.RoleEnum; +import com.jero.modules.system.mapper.SysUserRoleMapper; +import com.jero.modules.system.service.ISysDictService; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.system.service.impl.SysBaseApiImpl; +import com.jero.modules.system.service.impl.SysDictItemServiceImpl; +import com.jero.modules.system.util.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import java.text.Collator; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @Description: 数据对接表 + * @Author: jero-boot + * @Date: 2023-08-09 + * @Version: V1.0 + */ +@Service +public class OtaManageApplyEOServiceImpl extends ServiceImpl implements IOtaManageApplyEOService { + + @Autowired + private ProjectTaskPlanningServiceImpl projectTaskPlanningService; + @Autowired + private SysBaseApiImpl sysBaseApi; + @Autowired + private SysDictItemServiceImpl sysDictItemServiceImpl; + @Autowired + private IProjectLibraryBaseService projectLibraryBaseService; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IOtaManageHistoryService otaManageHistoryService; + @Autowired + private IOtaManageReceiveService otaManageReceiveService; + @Autowired + private IOtaManagePermissionService otaManagePermissionService; + + @Autowired + private ISysDictService sysDictService; + @Autowired + private ProjectNameInfoEOServiceImpl projectNameInfoEOService; + + @Value(value = "${jero.path.upload}") + private String upLoadPath; + + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + + /** + * 保存 + * + * @param otaManageApplyEO + * @return + */ + @Override + public void add(OtaManageApplyEO otaManageApplyEO) { + Date now = new Date(); + otaManageApplyEO.setCreateTime(now); + otaManageApplyEO.setUpdateTime(now); + save(otaManageApplyEO); + } + + /** + * 更新 + * + * @param otaManageApplyEO + * @return + */ + @Override + public void editById(OtaManageApplyEO otaManageApplyEO) { + Date now = new Date(); + otaManageApplyEO.setUpdateTime(now); + saveOrUpdate(otaManageApplyEO); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过适用车型查询 + * + * @param appliedVehicleProject + * @return + */ + @Override + public List getByAppliedVehicleProject(String appliedVehicleProject) { + this.getBaseMapper().getByAppliedVehicleProject(appliedVehicleProject); + + + return new ArrayList<>(); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } + + /** + * OTA管理列表和全车型列表-分页列表查询 + * + * @param otaManageApplyEO + * @return + */ + @Override + public List getOtaPage(OtaManageApplyEO otaManageApplyEO) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + boolean otaManager = isOtaManager(); + List otaManageApplyEOList = this.getBaseMapper().getOtaList(otaManageApplyEO); + List dataList = new ArrayList<>(); + + //去跟manager和studio权限 + if (otaManager) { + dataList = otaManageApplyEOList; + } else { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(OtaManagePermission::getUserId, currentUser.getId()); + List managePermissionList = otaManagePermissionService.list(wrapper); + if (!managePermissionList.isEmpty()) { + List applyIdList = managePermissionList.stream().map(OtaManagePermission::getApplyId).distinct().collect(Collectors.toList()); + List collect = otaManageApplyEOList.stream().filter(e -> applyIdList.contains(e.getPlannedBpLaunchBatch())).collect(Collectors.toList()); + dataList = collect; + } + } + + List result = new ArrayList<>(); + if (!dataList.isEmpty()) { + List otaNameList = OtaCarEnum.getOtaNameList(); + List plannedBpLaunchBatchList = dataList.stream() + .filter(e -> StringUtils.isNotBlank(e.getPlannedBpLaunchBatch())) + .map(OtaManageApplyEO::getPlannedBpLaunchBatch).distinct().collect(Collectors.toList()); + if (!plannedBpLaunchBatchList.isEmpty()) { + for (String plannedBpLaunchBatch : plannedBpLaunchBatchList) { + OtaManageApplyEO manageApplyEO = new OtaManageApplyEO(); + manageApplyEO.setPlannedBpLaunchBatch(plannedBpLaunchBatch); + manageApplyEO.setId(plannedBpLaunchBatch); + + List otaManageApplyEOS = dataList.stream() + .filter(e -> plannedBpLaunchBatch.equals(e.getPlannedBpLaunchBatch())).collect(Collectors.toList()); + if (!otaManageApplyEOS.isEmpty()) { + //发布时间 + manageApplyEO.setReleaseDate(otaManageApplyEOS.get(0).getReleaseDate()); + + List appliedVehicleProjectList = otaManageApplyEOS.stream() + .filter(e -> StringUtils.isNotBlank(e.getAppliedVehicleProject())) + .map(OtaManageApplyEO::getAppliedVehicleProject).collect(Collectors.toList()); + List carList = new ArrayList<>(); + for (String appliedVehicleProject : appliedVehicleProjectList) { + carList.addAll(Arrays.asList(appliedVehicleProject.split(","))); + } + if (!carList.isEmpty()) { + //适用车型 + carList = carList.stream().distinct().collect(Collectors.toList()); + manageApplyEO.setAppliedVehicleProject(StringUtils.join(carList, ",")); + //市场 + for (String appliedVehicleProject : carList) { + Set marketSet = new HashSet<>(); + for (String s : appliedVehicleProject.split(",")) { + String[] split = s.split(" "); + if (split.length == 2) { + if (!otaNameList.contains(s)) { + marketSet.add(split[1]); + } + } else if (split.length == 3) { + if (!otaNameList.contains(s)) { + marketSet.add(split[2]); + } + } + } + if (!marketSet.isEmpty()) { + manageApplyEO.setMarket(StringUtils.join(marketSet, ",")); + } + } + } + } + result.add(manageApplyEO); + } + } + } + if (ObjectUtils.isNotEmpty(otaManageApplyEO.getSoftwareIssueTimeStart())) { + result = result.stream() + .filter(e -> StringUtils.isNotBlank(e.getReleaseDate()) + && (e.getReleaseNameDate().after(otaManageApplyEO.getSoftwareIssueTimeStart()) + || e.getReleaseNameDate().equals(otaManageApplyEO.getSoftwareIssueTimeStart()))).collect(Collectors.toList()); + } + if (ObjectUtils.isNotEmpty(otaManageApplyEO.getSoftwareIssueTimeEnd())) { + result = result.stream().filter(e -> StringUtils.isNotBlank(e.getReleaseDate()) + && (e.getReleaseNameDate().before(otaManageApplyEO.getSoftwareIssueTimeEnd()) + || e.getReleaseNameDate().equals(otaManageApplyEO.getSoftwareIssueTimeEnd()))).collect(Collectors.toList()); + } + if (!result.isEmpty()) { + //表头排序 + heartSort(otaManageApplyEO, result); + } + return result; + } + + /** + * OTA管理列表和全车型列表-分页列表查询 + * + * @param otaManageApplyEO + * @return + */ + @Override + public List getAllCarPage(OtaManageApplyEO otaManageApplyEO) { + List otaManageApplyEOList = this.getBaseMapper().getOtaList(otaManageApplyEO); + //studio数据权限 + if(isStudio()) { + otaManageApplyEOList = getStudioData(otaManageApplyEO, otaManageApplyEOList); + } + if (!otaManageApplyEOList.isEmpty()) { + for (OtaManageApplyEO manageApplyEO : otaManageApplyEOList) { + manageApplyEO.setVdr(manageApplyEO.getId()); + } + //表头排序 + heartSort(otaManageApplyEO, otaManageApplyEOList); + } + return otaManageApplyEOList; + } + + private List getStudioData(OtaManageApplyEO otaManageApplyEO, List otaManageApplyEOList) { + Set set = new HashSet<>(); + List studioCarList = getStudioCarList(otaManageApplyEO.getPlannedBpLaunchBatch()); + for (String carMarket : studioCarList) { + String[] conditionSplit = carMarket.split(" "); + + for (OtaManageApplyEO manageApplyEO : otaManageApplyEOList) { + String appliedVehicleProject = manageApplyEO.getAppliedVehicleProject(); + if (StringUtils.isNotBlank(appliedVehicleProject)) { + String[] appliedVehicleProjectArr = appliedVehicleProject.split(","); + for (String appliedVehicleProjectTemp : appliedVehicleProjectArr) { + String[] split = appliedVehicleProjectTemp.split(" "); + if (split.length == 1) { + set.add(manageApplyEO); + break; + } else if (split.length == 2) { + if (Arrays.equals(conditionSplit, split)) { + set.add(manageApplyEO); + break; + } + } else if (split.length == 3) { + List listTemp = Arrays.asList(split); + List conditionList = Arrays.asList(conditionSplit); + if (listTemp.containsAll(conditionList)) { + set.add(manageApplyEO); + break; + } + } + } + } + } + } + otaManageApplyEOList= new ArrayList<>(set); + return otaManageApplyEOList; + } + + private void heartSort(OtaManageApplyEO otaManageApplyEO, List otaManageApplyEOList) { + Collator comparator = Collator.getInstance(Locale.CHINESE); + // 软件版本, + if ("plannedBpLaunchBatch".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1PlannedBpLaunchBatch = StringUtils.isNotBlank(e1.getPlannedBpLaunchBatch()) ? e1.getPlannedBpLaunchBatch() : ""; + String e2PlannedBpLaunchBatch = StringUtils.isNotBlank(e2.getPlannedBpLaunchBatch()) ? e2.getPlannedBpLaunchBatch() : ""; + return comparator.compare(e1PlannedBpLaunchBatch, e2PlannedBpLaunchBatch); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1PlannedBpLaunchBatch = StringUtils.isNotBlank(e1.getPlannedBpLaunchBatch()) ? e1.getPlannedBpLaunchBatch() : ""; + String e2PlannedBpLaunchBatch = StringUtils.isNotBlank(e2.getPlannedBpLaunchBatch()) ? e2.getPlannedBpLaunchBatch() : ""; + return comparator.compare(e2PlannedBpLaunchBatch, e1PlannedBpLaunchBatch); + }); + } + } + // 市场, + if ("market".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Market = StringUtils.isNotBlank(e1.getMarket()) ? e1.getMarket() : ""; + String e2Market = StringUtils.isNotBlank(e2.getMarket()) ? e2.getMarket() : ""; + return comparator.compare(e1Market, e2Market); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Market = StringUtils.isNotBlank(e1.getMarket()) ? e1.getMarket() : ""; + String e2Market = StringUtils.isNotBlank(e2.getMarket()) ? e2.getMarket() : ""; + return comparator.compare(e2Market, e1Market); + }); + } + } + // 适用车型, + if ("appliedVehicleProject".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AppliedVehicleProject = StringUtils.isNotBlank(e1.getAppliedVehicleProject()) ? e1.getAppliedVehicleProject() : ""; + String e2AppliedVehicleProject = StringUtils.isNotBlank(e2.getAppliedVehicleProject()) ? e2.getAppliedVehicleProject() : ""; + return comparator.compare(e1AppliedVehicleProject, e2AppliedVehicleProject); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AppliedVehicleProject = StringUtils.isNotBlank(e1.getAppliedVehicleProject()) ? e1.getAppliedVehicleProject() : ""; + String e2AppliedVehicleProject = StringUtils.isNotBlank(e2.getAppliedVehicleProject()) ? e2.getAppliedVehicleProject() : ""; + return comparator.compare(e2AppliedVehicleProject, e1AppliedVehicleProject); + }); + } + } + // 软件发布时间, + if ("releaseName".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ReleaseName = StringUtils.isNotBlank(e1.getReleaseDate()) ? e1.getReleaseDate() : ""; + String e2ReleaseName = StringUtils.isNotBlank(e2.getReleaseDate()) ? e2.getReleaseDate() : ""; + return comparator.compare(e1ReleaseName, e2ReleaseName); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ReleaseName = StringUtils.isNotBlank(e1.getReleaseDate()) ? e1.getReleaseDate() : ""; + String e2ReleaseName = StringUtils.isNotBlank(e2.getReleaseDate()) ? e2.getReleaseDate() : ""; + return comparator.compare(e2ReleaseName, e1ReleaseName); + }); + } + } + //VDR + if ("vdr".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Vdr = StringUtils.isNotBlank(e1.getVdr()) ? e1.getVdr() : ""; + String e2Vdr = StringUtils.isNotBlank(e2.getVdr()) ? e2.getVdr() : ""; + return comparator.compare(e1Vdr, e2Vdr); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Vdr = StringUtils.isNotBlank(e1.getVdr()) ? e1.getVdr() : ""; + String e2Vdr = StringUtils.isNotBlank(e2.getVdr()) ? e2.getVdr() : ""; + return comparator.compare(e2Vdr, e1Vdr); + }); + } + } + //主题 + if ("summary".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Summary = StringUtils.isNotBlank(e1.getSummary()) ? e1.getSummary() : ""; + String e2Summary = StringUtils.isNotBlank(e2.getSummary()) ? e2.getSummary() : ""; + return comparator.compare(e1Summary, e2Summary); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Summary = StringUtils.isNotBlank(e1.getSummary()) ? e1.getSummary() : ""; + String e2Summary = StringUtils.isNotBlank(e2.getSummary()) ? e2.getSummary() : ""; + return comparator.compare(e2Summary, e1Summary); + }); + } + } + //VDR状态 + if ("status".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Status = StringUtils.isNotBlank(e1.getStatus()) ? e1.getStatus() : ""; + String e2Status = StringUtils.isNotBlank(e2.getStatus()) ? e2.getStatus() : ""; + return comparator.compare(e1Status, e2Status); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Status = StringUtils.isNotBlank(e1.getStatus()) ? e1.getStatus() : ""; + String e2Status = StringUtils.isNotBlank(e2.getStatus()) ? e2.getStatus() : ""; + return comparator.compare(e2Status, e1Status); + }); + } + } + //认证影响 + if ("homologationImpact".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1HomologationImpact = StringUtils.isNotBlank(e1.getHomologationImpact()) ? e1.getHomologationImpact() : ""; + String e2HomologationImpact = StringUtils.isNotBlank(e2.getHomologationImpact()) ? e2.getHomologationImpact() : ""; + return comparator.compare(e1HomologationImpact, e2HomologationImpact); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1HomologationImpact = StringUtils.isNotBlank(e1.getHomologationImpact()) ? e1.getHomologationImpact() : ""; + String e2HomologationImpact = StringUtils.isNotBlank(e2.getHomologationImpact()) ? e2.getHomologationImpact() : ""; + return comparator.compare(e2HomologationImpact, e1HomologationImpact); + }); + } + } + //影响描述, + if ("homologation".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Homologation = StringUtils.isNotBlank(e1.getHomologation()) ? e1.getHomologation() : ""; + String e2Homologation = StringUtils.isNotBlank(e2.getHomologation()) ? e2.getHomologation() : ""; + return comparator.compare(e1Homologation, e2Homologation); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Homologation = StringUtils.isNotBlank(e1.getHomologation()) ? e1.getHomologation() : ""; + String e2Homologation = StringUtils.isNotBlank(e2.getHomologation()) ? e2.getHomologation() : ""; + return comparator.compare(e2Homologation, e1Homologation); + }); + } + } + //影响法规-cn, + if ("impactCnHomo".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ImpactCnHomo = StringUtils.isNotBlank(e1.getImpactCnHomo()) ? e1.getImpactCnHomo() : ""; + String e2ImpactCnHomo = StringUtils.isNotBlank(e2.getImpactCnHomo()) ? e2.getImpactCnHomo() : ""; + return comparator.compare(e1ImpactCnHomo, e2ImpactCnHomo); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ImpactCnHomo = StringUtils.isNotBlank(e1.getImpactCnHomo()) ? e1.getImpactCnHomo() : ""; + String e2ImpactCnHomo = StringUtils.isNotBlank(e2.getImpactCnHomo()) ? e2.getImpactCnHomo() : ""; + return comparator.compare(e2ImpactCnHomo, e1ImpactCnHomo); + }); + } + } + //影响法规-EU, + if ("impactEuHomo".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ImpactEuHomo = StringUtils.isNotBlank(e1.getImpactEuHomo()) ? e1.getImpactEuHomo() : ""; + String e2ImpactEuHomo = StringUtils.isNotBlank(e2.getImpactEuHomo()) ? e2.getImpactEuHomo() : ""; + return comparator.compare(e1ImpactEuHomo, e2ImpactEuHomo); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ImpactEuHomo = StringUtils.isNotBlank(e1.getImpactEuHomo()) ? e1.getImpactEuHomo() : ""; + String e2ImpactEuHomo = StringUtils.isNotBlank(e2.getImpactEuHomo()) ? e2.getImpactEuHomo() : ""; + return comparator.compare(e2ImpactEuHomo, e1ImpactEuHomo); + }); + } + } + //责任部门 + if ("masterDomain".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1MasterDomain = StringUtils.isNotBlank(e1.getMasterDomain()) ? e1.getMasterDomain() : ""; + String e2MasterDomain = StringUtils.isNotBlank(e2.getMasterDomain()) ? e2.getMasterDomain() : ""; + return comparator.compare(e1MasterDomain, e2MasterDomain); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1MasterDomain = StringUtils.isNotBlank(e1.getMasterDomain()) ? e1.getMasterDomain() : ""; + String e2MasterDomain = StringUtils.isNotBlank(e2.getMasterDomain()) ? e2.getMasterDomain() : ""; + return comparator.compare(e2MasterDomain, e1MasterDomain); + }); + } + } + //项目版本 + if ("projectVersionName".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ProjectVersionText = StringUtils.isNotBlank(e1.getProjectVersionText()) ? e1.getProjectVersionText() : ""; + String e2ProjectVersionText = StringUtils.isNotBlank(e2.getProjectVersionText()) ? e2.getProjectVersionText() : ""; + return comparator.compare(e1ProjectVersionText, e2ProjectVersionText); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1ProjectVersionText = StringUtils.isNotBlank(e1.getProjectVersionText()) ? e1.getProjectVersionText() : ""; + String e2ProjectVersionText = StringUtils.isNotBlank(e2.getProjectVersionText()) ? e2.getProjectVersionText() : ""; + return comparator.compare(e2ProjectVersionText, e1ProjectVersionText); + }); + } + } + //studio + if ("studioText".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Studio = StringUtils.isNotBlank(e1.getStudioText()) ? e1.getStudioText() : ""; + String e2Studio = StringUtils.isNotBlank(e2.getStudioText()) ? e2.getStudioText() : ""; + return comparator.compare(e1Studio, e2Studio); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Studio = StringUtils.isNotBlank(e1.getStudioText()) ? e1.getStudioText() : ""; + String e2Studio = StringUtils.isNotBlank(e2.getStudioText()) ? e2.getStudioText() : ""; + return comparator.compare(e2Studio, e1Studio); + }); + } + } + //认证开始 + if ("attestationStartTime".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AttestationStartTime = ObjectUtils.isNotEmpty(e1.getAttestationStartTime()) ? DateUtils.formatDate(e1.getAttestationStartTime()) : ""; + String e2AttestationStartTime = ObjectUtils.isNotEmpty(e2.getAttestationStartTime()) ? DateUtils.formatDate(e2.getAttestationStartTime()) : ""; + return comparator.compare(e1AttestationStartTime, e2AttestationStartTime); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AttestationStartTime = ObjectUtils.isNotEmpty(e1.getAttestationStartTime()) ? DateUtils.formatDate(e1.getAttestationStartTime()) : ""; + String e2AttestationStartTime = ObjectUtils.isNotEmpty(e2.getAttestationStartTime()) ? DateUtils.formatDate(e2.getAttestationStartTime()) : ""; + return comparator.compare(e2AttestationStartTime, e1AttestationStartTime); + }); + } + } + //认证申报 + if ("certificationSubmission".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1CertificationSubmission = ObjectUtils.isNotEmpty(e1.getCertificationSubmission()) ? DateUtils.formatDate(e1.getCertificationSubmission()) : ""; + String e2CertificationSubmission = ObjectUtils.isNotEmpty(e2.getCertificationSubmission()) ? DateUtils.formatDate(e2.getCertificationSubmission()) : ""; + return comparator.compare(e1CertificationSubmission, e2CertificationSubmission); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1CertificationSubmission = ObjectUtils.isNotEmpty(e1.getCertificationSubmission()) ? DateUtils.formatDate(e1.getCertificationSubmission()) : ""; + String e2CertificationSubmission = ObjectUtils.isNotEmpty(e2.getCertificationSubmission()) ? DateUtils.formatDate(e2.getCertificationSubmission()) : ""; + return comparator.compare(e2CertificationSubmission, e1CertificationSubmission); + }); + } + } + //认证批准 + if ("attestationEndTime".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AttestationEndTime = ObjectUtils.isNotEmpty(e1.getAttestationEndTime()) ? DateUtils.formatDate(e1.getAttestationEndTime()) : ""; + String e2AttestationEndTime = ObjectUtils.isNotEmpty(e2.getAttestationEndTime()) ? DateUtils.formatDate(e2.getAttestationEndTime()) : ""; + return comparator.compare(e1AttestationEndTime, e2AttestationEndTime); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AttestationEndTime = ObjectUtils.isNotEmpty(e1.getAttestationEndTime()) ? DateUtils.formatDate(e1.getAttestationEndTime()) : ""; + String e2AttestationEndTime = ObjectUtils.isNotEmpty(e2.getAttestationEndTime()) ? DateUtils.formatDate(e2.getAttestationEndTime()) : ""; + return comparator.compare(e2AttestationEndTime, e1AttestationEndTime); + }); + } + } + //认证进度 + if ("attestationSchedule".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AttestationSchedule = StringUtils.isNotBlank(e1.getAttestationSchedule()) ? e1.getAttestationSchedule() : ""; + String e2AttestationSchedule = StringUtils.isNotBlank(e2.getAttestationSchedule()) ? e2.getAttestationSchedule() : ""; + return comparator.compare(e1AttestationSchedule, e2AttestationSchedule); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1AttestationSchedule = StringUtils.isNotBlank(e1.getAttestationSchedule()) ? e1.getAttestationSchedule() : ""; + String e2AttestationSchedule = StringUtils.isNotBlank(e2.getAttestationSchedule()) ? e2.getAttestationSchedule() : ""; + return comparator.compare(e2AttestationSchedule, e1AttestationSchedule); + }); + } + } + //匹配状态 + if ("matchStatusText".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1MatchStatus = StringUtils.isNotBlank(e1.getMatchStatusText()) ? e1.getMatchStatusText() : ""; + String e2MatchStatus = StringUtils.isNotBlank(e2.getMatchStatusText()) ? e2.getMatchStatusText() : ""; + return comparator.compare(e1MatchStatus, e2MatchStatus); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1MatchStatus = StringUtils.isNotBlank(e1.getMatchStatusText()) ? e1.getMatchStatusText() : ""; + String e2MatchStatus = StringUtils.isNotBlank(e2.getMatchStatusText()) ? e2.getMatchStatusText() : ""; + return comparator.compare(e2MatchStatus, e1MatchStatus); + }); + } + } + //备注 + if ("remark".equals(otaManageApplyEO.getOrderByField())) { + if (OrderEnum.POSITIVE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Remark = StringUtils.isNotBlank(e1.getRemark()) ? e1.getRemark() : ""; + String e2Remark = StringUtils.isNotBlank(e2.getRemark()) ? e2.getRemark() : ""; + return comparator.compare(e1Remark, e2Remark); + }); + } else if (OrderEnum.REVERSE.getValue().equals(otaManageApplyEO.getOrderBy())) { + Collections.sort(otaManageApplyEOList, (e1, e2) -> { + String e1Remark = StringUtils.isNotBlank(e1.getRemark()) ? e1.getRemark() : ""; + String e2Remark = StringUtils.isNotBlank(e2.getRemark()) ? e2.getRemark() : ""; + return comparator.compare(e2Remark, e1Remark); + }); + } + } + } + + /** + * 分车型列表-分页列表查询 + * + * @param otaManageApplyEO + * @return + */ + @Override + public List getOtaCarPage(OtaManageApplyEO otaManageApplyEO, String cut) { + List otaManageApplyEOList = this.getBaseMapper().getOtaCarPage(otaManageApplyEO); + List list = new ArrayList<>(); + String carMarket = otaManageApplyEO.getAppliedVehicleProject(); + if (StringUtils.isNotBlank(carMarket) && !"全部".equals(carMarket) && !"All".equals(carMarket) && !otaManageApplyEOList.isEmpty()) { + + String[] conditionSplit = carMarket.split(" "); + + for (OtaManageApplyEO manageApplyEO : otaManageApplyEOList) { + if (StringUtils.isNotEmpty(manageApplyEO.getVehicleType()) + && !manageApplyEO.getVehicleType().equals(otaManageApplyEO.getAppliedVehicleProject())) { + manageApplyEO.setVehicleType(otaManageApplyEO.getAppliedVehicleProject()); + manageApplyEO.setId(UUID.randomUUID().toString().replace("-", "")); + manageApplyEO.setProjectVersion(null); + manageApplyEO.setAttestationSchedule(null); + manageApplyEO.setMatchStatus(null); + manageApplyEO.setRemark("--"); + } + if (StringUtils.isEmpty(manageApplyEO.getId()) || manageApplyEO.getId().length() < 20) { + manageApplyEO.setId(UUID.randomUUID().toString().replace("-", "")); + } + String appliedVehicleProject = manageApplyEO.getAppliedVehicleProject(); + if (StringUtils.isNotBlank(appliedVehicleProject)) { + String[] appliedVehicleProjectArr = appliedVehicleProject.split(","); + for (String appliedVehicleProjectTemp : appliedVehicleProjectArr) { + String[] split = appliedVehicleProjectTemp.split(" "); + if (split.length == 1) { + list.add(manageApplyEO); + break; + } else if (split.length == 2) { + if (Arrays.equals(conditionSplit, split)) { + list.add(manageApplyEO); + break; + } + } else if (split.length == 3) { + List listTemp = Arrays.asList(split); + List conditionList = Arrays.asList(conditionSplit); + if (listTemp.containsAll(conditionList)) { + list.add(manageApplyEO); + break; + } + } + } + } + } + } + if (!list.isEmpty()) { + List vprojectVersionList = getProjectVersionList(otaManageApplyEO.getAppliedVehicleProject(), null); + //项目版本id + List projectVersionList = list.stream() + .map(OtaManageApplyEO::getProjectVersion).distinct().collect(Collectors.toList()); + //studio + List projectList = projectLibraryBaseService.queryList(projectVersionList); + List studioEngineerUserIdList = projectList.stream().map(ProjectLibraryBase::getStudioEngineer).distinct().collect(Collectors.toList()); + List studioEngineerUserInfo = this.sysUserService.querySysUserListByIdList(studioEngineerUserIdList); + + List projectTaskPlanningList = projectTaskPlanningService.queryList(StringUtils.join(projectVersionList, ",")); + boolean isDisabled = isDisabled(); + for (OtaManageApplyEO manageApplyEO : list) { + if (StringUtils.isBlank(manageApplyEO.getVehicleType())) { + manageApplyEO.setVehicleType(otaManageApplyEO.getAppliedVehicleProject()); + manageApplyEO.setId(UUID.randomUUID().toString().replace("-", "")); + manageApplyEO.setProjectVersion(null); + manageApplyEO.setAttestationSchedule(null); + manageApplyEO.setMatchStatus(null); + manageApplyEO.setRemark("--"); + } + if (StringUtils.isNotBlank(manageApplyEO.getProjectVersion())) { + List taskPlanningList = projectTaskPlanningList.stream() + .filter(e -> manageApplyEO.getProjectVersion().equals(e.getProjectId())).collect(Collectors.toList()); + //设置认证开始,认证批准,认证申报 + if (!taskPlanningList.isEmpty()) { + Date attestationStartTime = taskPlanningList.get(0).getAttestationStartTime();//认证开始 + Date attestationEndTime = taskPlanningList.get(0).getAttestationEndTime();//认证批准 + Date certificationSubmission = taskPlanningList.get(0).getCertificationSubmission();//认证申报 + manageApplyEO.setAttestationStartTime(attestationStartTime); + manageApplyEO.setAttestationEndTime(attestationEndTime); + manageApplyEO.setCertificationSubmission(certificationSubmission); + } + //设置studio + boolean havePro = false; + for (ProjectLibraryBase pro : projectList) { + if (pro.getId().equals(manageApplyEO.getProjectVersion())) { + manageApplyEO.setStudio(pro.getStudioEngineer()); + havePro = true; + break; + } + } + if (!havePro && !ComplianceFlowStatusEnum.UNINVOLVED.getValue().equals(manageApplyEO.getProjectVersion())) { + //找不到项目的话 + manageApplyEO.setProjectVersion(null); + manageApplyEO.setStudio(null); + manageApplyEO.setAttestationEndTime(null); + manageApplyEO.setAttestationStartTime(null); + manageApplyEO.setCertificationSubmission(null); + } + if (StringUtils.isNotEmpty(manageApplyEO.getStudio())) { + if (CollectionUtils.isNotEmpty(studioEngineerUserInfo)) { + String studioEngineerUserName = studioEngineerUserInfo.stream().filter(studioEngineerUser -> { + boolean flag = false; + if (StringUtils.equals(manageApplyEO.getStudio(), studioEngineerUser.getId())) { + flag = true; + } + return flag; + }).map(SysUser::getUsername).collect(Collectors.joining(",")); + manageApplyEO.setStudioText(studioEngineerUserName); + } + } + //项目版本 + List collect = vprojectVersionList.stream().filter(e -> e.getProjectId().equals(manageApplyEO.getProjectVersion())).distinct().collect(Collectors.toList()); + if (!collect.isEmpty()) { + manageApplyEO.setProjectVersionText(collect.get(0).getCar() + "-" + collect.get(0).getYearName() + "-" + collect.get(0).getMarket()); + } + } + manageApplyEO.setDisabled(isDisabled || OtaStatusEnum.LOCKED.getKey().equals(manageApplyEO.getMatchStatus())); + if (StringUtils.isBlank(manageApplyEO.getRemark())) { + manageApplyEO.setRemark("--"); + } + if (OtaHomoImpactEnum.YES.getValue().equals(manageApplyEO.getHomologationImpact()) + || OtaHomoImpactEnum.INTER_VALID.getValue().equals(manageApplyEO.getHomologationImpact())) { + manageApplyEO.setMatchStatus(OtaStatusEnum.NA.getKey()); + manageApplyEO.setDisabled(true); + } + if (StringUtils.isBlank(manageApplyEO.getMatchStatus())) { + manageApplyEO.setMatchStatus(OtaStatusEnum.TO_BE_MATCHED.getKey()); + if (CutEnum.CN.getValue().equals(cut)) { + manageApplyEO.setMatchStatusText(OtaStatusEnum.TO_BE_MATCHED.getNameCN()); + } else { + manageApplyEO.setMatchStatusText(OtaStatusEnum.TO_BE_MATCHED.getNameEN()); + } + } else { + OtaStatusEnum osEnum = OtaStatusEnum.getByKey(manageApplyEO.getMatchStatus()); + if (CutEnum.CN.getValue().equals(cut)) { + manageApplyEO.setMatchStatusText(osEnum.getNameCN()); + } else { + manageApplyEO.setMatchStatusText(osEnum.getNameEN()); + } + } + } + } + if (!list.isEmpty()) { + //表头排序 + heartSort(otaManageApplyEO, list); + } + return list; + } + + /** + * 下拉数据-软件版本,适用车型,市场 + * + * @return + */ + @Override + public Map getPullDownList() { + List otaManageApplyEOS = this.getBaseMapper().getOtaCarList(null); + Map result = new HashMap<>(); + if (!otaManageApplyEOS.isEmpty()) { + //软件版本 planned_bp_launch_batch_ + List plannedBpLaunchBatchList = otaManageApplyEOS.stream() + .filter(e -> StringUtils.isNotBlank(e.getPlannedBpLaunchBatch())) + .map(OtaManageApplyEO::getPlannedBpLaunchBatch).distinct().collect(Collectors.toList()); + + //适用车型 appliedVehicleProject + List appliedVehicleProjectList = otaManageApplyEOS.stream() + .filter(e -> StringUtils.isNotBlank(e.getAppliedVehicleProject())) + .map(OtaManageApplyEO::getAppliedVehicleProject).distinct().collect(Collectors.toList()); + //过滤掉特殊的适用车型 + List otaNameList = OtaCarEnum.getOtaNameList(); + + Set carSet = new HashSet<>();//适用车型 + Set marketSet = new HashSet<>();//市场 + for (String appliedVehicleProject : appliedVehicleProjectList) { + for (String s : appliedVehicleProject.split(",")) { + String[] split = s.split(" "); + if (split.length == 2) { + if (!otaNameList.contains(s)) { + carSet.add(split[0]); + marketSet.add(split[1]); + } + } else if (split.length == 3) { + if (!otaNameList.contains(s)) { + carSet.add(split[0]); + marketSet.add(split[2]); + } + } + } + } + result.put("plannedBpLaunchBatchList", plannedBpLaunchBatchList); + result.put("carSet", carSet); + result.put("marketSet", marketSet); + } + return result; + } + + /** + * 下拉数据-全部和分车型(不含年款) + * + * @return + */ + @Override + public List getCarList(String cut, String plannedBpLaunchBatch) { + Set set = new HashSet<>(); + if(isStudio()){ + List nameInfoEOList = projectNameInfoEOService.list(); + List targetMarketList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //studio在项目库所拥有的权限的项目 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectLibraryBase::getStudioEngineer,currentUser.getId()); + List libraryBaseList = projectLibraryBaseService.list(wrapper); + + for (ProjectLibraryBase projectLibraryBase : libraryBaseList) { + String carId = projectLibraryBase.getProjectNameId(); + String marketId = projectLibraryBase.getTargetMarket(); + List projectNameInfoEOList = nameInfoEOList.stream().filter(e -> e.getId().equals(carId)).collect(Collectors.toList()); + String finalMarket = marketId; + List dictModelList = targetMarketList.stream().filter(e -> e.getValue().equals(finalMarket)).collect(Collectors.toList()); + if(!projectNameInfoEOList.isEmpty() && !dictModelList.isEmpty()){ + String market = dictModelList.get(0).getTextEn(); + if ("China".equals(market)) { + //项目库里市场存的是China 不是CN + market = "CN"; + } else if ("UK".equals(market)) { + //RHD目前代表UK + market = "RHD"; + } + String car = projectNameInfoEOList.get(0).getProjectName(); + if("FORCE".equals(car)){ + car = "Force"; + } + set.add(car + " " + market); + } + } + } + List otaManageApplyEOS = this.getBaseMapper().getOtaCarList(plannedBpLaunchBatch); + List result = new LinkedList<>(); + if (CutEnum.CN.getValue().equals(cut)) { + result.add("全部"); + } else { + result.add("All"); + } + if (!otaManageApplyEOS.isEmpty()) { + + //适用车型 appliedVehicleProject + List appliedVehicleProjectList = otaManageApplyEOS.stream() + .filter(e -> StringUtils.isNotBlank(e.getAppliedVehicleProject())) + .map(OtaManageApplyEO::getAppliedVehicleProject).distinct().collect(Collectors.toList()); + //过滤掉特殊的适用车型 + List otaNameList = OtaCarEnum.getOtaNameList(); + + for (String appliedVehicleProject : appliedVehicleProjectList) { + for (String s : appliedVehicleProject.split(",")) { + String[] split = s.split(" "); + if (split.length == 2) { + if (!otaNameList.contains(s)) { + result.add(s); + } + } else if (split.length == 3) { + result.add(split[0] + " " + split[2]); + } + } + } + } + result = result.stream().distinct().collect(Collectors.toList()); + if(isStudio()){ + result.retainAll(set); + if (CutEnum.CN.getValue().equals(cut)) { + result.add("全部"); + } else { + result.add("All"); + } + } + return result; + } + public List getStudioCarList(String plannedBpLaunchBatch) { + Set set = new HashSet<>(); + List nameInfoEOList = projectNameInfoEOService.list(); + List targetMarketList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //studio在项目库所拥有的权限的项目 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectLibraryBase::getStudioEngineer, currentUser.getId()); + List libraryBaseList = projectLibraryBaseService.list(wrapper); + + for (ProjectLibraryBase projectLibraryBase : libraryBaseList) { + String carId = projectLibraryBase.getProjectNameId(); + String marketId = projectLibraryBase.getTargetMarket(); + List projectNameInfoEOList = nameInfoEOList.stream().filter(e -> e.getId().equals(carId)).collect(Collectors.toList()); + String finalMarket = marketId; + List dictModelList = targetMarketList.stream().filter(e -> e.getValue().equals(finalMarket)).collect(Collectors.toList()); + if (!projectNameInfoEOList.isEmpty() && !dictModelList.isEmpty()) { + String market = dictModelList.get(0).getTextEn(); + if ("China".equals(market)) { + //项目库里市场存的是China 不是CN + market = "CN"; + } else if ("UK".equals(market)) { + //RHD目前代表UK + market = "RHD"; + } + String car = projectNameInfoEOList.get(0).getProjectName(); + if("FORCE".equals(car)){ + car = "Force"; + } + set.add(car + " " + market); + } + } + List otaManageApplyEOS = this.getBaseMapper().getOtaCarList(plannedBpLaunchBatch); + List result = new LinkedList<>(); + if (!otaManageApplyEOS.isEmpty()) { + + //适用车型 appliedVehicleProject + List appliedVehicleProjectList = otaManageApplyEOS.stream() + .filter(e -> StringUtils.isNotBlank(e.getAppliedVehicleProject())) + .map(OtaManageApplyEO::getAppliedVehicleProject).distinct().collect(Collectors.toList()); + //过滤掉特殊的适用车型 + List otaNameList = OtaCarEnum.getOtaNameList(); + + for (String appliedVehicleProject : appliedVehicleProjectList) { + for (String s : appliedVehicleProject.split(",")) { + String[] split = s.split(" "); + if (split.length == 2) { + if (!otaNameList.contains(s)) { + result.add(s); + } + } else if (split.length == 3) { + result.add(split[0] + " " + split[2]); + } + } + } + } + result = result.stream().distinct().collect(Collectors.toList()); + result.retainAll(set); + return result; + } + + @Override + public List getProjectVersionList(String carMarket, String cut) { + + List result = new LinkedList<>(); + if (StringUtils.isNotBlank(carMarket)) { + List versionVOList = new LinkedList<>(); + //根据适用车型查询项目版本 + String[] conditionSplit = carMarket.split(" "); + String car = conditionSplit[0]; + String market = ""; + if (conditionSplit.length > 1) { + market = conditionSplit[1]; + } + if (StringUtils.isNotBlank(market)) { + if (market.equals("CN")) { + //项目库里市场存的是China 不是CN + market = "China"; + } else if (market.equals("RHD")) { + //RHD目前代表UK + market = "UK"; + } + } + versionVOList = this.getBaseMapper().getProjectVersion(car, market); + List oneList = versionVOList.stream().filter(e -> StringUtils.isBlank(e.getParentId())).collect(Collectors.toList()); + List twoList = versionVOList.stream().filter(e -> StringUtils.isNotBlank(e.getParentId())).collect(Collectors.toList()); + + for (VersionVO versionVO : oneList) { + result.add(versionVO); + List collect = twoList.stream().filter(e -> versionVO.getProjectId().equals(e.getParentId())).collect(Collectors.toList()); + Collections.sort(collect, new Comparator() { + @Override + public int compare(VersionVO o1, VersionVO o2) { + return Integer.valueOf(o1.getVersionNumber()).compareTo(Integer.valueOf(o2.getVersionNumber())); + } + }); + result.addAll(collect); + } + List targetMarketList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + for (VersionVO versionVO : result) { + List dictModelList = new ArrayList<>(); + for (String s : versionVO.getMarket().split(",")) { + List dictModelListTemp = targetMarketList.stream() + .filter(e -> s.equals(e.getValue())).collect(Collectors.toList()); + dictModelList.addAll(dictModelListTemp); + } + String targetMarket = ""; + if (dictModelList.size() != 0) { + StringBuilder sb = new StringBuilder(); + for (DictModel dictModel : dictModelList) { + sb.append(dictModel.getTextEn() + ","); + } + if (StringUtils.isNotBlank(sb)) { + targetMarket = sb.substring(0, sb.length() - 1); + } + } + versionVO.setVersionName(versionVO.getCar() + "-" + versionVO.getYearName() + "-" + targetMarket + "-" + versionVO.getVersionNumber()); + } + + //ComplianceFlowStatusEnum + VersionVO versionVO = new VersionVO(); + versionVO.setProjectId(ComplianceFlowStatusEnum.UNINVOLVED.getValue()); + if (CutEnum.CN.getValue().equals(cut)) { + versionVO.setVersionName(ComplianceFlowStatusEnum.UNINVOLVED.getCnName()); + } else { + versionVO.setVersionName(ComplianceFlowStatusEnum.UNINVOLVED.getEnName()); + } + result.add(versionVO); + } + return result; + } + + + /** + * 全车型和分车型详情 + * + * @param vdr + * @return + */ + @Override + public List getVersionInfo(String vdr, String car, String cut) { + //认证进度数据字典 certification_progress + List regionDictList = sysDictItemServiceImpl.selectItemsByDictCode("certification_progress"); + + List regionList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + + List versionVOList = this.getBaseMapper().getVersionInfo(vdr); + List result = new LinkedList<>(); + if (!versionVOList.isEmpty()) { + List oneList = versionVOList.stream().filter(e -> StringUtils.isBlank(e.getParentId())).collect(Collectors.toList()); + List twoList = versionVOList.stream().filter(e -> StringUtils.isNotBlank(e.getParentId())).collect(Collectors.toList()); + + for (VersionVO versionVO : oneList) { + result.add(versionVO); + List collect = twoList.stream().filter(e -> versionVO.getProjectId().equals(e.getParentId())).collect(Collectors.toList()); + Collections.sort(collect, new Comparator() { + @Override + public int compare(VersionVO o1, VersionVO o2) { + return Integer.valueOf(o1.getVersionNumber()).compareTo(Integer.valueOf(o2.getVersionNumber())); + } + }); + result.addAll(collect); + } + for (VersionVO versionVO : result) { + String market = versionVO.getMarket(); + List list = new LinkedList<>(); + for (String s : market.split(",")) { + List collect = regionList.stream().filter(e -> e.getValue().equals(s)).collect(Collectors.toList()); + if (!collect.isEmpty()) { + list.add(collect.get(0).getTextEn()); + } + } + if (!list.isEmpty()) { + market = StringUtils.join(list, ","); + } + if (StringUtils.isBlank(versionVO.getProjectVersion())) { + versionVO.setVersionName(versionVO.getCar() + "-" + market); + } else { + versionVO.setVersionName(versionVO.getCar() + "-" + versionVO.getYearName() + "-" + market + "-" + versionVO.getVersionNumber()); + } + //认证进度 + if (StringUtils.isNotBlank(versionVO.getAttestationSchedule())) { + List collect = regionDictList.stream() + .filter(e -> e.getItemValue().equals(versionVO.getAttestationSchedule())).collect(Collectors.toList()); + if (CutEnum.CN.getValue().equals(cut)) { + versionVO.setAttestationSchedule(collect.get(0).getItemText()); + } else { + versionVO.setAttestationSchedule(collect.get(0).getEnName()); + } + } + } + } + if (result.isEmpty()) { + VersionVO versionVO = new VersionVO(); + versionVO.setVersionName(car); + result.add(versionVO); + } + return result; + } + + /** + * 下发通知 + */ + @Override + public void issueNotice(String id) { + if (StringUtils.isNotEmpty(id)) { + //根据版本查出所有vdr + List omrList = otaManageReceiveService.getReceiveByplanned(id); + List appliedVehicleProjectList = omrList.stream() + .filter(e -> StringUtils.isNotBlank(e.getAppliedVehicleProject())) + .map(OtaManageReceive::getAppliedVehicleProject).distinct().collect(Collectors.toList()); + Map appMap = new HashMap<>(); + for (String appStr : appliedVehicleProjectList) { + if (StringUtils.isNotEmpty(appStr)) { + String[] appStrs = appStr.split(","); + for (String str : appStrs) { + String[] s = str.split(" "); + if (appStrs.length == 1) { + if (!appMap.containsKey(s[0])) { + appMap.put(s[0], null); + } + } else if (s.length == 2) { + String projectName = s[0].toUpperCase(Locale.ROOT); + Set appSet = appMap.get(projectName); + if (ObjectUtils.isEmpty(appSet)) { + appSet = new HashSet(); + } + if (s[1].equals("CN")) { + appSet.add("China"); + } else if (s[1].equals("RHD")) { + appSet.add("UK"); + } else { + appSet.add(s[1]); + } + appMap.put(projectName, appSet); + } else if (s.length == 3) { + String projectName = s[0].toUpperCase(Locale.ROOT); + Set appSet = appMap.get(projectName); + if (ObjectUtils.isEmpty(appSet)) { + appSet = new HashSet(); + } + if (s[2].equals("CN")) { + appSet.add("China"); + } else if (s[2].equals("RHD")) { + appSet.add("UK"); + } else { + appSet.add(s[2]); + } + appMap.put(projectName, appSet); + } + } + } + } + //查询所有NT2平台的项目 + ProjectLibraryBase plbSearch = new ProjectLibraryBase(); + plbSearch.setDigitalPlatform("NT2"); + List plbList = projectLibraryBaseService.getList(plbSearch); + //存储符合条件的项目中Studio的用户ID + Set matchStudioSet = new HashSet(); + for (ProjectLibraryBase plb : plbList) { + boolean flag = false; + if (appMap.containsKey("All")) { + matchStudioSet.add(plb.getStudioEngineer()); + continue; + } + String targetMarket = plb.getTargetMarket(); + String projectName = plb.getProjectName().toUpperCase(Locale.ROOT); + String[] targetMarkets = targetMarket.split(","); + for (String tm : targetMarkets) { + if ((appMap.containsKey("CN") && tm.equals("China")) + || (appMap.containsKey("EU") && tm.equals("EU")) + || (appMap.containsKey("RHD") && tm.equals("UK"))) { + //三个ALL的市场类型 + matchStudioSet.add(plb.getStudioEngineer()); + continue; + } + if (appMap.containsKey(projectName)) { + Set appSet = appMap.get(projectName); + if (appSet.contains(tm)) { + matchStudioSet.add(plb.getStudioEngineer()); + continue; + } + } + } + } + //TODO 给studio发消息 + List ompList = new ArrayList<>(); + for (String studioId : matchStudioSet) { + OtaManagePermission omp = new OtaManagePermission(); + omp.setApplyId(id); + omp.setUserId(studioId); + ompList.add(omp); + } + otaManagePermissionService.saveBatch(ompList); + } + } + + + /** + * 是否为OTA管理员并且不是STUDIO + */ + private boolean isDisabled() { + return isOtaManager() && !isStudio(); + } + + private boolean isOtaManager() { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List userRoleList = this.sysUserRoleMapper.selectList(new QueryWrapper().lambda().eq(SysUserRole::getUserId, currentUser.getId())); // 查询用户所有角色 + if (CollectionUtils.isNotEmpty(userRoleList)) { + for (SysUserRole role : userRoleList) { + if (role.getRoleId().equals(RoleEnum.OTA_MANAGER.getId())) { + return true; + } + } + } + return false; + } + + private boolean isStudio() { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List userRoleList = this.sysUserRoleMapper.selectList(new QueryWrapper().lambda().eq(SysUserRole::getUserId, currentUser.getId())); // 查询用户所有角色 + if (CollectionUtils.isNotEmpty(userRoleList)) { + for (SysUserRole role : userRoleList) { + if (role.getRoleId().equals(RoleEnum.STUDIO.getId())) { + return true; + } + } + } + return false; + } + + private boolean paramsEquals(String str1, String str2) { + if (null == str1 && null == str2) { + return true; + } + return StringUtils.equals(str1, str2); + } + + public OtaManageApplyEOServiceImpl() { + super(); + } + + private Map queryProjectName(List list, String cut) { + List regionList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + Map res = new HashMap<>(); + List idList = list.stream() + .filter(e -> StringUtils.isNotBlank(e.getProjectVersion())) + .map(OtaManageApplyEO::getProjectVersion).distinct().collect(Collectors.toList()); + List proList = projectLibraryBaseService.getListByIds(idList); + for (ProjectLibraryBase plb : proList) { + String market = plb.getTargetMarket(); + List strlist = new LinkedList<>(); + for (String s : market.split(",")) { + List collect = regionList.stream().filter(e -> e.getValue().equals(s)).collect(Collectors.toList()); + if (!collect.isEmpty()) { + strlist.add(collect.get(0).getTextEn()); + } + } + if (!strlist.isEmpty()) { + market = StringUtils.join(strlist, ","); + } + plb.setTargetMarket(market); + res.put(plb.getId(), plb.getShowName()); + + } + if (CutEnum.CN.getValue().equals(cut)) { + res.put(ComplianceFlowStatusEnum.UNINVOLVED.getValue(), ComplianceFlowStatusEnum.UNINVOLVED.getCnName()); + } else { + res.put(ComplianceFlowStatusEnum.UNINVOLVED.getValue(), ComplianceFlowStatusEnum.UNINVOLVED.getEnName()); + } + + return res; + } + + @Override + public void temporarySave(List list, String cut) { + temporarySave(list, false, cut); + } + + public void temporarySave(List list, boolean isSubmit, String cut) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (CollectionUtils.isNotEmpty(list)) { + List idList = list.stream() + .filter(e -> StringUtils.isNotBlank(e.getId())) + .map(OtaManageApplyEO::getId).distinct().collect(Collectors.toList()); + + //已存在的数据 + List omaOldList = this.getBaseMapper().selectBatchIds(idList); + List queryProNameList = new ArrayList<>(); + queryProNameList.addAll(omaOldList); + queryProNameList.addAll(list); + Map proNameMap = queryProjectName(queryProNameList, cut); + //历史记录 + List hisList = new ArrayList<>(); + List saveList = new ArrayList<>(); + + for (OtaManageApplyEO oma : list) { + if (oma.getId().length() < 20) { + continue; + } + boolean flag = false; + for (OtaManageApplyEO omaOld : omaOldList) { + if (omaOld.getId().equals(oma.getId())) { + flag = true; + if (!paramsEquals(oma.getProjectVersion(), omaOld.getProjectVersion()) + || !paramsEquals(oma.getAttestationSchedule(), omaOld.getAttestationSchedule()) + || !paramsEquals(oma.getRemark(), omaOld.getRemark())) { + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(oma.getId()); + StringBuilder conSb = new StringBuilder(); + StringBuilder conSbEn = new StringBuilder(); + conSb.append(user.getUsername()).append(" : "); + conSbEn.append(user.getUsername()).append(" : "); + if (!paramsEquals(oma.getProjectVersion(), omaOld.getProjectVersion())) { + if (!isSubmit && OtaStatusEnum.TO_BE_APPROVED.getKey().equals(oma.getMatchStatus())) { + oma.setMatchStatus(OtaStatusEnum.TO_BE_MATCHED.getKey()); + } + conSb.append("‘项目版本’ 由 ‘").append(proNameMap.get(omaOld.getProjectVersion())).append("’ 改为 ‘").append(proNameMap.get(oma.getProjectVersion())).append("‘."); + conSbEn.append("‘Project Version‘ change from ‘").append(omaOld.getProjectVersionText()).append("‘ to ‘").append(oma.getProjectVersionText()).append("‘."); + } + if (!paramsEquals(oma.getAttestationSchedule(), omaOld.getAttestationSchedule())) { + if (!isSubmit && OtaStatusEnum.TO_BE_APPROVED.getKey().equals(oma.getMatchStatus())) { + oma.setMatchStatus(OtaStatusEnum.TO_BE_MATCHED.getKey()); + } + conSb.append("’认证进度’ 由 ’").append(CertificationProgressEnum.getByValue(omaOld.getAttestationSchedule()).getName()) + .append("’ 改为 ’").append(CertificationProgressEnum.getByValue(oma.getAttestationSchedule()).getName()).append("‘."); + conSbEn.append("’Homologation Progress’ change from ’").append(CertificationProgressEnum.getByValue(omaOld.getAttestationSchedule()).getValue()) + .append("’ to ’").append(CertificationProgressEnum.getByValue(oma.getAttestationSchedule()).getValue()).append("‘."); + } + if (!paramsEquals(oma.getRemark(), omaOld.getRemark()) && (StringUtils.isNotEmpty(oma.getRemark()) && !oma.getRemark().equals("--"))) { + conSb.append("’备注’ 由 ’").append(omaOld.getRemark()).append("’ 改为 ’").append(oma.getRemark()).append("‘."); + conSbEn.append("’Remark’ change from ’").append(omaOld.getRemark()).append("’ to ’").append(oma.getRemark()).append("‘."); + } + his.setContentCn(conSb.toString()); + his.setContentEn(conSbEn.toString()); + hisList.add(his); + } + break; + } + } + if (!flag) { + if (StringUtils.isNotEmpty(oma.getProjectVersion()) + || StringUtils.isNotEmpty(oma.getAttestationSchedule()) + || (StringUtils.isNotEmpty(oma.getRemark()) && !oma.getRemark().equals("--"))) { + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(oma.getId()); + StringBuilder conSb = new StringBuilder(); + StringBuilder conSbEn = new StringBuilder(); + conSb.append(user.getUsername()).append(" : "); + conSbEn.append(user.getUsername()).append(" : "); + if (StringUtils.isNotEmpty(oma.getProjectVersion())) { + conSb.append("‘项目版本‘ 由 ‘null‘").append(" 改为 ‘").append(proNameMap.get(oma.getProjectVersion())).append("‘."); + conSbEn.append("‘Project Version‘ change from ‘null‘").append(" to ‘").append(proNameMap.get(oma.getProjectVersion())).append("‘."); + } + if (StringUtils.isNotEmpty(oma.getAttestationSchedule())) { + conSb.append("‘认证进度‘ 由 ‘null‘").append(" 改为 ‘").append(CertificationProgressEnum.getByValue(oma.getAttestationSchedule()).getName()).append("‘."); + conSbEn.append("‘Homologation Progress‘ change from ‘null‘").append(" to ‘").append(CertificationProgressEnum.getByValue(oma.getAttestationSchedule()).getValue()).append("‘."); + } + if (StringUtils.isNotEmpty(oma.getRemark()) && !oma.getRemark().equals("--")) { + conSb.append("‘备注‘ 由 ‘null‘").append(" 改为 ‘").append(oma.getRemark()).append("‘."); + conSbEn.append("‘Remark‘ change from ‘null‘").append(" to ‘").append(oma.getRemark()).append("‘."); + } + his.setContentCn(conSb.toString()); + his.setContentEn(conSbEn.toString()); + hisList.add(his); + } + } + saveList.add(oma); + } + if (saveList.size() > 0) { + List delList = saveList.stream() + .filter(e -> StringUtils.isNotBlank(e.getId())) + .map(OtaManageApplyEO::getId).distinct().collect(Collectors.toList()); + this.deleteByIds(delList); + this.saveOrUpdateBatch(saveList); + otaManageHistoryService.saveBatch(hisList); + } + } + } + + @Override + public List submit(List list, String cut) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List hisList = new ArrayList<>(); + List msgList = new ArrayList<>(); + for (OtaManageApplyEO oma : list) { + if (StringUtils.isBlank(oma.getProjectVersion())) { + //需要先选版本 + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 需要先选择版本!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " Must first select the Project Version!"); + } + } else if (StringUtils.isNotEmpty(oma.getMatchStatus()) + && (oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_APPROVED.getKey()) + || oma.getMatchStatus().equals(OtaStatusEnum.LOCKED.getKey()) + || oma.getMatchStatus().equals(OtaStatusEnum.NA.getKey()))) { + //状态不对 + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 状态必须为" + OtaStatusEnum.TO_BE_MATCHED.getNameCN() + " 或 " + OtaStatusEnum.REJECTED.getNameCN() + "!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " The state must be" + OtaStatusEnum.TO_BE_MATCHED.getNameEN() + " or " + OtaStatusEnum.REJECTED.getNameEN() + "!"); + } + } else { + oma.setMatchStatus(OtaStatusEnum.TO_BE_APPROVED.getKey()); + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(oma.getId()); + his.setContentCn(user.getUsername() + " 提交了 VDR:" + oma.getVdr()); + his.setContentEn(user.getUsername() + " submitted VDR:" + oma.getVdr()); + hisList.add(his); + } + } + this.temporarySave(list, true, cut); + otaManageHistoryService.saveBatch(hisList); + return msgList; + } + + @Override + public List updateVdrBatch(List list, String projectVersion, String attestationSchedule, String remark, String cut) { + ProjectLibraryBase plb = projectLibraryBaseService.selectById(projectVersion); + List msgList = new ArrayList<>(); + List changeList = new ArrayList<>(); + boolean isStudio = isStudio(); + boolean isOtaManager = isOtaManager(); + for (OtaManageApplyEO oma : list) { + boolean isChanged = false; + if (StringUtils.isNotEmpty(projectVersion)) { + if (isStudio) { + if (StringUtils.isEmpty(oma.getMatchStatus()) + || oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_MATCHED.getKey()) + || oma.getMatchStatus().equals(OtaStatusEnum.REJECTED.getKey())) { + isChanged = true; + oma.setProjectVersion(projectVersion); + } else { + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 状态必须为" + OtaStatusEnum.TO_BE_MATCHED.getNameCN() + " 或 " + OtaStatusEnum.REJECTED.getNameCN() + "!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " The state must be" + OtaStatusEnum.TO_BE_MATCHED.getNameEN() + " or " + OtaStatusEnum.REJECTED.getNameEN() + "!"); + } + } + } else { + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 只有Studio角色可以编辑项目版本!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " Only Studio roles can edit Project Version!"); + } + } + } + if (StringUtils.isNotEmpty(attestationSchedule)) { + if (isStudio) { + if (StringUtils.isEmpty(oma.getMatchStatus()) + || oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_MATCHED.getKey()) + || oma.getMatchStatus().equals(OtaStatusEnum.REJECTED.getKey())) { + isChanged = true; + oma.setAttestationSchedule(attestationSchedule); + } else { + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 状态必须为" + OtaStatusEnum.TO_BE_MATCHED.getNameCN() + " 或 " + OtaStatusEnum.REJECTED.getNameCN() + "!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " The state must be" + OtaStatusEnum.TO_BE_MATCHED.getNameEN() + " or " + OtaStatusEnum.REJECTED.getNameEN() + "!"); + } + } + } else { + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 只有Studio角色可以编辑认证进度!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " Only Studio roles can edit Homologation Progress!"); + } + } + } + if (StringUtils.isNotEmpty(remark) && !remark.equals("--")) { + isChanged = true; + oma.setRemark(remark); + } + if (isChanged) { + changeList.add(oma); + } + } + if (CollectionUtils.isNotEmpty(changeList)) { + this.temporarySave(changeList, cut); + } + return msgList; + } + + @Override + public List applyRematch(String ids, String projectVersion, String cut) { + ProjectLibraryBase plb = projectLibraryBaseService.selectById(projectVersion); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List hisList = new ArrayList<>(); + List msgList = new ArrayList<>(); + if (StringUtils.isNotEmpty(ids)) { + List idList = Arrays.asList(ids.split(",")); + List omaList = this.getListByIds(idList); + for (OtaManageApplyEO oma : omaList) { + if (StringUtils.isNotEmpty(oma.getMatchStatus()) && oma.getMatchStatus().equals(OtaStatusEnum.LOCKED.getKey())) { + oma.setMatchStatus(OtaStatusEnum.TO_BE_APPROVED.getKey()); + oma.setProjectVersion(projectVersion); + + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(oma.getId()); + his.setContentCn(user.getUsername() + " 重新匹配了 VDR:" + oma.getVdr() + " 项目版本改为 " + plb.getShowName()); + his.setContentEn(user.getUsername() + " rematch VDR:" + oma.getVdr() + " Change Project Version to " + plb.getShowName()); + hisList.add(his); + } else { + //状态不对 + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 状态必须为" + OtaStatusEnum.LOCKED.getNameCN() + "!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " The state must be" + OtaStatusEnum.LOCKED.getNameEN() + "!"); + } + } + } + this.saveOrUpdateBatch(omaList); + otaManageHistoryService.saveBatch(hisList); + } + return msgList; + } + + @Override + public List confirm(String ids, String cut) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List hisList = new ArrayList<>(); + List msgList = new ArrayList<>(); + if (StringUtils.isNotEmpty(ids)) { + List idList = Arrays.asList(ids.split(",")); + List omaList = this.getListByIds(idList); + for (OtaManageApplyEO oma : omaList) { + if (StringUtils.isNotEmpty(oma.getMatchStatus()) && oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_APPROVED.getKey())) { + oma.setMatchStatus(OtaStatusEnum.LOCKED.getKey()); + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(oma.getId()); + his.setContentCn(user.getUsername() + " 确认了 VDR:" + oma.getVdr()); + his.setContentEn(user.getUsername() + " confirm VDR:" + oma.getVdr()); + hisList.add(his); + } else { + //状态不对 + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 状态必须为" + OtaStatusEnum.TO_BE_APPROVED.getNameCN() + "!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " The state must be" + OtaStatusEnum.TO_BE_APPROVED.getNameEN() + "!"); + } + } + } + this.saveOrUpdateBatch(omaList); + otaManageHistoryService.saveBatch(hisList); + } + return msgList; + } + + @Override + public List reject(String ids, String rejectReason, String cut) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List hisList = new ArrayList<>(); + List msgList = new ArrayList<>(); + if (StringUtils.isNotEmpty(ids)) { + List idList = Arrays.asList(ids.split(",")); + List omaList = this.getListByIds(idList); + for (OtaManageApplyEO oma : omaList) { + if (StringUtils.isNotEmpty(oma.getMatchStatus()) && oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_APPROVED.getKey())) { + oma.setMatchStatus(OtaStatusEnum.REJECTED.getKey()); + + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(oma.getId()); + his.setContentCn(user.getUsername() + " 退回了 VDR:" + oma.getVdr() + " 退回原因:" + rejectReason); + his.setContentEn(user.getUsername() + " returned VDR:" + oma.getVdr() + " Reason for return:" + rejectReason); + hisList.add(his); + } else { + //状态不对 + if (CutEnum.CN.getValue().equals(cut)) { + msgList.add("VDR:" + oma.getVdr() + " 状态必须为" + OtaStatusEnum.TO_BE_APPROVED.getNameCN() + "!"); + } else { + msgList.add("VDR:" + oma.getVdr() + " The state must be" + OtaStatusEnum.TO_BE_APPROVED.getNameEN() + "!"); + } + } + } + this.saveOrUpdateBatch(omaList); + otaManageHistoryService.saveBatch(hisList); + } + return msgList; + } + + @Override + public List getVdrListByProject(String projectId, String cut) { + List receiveList = this.getBaseMapper().getListByProjectId(projectId, ""); + if (CollectionUtils.isNotEmpty(receiveList)) { + receiveList = receiveList.stream() + .collect(Collectors.collectingAndThen(Collectors + .toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getPlannedBpLaunchBatch()))), ArrayList::new)); + String name = ""; + String market = ""; + ProjectLibraryBase plb = projectLibraryBaseService.selectById(projectId); + if (ObjectUtils.isNotEmpty(plb)) { + if (StringUtils.isNotEmpty(plb.getProjectName()) && plb.getProjectName().equals("FORCE")) { + name = "Force"; + } else { + name = plb.getProjectName(); + } + if (StringUtils.isNotEmpty(plb.getTargetMarket())) { + String[] marketStrs = plb.getTargetMarket().split(","); + if (marketStrs[0].equals("china")) { + market = "CN"; + } else if (marketStrs[0].equals("UK")) { + market = "RHD"; + } else { + market = marketStrs[0]; + } + } + } + for (OtaManageApplyEO rec : receiveList) { + rec.setAppliedVehicleProject(name + " " + market); + } + } + return receiveList; + } + + @Override + public List> getStatisticalStatus(String projectId, String plannedBpLaunchBatch, String cut, List plbEoList) { + List> result = new ArrayList<>(); + List projectLibraryBaseList = new ArrayList<>(); + if (!plbEoList.isEmpty()) { + projectLibraryBaseList = plbEoList.stream().filter(e -> e.getId().equals(projectId)).collect(Collectors.toList()); + } + List receiveList = this.getBaseMapper().getListByProjectId(projectId, plannedBpLaunchBatch); + + if (!receiveList.isEmpty()) { + List plannedBpLaunchBatchList = receiveList.stream() + .filter(e -> StringUtils.isNotBlank(e.getPlannedBpLaunchBatch())) + .map(OtaManageApplyEO::getPlannedBpLaunchBatch).distinct().collect(Collectors.toList()); + + for (String s : plannedBpLaunchBatchList) { + List otaManageApplyEOList = receiveList.stream() + .filter(e -> s.equals(e.getPlannedBpLaunchBatch())).collect(Collectors.toList()); + + int total = otaManageApplyEOList.size(); + //匹配状态 + int toBeMatched = 0;//待匹配 + int toBeApproved = 0;//待审批 + int locked = 0;//锁定 + int rejected = 0;//退回 + //认证进度 + int notStart = 0;//未开始 + int inProgress = 0;//进行中 + int testPassed = 0;//实验通过 + int testFailed = 0;//实验失败 + int notSubmitted = 0;//部件报告未提交 + int submitted = 0;//部件报告已提交 + int stored = 0;//部件报告已入库 + + for (OtaManageApplyEO oma : otaManageApplyEOList) { + if (StringUtils.isBlank(oma.getMatchStatus()) || oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_MATCHED.getKey())) { + toBeMatched++; + } else if (oma.getMatchStatus().equals(OtaStatusEnum.TO_BE_APPROVED.getKey())) { + toBeApproved++; + } else if (oma.getMatchStatus().equals(OtaStatusEnum.LOCKED.getKey())) { + locked++; + } else if (oma.getMatchStatus().equals(OtaStatusEnum.REJECTED.getKey())) { + rejected++; + } else { + toBeMatched++; + } + if (StringUtils.isBlank(oma.getAttestationSchedule()) || oma.getAttestationSchedule().equals(CertificationProgressEnum.NOT_START.getValue())) { + notStart++; + } else if (oma.getAttestationSchedule().equals(CertificationProgressEnum.IN_PROGRESS.getValue())) { + inProgress++; + } else if (oma.getAttestationSchedule().equals(CertificationProgressEnum.TEST_PASSED.getValue())) { + testPassed++; + } else if (oma.getAttestationSchedule().equals(CertificationProgressEnum.TEST_FAILED.getValue())) { + testFailed++; + } else if (oma.getAttestationSchedule().equals(CertificationProgressEnum.COMPONENT_REPORT_NOT_SUBMITTED.getValue())) { + notSubmitted++; + } else if (oma.getAttestationSchedule().equals(CertificationProgressEnum.COMPONENT_REPORT_SUBMITTED.getValue())) { + submitted++; + } else if (oma.getAttestationSchedule().equals(CertificationProgressEnum.COMPONENT_REPORT_HAS_BEEN_STORED.getValue())) { + stored++; + } else { + notStart++; + } + } + + Map statisticalMap = new HashMap<>(); + statisticalMap.put("plannedBpLaunchBatch", s); + statisticalMap.put("allCount", total); + List> matchStatusMapList = new ArrayList<>(); + matchStatusMapList.add(wrapStatMap("matchStatus", "matchStatusCount", OtaStatusEnum.TO_BE_MATCHED.getKey(), toBeMatched)); + matchStatusMapList.add(wrapStatMap("matchStatus", "matchStatusCount", OtaStatusEnum.TO_BE_APPROVED.getKey(), toBeApproved)); + matchStatusMapList.add(wrapStatMap("matchStatus", "matchStatusCount", OtaStatusEnum.LOCKED.getKey(), locked)); + matchStatusMapList.add(wrapStatMap("matchStatus", "matchStatusCount", OtaStatusEnum.REJECTED.getKey(), rejected)); + statisticalMap.put("matchStatusMapList", matchStatusMapList); + + Map matchStatusMap = new HashMap<>(); + matchStatusMap.put(OtaStatusEnum.TO_BE_MATCHED.getKey(), toBeMatched); + matchStatusMap.put(OtaStatusEnum.TO_BE_APPROVED.getKey(), toBeApproved); + matchStatusMap.put(OtaStatusEnum.LOCKED.getKey(), locked); + matchStatusMap.put(OtaStatusEnum.REJECTED.getKey(), rejected); + statisticalMap.put("matchStatusMap", matchStatusMap); + + List> attestationScheduleMapList = new ArrayList<>(); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.NOT_START.getValue(), notStart)); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.IN_PROGRESS.getValue(), inProgress)); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.TEST_PASSED.getValue(), testPassed)); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.TEST_FAILED.getValue(), testFailed)); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.COMPONENT_REPORT_NOT_SUBMITTED.getValue(), notSubmitted)); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.COMPONENT_REPORT_SUBMITTED.getValue(), submitted)); + attestationScheduleMapList.add(wrapStatMap("attestationSchedule", "attestationScheduleCount", CertificationProgressEnum.COMPONENT_REPORT_HAS_BEEN_STORED.getValue(), stored)); + statisticalMap.put("attestationScheduleMapList", attestationScheduleMapList); + + Map attestationScheduleMap = new HashMap<>(); + attestationScheduleMap.put(CertificationProgressEnum.NOT_START.getValue().replace(" ", "_"), notStart); + attestationScheduleMap.put(CertificationProgressEnum.IN_PROGRESS.getValue().replace(" ", "_"), inProgress); + attestationScheduleMap.put(CertificationProgressEnum.TEST_PASSED.getValue().replace(" ", "_"), testPassed); + attestationScheduleMap.put(CertificationProgressEnum.TEST_FAILED.getValue().replace(" ", "_"), testFailed); + attestationScheduleMap.put(CertificationProgressEnum.COMPONENT_REPORT_NOT_SUBMITTED.getValue().replace(" ", "_"), notSubmitted); + attestationScheduleMap.put(CertificationProgressEnum.COMPONENT_REPORT_SUBMITTED.getValue().replace(" ", "_"), submitted); + attestationScheduleMap.put(CertificationProgressEnum.COMPONENT_REPORT_HAS_BEEN_STORED.getValue().replace(" ", "_"), stored); + statisticalMap.put("attestationScheduleMap", attestationScheduleMap); + + if (!projectLibraryBaseList.isEmpty()) { + statisticalMap.put("showName", projectLibraryBaseList.get(0).getShowName()); + } + result.add(statisticalMap); + } + } + return result; + } + + private Map wrapStatMap(String key, String val, String keyStr, Object valObj) { + Map map = new HashMap<>(); + map.put(key, keyStr); + map.put(val, valObj); + return map; + } + + private List getListByIds(List idList) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(OtaManageApplyEO::getId, idList); + return this.list(queryWrapper); + } + + @Override + public ModelAndView otaExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + // Step.2 获取导出数据 + List pageList = getOtaPage(otaManageApplyEO); + List exportList = null; + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + exportList = pageList.stream().filter(e -> selectionList.contains(e.getId())).collect(Collectors.toList()); + } else { + exportList = pageList; + } + + // Step.3 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + if (CutEnum.CN.getValue().equals(otaManageApplyEO.getCut())) { + List dataList = new ArrayList<>(); + for (OtaManageApplyEO manageApplyEO : exportList) { + OtaExportCnVO otaExportCnVO = new OtaExportCnVO(); + BeanUtils.copyProperties(manageApplyEO, otaExportCnVO); + dataList.add(otaExportCnVO); + } + mv.addObject(NormalExcelConstants.CLASS, OtaExportCnVO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + ExportParams exportParams = new ExportParams("OTA软件版本", null, "OTA软件版本"); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + } else { + List dataList = new ArrayList<>(); + for (OtaManageApplyEO manageApplyEO : exportList) { + OtaExportEnVO otaExportEnVO = new OtaExportEnVO(); + BeanUtils.copyProperties(manageApplyEO, otaExportEnVO); + dataList.add(otaExportEnVO); + } + mv.addObject(NormalExcelConstants.CLASS, OtaExportEnVO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + ExportParams exportParams = new ExportParams("OTA Software version", null, "OTA Software version"); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + } + return mv; + } + + @Override + public ModelAndView allCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + // Step.2 获取导出数据 + List pageList = getAllCarPage(otaManageApplyEO); + List exportList = null; + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + exportList = pageList.stream().filter(e -> selectionList.contains(e.getId())).collect(Collectors.toList()); + } else { + exportList = pageList; + } + // Step.3 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + + if (CutEnum.CN.getValue().equals(otaManageApplyEO.getCut())) { + List dataList = new ArrayList<>(); + for (OtaManageApplyEO manageApplyEO : exportList) { + AllCarExportCnVO allCarExportVO = new AllCarExportCnVO(); + BeanUtils.copyProperties(manageApplyEO, allCarExportVO); + dataList.add(allCarExportVO); + } + mv.addObject(NormalExcelConstants.CLASS, AllCarExportCnVO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + } else { + List dataList = new ArrayList<>(); + for (OtaManageApplyEO manageApplyEO : exportList) { + AllCarExportEnVO allCarExportEnVO = new AllCarExportEnVO(); + BeanUtils.copyProperties(manageApplyEO, allCarExportEnVO); + dataList.add(allCarExportEnVO); + } + mv.addObject(NormalExcelConstants.CLASS, AllCarExportEnVO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + } + + ExportParams exportParams = new ExportParams(otaManageApplyEO.getExportName(), null, otaManageApplyEO.getExportName()); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + return mv; + } + + @Override + public ModelAndView oneCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) { + // Step.2 获取导出数据 + List pageList = getOtaCarPage(otaManageApplyEO, otaManageApplyEO.getCut()); + List exportList = null; + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + exportList = pageList.stream().filter(e -> selectionList.contains(e.getId())).collect(Collectors.toList()); + } else { + exportList = pageList; + } + + // Step.3 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + + if (CutEnum.CN.getValue().equals(otaManageApplyEO.getCut())) { + List dataList = new ArrayList<>(); + for (OtaManageApplyEO manageApplyEO : exportList) { + OneCarExportCnVO oneCarExportCnVO = new OneCarExportCnVO(); + BeanUtils.copyProperties(manageApplyEO, oneCarExportCnVO); + dataList.add(oneCarExportCnVO); + } + mv.addObject(NormalExcelConstants.CLASS, OneCarExportCnVO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + } else { + List dataList = new ArrayList<>(); + for (OtaManageApplyEO manageApplyEO : exportList) { + OneCarExportEnVO oneCarExportEnVO = new OneCarExportEnVO(); + BeanUtils.copyProperties(manageApplyEO, oneCarExportEnVO); + dataList.add(oneCarExportEnVO); + } + mv.addObject(NormalExcelConstants.CLASS, OneCarExportEnVO.class); + mv.addObject(NormalExcelConstants.DATA_LIST, dataList); + } + + ExportParams exportParams = new ExportParams(otaManageApplyEO.getExportName(), null, otaManageApplyEO.getExportName()); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + + return mv; + } + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageHistoryServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageHistoryServiceImpl.java new file mode 100644 index 000000000..24999fac2 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageHistoryServiceImpl.java @@ -0,0 +1,99 @@ +package com.jero.modules.ota.service.impl; + +import com.jero.modules.ota.entity.OtaManageHistory; +import com.jero.modules.ota.mapper.OtaManageHistoryMapper; +import com.jero.modules.ota.service.IOtaManageHistoryService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: OTA管理列表历史记录 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +@Service +public class OtaManageHistoryServiceImpl extends ServiceImpl implements IOtaManageHistoryService { + + + /** + * 保存 + * + * @param otaManageHistory + * @return + */ + @Override + public void add(OtaManageHistory otaManageHistory) { + Date now = new Date(); + otaManageHistory.setCreateTime(now); + otaManageHistory.setUpdateTime(now); + save(otaManageHistory); + } + + @Override + public void add(String appId, String contentCn, String contentEn) { + OtaManageHistory his = new OtaManageHistory(); + his.setApplyId(appId); + his.setContentCn(contentCn); + his.setContentEn(contentEn); + this.add(his); + } + + /** + * 更新 + * + * @param otaManageHistory + * @return + */ + @Override + public void editById(OtaManageHistory otaManageHistory) { + Date now = new Date(); + otaManageHistory.setUpdateTime(now); + saveOrUpdate(otaManageHistory); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public OtaManageHistory queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManagePermissionServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManagePermissionServiceImpl.java new file mode 100644 index 000000000..2dbe16f5d --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManagePermissionServiceImpl.java @@ -0,0 +1,89 @@ +package com.jero.modules.ota.service.impl; + +import com.jero.modules.ota.entity.OtaManagePermission; +import com.jero.modules.ota.mapper.OtaManagePermissionMapper; +import com.jero.modules.ota.service.IOtaManagePermissionService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: OTA管理权限列表 + * @Author: jero-boot + * @Date: 2023-08-20 + * @Version: V1.0 + */ +@Service +public class OtaManagePermissionServiceImpl extends ServiceImpl implements IOtaManagePermissionService { + + /** + * 保存 + * + * @param otaManagePermission + * @return + */ + @Override + public void add(OtaManagePermission otaManagePermission) { + Date now = new Date(); + otaManagePermission.setCreateTime(now); + otaManagePermission.setUpdateTime(now); + save(otaManagePermission); + } + + /** + * 更新 + * + * @param otaManagePermission + * @return + */ + @Override + public void editById(OtaManagePermission otaManagePermission) { + Date now = new Date(); + otaManagePermission.setUpdateTime(now); + saveOrUpdate(otaManagePermission); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public OtaManagePermission queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageReceiveNsdpServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageReceiveNsdpServiceImpl.java new file mode 100644 index 000000000..14a33cf93 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageReceiveNsdpServiceImpl.java @@ -0,0 +1,94 @@ +package com.jero.modules.ota.service.impl; + +import com.jero.modules.ota.entity.OtaManageReceiveNsdp; +import com.jero.modules.ota.mapper.OtaManageReceiveNsdpMapper; +import com.jero.modules.ota.service.IOtaManageReceiveNsdpService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: OTA管理NSDP同步表 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +@Service +public class OtaManageReceiveNsdpServiceImpl extends ServiceImpl implements IOtaManageReceiveNsdpService { + + /** + * 保存 + * + * @param otaManageReceiveNsdp + * @return + */ + @Override + public void add(OtaManageReceiveNsdp otaManageReceiveNsdp) { + Date now = new Date(); + otaManageReceiveNsdp.setCreateTime(now); + otaManageReceiveNsdp.setUpdateTime(now); + save(otaManageReceiveNsdp); + } + + /** + * 更新 + * + * @param otaManageReceiveNsdp + * @return + */ + @Override + public void editById(OtaManageReceiveNsdp otaManageReceiveNsdp) { + Date now = new Date(); + otaManageReceiveNsdp.setUpdateTime(now); + saveOrUpdate(otaManageReceiveNsdp); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public OtaManageReceiveNsdp queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } + + @Override + public List getOtaManageReceiveNsdpSync() { + return this.getBaseMapper().getOtaManageReceiveNsdpSync(); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageReceiveServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageReceiveServiceImpl.java new file mode 100644 index 000000000..8292a10d1 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaManageReceiveServiceImpl.java @@ -0,0 +1,108 @@ +package com.jero.modules.ota.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.modules.ota.entity.OtaManageReceive; +import com.jero.modules.ota.mapper.OtaManageReceiveMapper; +import com.jero.modules.ota.service.IOtaManageReceiveService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: OTA管理 + * @Author: jero-boot + * @Date: 2023-08-21 + * @Version: V1.0 + */ +@Service +public class OtaManageReceiveServiceImpl extends ServiceImpl implements IOtaManageReceiveService { + + /** + * 保存 + * + * @param otaManageReceive + * @return + */ + @Override + public void add(OtaManageReceive otaManageReceive) { + Date now = new Date(); + otaManageReceive.setCreateTime(now); + otaManageReceive.setUpdateTime(now); + save(otaManageReceive); + } + + /** + * 更新 + * + * @param otaManageReceive + * @return + */ + @Override + public void editById(OtaManageReceive otaManageReceive) { + Date now = new Date(); + otaManageReceive.setUpdateTime(now); + saveOrUpdate(otaManageReceive); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public OtaManageReceive queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return this.getBaseMapper().getReceiveList(); + } + + @Override + public List getReceiveByVdr(List vdrList) { + return this.getBaseMapper().getReceiveByVdr(vdrList); + } + + @Override + public List getReceiveByplanned(String plannedBpLaunchBatch) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(OtaManageReceive::getPlannedBpLaunchBatch, plannedBpLaunchBatch); + return this.list(queryWrapper); + } + + @Override + public List getReceiveSync() { + return this.getBaseMapper().getReceiveSync(); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/AllCarExportCnVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/AllCarExportCnVO.java new file mode 100644 index 000000000..6aafe915a --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/AllCarExportCnVO.java @@ -0,0 +1,52 @@ +package com.jero.modules.ota.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class AllCarExportCnVO { + + @Excel(name = "VDR", width = 15) + @ApiModelProperty(value = "VDR") + private java.lang.String vdr; + + @Excel(name = "主题", width = 15) + @ApiModelProperty(value = "主题") + private java.lang.String summary; + + @Excel(name = "VDR状态", width = 15) + @ApiModelProperty(value = "VDR状态") + private java.lang.String status; + + @Excel(name = "认证影响", width = 15) + @ApiModelProperty(value = "认证影响") + private java.lang.String homologationImpact; + + @Excel(name = "影响描述", width = 30) + @ApiModelProperty(value = "影响描述") + private java.lang.String homologation; + + @Excel(name = "影响法规-CN", width = 15) + @ApiModelProperty(value = "影响法规-CN") + private java.lang.String impactCnHomo; + + @Excel(name = "影响法规-EU", width = 15) + @ApiModelProperty(value = "影响法规-EU") + private java.lang.String impactEuHomo; + + @Excel(name = "责任部门", width = 15) + @ApiModelProperty(value = "责任部门") + private java.lang.String masterDomain; + + @Excel(name = "适用车型", width = 50) + @ApiModelProperty(value = "适用车型") + private java.lang.String appliedVehicleProject; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/AllCarExportEnVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/AllCarExportEnVO.java new file mode 100644 index 000000000..d0a6c4057 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/AllCarExportEnVO.java @@ -0,0 +1,51 @@ +package com.jero.modules.ota.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class AllCarExportEnVO { + + @Excel(name = "VDR", width = 15) + @ApiModelProperty(value = "VDR") + private String vdr; + + @Excel(name = "theme", width = 15) + @ApiModelProperty(value = "主题") + private String summary; + + @Excel(name = "VDR status", width = 15) + @ApiModelProperty(value = "VDR状态") + private String status; + + @Excel(name = "Authentication impact", width = 15) + @ApiModelProperty(value = "认证影响") + private String homologationImpact; + + @Excel(name = "Impact statement", width = 30) + @ApiModelProperty(value = "影响描述") + private String homologation; + + @Excel(name = "Influence statute-CN", width = 15) + @ApiModelProperty(value = "影响法规-CN") + private String impactCnHomo; + + @Excel(name = "Influence statute-EU", width = 15) + @ApiModelProperty(value = "影响法规-EU") + private String impactEuHomo; + + @Excel(name = "Duty Department", width = 15) + @ApiModelProperty(value = "责任部门") + private String masterDomain; + + @Excel(name = "Vehicle Type", width = 50) + @ApiModelProperty(value = "适用车型") + private String appliedVehicleProject; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OneCarExportCnVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OneCarExportCnVO.java new file mode 100644 index 000000000..16de02882 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OneCarExportCnVO.java @@ -0,0 +1,91 @@ +package com.jero.modules.ota.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class OneCarExportCnVO { + + @Excel(name = "VDR", width = 15) + @ApiModelProperty(value = "VDR") + private java.lang.String vdr; + + @Excel(name = "主题", width = 15) + @ApiModelProperty(value = "主题") + private java.lang.String summary; + + @Excel(name = "VDR状态", width = 15) + @ApiModelProperty(value = "VDR状态") + private java.lang.String status; + + @Excel(name = "认证影响", width = 15) + @ApiModelProperty(value = "认证影响") + private java.lang.String homologationImpact; + + @Excel(name = "影响说明", width = 30) + @ApiModelProperty(value = "影响说明") + private java.lang.String homologation; + + @Excel(name = "影响法规-CN", width = 15) + @ApiModelProperty(value = "影响法规-CN") + private java.lang.String impactCnHomo; + + @Excel(name = "影响法规-EU", width = 15) + @ApiModelProperty(value = "影响法规-EU") + private java.lang.String impactEuHomo; + + @Excel(name = "责任部门", width = 15) + @ApiModelProperty(value = "责任部门") + private java.lang.String masterDomain; + + @Excel(name = "R&H Studio", width = 15) + @ApiModelProperty(value = "R&H Studio") + private java.lang.String studioText; + + @Excel(name = "项目版本", width = 15) + @ApiModelProperty(value = "项目版本") + private java.lang.String projectVersionText; + + @Excel(name = "认证开始", width = 15) + @ApiModelProperty(value = "认证开始") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date attestationStartTime; + + @Excel(name = "认证申报", width = 15) + @ApiModelProperty(value = "认证申报") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date certificationSubmission; + + @Excel(name = "认证批准", width = 15) + @ApiModelProperty(value = "认证批准") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date attestationEndTime; + + @Excel(name = "认证进度", width = 15) + @ApiModelProperty(value = "认证进度") + private java.lang.String attestationSchedule; + + @Excel(name = "匹配状态", width = 15) + @ApiModelProperty(value = "匹配状态") + private java.lang.String matchStatusText; + + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private java.lang.String remark; + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OneCarExportEnVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OneCarExportEnVO.java new file mode 100644 index 000000000..ed6af67df --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OneCarExportEnVO.java @@ -0,0 +1,90 @@ +package com.jero.modules.ota.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class OneCarExportEnVO { + + @Excel(name = "VDR", width = 15) + @ApiModelProperty(value = "VDR") + private String vdr; + + @Excel(name = "theme", width = 15) + @ApiModelProperty(value = "主题") + private String summary; + + @Excel(name = "VDR status", width = 15) + @ApiModelProperty(value = "VDR状态") + private String status; + + @Excel(name = "Authentication impact", width = 15) + @ApiModelProperty(value = "认证影响") + private String homologationImpact; + + @Excel(name = "Impact statement", width = 30) + @ApiModelProperty(value = "影响说明") + private String homologation; + + @Excel(name = "Influence statute-CN", width = 15) + @ApiModelProperty(value = "影响法规-CN") + private String impactCnHomo; + + @Excel(name = "Influence statute-EU", width = 15) + @ApiModelProperty(value = "影响法规-EU") + private String impactEuHomo; + + @Excel(name = "Duty Department", width = 15) + @ApiModelProperty(value = "责任部门") + private String masterDomain; + + @Excel(name = "R&H Studio", width = 15) + @ApiModelProperty(value = "R&H Studio") + private String studioText; + + @Excel(name = "Project Version", width = 15) + @ApiModelProperty(value = "项目版本") + private String projectVersionText; + + @Excel(name = "Homo Starts", width = 15) + @ApiModelProperty(value = "认证开始") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date attestationStartTime; + + @Excel(name = "Certification declaration", width = 15) + @ApiModelProperty(value = "认证申报") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date certificationSubmission; + + @Excel(name = "Homo Approved", width = 15) + @ApiModelProperty(value = "认证批准") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date attestationEndTime; + + @Excel(name = "Homologation Progress", width = 15) + @ApiModelProperty(value = "认证进度") + private String attestationSchedule; + + @Excel(name = "Matching state", width = 15) + @ApiModelProperty(value = "匹配状态") + private String matchStatusText; + + @Excel(name = "remarks", width = 15) + @ApiModelProperty(value = "备注") + private String remark; + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OtaExportCnVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OtaExportCnVO.java new file mode 100644 index 000000000..d0ec8f9af --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OtaExportCnVO.java @@ -0,0 +1,34 @@ +package com.jero.modules.ota.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.util.Date; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class OtaExportCnVO { + + @Excel(name = "软件版本", width = 15) + @ApiModelProperty(value = "软件版本") + private java.lang.String plannedBpLaunchBatch; + + @Excel(name = "市场", width = 15) + @ApiModelProperty(value = "市场") + private java.lang.String market; + + @Excel(name = "适用车型", width = 50) + @ApiModelProperty(value = "适用车型") + private java.lang.String appliedVehicleProject; + + @Excel(name = "软件发布时间", width = 15) + @ApiModelProperty(value = "软件发布时间") + private String releaseDate; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OtaExportEnVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OtaExportEnVO.java new file mode 100644 index 000000000..7b4126151 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/OtaExportEnVO.java @@ -0,0 +1,31 @@ +package com.jero.modules.ota.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class OtaExportEnVO { + + @Excel(name = "Software version", width = 15) + @ApiModelProperty(value = "软件版本") + private String plannedBpLaunchBatch; + + @Excel(name = "Market", width = 15) + @ApiModelProperty(value = "市场") + private String market; + + @Excel(name = "Vehicle Type", width = 50) + @ApiModelProperty(value = "适用车型") + private String appliedVehicleProject; + + @Excel(name = "Software release time", width = 15) + @ApiModelProperty(value = "软件发布时间") + private String releaseDate; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/VersionVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/VersionVO.java new file mode 100644 index 000000000..e8bf7f9bc --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/vo/VersionVO.java @@ -0,0 +1,67 @@ +package com.jero.modules.ota.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @description + * @date 2023/8/9 11:28 + * @auth zhn + */ +@Data +public class VersionVO { + + @ApiModelProperty(value = "项目id") + private String projectId; + + @ApiModelProperty(value = "父id") + private String parentId; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "认证开始") + private Date attestationStartTime; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "认证申报") + private Date certificationSubmission; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "认证批准") + private Date attestationEndTime; + + @ApiModelProperty(value = "认证进度") + private String attestationSchedule; + + @ApiModelProperty(value = "认证进度") + private String attestationScheduleText; + + + @ApiModelProperty(value = "车型") + private String car; + + @ApiModelProperty(value = "年款") + private String yearName; + + @ApiModelProperty(value = "市场") + private String market; + + @ApiModelProperty(value = "版本号") + private String versionNumber; + + @ApiModelProperty(value = "studio") + private String studio; + + @ApiModelProperty(value = "项目版本名称") + private String versionName; + + @ApiModelProperty(value = "项目版本-id") + private java.lang.String projectVersion; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java index ddee18b2a..9ada44daf 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java @@ -23,7 +23,9 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** @@ -103,8 +105,10 @@ public class ProjectTaskPlanningController extends JeroController edit(@Validated @RequestBody ProjectTaskPlanning projectTaskPlanning) { - projectTaskPlanningService.editById(projectTaskPlanning); - return Result.OK("编辑成功!"); + boolean matchVdr = projectTaskPlanningService.editById(projectTaskPlanning); + Map res = new HashMap<>(); + res.put("matchVdr",matchVdr); + return Result.OK("编辑成功!",res); } /** diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/CertificationProgressEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/CertificationProgressEnum.java index 3eb8ffd21..f4cac7ae5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/CertificationProgressEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/CertificationProgressEnum.java @@ -15,6 +15,8 @@ public enum CertificationProgressEnum { COMPONENT_REPORT_NOT_SUBMITTED("部件报告未提交","Component report not submitted","5"), COMPONENT_REPORT_SUBMITTED("部件报告已提交","Component report submitted","6"), COMPONENT_REPORT_HAS_BEEN_STORED("部件报告已入库","Component report has been stored","7"), + NA("null","null","8"), + ; String name; @@ -74,4 +76,14 @@ public enum CertificationProgressEnum { } return null; } + + public static CertificationProgressEnum getByValue(String value) { + CertificationProgressEnum[] values = values(); + for (CertificationProgressEnum certificationProgressEnum : values) { + if (certificationProgressEnum.value.equals(value)) { + return certificationProgressEnum; + } + } + return NA; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java index bf11fb26c..177df9c1b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectLibraryBaseMapper.java @@ -26,4 +26,8 @@ public interface ProjectLibraryBaseMapper extends BaseMapper List queryById(String id); ProjectLibraryBase selectProjectName(@Param("projectLibraryId") String projectLibraryId); + + List getListByIds(@Param("idList") List idList); + + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml index 72c19665d..0a9425628 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectLibraryBaseMapper.xml @@ -290,4 +290,14 @@ WHERE plb.id = #{projectLibraryId} + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLibraryBaseService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLibraryBaseService.java index b5009e368..887732bec 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLibraryBaseService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLibraryBaseService.java @@ -184,4 +184,8 @@ public interface IProjectLibraryBaseService extends IService * @return */ Result overallReplacementUser(JSONObject json); + + List queryList(List projectIdList); + + List getListByIds(List projectIdList); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java index 441d49700..62d468894 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java @@ -28,7 +28,7 @@ public interface IProjectTaskPlanningService extends IService> mapList = otaManageApplyEOService.getStatisticalStatus(projectLibraryId, null, cut,null); + + if(ObjectUtils.isNotEmpty(mapList)){ + int dataIndex = 2; + for (Map map : mapList) { + String plannedBpLaunchBatch = (String) map.get("plannedBpLaunchBatch"); + Map matchStatusMap = (Map)map.get("matchStatusMap"); + Map attestationScheduleMap = (Map)map.get("attestationScheduleMap"); + + String.valueOf(matchStatusMap.get("locked")); + String locked = String.valueOf(matchStatusMap.get("locked")); + String rejected = String.valueOf(matchStatusMap.get("rejected")); + String to_be_approved = String.valueOf(matchStatusMap.get("to_be_approved")); + String to_be_matched = String.valueOf(matchStatusMap.get("to_be_matched")); + String Component_report_has_been_stored = String.valueOf(attestationScheduleMap.get("Component_report_has_been_stored")); + String Component_report_not_submitted = String.valueOf(attestationScheduleMap.get("Component_report_not_submitted")); + String Component_report_submitted = String.valueOf(attestationScheduleMap.get("Component_report_submitted")); + String In_progress = String.valueOf(attestationScheduleMap.get("In_progress")); + String Not_start =String.valueOf(attestationScheduleMap.get("Not_start")); + String Test_failed = String.valueOf(attestationScheduleMap.get("Test_failed")); + String Test_passed = String.valueOf(attestationScheduleMap.get("Test_passed")); + Row dataRow = sheet.createRow(dataIndex); + dataRow.createCell(0).setCellValue(plannedBpLaunchBatch); + dataRow.createCell(1).setCellValue(to_be_matched); + dataRow.createCell(2).setCellValue(to_be_approved); + dataRow.createCell(3).setCellValue(locked); + dataRow.createCell(4).setCellValue(rejected); + dataRow.createCell(5).setCellValue(Not_start); + dataRow.createCell(6).setCellValue(In_progress); + dataRow.createCell(7).setCellValue(Test_passed); + dataRow.createCell(8).setCellValue(Test_failed); + dataRow.createCell(9).setCellValue(Component_report_not_submitted); + dataRow.createCell(10).setCellValue(Component_report_submitted); + dataRow.createCell(11).setCellValue(Component_report_has_been_stored); + dataIndex ++; + } + } + } /** * 导出认证参数收集-设置数据 @@ -3423,6 +3516,24 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl queryList(List projectIdList) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("id",projectIdList); + List res = this.list(queryWrapper); + return res; + } + + @Override + public List getListByIds(List projectIdList) { + List res = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(projectIdList)){ + res = this.getBaseMapper().getListByIds(projectIdList); + } + return res; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java index cec41a4d1..633a99b7d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java @@ -1,13 +1,10 @@ package com.jero.modules.project.service.impl; -import com.alibaba.fastjson.JSONObject; import com.aliyuncs.utils.IOUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jero.common.constant.enums.CutEnum; import com.jero.common.exception.JeroBootException; -import com.jero.common.system.query.QueryGenerator; -import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.DateUtils; import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO; @@ -20,8 +17,21 @@ import com.jero.modules.cert.collect.service.IParamsManifestEOService; import com.jero.modules.cert.collect.service.IParamsManifestHistoryEOService; import com.jero.modules.cert.report.entity.ParamsReportConfigDataEO; import com.jero.modules.cert.template.enums.ControlTypeEnum; -import com.jero.modules.project.entity.*; -import com.jero.modules.project.enums.*; +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.jero.modules.ota.service.impl.OtaManageApplyEOServiceImpl; +import com.jero.modules.project.entity.ConditionAssessmentEO; +import com.jero.modules.project.entity.ProjectCertificationInventoryEO; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectTaskInventoryEO; +import com.jero.modules.project.entity.ProjectTaskPlanning; +import com.jero.modules.project.enums.CertificationProgressEnum; +import com.jero.modules.project.enums.CurrentProjectStatusEnum; +import com.jero.modules.project.enums.InventoryAffirmStatusEnum; +import com.jero.modules.project.enums.ProjectRoleEnum; +import com.jero.modules.project.enums.ProjectTaskPlanningNameEnum; +import com.jero.modules.project.enums.ReviewResultEnum; +import com.jero.modules.project.enums.TaskAffirmStatusEnum; import com.jero.modules.project.mapper.ProjectUserPermissionMapper; import com.jero.modules.project.service.IConditionAssessmentEOService; import com.jero.modules.project.service.IProjectCertificationInventoryEOService; @@ -29,7 +39,6 @@ import com.jero.modules.project.service.IProjectLibraryStatisticsService; import com.jero.modules.project.service.IProjectStatusBoardService; import com.jero.modules.project.vo.TimeNodeVO; import com.jero.modules.system.entity.SysDictItem; -import com.jero.modules.system.enums.DicCodeEnum; import com.jero.modules.system.mapper.SysRoleMapper; import com.jero.modules.system.service.IProjectUserBrandService; import com.jero.modules.system.service.ISysUserService; @@ -41,7 +50,12 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.shiro.SecurityUtils; import org.jetbrains.annotations.NotNull; @@ -56,8 +70,17 @@ import java.io.OutputStream; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.CountDownLatch; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -103,6 +126,8 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService private IParamsCollectManifestHistoryEOService paramsCollectManifestHistoryEOService; @Autowired private IProjectLibraryStatisticsService projectLibraryStatisticsService; + @Autowired + private OtaManageApplyEOServiceImpl otaManageApplyEOService; /** @@ -650,6 +675,24 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService List ptpEoList = this.projectTaskPlanningService.list(); List pmEoList = this.paramsManifestEOService.list(); pmEoList.addAll(this.paramsManifestHistoryEOService.list()); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.isNotNull(OtaManageApplyEO::getProjectVersion); + List projectIdList = otaManageApplyEOService.list(wrapper).stream().map(OtaManageApplyEO::getProjectVersion).distinct().collect(Collectors.toList()); + List> mapList = new ArrayList<>(); + if(!projectIdList.isEmpty()){ + List projectIdListTemp = plbEoList.stream() + .filter(e -> projectIdList.contains(e.getId())).map(ProjectLibraryBase::getId).distinct().collect(Collectors.toList()); + if(!projectIdListTemp.isEmpty()){ + for (String projectId : projectIdListTemp) { + List> statisticalStatus = otaManageApplyEOService.getStatisticalStatus(projectId, + "", + projectLibraryBase.getCut(),plbEoList); + mapList.addAll(statisticalStatus); + } + } + } + log.info("一阶段消耗时间:" + (System.currentTimeMillis() - startTime)); List pcmEoList = this.paramsCollectManifestEOService.getList(null); List pcmHisEoList = this.paramsCollectManifestHistoryEOService.list(); @@ -667,6 +710,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService HSSFSheet corssProjectProgressSheet = createCorssProjectProgressSheet(workbook, projectLibraryBase); HSSFSheet overviewCrossProjectProgressSheet = this.createOverviewCrossProjectProgressSheet(workbook, projectLibraryBase); + HSSFSheet otaSheet = createOtaSheet(workbook, projectLibraryBase); CellStyle cellStyleTitle = workbook.createCellStyle(); cellStyleTitle.setAlignment(HorizontalAlignment.CENTER); cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER); @@ -690,14 +734,24 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService } }); + // 创建线程三 + Thread thread3 = new Thread(new Runnable() { + @Override + public void run() { + exportOtaSetData(mapList, otaSheet, finalPlbEoList); + } + }); + // 启动线程一和线程二 thread1.start(); thread2.start(); + thread3.start(); // 等待线程一和线程二执行完毕 try { thread1.join(); thread2.join(); + thread3.join(); } catch (InterruptedException e) { e.printStackTrace(); } @@ -721,6 +775,45 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService log.info("总消耗时间:" + (System.currentTimeMillis() - startTime)); } + private void exportOtaSetData(List> finalStatisticalStatus, HSSFSheet otaSheet,List plbEoList) { + if(ObjectUtils.isNotEmpty(finalStatisticalStatus)){ + int dataIndex = 2; + for (Map map : finalStatisticalStatus) { + String plannedBpLaunchBatch = (String) map.get("plannedBpLaunchBatch"); + Map matchStatusMap = (Map)map.get("matchStatusMap"); + Map attestationScheduleMap = (Map)map.get("attestationScheduleMap"); + + String showName = String.valueOf(map.get("showName")); + String locked = String.valueOf(matchStatusMap.get("locked")); + String rejected = String.valueOf(matchStatusMap.get("rejected")); + String to_be_approved = String.valueOf(matchStatusMap.get("to_be_approved")); + String to_be_matched = String.valueOf(matchStatusMap.get("to_be_matched")); + String Component_report_has_been_stored = String.valueOf(attestationScheduleMap.get("Component_report_has_been_stored")); + String Component_report_not_submitted = String.valueOf(attestationScheduleMap.get("Component_report_not_submitted")); + String Component_report_submitted = String.valueOf(attestationScheduleMap.get("Component_report_submitted")); + String In_progress = String.valueOf(attestationScheduleMap.get("In_progress")); + String Not_start =String.valueOf(attestationScheduleMap.get("Not_start")); + String Test_failed = String.valueOf(attestationScheduleMap.get("Test_failed")); + String Test_passed = String.valueOf(attestationScheduleMap.get("Test_passed")); + Row dataRow = otaSheet.createRow(dataIndex); + dataRow.createCell(0).setCellValue(showName); + dataRow.createCell(1).setCellValue(plannedBpLaunchBatch); + dataRow.createCell(2).setCellValue(to_be_matched); + dataRow.createCell(3).setCellValue(to_be_approved); + dataRow.createCell(4).setCellValue(locked); + dataRow.createCell(5).setCellValue(rejected); + dataRow.createCell(6).setCellValue(Not_start); + dataRow.createCell(7).setCellValue(In_progress); + dataRow.createCell(8).setCellValue(Test_passed); + dataRow.createCell(9).setCellValue(Test_failed); + dataRow.createCell(10).setCellValue(Component_report_not_submitted); + dataRow.createCell(11).setCellValue(Component_report_submitted); + dataRow.createCell(12).setCellValue(Component_report_has_been_stored); + dataIndex ++; + } + } + } + /** * 导出跨项目进度 * @param workbook @@ -1165,6 +1258,66 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService } return sheet; } + public HSSFSheet createOtaSheet(HSSFWorkbook workbook, ProjectLibraryBase projectLibraryBase){ + String cut = projectLibraryBase.getCut(); + String sheetName = "OTA状态"; + String firstTitle = "项目,软件版本,匹配状态统计,OTA认证进度统计"; + String secondTitle = ",,待匹配,待审批,锁定,退回,未开始,进行中,实验通过,实验失败,部件报告未提交,部件报告已提交,部件报告已入库"; + if(com.jero.modules.system.util.StringUtils.equals(cut,CutEnum.EN.getValue())){ + sheetName = "OTA status"; + firstTitle = "Project,Software version,Matching state statistics,OTA authentication progress statistics"; + secondTitle = ",,To be matched," + + "To be approved," + + "lock," + + "Reject,"+ + "Not started," + + "Ongoing," + + "Test Passed," + + "Test Failed," + + "Component report not submitted," + + "Component report submitted," + + "Component report has been stored"; + } + HSSFSheet sheet = workbook.createSheet(sheetName); + CellRangeAddress region1 = new CellRangeAddress(0, 1, 0, 0); + sheet.addMergedRegion(region1); + CellRangeAddress region2 = new CellRangeAddress(0, 1, 1, 1); + sheet.addMergedRegion(region2); + CellRangeAddress region3 = new CellRangeAddress(0, 0, 2, 5); + sheet.addMergedRegion(region3); + CellRangeAddress region4 = new CellRangeAddress(0, 0, 6, 12); + sheet.addMergedRegion(region4); + + String[] firstTitleArr = firstTitle.split(","); + String[] secondTitleArr = secondTitle.split(","); + Row firstRow = sheet.createRow(0); + Row secondRow = sheet.createRow(1); + + CellStyle cellStyleTitle = workbook.createCellStyle(); + cellStyleTitle.setAlignment(HorizontalAlignment.CENTER); + cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER); + for (int i = 0; i <= 8; i++){ + sheet.setColumnWidth(i, 4000); + Cell firstRowCell = firstRow.createCell(i); + firstRowCell.setCellStyle(cellStyleTitle); + if(i == 0){ + firstRowCell.setCellValue(firstTitleArr[0]); + }else if(i == 1){ + firstRowCell.setCellValue(firstTitleArr[1]); + }else if(i == 2){ + firstRowCell.setCellValue(firstTitleArr[2]); + }else if(i == 6){ + firstRowCell.setCellValue(firstTitleArr[3]); + } + + if(i >= 2){ + Cell secondRowCell = secondRow.createCell(i); + secondRowCell.setCellStyle(cellStyleTitle); + secondRowCell.setCellValue(secondTitleArr[i]); + } + } + return sheet; + } /** * 导出跨项目进度概览-设置数据 diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java index 2130aae07..e62ccabed 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java @@ -4,12 +4,15 @@ package com.jero.modules.project.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.constant.enums.CutEnum; import com.jero.common.system.vo.LoginUser; +import com.jero.modules.ota.entity.OtaManageApplyEO; +import com.jero.modules.ota.service.IOtaManageApplyEOService; import com.jero.modules.project.entity.ProjectTaskPlanning; import com.jero.modules.project.enums.PlanStatusEnum; import com.jero.modules.project.enums.ProjectTaskPlanningNameEnum; import com.jero.modules.project.mapper.ProjectTaskPlanningMapper; import com.jero.modules.project.service.IProjectTaskPlanningService; import com.jero.modules.project.vo.TimeNodeVO; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; @@ -31,6 +34,8 @@ public class ProjectTaskPlanningServiceImpl extends ServiceImpl vdrList = otaManageApplyEOService.getVdrListByProject(projectTaskPlanning.getProjectId(),""); + if(CollectionUtils.isNotEmpty(vdrList)){ + matchVdr = true; + } + } deleteById(projectTaskPlanning.getId()); add(projectTaskPlanning); } + return matchVdr; + } + + private boolean compareDate(Date oldDate, Date newDate) { + if (oldDate == null) { + if (newDate != null) { + return true; + } + } else { + if (newDate == null || (newDate != null && !oldDate.equals(newDate))) { + return true; + } + } + return false; } /** diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index 6aca60ca4..d1a4b3e79 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -1926,5 +1926,32 @@ module.exports = { processInitiationOne:'Process Initiation', taskHandlingOne:'Task Handling', taskReview:'Task Review', + softwareversion:'Software version', + softwareplatform:'Software platform', + softwarereleasetime:'Software release time', + theme:'theme', + influencestatute:'Influence statute', + vdrste:'VDR status', + impactdescription:'Impact description', + authenticationimpact:'Authentication impact', + impactstatement:'Impact statement', + certificationdeclaration:'Certification declaration', + matchingstate:'Matching state', + issuenotice:'Issue notice', + applyforrematch:'Apply for rematch', + notificationsent:'Is a notification sent?', + VDRDetails:'VDR Details', + applicationprojectversion:'Application project version', + selectlocked:'You can select only the data whose matching status is locked', + otastatus:'OTA status', + Matchingstatestatistics:'Matching state statistics', + OTaauthenticationprogressstatistics:'OTA authentication progress statistics', + tobematched:'To be matched', + Pendingapproval:'To be approved', + lock:'lock', + datacannotbeedited:'This data cannot be edited', + Rematchornot:'Rematch or not', + Modifyremarks:'Modify remarks', + Reasonforreturn:'Reason for return', maintenanceTemplate:'Maintenance template', } \ No newline at end of file diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index f7e2c1205..181bda87e 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -3883,4 +3883,31 @@ module.exports = { taskHandlingOne:'任务办理', taskReview:'任务审查', maintenanceTemplate:'维护模板', + softwareversion:'软件版本', + softwareplatform:'软件平台', + softwarereleasetime:'软件发布时间', + theme:'主题', + influencestatute:'影响法规', + vdrste:'VDR状态', + impactdescription:'影响描述', + authenticationimpact:'认证影响', + impactstatement:'影响说明', + certificationdeclaration:'认证申报', + matchingstate:'匹配状态', + issuenotice:'下发通知', + applyforrematch:'申请重新匹配', + notificationsent:'是否下发通知?', + VDRDetails:'VDR详情', + applicationprojectversion:'应用项目版本', + selectlocked:'只能选择匹配状态为锁定的数据', + otastatus:'OTA状态', + Matchingstatestatistics:'匹配状态统计', + OTaauthenticationprogressstatistics:'OTA认证进度统计', + tobematched:'待匹配', + Pendingapproval:'待审批', + lock:'锁定', + datacannotbeedited:'该数据不能进行编辑', + Rematchornot:'是否重新匹配', + Modifyremarks:'修改备注', + Reasonforreturn:'退回原因' } \ No newline at end of file diff --git a/jero-web/src/components/dict/JDictSelectTag.vue b/jero-web/src/components/dict/JDictSelectTag.vue index 4386292d3..29fc1fc27 100644 --- a/jero-web/src/components/dict/JDictSelectTag.vue +++ b/jero-web/src/components/dict/JDictSelectTag.vue @@ -11,6 +11,7 @@ + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/components/batSetting.vue b/jero-web/src/views/otamanagement/otaAuthentication/components/batSetting.vue new file mode 100644 index 000000000..53e0042a2 --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/components/batSetting.vue @@ -0,0 +1,286 @@ + + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/components/detil.vue b/jero-web/src/views/otamanagement/otaAuthentication/components/detil.vue new file mode 100644 index 000000000..b5af70c4d --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/components/detil.vue @@ -0,0 +1,1534 @@ + + + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/components/historyTable.vue b/jero-web/src/views/otamanagement/otaAuthentication/components/historyTable.vue new file mode 100644 index 000000000..c519416d3 --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/components/historyTable.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/components/rejectReason.vue b/jero-web/src/views/otamanagement/otaAuthentication/components/rejectReason.vue new file mode 100644 index 000000000..6d34ce588 --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/components/rejectReason.vue @@ -0,0 +1,223 @@ + + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/components/remark.vue b/jero-web/src/views/otamanagement/otaAuthentication/components/remark.vue new file mode 100644 index 000000000..e8d571859 --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/components/remark.vue @@ -0,0 +1,220 @@ + + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/components/vdrDetial.vue b/jero-web/src/views/otamanagement/otaAuthentication/components/vdrDetial.vue new file mode 100644 index 000000000..125aabf9a --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/components/vdrDetial.vue @@ -0,0 +1,262 @@ + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/otamanagement/otaAuthentication/index.vue b/jero-web/src/views/otamanagement/otaAuthentication/index.vue new file mode 100644 index 000000000..54d7fb544 --- /dev/null +++ b/jero-web/src/views/otamanagement/otaAuthentication/index.vue @@ -0,0 +1,448 @@ + + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/components/addModel.vue b/jero-web/src/views/projectManagement/components/addModel.vue index 080bbc79f..49671c5cc 100644 --- a/jero-web/src/views/projectManagement/components/addModel.vue +++ b/jero-web/src/views/projectManagement/components/addModel.vue @@ -474,6 +474,7 @@ this.$message.success(this.$t('OperationSuccessful')) this.visible = false this.$emit('addModelList') + // this.vdrClick() } else { this.$message.warning(res.message) this.confirmLoading = false @@ -482,6 +483,19 @@ } }) }, + // 跳转vdr + // vdrClick(){ + // let _this = this + // this.$confirm({ + // content: _this.$t('Rematchornot') + 'VDR', + // onOk() { + // let newUrl = _this.$router.resolve({ + // path:'otaAuthentication', + // }) + // window.open(newUrl.href, '_blank') + // } + // }) + // }, handleInput(value) { this.$nextTick(() => { this.formInline = { ...this.formInline } diff --git a/jero-web/src/views/projectManagement/components/otastatus.vue b/jero-web/src/views/projectManagement/components/otastatus.vue new file mode 100644 index 000000000..245bb8490 --- /dev/null +++ b/jero-web/src/views/projectManagement/components/otastatus.vue @@ -0,0 +1,506 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/components/projectStatus.vue b/jero-web/src/views/projectManagement/components/projectStatus.vue index 0ebef98b0..c71874cfe 100644 --- a/jero-web/src/views/projectManagement/components/projectStatus.vue +++ b/jero-web/src/views/projectManagement/components/projectStatus.vue @@ -28,6 +28,9 @@ + + + @@ -37,6 +40,7 @@ import certificationActivity from './certificationActivity' import parameterCollectionProgress from './parameterCollectionProgress' import nonConformance from './nonConformance' + import otastatus from './otastatus' import { getAction, postAction } from '@/api/manage' export default { @@ -45,7 +49,8 @@ parameterCollectionProgress, regulatoryCompliance, certificationActivity, - nonConformance + nonConformance, + otastatus }, data() { return { diff --git a/jero-web/src/views/projectManagement/components/settingList.vue b/jero-web/src/views/projectManagement/components/settingList.vue index fbb5776ab..6e08ddd65 100644 --- a/jero-web/src/views/projectManagement/components/settingList.vue +++ b/jero-web/src/views/projectManagement/components/settingList.vue @@ -515,6 +515,9 @@ this.visible = false this.confirmLoading = false this.$emit('settingListForm') + if(res.result.matchVdr == true){ + this.vdrClick() + } } else { this.$message.warning(this.$t('operationFailed')) this.confirmLoading = false @@ -523,6 +526,19 @@ } }) }, + // 跳转vdr + vdrClick(){ + let _this = this + this.$confirm({ + content: _this.$t('Rematchornot') + 'VDR', + onOk() { + let newUrl = _this.$router.resolve({ + path:'otaAuthentication', + }) + window.open(newUrl.href, '_blank') + } + }) + }, handleCancel() { this.formInline = {} this.visible = false