diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/PlatformProjectLawsInventoryEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/PlatformProjectLawsInventoryEOController.java new file mode 100644 index 000000000..817b54f74 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/PlatformProjectLawsInventoryEOController.java @@ -0,0 +1,576 @@ +package com.jero.modules.projectPlatform.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.itextpdf.text.DocumentException; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.constant.enums.CutEnum; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.PageUtil; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.dummy.entity.DummyInventoryBaseEO; +import com.jero.modules.dummy.service.IDummyInventoryBaseEOService; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.service.IProjectLawsInventoryEOService; +import com.jero.modules.project.vo.ProjectTaskUrgVo; +import com.jero.modules.projectPlatform.service.IPlatformProjectLawsInventoryEOService; +import com.jero.modules.system.entity.SysRole; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + + +/** + * @Description: 项目库-法规清单表 + * @Author: jero-boot + * @Date: 2022-04-14 + * @Version: V1.0 + */ +@Api(tags="平台件项目库-法规清单表") +@RestController +@RequestMapping("/project/platformProjectLawsInventoryEO") +@Slf4j +public class PlatformProjectLawsInventoryEOController extends JeroController { + @Autowired + private IPlatformProjectLawsInventoryEOService projectLawsInventoryEOService; + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + @Autowired + private IDummyInventoryBaseEOService dummyInventoryBaseEOService; + + /** + * 分页列表查询 + * + * @param projectLawsInventoryEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "项目库-法规清单表-分页列表查询") + @ApiOperation(value="项目库-法规清单表-分页列表查询", notes="项目库-法规清单表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(ProjectLawsInventoryEO projectLawsInventoryEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + IPage pageList = this.projectLawsInventoryEOService.queryPage(projectLawsInventoryEO,pageNo,pageSize,req); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "项目库-法规清单表-列表查询") + @ApiOperation(value="项目库-法规清单表-列表查询", notes="项目库-法规清单表-列表查询") + @GetMapping(value = "/list") + @RequiresPermissions("projectLawsInventory:list") + public Result> queryList(ProjectLawsInventoryEO projectLawsInventoryEO,HttpServletRequest req) { + List list = projectLawsInventoryEOService.queryList(projectLawsInventoryEO,req); + return Result.OK(projectLawsInventoryEO.getCut(),list); + } + + /** + * 添加 + * + * @param projectLawsInventoryEO + * @return + */ + @AutoLog(value = "项目库-法规清单表-添加") + @ApiOperation(value="项目库-法规清单表-添加", notes="项目库-法规清单表-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody ProjectLawsInventoryEO projectLawsInventoryEO) { + projectLawsInventoryEOService.add(projectLawsInventoryEO); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param projectLawsInventoryEO + * @return + */ + @AutoLog(value = "项目库-法规清单表-编辑") + @ApiOperation(value="项目库-法规清单表-编辑", notes="项目库-法规清单表-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody ProjectLawsInventoryEO projectLawsInventoryEO) { + projectLawsInventoryEOService.editById(projectLawsInventoryEO); + return Result.OK("编辑成功!"); + } + + /** + * 通过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, + @RequestParam(name="projectLibraryId",required=true) String projectLibraryId, + @RequestParam(name="cut",required=true) String cut) { + projectLawsInventoryEOService.deleteById(id,projectLibraryId,cut); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "项目库-法规清单表-批量删除") + @ApiOperation(value="项目库-法规清单表-批量删除", notes="项目库-法规清单表-批量删除") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestBody JSONObject json) { + String ids = json.getString("ids"); + String projectLibraryId = json.getString("projectLibraryId"); + String cut = json.getString("cut"); + this.projectLawsInventoryEOService.deleteByIds(Arrays.asList(ids.split(",")),projectLibraryId,cut); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "项目库-法规清单表-通过id查询") + @ApiOperation(value="项目库-法规清单表-通过id查询", notes="项目库-法规清单表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOService.queryById(id); + if(projectLawsInventoryEO==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(projectLawsInventoryEO); + } + + /** + * 导出excel + * + * @param request + * @param projectLawsInventoryEO + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, ProjectLawsInventoryEO projectLawsInventoryEO) { + return super.exportXls(request, projectLawsInventoryEO, ProjectLawsInventoryEO.class, "项目库-法规清单表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, ProjectLawsInventoryEO.class); + } + + /** + * 批量更新法规清单状态 + * @param json + * @return + */ + @AutoLog(value = "项目库-法规清单表-批量更新状态") + @ApiOperation(value="项目库-法规清单表-批量更新状态", notes="项目库-法规清单表-批量更新状态") + @PostMapping(value = "/updateStatusBatch") + public Result updateStatusBatch(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.updateStatusBatch(json); + } + + /** + * 匹配相关人员 + * @param params + * @return + */ + @AutoLog(value = "项目库-法规清单表-匹配相关人员") + @ApiOperation(value="项目库-法规清单表-匹配相关人员", notes="项目库-法规清单表-匹配相关人员") + @PostMapping(value = "/matchRelevantPeople") + public Result matchRelevantPeople(@RequestBody Map params){ + return this.projectLawsInventoryEOService.matchRelevantPeople(params); + } + + /** + * 流程调用接口 + * @param jsonObject + * @return + */ + @AutoLog(value = "项目库-法规清单表-流程调用") + @ApiOperation(value="项目库-法规清单表-流程调用", notes="项目库-法规清单表-流程调用") + @PostMapping(value = "/processCall") + public Result processCall(@RequestBody JSONObject jsonObject){ + return this.projectLawsInventoryEOService.processCall(jsonObject); + } + + /** + * 通过id查询 + * @param params + * @return + */ + @AutoLog(value = "项目库-法规清单表-通过id与操作类型查询") + @ApiOperation(value="项目库-法规清单表-通过id与操作类型查询", notes="项目库-法规清单表-通过id与操作类型查询") + @GetMapping(value = "/queryProjectLawsInventoryInfoById") + public Result queryProjectLawsInventoryInfoById(@RequestParam Map params) { + List result = projectLawsInventoryEOService.queryProjectLawsInventoryInfoById(params); + return Result.OK((String) params.get("cut"),result); + } + + @AutoLog(value = "法规清单添加调用文档库数据--分页") + @ApiOperation(value="法规清单添加调用文档库数据--分页", notes="法规清单添加调用文档库数据--分页") + @PostMapping(value = "/queryPageInfoBussDocument") + public Result queryPageInfo(@RequestBody BussDocumentLibraryEO bussDocumentLibraryEO, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(bussDocumentLibraryEO, req.getParameterMap()); + Page page = new Page(bussDocumentLibraryEO.getPageNo(), bussDocumentLibraryEO.getPageSize()); + IPage pageList = bussDocumentLibraryEOService.queryPageInfoDummy(page, queryWrapper,bussDocumentLibraryEO); + return Result.OK(pageList); + } + + /** + * 复制 + * + * @param ids + * @return + */ + @AutoLog(value = "复制") + @ApiOperation(value="复制", notes="复制") + @GetMapping(value = "/copyInfoByIds") + public Result copyInfoByIds(@RequestParam(name="ids",required=true) String ids, + @RequestParam(name="cut",required=true) String cut, + @RequestParam(name="operateType",required=true) String operateType) { + try { + projectLawsInventoryEOService.copyInfoByIds(ids,operateType); + } catch (Exception e) { + if(CutEnum.CN.getValue().equals(cut)){ + return Result.error("复制失败"); + }else{ + return Result.error("Copy the failure"); + } + } + if(CutEnum.CN.getValue().equals(cut)){ + return Result.OK("复制成功"); + }else{ + return Result.OK("Copy success"); + } + } + + + /** + * 批量设置 + * + * @param projectLawsInventoryEO + * @return + */ + @AutoLog(value = "批量设置") + @ApiOperation(value="批量设置", notes="批量设置") + @PostMapping(value = "/setBatch") + public Result setBatch(@RequestBody ProjectLawsInventoryEO projectLawsInventoryEO) { + String cut = projectLawsInventoryEO.getCut(); + try { + projectLawsInventoryEOService.setBatch(projectLawsInventoryEO); + } catch (Exception e) { + e.printStackTrace(); + log.error("批量设置失败:" + e.getMessage()); + if(CutEnum.CN.getValue().equals(cut)){ + return Result.error("批量设置失败!"); + }else{ + return Result.error("Batch set success"); + } + } + if(CutEnum.CN.getValue().equals(cut)){ + return Result.OK("批量设置成功"); + }else{ + return Result.OK("Batch set success"); + } + } + + /** + * 调取虚拟清单数据 + * + * @param dummyInventoryBaseEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "调取虚拟清单数据") + @ApiOperation(value="调取虚拟清单数据", notes="调取虚拟清单数据") + @PostMapping(value = "/getPageInfoDummy") + public Result getPageInfoDummy(@RequestBody DummyInventoryBaseEO dummyInventoryBaseEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { +// dummyInventoryBaseEO.setName("*发*"); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryBaseEO, req.getParameterMap()); + queryWrapper.orderByDesc("create_time"); + Page page = new Page(pageNo, pageSize); + IPage pageList = dummyInventoryBaseEOService.getPageInfoDummy(page,queryWrapper); + return Result.OK(dummyInventoryBaseEO.getCut(),pageList); + } + + + @ApiOperation(value = "模板下载") + @GetMapping(value = "/exportTemplate") + public void exportTemplate(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletResponse response, HttpServletRequest request) throws Exception { + projectLawsInventoryEOService.exportTemplate(projectLawsInventoryEO,response,request); + } + + /** + * 导出数据 + * @param request + * @param projectLawsInventoryEO + */ + @RequestMapping(value = "/exportData") + @RequiresPermissions("projectLawsInventory:exportData") + public void exportData(HttpServletResponse response, + HttpServletRequest request, + ProjectLawsInventoryEO projectLawsInventoryEO) { + projectLawsInventoryEOService.exportData(response,request, projectLawsInventoryEO); + } + + /** + * 导入数据 + * + * @param file + * @param projectLawsInventoryEO + * @return + */ + @RequestMapping(value = "/importData", method = RequestMethod.POST) + public Result importData(@RequestParam(value = "file", required = false) MultipartFile file, + ProjectLawsInventoryEO projectLawsInventoryEO) { + projectLawsInventoryEOService.importData(file,projectLawsInventoryEO); + return Result.OK("导入成功"); + } + + + @AutoLog(value = "变更") + @ApiOperation(value="变更", notes="变更") + @PostMapping(value = "/change") + public Result change(@RequestBody JSONObject params) { + return this.projectLawsInventoryEOService.change(params); + } + + @AutoLog(value = "下载pdf报告") + @ApiOperation(value="下载pdf报告", notes="下载pdf报告") + @GetMapping(value = "/downloadReport") + public void downloadReport(@RequestParam Map params, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { + this.projectLawsInventoryEOService.downloadReport(params,req,resp); + } + + /** + * 列表查询条件 标识传 1-->用于查询文档库字段属 + * 法规清单添加调取文档库时高级搜索条件 + * @param flag + * @return + */ + @AutoLog(value = "法规清单添加调取文档库时高级搜索条件") + @ApiOperation(value="法规清单添加调取文档库时高级搜索条件", notes="法规清单添加调取文档库时高级搜索条件") + @GetMapping(value = "/queryConditionInventory") + public Result>> queryConditionInventory(@RequestParam(name="flag",required=true) String flag, + @RequestParam(name="cut",required=true) String cut) { + List> list = bussDocumentLibraryEOService.queryConditionInventory(flag,cut); + return Result.OK(list); + } + + + @ApiOperation(value="法规清单中添加调用文档库数据--分页", notes="法规清单中添加调用文档库数据--分页") + @PostMapping(value = "/queryPageDummy") + @ResponseBody + public net.sf.json.JSONObject queryPageDummy(@RequestBody Map parameter) { + IPage infoPage = bussDocumentLibraryEOService.getPageDummy(parameter); + Result ok = Result.OK(infoPage); + net.sf.json.JSONObject jsonResult = net.sf.json.JSONObject.fromObject(ok); + return jsonResult; + } + + /** + * + * @param params + * cut:中英文标识 + * id:法规清单id + * @param req + * @param resp + * @throws DocumentException + */ + @AutoLog(value = "下载docx报告") + @ApiOperation(value="下载docx报告", notes="下载docx报告") + @GetMapping(value = "/downloadDocxReport") + public void downloadDocxReport(@RequestParam Map params, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { + this.projectLawsInventoryEOService.downloadDocxReport(params,req,resp); + } + + @AutoLog(value = "催办") + @ApiOperation(value="催办", notes="催办") + @PostMapping(value = "/expediting") + public Result expediting(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.expediting(json); + } + + /** + * 当前登录用户角色 + * @return + */ + @ApiOperation(value = "当前登录用户角色") + @RequestMapping(value = "/getRoleByUserId", method = RequestMethod.GET) + public Result> getRoleByUserId(String projectLibraryId,String cut) { + Result> result = new Result<>(); + List list = projectLawsInventoryEOService.getRoleByUserId(projectLibraryId,cut); + if(list==null||list.size()<=0) { + result.error500("未找到角色信息"); + }else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } + + + @AutoLog(value = "任务清单催办") + @ApiOperation(value="任务清单催办", notes="任务清单催办") + @PostMapping(value = "/taskUrg") + public Result taskUrg(@RequestBody ProjectTaskUrgVo projectTaskUrgVo) { + return this.projectLawsInventoryEOService.taskUrg(projectTaskUrgVo); + } + + + @AutoLog(value = "项目库-法规清单表-根据项目库id更新符合性流程发起人、责任人接口") + @ApiOperation(value="项目库-法规清单表-根据项目库id更新符合性流程发起人、责任人接口", notes="项目库-法规清单表-根据项目库id更新符合性流程发起人、责任人接口") + @GetMapping(value = "/updateFlowInfoByProjectLibraryIds") + public Result updateFlowInfoByProjectLibraryIds(@RequestParam("projectLibraryIds") String projectLibraryIds){ + return this.projectLawsInventoryEOService.updateFlowInfoByProjectLibraryIds(projectLibraryIds); + } + + @AutoLog(value = "项目库-法规清单表-studio发布") + @ApiOperation(value="项目库-法规清单表-studio发布", notes="项目库-法规清单表-studio发布") + @PostMapping(value = "/studioPublish") + public Result studioPublish(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.studioPublish(json); + } + + @AutoLog(value = "项目库-法规清单表-studio撤回") + @ApiOperation(value="项目库-法规清单表-studio撤回", notes="项目库-法规清单表-studio撤回") + @PostMapping(value = "/studioWithdrew") + public Result studioWithdrew(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.studioWithdrew(json); + } + + @AutoLog(value = "项目库-法规清单表-法规工程师退回") + @ApiOperation(value="项目库-法规清单表-法规工程师退回", notes="项目库-法规清单表-法规工程师退回") + @PostMapping(value = "/regulationOwnerReturned") + public Result regulationOwnerReturned(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.regulationOwnerReturned(json); + } + + @AutoLog(value = "流程重置-迁移法规清单流程历史数据专用") + @ApiOperation(value="流程重置-迁移法规清单流程历史数据专用", notes="流程重置-迁移法规清单流程历史数据专用") + @PostMapping(value = "/resetFlowTemp") + public Result resetFlowTemp(@RequestBody JSONObject params) { + return this.projectLawsInventoryEOService.resetFlowTemp(params); + } + + /** + * 批量更新法规清单状态 + * @param json + * @return + */ + @AutoLog(value = "项目库-法规清单表-批量更新流程状态") + @ApiOperation(value="项目库-法规清单表-批量更新流程状态", notes="项目库-法规清单表-批量更新流程状态") + @PostMapping(value = "/updateFlowStatusBatch") + public Result updateFlowStatusBatch(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.updateFlowStatusBatch(json); + } + + @AutoLog(value = "项目库-法规清单表-引用交付物") + @ApiOperation(value="项目库-法规清单表-引用交付物", notes="项目库-法规清单表-引用交付物") + @PostMapping(value = "/citeDeliverable") + public Result citeDeliverable(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.citeDeliverable(json); + } + + @AutoLog(value = "项目库-法规清单表-强制转办") + @ApiOperation(value="项目库-法规清单表-强制转办", notes="项目库-法规清单表-强制转办") + @PostMapping(value = "/compulsoryTransfer") + public Result compulsoryTransfer(@RequestBody JSONObject json) { + return this.projectLawsInventoryEOService.compulsoryTransfer(json); + } + + /** + * 通过projectId查询责任人 + * + * @return + */ + @AutoLog(value = "项目库-法规清单表-通过projectId查询责任人") + @ApiOperation(value="项目库-法规清单表-通过projectId查询责任人", notes="项目库-法规清单表-通过projectId查询责任人") + @GetMapping(value = "/queryDutyPersonByProjectId") + public Result queryDutyPersonByProjectId(@RequestParam Map params){ + Map>> res = this.projectLawsInventoryEOService.queryDutyPersonByProjectId(params); + return Result.OK(res); + } + + /** + * 分页查询不符合项列表 + * @return + */ + @AutoLog(value = "项目库-法规清单表-查询不符合项列表") + @ApiOperation(value="项目库-法规清单表-查询不符合项列表", notes="项目库-法规清单表-查询不符合项列表") + @GetMapping(value = "/queryNotComplianList") + public Result queryNotComplianList(@RequestParam Map params) { + List> result = this.projectLawsInventoryEOService.queryNotComplianList(params); + Page pages = PageUtil.getPages(Integer.parseInt((String) params.get("pageNo")), Integer.parseInt((String) params.get("pageSize")), result); + return Result.OK(pages); + } + + /** + * 导出不符合项列表 + * @param request + * @param params + */ + @AutoLog(value = "项目库-法规清单表-导出不符合项列表") + @ApiOperation(value="项目库-法规清单表-导出不符合项列表", notes="项目库-法规清单表-导出不符合项列表") + @RequestMapping(value = "/exportNotComplianList") + public void exportNotComplianList(HttpServletResponse response, + HttpServletRequest request, + @RequestBody Map params) { + this.projectLawsInventoryEOService.exportNotComplianList(response,request, params); + } + + @AutoLog(value = "项目库-法规清单表-定版校验") + @ApiOperation(value="项目库-法规清单表-定版校验", notes="项目库-法规清单表-定版校验") + @GetMapping(value = "/finalizationVerify") + public Result finalizationVerify(@RequestParam Map params){ + return this.projectLawsInventoryEOService.finalizationVerify(params); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/ProjectPlatformController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/PlatformProjectLibraryBaseController.java similarity index 97% rename from jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/ProjectPlatformController.java rename to jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/PlatformProjectLibraryBaseController.java index 3d02d8201..286ff33bb 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/ProjectPlatformController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/PlatformProjectLibraryBaseController.java @@ -8,8 +8,7 @@ import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.vo.DictModel; import com.jero.modules.project.entity.ProjectLibraryBase; -import com.jero.modules.project.service.IProjectLibraryBaseService; -import com.jero.modules.projectPlatform.service.IProjectPlatformService; +import com.jero.modules.projectPlatform.service.IPlatformIProjectLibraryBaseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -43,11 +42,11 @@ import java.util.Map; */ @Api(tags="平台件项目库") @RestController -@RequestMapping("/project/platform") +@RequestMapping("/project/platformProjectLibraryBase") @Slf4j -public class ProjectPlatformController extends JeroController { +public class PlatformProjectLibraryBaseController extends JeroController { @Autowired - private IProjectPlatformService projectPlatformService; + private IPlatformIProjectLibraryBaseService projectPlatformService; /** * 分页列表查询 diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/platformProjectNameInfoEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/platformProjectNameInfoEOController.java new file mode 100644 index 000000000..ec820e3d4 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/controller/platformProjectNameInfoEOController.java @@ -0,0 +1,203 @@ +package com.jero.modules.projectPlatform.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +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.system.query.QueryGenerator; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectNameInfoEO; +import com.jero.modules.project.service.IProjectNameInfoEOService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +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 javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.List; + + +/** + * @Description: 项目名信息表 + * @Author: jero-boot + * @Date: 2022-04-18 + * @Version: V1.0 + */ +@Api(tags="平台件-项目名信息表") +@RestController +@RequestMapping("/project/platformProjectNameInfoEO") +@Slf4j +public class platformProjectNameInfoEOController extends JeroController { + @Autowired + private IProjectNameInfoEOService projectNameInfoEOService; + + /** + * 分页列表查询 + * + * @param projectNameInfoEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "项目名信息表-分页列表查询") + @ApiOperation(value="项目名信息表-分页列表查询", notes="项目名信息表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(ProjectNameInfoEO projectNameInfoEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(projectNameInfoEO, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = projectNameInfoEOService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "项目名信息表-列表查询") + @ApiOperation(value="项目名信息表-列表查询", notes="项目名信息表-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = projectNameInfoEOService.queryList(); + return Result.OK(list); + } + /** + * 返回项目全拼 + * + * @return + */ + @AutoLog(value = "返回项目全拼") + @ApiOperation(value="返回项目全拼", notes="返回项目全拼") + @GetMapping(value = "/queryProjectNameList") + public Result> queryProjectNameList(String cut) { + List list = projectNameInfoEOService.queryProjectNameList(cut); + return Result.OK(list); + } + + /** + * 添加 + * + * @param projectNameInfoEO + * @return + */ + @AutoLog(value = "项目名信息表-添加") + @ApiOperation(value="项目名信息表-添加", notes="项目名信息表-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody ProjectNameInfoEO projectNameInfoEO) { + projectNameInfoEOService.add(projectNameInfoEO); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param projectNameInfoEO + * @return + */ + @AutoLog(value = "项目名信息表-编辑") + @ApiOperation(value="项目名信息表-编辑", notes="项目名信息表-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody ProjectNameInfoEO projectNameInfoEO) { + projectNameInfoEOService.editById(projectNameInfoEO); + return Result.OK("编辑成功!"); + } + + /** + * 通过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) { + projectNameInfoEOService.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.projectNameInfoEOService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "项目名信息表-通过id查询") + @ApiOperation(value="项目名信息表-通过id查询", notes="项目名信息表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOService.queryById(id); + if(projectNameInfoEO==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(projectNameInfoEO); + } + + /** + * 导出excel + * + * @param request + * @param projectNameInfoEO + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, ProjectNameInfoEO projectNameInfoEO) { + return super.exportXls(request, projectNameInfoEO, ProjectNameInfoEO.class, "项目名信息表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, ProjectNameInfoEO.class); + } + + /** + * 接收space系统数据 + * + * @return + */ +// @AutoLog(value = "项目名信息表-space") +// @ApiOperation(value="项目名信息表-space", notes="项目名信息表-space") +// @RequestMapping(value = "/getSpaceInfo", method = RequestMethod.POST) +// public void getSpaceInfo(@RequestParam(name="cut",required=true) String cut) { +// projectNameInfoEOService.getSpaceInfo(cut); +// } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatformProjectLawsInventoryEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatformProjectLawsInventoryEOMapper.java new file mode 100644 index 000000000..511fd032f --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatformProjectLawsInventoryEOMapper.java @@ -0,0 +1,49 @@ +package com.jero.modules.projectPlatform.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Description: 项目库-法规清单表 + * @Author: jero-boot + * @Date: 2022-04-14 + * @Version: V1.0 + */ +public interface PlatformProjectLawsInventoryEOMapper extends BaseMapper { + + /** + * 获取清单确认统计 + * @param projectLibraryId 项目库id + * @return + */ + List> getlistingToConfirmStatistics(@Param("projectLibraryId") String projectLibraryId); + + /** + * 获取清单确认统计 + * @param projectLibraryId 项目库id + * @return + */ + List> getTaskToConfirmStatistics(@Param("projectLibraryId")String projectLibraryId); + + /** + * 统计该项目中,某一个 清单确认状态的数据 根据领域分组 + * @param projectLibraryId 项目库id + * @param inventoryAffirmStatus 清单确认状态 + * @return + */ + List> getListingToConfirmStatisticsGroupByTerritory(@Param("projectLibraryId") String projectLibraryId,@Param("inventoryAffirmStatus") String inventoryAffirmStatus); + + /** + * 统计该项目中,某一个 任务确认状态的数据 根据领域分组 + * @param projectLibraryId + * @param taskAffirmStatus + * @return + */ + List> getTaskToConfirmStatisticsGroupByTerritory(@Param("projectLibraryId") String projectLibraryId, @Param("taskAffirmStatus") String taskAffirmStatus); + + List> queryNotComplianList(@Param("params") Map params); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/ProjectPlatformMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatformProjectLibraryBaseMapper.java similarity index 91% rename from jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/ProjectPlatformMapper.java rename to jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatformProjectLibraryBaseMapper.java index 20c20cead..c08f2214f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/ProjectPlatformMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatformProjectLibraryBaseMapper.java @@ -13,7 +13,7 @@ import java.util.Map; * @Date: 2022-04-11 * @Version: V1.0 */ -public interface ProjectPlatformMapper extends BaseMapper { +public interface PlatformProjectLibraryBaseMapper extends BaseMapper { /**分页列表*/ List queryPageList(@Param("params") Map params); List queryMaimList(); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatpromProjectNameInfoEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatpromProjectNameInfoEOMapper.java new file mode 100644 index 000000000..5af436747 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/PlatpromProjectNameInfoEOMapper.java @@ -0,0 +1,20 @@ +package com.jero.modules.projectPlatform.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.project.entity.ProjectNameInfoEO; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @Description: 项目名信息表 + * @Author: jero-boot + * @Date: 2022-04-18 + * @Version: V1.0 + */ +public interface PlatpromProjectNameInfoEOMapper extends BaseMapper { + @Select("select pni.id,pni.project_name,pyni.id as year_id,pyni.year_name,pni.vehicle_platform,pni.digital_platform\n" + + "from project_name_info as pni\n" + + "left join project_year_name_info as pyni on pni.id=pyni.project_name_id;") + List selectProjectNameAndYear(); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectLawsInventoryEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectLawsInventoryEOMapper.xml new file mode 100644 index 000000000..6051afa8c --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectLawsInventoryEOMapper.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and temp.serial_number like CONCAT(CONCAT('%',#{params.serialNumber}),'%') + + + and temp.title like CONCAT(CONCAT('%',#{params.title}),'%') + + + and temp.duty_territory like CONCAT(CONCAT('%',#{params.dutyTerritory}),'%') + + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/ProjectPlatform.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectLibraryBaseMapper.xml similarity index 99% rename from jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/ProjectPlatform.xml rename to jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectLibraryBaseMapper.xml index aae850b73..69a29afee 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/ProjectPlatform.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectLibraryBaseMapper.xml @@ -1,6 +1,6 @@ - + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectNameInfoEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectNameInfoEOMapper.xml new file mode 100644 index 000000000..b48883b20 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/mapper/xml/PlatformProjectNameInfoEOMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IProjectPlatformService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformIProjectLibraryBaseService.java similarity index 97% rename from jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IProjectPlatformService.java rename to jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformIProjectLibraryBaseService.java index 7a3996700..61bb66498 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IProjectPlatformService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformIProjectLibraryBaseService.java @@ -20,7 +20,7 @@ import java.util.Map; * @Date: 2022-04-11 * @Version: V1.0 */ -public interface IProjectPlatformService extends IService { +public interface IPlatformIProjectLibraryBaseService extends IService { /** * 保存 diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformProjectLawsInventoryEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformProjectLawsInventoryEOService.java new file mode 100644 index 000000000..5114ece63 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformProjectLawsInventoryEOService.java @@ -0,0 +1,325 @@ +package com.jero.modules.projectPlatform.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.itextpdf.text.DocumentException; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.feishu.vo.FeishuMsgVo; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.vo.ProjectTaskUrgVo; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.entity.SysRole; +import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO; +import com.jero.modules.todoCenter.entity.ProcessInfoEO; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @Description: 项目库-法规清单表 + * @Author: jero-boot + * @Date: 2022-04-14 + * @Version: V1.0 + */ +public interface IPlatformProjectLawsInventoryEOService extends IService { + + /** + * 保存 + * + * @param projectLawsInventoryEO + * @return + */ + void add(ProjectLawsInventoryEO projectLawsInventoryEO); + + /** + * 更新 + * + * @param projectLawsInventoryEO + * @return + */ + void editById(ProjectLawsInventoryEO projectLawsInventoryEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id,String projectLibraryId,String cut); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids,String projectLibraryId,String cut); + + /** + * 通过id查询 + * + * @param id + * @return + */ + ProjectLawsInventoryEO queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletRequest req); + + /** + * 批量更新状态 + * @param json + * @return + */ + Result updateStatusBatch(JSONObject json); + + void sendMessage(String msgTitle, String msgContent, List userIdList, String projectLibraryId, Map params, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType,String initiator); + + /** + * 匹配相关人员 + * @param params + * @return + */ + Result matchRelevantPeople(Map params); + + /** + * 流程调用 + * @param jsonObject + * @return + */ + Result processCall(JSONObject jsonObject); + + List queryProjectLawsInventoryInfoById(Map params); + + + void copyInfoByIds(String ids,String operateType); + + /** + * 批量设置 + * @param projectLawsInventoryEO + */ + void setBatch(ProjectLawsInventoryEO projectLawsInventoryEO); + + /** + * 模板下载 + * @param projectLawsInventoryEO + * @param response + * @param request + */ + void exportTemplate(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletResponse response, HttpServletRequest request); + + void exportData(HttpServletResponse response, + HttpServletRequest request, + ProjectLawsInventoryEO projectLawsInventoryEO); + + void importData(MultipartFile file, + ProjectLawsInventoryEO projectLawsInventoryEO); + + void dataDispose(List list, LoginUser currentUser, int isProjectRole, String cut); + + Result change(JSONObject parmas); + + /** + * 下载pdf报告 + * @param params + * @param req + * @param resp + * @throws DocumentException + */ + void downloadReport(Map params,HttpServletRequest req, HttpServletResponse resp)throws DocumentException; + + /** + * 下载docx报告 + * @param params + * @param req + * @param resp + */ + void downloadDocxReport(Map params, HttpServletRequest req, HttpServletResponse resp); + + /** + * 催办 + * @param json + * @return + */ + Result expediting(JSONObject json); + + List getRoleByUserId(String projectLibraryId,String cut); + + void addProcessInfo(ProcessInfoEO processInfoEO, String projectLibraryId, Date endTime); + + void addProcessInfoDetail(String processInfoId, List processInfoDetailEOList, Date endTime); + + Result taskUrg(ProjectTaskUrgVo projectTaskUrgVo); + + Result updateFlowInfoByProjectLibraryIds(String projectLibraryIds); + void updateFlowInfo(ProjectLawsInventoryEO projectLawsInventoryEO); + /** + * studio发布,启动清单确认流程 + * @param json + * @return + */ + Result studioPublish(JSONObject json); + + /** + * studio撤回 + * @param json + * @return + */ + Result studioWithdrew(JSONObject json); + + /** + * 法规工程师退回 + * @param json + * @return + */ + Result regulationOwnerReturned(JSONObject json); + + /** + * 根据id获取交付物类型展示名称 + * @param projectLawsInventoryId + * @param cut + * @param flowType + * @return + */ + String getDeliverableTypeNameById(String projectLawsInventoryId, String cut, String flowType,List projectLawsInventoryEOList,List categoryList); + + /** + * 根据id获取责任领域展示名称 + * @param projectLawsInventoryId + * @param cut + * @param projectLawsInventoryEOList + * @param sysDictItems + * @param dicCode + * @return + */ + String getDutyTerritoryNameById(String projectLawsInventoryId, String cut, List projectLawsInventoryEOList, List sysDictItems,String dicCode); + + void sendMessageByTemplateId(String templeteId,Map params); + + Map getProjectLawsInventoryLinkHrefFeishu(String projectLibraryId, String PRN_CN, String PRN_EN,String roleOpen); + + /** + * 获取待办中心跳转链接 + * @param projectLibraryId + * @param todoCenterParams + * @return + */ + Map getToDoCenterLinkHrefFeishu(String projectLibraryId, Map todoCenterParams); + + /** + * 法规清单根据清单确认截至日期顺序排序 + * @param projectLawsInventoryEOS + */ + void lawsInventoryEOListSortByInventoryAffirmDueDate(List projectLawsInventoryEOS); + + /** + * 法规清单根据设计符合性截至日期顺序排序 + * @param projectLawsInventoryEOS + */ + void lawsInventoryEOListSortByDesignDueDate(List projectLawsInventoryEOS); + + /** + * 法规清单根据验证符合性截至日期顺序排序 + * @param projectLawsInventoryEOS + */ + void lawsInventoryEOListSortByVerifyDueDate(List projectLawsInventoryEOS); + + /** + * 创建查询权限,2023-04-06 修改UAT问题第22条 + * @param isProjectRole + * @param currentUser + */ + void createQueryPermission(int isProjectRole, LoginUser currentUser, QueryWrapper projectLawsInventoryEOQueryWrapper); + + Result resetFlowTemp(JSONObject parmas); + + /** + * 批量更新流程状态 + * @param json + * @return + */ + Result updateFlowStatusBatch(JSONObject json); + + Result citeDeliverable(JSONObject json); + + Result compulsoryTransfer(JSONObject json); + + Map>> queryDutyPersonByProjectId(Map params); + + /** + * 获取任务确认统计信息 + * @param projectLawsInventoryEOList + * @return + */ + List> getTaskToConfirmStatistics(List projectLawsInventoryEOList); + + /** + * 获取设计符合性统计信息 + * @param projectLawsInventoryEOList + * @return + */ + List> getDesignComplianceStatistice(List projectLawsInventoryEOList); + + /** + * 获取验证符合性统计信息 + * @param projectLawsInventoryEOList + * @return + */ + List> getVerifyComplianceStatistice(List projectLawsInventoryEOList); + + List> queryNotComplianList(Map params); + + void exportNotComplianList(HttpServletResponse response, HttpServletRequest request, Map params); + + /** + * 按照法规任务确认状态分组 + * @param pliEos + * @return + */ + Map groupByFGRwqrStatus(List pliEos); + + /** + * 按照设计符合性状态分组 + * @param pliEos + * @return + */ + Map groupByDesignStatus(List pliEos); + + /** + * 按照验证符合性状态分组 + * @param pliEos + * @return + */ + Map groupByVerifyStatus(List pliEos); + + IPage queryPage(ProjectLawsInventoryEO projectLawsInventoryEO, Integer pageNo, Integer pageSize, HttpServletRequest req); + + Result finalizationVerify(Map params); + + /** + * 获取用户的责任领域数组 + * @param params + * @return + */ + List getUserDutyTerritoryList(Map params); + + /*** + * 替换用户 + * @param params + */ + void replacementUser(JSONObject json); + int checkUserRole(String projectLibraryId, String currentUserId, String lawsInventoryId); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformProjectNameInfoEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformProjectNameInfoEOService.java new file mode 100644 index 000000000..6ab834589 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/IPlatformProjectNameInfoEOService.java @@ -0,0 +1,73 @@ +package com.jero.modules.projectPlatform.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectNameInfoEO; + +import java.util.List; + +/** + * @Description: 项目名信息表 + * @Author: jero-boot + * @Date: 2022-04-18 + * @Version: V1.0 + */ +public interface IPlatformProjectNameInfoEOService extends IService { + + /** + * 保存 + * + * @param projectNameInfoEO + * @return + */ + void add(ProjectNameInfoEO projectNameInfoEO); + + /** + * 更新 + * + * @param projectNameInfoEO + * @return + */ + void editById(ProjectNameInfoEO projectNameInfoEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + ProjectNameInfoEO queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); + + /** + * 返回项目全拼 + * @return + */ + List queryProjectNameList(String cut); + + + + //void getSpaceInfo(String cut); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectLawsInventoryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectLawsInventoryEOServiceImpl.java new file mode 100644 index 000000000..e8180761f --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectLawsInventoryEOServiceImpl.java @@ -0,0 +1,12047 @@ +package com.jero.modules.projectPlatform.service.impl; + +import cn.hutool.core.util.URLUtil; +import cn.hutool.core.util.ZipUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.itextpdf.text.Chapter; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Element; +import com.itextpdf.text.Font; +import com.itextpdf.text.PageSize; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.Phrase; +import com.itextpdf.text.Section; +import com.itextpdf.text.pdf.BaseFont; +import com.itextpdf.text.pdf.PdfPCell; +import com.itextpdf.text.pdf.PdfPTable; +import com.itextpdf.text.pdf.PdfWriter; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.WebsocketConst; +import com.jero.common.constant.enums.CutEnum; +import com.jero.common.constant.enums.MessageType2Enum; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.common.constant.enums.MsgColorEnum; +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.common.util.oss.CosBootUtil; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; +import com.jero.modules.dummy.entity.DummyInventoryBaseEO; +import com.jero.modules.dummy.entity.DummyInventoryInfoEO; +import com.jero.modules.dummy.enums.AttestationRankEnum; +import com.jero.modules.dummy.enums.OrderEnum; +import com.jero.modules.dummy.service.IDummyInventoryInfoEOService; +import com.jero.modules.dummy.service.impl.DummyInventoryBaseEOServiceImpl; +import com.jero.modules.enums.DictCodeEnum; +import com.jero.modules.feishu.enums.TemplateInfoEnum2; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsg2Vo; +import com.jero.modules.feishu.vo.FeishuMsgVo; +import com.jero.modules.message.websocket.WebSocket; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.project.entity.ConditionAssessmentEO; +import com.jero.modules.project.entity.ProblemManagementEO; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; +import com.jero.modules.project.entity.ProjectLawsInventoryEOEn; +import com.jero.modules.project.entity.ProjectLawsInventoryRejectCauseEO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectNameInfoEO; +import com.jero.modules.project.entity.ProjectRelatedPersonnel; +import com.jero.modules.project.entity.ProjectTaskInventoryDetailEO; +import com.jero.modules.project.entity.ProjectTaskInventoryEO; +import com.jero.modules.project.entity.ProjectUserPermission; +import com.jero.modules.project.entity.ProjectYearNameInfoEO; +import com.jero.modules.project.enums.CertificationProgressEnum; +import com.jero.modules.project.enums.ColourEnum; +import com.jero.modules.project.enums.ComplianceFlowStatusEnum; +import com.jero.modules.project.enums.CurrentProjectStatusEnum; +import com.jero.modules.project.enums.DataEnum; +import com.jero.modules.project.enums.DataSourceEnum; +import com.jero.modules.project.enums.DesignComplianceStatusEnum; +import com.jero.modules.project.enums.InventoryAffirmNodeEnum; +import com.jero.modules.project.enums.InventoryAffirmStatusEnum; +import com.jero.modules.project.enums.JumpLinkEnum; +import com.jero.modules.project.enums.MsgTypeEnum; +import com.jero.modules.project.enums.OperatorResultEnum; +import com.jero.modules.project.enums.OperatorTypeEnum; +import com.jero.modules.project.enums.PermissionDescriptionEnum; +import com.jero.modules.project.enums.ProjectInventoryFieldEnum; +import com.jero.modules.project.enums.ProjectRoleEnum; +import com.jero.modules.project.enums.ProjectUserLocationEnum; +import com.jero.modules.project.enums.RequestSourceEnum; +import com.jero.modules.project.enums.TaskAffirmStatusEnum; +import com.jero.modules.project.enums.TaskStatusEnum; +import com.jero.modules.project.mapper.ProblemManagementEOMapper; +import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; +import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; +import com.jero.modules.project.mapper.ProjectRelatedPersonnelMapper; +import com.jero.modules.project.mapper.ProjectYearNameInfoEOMapper; +import com.jero.modules.project.service.IConditionAssessmentEOService; +import com.jero.modules.project.service.IFeedbackHistoryService; +import com.jero.modules.project.service.IProjectLawsInventoryRejectCauseEOService; +import com.jero.modules.project.service.IProjectLibraryRoleRelEOService; +import com.jero.modules.project.service.IProjectRelatedPersonnelService; +import com.jero.modules.project.service.IProjectTaskInventoryDetailEOService; +import com.jero.modules.project.service.IProjectTaskInventoryEOService; +import com.jero.modules.project.service.IProjectTaskInventoryFeedbackEOService; +import com.jero.modules.project.service.IProjectUserPermissionService; +import com.jero.modules.project.service.editImpl.ProjectLawsInventoryEOEditServiceImpl; +import com.jero.modules.project.service.impl.ProblemManagementEOServiceImpl; +import com.jero.modules.project.service.impl.ProjectLawsInventoryLogEOServiceImpl; +import com.jero.modules.project.service.impl.ProjectLibraryBaseServiceImpl; +import com.jero.modules.project.service.impl.ProjectRelatedPersonnelServiceImpl; +import com.jero.modules.project.util.WordUtil; +import com.jero.modules.project.vo.NcrTrackVO; +import com.jero.modules.project.vo.ProblemManagementVO; +import com.jero.modules.project.vo.ProjectTaskUrgVo; +import com.jero.modules.projectPlatform.mapper.PlatformProjectLawsInventoryEOMapper; +import com.jero.modules.projectPlatform.service.IPlatformProjectLawsInventoryEOService; +import com.jero.modules.split.common.FileUnZip; +import com.jero.modules.system.entity.SysAnnouncement; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.entity.SysRole; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.enums.DicCodeEnum; +import com.jero.modules.system.mapper.SysCategoryMapper; +import com.jero.modules.system.mapper.SysDictItemMapper; +import com.jero.modules.system.mapper.SysRoleMapper; +import com.jero.modules.system.mapper.SysUserMapper; +import com.jero.modules.system.service.IProjectUserDutyTerritoryService; +import com.jero.modules.system.service.ISysAnnouncementService; +import com.jero.modules.system.service.ISysDictItemService; +import com.jero.modules.system.service.ISysDictService; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.system.service.impl.SysCategoryServiceImpl; +import com.jero.modules.system.service.impl.SysDictItemServiceImpl; +import com.jero.modules.system.util.PDFUtils; +import com.jero.modules.todoCenter.entity.ProcessInfoDetailEO; +import com.jero.modules.todoCenter.entity.ProcessInfoEO; +import com.jero.modules.todoCenter.enums.DesignComplianceFlowNodeKeyEnum; +import com.jero.modules.todoCenter.enums.TodoCenterStatusEnum; +import com.jero.modules.todoCenter.enums.VerifyComplianceFlowNodeKeyEnum; +import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService; +import com.jero.modules.todoCenter.service.IProcessInfoEOService; +import com.jero.modules.wkflow.entity.ProcessHistoryEO; +import com.jero.modules.wkflow.enums.DesignComplianceNodeEnum; +import com.jero.modules.wkflow.enums.FlowTypeEnum; +import com.jero.modules.wkflow.feginClient.impl.TaskFeignClientImpl; +import com.jero.modules.wkflow.feginClient.impl.WorkFlowFeignClientImpl; +import com.jero.modules.wkflow.service.IProcessHistoryEOService; +import com.jero.modules.wkflow.service.impl.ProcessHistoryEOServiceImpl; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRichTextString; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.aspectj.util.FileUtil; +import org.docx4j.Docx4J; +import org.docx4j.TraversalUtil; +import org.docx4j.XmlUtils; +import org.docx4j.finders.ClassFinder; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tr; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.enmus.ExcelType; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.text.Collator; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.ParseException; +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.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +import static com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl.copyFile; + +//import com.jero.modules.project.util.WordUtil; + +/** + * @Description: 项目库-法规清单表 + * @Author: jero-boot + * @Date: 2022-04-14 + * @Version: V1.0 + */ +@Slf4j +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class PlatformProjectLawsInventoryEOServiceImpl extends ServiceImpl implements IPlatformProjectLawsInventoryEOService { + + private static DecimalFormat df = new DecimalFormat("#.00"); + private static String percentSign = "%"; + @Autowired + private ProjectLibraryBaseMapper projectLibraryBaseMapper; + + @Autowired + private SysUserMapper sysUserMapper; + + @Autowired + private IBussDocumentLibraryEOService iBussDocumentLibraryEOService; + + @Autowired + private IOSSFileService iOSSFileService; + + @Autowired + private IFeishuService iFeishuService; + + @Autowired + private ISysAnnouncementService sysAnnouncementService; + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private WebSocket webSocket; + + @Autowired + private ProjectRelatedPersonnelMapper projectRelatedPersonnelMapper; + + @Autowired + private ProjectNameInfoEOMapper projectNameInfoEOMapper; + + @Autowired + private ProjectYearNameInfoEOMapper projectYearNameInfoEOMapper; + + @Autowired + private IProjectTaskInventoryEOService projectTaskInventoryEOService; + + @Autowired + private IProjectTaskInventoryDetailEOService projectTaskInventoryDetailEOService; + + @Autowired + private IProjectTaskInventoryFeedbackEOService projectTaskInventoryFeedbackEOService; + + @Autowired + private IFeedbackHistoryService feedbackHistoryService; + + @Autowired + private IDummyInventoryInfoEOService dummyInventoryInfoEOService; + @Value(value = "${jero.path.upload}") + private String uploadpath; + @Value("${jero.path.exportPdfTempPath}") + private String exportPdfTempPath; + @Value("${jero.path.simfangFontFilePath}") + private String simfangFontFilePath; + @Value(value = "${jero.backUrl}") + private String backUrl; + @Value(value = "${jero.backUrlPhone}") + private String backUrlPhone; + + @Autowired + private SysCategoryServiceImpl sysCategoryService; + @Autowired + private SysDictItemServiceImpl sysDictItemServiceImpl; + @Autowired + private IProjectRelatedPersonnelService iProjectRelatedPersonnelService; + + @Autowired + private ProjectLawsInventoryLogEOServiceImpl projectLawsInventoryLogEOService; + + @Autowired + private DummyInventoryBaseEOServiceImpl dummyInventoryBaseEOService; + + @Autowired + private SysDictItemMapper sysDictItemMapper; + + @Autowired + private IProcessHistoryEOService processHistoryEOService; + + @Autowired + private IConditionAssessmentEOService conditionAssessmentEOService; + + @Autowired + private WorkFlowFeignClientImpl workFlowFeignClient; + @Autowired + SysCategoryMapper sysCategoryMapper; + + @Autowired + private TaskFeignClientImpl taskFeignClient; + + @Autowired + SysRoleMapper sysRoleMapper; + @Autowired + ProjectLibraryBaseServiceImpl projectLibraryBaseService; + @Autowired + ProjectRelatedPersonnelServiceImpl projectRelatedPersonnelService; + + @Autowired + private IProjectLawsInventoryRejectCauseEOService projectLawsInventoryRejectCauseEOService; + @Autowired + private IProcessInfoEOService processInfoEOService; + @Autowired + private IProcessInfoDetailEOService processInfoDetailEOService; + + @Autowired + private IFeishuService feishuService; + + @Autowired + private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + + @Autowired + private IProjectUserPermissionService projectUserPermissionService; + + @Autowired + private IProjectUserDutyTerritoryService projectUserDutyTerritoryService; + + @Autowired + private ISysDictItemService sysDictItemService; + @Autowired + private IProjectLibraryRoleRelEOService projectLibraryRoleRelEOService; + @Autowired + private ProjectLawsInventoryEOEditServiceImpl editService; + @Autowired + private ProblemManagementEOServiceImpl problemManagementEOService; + @Autowired + private ProblemManagementEOMapper problemManagementEOMapper; + @Autowired + private ISysDictService sysDictService; + @Autowired + private BussDocumentLibraryEOServiceImpl documentLibraryEOService; + @Autowired + private ProcessHistoryEOServiceImpl processHistoryEOServiceImpl; + + /** + * 保存 + * + * @param projectLawsInventoryEO + * @return + */ + @Override + public void add(ProjectLawsInventoryEO projectLawsInventoryEO) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + Date now = new Date(); + List projectTaskInventoryEOList = new ArrayList<>(); + //法规清单所有的数据 + LambdaQueryWrapper wrapperTemp = new LambdaQueryWrapper<>(); + wrapperTemp.in(ProjectLawsInventoryEO::getProjectLibraryId, projectLawsInventoryEO.getProjectLibraryId()); + List projectLawsInventoryEOList = this.list(wrapperTemp); + //调取 + String dummyInventoryBaseId = projectLawsInventoryEO.getDummyInventoryBaseId(); + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDummyids())) { + //查询虚拟清单对应清单维护中的数据 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(DummyInventoryInfoEO::getId, Arrays.asList(projectLawsInventoryEO.getDummyids().split(","))); + List dummyInventoryInfoEOList = dummyInventoryInfoEOService.list(lambdaQueryWrapper); + List dummyInventoryInfoEOListNew = new ArrayList<>(); + if (dummyInventoryInfoEOList.size() != 0) { + List projectLawsInventoryEOS = new ArrayList<>(); + //责任领域如果有多个,则需要拆分成多条 + for (DummyInventoryInfoEO dummyInventoryInfoEO : dummyInventoryInfoEOList) { + String dutyTerritory = dummyInventoryInfoEO.getDutyTerritory(); + if (StringUtils.isNotBlank(dutyTerritory)) { + for (String dutyTerritoryOne : dutyTerritory.split(",")) { + DummyInventoryInfoEO dummyInventoryInfoEONew = new DummyInventoryInfoEO(); + BeanUtils.copyProperties(dummyInventoryInfoEO, dummyInventoryInfoEONew); + dummyInventoryInfoEONew.setDutyTerritory(dutyTerritoryOne); + dummyInventoryInfoEOListNew.add(dummyInventoryInfoEONew); + } + } else { + dummyInventoryInfoEOListNew.add(dummyInventoryInfoEO); + } + } + if (projectLawsInventoryEOList.size() == 0) { + //此时法规清单中没有数据,直接将维护清单中的数据添加即可 + for (DummyInventoryInfoEO dummyInventoryInfoEO : dummyInventoryInfoEOListNew) { + ProjectLawsInventoryEO projectLawsInventoryEOTemp = new ProjectLawsInventoryEO(); + projectLawsInventoryEOTemp.setProjectLibraryId(projectLawsInventoryEO.getProjectLibraryId()); + BeanUtils.copyProperties(dummyInventoryInfoEO, projectLawsInventoryEOTemp); + projectLawsInventoryEOTemp.setId(UUID.randomUUID().toString().replace("-", "")); + projectLawsInventoryEOTemp.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEOTemp.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEOTemp.setStandId(dummyInventoryInfoEO.getBussDocumentLibraryId()); + projectLawsInventoryEOTemp.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryEOTemp.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryEOTemp.setCreateTime(new Date()); + projectLawsInventoryEOTemp.setUpdateTime(new Date()); + projectLawsInventoryEOS.add(projectLawsInventoryEOTemp); + } + } else { + //此时法规清单中有数据,再添加虚拟清单数据时,如果法规清单中已有要填加的虚拟清单数据,则数据以法规清单为准 + List projectLawsInventoryEOListTemp = new ArrayList<>(); + for (DummyInventoryInfoEO dummyInventoryInfoEO : dummyInventoryInfoEOListNew) { + List collect = projectLawsInventoryEOList.stream() + .filter(e -> e.getSerialNumber().equals(dummyInventoryInfoEO.getSerialNumber())).collect(Collectors.toList()); + if (collect.size() != 0) { + for (ProjectLawsInventoryEO lawsInventoryEO : collect) { + //数据对比 + ProjectLawsInventoryEO projectLawsInventoryEOTemp = dataCompare(lawsInventoryEO, dummyInventoryInfoEO); + projectLawsInventoryEOListTemp.add(projectLawsInventoryEOTemp); + } + } else { + ProjectLawsInventoryEO projectLawsInventoryEOTemp = new ProjectLawsInventoryEO(); + projectLawsInventoryEOTemp.setProjectLibraryId(projectLawsInventoryEO.getProjectLibraryId()); + BeanUtils.copyProperties(dummyInventoryInfoEO, projectLawsInventoryEOTemp); + projectLawsInventoryEOTemp.setId(UUID.randomUUID().toString().replace("-", "")); + projectLawsInventoryEOTemp.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEOTemp.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEOTemp.setStandId(dummyInventoryInfoEO.getBussDocumentLibraryId()); + projectLawsInventoryEOTemp.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryEOTemp.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryEOTemp.setCreateTime(new Date()); + projectLawsInventoryEOTemp.setUpdateTime(new Date()); + projectLawsInventoryEOS.add(projectLawsInventoryEOTemp); + } + } + if (projectLawsInventoryEOListTemp.size() != 0) { + this.updateBatchById(projectLawsInventoryEOListTemp); + } + } + if (projectLawsInventoryEOS.size() != 0) { + this.saveBatch(projectLawsInventoryEOS); + //设置权限 + for (ProjectLawsInventoryEO lawsInventoryEO : projectLawsInventoryEOS) { + ProjectUserPermission permission = new ProjectUserPermission(); + permission.setProjectId(projectLawsInventoryEO.getProjectLibraryId()); + permission.setUserId(sysUser.getId()); + permission.setBelong(ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_CREATE_BY.getValue()); + permission.setDescription(PermissionDescriptionEnum.PROJECT_LAWS_INVENTORY.getValue() + lawsInventoryEO.getId()); + permission.setCreateTime(now); + permission.setUpdateTime(now); + projectUserPermissionService.add(permission); + } + projectLawsInventoryEOS.forEach(lawsInventory -> { + ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); + String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectTaskInventoryEO.setId(projectTaskInventoryId); + projectTaskInventoryEO.setProjectLawsInventoryId(lawsInventory.getId()); + projectTaskInventoryEO.setStandId(lawsInventory.getStandId()); + projectTaskInventoryEO.setCertificationProgress(CertificationProgressEnum.NOT_START.getValue()); + projectTaskInventoryEOList.add(projectTaskInventoryEO); + }); + + //更新log + String projectLibraryId = projectLawsInventoryEOS.stream().map(e -> e.getProjectLibraryId()).collect(Collectors.toList()).get(0); + String username = sysUser.getUsername(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + String dummyInventoryBaseName = dummyInventoryBaseEOService.list(queryWrapper.eq("id", dummyInventoryBaseId)).get(0).getName();//name + String contentLog = username + "调取了" + dummyInventoryBaseName + "虚拟清单的标准内容"; + String enContentLog = username + " called the standard content of" + dummyInventoryBaseName + "virtual inventory."; + projectLawsInventoryLogEOService.updateLog(contentLog, projectLibraryId, CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, projectLibraryId, CutEnum.EN.getValue()); + } + } else if (dummyInventoryInfoEOList.size() == 0 && StringUtils.isBlank(projectLawsInventoryEO.getFlag())) { + //flag为二次确认标识,flag为空时进行验证 + throw new JeroBootException("该虚拟清单的维护清单中没有数据,是否需要添加"); + } + } + + //新增 + String ids = projectLawsInventoryEO.getIds(); + if (StringUtils.isNotBlank(ids)) { + //验重,对于每条法规清单添加文档库数据(之前添加过的就不能再次添加) + //1.已经添加过的文档库数据 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ProjectLawsInventoryEO::getProjectLibraryId, Arrays.asList(projectLawsInventoryEO.getProjectLibraryId().split(","))); + List projectLawsInventoryEOS = this.list(lambdaQueryWrapper); + List serialNumberList = new ArrayList<>(); + if (projectLawsInventoryEOS.size() != 0) { + List collect = projectLawsInventoryEOS.stream().map(ProjectLawsInventoryEO::getSerialNumber).collect(Collectors.toList()); + serialNumberList.addAll(collect); + } + //2.文档库数据 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(BussDocumentLibraryEO::getId, Arrays.asList(ids.split(","))); + List bussDocumentLibraryEOList = iBussDocumentLibraryEOService.list(wrapper); + if (bussDocumentLibraryEOList.size() != 0) { + List serialNumberBussList = bussDocumentLibraryEOList.stream().map(BussDocumentLibraryEO::getSerialNumber).collect(Collectors.toList()); + if (serialNumberList.size() != 0) { + List collect = serialNumberList.stream().filter(e -> serialNumberBussList.contains(e)).collect(Collectors.toList()); + if (collect.size() != 0) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException(StringUtils.join(collect, ",") + "已存在不能重复添加,请重新选择"); + } else { + throw new JeroBootException(StringUtils.join(collect, ",") + "Already exists and cannot be added again"); + } + } + } + } + + List list = new ArrayList<>(); + List addPermission = new ArrayList<>(); + for (BussDocumentLibraryEO bussDocumentLibraryEO : bussDocumentLibraryEOList) { + String standId = bussDocumentLibraryEO.getId(); + + ProjectLawsInventoryEO projectLawsInventoryTemp = new ProjectLawsInventoryEO(); + BeanUtils.copyProperties(bussDocumentLibraryEO, projectLawsInventoryTemp); + String projectLawsInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectLawsInventoryTemp.setId(projectLawsInventoryId); + projectLawsInventoryTemp.setProjectLibraryId(projectLawsInventoryEO.getProjectLibraryId()); + projectLawsInventoryTemp.setCreateTime(new Date()); + projectLawsInventoryTemp.setUpdateTime(new Date()); + projectLawsInventoryTemp.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryTemp.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryTemp.setStandId(standId); + projectLawsInventoryTemp.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryTemp.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + list.add(projectLawsInventoryTemp); + + ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); + String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectTaskInventoryEO.setId(projectTaskInventoryId); + projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryId); + projectTaskInventoryEO.setStandId(standId); + projectTaskInventoryEO.setCertificationProgress(CertificationProgressEnum.NOT_START.getValue()); + projectTaskInventoryEOList.add(projectTaskInventoryEO); + + //添加权限 + ProjectUserPermission permission = new ProjectUserPermission(); + permission.setProjectId(projectLawsInventoryEO.getProjectLibraryId()); + permission.setUserId(sysUser.getId()); + permission.setBelong(ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_CREATE_BY.getValue()); + permission.setDescription(PermissionDescriptionEnum.PROJECT_LAWS_INVENTORY.getValue() + projectLawsInventoryId); + permission.setCreateTime(now); + permission.setUpdateTime(now); + addPermission.add(permission); + } + super.saveBatch(list); + if (ObjectUtils.isNotEmpty(addPermission)) { + projectUserPermissionService.saveBatch(addPermission); + } + + //更新log + String username = sysUser.getUsername(); + String serialNumber = list.stream().map(e -> e.getSerialNumber()).collect(Collectors.joining(",")); + String contentLog = username + "向清单中添加了“" + serialNumber + "”"; + String enContentLog = username + " added “" + serialNumber + "” to the list."; + + projectLawsInventoryLogEOService.updateLog(contentLog, projectLawsInventoryEO.getProjectLibraryId(), CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, projectLawsInventoryEO.getProjectLibraryId(), CutEnum.EN.getValue()); + } + + if (CollectionUtils.isNotEmpty(projectTaskInventoryEOList)) { + //项目任务清单数据初始化。 + this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); + projectTaskInventoryEOList.forEach(taskInventory -> { + this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); + }); + } + } + + @Override + public void editById(ProjectLawsInventoryEO projectLawsInventoryEO) { + this.editService.editById(projectLawsInventoryEO); + } + + /** + * 更新流程信息 + * + * @param projectLawsInventoryEO + */ + @Override + public void updateFlowInfo(ProjectLawsInventoryEO projectLawsInventoryEO) { + //只有法规的 任务确认状态为接受,才能启动 设计、验证、prehomo三个流程。 + if (StringUtils.equals(projectLawsInventoryEO.getTaskAffirmStatus(), TaskAffirmStatusEnum.ACCEPTED.getValue())) { + QueryWrapper taskInventoryQueryWrapper = new QueryWrapper<>(); + taskInventoryQueryWrapper.lambda().eq(ProjectTaskInventoryEO::getProjectLawsInventoryId, projectLawsInventoryEO.getId()); + ProjectTaskInventoryEO projectTaskInventoryEO = projectTaskInventoryEOService.getBaseMapper().selectOne(taskInventoryQueryWrapper); + if (projectTaskInventoryEO != null) { + String designPId = projectTaskInventoryEO.getDesignPId(); + if (StringUtils.isNotEmpty(designPId)) { + updateFlowAssignee(projectLawsInventoryEO, projectTaskInventoryEO, designPId, FlowTypeEnum.SJFHXSHLC.getValue()); + } + + String verifyPId = projectTaskInventoryEO.getVerifyPId(); + if (StringUtils.isNotEmpty(verifyPId)) { + updateFlowAssignee(projectLawsInventoryEO, projectTaskInventoryEO, verifyPId, FlowTypeEnum.YZFHXSCLC.getValue()); + } + + String prehomoPId = projectTaskInventoryEO.getPrehomoPId(); + if (StringUtils.isNotEmpty(prehomoPId)) { + updateFlowAssignee(projectLawsInventoryEO, projectTaskInventoryEO, prehomoPId, FlowTypeEnum.PREHOMOQRLC.getValue()); + } + } + } + } + + /** + * 更新流程办理人 + * + * @param projectLawsInventoryEO 法规清单数据 + * @param projectTaskInventoryEO 任务清单数据 + * @param pId 流程实例id + * @param flowType 流程类型 + */ + public void updateFlowAssignee(ProjectLawsInventoryEO projectLawsInventoryEO, ProjectTaskInventoryEO projectTaskInventoryEO, String pId, String flowType) { + QueryWrapper taskInventoryDetailWrapper = new QueryWrapper<>(); + taskInventoryDetailWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getProjectTaskInventoryId, projectTaskInventoryEO.getProjectLawsInventoryId()); + taskInventoryDetailWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getActiProcInstId, pId); + taskInventoryDetailWrapper.lambda().eq(ProjectTaskInventoryDetailEO::getFlowType, flowType); + List taskInventoryDetailList = projectTaskInventoryDetailEOService.getBaseMapper().selectList(taskInventoryDetailWrapper); + + if (CollectionUtils.isNotEmpty(taskInventoryDetailList)) { + if (StringUtils.equals(flowType, FlowTypeEnum.SJFHXSHLC.getValue())) { + for (ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO : taskInventoryDetailList) { + if (StringUtils.equals(projectTaskInventoryDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())) { + //更新责任人的任务 + projectTaskInventoryDetailEO.setUserId(projectLawsInventoryEO.getDesignDutyId()); + } + if (StringUtils.equals(projectTaskInventoryDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())) { + //更新发起人的任务 + projectTaskInventoryDetailEO.setUserId(projectLawsInventoryEO.getDesignInitiatorId()); + } + this.projectTaskInventoryDetailEOService.updateById(projectTaskInventoryDetailEO); + } + } else if (StringUtils.equals(flowType, FlowTypeEnum.PREHOMOQRLC.getValue())) { + for (ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO : taskInventoryDetailList) { + if (StringUtils.equals(projectTaskInventoryDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())) { + //更新责任人的任务 + projectTaskInventoryDetailEO.setUserId(projectLawsInventoryEO.getPrehomoDutyId()); + } + if (StringUtils.equals(projectTaskInventoryDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())) { + //更新发起人的任务 + projectTaskInventoryDetailEO.setUserId(projectLawsInventoryEO.getPrehomoInitiatorId()); + } + this.projectTaskInventoryDetailEOService.updateById(projectTaskInventoryDetailEO); + } + } else if (StringUtils.equals(flowType, FlowTypeEnum.YZFHXSCLC.getValue())) { + for (ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO : taskInventoryDetailList) { + if (StringUtils.equals(projectTaskInventoryDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.THE_RESPONSIBLE_PERSON_HANDLES_THE_TASK.getKey())) { + //更新责任人的任务 + projectTaskInventoryDetailEO.setUserId(projectLawsInventoryEO.getVerifyDutyId()); + } + if (StringUtils.equals(projectTaskInventoryDetailEO.getTaskDefinitionKey(), DesignComplianceNodeEnum.SPONSOR_REVIEW.getKey())) { + //更新发起人的任务 + projectTaskInventoryDetailEO.setUserId(projectLawsInventoryEO.getVerifyInitiatorId()); + } + this.projectTaskInventoryDetailEOService.updateById(projectTaskInventoryDetailEO); + } + } + //更新待办中心流程信息明细表,处理人 + this.updateProcessInfoDetailAssignee(projectLawsInventoryEO, pId, flowType); + } + } + + /** + * 更新待办中心流程信息明细表,处理人 + * + * @param projectLawsInventoryEO + * @param pId + * @param flowType + */ + public void updateProcessInfoDetailAssignee(ProjectLawsInventoryEO projectLawsInventoryEO, String pId, String flowType) { + this.processInfoDetailEOService.updateProcessInfoDetailUserId(projectLawsInventoryEO, pId, flowType); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id, String projectLibraryId, String cut) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int isProjectRole = this.checkUserRole(projectLibraryId, currentUser.getId(), ""); + if (!ProjectRoleEnum.STUDIO_ENGINEER.getValue().equals(String.valueOf(isProjectRole))) { + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("该用户没有删除权限"); + } else { + throw new JeroBootException("The user has no deletion permission"); + } + } + + //更新log + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + String serialNumber = list(queryWrapper.eq("id", id)).get(0).getSerialNumber(); + String contentLog = username + "删除了清单中的“" + serialNumber + "”"; + String enContentLog = username + " deleted “" + serialNumber + "” from the list"; + projectLawsInventoryLogEOService.updateLog(contentLog, projectLibraryId, CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, projectLibraryId, CutEnum.EN.getValue()); + + removeById(id); + this.projectTaskInventoryEOService.deleteByProjectLawsInventoryIds(Arrays.asList(id.split(","))); + + //删除该条法规清单数据的 项目当前状态数据 + QueryWrapper conditionAssessmentRemoveWrapper = new QueryWrapper<>(); + conditionAssessmentRemoveWrapper.lambda().eq(ConditionAssessmentEO::getProjectLawsInventoryId, id); + this.conditionAssessmentEOService.remove(conditionAssessmentRemoveWrapper); + //删除该条法规清单数据的拒绝原因。 + QueryWrapper rejectCauseRemoveWrapper = new QueryWrapper<>(); + rejectCauseRemoveWrapper.lambda().eq(ProjectLawsInventoryRejectCauseEO::getProjectLawsInventoryId, id); + this.projectLawsInventoryRejectCauseEOService.remove(rejectCauseRemoveWrapper); + //删除相关人员权限 + QueryWrapper delPermission = new QueryWrapper<>(); + delPermission.eq("description", PermissionDescriptionEnum.PROJECT_LAWS_INVENTORY.getValue() + id); + projectUserPermissionService.remove(delPermission); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids, String projectLibraryId, String cut) { + if (ObjectUtils.isEmpty(ids)) { + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("请选择数据"); + } else { + throw new JeroBootException("Please select data"); + } + } + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int isProjectRole = this.checkUserRole(projectLibraryId, currentUser.getId(), ""); + if (!ProjectRoleEnum.STUDIO_ENGINEER.getValue().equals(String.valueOf(isProjectRole))) { + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("该用户没有删除权限"); + } else { + throw new JeroBootException("The user has no deletion permission"); + } + } + + //更新log + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + List lawsList = list(queryWrapper.in("id", ids)); + String serialNumber = lawsList.stream().map(e -> e.getSerialNumber()).collect(Collectors.joining(",")); + + String contentLog = username + "删除了清单中的“" + serialNumber + "”"; + String enContentLog = username + " deleted “" + serialNumber + "” from the list"; + projectLawsInventoryLogEOService.updateLog(contentLog, projectLibraryId, CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(contentLog, projectLibraryId, CutEnum.EN.getValue()); + removeByIds(ids); + this.projectTaskInventoryEOService.deleteByProjectLawsInventoryIds(ids); + + //删除该条法规清单数据的 项目当前状态数据 + QueryWrapper conditionAssessmentRemoveWrapper = new QueryWrapper<>(); + conditionAssessmentRemoveWrapper.lambda().in(ConditionAssessmentEO::getProjectLawsInventoryId, ids); + this.conditionAssessmentEOService.remove(conditionAssessmentRemoveWrapper); + + //删除该条法规清单数据的拒绝原因。 + QueryWrapper rejectCauseRemoveWrapper = new QueryWrapper<>(); + rejectCauseRemoveWrapper.lambda().in(ProjectLawsInventoryRejectCauseEO::getProjectLawsInventoryId, ids); + this.projectLawsInventoryRejectCauseEOService.remove(rejectCauseRemoveWrapper); + + //删除相关人员权限 + List description = new ArrayList<>(); + QueryWrapper delPermission = new QueryWrapper<>(); + for (String id : ids) { + description.add(PermissionDescriptionEnum.PROJECT_LAWS_INVENTORY.getValue() + id); + } + delPermission.in("description", description); + projectUserPermissionService.remove(delPermission); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public ProjectLawsInventoryEO queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletRequest req) { + + long startTime = System.currentTimeMillis(); + String dutyTerritoryStr = ""; + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDutyTerritory())) { + dutyTerritoryStr = projectLawsInventoryEO.getDutyTerritory(); + projectLawsInventoryEO.setDutyTerritory(null); + } + + QueryWrapper projectLawsInventoryEOQueryWrapper = QueryGenerator.initQueryWrapper(projectLawsInventoryEO, req.getParameterMap()); + projectLawsInventoryEOQueryWrapper.orderByDesc("create_time", "serial_number"); + String projectLibraryId = projectLawsInventoryEO.getProjectLibraryId(); + + if (StringUtils.isNotEmpty(dutyTerritoryStr)) { + String finalDutyTerritoryStr = dutyTerritoryStr.replaceAll("\\*", ""); + projectLawsInventoryEOQueryWrapper.and(query -> { + query.lambda().like(ProjectLawsInventoryEO::getDutyTerritory, finalDutyTerritoryStr); + if (StringUtils.contains(finalDutyTerritoryStr, ",")) { + String[] dutyTerritoryArr = finalDutyTerritoryStr.split(","); + for (String duty : dutyTerritoryArr) { + query.or(q -> { + q.like("duty_territory", duty); + }); + } + } + }); + } + + + if (StringUtils.isEmpty(projectLibraryId)) { + throw new JeroBootException("项目库id不能为空!"); + } + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //projectLawsInventoryEOQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); + + //验证当前用户在该项目中是什么角色 + //int isProjectRole = checkUserRole(projectLibraryId, currentUser.getId(), ""); + //if(isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())){ + int isProjectRole = Integer.parseInt(projectLawsInventoryEO.getRoleCode()); + + log.info("一阶段消耗时间:" + (System.currentTimeMillis() - startTime)); + + if (isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.MANAGER.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.ADMIN.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.VIEWER.getValue())) { + /*projectLawsInventoryEOQueryWrapper.and(queryWrapper ->{ + queryWrapper.eq("regulation_owner_id",currentUser.getId()). + or().eq("engineering_interface_person",currentUser.getId()). + or().eq("design_duty_id",currentUser.getId()). + or().eq("verify_duty_id",currentUser.getId()); + });*/ + + // 创建查询权限 + this.createQueryPermission(isProjectRole, currentUser, projectLawsInventoryEOQueryWrapper); + } + List result = super.baseMapper.selectList(projectLawsInventoryEOQueryWrapper); + log.info("二阶段消耗时间:" + (System.currentTimeMillis() - startTime)); + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.VIEWER.getValue())) { + //查当前用户Viewer对应责任领域 + List dutyTerritoryList = projectUserDutyTerritoryService.queryDutyTerritoryByUserId(currentUser.getId()); + if (ObjectUtils.isNotEmpty(dutyTerritoryList)) { +// result = result.stream().filter(e -> dutyTerritoryList.contains(e.getDutyTerritory())).collect(Collectors.toList()); + result = result.stream().filter(data -> { + boolean flag = false; + if (StringUtils.isNotEmpty(data.getDutyTerritory())) { + for (String dutyTerritory : dutyTerritoryList) { + if (StringUtils.contains(data.getDutyTerritory(), dutyTerritory)) { + flag = true; + break; + } + } + } + return flag; + }).collect(Collectors.toList()); + } else { + result = new ArrayList<>(); + } + } + dataDispose(result, currentUser, isProjectRole, projectLawsInventoryEO.getCut()); + log.info("三阶段消耗时间:" + (System.currentTimeMillis() - startTime)); + dataDictDispose(result, projectLawsInventoryEO.getCut()); + log.debug("处理数据字典消耗时间:" + (System.currentTimeMillis() - startTime)); + //表头排序 + result = hearSort(projectLawsInventoryEO, result); + return result; + } + + private List hearSort(ProjectLawsInventoryEO projectLawsInventoryEO, List result) { +// String orderBy = "1"; +// String orderByField = "serialNumber"; + String orderBy = projectLawsInventoryEO.getOrderBy(); + String orderByField = projectLawsInventoryEO.getOrderByField(); + if (ObjectUtils.isNotEmpty(orderByField)) { + Collator comparator = Collator.getInstance(Locale.CHINESE); + //编号 serialNumber + if ("serialNumber".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getSerialNumber(), e2.getSerialNumber()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getSerialNumber(), e1.getSerialNumber()); + }); + } + } + // 认证类型 attestationType + if("attestationType".equals(orderByField)){ + if(OrderEnum.POSITIVE.getValue().equals(orderBy)){ + Collections.sort(result,(e1, e2)->{ + String e1AttestationType = StringUtils.isNotBlank(e1.getAttestationType()) ? e1.getAttestationType() : ""; + String e2AttestationType = StringUtils.isNotBlank(e2.getAttestationType()) ? e2.getAttestationType() : ""; + return comparator.compare(e1AttestationType,e2AttestationType); + }); + }else if(OrderEnum.REVERSE.getValue().equals(orderBy)){ + Collections.sort(result,(e1,e2)->{ + String e1AttestationType = StringUtils.isNotBlank(e1.getAttestationType()) ? e1.getAttestationType() : ""; + String e2AttestationType = StringUtils.isNotBlank(e2.getAttestationType()) ? e2.getAttestationType() : ""; + return comparator.compare(e2AttestationType,e1AttestationType); + }); + } + } + // 认证级别 attestationRank + if("attestationRank".equals(orderByField)){ + if(OrderEnum.POSITIVE.getValue().equals(orderBy)){ + Collections.sort(result,(e1, e2)->{ + String e1AttestationRank = StringUtils.isNotBlank(e1.getAttestationRank()) ? e1.getAttestationRank() : ""; + String e2AttestationRank = StringUtils.isNotBlank(e2.getAttestationRank()) ? e2.getAttestationRank() : ""; + return comparator.compare(e1AttestationRank,e2AttestationRank); + }); + }else if(OrderEnum.REVERSE.getValue().equals(orderBy)){ + Collections.sort(result,(e1,e2)->{ + String e1AttestationRank = StringUtils.isNotBlank(e1.getAttestationRank()) ? e1.getAttestationRank() : ""; + String e2AttestationRank = StringUtils.isNotBlank(e2.getAttestationRank()) ? e2.getAttestationRank() : ""; + return comparator.compare(e2AttestationRank,e1AttestationRank); + }); + } + } + // WVTA ID wvtaId + if ("wvtaId".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getWvtaId(), e2.getWvtaId()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getWvtaId(), e1.getWvtaId()); + }); + } + } + // 责任领域 dutyTerritory_dictText + if ("dutyTerritory".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getDutyTerritory_dictText(), e2.getDutyTerritory_dictText()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getDutyTerritory_dictText(), e1.getDutyTerritory_dictText()); + }); + } + } + // 法规工程师 regulationOwnerName + if ("regulationOwnerName".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getRegulationOwnerName(), e2.getRegulationOwnerName()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getRegulationOwnerName(), e1.getRegulationOwnerName()); + }); + } + } + // 认证工程师 homologationEngineerName + if ("homologationEngineerName".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getHomologationEngineerName(), e2.getHomologationEngineerName()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getHomologationEngineerName(), e1.getHomologationEngineerName()); + }); + } + } + // 工程接口人 engineeringInterfacePersonName + if ("engineeringInterfacePersonName".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getEngineeringInterfacePersonName(), e2.getEngineeringInterfacePersonName()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getEngineeringInterfacePersonName(), e1.getEngineeringInterfacePersonName()); + }); + } + } + List list = new LinkedList<>(); + // 清单确认状态(未发起,法规待确认,认证待确认,接受,法规拒绝,认证拒绝) inventoryAffirmStatusName + //InventoryAffirmStatusEnum + if ("inventoryAffirmStatusName".equals(orderByField)) { + result = inventorySort(orderBy, orderByField, result, list); + } + // 任务确认状态(未发起,待确认,接受,拒绝) taskAffirmStatusName + //TaskAffirmStatusEnum + if ("taskAffirmStatusName".equals(orderByField)) { + result = taskSort(orderBy, orderByField, result, list); + } + // 认证级别(WVTA,Com.-VTA,Cert.-Market,Reg.-Market) attestationRank_dictText + if ("attestationRank".equals(orderByField)) { + result = attestationRankSort(orderBy, orderByField, result, list); + } + + // 设计符合性排序 + // 设计符合性-责任人 designDutyId + if ("designDutyId".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getDesignDutyIdName(), e2.getDesignDutyIdName()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getDesignDutyIdName(), e1.getDesignDutyIdName()); + }); + } + } + // 设计符合性-截止时间 designDueDate + if ("designDueDate".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getDesignDueDate() != null && e2.getDesignDueDate() != null) { + String e1DesignDueDate = DateUtils.formatDate(e1.getDesignDueDate()); + String e2DesignDueDate = DateUtils.formatDate(e2.getDesignDueDate()); + return comparator.compare(e1DesignDueDate, e2DesignDueDate); + } + return -1; + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getDesignDueDate() != null && e2.getDesignDueDate() != null) { + String e1DesignDueDate = DateUtils.formatDate(e1.getDesignDueDate()); + String e2DesignDueDate = DateUtils.formatDate(e2.getDesignDueDate()); + return comparator.compare(e2DesignDueDate, e1DesignDueDate); + } + return -1; + }); + } + } + // 设计符合性-交付物类型 designDeliverableType + if ("designDeliverableType".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getDesignDeliverableTypeName() != null && e2.getDesignDeliverableTypeName() != null) { + return comparator.compare(e1.getDesignDeliverableTypeName(), e2.getDesignDeliverableTypeName()); + } + return -1; + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getDesignDeliverableTypeName() != null && e2.getDesignDeliverableTypeName() != null) { + return comparator.compare(e2.getDesignDeliverableTypeName(), e1.getDesignDeliverableTypeName()); + } + return -1; + }); + } + } + // 设计符合性-流程状态 designFlowStatusName + if ("designFlowStatusName".equals(orderByField)) { +// if(OrderEnum.POSITIVE.getValue().equals(orderBy)){ +// Collections.sort(result,(e1, e2)->{ +// if(e1.getDesignDeliverableTypeName() != null && e2.getDesignDeliverableTypeName() != null){ +// return comparator.compare(e1.getDesignDeliverableTypeName(),e2.getDesignDeliverableTypeName()); +// } +// return -1; +// }); +// }else if(OrderEnum.REVERSE.getValue().equals(orderBy)){ +// Collections.sort(result,(e1,e2)->{ +// if(e1.getDesignDeliverableTypeName() != null && e2.getDesignDeliverableTypeName() != null){ +// return comparator.compare(e2.getDesignDeliverableTypeName(),e1.getDesignDeliverableTypeName()); +// } +// return -1; +// }); +// } + } + + // 验证符合性排序 + // 验证符合性-责任人 verifyDutyId + if ("verifyDutyId".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e1.getVerifyDutyIdName(), e2.getVerifyDutyIdName()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + return comparator.compare(e2.getVerifyDutyIdName(), e1.getVerifyDutyIdName()); + }); + } + } + // 验证符合性-截止时间 verifyDueDate + if ("verifyDueDate".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getVerifyDueDate() != null && e2.getVerifyDueDate() != null) { + String e1VerifyDueDate = DateUtils.formatDate(e1.getVerifyDueDate()); + String e2VerifyDueDate = DateUtils.formatDate(e2.getVerifyDueDate()); + return comparator.compare(e1VerifyDueDate, e2VerifyDueDate); + } + return -1; + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getVerifyDueDate() != null && e2.getVerifyDueDate() != null) { + String e1VerifyDueDate = DateUtils.formatDate(e1.getVerifyDueDate()); + String e2VerifyDueDate = DateUtils.formatDate(e2.getVerifyDueDate()); + return comparator.compare(e2VerifyDueDate, e1VerifyDueDate); + } + return -1; + }); + } + } + // 验证符合性-交付物类型 verifyDeliverableType + if ("verifyDeliverableType".equals(orderByField)) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getVerifyDeliverableTypeName() != null && e2.getVerifyDeliverableTypeName() != null) { + return comparator.compare(e1.getVerifyDeliverableTypeName(), e2.getVerifyDeliverableTypeName()); + } + return -1; + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(result, (e1, e2) -> { + if (e1.getVerifyDeliverableTypeName() != null && e2.getVerifyDeliverableTypeName() != null) { + return comparator.compare(e2.getVerifyDeliverableTypeName(), e1.getVerifyDeliverableTypeName()); + } + return -1; + }); + } + } + // 验证符合性-流程状态 designFlowStatusName + if ("verifyFlowStatusName".equals(orderByField)) { +// if(OrderEnum.POSITIVE.getValue().equals(orderBy)){ +// Collections.sort(result,(e1, e2)->{ +// if(e1.getDesignDeliverableTypeName() != null && e2.getDesignDeliverableTypeName() != null){ +// return comparator.compare(e1.getDesignDeliverableTypeName(),e2.getDesignDeliverableTypeName()); +// } +// return -1; +// }); +// }else if(OrderEnum.REVERSE.getValue().equals(orderBy)){ +// Collections.sort(result,(e1,e2)->{ +// if(e1.getDesignDeliverableTypeName() != null && e2.getDesignDeliverableTypeName() != null){ +// return comparator.compare(e2.getDesignDeliverableTypeName(),e1.getDesignDeliverableTypeName()); +// } +// return -1; +// }); +// } + } + } + return result; + } + + //清单确认状态排序 + private List inventorySort(String orderBy, String orderByField, + List dummyInventoryInfoEOList, + List list) { + if (ObjectUtils.isNotEmpty(orderByField) && "inventoryAffirmStatusName".equals(orderByField)) { + List notStarted = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.NOT_STARTED.getName())).collect(Collectors.toList()); + List regEngToConfirm = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.REG_ENG_TO_CONFIRM.getName())).collect(Collectors.toList()); + List homoEngToConfirm = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.HOMO_ENG_TO_CONFIRM.getName())).collect(Collectors.toList()); + List accepted = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.ACCEPTED.getName())).collect(Collectors.toList()); + List regEngRejected = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.REG_ENG_REJECTED.getName())).collect(Collectors.toList()); + List homoEngRejected = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.HOMO_ENG_REJECTED.getName())).collect(Collectors.toList()); + List listToConfirm = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getName())).collect(Collectors.toList()); + List rejected = dummyInventoryInfoEOList.stream() + .filter(e -> e.getInventoryAffirmStatusName().equals(InventoryAffirmStatusEnum.REJECTED.getName())).collect(Collectors.toList()); + + + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + //正序 + list.addAll(notStarted); + list.addAll(listToConfirm); + list.addAll(regEngToConfirm); + list.addAll(homoEngToConfirm); + list.addAll(accepted); + list.addAll(rejected); + list.addAll(regEngRejected); + list.addAll(homoEngRejected); + + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + //倒序 + list.addAll(homoEngRejected); + list.addAll(regEngRejected); + list.addAll(rejected); + list.addAll(accepted); + list.addAll(homoEngToConfirm); + list.addAll(regEngToConfirm); + list.addAll(listToConfirm); + list.addAll(notStarted); + } + } + if (ObjectUtils.isNotEmpty(list)) { + return list; + } else { + return dummyInventoryInfoEOList; + } + } + + // 任务确认状态排序 + private List taskSort(String orderBy, String orderByField, + List dummyInventoryInfoEOList, + List list) { + if (ObjectUtils.isNotEmpty(orderByField) && "taskAffirmStatusName".equals(orderByField)) { + List notStarted = dummyInventoryInfoEOList.stream() + .filter(e -> e.getTaskAffirmStatusName().equals(TaskAffirmStatusEnum.NOT_STARTED.getName())).collect(Collectors.toList()); + List listToConfirm = dummyInventoryInfoEOList.stream() + .filter(e -> e.getTaskAffirmStatusName().equals(TaskAffirmStatusEnum.LIST_TO_CONFIRM.getName())).collect(Collectors.toList()); + List accepted = dummyInventoryInfoEOList.stream() + .filter(e -> e.getTaskAffirmStatusName().equals(TaskAffirmStatusEnum.ACCEPTED.getName())).collect(Collectors.toList()); + List rejected = dummyInventoryInfoEOList.stream() + .filter(e -> e.getTaskAffirmStatusName().equals(TaskAffirmStatusEnum.REJECTED.getName())).collect(Collectors.toList()); + + + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + //正序 + list.addAll(notStarted); + list.addAll(listToConfirm); + list.addAll(accepted); + list.addAll(rejected); + + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + //倒序 + list.addAll(rejected); + list.addAll(accepted); + list.addAll(listToConfirm); + list.addAll(notStarted); + } + } + if (ObjectUtils.isNotEmpty(list)) { + return list; + } else { + return dummyInventoryInfoEOList; + } + } + + //认证级别 + private List attestationRankSort(String orderBy, String orderByField, + List dummyInventoryInfoEOList, + List list) { + if (ObjectUtils.isNotEmpty(orderByField) && "attestationRank".equals(orderByField)) { + List wvta = dummyInventoryInfoEOList.stream() + .filter(e -> e.getAttestationRank_dictText().startsWith(AttestationRankEnum.WVTA.getValue())).collect(Collectors.toList()); + List vta = dummyInventoryInfoEOList.stream() + .filter(e -> e.getAttestationRank_dictText().startsWith(AttestationRankEnum.VTA.getValue())).collect(Collectors.toList()); + List market = dummyInventoryInfoEOList.stream() + .filter(e -> e.getAttestationRank_dictText().startsWith(AttestationRankEnum.MARKET.getValue())).collect(Collectors.toList()); + List regu = dummyInventoryInfoEOList.stream() + .filter(e -> e.getAttestationRank_dictText().startsWith(AttestationRankEnum.REGU.getValue())).collect(Collectors.toList()); + List na = dummyInventoryInfoEOList.stream() + .filter(e -> e.getAttestationRank_dictText().startsWith(AttestationRankEnum.NA.getValue())).collect(Collectors.toList()); + + Collator comparator = Collator.getInstance(Locale.CHINESE); + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + attestationRankPositive(orderBy, wvta, comparator); + attestationRankPositive(orderBy, vta, comparator); + attestationRankPositive(orderBy, market, comparator); + attestationRankPositive(orderBy, regu, comparator); + attestationRankPositive(orderBy, na, comparator); + //正序 + List collect = dummyInventoryInfoEOList.stream().filter(e -> StringUtils.isBlank(e.getAttestationRank_dictText())).collect(Collectors.toList()); + list.addAll(collect); + list.addAll(wvta); + list.addAll(vta); + list.addAll(market); + list.addAll(regu); + list.addAll(na); + + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + attestationRankReverse(orderBy, wvta, comparator); + attestationRankReverse(orderBy, vta, comparator); + attestationRankReverse(orderBy, market, comparator); + attestationRankReverse(orderBy, regu, comparator); + attestationRankReverse(orderBy, na, comparator); + //倒序 + list.addAll(na); + list.addAll(regu); + list.addAll(market); + list.addAll(vta); + list.addAll(wvta); + List collect = dummyInventoryInfoEOList.stream().filter(e -> StringUtils.isBlank(e.getAttestationRank_dictText())).collect(Collectors.toList()); + list.addAll(collect); + } + } + if (ObjectUtils.isNotEmpty(list)) { + return list; + } else { + return dummyInventoryInfoEOList; + } + } + + //正序 + private void attestationRankPositive(String orderBy, List list, Collator comparator) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(list, (e1, e2) -> { + return comparator.compare(e1.getAttestationRank_dictText(), e2.getAttestationRank_dictText()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(list, (e1, e2) -> { + return comparator.compare(e2.getAttestationRank_dictText(), e1.getAttestationRank_dictText()); + }); + } + } + + //倒序 + private void attestationRankReverse(String orderBy, List list, Collator comparator) { + if (OrderEnum.POSITIVE.getValue().equals(orderBy)) { + Collections.sort(list, (e1, e2) -> { + return comparator.compare(e1.getAttestationRank_dictText(), e2.getAttestationRank_dictText()); + }); + } else if (OrderEnum.REVERSE.getValue().equals(orderBy)) { + Collections.sort(list, (e1, e2) -> { + return comparator.compare(e2.getAttestationRank_dictText(), e1.getAttestationRank_dictText()); + }); + } + } + + /** + * 数据字典数据处理方法 + * + * @param result 返回值 + * @param cut 中英文切换 + */ + public void dataDictDispose(List result, String cut) { + if (CollectionUtils.isNotEmpty(result)) { + List sysDictItems = sysDictItemServiceImpl.getBaseMapper().selectItemsAll(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : result) { + if (StringUtils.isBlank(projectLawsInventoryEO.getWvtaId())) { + projectLawsInventoryEO.setWvtaId(""); + } + if (StringUtils.isBlank(projectLawsInventoryEO.getDutyTerritory_dictText())) { + projectLawsInventoryEO.setDutyTerritory_dictText(""); + } + //处理适用地区 + String region = projectLawsInventoryEO.getRegion(); + if (StringUtils.isNotEmpty(region)) { + String region_dictText = disposeShowDictItemValue(sysDictItems, region, cut, ProjectInventoryFieldEnum.REGION.getValue()); + projectLawsInventoryEO.setRegion_dictText(region_dictText); + } + + //处理实施类别 + String implementType = projectLawsInventoryEO.getImplementType(); + if (StringUtils.isNotEmpty(implementType)) { + String implementType_dictText = disposeShowDictItemValue(sysDictItems, implementType, cut, ProjectInventoryFieldEnum.IMPLEMENT_TYPE.getValue()); + projectLawsInventoryEO.setImplementType_dictText(implementType_dictText); + } + + //处理认证类型 + String attestationType = projectLawsInventoryEO.getAttestationType(); + if (StringUtils.isNotEmpty(attestationType)) { + String attestationType_dictText = disposeShowDictItemValue(sysDictItems, attestationType, cut, ProjectInventoryFieldEnum.ATTESTATION_TYPE.getValue()); + projectLawsInventoryEO.setAttestationType_dictText(attestationType_dictText); + } + + //处理认证级别 + String attestationRank = projectLawsInventoryEO.getAttestationRank(); + if (StringUtils.isNotEmpty(attestationRank)) { + String attestationRank_dictText = disposeShowDictItemValue(sysDictItems, attestationRank, cut, ProjectInventoryFieldEnum.ATTESTATION_RANK.getValue()); + projectLawsInventoryEO.setAttestationRank_dictText(attestationRank_dictText); + } else { + projectLawsInventoryEO.setAttestationRank_dictText(""); + } + + //处理责任领域 + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + if (StringUtils.isNotEmpty(dutyTerritory)) { + String dutyTerritory_dictText = disposeShowDictItemValue(sysDictItems, dutyTerritory, cut, ProjectInventoryFieldEnum.DUTY_TERRITORY.getValue()); + projectLawsInventoryEO.setDutyTerritory_dictText(dutyTerritory_dictText); + } + + //处理设计符合性确认-交付物类型 + String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); + if (StringUtils.isNotEmpty(designDeliverableType)) { + String designDeliverableType_dictText = disposeShowDictItemValue(sysDictItems, designDeliverableType, cut, ProjectInventoryFieldEnum.DESIGN_DELIVERABLE_TYPE.getValue()); + projectLawsInventoryEO.setDesignDeliverableType_dictText(designDeliverableType_dictText); + } + + //处理设计符合性确认-发起人角色 + String designInitiator = projectLawsInventoryEO.getDesignInitiator(); + if (StringUtils.isNotEmpty(designInitiator)) { + String designInitiator_dictText = disposeShowDictItemValue(sysDictItems, designInitiator, cut, ProjectInventoryFieldEnum.DESIGN_INITIATOR.getValue()); + projectLawsInventoryEO.setDesignInitiator_dictText(designInitiator_dictText); + } + + //处理设计符合性确认-责任人角色 + String designDuty = projectLawsInventoryEO.getDesignDuty(); + if (StringUtils.isNotEmpty(designDuty)) { + String designDuty_dictText = disposeShowDictItemValue(sysDictItems, designDuty, cut, ProjectInventoryFieldEnum.DESIGN_DUTY.getValue()); + projectLawsInventoryEO.setDesignDuty_dictText(designDuty_dictText); + } + + //处理prehomo确认-交付物类型 + String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); + if (StringUtils.isNotEmpty(prehomoDeliverableType)) { + String prehomoDeliverableType_dictText = disposeShowDictItemValue(sysDictItems, prehomoDeliverableType, cut, ProjectInventoryFieldEnum.PREHOMO_DELIVERABLE_TYPE.getValue()); + projectLawsInventoryEO.setPrehomoDeliverableType_dictText(prehomoDeliverableType_dictText); + } + + //处理prehomo确认-发起人角色 + String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiator(); + if (StringUtils.isNotEmpty(prehomoInitiator)) { + String prehomoInitiator_dictText = disposeShowDictItemValue(sysDictItems, prehomoInitiator, cut, ProjectInventoryFieldEnum.PREHOMO_INITIATOR.getValue()); + projectLawsInventoryEO.setPrehomoInitiator_dictText(prehomoInitiator_dictText); + } + + //处理prehomo确认-责任人角色 + String prehomoDuty = projectLawsInventoryEO.getPrehomoDuty(); + if (StringUtils.isNotEmpty(prehomoDuty)) { + String prehomoDuty_dictText = disposeShowDictItemValue(sysDictItems, prehomoDuty, cut, ProjectInventoryFieldEnum.PREHOMO_DUTY.getValue()); + projectLawsInventoryEO.setPrehomoDuty_dictText(prehomoDuty_dictText); + } + + //处理验证符合性确认-交付物类型 + String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); + if (StringUtils.isNotEmpty(verifyDeliverableType)) { + String verifyDeliverableType_dictText = disposeShowDictItemValue(sysDictItems, verifyDeliverableType, cut, ProjectInventoryFieldEnum.VERIFY_DELIVERABLE_TYPE.getValue()); + projectLawsInventoryEO.setVerifyDeliverableType_dictText(verifyDeliverableType_dictText); + } + + //处理验证符合性确认-发起人角色 + String verifyInitiator = projectLawsInventoryEO.getVerifyInitiator(); + if (StringUtils.isNotEmpty(verifyInitiator)) { + String verifyInitiator_dictText = disposeShowDictItemValue(sysDictItems, verifyInitiator, cut, ProjectInventoryFieldEnum.VERIFY_INITIATOR.getValue()); + projectLawsInventoryEO.setVerifyInitiator_dictText(verifyInitiator_dictText); + } + + //处理验证符合性确认-责任人角色 + String verifyDuty = projectLawsInventoryEO.getVerifyDuty(); + if (StringUtils.isNotEmpty(verifyDuty)) { + String verifyDuty_dictText = disposeShowDictItemValue(sysDictItems, verifyDuty, cut, ProjectInventoryFieldEnum.VERIFY_DUTY.getValue()); + projectLawsInventoryEO.setVerifyDuty_dictText(verifyDuty_dictText); + } + } + } + } + + /** + * 处理展示数据字典值 + * + * @param sysDictItems 所有的数据字典项 + * @param fieldValues 字段值 + * @param cut 中英文切换标识 + * @param dicCode 数据字典code码 + * @return + */ + public String disposeShowDictItemValue(List sysDictItems, String fieldValues, String cut, String dicCode) { + String result = ""; + List sysDictItemList = sysDictItems.stream().filter(e -> { + boolean flag = false; + if (StringUtils.equals(e.getDictCode(), dicCode)) { + flag = true; + } + return flag; + }).distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(sysDictItemList)) { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + result = sysDictItemList.stream().filter(e -> { + boolean flag = false; + List fieldValueStrList = Arrays.asList(fieldValues.split(",")); + for (String fieldValueStr : fieldValueStrList) { + if (StringUtils.equals(fieldValueStr, e.getItemValue())) { + flag = true; + break; + } + } + return flag; + }).map(SysDictItem::getItemText).collect(Collectors.joining(",")); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + result = sysDictItemList.stream().filter(e -> { + boolean flag = false; + List fieldValueStrList = Arrays.asList(fieldValues.split(",")); + for (String fieldValueStr : fieldValueStrList) { + if (StringUtils.equals(fieldValueStr, e.getItemValue())) { + flag = true; + break; + } + } + return flag; + }).map(SysDictItem::getEnName).collect(Collectors.joining(",")); + } + } + return result; + } + + /** + * 数据处理 + * + * @param list + */ + @Override + public void dataDispose(List list, LoginUser currentUser, int isProjectRole, String cut) { + if (CollectionUtils.isNotEmpty(list)) { + //树形结构数据字典(技术领域) + List categoryList = sysCategoryService.list(); + List userIdList = new ArrayList<>(); + List deliverableList = new ArrayList<>(); + List correspondingStandardList = new ArrayList<>(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : list) { + if (StringUtils.isNotBlank(projectLawsInventoryEO.getCorrespondingStandard())) { + correspondingStandardList.addAll(Arrays.asList(projectLawsInventoryEO.getCorrespondingStandard().split(","))); + } + } + List bussDocumentLibraryEOS = new ArrayList<>(); + if (correspondingStandardList.size() != 0) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(BussDocumentLibraryEO::getId, correspondingStandardList); + bussDocumentLibraryEOS = iBussDocumentLibraryEOService.list(lambdaQueryWrapper); + } + + for (ProjectLawsInventoryEO projectLawsInventoryEO : list) { + //处理交付物类型 + String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); + String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); + String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); + //设计交付物类型 + if (StringUtils.isNotBlank(designDeliverableType)) { + List designDeliverableTypeList = Arrays.asList(designDeliverableType.split(",")); + String name = getTreeName(cut, categoryList, designDeliverableTypeList); + projectLawsInventoryEO.setDesignDeliverableTypeName(name); + } + //pre交付物类型 + if (StringUtils.isNotBlank(prehomoDeliverableType)) { + List prehomoDeliverableTypeList = Arrays.asList(prehomoDeliverableType.split(",")); + String name = getTreeName(cut, categoryList, prehomoDeliverableTypeList); + projectLawsInventoryEO.setPrehomoDeliverableTypeName(name); + } + //验证交付物类型 + if (StringUtils.isNotBlank(verifyDeliverableType)) { + List verifyDeliverableTypeList = Arrays.asList(verifyDeliverableType.split(",")); + String name = getTreeName(cut, categoryList, verifyDeliverableTypeList); + projectLawsInventoryEO.setVerifyDeliverableTypeName(name); + } + StringBuilder sb = new StringBuilder(); + if (StringUtils.isNotBlank(projectLawsInventoryEO.getCorrespondingStandard()) && bussDocumentLibraryEOS.size() != 0) { + for (String correspondingStandard : projectLawsInventoryEO.getCorrespondingStandard().split(",")) { + List collect = bussDocumentLibraryEOS.stream().filter(e -> e.getId().equals(correspondingStandard)).collect(Collectors.toList()); + if (collect.size() != 0) { + sb.append(collect.get(0).getSerialNumber() + ","); + } else { + sb.append(correspondingStandard + ","); + } + } + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEO.setCorrespondingStandard(substring); + } + } + //认证工程师id + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId())) { + userIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + } else { + projectLawsInventoryEO.setHomologationEngineerName(""); + } + //法规工程师id + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId())) { + userIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); + } else { + projectLawsInventoryEO.setRegulationOwnerName(""); + } + //工程接口人id + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + userIdList.add(projectLawsInventoryEO.getEngineeringInterfacePerson()); + } else { + projectLawsInventoryEO.setEngineeringInterfacePersonName(""); + } + + //设计符合性确认 + //发起人 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignInitiatorId())) { + userIdList.add(projectLawsInventoryEO.getDesignInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())) { + userIdList.add(projectLawsInventoryEO.getDesignDutyId()); + } + + //prehomo确认 + //发起人 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoInitiatorId())) { + userIdList.add(projectLawsInventoryEO.getPrehomoInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoDutyId())) { + userIdList.add(projectLawsInventoryEO.getPrehomoDutyId()); + } + + //验证符合性确认 + //发起人 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyInitiatorId())) { + userIdList.add(projectLawsInventoryEO.getVerifyInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())) { + userIdList.add(projectLawsInventoryEO.getVerifyDutyId()); + } + + //设计符合性确认交付物模板 + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDesignDeliverableTemplate())) { + deliverableList.addAll(Arrays.asList(projectLawsInventoryEO.getDesignDeliverableTemplate().split(","))); + } + // Prehomo确认交付物模板 + if (StringUtils.isNotBlank(projectLawsInventoryEO.getPrehomoDeliverableTemplate())) { + deliverableList.addAll(Arrays.asList(projectLawsInventoryEO.getPrehomoDeliverableTemplate().split(","))); + } + // 验证符合性确认交付物模板 + if (StringUtils.isNotBlank(projectLawsInventoryEO.getVerifyDeliverableTemplate())) { + deliverableList.addAll(Arrays.asList(projectLawsInventoryEO.getVerifyDeliverableTemplate().split(","))); + } + } + + List sysUsers = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(userIdList)) { + userIdList = userIdList.stream().distinct().collect(Collectors.toList()); + QueryWrapper sysUserQueryWrapper = new QueryWrapper<>(); + sysUserQueryWrapper.lambda().in(SysUser::getId, userIdList); + sysUsers = sysUserMapper.selectList(sysUserQueryWrapper); + } + + //文件 + List fileInfos = new ArrayList<>(); + if (deliverableList.size() != 0) { + fileInfos = iOSSFileService.getFileInfos(StringUtils.join(deliverableList, ",")); + } + + for (ProjectLawsInventoryEO projectLawsInventoryEO : list) { + //处理人员展示名称 + if (CollectionUtils.isNotEmpty(sysUsers)) { + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + if (StringUtils.isNotEmpty(homologationEngineerId)) { + String homologationEngineerName = sysUsers.stream().filter(e -> homologationEngineerId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setHomologationEngineerName(homologationEngineerName); + } + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + if (StringUtils.isNotEmpty(regulationOwnerId)) { + String regulationOwnerName = sysUsers.stream().filter(e -> regulationOwnerId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setRegulationOwnerName(regulationOwnerName); + } + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + if (StringUtils.isNotEmpty(engineeringInterfacePerson)) { + String engineeringInterfacePersonName = sysUsers.stream().filter(e -> engineeringInterfacePerson.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setEngineeringInterfacePersonName(engineeringInterfacePersonName); + } + + //设计符合性确认 + //发起人 + String designInitiatorId = projectLawsInventoryEO.getDesignInitiatorId(); + if (StringUtils.isNotEmpty(designInitiatorId)) { + String designInitiatorName = sysUsers.stream().filter(e -> designInitiatorId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setDesignInitiatorName(designInitiatorName); + } + //责任人 + String designDutyId = projectLawsInventoryEO.getDesignDutyId(); + if (StringUtils.isNotEmpty(designDutyId)) { + String designDutyName = sysUsers.stream().filter(e -> designDutyId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setDesignDutyIdName(designDutyName); + } else { + projectLawsInventoryEO.setDesignDutyIdName(""); + } + + //prehomo确认 + //发起人 + String prehomoInitiatorId = projectLawsInventoryEO.getPrehomoInitiatorId(); + if (StringUtils.isNotEmpty(prehomoInitiatorId)) { + String prehomoInitiatorName = sysUsers.stream().filter(e -> prehomoInitiatorId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setPrehomoInitiatorName(prehomoInitiatorName); + } + //责任人 + String prehomoDutyId = projectLawsInventoryEO.getPrehomoDutyId(); + if (StringUtils.isNotEmpty(prehomoDutyId)) { + String prehomoDutyName = sysUsers.stream().filter(e -> prehomoDutyId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setPrehomoDutyName(prehomoDutyName); + } + + //验证符合性确认 + //发起人 + String verifyInitiatorId = projectLawsInventoryEO.getVerifyInitiatorId(); + if (StringUtils.isNotEmpty(verifyInitiatorId)) { + String verifyInitiatorName = sysUsers.stream().filter(e -> verifyInitiatorId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setVerifyInitiatorName(verifyInitiatorName); + } + //责任人 + String verifyDutyId = projectLawsInventoryEO.getVerifyDutyId(); + if (StringUtils.isNotEmpty(verifyDutyId)) { + String verifyDutyName = sysUsers.stream().filter(e -> verifyDutyId.equals(e.getId())). + map(SysUser::getUsername).collect(Collectors.joining(",")); + projectLawsInventoryEO.setVerifyDutyIdName(verifyDutyName); + } else { + projectLawsInventoryEO.setVerifyDutyIdName(""); + } + } + + //清单确认状态 + /*String inventoryAffirmStatus = projectLawsInventoryEO.getInventoryAffirmStatus(); + if(StringUtils.isNotEmpty(inventoryAffirmStatus)){ + if(StringUtils.equals(cut, CutEnum.CN.getValue())){ + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.getTextByValue(inventoryAffirmStatus)); + }else { + projectLawsInventoryEO.setInventoryAffirmStatusName(inventoryAffirmStatus); + } + }*/ + /** + * 清单确认状态展示: + * 待确认:展示 法规工程师待确认 或 认证工程师待确认 + * 拒绝:展示 法规工程师拒绝 或 认证工程师拒绝 + * + */ + String inventoryAffirmStatus = projectLawsInventoryEO.getInventoryAffirmStatus(); + if (StringUtils.isNotEmpty(inventoryAffirmStatus)) { + //如果是待确认 + if (StringUtils.equals(inventoryAffirmStatus, InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue())) { + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus()) + && StringUtils.equals(projectLawsInventoryEO.getHomologationEngineerSubmitStatus(), OperatorResultEnum.ACCEPTED.getValue())) { + + //如果 认证工程师提交状态 不为空,则证明认证工程师已经提交过了,展示状态应该展示 法规工程师待确认 + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.REG_ENG_TO_CONFIRM.getName()); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.REG_ENG_TO_CONFIRM.getValue()); + } + } else if (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) + && StringUtils.equals(projectLawsInventoryEO.getRegulationOwnerSubmitStatus(), OperatorResultEnum.ACCEPTED.getValue())) { + + //如果 法规工程师提交状态 不为空,则证明法规工程师已经提交过了,展示状态应该展示 认证工程师待确认 + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.HOMO_ENG_TO_CONFIRM.getName()); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.HOMO_ENG_TO_CONFIRM.getValue()); + } + } else { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.getTextByValue(inventoryAffirmStatus)); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(inventoryAffirmStatus); + } + } + //如果是拒绝 + } else if (StringUtils.equals(inventoryAffirmStatus, InventoryAffirmStatusEnum.REJECTED.getValue())) { + if ((StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus()) && StringUtils.equals(projectLawsInventoryEO.getHomologationEngineerSubmitStatus(), OperatorResultEnum.REJECTED.getValue())) + && (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) && StringUtils.equals(projectLawsInventoryEO.getRegulationOwnerSubmitStatus(), OperatorResultEnum.REJECTED.getValue()))) { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.REJECTED.getName()); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.REJECTED.getValue()); + } + } else if (StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus()) + && StringUtils.equals(projectLawsInventoryEO.getHomologationEngineerSubmitStatus(), OperatorResultEnum.REJECTED.getValue())) { + //如果认证工程师提交状态不为空,并且认证工程师提交状态为拒绝 + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.HOMO_ENG_REJECTED.getName()); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.HOMO_ENG_REJECTED.getValue()); + } + } else if (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) + && StringUtils.equals(projectLawsInventoryEO.getRegulationOwnerSubmitStatus(), OperatorResultEnum.REJECTED.getValue())) { + + //如果 法规工程师提交状态 不为空,则证明法规工程师已经提交过了,展示状态应该展示 认证工程师待确认 + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.REG_ENG_REJECTED.getName()); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.REG_ENG_REJECTED.getValue()); + } + } + } else { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setInventoryAffirmStatusName(InventoryAffirmStatusEnum.getTextByValue(inventoryAffirmStatus)); + } else { + projectLawsInventoryEO.setInventoryAffirmStatusName(inventoryAffirmStatus); + } + } + } + + //任务确认状态 + String taskAffirmStatus = projectLawsInventoryEO.getTaskAffirmStatus(); + if (StringUtils.isNotEmpty(taskAffirmStatus)) { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + projectLawsInventoryEO.setTaskAffirmStatusName(InventoryAffirmStatusEnum.getTextByValue(taskAffirmStatus)); + } else { + projectLawsInventoryEO.setTaskAffirmStatusName(taskAffirmStatus); + } + } + + String roleCode = ""; + String roleName = ""; + //设置当前用户在该项目中的角色 + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())) { + roleCode = ProjectRoleEnum.STUDIO_ENGINEER.getValue(); + roleName = ProjectRoleEnum.STUDIO_ENGINEER.getName(); + } else { + if (StringUtils.equals(currentUser.getId(), projectLawsInventoryEO.getRegulationOwnerId()) + && StringUtils.equals(currentUser.getId(), projectLawsInventoryEO.getHomologationEngineerId())) { + roleCode = ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue(); + roleName = ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getName(); + } else if (StringUtils.equals(currentUser.getId(), projectLawsInventoryEO.getRegulationOwnerId())) { + roleCode = ProjectRoleEnum.REGULATI_ENGINEER.getValue(); + roleName = ProjectRoleEnum.REGULATI_ENGINEER.getName(); + } else if (StringUtils.equals(currentUser.getId(), projectLawsInventoryEO.getHomologationEngineerId())) { + roleCode = ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue(); + roleName = ProjectRoleEnum.HOMOLOGATION_ENGINEER.getName(); + } + } + projectLawsInventoryEO.setRoleCode(roleCode); + projectLawsInventoryEO.setRoleName(roleName); + + //交付物类型模板 + if (fileInfos.size() != 0) { + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDesignDeliverableTemplate())) { + String fileName = this.editService.getFileName(projectLawsInventoryEO, fileInfos, projectLawsInventoryEO.getDesignDeliverableTemplate()); + if (StringUtils.isNotBlank(fileName)) { + projectLawsInventoryEO.setDesignDeliverableTemplateName(fileName); + } + } + if (StringUtils.isNotBlank(projectLawsInventoryEO.getPrehomoDeliverableTemplate())) { + String fileName = this.editService.getFileName(projectLawsInventoryEO, fileInfos, projectLawsInventoryEO.getPrehomoDeliverableTemplate()); + if (StringUtils.isNotBlank(fileName)) { + projectLawsInventoryEO.setPrehomoDeliverableTemplateName(fileName); + } + } + if (StringUtils.isNotBlank(projectLawsInventoryEO.getVerifyDeliverableTemplate())) { + String fileName = this.editService.getFileName(projectLawsInventoryEO, fileInfos, projectLawsInventoryEO.getVerifyDeliverableTemplate()); + if (StringUtils.isNotBlank(fileName)) { + projectLawsInventoryEO.setVerifyDeliverableTemplateName(fileName); + + } + } + } + + // 处理符合性流程状态。 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignFlowStatus())) { + String designFlowStatusName = ComplianceFlowStatusEnum.getTextByValue(projectLawsInventoryEO.getDesignFlowStatus(), cut); + projectLawsInventoryEO.setDesignFlowStatusName(designFlowStatusName); + } + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyFlowStatus())) { + String verifyFlowStatusName = ComplianceFlowStatusEnum.getTextByValue(projectLawsInventoryEO.getVerifyFlowStatus(), cut); + projectLawsInventoryEO.setVerifyFlowStatusName(verifyFlowStatusName); + } + + // 返回符合性流程的流程实例id + if (!StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || !StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue())) { + QueryWrapper processInfoDetailEOQueryWrapper = new QueryWrapper<>(); + processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId, projectLawsInventoryEO.getId()); + processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType, FlowTypeEnum.YZFHXSCLC.getValue()); + List processInfoDetailEOS = this.processInfoDetailEOService.list(processInfoDetailEOQueryWrapper); + if (CollectionUtils.isNotEmpty(processInfoDetailEOS)) { + projectLawsInventoryEO.setVerifyPId(processInfoDetailEOS.get(0).getActiProcInstId()); + } + } + if (!StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || !StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue())) { + QueryWrapper processInfoDetailEOQueryWrapper = new QueryWrapper<>(); + processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId, projectLawsInventoryEO.getId()); + processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType, FlowTypeEnum.SJFHXSHLC.getValue()); + List processInfoDetailEOS = this.processInfoDetailEOService.list(processInfoDetailEOQueryWrapper); + if (CollectionUtils.isNotEmpty(processInfoDetailEOS)) { + projectLawsInventoryEO.setDesignPId(processInfoDetailEOS.get(0).getActiProcInstId()); + } + } + } + } + } + + private String getTreeName(String cut, List categoryList, List technologyTerritoryList) { + StringBuilder sb = new StringBuilder(); + for (String technologyTerritory : technologyTerritoryList) { + List collect = categoryList.stream().filter(e -> technologyTerritory.equals(e.getId())).collect(Collectors.toList()); + if (collect.size() != 0) { + if (CutEnum.CN.getValue().equals(cut)) { + sb.append(collect.get(0).getName() + ","); + } else { + sb.append(collect.get(0).getEnName() + ","); + } + } + } + String technologyTerritoryName = ""; + if (StringUtils.isNotBlank(sb)) { + technologyTerritoryName = sb.substring(0, sb.length() - 1); + } + return technologyTerritoryName; + } + + /** + * 批量更新状态 + * + * @param json + * @return + */ + @Override + public Result updateStatusBatch(JSONObject json) { + String result = ""; + //operatorType: 0:studio工程师发起清单确认 1:法规工程师/认证工程师 (提交或拒绝) + String operatorType = json.getString("operatorType"); + String projectLibraryId = json.getString("projectLibraryId");//项目id + String cut = json.getString("cut");//中英文切换标识 + if (StringUtils.isEmpty(operatorType)) { + throw new JeroBootException("操作类型不能为空!"); + } + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + try { + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(new QueryWrapper() + .lambda().eq(ProjectLibraryBase::getId, projectLibraryId)); + + // studio信息 + SysUser studioUserInfo = this.sysUserMapper.selectOne( + new QueryWrapper().lambda().eq(SysUser::getId, projectLibraryBase.getStudioEngineer()) + ); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId, projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + QueryWrapper projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId, projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + + //项目名称 + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String projectName = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; + //TODO 切换成枚举,不要在代码里出现魔数 + if (StringUtils.equals(operatorType, OperatorTypeEnum.INVENTORY_AFFIRM.getValue())) { + String ids = json.getString("ids"); + + //验证用户是否是该项目的studio + isStudio(projectLibraryId, cut); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //清单确认截止时间 + String inventoryAffirmDueDate = json.getString("inventoryAffirmDueDate"); + Date endTime = new Date(); + try { + endTime = sdf.parse(inventoryAffirmDueDate); + } catch (ParseException e) { + e.printStackTrace(); + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isNotEmpty(ids)) { + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + } + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List projectLawsInventoryEOS = this.baseMapper.selectList(queryWrapper); + + List userIdList = new ArrayList<>(); + List processInfoDetailEOList = new ArrayList<>(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) { + //未发起或拒绝 可以发起清单确认 + boolean checkStatus = (StringUtils.equals(projectLawsInventoryEO.getInventoryAffirmStatus(), InventoryAffirmStatusEnum.NOT_STARTED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getInventoryAffirmStatus(), InventoryAffirmStatusEnum.REJECTED.getValue())); + //如果该数据的法规工程师、认证工程师都不为空 + boolean checkUser = (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId()) + && StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId())); + + if (checkStatus && checkUser) { + projectLawsInventoryEO.setInventoryAffirmStatus(InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue()); + projectLawsInventoryEO.setInventoryAffirmDueDate(sdf.parse(inventoryAffirmDueDate)); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(ProjectLawsInventoryEO::getId, projectLawsInventoryEO.getId()); + //认证工程师标识 如果认证工程师提交状态为空, 或认证工程师拒绝过,给认证工程师任务,让他处理 + boolean homologationEngineerFlag = ( + StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus()) + || StringUtils.equals(projectLawsInventoryEO.getHomologationEngineerSubmitStatus(), "1") + ); + //法规工程师标识 如果法规工程师提交状态为空, 或法规工程师拒绝过,给法规工程师任务,让他处理 + boolean regulationOwnerFlag = ( + StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) + || StringUtils.equals(projectLawsInventoryEO.getRegulationOwnerSubmitStatus(), "1") + ); + if (homologationEngineerFlag) { + updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerSubmitStatus, null); + userIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + processInfoDetailEO.setUserId(projectLawsInventoryEO.getHomologationEngineerId()); + processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.HOMOLOGATION_ENGINEER_AUDIT.getKey()); + processInfoDetailEO.setEndTime(endTime); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(currentUser.getId()); + processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue()); + + processInfoDetailEOList.add(processInfoDetailEO); + } + if (regulationOwnerFlag) { + updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerSubmitStatus, null); + userIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); + + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + processInfoDetailEO.setUserId(projectLawsInventoryEO.getRegulationOwnerId()); + processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.REGULATION_OWNER_AUDIT.getKey()); + processInfoDetailEO.setEndTime(endTime); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(currentUser.getId()); + processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue()); + + processInfoDetailEOList.add(processInfoDetailEO); + } + + if (homologationEngineerFlag || regulationOwnerFlag) { + //创建一条当前发起清单确认的studio的已办任务。 + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + processInfoDetailEO.setUserId(currentUser.getId()); + processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.INITIATED_BY_STUDIO_ENGINEERS.getKey()); + processInfoDetailEO.setEndTime(endTime); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(currentUser.getId()); + processInfoDetailEO.setStatus(TaskStatusEnum.HAVE_DONE.getValue()); + + processInfoDetailEO.setSubmitTime(new Date()); + processInfoDetailEOList.add(processInfoDetailEO); + + super.update(projectLawsInventoryEO, updateWrapper); + } + } + } + + if (CollectionUtils.isNotEmpty(userIdList)) { + userIdList = userIdList.stream().distinct().collect(Collectors.toList()); + List sysUsers = sysUserService.listByIds(userIdList); + List thirdIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //消息内容 + //String msgContentEN = currentUser.getUsername() + " initiated the regulation list confirmation for " + // + projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ". The due date is " + inventoryAffirmDueDate+ ". Please check and address it in a timely manner."; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation list confirmation task to complete"; + + // 飞书消息封装 + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + //feishuMsgVo.setContent("Hello! Please check and address this task in a timely manner."); + //feishuMsgVo.setTaskType("Regulation List Confirmation"); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //feishuMsgVo.setInitiator(studioUserInfo.getUsername()); + //feishuMsgVo.setDueDate(inventoryAffirmDueDate); + + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); + + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_LIST_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_LIST_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,请及时查看处理此项任务,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + inventoryAffirmDueDate); + feishuMsgVo.setEnContentUpper("Please check and address the task in a timely manner. Thank you!"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + inventoryAffirmDueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + + //系统内部跳转链接 + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + //sendMessage(msgTitle, msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,currentUser.getUsername()); + + //往待办中心添加数据。 + ProcessInfoEO processInfoEO = new ProcessInfoEO(); + this.addProcessInfo(processInfoEO, projectLibraryId, endTime); + this.addProcessInfoDetail(processInfoEO.getId(), processInfoDetailEOList, endTime); + } + + result = "发起清单确认"; + } else if (StringUtils.equals(operatorType, OperatorTypeEnum.SUBMIT_OR_REJECTED.getValue())) { + //提交结果 0通过 1拒绝 + String operatorResult = json.getString("operatorResult"); + if (StringUtils.equals(operatorResult, OperatorResultEnum.ACCEPTED.getValue())) { + result = "提交"; + } else if (StringUtils.equals(operatorResult, OperatorResultEnum.REJECTED.getValue())) { + result = "拒绝"; + } + + /*List idList = Arrays.asList(ids.split(",")); + + for (String id : idList) { + int isProjectRole = checkUserRole(projectLibraryId, currentUser.getId(), id); + + ProjectLawsInventoryEO projectLawsInventoryEO = getById(id); + + if(isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue())){ + projectLawsInventoryEO.setRegulationOwnerSubmitStatus(operatorResult); + projectLawsInventoryEO.setHomologationEngineerSubmitStatus(operatorResult); + }else if(isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue())){ + projectLawsInventoryEO.setRegulationOwnerSubmitStatus(operatorResult); + }else if(isProjectRole == Integer.parseInt(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue())){ + projectLawsInventoryEO.setHomologationEngineerSubmitStatus(operatorResult); + } + + //如果不是studio + if(isProjectRole != -1 && isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())){ + + String inventoryAffirmStatus = ""; + + //如果法规工程师与认证工程师都是提交通过 把清单确认状态设置为 接受 + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) && StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())){ + if(projectLawsInventoryEO.getRegulationOwnerSubmitStatus().equals("0") && projectLawsInventoryEO.getHomologationEngineerSubmitStatus().equals("0")){ + inventoryAffirmStatus = InventoryAffirmStatusEnum.ACCEPTED.getValue(); + } + + //如果法规工程师与认证工程师 其中一个人是拒绝 把清单确认状态设置为 拒绝 + if(projectLawsInventoryEO.getRegulationOwnerSubmitStatus().equals("1") || projectLawsInventoryEO.getHomologationEngineerSubmitStatus().equals("1")){ + inventoryAffirmStatus = InventoryAffirmStatusEnum.REJECTED.getValue(); + } + } + + if(StringUtils.isNotEmpty(inventoryAffirmStatus)){ + projectLawsInventoryEO.setInventoryAffirmStatus(inventoryAffirmStatus); + } + super.baseMapper.updateById(projectLawsInventoryEO); + } + }*/ + + JSONArray lawsInventoryList = json.getJSONArray("lawsInventoryList"); + if (CollectionUtils.isNotEmpty(lawsInventoryList)) { + Map lawsInventoryMap = null; + for (Object lawsInventory : lawsInventoryList) { + lawsInventoryMap = JSONObject.parseObject(JSONObject.toJSONString(lawsInventory), Map.class); + int isProjectRole = (int) lawsInventoryMap.get("roleCode"); + String id = (String) lawsInventoryMap.get("id"); + + ProjectLawsInventoryEO projectLawsInventoryEO = getById(id); + + //法规中英文 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + String LAW_EN = ""; + if (ObjectUtils.isNotEmpty(bussDocumentLibraryEO)) { + if (ObjectUtils.isNotEmpty(bussDocumentLibraryEO.getTitleEn())) { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn(); + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle(); + } + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle(); + } + + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue())) { + projectLawsInventoryEO.setRegulationOwnerSubmitStatus(operatorResult); + projectLawsInventoryEO.setHomologationEngineerSubmitStatus(operatorResult); + } else if (isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue())) { + projectLawsInventoryEO.setRegulationOwnerSubmitStatus(operatorResult); + } else if (isProjectRole == Integer.parseInt(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue())) { + projectLawsInventoryEO.setHomologationEngineerSubmitStatus(operatorResult); + } + + //如果不是studio + if (isProjectRole != -1 && isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())) { + + String inventoryAffirmStatus = ""; + + //如果法规工程师与认证工程师都是提交通过 把清单确认状态设置为 接受 + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus()) && StringUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())) { + if (projectLawsInventoryEO.getRegulationOwnerSubmitStatus().equals("0") && projectLawsInventoryEO.getHomologationEngineerSubmitStatus().equals("0")) { + inventoryAffirmStatus = InventoryAffirmStatusEnum.ACCEPTED.getValue(); + } + + /*//如果法规工程师与认证工程师 其中一个人是拒绝 把清单确认状态设置为 拒绝 + if(projectLawsInventoryEO.getRegulationOwnerSubmitStatus().equals("1") || projectLawsInventoryEO.getHomologationEngineerSubmitStatus().equals("1")){ + inventoryAffirmStatus = InventoryAffirmStatusEnum.REJECTED.getValue(); + }*/ + } + + //只要有一个人拒绝,就改为拒绝。 + if (StringUtils.equals(operatorResult, OperatorResultEnum.REJECTED.getValue())) { + inventoryAffirmStatus = InventoryAffirmStatusEnum.REJECTED.getValue(); + //如果拒绝,给studio发消息 + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //消息内容 + //String msgContentEN = ""; + //String msgTitle = ""; + + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue()) || isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue())) { + //msgContentEN = "The regulation list confirmation" +" of "+projectLawsInventoryEO.getSerialNumber() +" for " + // + projectNameInfoEO.getProjectName() +" is rejected by " +currentUser.getUsername() +". Please check and address it in a timely manner."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + + // ": You have a regulation list confirmation task to complete"; + + + // 飞书消息封装 + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + //feishuMsgVo.setContent("Hello! This task is rejected by " +currentUser.getUsername()+ ". Please check and address it in a timely manner."); + //feishuMsgVo.setTaskType("Regulation List Confirmation"); + //feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //feishuMsgVo.setInitiator(studioUserInfo.getUsername()); + //feishuMsgVo.setDueDate(sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate())); + + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); + //系统内部跳转链接 + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + List userIdList = new ArrayList<>(); + userIdList.add(projectLibraryBase.getStudioEngineer()); + List sysUsers = sysUserService.listByIds(userIdList); + List thirdIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //sendMessage(msgTitle, msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,studioUserInfo.getUsername()); + String dueDate = sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_LIST_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_LIST_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务被" + currentUser.getUsername() + "拒绝,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Hello! This task is rejected by " + currentUser.getUsername() + ". Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()) || isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue())) { + //msgContentEN = "The regulation list confirmation of "+projectLawsInventoryEO.getSerialNumber() + " for " + // + projectNameInfoEO.getProjectName() +" is rejected by " + currentUser.getUsername() +". Please check and address it in a timely manner."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + + // ": You have a regulation list confirmation task to complete"; + + // 飞书消息封装 + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + //feishuMsgVo.setContent("Hello! This task is rejected by "+currentUser.getUsername()+". Please check and address it in a timely manner."); + //feishuMsgVo.setTaskType("Regulation List Confirmation"); + //feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //feishuMsgVo.setInitiator(studioUserInfo.getUsername()); + //feishuMsgVo.setDueDate(sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate())); + + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); + //系统内部跳转链接 + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + List userIdList = new ArrayList<>(); + userIdList.add(projectLibraryBase.getStudioEngineer()); + List sysUsers = sysUserService.listByIds(userIdList); + List thirdIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //sendMessage(msgTitle, msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,studioUserInfo.getUsername()); + String dueDate = sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate()); + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_LIST_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_LIST_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,该任务被" + currentUser.getUsername() + "拒绝,请及时查看处理"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Hello! This task is rejected by " + currentUser.getUsername() + ". Please check and address it in a timely manner"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.RED.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + + if (StringUtils.isNotEmpty(inventoryAffirmStatus)) { + projectLawsInventoryEO.setInventoryAffirmStatus(inventoryAffirmStatus); + } + super.baseMapper.updateById(projectLawsInventoryEO); + this.updateProcessInfoDetail(projectLawsInventoryEO.getId()); + + //如果法规、认证工程师都提交通过,法规清单 清单确认状态为:接受, 并且给当前项目的studio发送消息 + /*if(StringUtils.equals(inventoryAffirmStatus,InventoryAffirmStatusEnum.ACCEPTED.getValue())){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //消息内容 + String msgContentEN = "The regulation list confirmation of " + +projectLawsInventoryEO.getSerialNumber()+" for " + + projectNameInfoEO.getProjectName() +" is completed. Please check."; + String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + + ": You have a regulation list confirmation notification to check"; + + // 飞书消息封装 + FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + feishuMsgVo.setContent("Hello! This task is completed. Please check."); + feishuMsgVo.setTaskType("Regulation List Confirmation"); + feishuMsgVo.setRegulationNo(projectLawsInventoryEO.getSerialNumber()); + feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + feishuMsgVo.setInitiator(studioUserInfo.getUsername()); + feishuMsgVo.setDueDate(sdf.format(projectLawsInventoryEO.getInventoryAffirmDueDate())); + + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); + //系统内部跳转链接 + String href = "" + " View details" + ""; + String contentInfo = msgContentEN + " " + href; + Map sendMessageMap = new HashMap<>(); + sendMessageMap.put("hrefFeishu",hrefFeishu); + sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + List userIdList = new ArrayList<>(); + userIdList.add(projectLibraryBase.getStudioEngineer()); + sendMessage(msgTitle, msgContentEN,userIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,studioUserInfo.getUsername()); + }*/ + } + } + } else { + throw new JeroBootException("请至少勾选一条法规清单进行" + result); + } + + } + } catch (Exception ex) { + log.error("批量" + result + " 更新状态失败:" + ex.getMessage()); + throw new JeroBootException("批量" + result + "失败!"); + } + return new Result<>().success(result + "成功!"); + } + + /** + * 发送消息 + * + * @param msgContent + * @param userIdList + * @param projectLibraryId + */ + @Override + public void sendMessage(String msgTitle, String msgContent, List userIdList, String projectLibraryId, Map sendMessageMap, FeishuMsgVo feishuMsgVo, MessageTypeEnum messageType, String initiator) { + String idTemp = projectLibraryId; + + List sysUsers = sysUserService.listByIds(userIdList); + List thirdIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } +// //飞书跳转链接 + String hrefFeishu = (String) sendMessageMap.get("hrefFeishu"); + //消息内容 + String contentInfo = (String) sendMessageMap.get("contentInfo"); + + //系统消息 + SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, msgTitle, msgContent, contentInfo, messageType, initiator); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + sendWebsocket(idTemp, idTemp); + +// //飞书消息 + try { + if (feishuMsgVo != null) { + // 补充飞书跳转链接 + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setTitle(messageType.getName()); + iFeishuService.sendCardMsg(thirdIdList.toArray(new String[]{}), feishuMsgVo); + } else { + iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, messageType.getName(), hrefFeishu); + } + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + + @NotNull + private SysAnnouncement getSysAnnouncement(List userIdList, String title, String content, String contentInfo, MessageTypeEnum messageType, String initiator) { + SysAnnouncement sysAnnouncement = new SysAnnouncement(); + sysAnnouncement.setInitiator(initiator); + sysAnnouncement.setDelFlag("0"); + sysAnnouncement.setSendStatus("0"); + sysAnnouncement.setSendTime(new Date()); + sysAnnouncement.setMsgCategory(messageType.getValue());//消息类型 + sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);//指定用户 + sysAnnouncement.setTitile(title); + sysAnnouncement.setMsgContent(content); + sysAnnouncement.setMsgContentInfo(contentInfo); + sysAnnouncement.setUserIds(StringUtils.join(userIdList, ",")); + return sysAnnouncement; + } + + private void sendWebsocket(String msgId, String msgTet) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, msgId); + obj.put(WebsocketConst.MSG_TXT, msgTet); + webSocket.sendMessage(obj.toJSONString()); + } + + /** + * 匹配相关人员 + * + * @param params + * @return + */ + @Override + public Result matchRelevantPeople(Map params) { + String projectLibraryId = (String) params.get("projectLibraryId");//项目id + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int isProjectRole = this.checkUserRole(projectLibraryId, currentUser.getId(), ""); + //验证用户是否是该项目的studio工程师,只有studio工程师才能匹配相关人员 + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())) { + //获取当前项目中的相关人员信息 + QueryWrapper queryProjectPerson = new QueryWrapper<>(); + queryProjectPerson.lambda().eq(ProjectRelatedPersonnel::getProjectId, projectLibraryId); + List projectRelatedPersonnels = this.projectRelatedPersonnelMapper.selectList(queryProjectPerson); + + if (CollectionUtils.isNotEmpty(projectRelatedPersonnels)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + /*List inventoryAffirmStatusList = new ArrayList<>(); + inventoryAffirmStatusList.add(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + inventoryAffirmStatusList.add(InventoryAffirmStatusEnum.REJECTED.getValue()); + queryWrapper.lambda().in(ProjectLawsInventoryEO::getInventoryAffirmStatus,inventoryAffirmStatusList);*/ + + String ids = (String) params.get("ids"); + if (StringUtils.isNotEmpty(ids)) { + List projectLawsInventoryIdList = Arrays.asList(ids.split(",")); + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, projectLawsInventoryIdList); + } + + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + //查询当前项目下,清单状态为 未发起、拒绝状态的法规清单。 + List projectLawsInventoryEOS = this.baseMapper.selectList(queryWrapper); + //项目库信息(获取studio) + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(ProjectLibraryBase::getId, projectLibraryId); + List projectLibraryBases = projectLibraryBaseMapper.selectList(wrapper); + String studioEngineer = ""; + if (projectLibraryBases.size() != 0) { + studioEngineer = projectLibraryBases.get(0).getStudioEngineer(); + } + + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) { + //法规清单的责任领域 + /*String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + if(StringUtils.isNotBlank(dutyTerritory)){ + List projectRelatedPersonnelList = new ArrayList<>(); + for (String s : dutyTerritory.split(",")) { + List projectRelatedPersonnelListTemp = projectRelatedPersonnels.stream() + .filter(e -> s.equals(e.getDutyTerritory())).collect(Collectors.toList()); + if(projectRelatedPersonnelListTemp.size() != 0){ + projectRelatedPersonnelList.addAll(projectRelatedPersonnelListTemp); + } + } +// List projectRelatedPersonnelList = projectRelatedPersonnels.stream() +// .filter(e -> dutyTerritory.contains(e.getDutyTerritory())).collect(Collectors.toList()); + + List lawEngineerList = projectRelatedPersonnelList.stream().map(ProjectRelatedPersonnel::getLawEngineer).distinct().collect(Collectors.toList()).stream().filter(e->StringUtils.isNotBlank(e)).collect(Collectors.toList()); + List engineeringInterfacePersonList = projectRelatedPersonnelList.stream().map(ProjectRelatedPersonnel::getEngineeringInterfacePerson).distinct().collect(Collectors.toList()).stream().filter(e->StringUtils.isNotBlank(e)).collect(Collectors.toList()); + List certificationEngineerList = projectRelatedPersonnelList.stream().map(ProjectRelatedPersonnel::getCertificationEngineer).distinct().collect(Collectors.toList()).stream().filter(e->StringUtils.isNotBlank(e)).collect(Collectors.toList()); + List lawEngineerListTemp = new ArrayList<>(); + List engineeringInterfacePersonListTemp = new ArrayList<>(); + List certificationEngineerListTemp = new ArrayList<>(); + + if(lawEngineerList.size() != 0){ + for (String s : lawEngineerList) { + lawEngineerListTemp.addAll(Arrays.asList(s.split(","))); + } + lawEngineerListTemp = lawEngineerListTemp.stream().distinct().collect(Collectors.toList()); + } + if(engineeringInterfacePersonList.size() != 0){ + for (String s : engineeringInterfacePersonList) { + engineeringInterfacePersonListTemp.addAll(Arrays.asList(s.split(","))); + } + engineeringInterfacePersonListTemp = engineeringInterfacePersonListTemp.stream().distinct().collect(Collectors.toList()); + } + if(certificationEngineerList.size() != 0){ + for (String s : certificationEngineerList) { + certificationEngineerListTemp.addAll(Arrays.asList(s.split(","))); + } + certificationEngineerListTemp = certificationEngineerListTemp.stream().distinct().collect(Collectors.toList()); + } + + //法规工程师 + if (StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerId()) && lawEngineerListTemp.size() == 1) { + List finalLawEngineerList = lawEngineerListTemp; + List collect = projectRelatedPersonnels.stream() + .filter(e -> finalLawEngineerList.contains(e.getLawEngineer())).collect(Collectors.toList()); + if(collect.size() != 0){ + String userId = ToGetAUserId(ProjectRoleEnum.REGULATI_ENGINEER.getValue(), collect.get(0),studioEngineer); + if(StringUtils.isNotEmpty(userId)){ + projectLawsInventoryEO.setRegulationOwnerId(userId); + } + } + } + + //认证工程师 + if (StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerId()) && certificationEngineerListTemp.size() == 1) { + List finalCertificationEngineerList = certificationEngineerListTemp; + List collect = projectRelatedPersonnels.stream() + .filter(e -> finalCertificationEngineerList.contains(e.getCertificationEngineer())).collect(Collectors.toList()); + if(collect.size() != 0){ + String userId = ToGetAUserId(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue(), collect.get(0),studioEngineer); + if(StringUtils.isNotEmpty(userId)){ + projectLawsInventoryEO.setHomologationEngineerId(userId); + } + } + } + + //项目接口人 + if (StringUtils.isEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson()) && engineeringInterfacePersonListTemp.size() == 1) { + List finalEngineeringInterfacePersonList = engineeringInterfacePersonListTemp; + List collect = projectRelatedPersonnels.stream() + .filter(e -> finalEngineeringInterfacePersonList.contains(e.getEngineeringInterfacePerson())).collect(Collectors.toList()); + if(collect.size() != 0){ + String userId = ToGetAUserId(ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue(), collect.get(0),studioEngineer); + if(StringUtils.isNotEmpty(userId)){ + projectLawsInventoryEO.setEngineeringInterfacePerson(userId); + } + } + } + }*/ + + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + if (StringUtils.isNotEmpty(dutyTerritory)) { + List projectRelatedPersonnelTempList = projectRelatedPersonnels.stream().filter(relatedPersonnel -> { + boolean flag = false; + for (String duty : dutyTerritory.split(",")) { + if (StringUtils.equals(duty, relatedPersonnel.getDutyTerritory())) { + flag = true; + } + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(projectRelatedPersonnelTempList)) { + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + + //法规工程师 + if (StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerId())) { + String userId = ToGetAUserId(ProjectRoleEnum.REGULATI_ENGINEER.getValue(), projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setRegulationOwnerId(userId); + } + } else { + String userId = ToGetAUserId(ProjectRoleEnum.REGULATI_ENGINEER.getValue(), projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getRegulationOwnerId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setRegulationOwnerId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerId, null); + } + } + + //认证工程师 + if (StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerId())) { + String userId = ToGetAUserId(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue(), projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setHomologationEngineerId(userId); + } + } else { + String userId = ToGetAUserId(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue(), projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getHomologationEngineerId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setHomologationEngineerId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerId, null); + } + } + + //项目接口人 + if (StringUtils.isEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + String userId = ToGetAUserId(ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue(), projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setEngineeringInterfacePerson(userId); + } + } else { + String userId = ToGetAUserId(ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue(), projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getEngineeringInterfacePerson()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setEngineeringInterfacePerson(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getEngineeringInterfacePerson, null); + } + } + + //设计符合性确认 + //发起人角色 + String designInitiator = projectLawsInventoryEO.getDesignInitiator(); + if (StringUtils.isNotEmpty(designInitiator)) { + if (StringUtils.isEmpty(projectLawsInventoryEO.getDesignInitiatorId())) { + String userId = ToGetAUserId(designInitiator, projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setDesignInitiatorId(userId); + } + } else { + String userId = ToGetAUserId(designInitiator, projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getDesignInitiatorId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setDesignInitiatorId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getDesignInitiatorId, null); + } + } + } + + //责任人角色 + String designDuty = projectLawsInventoryEO.getDesignDuty(); + if (StringUtils.isNotEmpty(designDuty)) { + if (StringUtils.isEmpty(projectLawsInventoryEO.getDesignDutyId())) { + String userId = ToGetAUserId(designDuty, projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setDesignDutyId(userId); + } + } else { + String userId = ToGetAUserId(designDuty, projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getDesignDutyId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setDesignDutyId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getDesignDutyId, null); + } + } + } + + + //prehomo确认 + //发起人角色 + String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiator(); + if (StringUtils.isNotEmpty(prehomoInitiator)) { + if (StringUtils.isEmpty(projectLawsInventoryEO.getPrehomoInitiatorId())) { + String userId = ToGetAUserId(prehomoInitiator, projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setPrehomoInitiatorId(userId); + } + } else { + String userId = ToGetAUserId(prehomoInitiator, projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getPrehomoInitiatorId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setPrehomoInitiatorId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getPrehomoInitiatorId, null); + } + } + } + + //责任人角色 + String prehomoDuty = projectLawsInventoryEO.getPrehomoDuty(); + if (StringUtils.isNotEmpty(prehomoDuty)) { + if (StringUtils.isEmpty(projectLawsInventoryEO.getPrehomoDutyId())) { + String userId = ToGetAUserId(prehomoDuty, projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setPrehomoDutyId(userId); + } + } else { + String userId = ToGetAUserId(prehomoDuty, projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getPrehomoDutyId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setPrehomoDutyId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getPrehomoDutyId, null); + } + } + } + + //验证符合性确认 + //发起人角色 + String verifyInitiator = projectLawsInventoryEO.getVerifyInitiator(); + if (StringUtils.isNotEmpty(verifyInitiator)) { + if (StringUtils.isEmpty(projectLawsInventoryEO.getVerifyInitiatorId())) { + String userId = ToGetAUserId(verifyInitiator, projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setVerifyInitiatorId(userId); + } + } else { + String userId = ToGetAUserId(verifyInitiator, projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getVerifyInitiatorId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setVerifyInitiatorId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getVerifyInitiatorId, null); + } + } + } + + //责任人角色 + String verifyDuty = projectLawsInventoryEO.getVerifyDuty(); + if (StringUtils.isNotEmpty(verifyDuty)) { + if (StringUtils.isEmpty(projectLawsInventoryEO.getVerifyDutyId())) { + String userId = ToGetAUserId(verifyDuty, projectRelatedPersonnelTempList, studioEngineer); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setVerifyDutyId(userId); + } + } else { + String userId = ToGetAUserId(verifyDuty, projectRelatedPersonnelTempList, studioEngineer, projectLawsInventoryEO.getVerifyDutyId()); + if (StringUtils.isNotEmpty(userId)) { + projectLawsInventoryEO.setVerifyDutyId(userId); + } else { + updateWrapper.set(ProjectLawsInventoryEO::getVerifyDutyId, null); + } + } + } + updateWrapper.eq(ProjectLawsInventoryEO::getId, projectLawsInventoryEO.getId()); + super.update(projectLawsInventoryEO, updateWrapper); + } + } + //this.baseMapper.updateById(projectLawsInventoryEO); + } + } else { + throw new JeroBootException("当前项目中,未找到相关维护人员信息"); + } + } else { + throw new JeroBootException("当前操作用户不是该项目的studio工程师,没有权限操作!"); + } + + //更新log + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + String contentLog = username + "带入了相关人员名单信息"; + String enContentLog = username + " brought in the list information of relevant personnel."; + projectLawsInventoryLogEOService.updateLog(contentLog, projectLibraryId, CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, projectLibraryId, CutEnum.EN.getValue()); + + return new Result<>().success("带入成功!"); + } + + /** + * 获取一个用户的id + * + * @param roleCode + * @param projectRelatedPersonnelList + * @return + */ + public String ToGetAUserId(String roleCode, List projectRelatedPersonnelList, String studioEngineer) { + String resultUserId = ""; + //法规工程师 + if (StringUtils.equals(roleCode, ProjectRoleEnum.REGULATI_ENGINEER.getValue())) { + String lawEngineer = projectRelatedPersonnelList.stream().filter(relatedPersonnel -> { + boolean flag = false; + if (StringUtils.isNotEmpty(relatedPersonnel.getLawEngineer())) { + flag = true; + } + return flag; + }).map(ProjectRelatedPersonnel::getLawEngineer).distinct().collect(Collectors.joining(",")); + if (StringUtils.isNotEmpty(lawEngineer)) { + String[] lawEngineerArr = lawEngineer.split(","); + if (lawEngineerArr.length == 1) { + resultUserId = lawEngineer; + } + } + } + //认证工程师 + if (StringUtils.equals(roleCode, ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue())) { + String certificationEngineer = projectRelatedPersonnelList.stream().filter(relatedPersonnel -> { + boolean flag = false; + if (StringUtils.isNotEmpty(relatedPersonnel.getLawEngineer())) { + flag = true; + } + return flag; + }).map(ProjectRelatedPersonnel::getCertificationEngineer).distinct().collect(Collectors.joining(",")); + if (StringUtils.isNotEmpty(certificationEngineer)) { + String[] certificationEngineerArr = certificationEngineer.split(","); + if (certificationEngineerArr.length == 1) { + resultUserId = certificationEngineer; + } + } + } + //工程接口人 + if (StringUtils.equals(roleCode, ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue())) { + String engineeringInterfacePerson = projectRelatedPersonnelList.stream().filter(relatedPersonnel -> { + boolean flag = false; + if (StringUtils.isNotEmpty(relatedPersonnel.getLawEngineer())) { + flag = true; + } + return flag; + }).map(ProjectRelatedPersonnel::getEngineeringInterfacePerson).distinct().collect(Collectors.joining(",")); + if (StringUtils.isNotEmpty(engineeringInterfacePerson)) { + String[] engineeringInterfacePersonArr = engineeringInterfacePerson.split(","); + if (engineeringInterfacePersonArr.length == 1) { + resultUserId = engineeringInterfacePerson; + } + } + } + //studio + if (StringUtils.equals(roleCode, ProjectRoleEnum.STUDIO_ENGINEER.getValue())) { + resultUserId = studioEngineer; + } + return resultUserId; + } + + /** + * 流程调用 + * + * @param jsonObject + * @return + */ + @Override + public Result processCall(JSONObject jsonObject) { + String requestSource = jsonObject.getString("requestSource"); + if (StringUtils.isEmpty(requestSource)) { + throw new JeroBootException("请求来源不能为空!"); + } + if (!StringUtils.equals(requestSource, RequestSourceEnum.WORK_FLOW.getValue())) { + throw new JeroBootException("来源有误,没有权限调用该接口!"); + } + + String operatorType = jsonObject.getString("operatorType"); + if (StringUtils.isEmpty(operatorType)) { + throw new JeroBootException("操作类型不能为空!"); + } + + if (StringUtils.equals(operatorType, OperatorTypeEnum.UPDATE_STATUS.getValue())) { + ProjectLawsInventoryEO projectLawsInventoryEO = JSONObject.parseObject(jsonObject.toString(), ProjectLawsInventoryEO.class); + this.baseMapper.updateById(projectLawsInventoryEO); + } + if (StringUtils.equals(operatorType, OperatorTypeEnum.ADD.getValue())) { + + } + if (StringUtils.equals(operatorType, OperatorTypeEnum.DELETE.getValue())) { + + } + if (StringUtils.equals(operatorType, OperatorTypeEnum.QUERY.getValue())) { + Result objectResult = new Result<>(); + try { + String projectLawsInventoryId = jsonObject.getString("projectLawsInventoryId"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getId, projectLawsInventoryId); + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectOne(queryWrapper); + objectResult.setResult(projectLawsInventoryEO); + objectResult.setSuccess(true); + } catch (Exception ex) { + objectResult.setSuccess(false); + ex.printStackTrace(); + log.error("工作流后端查询法规清单失败:" + ex.getMessage()); + } + return objectResult; + } + if (StringUtils.equals(operatorType, OperatorTypeEnum.SEND_MSG.getValue())) { + // workFlowSendMsg(jsonObject); + Map prarams = (Map) jsonObject.get("params"); + String templateId = jsonObject.getString("templateId"); + + String projectLibraryId = (String) prarams.get("projectLibraryId"); + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryBase.getId(), todoCenterParams); + prarams.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + prarams.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + + String projectLawsInventoryId = (String) prarams.get("id"); + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectById(projectLawsInventoryId); + + //处理手机端飞书消息跳转 + String flowType = jsonObject.getString("flowType"); + String actiProcInstId = jsonObject.getString("actiProcInstId"); + String taskDefinitionKey = jsonObject.getString("taskDefinitionKey"); + if(StringUtils.isNotEmpty(flowType)){ + if("Design".equals(flowType)){ + String hrefFeishu_CN_P = this.editService.handlePhoneDesignLink(projectLawsInventoryEO,actiProcInstId,taskDefinitionKey); + prarams.put("hrefFeishu_CN_P", hrefFeishu_CN_P); + }else if("Verify".equals(flowType)){ + String hrefFeishu_CN_P = this.editService.handlePhoneVerifyLink(projectLawsInventoryEO,actiProcInstId,taskDefinitionKey); + prarams.put("hrefFeishu_CN_P", hrefFeishu_CN_P); + } + } + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + prarams.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(templateId, prarams); + } + } + + // 将法规工程师的 法规清单确认待办中心任务转为已办 + if (StringUtils.equals(operatorType, OperatorTypeEnum.TO_DO_CENTER_FG_CONVERT_TO_HAVE_DONE.getValue())) { + String projectLawsInventoryId = jsonObject.getString("id"); + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectById(projectLawsInventoryId); + if (StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue())) { + // 如果该条法规清单的设计、验证符合性流程都发起了,将法规工程师在待办中心的待办任务转为已办 + LambdaUpdateWrapper pidUpdateWrap = new LambdaUpdateWrapper<>(); + pidUpdateWrap.eq(ProcessInfoDetailEO::getFlowType, FlowTypeEnum.QDQR.getValue()); + pidUpdateWrap.eq(ProcessInfoDetailEO::getProjectLawsInventoryId, projectLawsInventoryId); + pidUpdateWrap.set(ProcessInfoDetailEO::getStatus, TaskStatusEnum.HAVE_DONE.getValue()); + this.processInfoDetailEOService.update(pidUpdateWrap); + } + } + + return new Result<>().success("调用成功!"); + } + + @Override + public List queryProjectLawsInventoryInfoById(Map params) { + + String id = (String) params.get("id"); + if (StringUtils.isEmpty(id)) { + throw new JeroBootException("id不能为空"); + } + String cut = (String) params.get("cut"); + //String operatorType = (String) params.get("operatorType"); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List projectLawsInventoryEOList = new ArrayList<>(); + ProjectLawsInventoryEO byId = getById(id); + projectLawsInventoryEOList.add(byId); + if (CollectionUtils.isNotEmpty(projectLawsInventoryEOList)) { + int isProjectRole = this.checkUserRole(byId.getProjectLibraryId(), currentUser.getId(), id); + dataDispose(projectLawsInventoryEOList, currentUser, isProjectRole, cut); + dataDictDispose(projectLawsInventoryEOList, cut); + + //result.put("projectLawsInventory",projectLawsInventoryEOList.get(0)); + /*if (StringUtils.equals(operatorType, OperatorTypeEnum.TASK_AFFIRM_QUERY.getValue())) { + //设计符合性 + Map designMap = new HashMap<>(); + designMap.put("designDeliverableType",projectLawsInventoryEOList.get(0).getDesignDeliverableType()); + designMap.put("designDeliverableTemplateName",projectLawsInventoryEOList.get(0).getDesignDeliverableType()); + designMap.put("designInitiatorName",projectLawsInventoryEOList.get(0).getDesignInitiatorName()); + designMap.put("designDutyName",projectLawsInventoryEOList.get(0).getDesignDutyName()); + designMap.put("designDueDate",projectLawsInventoryEOList.get(0).getDesignDueDate()); + result.put("design",designMap); + //prehomo + Map prehomoMap = new HashMap<>(); + prehomoMap.put("prehomoDeliverableType",projectLawsInventoryEOList.get(0).getPrehomoDeliverableType()); + prehomoMap.put("prehomoDeliverableTemplateName",projectLawsInventoryEOList.get(0).getPrehomoDeliverableTemplateName()); + prehomoMap.put("prehomoInitiatorName",projectLawsInventoryEOList.get(0).getPrehomoInitiatorName()); + prehomoMap.put("prehomoDutyName",projectLawsInventoryEOList.get(0).getPrehomoDutyName()); + prehomoMap.put("prehomoDueDate",projectLawsInventoryEOList.get(0).getPrehomoDueDate()); + result.put("prehomo",prehomoMap); + //验证符合性 + Map verifyMap = new HashMap<>(); + verifyMap.put("verifyDeliverableType",projectLawsInventoryEOList.get(0).getVerifyDeliverableType()); + verifyMap.put("verifyDeliverableTemplateName",projectLawsInventoryEOList.get(0).getVerifyDeliverableTemplateName()); + verifyMap.put("verifyInitiatorName",projectLawsInventoryEOList.get(0).getVerifyInitiatorName()); + verifyMap.put("verifyDutyName",projectLawsInventoryEOList.get(0).getVerifyDutyName()); + verifyMap.put("verifyDueDate",projectLawsInventoryEOList.get(0).getVerifyDueDate()); + result.put("verify",verifyMap); + }*/ + } else { + throw new JeroBootException("未找到该法规清单信息!"); + } + return projectLawsInventoryEOList; + } + + /** + * 工作流发送消息 + * + * @param jsonObject + */ + public void workFlowSendMsg(JSONObject jsonObject) { + String msgType = jsonObject.getString("msgType"); //发送消息类型 + if (StringUtils.isEmpty(msgType)) { + throw new JeroBootException("发送消息类型不能为空,请检查!"); + } + String id = jsonObject.getString("id"); //法规清单id + String currentUserId = jsonObject.getString("currentUserId"); //当前操作用户id + String taskAffirmDueDate = jsonObject.getString("taskAffirmDueDate"); //截止日期 + //String serialNumber = jsonObject.getString("serialNumber"); //编号 + String projectLibraryId = jsonObject.getString("projectLibraryId"); //项目库id + String engineeringInterfacePerson = jsonObject.getString("engineeringInterfacePerson"); //工程接口人id + + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(new QueryWrapper() + .lambda().eq(ProjectLibraryBase::getId, projectLibraryId)); + + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectOne( + new QueryWrapper().lambda().eq(ProjectLawsInventoryEO::getId, id) + ); + + SysUser studioUserInfo = this.sysUserMapper.selectOne( + new QueryWrapper().lambda().eq(SysUser::getId, projectLibraryBase.getStudioEngineer()) + ); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId, projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + QueryWrapper projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId, projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + + SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); + + //String msgContentEN = ""; + String msgTitle = ""; + List userIdList = new ArrayList<>(); + + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + + //MessageTypeEnum messageTypeEnum = null; + //String taskType = ""; + String initiator = ""; + String initiatorLark = ""; + String cnContentUpper = "";//中文上部分 + String cnContentLower = "";//中文下部分 + String enContentUpper = "";//英文上部分 + String enContentLower = "";//英文下部分 + String color = "";//颜色 + + ProjectLibraryBase LibraryBase = projectLibraryBaseService.queryById(projectLibraryId, CutEnum.EN.getValue()).get(0); + String PRN = LibraryBase.getProjectName();//项目名称 + String LAW_CN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle();//法规 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + String LAW_EN = ""; + if (ObjectUtils.isEmpty(bussDocumentLibraryEO)) { + LAW_EN = LAW_CN; + } else { + if (ObjectUtils.isEmpty(bussDocumentLibraryEO.getTitleEn())) { + LAW_EN = LAW_CN; + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn();//法规 + } + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_START_MSG.getValue())) { + userIdList.add(engineeringInterfacePerson); + //msgContentEN = sysUser.getUsername() + " initiated the regulation task confirmation of " + projectNameInfoEO.getProjectName() + // + ". The due date is " + taskAffirmDueDate + ". Please check and address it in a timely manner."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //feishuMsgVo.setContent("Hello! Please check and address this task in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.TASK_CONFIRMATION; + //taskType = "Regulation Task Confirmation"; + + //initiator = studioUserInfo.getUsername(); + //initiatorLark = studioUserInfo.getUsername(); + + msgTitle = MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn(); + cnContentUpper = "您好,请及时查看处理此项任务,谢谢!"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ISSUE_DRE_MSG.getValue())) { + String dreUserId = jsonObject.getString("dreUserId"); //dre用户id + userIdList.add(dreUserId); + //msgContentEN = sysUser.getUsername() + " has assigned the regulation task confirmation of " + serialNumber + " in "+ projectNameInfoEO.getProjectName() + // + " to you. The due date is " +taskAffirmDueDate+ ". Please check and handle it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has assigned the task. Please check and and handle it in time."); + + //messageTypeEnum = MessageTypeEnum.TASK_CONFIRMATION; + //taskType = "Regulation Task Confirmation"; + + //initiator = studioUserInfo.getUsername(); + //initiatorLark = studioUserInfo.getUsername(); + + + msgTitle = MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn(); + cnContentUpper = "您好," + sysUser.getUsername() + "向您询问意见,请及时查看处理"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! " + sysUser.getUsername() + " asked you for opinion. Please check and address it in a timely manner"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_REJECTED.getValue())) { + userIdList.add(engineeringInterfacePerson); + //msgContentEN = sysUser.getUsername() + " has rejected the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". The due date is " +taskAffirmDueDate+ ". Please check and handle it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has rejected the task. Please check and and handle it in time."); + + //messageTypeEnum = MessageTypeEnum.TASK_CONFIRMATION; + //taskType = "Regulation Task Confirmation"; + + //initiator = studioUserInfo.getUsername(); + //initiatorLark = studioUserInfo.getUsername(); + + msgTitle = MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn(); + cnContentUpper = "您好,该任务被" + sysUser.getUsername() + "退回,请及时查看处理"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! This task is rejected by " + sysUser.getUsername() + ". Please check and address it in a timely manner"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_ACCEPTED.getValue())) { + userIdList.add(engineeringInterfacePerson); + //msgContentEN = sysUser.getUsername() + " has submitted the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". The due date is " +taskAffirmDueDate+ ". Please check and handle it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has submitted the task. Please check and and handle it in time."); + + //messageTypeEnum = MessageTypeEnum.TASK_CONFIRMATION; + //taskType = "Regulation Task Confirmation"; + + //initiator = studioUserInfo.getUsername(); + //initiatorLark = studioUserInfo.getUsername(); + + msgTitle = MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn(); + cnContentUpper = "您好," + sysUser.getUsername() + "已向您提交回复,请及时查看处理"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! " + sysUser.getUsername() + " has replied to you. Please check and address it in a timely manner"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + + } else if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_REJECTED_MSG.getValue())) { + userIdList.add(projectLibraryBase.getStudioEngineer()); + //msgContentEN = sysUser.getUsername() + " has rejected the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". Please check and handle it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has rejected the task. Please check and and handle it in time."); + + //messageTypeEnum = MessageTypeEnum.TASK_CONFIRMATION; + //taskType = "Regulation Task Confirmation"; + + //initiator = studioUserInfo.getUsername(); + //initiatorLark = studioUserInfo.getUsername(); + + msgTitle = MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn(); + cnContentUpper = "您好,该任务被" + sysUser.getUsername() + "拒绝,请及时查看处理"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! This task is rejected by " + sysUser.getUsername() + ". Please check and address it in a timely manner"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.RED.getValue(); + + + } /*else if(StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ACCEPTED_MSG.getValue())){ + userIdList.add(projectLibraryBase.getStudioEngineer()); + //msgContentEN = sysUser.getUsername() + " has accepted the regulation task confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". Please check and handle it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation notification to check"; + + //feishuMsgVo.setContent("Hello! " + sysUser.getUsername() + " has accepted the task. Please check and and handle it in time."); + + //messageTypeEnum = MessageTypeEnum.TASK_CONFIRMATION; + //taskType = "Regulation Task Confirmation"; + + initiator = studioUserInfo.getUsername(); + initiatorLark = studioUserInfo.getUsername(); + } */ else if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_START_MSG.getValue())) { + String designDutyId = jsonObject.getString("designDutyId"); //设计符合性责任人id + userIdList.add(designDutyId); + //msgContentEN = "You recieved the design compliance task of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". The due date is " + sdf.format(projectLawsInventoryEO.getDesignDueDate()) + ". Please check and address it in a timely manner."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a design compliance task to complete"; + + //feishuMsgVo.setContent("Hello! Please address the task in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Design Compliance Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + //SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( + // new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getDesignInitiatorId()) + //); + //initiatorLark = initiatorLarkInfo.getUsername(); + + msgTitle = MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getEn(); + cnContentUpper = "您好,请及时查看处理此项任务,谢谢!"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getDesignDueDate()); + enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getDesignDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_START_MSG.getValue())) { + String prehomoDutyId = jsonObject.getString("prehomoDutyId"); //pre-Home责任人id + userIdList.add(prehomoDutyId); + //msgContentEN = "You recieved the Pre-Homo task of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". The due date is " + sdf.format(projectLawsInventoryEO.getPrehomoDueDate()) + ". Please check and address it in a timely manner."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a Pre-Homo task to complete"; + + //feishuMsgVo.setContent("Hello! Please address the task in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Pre-Homo Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + + //SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( + // new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getPrehomoInitiatorId()) + //); + //initiatorLark = initiatorLarkInfo.getUsername(); + msgTitle = MessageType2Enum.PRE_HOMO_CONFIRMATION.getCn() + "/" + MessageType2Enum.PRE_HOMO_CONFIRMATION.getEn(); + cnContentUpper = "您好,请及时查看处理此项任务,谢谢!"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getPrehomoDueDate()); + enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getPrehomoDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.VERIFY_START_MSG.getValue())) { + String verifyDutyId = jsonObject.getString("verifyDutyId"); //验证符合性责任人id + userIdList.add(verifyDutyId); + //msgContentEN = "You recieved the validation compliance task of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". The due date is " + sdf.format(projectLawsInventoryEO.getVerifyDueDate()) + ". Please check and address it in a timely manner."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a validation compliance task to complete"; + + //feishuMsgVo.setContent("Hello! Please address the task in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Validation Compliance Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + //SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( + // new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getVerifyInitiatorId()) + //); + //initiatorLark = initiatorLarkInfo.getUsername(); + + msgTitle = MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getEn(); + cnContentUpper = "您好,请及时查看处理此项任务,谢谢!"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getVerifyDueDate()); + enContentUpper = "Hello! Please check and address the task in a timely manner. Thank you!"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getVerifyDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_CHARGE_PERSON_SUBMIT_MSG.getValue())) { + String designInitiatorId = jsonObject.getString("designInitiatorId"); //设计符合性发起人id + userIdList.add(designInitiatorId); + //msgContentEN = sysUser.getUsername() + " has submitted the design compliance confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". Please check and review it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a design compliance task to complete"; + + //feishuMsgVo.setContent("Hello! The compliance confirmation has been submitted. Please check and review it in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Design Compliance Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + + msgTitle = MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getEn(); + cnContentUpper = "您好," + sysUser.getUsername() + "已完成任务,请审查"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getDesignDueDate()); + enContentUpper = "Hello! " + sysUser.getUsername() + " has completed the task. Please check and review it"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getDesignDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + //feishuMsgVo.setAssignee(sysUser.getUsername()); +// SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( +// new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getDesignInitiatorId()) +// ); +// initiatorLark = initiatorLarkInfo.getUsername(); + } else if (StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_CHARGE_PERSON_SUBMIT_MSG.getValue())) { + String prehomoInitiatorId = jsonObject.getString("prehomoInitiatorId"); //pre-Home发起人id + userIdList.add(prehomoInitiatorId); + //msgContentEN = sysUser.getUsername() + " has submitted the Pre-Homo confirmation of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". Please check and review it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a Pre-Homo task to complete"; + + //feishuMsgVo.setContent("Hello! The compliance confirmation has been submitted. Please check and review it in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Pre-Homo Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + + msgTitle = MessageType2Enum.PRE_HOMO_CONFIRMATION.getCn() + "/" + MessageType2Enum.PRE_HOMO_CONFIRMATION.getEn(); + cnContentUpper = "您好," + sysUser.getUsername() + "已完成任务,请审查"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getPrehomoDueDate()); + enContentUpper = "Hello! " + sysUser.getUsername() + " has completed the task. Please check and review it"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getPrehomoDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + //feishuMsgVo.setAssignee(sysUser.getUsername()); +// SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( +// new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getPrehomoInitiatorId()) +// ); +// initiatorLark = initiatorLarkInfo.getUsername(); + } else if (StringUtils.equals(msgType, MsgTypeEnum.VERIFY_CHARGE_PERSON_SUBMIT_MSG.getValue())) { + String verifyInitiatorId = jsonObject.getString("verifyInitiatorId"); //验证符合性发起人id + userIdList.add(verifyInitiatorId); + //msgContentEN = sysUser.getUsername() + " has submitted the validation compliance confirmation " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + ". Please check and review it in time."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a validation compliance task to complete"; + + //feishuMsgVo.setContent("Hello! The compliance confirmation has been submitted. Please check and review it in a timely manner."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Validation Compliance Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + + msgTitle = MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getEn(); + cnContentUpper = "您好," + sysUser.getUsername() + "已完成任务,请审查"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getVerifyDueDate()); + enContentUpper = "Hello! " + sysUser.getUsername() + " has completed the task. Please check and review it"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getVerifyDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + //feishuMsgVo.setAssignee(sysUser.getUsername()); +// SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( +// new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getVerifyInitiatorId()) +// ); +// initiatorLark = initiatorLarkInfo.getUsername(); + } else if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_INITIATOR_ACCEPTED_MSG.getValue())) { + String designDutyId = jsonObject.getString("designDutyId"); //设计符合性责任人id + userIdList.add(designDutyId); + //msgContentEN = "The design compliance information of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + " you submitted has been approved."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a design compliance task to complete"; + + //feishuMsgVo.setContent("Hello! The compliance information you submitted has been approved."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Design Compliance Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + //SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( + // new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getDesignInitiatorId()) + //); + //initiatorLark = initiatorLarkInfo.getUsername(); + + msgTitle = MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getEn(); + cnContentUpper = "您好,该任务被发起人审查通过"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! The task has been approved by initiator"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_INITIATOR_ACCEPTED_MSG.getValue())) { + String prehomoDutyId = jsonObject.getString("prehomoDutyId"); //pre-Home责任人id + userIdList.add(prehomoDutyId); + //msgContentEN = "The Pre-Homo confirmation information of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + " you submitted has been approved."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a Pre-Homo task to complete"; + + //feishuMsgVo.setContent("Hello! The compliance information you submitted has been approved."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Pre-Homo Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + //SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( + // new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getPrehomoInitiatorId()) + //); + //initiatorLark = initiatorLarkInfo.getUsername(); + msgTitle = MessageType2Enum.PRE_HOMO_CONFIRMATION.getCn() + "/" + MessageType2Enum.PRE_HOMO_CONFIRMATION.getEn(); + cnContentUpper = "您好,该任务被发起人审查通过"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! The task has been approved by initiator"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + + } else if (StringUtils.equals(msgType, MsgTypeEnum.VERIFY_INITIATOR_ACCEPTED_MSG.getValue())) { + String verifyDutyId = jsonObject.getString("verifyDutyId"); //验证符合性责任人id + userIdList.add(verifyDutyId); + //msgContentEN = "The validation compliance information of " + serialNumber +" in "+ projectNameInfoEO.getProjectName() + // + " you submitted has been approved."; + //msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a validation compliance task to complete"; + + //feishuMsgVo.setContent("Hello! The compliance information you submitted has been approved."); + + //messageTypeEnum = MessageTypeEnum.COMPLIANCE_CONFIRMATION; + //taskType = "Validation Compliance Confirmation"; + + //initiator = MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName(); + //SysUser initiatorLarkInfo = this.sysUserMapper.selectOne( + // new QueryWrapper().lambda().eq(SysUser::getId, projectLawsInventoryEO.getVerifyInitiatorId()) + //); + //initiatorLark = initiatorLarkInfo.getUsername(); + + msgTitle = MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getEn(); + cnContentUpper = "您好,该任务被发起人审查通过"; + cnContentLower = "项目: " + PRN + + "\n法规: " + LAW_CN + + "\n发起人: " + sysUser.getUsername() + + "\n截止时间: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + enContentUpper = "Hello! The task has been approved by initiator"; + enContentLower = "Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + sysUser.getUsername() + + "\nDue Date: " + sdf.format(projectLawsInventoryEO.getTaskAffirmDueDate()); + color = MsgColorEnum.GREEN.getValue(); + } + + if (CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgTitle)) { + + //feishuMsgVo.setTaskType(taskType); + //feishuMsgVo.setRegulationNo(serialNumber); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + //feishuMsgVo.setInitiator(initiatorLark); + //feishuMsgVo.setDueDate(taskAffirmDueDate); + + //飞书跳转链接 + String hrefFeishu = ""; + //系统内部跳转链接 + //String href = ""; + if (StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_START_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ISSUE_DRE_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_REJECTED.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_DRE_ACCEPTED.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_REJECTED_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.TASK_AFFIRM_ACCEPTED_MSG.getValue())) { + hrefFeishu = backUrl + + JumpLinkEnum.TASK_AFFIRM_LINK.getLink(); + //href = "" + " View details" + ""; + } else if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_START_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_START_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.VERIFY_START_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.DESIGN_CHARGE_PERSON_SUBMIT_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_CHARGE_PERSON_SUBMIT_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.VERIFY_CHARGE_PERSON_SUBMIT_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.DESIGN_INITIATOR_ACCEPTED_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.PREHOMO_INITIATOR_ACCEPTED_MSG.getValue()) + || StringUtils.equals(msgType, MsgTypeEnum.VERIFY_INITIATOR_ACCEPTED_MSG.getValue())) { + hrefFeishu = backUrl + + JumpLinkEnum.DESIGN_AFFIRM_LINK.getLink() + + projectLibraryBase.getId() + + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType() + + "&projectName=" + PRN; + //href = "" + " View details" + ""; + } + + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + //sendMessage(msgTitle, msgContentEN,userIdList,id,sendMessageMap, feishuMsgVo, messageTypeEnum,initiator); + + List sysUsers = sysUserService.listByIds(userIdList); + List thirdIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(msgTitle); + feishuMsgVo.setCnContentUpper(cnContentUpper); + feishuMsgVo.setCnContentLower(cnContentLower); + feishuMsgVo.setEnContentUpper(enContentUpper); + feishuMsgVo.setEnContentLower(enContentLower); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(color); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + + @Override + public void copyInfoByIds(String ids, String operateType) { + if (StringUtils.isNotBlank(ids)) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + List projectLawsInventoryEOList = this.list(wrapper); + List projectTaskInventoryEOList = new ArrayList<>(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOList) { + String projectLawsInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectLawsInventoryEO.setId(projectLawsInventoryId); + + projectLawsInventoryEO.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEO.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEO.setRegulationOwnerSubmitStatus(null); + projectLawsInventoryEO.setHomologationEngineerSubmitStatus(null); + projectLawsInventoryEO.setSendMsgFlag(null); + projectLawsInventoryEO.setSendMsgCurrentFlag(null); + // 2023-03-27 修改禅道67149问题,复制的时候将符合性流程的截至时间复制上。 + /*projectLawsInventoryEO.setDesignDueDate(null); + projectLawsInventoryEO.setPrehomoDueDate(null); + projectLawsInventoryEO.setVerifyDueDate(null);*/ + projectLawsInventoryEO.setInventoryAffirmDueDate(null); + projectLawsInventoryEO.setTaskAffirmDueDate(null); + + // 修改UAT问题清单,122条,法规工程师复制,将流程状态设置为 待校核 -> 对应现在的 任务待发起 + if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_STUDIO_COPY.getValue())) { + projectLawsInventoryEO.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryEO.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + } else if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_REGULATION_OWNER_COPY.getValue())) { + projectLawsInventoryEO.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()); + projectLawsInventoryEO.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()); + } + + + ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); + String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectTaskInventoryEO.setId(projectTaskInventoryId); + projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryId); + projectTaskInventoryEO.setStandId(projectLawsInventoryEO.getStandId()); + projectTaskInventoryEO.setCertificationProgress(CertificationProgressEnum.NOT_START.getValue()); + projectTaskInventoryEOList.add(projectTaskInventoryEO); + } + this.saveBatch(projectLawsInventoryEOList); + + //更新log + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + String projectLibraryId = projectLawsInventoryEOList.get(0).getProjectLibraryId(); + String serialNumber = projectLawsInventoryEOList.stream().map(e -> e.getSerialNumber()).collect(Collectors.joining(",")); + String contentLog = username + "复制了“" + serialNumber + "”"; + String enContentLog = username + " copied “" + serialNumber + "”"; + projectLawsInventoryLogEOService.updateLog(contentLog, projectLibraryId, CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, projectLibraryId, CutEnum.EN.getValue()); + this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); + projectTaskInventoryEOList.forEach(taskInventory -> { + this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); + }); + } + + } + + @Override + public void setBatch(ProjectLawsInventoryEO projectLawsInventoryEO) { + this.editService.setBatch(projectLawsInventoryEO); + } + + + private ProjectLawsInventoryEO dataCompare(ProjectLawsInventoryEO projectLawsInventoryEO, DummyInventoryInfoEO dummyInventoryInfoEO) { + //编号 + if (StringUtils.isBlank(projectLawsInventoryEO.getSerialNumber())) { + projectLawsInventoryEO.setSendMsgFlag(dummyInventoryInfoEO.getSerialNumber()); + } + //标题 + if (StringUtils.isBlank(projectLawsInventoryEO.getTitle())) { + projectLawsInventoryEO.setTitle(dummyInventoryInfoEO.getTitle()); + } + //子标题 + if (StringUtils.isBlank(projectLawsInventoryEO.getSubtitle())) { + projectLawsInventoryEO.setSubtitle(dummyInventoryInfoEO.getSubtitle()); + } + //WVTA ID + if (StringUtils.isBlank(projectLawsInventoryEO.getWvtaId())) { + projectLawsInventoryEO.setWvtaId(dummyInventoryInfoEO.getWvtaId()); + } + //对应标准 + if (StringUtils.isBlank(projectLawsInventoryEO.getCorrespondingStandard())) { + projectLawsInventoryEO.setCorrespondingStandard(dummyInventoryInfoEO.getCorrespondingStandard()); + } + //实施类别 + if (StringUtils.isBlank(projectLawsInventoryEO.getImplementType())) { + projectLawsInventoryEO.setImplementType(dummyInventoryInfoEO.getImplementType()); + } + //适用地区 + if (StringUtils.isBlank(projectLawsInventoryEO.getRegion())) { + projectLawsInventoryEO.setRegion(dummyInventoryInfoEO.getRegion()); + } + //在产车实施日期 + if (ObjectUtils.isEmpty(projectLawsInventoryEO.getImplementTime())) { + projectLawsInventoryEO.setImplementTime(dummyInventoryInfoEO.getImplementTime()); + } + //新车型实施日期 + if (ObjectUtils.isEmpty(projectLawsInventoryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1())) { + projectLawsInventoryEO.setXin1Che1Xing2Shi2Shi1Ri4Qi1(dummyInventoryInfoEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1()); + } + //认证类型 + if (StringUtils.isBlank(projectLawsInventoryEO.getAttestationType())) { + projectLawsInventoryEO.setAttestationType(dummyInventoryInfoEO.getAttestationType()); + + } + //认证级别 + if (StringUtils.isBlank(projectLawsInventoryEO.getAttestationRank())) { + projectLawsInventoryEO.setAttestationRank(dummyInventoryInfoEO.getAttestationRank()); + } + //责任领域 + if (StringUtils.isBlank(projectLawsInventoryEO.getDutyTerritory())) { + projectLawsInventoryEO.setDutyTerritory(dummyInventoryInfoEO.getDutyTerritory()); + } + //备注 + if (StringUtils.isBlank(projectLawsInventoryEO.getRemark())) { + projectLawsInventoryEO.setRemark(dummyInventoryInfoEO.getRemark()); + } + //设计--交付物类型 + if (StringUtils.isBlank(projectLawsInventoryEO.getDesignDeliverableType())) { + projectLawsInventoryEO.setDesignDeliverableType(dummyInventoryInfoEO.getDesignDeliverableType()); + + } + //设计--交付物模板 + if (StringUtils.isBlank(projectLawsInventoryEO.getDesignDeliverableTemplate())) { + projectLawsInventoryEO.setDesignDeliverableTemplate(dummyInventoryInfoEO.getDesignDeliverableTemplate()); + } + //设计--发起人 + if (StringUtils.isBlank(projectLawsInventoryEO.getDesignInitiator())) { + projectLawsInventoryEO.setDesignInitiator(dummyInventoryInfoEO.getDesignInitiator()); + } + //设计--发起人责任人 + if (StringUtils.isBlank(projectLawsInventoryEO.getDesignDuty())) { + projectLawsInventoryEO.setDesignDuty(dummyInventoryInfoEO.getDesignDuty()); + } + //Pre--交付物类型 + if (StringUtils.isBlank(projectLawsInventoryEO.getPrehomoDeliverableType())) { + projectLawsInventoryEO.setPrehomoDeliverableType(dummyInventoryInfoEO.getPrehomoDeliverableType()); + } + //Pre--交付物模板 + if (StringUtils.isBlank(projectLawsInventoryEO.getPrehomoDeliverableTemplate())) { + projectLawsInventoryEO.setPrehomoDeliverableTemplate(dummyInventoryInfoEO.getPrehomoDeliverableTemplate()); + } + //Pre--发起人 + if (StringUtils.isBlank(projectLawsInventoryEO.getPrehomoInitiator())) { + projectLawsInventoryEO.setPrehomoInitiator(dummyInventoryInfoEO.getPrehomoInitiator()); + } + //Pre--发起人责任人 + if (StringUtils.isBlank(projectLawsInventoryEO.getPrehomoDuty())) { + projectLawsInventoryEO.setPrehomoDuty(dummyInventoryInfoEO.getPrehomoDuty()); + } + //验证--交付物类型 + if (StringUtils.isBlank(projectLawsInventoryEO.getVerifyDeliverableType())) { + projectLawsInventoryEO.setVerifyDeliverableType(dummyInventoryInfoEO.getVerifyDeliverableType()); + } + //验证--交付物模板 + if (StringUtils.isBlank(projectLawsInventoryEO.getVerifyDeliverableTemplate())) { + projectLawsInventoryEO.setVerifyDeliverableTemplate(dummyInventoryInfoEO.getVerifyDeliverableTemplate()); + } + //验证--发起人 + if (StringUtils.isBlank(projectLawsInventoryEO.getVerifyInitiator())) { + projectLawsInventoryEO.setVerifyInitiator(dummyInventoryInfoEO.getVerifyInitiator()); + } + //验证--发起人责任人 + if (StringUtils.isBlank(projectLawsInventoryEO.getVerifyDuty())) { + projectLawsInventoryEO.setVerifyDuty(dummyInventoryInfoEO.getVerifyDuty()); + } + return projectLawsInventoryEO; + } + + + @Override + public void exportTemplate(ProjectLawsInventoryEO projectLawsInventoryEO, HttpServletResponse response, HttpServletRequest request) { + OutputStream os = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String fileOriName = ""; + String sheetName = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + fileOriName = "法规清单导入模板.xls"; + sheetName = "法规清单导入模板"; + } else if (StringUtils.equals(projectLawsInventoryEO.getCut(), CutEnum.EN.getValue())) { + fileOriName = "Regulatory List Import Template.xls"; + sheetName = "Regulatory List Import Template"; + } + String filePath = uploadpath + File.separator + fileOriName; + try { + String titleOne = ""; + String titleTwo = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + titleOne = "*编号,标题,子标题," + + "认证类型,*认证级别,适用增补件," + + "*责任领域,法规工程师,工程接口人," + + "备注," + + "设计符合性确认,验证符合性确认"; + titleTwo = "交付物类型,交付物模板,责任人,截止时间,交付物说明," + + "交付物类型,交付物模板,责任人,截止时间,交付物说明"; + } else { + titleOne = "*Number,Title,Sub-Title," + + "Certification Type,*Certification Level,Applicable Supplement," + + "*Responsible Field,Regulation Engineer,Engineering Interface," + + "Comments," + + "Design Compliance Check,Validation Compliance Check"; + titleTwo = "Deliverable Type,Deliverable Template,Assignee,Due Date,Deliverable Description," + + "Deliverable Type,Deliverable Template,Assignee,Due Date,Deliverable Description"; + } + + List list = Arrays.asList(titleOne.split(",")); + int index = 0; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + index = list.indexOf("备注") + 1; + } else { + index = list.indexOf("Comments") + 1; + } + + //创建临时文件夹 + File nowFile = new File(filePath); + if (nowFile.exists()) { + nowFile.delete(); + } + nowFile.mkdirs(); + HSSFSheet sheet = workbook.createSheet(sheetName); + sheet.setDefaultColumnWidth(16);//列宽 + HSSFCellStyle cellStyle = workbook.createCellStyle(); + cellStyle.setWrapText(true);//自动换行 + cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中 + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中 + + HSSFCellStyle cellStyleTemp = workbook.createCellStyle(); + cellStyleTemp.setWrapText(true);//自动换行 + + + int count = 1; + int startLine = 0; + int endLine = 0; + int line = 4; + for (int i = 0; i < index; i++) { + //合并单元格 + CellRangeAddress region1 = + new CellRangeAddress(0, 1, i, i); + sheet.addMergedRegion(region1); + } + for (int i = index; i < 16; i++) { + if (count > 1) { + startLine = startLine + line + 1; + endLine = startLine + line; + } else { + startLine = i; + endLine = i + line; + } + //合并单元格 + CellRangeAddress region1 = + new CellRangeAddress(0, 0, startLine, endLine); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列 + sheet.addMergedRegion(region1); + count++; + } + CellRangeAddress region = + new CellRangeAddress(2, 2, 0, 29); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列 + sheet.addMergedRegion(region); + String explain = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + explain = "填写说明\n" + + "1.导入数据从第四行开始\n" + + "2.所有带*号的字段必须填写\n" + + "3.实施类别,交付物类型,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" + + "4.认证类型,认证级别,责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" + + "5.编号,子标题,WVTA ID,备注,填写文本内容\n" + + "6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx"; + } else { + explain = "Filling explanation\n" + + "1.Import data starts at the fourth line\n" + + "2.All fields marked with * must be filled in\n" + + "3.Usage,Deliverable Type,Assignee,Fields are radio attributes that must match the corresponding field option in the system\n" + + "4.Certification type,Certification Level,Responsible Field, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" + + "5.Number,Sub-Title,WVTA ID,Comments,Fill in the text\n" + + "6.Deliverable Template,When filling in the field, you need to create a folder in the directory of the same level as the file with the name of the standard number and place the file in the folder. If b. diocx is stored under the AAA standard number, enter AAA/B.docx"; + } + + + for (int i = 0; i < 3; i++) { + //表头 + Row row = sheet.createRow(i);//开始创建标题行 + String[] headerArr = titleOne.split(","); + int lineTemp = index; + if (i == 0) { + for (int m = 0; m < headerArr.length; m++) { + if (m < index) { + row.createCell(m).setCellValue(headerArr[m]); + } else { + row.createCell(lineTemp).setCellValue(headerArr[m]); + Cell cell = row.getCell(lineTemp); + cell.setCellStyle(cellStyle); + lineTemp = lineTemp + 5; + } + } + + } else if (i == 1) { + //titleTwo + String[] headerArrTwo = titleTwo.split(","); + for (int j = 0; j < headerArrTwo.length; j++) { + row.createCell(10 + j).setCellValue(headerArrTwo[j]); + } + } else { + short height = (short) (7 * 252); + row.setHeight((short) height); + Cell cell = row.createCell(0); + cell.setCellStyle(cellStyleTemp); + cell.setCellValue(new HSSFRichTextString(explain)); + } + } + response.setHeader("Content-Disposition", + "attachment; filename=\"" + fileOriName + ".xls"); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(os); + } catch (Exception e) { + e.printStackTrace(); + throw new JeroBootException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + } + + } + + @Override + public void exportData(HttpServletResponse response, HttpServletRequest request, ProjectLawsInventoryEO projectLawsInventoryEO) { + List dataList = new ArrayList<>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(projectLawsInventoryEO, request.getParameterMap()); + queryWrapper.in("project_library_id", projectLawsInventoryEO.getProjectLibraryId()); + if (StringUtils.isNotBlank(projectLawsInventoryEO.getIds())) { + queryWrapper.in("id", Arrays.asList(projectLawsInventoryEO.getIds().split(","))); + } + queryWrapper.orderByDesc("create_time", "serial_number"); + + int isProjectRole = Integer.parseInt(projectLawsInventoryEO.getRoleCode()); + if (isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.MANAGER.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.ADMIN.getValue())) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + queryWrapper.and(q -> { + q.eq("regulation_owner_id", currentUser.getId()). + or().eq("homologation_engineer_id", currentUser.getId()); + }); + } + //导出的数据 + dataList = this.list(queryWrapper); + + //文件 + List fileInfos = getOssFiles(dataList); + + //用户 + List userIdList = new ArrayList<>(); + for (ProjectLawsInventoryEO lawsInventoryEO : dataList) { + getUserIdList(userIdList, lawsInventoryEO); + } + List sysUserList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(userIdList)) { + userIdList = userIdList.stream().distinct().collect(Collectors.toList()); + QueryWrapper sysUserQueryWrapper = new QueryWrapper<>(); + sysUserQueryWrapper.select("id,username"); + sysUserQueryWrapper.lambda().in(SysUser::getId, userIdList); + sysUserList = sysUserMapper.selectList(sysUserQueryWrapper); + } + + //所有用户 +// List sysUserList = sysUserService.list(); + //数据转换(文件名称,对应标准) + dataTransition(dataList, fileInfos, sysUserList, projectLawsInventoryEO); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + this.dataDispose(dataList, currentUser, Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()), projectLawsInventoryEO.getCut()); + OutputStream os = null; + try { + response.setContentType("application/force-download"); + Workbook workbook = new XSSFWorkbook(); + String path = uploadpath + "/tempZip"; + File fileTemp = new File(path); + if (fileTemp.exists()) { + fileTemp.delete(); + } + fileTemp.mkdirs(); + //文件 + exportFile(dataList, fileInfos); + String excelName = projectLawsInventoryEO.getExcelName() + ".xlsx"; +// String excelName = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// excelName = "法规清单.xlsx"; +// }else{ +// excelName = "Regulation List.xlsx"; +// } + //excel + OutputStream excelOS = new FileOutputStream(path + File.separator + excelName); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + workbook = ExcelExportUtil.exportExcel(exportParams, ProjectLawsInventoryEO.class, dataList); + } else { + List dataListEn = new ArrayList<>(); + for (ProjectLawsInventoryEO projectLawsInventoryEOTemp : dataList) { + ProjectLawsInventoryEOEn ProjectLawsInventoryEOEn = new ProjectLawsInventoryEOEn(); + BeanUtils.copyProperties(projectLawsInventoryEOTemp, ProjectLawsInventoryEOEn); + dataListEn.add(ProjectLawsInventoryEOEn); + } + //下拉选中英文转换 + transition(dataListEn, projectLawsInventoryEO); + workbook = ExcelExportUtil.exportExcel(exportParams, ProjectLawsInventoryEOEn.class, dataListEn); + } + + workbook.write(excelOS); + excelOS.flush(); + + ZipUtil.zip(path, path + ".zip"); + //文件 + FileInputStream fis = new FileInputStream(path + ".zip"); + os = response.getOutputStream(); + + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); + fis.close(); + } catch (IOException e) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("下载文件失败"); + } else { + throw new JeroBootException("Failed to download file"); + } + } finally { + IOUtils.closeQuietly(os); + File file = new File(uploadpath + "/tempZip"); + FileUtil.deleteContents(file); + } + + } + + private void getUserIdList(List userIdList, ProjectLawsInventoryEO lawsInventoryEO) { + //认证工程师id + if (StringUtils.isNotEmpty(lawsInventoryEO.getHomologationEngineerId())) { + userIdList.add(lawsInventoryEO.getHomologationEngineerId()); + } + //法规工程师id + if (StringUtils.isNotEmpty(lawsInventoryEO.getRegulationOwnerId())) { + userIdList.add(lawsInventoryEO.getRegulationOwnerId()); + } + //工程接口人id + if (StringUtils.isNotEmpty(lawsInventoryEO.getEngineeringInterfacePerson())) { + userIdList.add(lawsInventoryEO.getEngineeringInterfacePerson()); + } + + //设计符合性确认 + //发起人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getDesignInitiatorId())) { + userIdList.add(lawsInventoryEO.getDesignInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getDesignDutyId())) { + userIdList.add(lawsInventoryEO.getDesignDutyId()); + } + + //prehomo确认 + //发起人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getPrehomoInitiatorId())) { + userIdList.add(lawsInventoryEO.getPrehomoInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getPrehomoDutyId())) { + userIdList.add(lawsInventoryEO.getPrehomoDutyId()); + } + + //验证符合性确认 + //发起人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getVerifyInitiatorId())) { + userIdList.add(lawsInventoryEO.getVerifyInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getVerifyDutyId())) { + userIdList.add(lawsInventoryEO.getVerifyDutyId()); + } + } + + + private void transition(List dataListEn, ProjectLawsInventoryEO projectLawsInventoryEOTemp) { + //下拉选数据字典 + List sysCategoryList = sysCategoryService.list(); + + //技术领域数据字典 + List sysDictItems = sysDictItemServiceImpl.selectItemsAll(); + for (ProjectLawsInventoryEOEn projectLawsInventoryEOEn : dataListEn) { + + //设计交付物类型 inventoryInfoEO + if (StringUtils.isNotBlank(projectLawsInventoryEOEn.getDesignDeliverableType())) { + StringBuilder sb = getStringBuilder(projectLawsInventoryEOTemp, sysCategoryList, projectLawsInventoryEOEn.getDesignDeliverableType()); + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEOEn.setDesignDeliverableType(substring); + } + } + //pre交付物类型 + if (StringUtils.isNotBlank(projectLawsInventoryEOEn.getPrehomoDeliverableType())) { + StringBuilder sb = getStringBuilder(projectLawsInventoryEOTemp, sysCategoryList, projectLawsInventoryEOEn.getPrehomoDeliverableType()); + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEOEn.setPrehomoDeliverableType(substring); + } + } + //验证交付物类型 + if (StringUtils.isNotBlank(projectLawsInventoryEOEn.getVerifyDeliverableType())) { + StringBuilder sb = getStringBuilder(projectLawsInventoryEOTemp, sysCategoryList, projectLawsInventoryEOEn.getVerifyDeliverableType()); + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEOEn.setVerifyDeliverableType(substring); + } + } + + + //适用地区 + String region = projectLawsInventoryEOEn.getRegion(); + String pullRegion = pull(sysDictItems, region, "region"); + if (StringUtils.isNotBlank(pullRegion)) { + projectLawsInventoryEOEn.setRegion(pullRegion); + } + //适用范围shi4Yong4Fan4Wei2 +// St + + //状态state +// String state = projectLawsInventoryEOEn.getState(); +// String pullState = pull(sysDictItems, state,"state"); +// if(StringUtils.isNotBlank(pullState)){ +// projectLawsInventoryEOEn.setState(pullState); +// } + ///认证类型attestationType + String attestationType = projectLawsInventoryEOEn.getAttestationType(); + String pullAttestationType = pull(sysDictItems, attestationType, "attestation_type"); + if (StringUtils.isNotBlank(pullAttestationType)) { + projectLawsInventoryEOEn.setAttestationType(pullAttestationType); + } + //责任领域dutyTerritory + String dutyTerritory = projectLawsInventoryEOEn.getDutyTerritory(); + String pullDutyTerritory = pull(sysDictItems, dutyTerritory, "duty_territory"); + if (StringUtils.isNotBlank(pullDutyTerritory)) { + projectLawsInventoryEOEn.setDutyTerritory(pullDutyTerritory); + } + //认证级别attestationRank + String attestationRank = projectLawsInventoryEOEn.getAttestationRank(); + String pullAttestationRank = pull(sysDictItems, attestationRank, "attestation_rank"); + if (StringUtils.isNotBlank(pullAttestationRank)) { + projectLawsInventoryEOEn.setAttestationRank(pullAttestationRank); + } + //实施类别implementType + String implementType = projectLawsInventoryEOEn.getImplementType(); + String pullImplementType = pull(sysDictItems, implementType, "implement_type"); + if (StringUtils.isNotBlank(pullImplementType)) { + projectLawsInventoryEOEn.setImplementType(pullImplementType); + } + //设计交付物类型designDeliverableType + String designDeliverableType = projectLawsInventoryEOEn.getDesignDeliverableType(); + String pullDesignDeliverableType = pull(sysDictItems, designDeliverableType, "deliverable_template"); + if (StringUtils.isNotBlank(pullDesignDeliverableType)) { + projectLawsInventoryEOEn.setDesignDeliverableType(pullDesignDeliverableType); + } + + //pre交付物类型prehomoDeliverableType + String prehomoDeliverableType = projectLawsInventoryEOEn.getPrehomoDeliverableType(); + String pullPrehomoDeliverableType = pull(sysDictItems, prehomoDeliverableType, "deliverable_template"); + if (StringUtils.isNotBlank(pullPrehomoDeliverableType)) { + projectLawsInventoryEOEn.setPrehomoDeliverableType(pullPrehomoDeliverableType); + } + + //验证交付物类型verifyDeliverableType + String verifyDeliverableType = projectLawsInventoryEOEn.getVerifyDeliverableType(); + String pullVerifyDeliverableType = pull(sysDictItems, verifyDeliverableType, "deliverable_template"); + if (StringUtils.isNotBlank(pullVerifyDeliverableType)) { + projectLawsInventoryEOEn.setVerifyDeliverableType(pullVerifyDeliverableType); + } + //清单确认状态 + String inventoryAffirmStatus = projectLawsInventoryEOEn.getInventoryAffirmStatus(); + if (StringUtils.isNotBlank(inventoryAffirmStatus)) { + projectLawsInventoryEOEn.setInventoryAffirmStatusName(inventoryAffirmStatus); + } + + //任务确认状态 + String taskAffirmStatus = projectLawsInventoryEOEn.getTaskAffirmStatus(); + if (StringUtils.isNotBlank(taskAffirmStatus)) { + projectLawsInventoryEOEn.setTaskAffirmStatusName(taskAffirmStatus); + } + } + } + + private String pull(List sysDictItems, String field, String dictCode) { + if (StringUtils.isBlank(field)) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (String s : field.split(",")) { + List collect = sysDictItems.stream().filter(e -> dictCode.equals(e.getDictCode()) && s.equals(e.getItemValue())).collect(Collectors.toList()); + if (collect.size() != 0) { + sb.append(collect.get(0).getEnName() + ","); + } + } + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + return substring; + } + return null; + } + + @SneakyThrows + @Override + public void importData(MultipartFile file, ProjectLawsInventoryEO projectLawsInventoryEO) { +// String title = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// title = "*编号,子标题,WVTA ID," + +// "实施类别,认证类型,*认证级别,适用增补件," + +// "*责任领域,法规工程师,认证工程师,工程接口人," + +// "备注," + +// "设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计截止时间,设计交付物说明," + +// "pre交付物类型,pre交付物模板,pre发起人,pre责任人,pre截止时间,pre交付物说明," + +// "验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证截止时间,验证交付物说明"; +// }else{ +// title = "*Number,Sub-Title,WVTA ID," + +// "Usage,Certification Type,*Certification Level,Applicable Supplement," + +// "*Responsible Field,Regulation Engineer,Homologation Engineer,Engineering Interface," + +// "Comments," + +// "design Deliverable Type,design Deliverable Template,design initiator,design Assignee,design Due Date,design Deliverable Description," + +// "pre Deliverable Type,pre Deliverable Template,pre initiator,pre Assignee,pre Due Date,pre Deliverable Description," + +// "verify Deliverable Type,verify Deliverable Template,verify initiator,verify Assignee,verify Due Date,verify Deliverable Description"; +// } + + int pos = file.getOriginalFilename().lastIndexOf("."); + String str = file.getOriginalFilename().substring(pos + 1).toLowerCase(); + String filenameorg = file.getOriginalFilename().substring(0, pos); + //判断上传文件必须是zip + if (!str.equals("zip")) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("请上传zip格式的文件或rar格式的文件"); + } else { + throw new JeroBootException("Please upload a zip file or rar file"); + } + + } + String path = uploadpath + File.separator + "modal" + File.separator + filenameorg + System.currentTimeMillis(); + File saveDirectory = new File(path); + if (!saveDirectory.isDirectory()) { + saveDirectory.mkdir(); + } + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + File.separator + file.getOriginalFilename())); + //解压缩 + String zipEntryName = ""; + if (str.equals("zip")) { + zipEntryName = FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), path); + } + + + //判断压缩包下是否只有一个文件夹 + File fileTemp = new File(path); + int length = fileTemp.listFiles().length; + if (length > 2) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("压缩包中必须有且仅有一个文件夹,请重新上传"); + } else { + throw new JeroBootException("There must be only one folder in the compressed package Please upload it again"); + } + + } + File fileNew = new File(zipEntryName); + List fileList = new ArrayList<>(); + for (File file1 : fileNew.listFiles()) { + if (file1.getName().contains(".xls") || file1.getName().contains(".xlsx")) { + fileList.add(file1); + } + } + if (fileList.size() == 0) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("压缩包根目录下没有excel作为导入数据,请重新上传"); + } else { + throw new JeroBootException("Excel does not exist in the root directory of the compressed package Please upload it again"); + } + + } else if (fileList.size() > 1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("压缩包根目录下仅能存在一个excel为导入数据,请重新上传"); + } else { + throw new JeroBootException("Only one Excel file can be imported in the compressed package root directory. Please upload data again"); + } + + } + + // 数据相关处理, + // 1.获取其中的Excel, + List excelfilelist = FileUnZip.readImpExcelFile(zipEntryName); + System.gc(); + if (excelfilelist.size() < 1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("压缩包内没有上传Excel数据"); + } else { + throw new JeroBootException("No Excel data is uploaded in the compressed package"); + } + + } else if (excelfilelist.size() > 1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("压缩包内有多个Excel数据源"); + } else { + throw new JeroBootException("There are multiple Excel data sources in the zip package"); + } + + } + String title = ""; + String dataSource = ""; + List datas = new ArrayList<>(); + File excelFile = excelfilelist.get(0); + Workbook workbook = WorkbookFactory.create(excelFile); + List> dataList = new ArrayList<>(); + if (workbook != null) { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Sheet sheet = workbook.getSheetAt(0); + if (sheet != null) { + StringBuilder headerSb = new StringBuilder(); + int rowNos = sheet.getLastRowNum();// 得到excel的总记录条数 + //以sheet页第一行的列数为标记,判断用的是导入模板还是用的列表导出的数据 + short lastCellNum = sheet.getRow(0).getLastCellNum(); + if (lastCellNum == 32) { + dataSource = DataSourceEnum.LIST_DATA.getValue(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + title = "*编号,标题,子标题," + + "清单确认状态,任务确认状态,适用地区,对应标准," + + "实施类别,新车型实施日期,在产车实施日期,认证类型,*认证级别," + + "适用增补件,WVTA ID,*责任领域,法规工程师,认证工程师,工程接口人,备注," + + "设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计截止时间,设计交付物说明," + + "pre交付物类型,pre交付物模板,pre发起人,pre责任人,pre截止时间,pre交付物说明," + + "验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证截止时间,验证交付物说明"; + } else { + title = "*Number,Title,Sub-Title," + + "List Confirmation Status,Task Confirmation Status,Area,Compare EU/CN," + + "Usage,New Type Execution Date,New Vehicle Execution Date,Certification Type," + + "*Certification Level,Applicable Supplement,WVTA ID,*Responsible Field," + + "Regulation Engineer,Homologation Engineer,Engineering Interface,Comments," + + "design Deliverable Type,design Deliverable Template,design Reviewer,design Assignee,design Due Date,design Deliverable Description," + + "pre Deliverable Type,pre Deliverable Template,pre Reviewer,pre Assignee,pre Due Date,pre Deliverable Description," + + "verify Deliverable Type,verify Deliverable Template,verify Reviewer,verify Assignee,verify Due Date,verify Deliverable Description"; + } + //导入的数据为列表导出的数据 + for (int i = 0; i <= rowNos; i++) { + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(i); + boolean isBlank = isRowEmpty(row); + String key = ""; + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + Map rowList = new LinkedHashMap<>(); + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j); + Cell headerCell = headerRow.getCell(j); + if (cell != null) { + if (i == 0) { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + headerSb.append(cell.getStringCellValue() + ","); + if (j == 18) { + break; + } + } else if (i == 1) { + if (j > 18) { + String flag = ""; + if (18 < j && j < 25) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + flag = "设计"; + } else { + flag = "design "; + } + key = flag + headerCell.getStringCellValue(); + } + if (24 < j && j < 31) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + flag = "pre"; + } else { + flag = "pre "; + } + key = flag + headerCell.getStringCellValue(); + } + if (30 < j && j < 37) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + flag = "验证"; + } else { + flag = "verify "; + } + key = flag + headerCell.getStringCellValue(); + } + headerSb.append(key + ","); + } + } else if (i > 1) { + List headList = Arrays.asList(headerSb.toString().split(",")); + String field = ""; + if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + field = fieldConvert(headList.get(j)); + rowList.put(field, df.format(d)); + } else { + field = fieldConvert(headList.get(j)); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + String stringCellValue = cell.getStringCellValue(); + if (StringUtils.isNotBlank(stringCellValue)) { + String replace = stringCellValue.replace(",", ","); + rowList.put(field, replace); + } else { + rowList.put(field, ""); + } + } + } + } + } + if (i > 1) { + dataList.add(rowList); + } + } + } + } else { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + title = "*编号,标题,子标题," + + "认证类型,*认证级别,适用增补件," + + "*责任领域,法规工程师,工程接口人," + + "备注," + + "设计交付物类型,设计交付物模板,设计责任人,设计截止时间,设计交付物说明," + + "验证交付物类型,验证交付物模板,验证责任人,验证截止时间,验证交付物说明"; + } else { + title = "*Number,Title,Sub-Title," + + "Certification Type,*Certification Level,Applicable Supplement," + + "*Responsible Field,Regulation Engineer,Engineering Interface," + + "Comments," + + "design Deliverable Type,design Deliverable Template,design Assignee,design Due Date,design Deliverable Description," + + "verify Deliverable Type,verify Deliverable Template,verify Assignee,verify Due Date,verify Deliverable Description"; + } + //导入的数据为填写模板的数据 + for (int i = 0; i <= rowNos; i++) { + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(i); + boolean isBlank = isRowEmpty(row); + String key = ""; + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + Map rowList = new LinkedHashMap<>(); + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j); + Cell headerCell = headerRow.getCell(j); + if (cell != null) { + if (i == 0) { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + headerSb.append(cell.getStringCellValue() + ","); + if (j == 9) { + break; + } + } else if (i == 1) { + if (j > 9) { + String flag = ""; + if (9 < j && j < 15) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + flag = "设计"; + } else { + flag = "design "; + } + key = flag + headerCell.getStringCellValue(); + } + /*if(17 < j && j < 24){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="pre"; + }else{ + flag ="pre "; + } + key = flag + headerCell.getStringCellValue(); + }*/ + if (14 < j && j < 20) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + flag = "验证"; + } else { + flag = "verify "; + } + key = flag + headerCell.getStringCellValue(); + } + headerSb.append(key + ","); + } + } else if (i > 2) { + List headList = Arrays.asList(headerSb.toString().split(",")); + String field = ""; + if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + field = fieldConvert(headList.get(j)); + rowList.put(field, df.format(d)); + } else { + field = fieldConvert(headList.get(j)); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + String stringCellValue = cell.getStringCellValue(); + if (StringUtils.isNotBlank(stringCellValue)) { + String replace = stringCellValue.replace(",", ","); + rowList.put(field, replace); + } else { + rowList.put(field, ""); + } + } + } + } + } + if (i > 2) { + dataList.add(rowList); + } + } + } + } + + + if (dataList.size() == 0) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("请填写必填字段内容,带*的为必填"); + } else { + throw new JeroBootException("Please fill in the required fields marked with *"); + } + + } else { + //数据转换 JSON.parseObject(JSON.toJSONString(map), MyUser.class) + for (Map stringStringMap : dataList) { + ProjectLawsInventoryEO projectLawsInventoryEOTemp = JSON.parseObject(JSON.toJSONString(stringStringMap), ProjectLawsInventoryEO.class); + projectLawsInventoryEOTemp.setCut(projectLawsInventoryEO.getCut()); + projectLawsInventoryEOTemp.setProjectLibraryId(projectLawsInventoryEO.getProjectLibraryId()); + projectLawsInventoryEOTemp.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEOTemp.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEOTemp.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + projectLawsInventoryEOTemp.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + datas.add(projectLawsInventoryEOTemp); + } + } + // 校验头部是否符合模板 + String substring = headerSb.toString(); + if (substring.endsWith(",") || substring.endsWith(",")) { + substring = headerSb.substring(0, headerSb.length() - 1); + } + + String excelHeader = substring.toString(); + if (!title.equals(excelHeader)) { + workbook.close(); + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + throw new JeroBootException("读取失败,请严格按照模板文件导入数据"); + } else { + throw new JeroBootException("The data fails to be read. Import data strictly according to the template file"); + } + + } + } + } + workbook.close(); + List categoryList = sysCategoryService.list(); + //普通数据字典 + List dictItemList = sysDictItemServiceImpl.selectItemsAll(); + importDatas(datas, dictItemList, zipEntryName, saveDirectory, projectLawsInventoryEO, categoryList, dataSource); + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + + } +// @SneakyThrows +// @Override +// public void importData(MultipartFile file, ProjectLawsInventoryEO projectLawsInventoryEO) { +// String title = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// title = "*编号,子标题,WVTA ID," + +// "实施类别,认证类型,*认证级别,适用增补件," + +// "*责任领域,法规工程师,认证工程师,工程接口人," + +// "备注," + +// "设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计截止时间,设计交付物说明," + +// "pre交付物类型,pre交付物模板,pre发起人,pre责任人,pre截止时间,pre交付物说明," + +// "验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证截止时间,验证交付物说明"; +// }else{ +// title = "*Number,Sub-Title,WVTA ID," + +// "Usage,Certification Type,*Certification Level,Applicable Supplement," + +// "*Responsible Field,Regulation Engineer,Homologation Engineer,Engineering Interface," + +// "Comments," + +// "design Deliverable Type,design Deliverable Template,design initiator,design Assignee,design Due Date,design Deliverable Description," + +// "pre Deliverable Type,pre Deliverable Template,pre initiator,pre Assignee,pre Due Date,pre Deliverable Description," + +// "verify Deliverable Type,verify Deliverable Template,verify initiator,verify Assignee,verify Due Date,verify Deliverable Description"; +// } +// +// int pos = file.getOriginalFilename().lastIndexOf("."); +// String str = file.getOriginalFilename().substring(pos + 1).toLowerCase(); +// String filenameorg = file.getOriginalFilename().substring(0, pos); +// //判断上传文件必须是zip +// if (!str.equals("zip")) { +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("请上传zip格式的文件或rar格式的文件"); +// }else{ +// throw new JeroBootException("Please upload a zip file or rar file"); +// } +// +// } +// String path = uploadpath + File.separator + "modal" + File.separator + filenameorg + System.currentTimeMillis(); +// File saveDirectory = new File(path); +// if (!saveDirectory.isDirectory()) { +// saveDirectory.mkdir(); +// } +// FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + File.separator + file.getOriginalFilename())); +// //解压缩 +// String zipEntryName = ""; +// if (str.equals("zip")) { +// zipEntryName = FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), path); +// } +// +// +// //判断压缩包下是否只有一个文件夹 +// File fileTemp = new File(path); +// int length = fileTemp.listFiles().length; +// if (length > 2) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包中必须有且仅有一个文件夹,请重新上传"); +// }else{ +// throw new JeroBootException("There must be only one folder in the compressed package Please upload it again"); +// } +// +// } +// File fileNew = new File(zipEntryName); +// List fileList = new ArrayList<>(); +// for (File file1 : fileNew.listFiles()) { +// if (file1.getName().contains(".xls") || file1.getName().contains(".xlsx")) { +// fileList.add(file1); +// } +// } +// if (fileList.size() == 0) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包根目录下没有excel作为导入数据,请重新上传"); +// }else{ +// throw new JeroBootException("Excel does not exist in the root directory of the compressed package Please upload it again"); +// } +// +// } else if (fileList.size() > 1) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包根目录下仅能存在一个excel为导入数据,请重新上传"); +// }else{ +// throw new JeroBootException("Only one Excel file can be imported in the compressed package root directory. Please upload data again"); +// } +// +// } +// +// // 数据相关处理, +// // 1.获取其中的Excel, +// List excelfilelist = FileUnZip.readImpExcelFile(zipEntryName); +// System.gc(); +// if (excelfilelist.size() < 1) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包内没有上传Excel数据"); +// }else{ +// throw new JeroBootException("No Excel data is uploaded in the compressed package"); +// } +// +// } else if (excelfilelist.size() > 1) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包内有多个Excel数据源"); +// }else{ +// throw new JeroBootException("There are multiple Excel data sources in the zip package"); +// } +// +// } +// List datas = new ArrayList<>(); +// File excelFile = excelfilelist.get(0); +// Workbook workbook = WorkbookFactory.create(excelFile); +// List> dataList = new ArrayList<>(); +// if (workbook != null) { +// DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); +// Sheet sheet = workbook.getSheetAt(0); +// if (sheet != null) { +// StringBuilder headerSb = new StringBuilder(); +// int rowNos = sheet.getLastRowNum();// 得到excel的总记录条数 +// for (int i = 0; i <= rowNos; i++) { +// Row row = sheet.getRow(i); +// Row headerRow = sheet.getRow(i); +// boolean isBlank = isRowEmpty(row); +// String key = ""; +// if (row != null && !isBlank) { +// int columNos = headerRow.getLastCellNum();// 表头总共的列数 +// Map rowList = new LinkedHashMap<>(); +// for (int j = 0; j < columNos; j++) { +// Cell cell = row.getCell(j); +// Cell headerCell = headerRow.getCell(j); +// if (cell != null) { +// if (i == 0) { +// cell.setCellType(HSSFCell.CELL_TYPE_STRING); +// headerSb.append(cell.getStringCellValue() + ","); +// if(j == 11){ +// break; +// } +// }else if(i == 1){ +// if(j > 11){ +// String flag = ""; +// if(11 < j && j < 18){ +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// flag ="设计"; +// }else{ +// flag ="design "; +// } +// key = flag + headerCell.getStringCellValue(); +// } +// if(17 < j && j < 24){ +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// flag ="pre"; +// }else{ +// flag ="pre "; +// } +// key = flag + headerCell.getStringCellValue(); +// } +// if(23 < j && j < 30){ +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// flag ="验证"; +// }else{ +// flag ="verify "; +// } +// key = flag + headerCell.getStringCellValue(); +// } +// headerSb.append(key + ","); +// } +// } else if(i > 2){ +// List headList = Arrays.asList(headerSb.toString().split(",")); +// String field =""; +// if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { +// Date d = cell.getDateCellValue(); +// field = fieldConvert(headList.get(j)); +// rowList.put(field, df.format(d)); +// } else { +// field = fieldConvert(headList.get(j)); +// cell.setCellType(HSSFCell.CELL_TYPE_STRING); +// String stringCellValue = cell.getStringCellValue(); +// if (StringUtils.isNotBlank(stringCellValue)) { +// String replace = stringCellValue.replace(",", ","); +// rowList.put(field, replace); +// } else { +// rowList.put(field, ""); +// } +// } +// } +// } +// } +// if (i > 2) { +// dataList.add(rowList); +// } +// } +// } +// +// if (dataList.size() == 0) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("请填写必填字段内容,带*的为必填"); +// }else{ +// throw new JeroBootException("Please fill in the required fields marked with *"); +// } +// +// }else{ +// //数据转换 JSON.parseObject(JSON.toJSONString(map), MyUser.class) +// for (Map stringStringMap : dataList) { +// ProjectLawsInventoryEO projectLawsInventoryEOTemp = JSON.parseObject(JSON.toJSONString(stringStringMap), ProjectLawsInventoryEO.class); +// projectLawsInventoryEOTemp.setCut(projectLawsInventoryEO.getCut()); +// projectLawsInventoryEOTemp.setProjectLibraryId(projectLawsInventoryEO.getProjectLibraryId()); +// projectLawsInventoryEOTemp.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); +// projectLawsInventoryEOTemp.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); +// datas.add(projectLawsInventoryEOTemp); +// } +// } +// // 校验头部是否符合模板 +// String substring = headerSb.toString(); +// if (substring.endsWith(",") || substring.endsWith(",")){ +// substring = headerSb.substring(0, headerSb.length() - 1); +// } +// +// String excelHeader = substring.toString(); +// if (!title.equals(excelHeader)) { +// workbook.close(); +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("读取失败,请严格按照模板文件导入数据"); +// }else{ +// throw new JeroBootException("The data fails to be read. Import data strictly according to the template file"); +// } +// +// } +// } +// } +// workbook.close(); +// List categoryList = sysCategoryService.list(); +// //普通数据字典 +// List dictItemList = sysDictItemServiceImpl.selectItemsAll(); +// importDatas(datas, dictItemList, zipEntryName,saveDirectory,projectLawsInventoryEO,categoryList); +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// +// } + + @Override + @Transactional + public Result change(JSONObject parmas) { + String ids = parmas.getString("ids"); + String projectLibraryId = parmas.getString("projectLibraryId"); + String operateType = parmas.getString("operateType"); + if (StringUtils.isNotEmpty(ids)) { + + List piFlowTypeList = new ArrayList<>(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List projectLawsInventoryEOS = this.list(queryWrapper); + + List idList = Arrays.asList(ids.split(",")); + String projectLawsInventoryIds = ids; + String pIds = ""; + + ProjectLawsInventoryEO projectLawsInventoryEO = new ProjectLawsInventoryEO(); + projectLawsInventoryEO.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEO.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + //清单、任务确认初始化。 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(ProjectLawsInventoryEO::getId, idList); + updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerSubmitStatus, null); + updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerSubmitStatus, null); + updateWrapper.set(ProjectLawsInventoryEO::getSendMsgFlag, null); + updateWrapper.set(ProjectLawsInventoryEO::getSendMsgCurrentFlag, null); + //updateWrapper.set(ProjectLawsInventoryEO::getDesignDueDate,null); + //updateWrapper.set(ProjectLawsInventoryEO::getPrehomoDueDate,null); + //updateWrapper.set(ProjectLawsInventoryEO::getVerifyDueDate,null); + updateWrapper.set(ProjectLawsInventoryEO::getInventoryAffirmDueDate, null); + updateWrapper.set(ProjectLawsInventoryEO::getTaskAffirmDueDate, null); + + // 区分重置设计、验证、全部流程 + if(StringUtils.equals(operateType,OperatorTypeEnum.LAWS_INVENTORY_ALL_RESET_FLOW.getValue())){ + updateWrapper.set(ProjectLawsInventoryEO::getDesignFlowStatus, ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + updateWrapper.set(ProjectLawsInventoryEO::getVerifyFlowStatus, ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + piFlowTypeList.add(FlowTypeEnum.SJFHXSHLC.getValue()); + piFlowTypeList.add(FlowTypeEnum.YZFHXSCLC.getValue()); + piFlowTypeList.add(FlowTypeEnum.SJ_XGJFWLC.getValue()); + piFlowTypeList.add(FlowTypeEnum.YZ_XGJFWLC.getValue()); + }else if(StringUtils.equals(operateType,OperatorTypeEnum.LAWS_INVENTORY_DESIGN_RESET_FLOW.getValue())){ + updateWrapper.set(ProjectLawsInventoryEO::getDesignFlowStatus, ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + piFlowTypeList.add(FlowTypeEnum.SJFHXSHLC.getValue()); + piFlowTypeList.add(FlowTypeEnum.SJ_XGJFWLC.getValue()); + }else if(StringUtils.equals(operateType,OperatorTypeEnum.LAWS_INVENTORY_VERIFY_RESET_FLOW.getValue())){ + updateWrapper.set(ProjectLawsInventoryEO::getVerifyFlowStatus, ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + piFlowTypeList.add(FlowTypeEnum.YZFHXSCLC.getValue()); + piFlowTypeList.add(FlowTypeEnum.YZ_XGJFWLC.getValue()); + } + + super.update(projectLawsInventoryEO, updateWrapper); + + QueryWrapper processInfoQueryWrap = new QueryWrapper<>(); + processInfoQueryWrap.lambda().in(ProcessInfoEO::getProjectLawsInventoryId, idList); + processInfoQueryWrap.lambda().in(ProcessInfoEO::getFlowType,piFlowTypeList); + List processInfoEOList = this.processInfoEOService.list(processInfoQueryWrap); + List actiProcInstIdList = processInfoEOList.stream().map(ProcessInfoEO::getActiProcInstId).distinct().collect(Collectors.toList()); + + pIds = actiProcInstIdList.stream().map(String::valueOf).collect(Collectors.joining(",")); + + /*QueryWrapper taskInventoryQueryWrapper = new QueryWrapper<>(); + taskInventoryQueryWrapper.lambda().in(ProjectTaskInventoryEO::getProjectLawsInventoryId,idList); + List projectTaskInventoryList = this.projectTaskInventoryEOService.getBaseMapper().selectList(taskInventoryQueryWrapper); + + //删除流程历史 + if(CollectionUtils.isNotEmpty(projectTaskInventoryList)){ + List actiProcInstIdList = new ArrayList<>(); + List verifyPIdList = projectTaskInventoryList.stream().map(ProjectTaskInventoryEO::getVerifyPId).distinct().collect(Collectors.toList()); + List prehomoPIdList = projectTaskInventoryList.stream().map(ProjectTaskInventoryEO::getPrehomoPId).distinct().collect(Collectors.toList()); + List designPIdList = projectTaskInventoryList.stream().map(ProjectTaskInventoryEO::getDesignPId).distinct().collect(Collectors.toList()); + + actiProcInstIdList.addAll(verifyPIdList); + actiProcInstIdList.addAll(prehomoPIdList); + actiProcInstIdList.addAll(designPIdList); + + actiProcInstIdList = actiProcInstIdList.stream().distinct().collect(Collectors.toList());; + if(CollectionUtils.isNotEmpty(actiProcInstIdList)){ + QueryWrapper processHistoryDeleteWrapper = new QueryWrapper<>(); + processHistoryDeleteWrapper.lambda().in(ProcessHistoryEO::getActiProcInstId,actiProcInstIdList); + processHistoryEOService.remove(processHistoryDeleteWrapper); + } + pIds = actiProcInstIdList.stream().map(String::valueOf).collect(Collectors.joining(",")); + } + + QueryWrapper queryLawsInventoryWrapper = new QueryWrapper<>(); + queryLawsInventoryWrapper.lambda().in(ProjectLawsInventoryEO::getId,idList); + + List projectTaskInventoryEOList = new ArrayList<>(); + List projectLawsInventoryEOList = this.baseMapper.selectList(queryLawsInventoryWrapper); + projectLawsInventoryEOList.forEach(projectLawsInventory -> { + ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); + String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectTaskInventoryEO.setId(projectTaskInventoryId); + projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventory.getId()); + projectTaskInventoryEO.setStandId(projectLawsInventory.getStandId()); + projectTaskInventoryEO.setCertificationProgress(CertificationProgressEnum.NOT_START.getValue()); + projectTaskInventoryEOList.add(projectTaskInventoryEO); + }); +// idList.forEach(id -> { +// ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); +// String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); +// projectTaskInventoryEO.setId(projectTaskInventoryId); +// projectTaskInventoryEO.setProjectLawsInventoryId(id); +// projectTaskInventoryEOList.add(projectTaskInventoryEO); +// }); + //项目任务清单数据初始化。 + this.projectTaskInventoryEOService.deleteByProjectLawsInventoryIds(idList); + this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); + + //初始化项目状态评估 + projectTaskInventoryEOList.forEach(taskInventory -> { + this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); + }); + + //删除该法规的任务明细数据 + QueryWrapper deleteTaskInventoryDetailWrapper = new QueryWrapper<>(); + deleteTaskInventoryDetailWrapper.lambda().in(ProjectTaskInventoryDetailEO::getProjectTaskInventoryId,idList); + this.projectTaskInventoryDetailEOService.remove(deleteTaskInventoryDetailWrapper); + + //查询反馈意见表 获取id 用于删除 反馈意见历史数据。 + QueryWrapper queryTaskInventoryFeedbackWrapper = new QueryWrapper<>(); + queryTaskInventoryFeedbackWrapper.lambda().in(ProjectTaskInventoryFeedbackEO::getProjectTaskInventoryId,idList); + List projectTaskInventoryFeedbackEOList = projectTaskInventoryFeedbackEOService.getBaseMapper().selectList(queryTaskInventoryFeedbackWrapper); + List feedbackIdList = projectTaskInventoryFeedbackEOList.stream().map(ProjectTaskInventoryFeedbackEO::getId).distinct().collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(feedbackIdList)){ + QueryWrapper deleteFeedbackHistoryWrapper = new QueryWrapper<>(); + deleteFeedbackHistoryWrapper.lambda().in(FeedbackHistory::getFeedbackId,feedbackIdList); + feedbackHistoryService.remove(deleteFeedbackHistoryWrapper); + } + + //删除反馈意见数据 + QueryWrapper deleteTaskInventoryFeedbackWrapper = new QueryWrapper<>(); + deleteTaskInventoryFeedbackWrapper.lambda().in(ProjectTaskInventoryFeedbackEO::getProjectTaskInventoryId,idList); + this.projectTaskInventoryFeedbackEOService.remove(deleteTaskInventoryFeedbackWrapper); + + //删除当前项目状态表 + QueryWrapper deleteConditionAssessmentWrapper = new QueryWrapper<>(); + deleteConditionAssessmentWrapper.lambda().in(ConditionAssessmentEO::getProjectLawsInventoryId,idList); + this.conditionAssessmentEOService.remove(deleteConditionAssessmentWrapper);*/ + + JSONObject params = new JSONObject(); + params.put("projectLawsInventoryIds", projectLawsInventoryIds); + params.put("pIds", pIds); + //根据流程实例id 、 法规清单id 删除相关流程。 +// workFlowFeignClient.deleteProcessInstanceByProjectLawsInventoryIds(params); + + //清除流程中心对应的数据 + params.put("ids", ids); + params.put("operateType", operateType); + this.processInfoEOService.change(params); + + // 删除流程历史数据 + this.processHistoryEOService.deleteBiActiProcInstIdList(actiProcInstIdList); + + this.lawsInventoryEOListSortByInventoryAffirmDueDate(projectLawsInventoryEOS); + Date inventoryAffirmDueDate = projectLawsInventoryEOS.get(0).getInventoryAffirmDueDate(); + String endTime = ""; + if (inventoryAffirmDueDate != null) { + endTime = DateUtils.formatDate(inventoryAffirmDueDate); + } + + // 给法规工程师发消息 + List userIdList = projectLawsInventoryEOS.stream().map(ProjectLawsInventoryEO::getRegulationOwnerId).distinct().collect(Collectors.toList()); + String serialNumbers = projectLawsInventoryEOS.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + Map paramsMsg = new HashMap<>(); + paramsMsg.put("contentCn", "您好,该法规已被发起人撤回。"); + paramsMsg.put("contentEn", "Hello! This regulation has been withdrawn by the initiator."); + paramsMsg.put("projectLibraryId", projectLibraryId); + paramsMsg.put("endTime", endTime); + paramsMsg.put("userIdList", userIdList); + paramsMsg.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取法规清单 - 飞书跳转链接 + Map hrefFeishuMap = this.getProjectLawsInventoryLinkHrefFeishu(projectLibraryBase.getId(), PRN_CN, PRN_EN, com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + paramsMsg.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + paramsMsg.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + paramsMsg.put("hrefFeishu_CN_P", (String) hrefFeishuMap.get("hrefFeishu_CN_P")); + paramsMsg.put("Initiator", projectLibraryBase.getStudioEngineerName()); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_LIST_RELEASE2.getValue(), paramsMsg); + } + } + return Result.OK("变更成功!"); + } + + private void importDatas(List dataList, + List dictItemList, + String zipEntryName, + File saveDirectory, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + List categoryList, + String dataSource) { + List msgList = new ArrayList<>(); + if (DataSourceEnum.LIST_DATA.getValue().equals(dataSource)) { + //列表数据验证 + msgList = dataListVerify(dataList, dictItemList, zipEntryName, projectLawsInventoryEOTemp, categoryList, dataSource); + } else { + //模板数据验证 + msgList = dataTemplateVerify(dataList, dictItemList, zipEntryName, projectLawsInventoryEOTemp, categoryList, dataSource); + } + if (msgList.size() > 0) { + //返回报错信息 + String html = ""; + for (String s : msgList) { + html += s + "
"; + } + FileUnZip.deleteDir(saveDirectory); + if (StringUtils.isNotBlank(html)) { + html = html.substring(0, html.length() - 7); + } + throw new JeroBootException(html); + } else { + if (dataList.size() != 0) { + this.saveBatch(dataList); + //项目任务清单数据初始化。 + List projectTaskInventoryEOList = new ArrayList<>(); + //权限添加 + List adds = new ArrayList<>(); + Date now = new Date(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); + String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectTaskInventoryEO.setId(projectTaskInventoryId); + projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + projectLawsInventoryEO.setStandId(projectLawsInventoryEO.getStandId()); + projectTaskInventoryEO.setCertificationProgress(CertificationProgressEnum.NOT_START.getValue()); + projectTaskInventoryEOList.add(projectTaskInventoryEO); + //设置权限 + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getRegulationOwnerId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_REGULATION.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getHomologationEngineerId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getHomologationEngineerId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_HOMOLOGATION.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getEngineeringInterfacePerson(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_INTERFACE.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getDesignInitiatorId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getDesignInitiatorId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_DESIGN_INITIATOR.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getDesignDutyId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getDesignDutyId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_DESIGN_DUTY.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoInitiatorId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getPrehomoInitiatorId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_PREHOMO_INITIATOR.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getPrehomoDutyId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getPrehomoDutyId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_PREHOMO_DUTY.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getVerifyInitiatorId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getVerifyInitiatorId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_VERIFY_INITIATOR.getValue()); + } + if (ObjectUtils.isNotEmpty(projectLawsInventoryEO.getVerifyDutyId())) { + this.editService.setProjectLawsInventoryPermission(projectLawsInventoryEO.getVerifyDutyId(), projectLawsInventoryEOTemp.getProjectLibraryId(), projectLawsInventoryEO.getId(), now, adds, ProjectUserLocationEnum.PROJECT_LAWS_INVENTORY_VERIFY_DUTY.getValue()); + } + } + if (ObjectUtils.isNotEmpty(adds)) { + projectUserPermissionService.saveBatch(adds); + } + this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); + //初始化项目状态评估 + projectTaskInventoryEOList.forEach(taskInventory -> { + this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); + }); + + //更新log + String serialNumber = dataList.stream().map(e -> e.getSerialNumber()).collect(Collectors.joining(",")); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + String contentLog = username + "向清单中导入了“" + serialNumber + "”"; + String enContentLog = username + " imported “" + serialNumber + "” into the list."; + projectLawsInventoryLogEOService.updateLog(contentLog, dataList.get(0).getProjectLibraryId(), CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, dataList.get(0).getProjectLibraryId(), CutEnum.EN.getValue()); + } + } + } + + /** + * 列表数据验证 + * + * @param dataList + * @param dictItemList + * @param zipEntryName + * @param projectLawsInventoryEOTemp + * @param categoryList + * @param dataSource + * @return + */ + @NotNull + private List dataListVerify(List dataList, + List dictItemList, + String zipEntryName, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + List categoryList, + String dataSource) { + String dictId = sysCategoryMapper.getDictId("deliverable_template"); + List collect = categoryList.stream().filter(e -> e.getSysDictId().equals(dictId)).collect(Collectors.toList()); + List treeNameList = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + treeNameList = collect.stream().map(SysCategory::getName).collect(Collectors.toList()); + } else { + treeNameList = collect.stream().map(SysCategory::getEnName).collect(Collectors.toList()); + } + int i = 2; + List msgList = new ArrayList<>(); + String value = ""; + boolean flag = true; + + //编号验证 + verifySerialNumber(dataList, projectLawsInventoryEOTemp, dataSource); + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + i++; + String errorMsg = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + errorMsg = "第" + i + "行:"; + } else { + errorMsg = i + " line:"; + } + //编号 + String serialNumber = projectLawsInventoryEO.getSerialNumber(); + //子标题subtitle + String subtitle = projectLawsInventoryEO.getSubtitle(); + //WVTA ID + String wvtaId = projectLawsInventoryEO.getWvtaId(); + //备注 remark + String remark = projectLawsInventoryEO.getRemark(); + //认证级别 + String attestationRank = projectLawsInventoryEO.getAttestationRank(); + //责任领域 + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + //认证类型 + String attestationType = projectLawsInventoryEO.getAttestationType(); + //实施类别 + String implementType = projectLawsInventoryEO.getImplementType(); + //法规工程师regulationOwnerId + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + + //认证工程师homologationEngineerId + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + + //工程接口人engineeringInterfacePerson + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + + //设计交付物类型 + String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); + //设计发起人 + String designInitiator = projectLawsInventoryEO.getDesignInitiatorId(); + //设计责任人 + String designDuty = projectLawsInventoryEO.getDesignDutyId(); + //设计截止时间designDueDate + Date designDueDate = projectLawsInventoryEO.getDesignDueDate(); + + //pre交付物类型 + String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); + //pre发起人 + String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiatorId(); + //pre责任人 + String prehomoDuty = projectLawsInventoryEO.getPrehomoDutyId(); + //pre截止时间prehomoDueDate + Date prehomoDueDate = projectLawsInventoryEO.getPrehomoDueDate(); + + //确认交付物类型 + String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); + //确认发起人 + String verifyInitiator = projectLawsInventoryEO.getVerifyInitiatorId(); + //确认责任人 + String verifyDuty = projectLawsInventoryEO.getVerifyDutyId(); + //确认截止时间verifyDueDate + Date verifyDueDate = projectLawsInventoryEO.getVerifyDueDate(); + String applicableSupplement = projectLawsInventoryEO.getApplicableSupplement(); + + //文件 + String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); + String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); + String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); + //标题 + String title = projectLawsInventoryEO.getTitle(); + //清单确认状态 + String inventoryAffirmStatus = projectLawsInventoryEO.getInventoryAffirmStatus(); + //任务确认状态 + String taskAffirmStatus = projectLawsInventoryEO.getTaskAffirmStatus(); + //适用地区 + String region = projectLawsInventoryEO.getRegion(); + //对应标准 + String correspondingStandard = projectLawsInventoryEO.getCorrespondingStandard(); + //新车型实施日期 + Date xin1Che1Xing2Shi2Shi1Ri4Qi1 = projectLawsInventoryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1(); + //在产出实施日期 + Date implementTime = projectLawsInventoryEO.getImplementTime(); + + //清单确认状态,任务确认状态默认为未发起 +// //清单确认状态数据转换 +// if(StringUtils.isNotBlank(inventoryAffirmStatus)){ +// String textByName = InventoryAffirmStatusEnum.getTextByName(inventoryAffirmStatus); +// projectLawsInventoryEO.setInventoryAffirmStatus(textByName); +// } +// //任务确认状态数据转换 +// if(StringUtils.isNotBlank(taskAffirmStatus)){ +// String textByName = TaskAffirmStatusEnum.getTextByName(taskAffirmStatus); +// projectLawsInventoryEO.setTaskAffirmStatus(textByName); +// } + //适用地区数据转换 + if (StringUtils.isNotBlank(region)) { + String regionTemp = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, region, msgList, "适用地区", "Region", "region"); + projectLawsInventoryEO.setRegion(regionTemp); + } + //新车型实施日期验证 + flag = dateVerify(projectLawsInventoryEO, errorMsg, xin1Che1Xing2Shi2Shi1Ri4Qi1, msgList, "新车型实施日", "New Type Execution Date"); + //在产车实施日期验证 + flag = dateVerify(projectLawsInventoryEO, errorMsg, implementTime, msgList, "在产车实施日期", "New Vehicle Execution Date"); + + + //编号(输入框必填) + flag = must(projectLawsInventoryEO, errorMsg, msgList, serialNumber, "编号", "Number"); + + //子标题 + if (StringUtils.isNotBlank(subtitle)) { + if (subtitle.length() > 300) { + String message = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + message = errorMsg + "子标题不能超过300个字符, "; + } else { + message = errorMsg + " Subheadings cannot be checked more than 300 characters, "; + } + msgList.add(message); + } + } + //WVTA ID + if (StringUtils.isNotBlank(wvtaId)) { + if (wvtaId.length() > 100) { + String message = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + message = errorMsg + "WVTA ID不能超过100个字符, "; + } else { + message = errorMsg + " The WVTA ID cannot contain more than 100 characters, "; + } + msgList.add(message); + } + } + //备注 remark + if (StringUtils.isNotBlank(remark)) { + if (remark.length() > 1000) { + String message = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + message = errorMsg + "备注不能超过1000个字符, "; + } else { + message = errorMsg + " Note The value cannot exceed 1000 characters, "; + } + msgList.add(message); + } + } + + //实施类别(单选不必填) + value = pullSingle(dictItemList, projectLawsInventoryEO, errorMsg, implementType, msgList, "实施类别", "Usage", "implement_type"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setImplementType(value); + } + //认证类型(多选不必填) + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationType, msgList, "认证类型", "Certification Type", "attestation_type"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setAttestationType(value); + } + + //认证级别(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, attestationRank,"认证级别","Certification Level"); + if (StringUtils.isNotBlank(projectLawsInventoryEO.getAttestationRank())) { + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationRank, msgList, "认证级别", "Certification Level", "attestation_rank"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setAttestationRank(value); + } + } + + //责任领域(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, dutyTerritory,"责任领域","Responsible Field"); + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDutyTerritory())) { + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, dutyTerritory, msgList, "责任领域", "Responsible Field", "duty_territory"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setDutyTerritory(value); + } + } + //工程接口人(责任领域下的工程接口人) + Map objectMap = iProjectRelatedPersonnelService.queryPersonByProjectId(projectLawsInventoryEOTemp.getProjectLibraryId(), value); + + //法规工程师 + List> mapLawList = (List>) objectMap.get("lawEngineerList"); + //认证工程师 + List> mapCertificationList = (List>) objectMap.get("certificationEngineerList"); + //工程接口人 + List> mapPersonList = (List>) objectMap.get("engineeringInterfacePersonList"); + //所有人 + List> allPersonList = (List>) objectMap.get("allPersonList"); + + String nameCn = ""; + String nameEn = ""; + //法规工程师 + if (StringUtils.isNotBlank(regulationOwnerId)) { + nameCn = "法规工程师"; + nameEn = "regulatory engineer"; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, regulationOwnerId, mapLawList, nameCn, nameEn, ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + } + + //认证工程师 + if (StringUtils.isNotBlank(homologationEngineerId)) { + nameCn = "认证工程师"; + nameEn = "certification engineer "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, homologationEngineerId, mapCertificationList, nameCn, nameEn, ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + } + + //工程接口人 + if (StringUtils.isNotBlank(engineeringInterfacePerson)) { + nameCn = "工程接口人"; + nameEn = "Engineering Interface "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, engineeringInterfacePerson, mapPersonList, nameCn, nameEn, ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue()); + } + + + //设计 + //交付物类型 + value = tree(categoryList, treeNameList, projectLawsInventoryEO, errorMsg, designDeliverableType, msgList, "交付物类型", "Deliverable Type", "deliverable_template"); + if (StringUtils.isNotBlank(value)) { + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setDesignDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, designDeliverableTemplate, msgList, "交付物模板", "Deliverable Template", dataSource); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setDesignDeliverableTemplate(value); + } + + //发起人 + if (StringUtils.isNotBlank(designInitiator)) { + nameCn = "设计符合性确认发起人"; + nameEn = "confirm design conformance initiator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designInitiator, allPersonList, nameCn, nameEn, ProjectRoleEnum.DESIGNINITIATOR.getValue()); + } + + //责任人 + if (StringUtils.isNotBlank(designDuty)) { + nameCn = "设计符合性确认责任人"; + nameEn = "confirm design conformance responsible"; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designDuty, allPersonList, nameCn, nameEn, ProjectRoleEnum.DESIGNDUTY.getValue()); + } + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, designDueDate, msgList, "截止时间", "due date"); + if (flag) { + projectLawsInventoryEO.setDesignDueDate(designDueDate); + } + + + //pre + //交付物类型 + value = tree(categoryList, treeNameList, projectLawsInventoryEO, errorMsg, prehomoDeliverableType, msgList, "交付物类型", "Deliverable Type", "deliverable_template"); + if (StringUtils.isNotBlank(value)) { + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setPrehomoDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, prehomoDeliverableTemplate, msgList, "交付物模板", "Deliverable Template", dataSource); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setPrehomoDeliverableTemplate(value); + } + + //发起人 + if (StringUtils.isNotBlank(prehomoInitiator)) { + nameCn = "Pre-homo确认发起人"; + nameEn = "Pre-homo identifies the initiator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, prehomoInitiator, allPersonList, nameCn, nameEn, ProjectRoleEnum.PREHOMOINITIATOR.getValue()); + } + + //责任人 + if (StringUtils.isNotBlank(prehomoDuty)) { + nameCn = "Pre-homo确认责任人"; + nameEn = "Pre-homo identifies the person responsible "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, prehomoDuty, allPersonList, nameCn, nameEn, ProjectRoleEnum.PREHOMODUTY.getValue()); + } + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, prehomoDueDate, msgList, "截止时间", "due date"); + if (flag) { + projectLawsInventoryEO.setPrehomoDueDate(prehomoDueDate); + } + + //确认 + //交付物类型 + value = tree(categoryList, treeNameList, projectLawsInventoryEO, errorMsg, verifyDeliverableType, msgList, "交付物类型", "Deliverable Type", "deliverable_template"); + if (StringUtils.isNotBlank(value)) { + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setVerifyDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, verifyDeliverableTemplate, msgList, "交付物模板", "Deliverable Template", dataSource); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setVerifyDeliverableTemplate(value); + } + + + //发起人 + if (StringUtils.isNotBlank(verifyInitiator)) { + nameCn = "验证符合性确认发起人"; + nameEn = "verify conformance validates the originator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, verifyInitiator, allPersonList, nameCn, nameEn, ProjectRoleEnum.VERIFYINITIATOR.getValue()); + } + + //责任人 + if (StringUtils.isNotBlank(verifyDuty)) { + nameCn = "验证符合性确认责任人"; + nameEn = "verify conformance to confirm the responsible person "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, verifyDuty, allPersonList, nameCn, nameEn, ProjectRoleEnum.VERIFYDUTY.getValue()); + } + + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, verifyDueDate, msgList, "截止时间", "due date"); + if (flag) { + projectLawsInventoryEO.setVerifyDueDate(verifyDueDate); + } + } + return msgList; + } + + /** + * 模板数据验证 + * + * @param dataList + * @param dictItemList + * @param zipEntryName + * @param projectLawsInventoryEOTemp + * @param categoryList + * @param dataSource + * @return + */ + @NotNull + private List dataTemplateVerify(List dataList, + List dictItemList, + String zipEntryName, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + List categoryList, + String dataSource) { + String dictId = sysCategoryMapper.getDictId("deliverable_template"); + List collect = categoryList.stream().filter(e -> e.getSysDictId().equals(dictId)).collect(Collectors.toList()); + List treeNameList = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + treeNameList = collect.stream().map(SysCategory::getName).collect(Collectors.toList()); + } else { + treeNameList = collect.stream().map(SysCategory::getEnName).collect(Collectors.toList()); + } + int i = 3; + List msgList = new ArrayList<>(); + String value = ""; + boolean flag = true; + + // List dutyTerritoryDictItemList = this.sysDictItemService.selectItemsByDictCode(DicCodeEnum.DUTY_TERRITORY.getCode()); + + List userNameList = new ArrayList<>(); + String designDutyIds = dataList.stream().map(ProjectLawsInventoryEO::getDesignDutyId).collect(Collectors.joining(",")); + String verifyDutyIds = dataList.stream().map(ProjectLawsInventoryEO::getVerifyDutyId).collect(Collectors.joining(",")); + userNameList.addAll(Arrays.asList(designDutyIds.split(","))); + userNameList.addAll(Arrays.asList(verifyDutyIds.split(","))); + List sysUserList = this.sysUserService.querySysUserByUserNameList(userNameList); + + //编号验证 + verifySerialNumber(dataList, projectLawsInventoryEOTemp, dataSource); + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + i++; + String errorMsg = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + errorMsg = "第" + i + "行:"; + } else { + errorMsg = i + " line:"; + } + //编号 + String serialNumber = projectLawsInventoryEO.getSerialNumber(); + //子标题subtitle + String subtitle = projectLawsInventoryEO.getSubtitle(); + //WVTA ID + String wvtaId = projectLawsInventoryEO.getWvtaId(); + //备注 remark + String remark = projectLawsInventoryEO.getRemark(); + //认证级别 + String attestationRank = projectLawsInventoryEO.getAttestationRank(); + //责任领域 + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + //认证类型 + String attestationType = projectLawsInventoryEO.getAttestationType(); + //实施类别 + String implementType = projectLawsInventoryEO.getImplementType(); + //法规工程师regulationOwnerId + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + + //认证工程师homologationEngineerId + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + + //工程接口人engineeringInterfacePerson + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + + //设计交付物类型 + String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); + //设计发起人 + String designInitiator = projectLawsInventoryEO.getDesignInitiatorId(); + //设计责任人 + String designDuty = projectLawsInventoryEO.getDesignDutyId(); + //设计截止时间designDueDate + Date designDueDate = projectLawsInventoryEO.getDesignDueDate(); + + //pre交付物类型 + String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); + //pre发起人 + String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiatorId(); + //pre责任人 + String prehomoDuty = projectLawsInventoryEO.getPrehomoDutyId(); + //pre截止时间prehomoDueDate + Date prehomoDueDate = projectLawsInventoryEO.getPrehomoDueDate(); + + //确认交付物类型 + String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); + //确认发起人 + String verifyInitiator = projectLawsInventoryEO.getVerifyInitiatorId(); + //确认责任人 + String verifyDuty = projectLawsInventoryEO.getVerifyDutyId(); + //确认截止时间verifyDueDate + Date verifyDueDate = projectLawsInventoryEO.getVerifyDueDate(); + + //文件 + String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); + String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); + String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); + + //编号(输入框必填) + flag = must(projectLawsInventoryEO, errorMsg, msgList, serialNumber, "编号", "Number"); + + //子标题 + if (StringUtils.isNotBlank(subtitle)) { + if (subtitle.length() > 300) { + String message = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + message = errorMsg + "子标题不能超过300个字符, "; + } else { + message = errorMsg + " Subheadings cannot be checked more than 300 characters, "; + } + msgList.add(message); + } + } + //WVTA ID + if (StringUtils.isNotBlank(wvtaId)) { + if (wvtaId.length() > 100) { + String message = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + message = errorMsg + "WVTA ID不能超过100个字符, "; + } else { + message = errorMsg + " The WVTA ID cannot contain more than 100 characters, "; + } + msgList.add(message); + } + } + //备注 remark + if (StringUtils.isNotBlank(remark)) { + if (remark.length() > 1000) { + String message = ""; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + message = errorMsg + "备注不能超过1000个字符, "; + } else { + message = errorMsg + " Note The value cannot exceed 1000 characters, "; + } + msgList.add(message); + } + } + + //实施类别(单选不必填) + value = pullSingle(dictItemList, projectLawsInventoryEO, errorMsg, implementType, msgList, "实施类别", "Usage", "implement_type"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setImplementType(value); + } + //认证类型(单选不必填) + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationType, msgList, "认证类型", "Certification Type", "attestation_type"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setAttestationType(value); + } + + //认证级别(多选必填) + flag = must(projectLawsInventoryEO, errorMsg, msgList, attestationRank, "认证级别", "Certification Level"); + if (flag) { + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationRank, msgList, "认证级别", "Certification Level", "attestation_rank"); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setAttestationRank(value); + } + } + + String nameCn = ""; + String nameEn = ""; + + //责任领域(多选必填) + flag = must(projectLawsInventoryEO, errorMsg, msgList, dutyTerritory, "责任领域", "Responsible Field"); + if (flag) { + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, dutyTerritory, msgList, "责任领域", "Responsible Field", DicCodeEnum.DUTY_TERRITORY.getCode()); + if (StringUtils.isNotBlank(value)) { + //工程接口人(责任领域下的工程接口人) + Map objectMap = iProjectRelatedPersonnelService.queryPersonByProjectId(projectLawsInventoryEOTemp.getProjectLibraryId(), value); + + //法规工程师 + List> mapLawList = (List>) objectMap.get("lawEngineerList"); + //认证工程师 + List> mapCertificationList = (List>) objectMap.get("certificationEngineerList"); + //工程接口人 + List> mapPersonList = (List>) objectMap.get("engineeringInterfacePersonList"); + //所有人 + List> allPersonList = (List>) objectMap.get("allPersonList"); + + projectLawsInventoryEO.setDutyTerritory(value); + + // 如果责任领域存在,再匹配这些人员 + //法规工程师 + if (StringUtils.isNotBlank(regulationOwnerId)) { + nameCn = "法规工程师"; + nameEn = "regulatory engineer"; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, regulationOwnerId, mapLawList, nameCn, nameEn, ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + } + + //认证工程师 + if (StringUtils.isNotBlank(homologationEngineerId)) { + nameCn = "认证工程师"; + nameEn = "certification engineer "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, homologationEngineerId, mapCertificationList, nameCn, nameEn, ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + } + + //工程接口人 + if (StringUtils.isNotBlank(engineeringInterfacePerson)) { + nameCn = "工程接口人"; + nameEn = "Engineering Interface "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, engineeringInterfacePerson, mapPersonList, nameCn, nameEn, ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue()); + } + } + } + + //设计 + //交付物类型 + value = tree(categoryList, treeNameList, projectLawsInventoryEO, errorMsg, designDeliverableType, msgList, "交付物类型", "Deliverable Type", "deliverable_template"); + if (StringUtils.isNotBlank(value)) { + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setDesignDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, designDeliverableTemplate, msgList, "交付物模板", "Deliverable Template", dataSource); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setDesignDeliverableTemplate(value); + } + + //发起人 + /*if(StringUtils.isNotBlank(designInitiator)){ + nameCn = "设计符合性确认发起人"; + nameEn = "confirm design conformance initiator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNINITIATOR.getValue()); + }*/ + + //责任人 + if (StringUtils.isNotBlank(designDuty)) { + nameCn = "设计符合性确认责任人"; + nameEn = "confirm design conformance responsible"; + //验证人员是否存在 + sysUserVerify(projectLawsInventoryEO, errorMsg, msgList, designDuty, sysUserList, nameCn, nameEn, ProjectRoleEnum.DESIGNDUTY.getValue()); + } + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, designDueDate, msgList, "截止时间", "due date"); + if (flag) { + projectLawsInventoryEO.setDesignDueDate(designDueDate); + } + + + //pre + //交付物类型 + value = tree(categoryList, treeNameList, projectLawsInventoryEO, errorMsg, prehomoDeliverableType, msgList, "交付物类型", "Deliverable Type", "deliverable_template"); + if (StringUtils.isNotBlank(value)) { + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setPrehomoDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, prehomoDeliverableTemplate, msgList, "交付物模板", "Deliverable Template", dataSource); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setPrehomoDeliverableTemplate(value); + } + + //发起人 + /*if(StringUtils.isNotBlank(prehomoInitiator)){ + nameCn = "Pre-homo确认发起人"; + nameEn = "Pre-homo identifies the initiator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, prehomoInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMOINITIATOR.getValue()); + } + + //责任人 + if(StringUtils.isNotBlank(prehomoDuty)){ + nameCn = "Pre-homo确认责任人"; + nameEn = "Pre-homo identifies the person responsible "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList,prehomoDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMODUTY.getValue()); + }*/ + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, prehomoDueDate, msgList, "截止时间", "due date"); + if (flag) { + projectLawsInventoryEO.setPrehomoDueDate(prehomoDueDate); + } + + //确认 + //交付物类型 + value = tree(categoryList, treeNameList, projectLawsInventoryEO, errorMsg, verifyDeliverableType, msgList, "交付物类型", "Deliverable Type", "deliverable_template"); + if (StringUtils.isNotBlank(value)) { + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setVerifyDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, verifyDeliverableTemplate, msgList, "交付物模板", "Deliverable Template", dataSource); + if (StringUtils.isNotBlank(value)) { + projectLawsInventoryEO.setVerifyDeliverableTemplate(value); + } + + + //发起人 + /*if(StringUtils.isNotBlank(verifyInitiator)){ + nameCn = "验证符合性确认发起人"; + nameEn = "verify conformance validates the originator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYINITIATOR.getValue()); + }*/ + + //责任人 + if (StringUtils.isNotBlank(verifyDuty)) { + nameCn = "验证符合性确认责任人"; + nameEn = "verify conformance to confirm the responsible person "; + //验证人员是否存在 + sysUserVerify(projectLawsInventoryEO, errorMsg, msgList, verifyDuty, sysUserList, nameCn, nameEn, ProjectRoleEnum.VERIFYDUTY.getValue()); + } + + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, verifyDueDate, msgList, "截止时间", "due date"); + if (flag) { + projectLawsInventoryEO.setVerifyDueDate(verifyDueDate); + } + } + return msgList; + } +// private void importDatas(List dataList, +// List dictItemList, +// String zipEntryName, +// File saveDirectory, +// ProjectLawsInventoryEO projectLawsInventoryEOTemp, +// List categoryList, +// String dataSource) { +// String dictId = sysCategoryMapper.getDictId("deliverable_template"); +// List collect = categoryList.stream().filter(e -> e.getSysDictId().equals(dictId)).collect(Collectors.toList()); +// List treeNameList = new ArrayList<>(); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// treeNameList = collect.stream().map(SysCategory::getName).collect(Collectors.toList()); +// }else{ +// treeNameList = collect.stream().map(SysCategory::getEnName).collect(Collectors.toList()); +// } +// int i = 3; +// List msgList = new ArrayList<>(); +// String value = ""; +// boolean flag = true; +// +// //编号验证 +// verifySerialNumber(dataList,projectLawsInventoryEOTemp,dataSource); +// for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { +// i++; +// String errorMsg = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// errorMsg = "第" + i + "行:"; +// }else{ +// errorMsg = i + " line:"; +// } +// //编号 +// String serialNumber = projectLawsInventoryEO.getSerialNumber(); +// //子标题subtitle +// String subtitle = projectLawsInventoryEO.getSubtitle(); +// //WVTA ID +// String wvtaId = projectLawsInventoryEO.getWvtaId(); +// //备注 remark +// String remark = projectLawsInventoryEO.getRemark(); +// //认证级别 +// String attestationRank = projectLawsInventoryEO.getAttestationRank(); +// //责任领域 +// String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); +// //认证类型 +// String attestationType = projectLawsInventoryEO.getAttestationType(); +// //实施类别 +// String implementType = projectLawsInventoryEO.getImplementType(); +// //法规工程师regulationOwnerId +// String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); +// +// //认证工程师homologationEngineerId +// String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); +// +// //工程接口人engineeringInterfacePerson +// String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); +// +// //设计交付物类型 +// String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); +// //设计发起人 +// String designInitiator = projectLawsInventoryEO.getDesignInitiatorId(); +// //设计责任人 +// String designDuty = projectLawsInventoryEO.getDesignDutyId(); +// //设计截止时间designDueDate +// Date designDueDate = projectLawsInventoryEO.getDesignDueDate(); +// +// //pre交付物类型 +// String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); +// //pre发起人 +// String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiatorId(); +// //pre责任人 +// String prehomoDuty = projectLawsInventoryEO.getPrehomoDutyId(); +// //pre截止时间prehomoDueDate +// Date prehomoDueDate = projectLawsInventoryEO.getPrehomoDueDate(); +// +// //确认交付物类型 +// String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); +// //确认发起人 +// String verifyInitiator = projectLawsInventoryEO.getVerifyInitiatorId(); +// //确认责任人 +// String verifyDuty = projectLawsInventoryEO.getVerifyDutyId(); +// //确认截止时间verifyDueDate +// Date verifyDueDate = projectLawsInventoryEO.getVerifyDueDate(); +// +// //文件 +// String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); +// String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); +// String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); +// +// //编号(输入框必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, serialNumber, "编号", "Number"); +// +// //子标题 +// if(StringUtils.isNotBlank(subtitle)){ +// if(subtitle.length() > 300){ +// String message = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// message = errorMsg + "子标题不能超过300个字符, "; +// }else{ +// message = errorMsg + " Subheadings cannot be checked more than 300 characters, "; +// } +// msgList.add(message); +// } +// } +// //WVTA ID +// if(StringUtils.isNotBlank(wvtaId)){ +// if(wvtaId.length() > 100){ +// String message = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// message = errorMsg + "WVTA ID不能超过100个字符, "; +// }else{ +// message = errorMsg + " The WVTA ID cannot contain more than 100 characters, "; +// } +// msgList.add(message); +// } +// } +// //备注 remark +// if(StringUtils.isNotBlank(remark)){ +// if(remark.length() > 1000){ +// String message = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// message = errorMsg + "备注不能超过1000个字符, "; +// }else{ +// message = errorMsg + " Note The value cannot exceed 1000 characters, "; +// } +// msgList.add(message); +// } +// } +// +// //实施类别(单选不必填) +// value = pullSingle(dictItemList, projectLawsInventoryEO, errorMsg, implementType,msgList,"实施类别","Usage","implement_type"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setImplementType(value); +// } +// //认证类型(单选不必填) +// value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationType,msgList,"认证类型","Certification Type","attestation_type"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setAttestationType(value); +// } +// +// //认证级别(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, attestationRank,"认证级别","Certification Level"); +// if(flag){ +// value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationRank,msgList,"认证级别","Certification Level","attestation_rank"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setAttestationRank(value); +// } +// } +// +// //责任领域(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, dutyTerritory,"责任领域","Responsible Field"); +// if(flag){ +// value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, dutyTerritory,msgList,"责任领域","Responsible Field","duty_territory"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setDutyTerritory(value); +// } +// } +// //工程接口人(责任领域下的工程接口人) +// Map objectMap = iProjectRelatedPersonnelService.queryPersonByProjectId(projectLawsInventoryEOTemp.getProjectLibraryId(), value); +// +// //法规工程师 +// List> mapLawList = (List>) objectMap.get("lawEngineerList"); +// //认证工程师 +// List> mapCertificationList = (List>) objectMap.get("certificationEngineerList"); +// //工程接口人 +// List> mapPersonList = (List>) objectMap.get("engineeringInterfacePersonList"); +// //所有人 +// List> allPersonList = (List>) objectMap.get("allPersonList"); +// +// String nameCn = ""; +// String nameEn = ""; +// //法规工程师 +// if(StringUtils.isNotBlank(regulationOwnerId)){ +// nameCn = "法规工程师"; +// nameEn = "regulatory engineer"; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, regulationOwnerId, mapLawList,nameCn,nameEn,ProjectRoleEnum.REGULATI_ENGINEER.getValue()); +// } +// +// //认证工程师 +// if(StringUtils.isNotBlank(homologationEngineerId)){ +// nameCn = "认证工程师"; +// nameEn = "certification engineer "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, homologationEngineerId, mapCertificationList,nameCn,nameEn,ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); +// } +// +// //工程接口人 +// if(StringUtils.isNotBlank(engineeringInterfacePerson)){ +// nameCn = "工程接口人"; +// nameEn = "Engineering Interface "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, engineeringInterfacePerson, mapPersonList,nameCn,nameEn,ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue()); +// } +// +// +// //设计 +// //交付物类型 +// value = tree(categoryList,treeNameList, projectLawsInventoryEO, errorMsg, designDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); +// if(StringUtils.isNotBlank(value)){ +// String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); +// projectLawsInventoryEO.setDesignDeliverableType(treeId); +// } +// +// //交付物模板 +// value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, designDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setDesignDeliverableTemplate(value); +// } +// +// //发起人 +// if(StringUtils.isNotBlank(designInitiator)){ +// nameCn = "设计符合性确认发起人"; +// nameEn = "confirm design conformance initiator "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNINITIATOR.getValue()); +// } +// +// //责任人 +// if(StringUtils.isNotBlank(designDuty)){ +// nameCn = "设计符合性确认责任人"; +// nameEn = "confirm design conformance responsible"; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNDUTY.getValue()); +// } +// +// //截止时间 +// flag = dateVerify(projectLawsInventoryEO, errorMsg, designDueDate,msgList,"在产车实施日期","on the production vehicle implementation date"); +// if(flag){ +// projectLawsInventoryEO.setImplementTime(designDueDate); +// } +// +// +// //pre +// //交付物类型 +// value = tree(categoryList, treeNameList,projectLawsInventoryEO, errorMsg, prehomoDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); +// if(StringUtils.isNotBlank(value)){ +// String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); +// projectLawsInventoryEO.setPrehomoDeliverableType(treeId); +// } +// +// //交付物模板 +// value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, prehomoDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setPrehomoDeliverableTemplate(value); +// } +// +// //发起人 +// if(StringUtils.isNotBlank(prehomoInitiator)){ +// nameCn = "Pre-homo确认发起人"; +// nameEn = "Pre-homo identifies the initiator "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, prehomoInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMOINITIATOR.getValue()); +// } +// +// //责任人 +// if(StringUtils.isNotBlank(prehomoDuty)){ +// nameCn = "Pre-homo确认责任人"; +// nameEn = "Pre-homo identifies the person responsible "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList,prehomoDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMODUTY.getValue()); +// } +// +// //截止时间 +// flag = dateVerify(projectLawsInventoryEO, errorMsg, prehomoDueDate,msgList,"在产车实施日期","on the production vehicle implementation date"); +// if(flag){ +// projectLawsInventoryEO.setPrehomoDueDate(prehomoDueDate); +// } +// +// //确认 +// //交付物类型 +// value = tree(categoryList,treeNameList,projectLawsInventoryEO, errorMsg, verifyDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); +// if(StringUtils.isNotBlank(value)){ +// String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); +// projectLawsInventoryEO.setVerifyDeliverableType(treeId); +// } +// +// //交付物模板 +// value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, verifyDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setVerifyDeliverableTemplate(value); +// } +// +// +// //发起人 +// if(StringUtils.isNotBlank(verifyInitiator)){ +// nameCn = "验证符合性确认发起人"; +// nameEn = "verify conformance validates the originator "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYINITIATOR.getValue()); +// } +// +// //责任人 +// if(StringUtils.isNotBlank(verifyDuty)){ +// nameCn = "验证符合性确认责任人"; +// nameEn = "verify conformance to confirm the responsible person "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYDUTY.getValue()); +// } +// +// +// //截止时间 +// flag = dateVerify(projectLawsInventoryEO, errorMsg, verifyDueDate,msgList,"在产车实施日期","on the production vehicle implementation date"); +// if(flag){ +// projectLawsInventoryEO.setVerifyDueDate(verifyDueDate); +// } +// } +// +// if (msgList.size() > 0) { +// //返回报错信息 +// String html = ""; +// for (String s : msgList) { +// html += s + "
"; +// } +// FileUnZip.deleteDir(saveDirectory); +// throw new JeroBootException(html); +// } else { +// if (dataList.size() != 0) { +// this.saveBatch(dataList); +// //项目任务清单数据初始化。 +// List projectTaskInventoryEOList = new ArrayList<>(); +// for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { +// ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); +// String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); +// projectTaskInventoryEO.setId(projectTaskInventoryId); +// projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); +// projectLawsInventoryEO.setStandId(projectLawsInventoryEO.getStandId()); +// projectTaskInventoryEOList.add(projectTaskInventoryEO); +// } +// this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); +// //初始化项目状态评估 +// projectTaskInventoryEOList.forEach(taskInventory -> { +// this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); +// }); +// +// //更新log +// String serialNumber = dataList.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(",")); +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// String username = sysUser.getUsername(); +// String contentLog = username+"向清单中导入了“"+serialNumber+"”"; +// String enContentLog = username+" imported “"+serialNumber+"” into the list."; +// projectLawsInventoryLogEOService.updateLog(contentLog, dataList.get(0).getProjectLibraryId(),CutEnum.CN.getValue()); +// projectLawsInventoryLogEOService.updateLog(enContentLog, dataList.get(0).getProjectLibraryId(),CutEnum.EN.getValue()); +// } +// } +// } + + private String tree(List categoryList, List nameList, ProjectLawsInventoryEO projectLawsInventoryEO, + String errorMsg, String value, List msgList, + String nameCn, String nameEn, String dictCode) { + if (StringUtils.isNotBlank(value)) { + StringBuilder sb = new StringBuilder(); + for (String s : value.split(",")) { + if (!nameList.contains(s)) { + sb.append(s + ","); + } + } + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "中的" + substring + "与数据字典不匹配, "; + } else { + errorMsg += nameEn + " " + substring + " does not match the data dictionary, "; + } + msgList.add(errorMsg); + } else { + StringBuilder sbTemp = new StringBuilder(); + for (String s : value.split(",")) { + List collect = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + collect = categoryList.stream().filter(e -> s.equals(e.getName())).collect(Collectors.toList()); + if (collect.size() != 0) { + sbTemp.append(collect.get(0).getName() + ","); + } + } else { + collect = categoryList.stream().filter(e -> s.equals(e.getEnName())).collect(Collectors.toList()); + if (collect.size() != 0) { + sbTemp.append(collect.get(0).getEnName() + ","); + } + } + } + if (StringUtils.isNotBlank(sbTemp)) { + String substring = sbTemp.substring(0, sbTemp.length() - 1); + return substring; + } + } + } + return null; + } + + private String getTreeId(List categoryList, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, List treeNameList, String value) { + StringBuilder sb = new StringBuilder(); + for (String valueTemp : value.split(",")) { + if (treeNameList.contains(valueTemp)) { + List sysCategoryList = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())) { + sysCategoryList = categoryList.stream().filter(e -> e.getName().equals(valueTemp)).collect(Collectors.toList()); + } else { + sysCategoryList = categoryList.stream().filter(e -> e.getEnName().equals(valueTemp)).collect(Collectors.toList()); + } + if (sysCategoryList.size() != 0) { + sb.append(sysCategoryList.get(0).getId() + ","); + } + } + } + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + return substring; + } + return null; + } + + private void verifySerialNumber(List dataList, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + String dataSource) { + //1. 验证标准号在文档库中是否存在 + List serialNumberList = dataList.stream().map(ProjectLawsInventoryEO::getSerialNumber).collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(BussDocumentLibraryEO::getSerialNumber, serialNumberList); + List bussDocumentLibraryEOList = iBussDocumentLibraryEOService.list(wrapper); + //文档库中可能存在重复的标准号 + List serialNumberListTemp = bussDocumentLibraryEOList.stream().map(BussDocumentLibraryEO::getSerialNumber).distinct().collect(Collectors.toList()); + if (serialNumberList.size() != serialNumberListTemp.size()) { + //存在文档库没有的数据 + List collect = bussDocumentLibraryEOList.stream().map(BussDocumentLibraryEO::getSerialNumber).collect(Collectors.toList()); + List serialNumbers = serialNumberList.stream().filter(e -> !collect.contains(e)).collect(Collectors.toList()); + if (serialNumbers.size() > 0) { + if (CutEnum.CN.getValue().equals(dataList.get(0).getCut())) { + throw new JeroBootException(StringUtils.join(serialNumbers, ",") + "文档库中不存在,不能添加"); + } else { + throw new JeroBootException(StringUtils.join(serialNumbers, ",") + " does not exist in the document library and cannot be added"); + } + } + } + //导入数据为列表导出的数据时,不需要一下验证 + if (!DataSourceEnum.LIST_DATA.getValue().equals(dataSource)) { + //2. 验证标准号在法规清单中是否添加过 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ProjectLawsInventoryEO::getSerialNumber, serialNumberList).in(ProjectLawsInventoryEO::getProjectLibraryId, projectLawsInventoryEOTemp.getProjectLibraryId()); + List projectLawsInventoryEOList = this.list(lambdaQueryWrapper); + List serialNumberTempList = projectLawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).collect(Collectors.toList()); + if (projectLawsInventoryEOList.size() > 0) { + if (CutEnum.CN.getValue().equals(dataList.get(0).getCut())) { + throw new JeroBootException(StringUtils.join(serialNumberTempList, ",") + "已存在,不能重复添加"); + } else { + throw new JeroBootException(StringUtils.join(serialNumberTempList, ",") + " already exists and cannot be added again"); + } + } + //3. 通过编号将导入的数据与文档库进行关联 + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + List collect = bussDocumentLibraryEOList.stream() + .filter(e -> e.getSerialNumber().equals(projectLawsInventoryEO.getSerialNumber())).collect(Collectors.toList()); + projectLawsInventoryEO.setTitle(collect.get(0).getTitle());//标题 + projectLawsInventoryEO.setCorrespondingStandard(collect.get(0).getCorrespondingStandard());//对应标准 + projectLawsInventoryEO.setRegion(collect.get(0).getRegion());//适用地区 + projectLawsInventoryEO.setImplementTime(collect.get(0).getImplementTime());//在产车实施日期 + projectLawsInventoryEO.setXin1Che1Xing2Shi2Shi1Ri4Qi1(collect.get(0).getXin1Che1Xing2Shi2Shi1Ri4Qi1());//新车实施日期 + projectLawsInventoryEO.setStandId(collect.get(0).getId()); + } + } else { + //导入列表数据处理standId(用于点击标准号跳转) + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + List collect = bussDocumentLibraryEOList.stream() + .filter(e -> e.getSerialNumber().equals(projectLawsInventoryEO.getSerialNumber())).collect(Collectors.toList()); + projectLawsInventoryEO.setStandId(collect.get(0).getId()); + } + } + } + + private void personnelVerify(ProjectLawsInventoryEO projectLawsInventoryEO, + String errorMsg, List msgList, + String regulationOwnerId, + List> mapList, + String nameCn, String nameEn, + String fieldNumber) { + //单选 + if (regulationOwnerId.contains(",")) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "导入只能填写一个用户名, "; + } else { + errorMsg += "Only one user name can be entered for" + nameEn + "import, "; + } + msgList.add(errorMsg); + } + + if (mapList.size() != 0) { + int count = 0; + for (Map stringStringMap : mapList) { + String name = stringStringMap.get("name"); + if (regulationOwnerId.equals(name)) { + count++; + if (ProjectRoleEnum.REGULATI_ENGINEER.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setRegulationOwnerId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setHomologationEngineerId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setEngineeringInterfacePerson(stringStringMap.get("value")); + } else if (ProjectRoleEnum.DESIGNINITIATOR.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setDesignInitiatorId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.DESIGNDUTY.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setDesignDutyId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.PREHOMOINITIATOR.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setPrehomoInitiatorId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.PREHOMODUTY.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setPrehomoDutyId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.VERIFYINITIATOR.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setVerifyInitiatorId(stringStringMap.get("value")); + } else if (ProjectRoleEnum.VERIFYDUTY.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setVerifyDutyId(stringStringMap.get("value")); + } + break; + } + } + if (count == 0) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + regulationOwnerId + "与相关人员名单中责任领域下的人员不匹配, "; + } else { + errorMsg += nameEn + regulationOwnerId + "does not match a person under the Responsible Field in the relevant person list, "; + } + msgList.add(errorMsg); + } + } else { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + regulationOwnerId + "与相关人员名单中责任领域下的人员不匹配, "; + } else { + errorMsg += nameEn + regulationOwnerId + "does not match a person under the Responsible Field in the relevant person list, "; + } + msgList.add(errorMsg); + } + } + + private boolean dateVerify(ProjectLawsInventoryEO projectLawsInventoryEO, String errorMsg, + Date field, List msgList, + String nameCn, String nameEn) { + //判断格式是否正确 + boolean flag = true; + if (ObjectUtils.isNotEmpty(field)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String format = sdf.format(field); + if (!DateUtils.isValidDate(format)) { + flag = false; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "格式不正确, 正确格式如:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日"; + } else { + errorMsg += nameEn + " Incorrect format correct format is:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日"; + } + msgList.add(errorMsg); + } + } + return flag; + } + + private boolean must(ProjectLawsInventoryEO projectLawsInventoryEO, String errorMsg, + List msgList, String serialNumber, String nameCn, String nameEn) { + int errorCount = 0; + if (StringUtils.isBlank(serialNumber)) { + errorCount++; + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "为必填项,不能为空, "; + } else { + errorMsg += nameEn + "This parameter is mandatory and cannot be empty, "; + } + msgList.add(errorMsg); + } + if (errorCount == 0) { + return true; + } else { + return false; + } + } + + private String pullMore(List dictItemList, ProjectLawsInventoryEO projectLawsInventoryEO, + String errorMsg, String value, List msgList, + String nameCn, String nameEn, String dictCode) { + List valueList = new ArrayList<>(); + if (StringUtils.isNotBlank(value)) { + List list = Arrays.asList(value.split(",")); + List sysDictItemList = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + sysDictItemList = dictItemList.stream().filter(e -> dictCode.equals(e.getDictCode()) && list.contains(e.getItemText())).collect(Collectors.toList()); + } else { + sysDictItemList = dictItemList.stream().filter(e -> dictCode.equals(e.getDictCode()) && list.contains(e.getEnName())).collect(Collectors.toList()); + } + + if (list.size() == sysDictItemList.size()) { + valueList = sysDictItemList.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); + + } else { + //数据中有与数据字典不匹配的值 + List finalValueList = valueList; + List diffList = list.stream().filter(e -> !finalValueList.contains(e)).collect(Collectors.toList()); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "中的" + StringUtils.join(diffList, ",") + "与数据字典不匹配, "; + } else { + errorMsg += nameEn + " " + StringUtils.join(diffList, ",") + " does not match the data dictionary, "; + } + msgList.add(errorMsg); + } + } + return StringUtils.join(valueList, ","); + } + + private String pullSingle(List dictItemList, ProjectLawsInventoryEO projectLawsInventoryEO, + String errorMsg, String value, List msgList, + String nameCn, String nameEn, String dictCode) { + if (StringUtils.isNotBlank(value)) { + if (value.contains(",")) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + " 为单选项, "; + } else { + errorMsg += nameEn + " Is multiple choice, "; + } + msgList.add(errorMsg); + } else { + List sysDictItemList = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + sysDictItemList = dictItemList.stream().filter(e -> dictCode.equals(e.getDictCode()) && value.equals(e.getItemText())).collect(Collectors.toList()); + } else { + sysDictItemList = dictItemList.stream().filter(e -> dictCode.equals(e.getDictCode()) && value.equals(e.getEnName())).collect(Collectors.toList()); + } + + if (sysDictItemList.size() == 0) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "中的" + value + "与数据字典不匹配, "; + } else { + errorMsg += nameEn + " " + value + " does not match the data dictionary, "; + } + msgList.add(errorMsg); + } else { + return sysDictItemList.get(0).getItemValue(); + } + } + } + return null; + } + + private String templateTransition(String zipEntryName, ProjectLawsInventoryEO projectLawsInventoryEO, + String errorMsg, String designDeliverableTemplate, List msgList, + String nameCn, String nameEn, String dataSource) { + String value = ""; + if (StringUtils.isNotBlank(designDeliverableTemplate)) { + StringBuilder sb = new StringBuilder(); + for (String fileName : designDeliverableTemplate.split(",")) { + List nowFileList = new ArrayList<>(); + if (DataSourceEnum.LIST_DATA.getValue().equals(dataSource)) { + nowFileList = FileUnZip.readFileByFilenameDataList(zipEntryName, fileName, projectLawsInventoryEO.getCut(), errorMsg, msgList, nameCn, nameEn, projectLawsInventoryEO); + } else { + nowFileList = FileUnZip.readFileByFilename(zipEntryName, fileName, projectLawsInventoryEO.getCut(), errorMsg, msgList, nameCn, nameEn); + } + if (nowFileList.size() == 0) { +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// errorMsg += "压缩包中没有" + fileName + "文件; "; +// }else{ +// errorMsg += " Not in the zip package" + fileName + "file; "; +// } +// msgList.add(errorMsg); + } else { + try { + FileInputStream input = new FileInputStream(nowFileList.get(0)); + MultipartFile multipartFile = + new MockMultipartFile(nowFileList.get(0).getName(), nowFileList.get(0).getName(), "text/plain", input); + //文件存入文件表 + OSSFile ossFile = iOSSFileService.uploadLocalOfCos(multipartFile, "", null, null); + if (ObjectUtils.isNotEmpty(ossFile)) { + sb.append(ossFile.getId() + ","); + } + } catch (IOException e) { + log.error("虚拟清单导入" + e.getMessage()); + } + } + } + if (StringUtils.isNotBlank(sb)) { + value = sb.substring(0, sb.length() - 1); + } + } + return value; + } + + private String fieldConvert(String field) { + if (field == null) return null; + switch (field) { + case "*编号": + return "serialNumber"; + case "*Number": + return "serialNumber"; +// case "标题": return "title"; + case "子标题": + return "subtitle"; + case "Sub-Title": + return "subtitle"; + case "适用范围": + return "shi4Yong4Fan4Wei2"; + case "状态": + return "state"; +// case "对应标准": return "correspondingStandard"; + case "实施类别": + return "implementType"; + case "Usage": + return "implementType"; + case "新车实施日期": + return "xin1Che1Xing2Shi2Shi1Ri4Qi1"; +// case "在产车实施日期": return "implementTime"; + case "WVTA ID": + return "wvtaId"; + case "认证类型": + return "attestationType"; + case "Certification Type": + return "attestationType"; + case "*认证级别": + return "attestationRank"; + case "*Certification Level": + return "attestationRank"; + case "适用增补件": + return "applicableSupplement"; + case "Applicable Supplement": + return "applicableSupplement"; + case "技术领域": + return "technologyTerritory"; + case "*责任领域": + return "dutyTerritory"; + case "*Responsible Field": + return "dutyTerritory"; +// case "适用地区": return "region"; + case "备注": + return "remark"; + case "Comments": + return "remark"; + case "法规工程师": + return "regulationOwnerId"; + case "Regulation Engineer": + return "regulationOwnerId"; + case "认证工程师": + return "homologationEngineerId"; + case "Homologation Engineer": + return "homologationEngineerId"; + case "工程接口人": + return "engineeringInterfacePerson"; + case "Engineering Interface": + return "engineeringInterfacePerson"; + case "设计交付物类型": + return "designDeliverableType"; + case "design Deliverable Type": + return "designDeliverableType"; + case "设计交付物模板": + return "designDeliverableTemplate"; + case "design Deliverable Template": + return "designDeliverableTemplate"; + case "设计发起人": + return "designInitiatorId"; + case "design Reviewer": + return "designInitiatorId"; + case "设计责任人": + return "designDutyId"; + case "design Assignee": + return "designDutyId"; + case "设计截止时间": + return "designDueDate"; + case "design Due Date": + return "designDueDate"; + + case "设计交付物说明": + return "designRemark"; + case "design Deliverable Description": + return "designRemark"; + + case "pre交付物类型": + return "prehomoDeliverableType"; + case "pre Deliverable Type": + return "prehomoDeliverableType"; + case "pre交付物模板": + return "prehomoDeliverableTemplate"; + case "pre Deliverable Template": + return "prehomoDeliverableTemplate"; + case "pre发起人": + return "prehomoInitiatorId"; + case "pre Reviewer": + return "prehomoInitiatorId"; + case "pre责任人": + return "prehomoDutyId"; + case "pre Assignee": + return "prehomoDutyId"; + case "pre截止时间": + return "prehomoDueDate"; + case "pre Due Date": + return "prehomoDueDate"; + + case "pre交付物说明": + return "prehomoRemark"; + case "pre Deliverable Description": + return "prehomoRemark"; + + case "验证交付物类型": + return "verifyDeliverableType"; + case "verify Deliverable Type": + return "verifyDeliverableType"; + case "验证交付物模板": + return "verifyDeliverableTemplate"; + case "verify Deliverable Template": + return "verifyDeliverableTemplate"; + case "验证发起人": + return "verifyInitiatorId"; + case "verify Reviewer": + return "verifyInitiatorId"; + case "验证责任人": + return "verifyDutyId"; + case "verify Assignee": + return "verifyDutyId"; + case "验证截止时间": + return "verifyDueDate"; + case "verify Due Date": + return "verifyDueDate"; + + case "验证交付物说明": + return "verifyRemark"; + case "verify Deliverable Description": + return "verifyRemark"; + + case "标题": + return "title"; + case "Title": + return "title"; + + case "清单确认状态": + return "inventoryAffirmStatus"; + case "List Confirmation Status": + return "inventoryAffirmStatus"; + + case "任务确认状态": + return "taskAffirmStatus"; + case "Task Confirmation Status": + return "taskAffirmStatus"; + + case "适用地区": + return "region"; + case "Area": + return "region"; + + case "对应标准": + return "correspondingStandard"; + case "Compare EU/CN": + return "correspondingStandard"; + + case "新车型实施日期": + return "xin1Che1Xing2Shi2Shi1Ri4Qi1"; + case "New Type Execution Date": + return "xin1Che1Xing2Shi2Shi1Ri4Qi1"; + + case "在产车实施日期": + return "implementTime"; + case "New Vehicle Execution Date": + return "implementTime"; + + default: + return null; + //"Deliverable Type,Deliverable Template,initiator,Assignee,Due Date," + + } + } + + + //判断row是否为空 空返回true + public boolean isRowEmpty(Row row) { + if (null == row) { + return true; + } + int firstCellNum = row.getFirstCellNum(); //第一个列位置 + int lastCellNum = row.getLastCellNum(); //最后一列位置 + int nullCellNum = 0; //空列数量 + for (int c = firstCellNum; c < lastCellNum; c++) { + Cell cell = row.getCell(c); + if (null == cell) { + nullCellNum++; + continue; + } + String value = ""; + switch (cell.getCellType()) { + case HSSFCell.CELL_TYPE_NUMERIC: // 数字 + //如果为时间格式的内容 + value = String.valueOf(cell.getNumericCellValue()); + break; + case HSSFCell.CELL_TYPE_STRING: // 字符串 + value = cell.getStringCellValue(); + break; + case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean + value = cell.getBooleanCellValue() + ""; + break; + case HSSFCell.CELL_TYPE_FORMULA: // 公式 + value = cell.getCellFormula() + ""; + break; + default: + break; + } + if (org.apache.commons.lang.StringUtils.isEmpty(value)) { + nullCellNum++; + } + } + //所有列都为空 + if (nullCellNum == (lastCellNum - firstCellNum)) { + return true; + } + return false; + } + + /** + * 获取文件 + * + * @param dataList + * @return + */ + private List getOssFiles(List dataList) { + List fileIdList = new ArrayList<>(); + List design = new ArrayList<>(); + List prehomo = new ArrayList<>(); + List verify = new ArrayList<>(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDesignDeliverableTemplate())) { + design.add(projectLawsInventoryEO.getDesignDeliverableTemplate()); + } + if (StringUtils.isNotBlank(projectLawsInventoryEO.getPrehomoDeliverableTemplate())) { + prehomo.add(projectLawsInventoryEO.getPrehomoDeliverableTemplate()); + } + if (StringUtils.isNotBlank(projectLawsInventoryEO.getVerifyDeliverableTemplate())) { + verify.add(projectLawsInventoryEO.getVerifyDeliverableTemplate()); + } + } + if (design.size() != 0) { + fileIdList.addAll(design); + } + if (prehomo.size() != 0) { + fileIdList.addAll(prehomo); + } + if (verify.size() != 0) { + fileIdList.addAll(verify); + } + //查询所有的文件 + List fileInfos = new ArrayList<>(); + if (fileIdList.size() != 0) { + fileInfos = iOSSFileService.getFileInfos(StringUtils.join(fileIdList, ",")); + } + return fileInfos; + } + + @NotNull + private StringBuilder getStringBuilder(ProjectLawsInventoryEO projectLawsInventoryEO, List sysCategoryList, String technologyTerritory) { + StringBuilder sb = new StringBuilder(); + for (String s : technologyTerritory.split(",")) { + List collect = sysCategoryList.stream() + .filter(e -> s.equals(e.getId())).collect(Collectors.toList()); + if (collect.size() != 0) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + sb.append(collect.get(0).getName() + ","); + } else { + sb.append(collect.get(0).getEnName() + ","); + } + } + } + return sb; + } + + /** + * 数据转换(文件名称,技术领域,对应标准) + * + * @param dataList + * @param fileInfos + */ + private void dataTransition(List dataList, + List fileInfos, + List sysUserList, + ProjectLawsInventoryEO projectLawsInventoryEOTemp) { + List sysCategoryList = sysCategoryService.list(); + + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + //设计交付物类型 inventoryInfoEO + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDesignDeliverableType())) { + StringBuilder sb = getStringBuilder(projectLawsInventoryEOTemp, sysCategoryList, projectLawsInventoryEO.getDesignDeliverableType()); + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEO.setDesignDeliverableType(substring); + } + } + //pre交付物类型 + if (StringUtils.isNotBlank(projectLawsInventoryEO.getPrehomoDeliverableType())) { + StringBuilder sb = getStringBuilder(projectLawsInventoryEOTemp, sysCategoryList, projectLawsInventoryEO.getPrehomoDeliverableType()); + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEO.setPrehomoDeliverableType(substring); + } + } + //验证交付物类型 + if (StringUtils.isNotBlank(projectLawsInventoryEO.getVerifyDeliverableType())) { + StringBuilder sb = getStringBuilder(projectLawsInventoryEOTemp, sysCategoryList, projectLawsInventoryEO.getVerifyDeliverableType()); + if (StringUtils.isNotBlank(sb)) { + String substring = sb.substring(0, sb.length() - 1); + projectLawsInventoryEO.setVerifyDeliverableType(substring); + } + } + + + //清单确认状态 inventoryAffirmStatus + if (StringUtils.isNotBlank(projectLawsInventoryEO.getInventoryAffirmStatus())) { + String stateName = stateTransition(projectLawsInventoryEO.getInventoryAffirmStatus()); + projectLawsInventoryEO.setInventoryAffirmStatusName(stateName); + } + //任务确认状态 taskAffirmStatus + if (StringUtils.isNotBlank(projectLawsInventoryEO.getTaskAffirmStatus())) { + String stateName = stateTransition(projectLawsInventoryEO.getTaskAffirmStatus()); + projectLawsInventoryEO.setTaskAffirmStatusName(stateName); + } + //法规工程师 regulationOwnerId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getRegulationOwnerId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getRegulationOwnerId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setRegulationOwnerName(collect.get(0).getUsername()); + } + } + + //认证工程师 homologationEngineerId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getHomologationEngineerId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getHomologationEngineerId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setHomologationEngineerName(collect.get(0).getUsername()); + } + } + + //工程接口人 engineeringInterfacePerson + if (StringUtils.isNotBlank(projectLawsInventoryEO.getEngineeringInterfacePerson())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getEngineeringInterfacePerson())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setEngineeringInterfacePersonName(collect.get(0).getUsername()); + } + } + + //设计符合性确认发起人designInitiatorId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDesignInitiatorId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getDesignInitiatorId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setDesignInitiatorName(collect.get(0).getUsername()); + } + } + + //设计符合性确认责任人designDutyId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getDesignDutyId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getDesignDutyId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setDesignDutyIdName(collect.get(0).getUsername()); + } + } + + //PreHomo确认发起人prehomoInitiatorId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getPrehomoInitiatorId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getPrehomoInitiatorId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setPrehomoInitiatorName(collect.get(0).getUsername()); + } + } + + //PreHomo确认责任人prehomoDutyId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getPrehomoDutyId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getPrehomoDutyId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setPrehomoDutyName(collect.get(0).getUsername()); + } + } + + //验证符合性确认发起人verifyInitiatorId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getVerifyInitiatorId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getVerifyInitiatorId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setVerifyInitiatorName(collect.get(0).getUsername()); + } + } + + //验证符合性确认责任人verifyDutyId + if (StringUtils.isNotBlank(projectLawsInventoryEO.getVerifyDutyId())) { + List collect = sysUserList.stream() + .filter(e -> e.getId().equals(projectLawsInventoryEO.getVerifyDutyId())).collect(Collectors.toList()); + if (collect.size() != 0) { + projectLawsInventoryEO.setVerifyDutyIdName(collect.get(0).getUsername()); + } + } + + String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); + String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); + String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); + //设计交付物模板 + if (StringUtils.isNotBlank(designDeliverableTemplate)) { + String designDeliverableTemplateName = template(fileInfos, designDeliverableTemplate); + projectLawsInventoryEO.setDesignDeliverableTemplateName(designDeliverableTemplateName); + } + //设计交付物模板 + if (StringUtils.isNotBlank(prehomoDeliverableTemplate)) { + String prehomoDeliverableTemplateName = template(fileInfos, prehomoDeliverableTemplate); + projectLawsInventoryEO.setPrehomoDeliverableTemplateName(prehomoDeliverableTemplateName); + + } + //设计交付物模板 + if (StringUtils.isNotBlank(verifyDeliverableTemplate)) { + String verifyDeliverableTemplateName = template(fileInfos, verifyDeliverableTemplate); + projectLawsInventoryEO.setVerifyDeliverableTemplateName(verifyDeliverableTemplateName); + } + } + } + + private String stateTransition(String state) { + String result = ""; + if (InventoryAffirmStatusEnum.NOT_STARTED.getValue().equals(state)) { + result = InventoryAffirmStatusEnum.NOT_STARTED.getName(); + + } else if (InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue().equals(state)) { + result = InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getName(); + + } else if (InventoryAffirmStatusEnum.ACCEPTED.getValue().equals(state)) { + result = InventoryAffirmStatusEnum.ACCEPTED.getName(); + + } else if (InventoryAffirmStatusEnum.REJECTED.getValue().equals(state)) { + result = InventoryAffirmStatusEnum.REJECTED.getName(); + } + return result; + } + + /** + * 模板名称转换 + * + * @param fileInfos + * @param value + * @return + */ + private String template(List fileInfos, String value) { + StringBuilder sb = new StringBuilder(); + for (String s : value.split(",")) { + List collect = fileInfos.stream().filter(e -> s.equals(e.getId())).collect(Collectors.toList()); + if (collect.size() != 0) { + sb.append(collect.get(0).getFileName() + ","); + } + } + String substring = ""; + if (StringUtils.isNotBlank(sb)) { + substring = sb.substring(0, sb.length() - 1); + } + return substring; + } + + private void exportFile(List dataList, List fileInfos) throws IOException { + if (fileInfos.size() != 0) { + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); + String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); + String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); + String serialNumber = projectLawsInventoryEO.getSerialNumber(); + if (StringUtils.isBlank(serialNumber)) { + continue; + } + List designFileList = new ArrayList<>(); + List prehomoFileList = new ArrayList<>(); + List verifyFileList = new ArrayList<>(); + List oSSFileList = new ArrayList<>(); + if (StringUtils.isNotBlank(designDeliverableTemplate)) { + designFileList = fileInfos.stream().filter(e -> designDeliverableTemplate.contains(e.getId())).collect(Collectors.toList()); + oSSFileList.addAll(designFileList); + } + if (StringUtils.isNotBlank(prehomoDeliverableTemplate)) { + prehomoFileList = fileInfos.stream().filter(e -> prehomoDeliverableTemplate.contains(e.getId())).collect(Collectors.toList()); + oSSFileList.addAll(prehomoFileList); + } + if (StringUtils.isNotBlank(verifyDeliverableTemplate)) { + verifyFileList = fileInfos.stream().filter(e -> verifyDeliverableTemplate.contains(e.getId())).collect(Collectors.toList()); + oSSFileList.addAll(verifyFileList); + } + + if (oSSFileList.size() != 0) { + if (serialNumber.contains("/")) { + serialNumber = serialNumber.replaceAll("/", "-"); + } + String fileNowPath = uploadpath + "/tempZip/" + serialNumber; + File file = new File(fileNowPath); + if (file.exists()) { + file.delete(); + } + file.mkdirs(); + for (OSSFile ossFile : oSSFileList) { + String url = ossFile.getUrl(); + if (StringUtils.isNotBlank(url)) { + //判断文件是否存在 + boolean b = CosBootUtil.doesObjectExist(url); + if (b) { + InputStream download = CosBootUtil.download(url); + copyFile(download, fileNowPath + File.separator + ossFile.getFileName()); + } + } + } + } + } + } + } + + /** + * 验证用户是否是该项目的studio工程师。 + * + * @param projectLibraryId + * @param cut + */ + public void isStudio(String projectLibraryId, String cut) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + int roleCode = this.checkUserRole(projectLibraryId, currentUser.getId(), ""); + if (roleCode != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue())) { + String errorMessage = ""; + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + errorMessage = "该用户不是这个项目的studio工程师,没有权限操作!"; + } else { + errorMessage = "This user is not a studio engineer for this project and does not have permission to operate!"; + } + throw new JeroBootException(errorMessage); + } + } + + //表格高度 + private static int high = 25; + //表格宽度 + private static int widthPercentage = 100; + + @Override + public void downloadReport(Map params, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { + String filename = "法规清单报告"; + + File file = null; + InputStream fin = null; + ServletOutputStream out = null; + + String filePar = null; + // 文件夹路径 + filePar = exportPdfTempPath + new Date().getTime(); + File myPath = new File(filePar); + file = new File(filePar + "/" + filename + new Date().getTime() + ".pdf"); + if (!myPath.exists()) { + myPath.mkdirs(); + } + + /*******pdf文件内容生成开始*********/ + Document document = new Document(PageSize.A4, 25, 25, 25, 25); + + //设中文字体 + BaseFont bfChinese = null; + try { + //bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); // 该方式不好用。 + + //创建一个支持中文的字体,字体为本地下载的字体 + bfChinese = BaseFont.createFont(simfangFontFilePath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + } catch (Exception e) { + e.printStackTrace(); + } + + //创建标题 //size:26 一号字体 + Font f26 = new Font(bfChinese, 18, Font.NORMAL); + //Font f10 = new Font(bfChinese, 10, Font.NORMAL); + //Font f12 = new Font(bfChinese, 12, Font.NORMAL); + Font f8 = new Font(bfChinese, 8, Font.NORMAL); + Paragraph title1 = new Paragraph("ComplianceReport-Template", f26); + title1.setAlignment(Element.ALIGN_CENTER); + title1.setAlignment(Element.ALIGN_CENTER); + Chapter chapter1 = new Chapter(title1, 1); + chapter1.setNumberDepth(0); + Section section1 = chapter1; + + try { + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); + } catch (DocumentException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + document.open(); + + // 创建4列的表格 + int colNumber = 4; + PdfPTable tableBasic = new PdfPTable(colNumber); + //设置段落上下空白 + //tableBasic.setSpacingBefore(25); + //tableBasic.setSpacingAfter(25); + + section1.add(tableBasic); + document.add(chapter1); + + String cut = (String) params.get("cut"); + String id = (String) params.get("id");//法规id + + QueryWrapper lawsInventoryQueryWrapper = new QueryWrapper<>(); + lawsInventoryQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getId, id); + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectOne(lawsInventoryQueryWrapper); + params.put("projectLawsInventoryEO", projectLawsInventoryEO); + + QueryWrapper taskInventoryQueryWrapper = new QueryWrapper<>(); + taskInventoryQueryWrapper.lambda().eq(ProjectTaskInventoryEO::getProjectLawsInventoryId, id); + ProjectTaskInventoryEO projectTaskInventoryEO = projectTaskInventoryEOService.getBaseMapper().selectOne(taskInventoryQueryWrapper); + params.put("projectTaskInventoryEO", projectTaskInventoryEO); + + QueryWrapper libraryBaseQueryWrapper = new QueryWrapper<>(); + libraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getId, projectLawsInventoryEO.getProjectLibraryId()); + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(libraryBaseQueryWrapper); + params.put("projectLibraryBase", projectLibraryBase); + + QueryWrapper projectNameQueryWrapper = new QueryWrapper<>(); + projectNameQueryWrapper.lambda().eq(ProjectNameInfoEO::getId, projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameQueryWrapper); + params.put("projectNameInfoEO", projectNameInfoEO); + + //设置ProgramInformation内容 + setProgramInformation(tableBasic, document, f8, params); + + //设置ComplianceAttachments 验证符合性流程里最后通过审批的 “ 工程确认 ” 中的附件 内容 + setComplianceAttachments(new PdfPTable(2), document, f8); + + //设置ComplianceResult 内容 + setComplianceResult(new PdfPTable(2), document, f8, params); + + //审核历史表头 + String[] auditHistoryHead = new String[]{"Result", "Opinion", "Node", "Operator", "Datetime"}; + + //设置DesignComplianceCheckApprovals (设计符合性确认的审批历史数据,没有就空着) 内容 + setDesignComplianceCheckApprovals(new PdfPTable(auditHistoryHead.length), document, f8, auditHistoryHead, params); + + //设置ValidationComplianceCheckApprovals (验证符合性确认的审批历史数据,没有就空着) 内容 + setValidationComplianceCheckApprovals(new PdfPTable(auditHistoryHead.length), document, f8, auditHistoryHead, params); + + document.close(); + + try { + fin = new FileInputStream(file); + resp.setCharacterEncoding("utf-8"); + resp.setContentType("application/pdf"); + + // 设置浏览器以下载的方式处理该文件 + if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { + filename = URLEncoder.encode(filename, "UTF-8"); + } else { + filename = new String(filename.getBytes("UTF-8"), "ISO8859-1"); + } + resp.setHeader("Content-Disposition", "attachment;filename=" + filename + ".pdf"); + out = resp.getOutputStream(); + + // 缓冲区 + byte[] buffer = new byte[512]; + int bytesToRead = -1; + + // 通过循环将读入的Word文件的内容输出到浏览器中 + while ((bytesToRead = fin.read(buffer)) != -1) { + out.write(buffer, 0, bytesToRead); + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + try { + if (fin != null) { + fin.close(); + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + if (file != null) { + // 删除临时文件 + file.delete(); + } + + if (myPath != null) { + // 删除临时文件夹 + myPath.delete(); + } + } + } + + private PdfPCell pdfTableStyle(String content, Font font, int high, boolean isAlignCenter, boolean isAlignMidde) { + PdfPCell pdfPCell = new PdfPCell(new Phrase(content, font)); + pdfPCell.setMinimumHeight(high); + pdfPCell.setUseAscender(true); // 设置可以居中 + if (isAlignCenter) { + pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中 + } + if (isAlignMidde) { + pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中 + } + return pdfPCell; + } + + public void setProgramInformation(PdfPTable tableBase, Document document, Font fontSize, Map params) throws DocumentException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + String cut = (String) params.get("cut"); + + ProjectLawsInventoryEO projectLawsInventoryEO = (ProjectLawsInventoryEO) params.get("projectLawsInventoryEO"); + ProjectTaskInventoryEO projectTaskInventoryEO = (ProjectTaskInventoryEO) params.get("projectTaskInventoryEO"); + ProjectLibraryBase projectLibraryBase = (ProjectLibraryBase) params.get("projectLibraryBase"); + ProjectNameInfoEO projectNameInfoEO = (ProjectNameInfoEO) params.get("projectNameInfoEO"); + + tableBase.setHorizontalAlignment(Element.ALIGN_CENTER);// 居左 + tableBase.setTotalWidth(500f);//表格的总宽度 + tableBase.setWidthPercentage(100);// 表格的宽度百分比 + + PdfPTable tableName = new PdfPTable(1); + //设置段落上空白 + tableName.setSpacingBefore(25); + //设置标题长度占纸张比例 + tableName.setWidthPercentage(widthPercentage); + //给表格赋值 + PdfPCell programInformation = pdfTableStyle("Program Information", fontSize, 10, false, false); + programInformation.disableBorderSide(15); + tableName.addCell(programInformation); + //将表格添加到文档对象中 + document.add(tableName); + + // cell 11 第一行 第一列 + PdfPCell cell11 = pdfTableStyle("CR No.", fontSize, 50, true, true); + tableBase.addCell(cell11); + PdfPCell cell12 = pdfTableStyle("Xxx(自动生成NIO-日期-序号)NIO-2022041301", fontSize, 50, true, true); + tableBase.addCell(cell12); + PdfPCell cell13 = pdfTableStyle("CR Status", fontSize, 50, true, true); + tableBase.addCell(cell13); + + String flowStatus = ""; + if (StringUtils.isNotEmpty(projectTaskInventoryEO.getVerifyStatus())) { + flowStatus = projectTaskInventoryEO.getVerifyStatus() + ","; + } + if (StringUtils.isNotEmpty(projectTaskInventoryEO.getPrehomoStatus())) { + flowStatus += projectTaskInventoryEO.getPrehomoStatus() + ","; + } + if (StringUtils.isNotEmpty(projectTaskInventoryEO.getVerifyStatus())) { + flowStatus += projectTaskInventoryEO.getVerifyStatus() + ","; + } + if (StringUtils.isNotEmpty(flowStatus)) { + flowStatus = flowStatus.substring(0, flowStatus.length() - 1); + } + PdfPCell cell14 = pdfTableStyle(flowStatus, fontSize, 50, true, true); + tableBase.addCell(cell14); + + // cell 21 第二行 第一列 + PdfPCell cell21 = pdfTableStyle("Regulation", fontSize, 50, true, true); + tableBase.addCell(cell21); + PdfPCell cell22 = pdfTableStyle(projectLawsInventoryEO.getSerialNumber(), fontSize, 50, true, true); + tableBase.addCell(cell22); + PdfPCell cell23 = pdfTableStyle("Subject", fontSize, 50, true, true); + tableBase.addCell(cell23); + PdfPCell cell24 = pdfTableStyle(projectLawsInventoryEO.getTitle(), fontSize, 50, true, true); + tableBase.addCell(cell24); + // cell 31 第三行 第一列 + PdfPCell cell31 = pdfTableStyle("Project", fontSize, 50, true, true); + tableBase.addCell(cell31); + PdfPCell cell32 = pdfTableStyle(projectNameInfoEO.getProjectName(), fontSize, 50, true, true); + tableBase.addCell(cell32); + PdfPCell cell33 = pdfTableStyle("Market", fontSize, 50, true, true); + tableBase.addCell(cell33); + + List regionDictList = sysDictItemServiceImpl.selectItemsByDictCode("region"); + List marketList = new ArrayList<>(); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + marketList = regionDictList.stream().filter(e -> StringUtils.equals(e.getItemValue(), projectLibraryBase.getTargetMarket())).map(SysDictItem::getItemText).distinct().collect(Collectors.toList()); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + marketList = regionDictList.stream().filter(e -> StringUtils.equals(e.getItemValue(), projectLibraryBase.getTargetMarket())).map(SysDictItem::getEnName).distinct().collect(Collectors.toList()); + } + String market = ""; + if (CollectionUtils.isNotEmpty(marketList)) { + market = marketList.get(0); + } + + PdfPCell cell34 = pdfTableStyle(market, fontSize, 50, true, true); + tableBase.addCell(cell34); + // cell 41 第四行 第一列 + PdfPCell cell41 = pdfTableStyle("NT", fontSize, 50, true, true); + tableBase.addCell(cell41); + PdfPCell cell42 = pdfTableStyle("(取项目-数字平台)", fontSize, 50, true, true); + tableBase.addCell(cell42); + PdfPCell cell43 = pdfTableStyle("NP", fontSize, 50, true, true); + tableBase.addCell(cell43); + PdfPCell cell44 = pdfTableStyle("(取项目-车型平台)", fontSize, 50, true, true); + tableBase.addCell(cell44); + + // cell 51 第五行 第一列 + PdfPCell cell51 = pdfTableStyle("Completion Date", fontSize, 50, true, true); + tableBase.addCell(cell51); + String processEndTimeStr = ""; + if (projectTaskInventoryEO.getProcessEndTime() != null) { + processEndTimeStr = sdf.format(projectTaskInventoryEO.getProcessEndTime()); + } + PdfPCell cell52 = pdfTableStyle(processEndTimeStr, fontSize, 50, true, true); + tableBase.addCell(cell52); + PdfPCell cell53 = pdfTableStyle("Responsible Field", fontSize, 50, true, true); + tableBase.addCell(cell53); + + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + String finalDutyTerritory = dutyTerritory; + List dutyTerritoryDictItemList = sysDictItemServiceImpl.selectItemsByDictCode("duty_territory"); + String dutyTerritoryName = ""; + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + dutyTerritoryName = dutyTerritoryDictItemList.stream() + .filter(e -> finalDutyTerritory.contains(e.getItemValue())) + .map(SysDictItem::getItemText) + .collect(Collectors.joining(",")); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + dutyTerritoryName = dutyTerritoryDictItemList.stream() + .filter(e -> finalDutyTerritory.contains(e.getItemValue())) + .map(SysDictItem::getEnName) + .collect(Collectors.joining(",")); + } + PdfPCell cell54 = pdfTableStyle(dutyTerritoryName, fontSize, 50, true, true); + tableBase.addCell(cell54); + + // cell 61 第6行 第一列 + PdfPCell cell61 = pdfTableStyle("R&H Studio Engineer", fontSize, 50, true, true); + tableBase.addCell(cell61); + + String studioEngineer = projectLibraryBase.getStudioEngineer(); + QueryWrapper queryStudioUserWrapper = new QueryWrapper<>(); + queryStudioUserWrapper.lambda().eq(SysUser::getId, studioEngineer); + SysUser studioUserInfo = sysUserMapper.selectOne(queryStudioUserWrapper); + PdfPCell cell62 = pdfTableStyle(studioUserInfo.getUsername(), fontSize, 50, true, true); + tableBase.addCell(cell62); + PdfPCell cell63 = pdfTableStyle("Engineering Interface", fontSize, 50, true, true); + tableBase.addCell(cell63); + + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + QueryWrapper queryEngineeringInterfaceUserWrapper = new QueryWrapper<>(); + queryEngineeringInterfaceUserWrapper.lambda().eq(SysUser::getId, engineeringInterfacePerson); + SysUser engineeringInterfaceInfo = sysUserMapper.selectOne(queryEngineeringInterfaceUserWrapper); + PdfPCell cell64 = pdfTableStyle(engineeringInterfaceInfo.getUsername(), fontSize, 50, true, true); + tableBase.addCell(cell64); + + // cell 71 第7行 第一列 + PdfPCell cell71 = pdfTableStyle("Homologation Engineer", fontSize, 50, true, true); + tableBase.addCell(cell71); + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + QueryWrapper queryHomologationEngineerUserWrapper = new QueryWrapper<>(); + queryHomologationEngineerUserWrapper.lambda().eq(SysUser::getId, homologationEngineerId); + SysUser homologationEngineerInfo = sysUserMapper.selectOne(queryHomologationEngineerUserWrapper); + PdfPCell cell72 = pdfTableStyle(homologationEngineerInfo.getUsername(), fontSize, 50, true, true); + tableBase.addCell(cell72); + PdfPCell cell73 = pdfTableStyle("Regulation Engineer", fontSize, 50, true, true); + tableBase.addCell(cell73); + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + QueryWrapper queryRegulationOwnerUserWrapper = new QueryWrapper<>(); + queryRegulationOwnerUserWrapper.lambda().eq(SysUser::getId, regulationOwnerId); + SysUser regulationOwnerInfo = sysUserMapper.selectOne(queryRegulationOwnerUserWrapper); + PdfPCell cell74 = pdfTableStyle(regulationOwnerInfo.getUsername(), fontSize, 50, true, true); + tableBase.addCell(cell74); + + // cell 81 第8行 第一列 + PdfPCell cell81 = pdfTableStyle(" ", fontSize, 20, true, true); + tableBase.addCell(cell81); + PdfPCell cell82 = pdfTableStyle(" ", fontSize, 20, true, true); + tableBase.addCell(cell82); + PdfPCell cell83 = pdfTableStyle(" ", fontSize, 20, true, true); + tableBase.addCell(cell83); + PdfPCell cell84 = pdfTableStyle(" ", fontSize, 20, true, true); + tableBase.addCell(cell84); + + document.add(tableBase); + + PdfPTable cell9 = new PdfPTable(2); + // 定义表格的宽度 占比 + float[] cell9Width = {0.25f, 0.75f}; + try { + cell9.setWidths(cell9Width); + } catch (DocumentException e) { + e.printStackTrace(); + } + cell9.setWidthPercentage(widthPercentage); //设置标题长度占纸张比例 + cell9.addCell(pdfTableStyle("Description", fontSize, 50, true, true)); + cell9.addCell(pdfTableStyle(" ", fontSize, 50, true, true)); //(导出后自己填写) + document.add(cell9); + } + + public void setComplianceAttachments(PdfPTable tableBase, Document document, Font fontSize) throws DocumentException { + // 定义表格的宽度 + float[] cellsWidth = {0.45f, 0.55f}; + try { + tableBase.setWidths(cellsWidth); + } catch (Exception ex) { + ex.printStackTrace(); + } + + tableBase.setTotalWidth(500f);//表格的总宽度 + tableBase.setWidthPercentage(100);// 表格的宽度百分比 + + // 单元格宽度 + PdfPTable tableName = new PdfPTable(1); + //设置段落上空白 + tableName.setSpacingBefore(25); + tableName.setWidthPercentage(widthPercentage); //设置标题长度占纸张比例 + //给表格赋值 + PdfPCell programInformation = pdfTableStyle("Compliance Attachments", fontSize, 10, false, false); + programInformation.disableBorderSide(15); + tableName.addCell(programInformation); + //将表格添加到文档对象中 + document.add(tableName); + + // cell 11 第一行 第一列 + PdfPCell cell11 = pdfTableStyle("File Name", fontSize, 20, true, true); + tableBase.addCell(cell11); + PdfPCell cell12 = pdfTableStyle("catalogue", fontSize, 20, true, true); + tableBase.addCell(cell12); + // cell 21 第二行 第一列 + PdfPCell cell21 = pdfTableStyle("Checklist.doc", fontSize, 20, true, true); + tableBase.addCell(cell21); + PdfPCell cell22 = pdfTableStyle("Xxx(显示文件所在的相对路径)", fontSize, 20, true, true); + tableBase.addCell(cell22); + // cell 31 第三行 第一列 + PdfPCell cell31 = pdfTableStyle("CADreport.pdf", fontSize, 20, true, true); + tableBase.addCell(cell31); + PdfPCell cell32 = pdfTableStyle("Xxx(显示文件所在的相对路径)", fontSize, 20, true, true); + tableBase.addCell(cell32); + + document.add(tableBase); + } + + public void setComplianceResult(PdfPTable tableBase, Document document, Font fontSize, Map params) throws DocumentException { + String cut = (String) params.get("cut"); + //法规id + String id = (String) params.get("id"); + QueryWrapper lawsInventoryQueryWrapper = new QueryWrapper<>(); + lawsInventoryQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getId, id); + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectOne(lawsInventoryQueryWrapper); + + // 单元格宽度 + float[] cellsWidth = {0.45f, 0.55f}; + try { + tableBase.setWidths(cellsWidth); + } catch (Exception ex) { + ex.printStackTrace(); + } + + tableBase.setTotalWidth(500f);//表格的总宽度 + tableBase.setWidthPercentage(100);// 表格的宽度百分比 + + PdfPTable tableName = new PdfPTable(1); + //设置段落上空白 + tableName.setSpacingBefore(25); + tableName.setWidthPercentage(widthPercentage); //设置标题长度占纸张比例 + //给表格赋值 + PdfPCell programInformation = pdfTableStyle("Compliance Result", fontSize, 10, false, false); + programInformation.disableBorderSide(15); + tableName.addCell(programInformation); + //将表格添加到文档对象中 + document.add(tableName); + + // cell 11 第一行 第一列 + PdfPCell cell11 = pdfTableStyle("Subject", fontSize, 20, true, true); + tableBase.addCell(cell11); + PdfPCell cell12 = pdfTableStyle("Lamp " + projectLawsInventoryEO.getTitle(), fontSize, 20, true, true); + tableBase.addCell(cell12); + // cell 21 第二行 第一列 + PdfPCell cell21 = pdfTableStyle("Conclusion", fontSize, 20, true, true); + tableBase.addCell(cell21); + PdfPCell cell22 = pdfTableStyle("", fontSize, 20, true, true); //(导出后自己填写) + tableBase.addCell(cell22); + // cell 31 第三行 第一列 + PdfPCell cell31 = pdfTableStyle("DiscussionorComments", fontSize, 20, true, true); + tableBase.addCell(cell31); + PdfPCell cell32 = pdfTableStyle("", fontSize, 20, true, true); //(导出后自己填写) + tableBase.addCell(cell32); + + document.add(tableBase); + } + + public void setDesignComplianceCheckApprovals(PdfPTable tableBase, Document document, Font fontSize, String[] auditHistoryHead, Map params) throws DocumentException { + tableBase.setTotalWidth(500f);//表格的总宽度 + tableBase.setWidthPercentage(100);// 表格的宽度百分比 + + PdfPTable tableName = new PdfPTable(1); + //设置段落上空白 + tableName.setSpacingBefore(25); + tableName.setWidthPercentage(widthPercentage); //设置标题长度占纸张比例 + //给表格赋值 + PdfPCell programInformation = pdfTableStyle("designComplianceCheckApprovals", fontSize, 10, false, false); + programInformation.disableBorderSide(15); + tableName.addCell(programInformation); + //将表格添加到文档对象中 + document.add(tableName); + + + for (int i = 0; i < auditHistoryHead.length; i++) { + tableBase.addCell(new Paragraph(auditHistoryHead[i], fontSize)); + } + document.add(tableBase); + } + + public void setValidationComplianceCheckApprovals(PdfPTable tableBase, Document document, Font fontSize, String[] auditHistoryHead, Map params) throws DocumentException { + List> list = new ArrayList<>(); + + Map map1 = new HashMap<>(); + map1.put("Result", ""); + map1.put("Opinion", "Opinion 1"); + map1.put("Node", "Node 1"); + map1.put("Operator", "Operator 1"); + map1.put("Datetime", "Datetime 1"); + list.add(map1); + Map map2 = new HashMap<>(); + map2.put("Result", "Result 2 "); + map2.put("Opinion", "Opinion 2"); + map2.put("Node", ""); + map2.put("Operator", "Operator 2"); + map2.put("Datetime", "Datetime 2"); + list.add(map2); + Map map3 = new HashMap<>(); + map3.put("Result", "Result 3 "); + map3.put("Opinion", "Opinion 3"); + map3.put("Node", "Node 3"); + map3.put("Operator", "Operator 3"); + map3.put("Datetime", "Datetime 3"); + list.add(map3); + + tableBase.setTotalWidth(500f);//表格的总宽度 + tableBase.setWidthPercentage(100);// 表格的宽度百分比 + + PdfPTable tableName = new PdfPTable(1); + //设置段落上空白 + tableName.setSpacingBefore(25); + tableName.setWidthPercentage(widthPercentage); //设置标题长度占纸张比例 + //给表格赋值 + PdfPCell programInformation = pdfTableStyle("validationComplianceCheckApprovals", fontSize, 10, false, false); + programInformation.disableBorderSide(15); + tableName.addCell(programInformation); + //将表格添加到文档对象中 + document.add(tableName); + + for (int i = 0; i < auditHistoryHead.length; i++) { + tableBase.addCell(new Paragraph(auditHistoryHead[i], fontSize)); + } + + for (Map map : list) { + tableBase.addCell(new Paragraph(map.get("Result").toString(), fontSize)); + tableBase.addCell(new Paragraph(map.get("Opinion").toString(), fontSize)); + tableBase.addCell(new Paragraph(map.get("Node").toString(), fontSize)); + tableBase.addCell(new Paragraph(map.get("Operator").toString(), fontSize)); + tableBase.addCell(new Paragraph(map.get("Datetime").toString(), fontSize)); + } + document.add(tableBase); + } + + /** + * 下载docx报告 + * + * @param params + * @param req + * @param resp + */ + @Override + public void downloadDocxReport(Map params, HttpServletRequest req, HttpServletResponse resp) { + File exportFile = null; + InputStream fin = null; + ServletOutputStream out = null; + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //导出只有英文,去除中英文切换。 + params.put("cut", CutEnum.EN.getValue()); + String id = (String) params.get("id"); + String cut = (String) params.get("cut"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + log.debug("导出word报告,查询数据开始 ============================================================================="); + //查询数据 + QueryWrapper lawsInventoryQueryWrapper = new QueryWrapper<>(); + lawsInventoryQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getId, id); + ProjectLawsInventoryEO projectLawsInventory = this.baseMapper.selectOne(lawsInventoryQueryWrapper); + List projectLawsInventoryEOList = new ArrayList<>(); + projectLawsInventoryEOList.add(projectLawsInventory); + this.dataDispose( + projectLawsInventoryEOList, + currentUser, + Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()), + CutEnum.EN.getValue() + ); + + ProjectLawsInventoryEO projectLawsInventoryEO = projectLawsInventoryEOList.get(0); + params.put("projectLawsInventoryEO", projectLawsInventoryEO); + + /*QueryWrapper taskInventoryQueryWrapper = new QueryWrapper<>(); + taskInventoryQueryWrapper.lambda().eq(ProjectTaskInventoryEO::getProjectLawsInventoryId,id); + ProjectTaskInventoryEO projectTaskInventoryEO = projectTaskInventoryEOService.getBaseMapper().selectOne(taskInventoryQueryWrapper); + params.put("projectTaskInventoryEO",projectTaskInventoryEO);*/ + + QueryWrapper libraryBaseQueryWrapper = new QueryWrapper<>(); + libraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getId, projectLawsInventoryEO.getProjectLibraryId()); + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(libraryBaseQueryWrapper); + params.put("projectLibraryBase", projectLibraryBase); + + QueryWrapper projectNameQueryWrapper = new QueryWrapper<>(); + projectNameQueryWrapper.lambda().eq(ProjectNameInfoEO::getId, projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameQueryWrapper); + params.put("projectNameInfoEO", projectNameInfoEO); + + + final Map dataMap = new HashMap<>(); + //对应 CR No + dataMap.put("crNo", String.valueOf(new SimpleDateFormat("yyyyMMddHHmmssSSSS").format(new Date()))); + + String flowStatus = ""; + + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyFlowStatusName())) { + flowStatus += projectLawsInventoryEO.getVerifyFlowStatusName() + ","; + } + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignFlowStatusName())) { + flowStatus += projectLawsInventoryEO.getDesignFlowStatusName() + ","; + } + if (StringUtils.isNotEmpty(flowStatus)) { + flowStatus = flowStatus.substring(0, flowStatus.length() - 1); + } + + //对应 crStatus + dataMap.put("FLOW_STATUS", StringUtils.isNotEmpty(flowStatus) ? flowStatus : ""); + //对应 Regulation + dataMap.put("REGULATION", StringUtils.isNotEmpty(projectLawsInventoryEO.getSerialNumber()) ? projectLawsInventoryEO.getSerialNumber() : ""); + //对应 Subject + dataMap.put("SUBJECT", StringUtils.isNotEmpty(projectLawsInventoryEO.getTitle()) ? projectLawsInventoryEO.getTitle() : ""); + //对应 Project + dataMap.put("PROJECT_NAME", StringUtils.isNotEmpty(projectNameInfoEO.getProjectName()) ? projectNameInfoEO.getProjectName() : ""); + + List regionDictList = sysDictItemServiceImpl.selectItemsByDictCode("region"); + String market = ""; + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + market = regionDictList.stream() + .filter(e -> projectLibraryBase.getTargetMarket().contains(e.getItemValue())) + .map(SysDictItem::getItemText) + .collect(Collectors.joining(",")); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + market = regionDictList.stream() + .filter(e -> projectLibraryBase.getTargetMarket().contains(e.getItemValue())) + .map(SysDictItem::getEnName) + .collect(Collectors.joining(",")); + } + //对应 Market + dataMap.put("MARKET", StringUtils.isNotEmpty(market) ? market : ""); + //对应 nt 数字平台 + dataMap.put("NT", StringUtils.isNotEmpty(projectNameInfoEO.getDigitalPlatform()) ? projectNameInfoEO.getDigitalPlatform() : ""); + //对应 np 车型平台 + dataMap.put("NP", StringUtils.isNotEmpty(projectNameInfoEO.getVehiclePlatform()) ? projectNameInfoEO.getVehiclePlatform() : ""); + String processEndTimeStr = ""; + // 流程最后结束的时间 + if (projectLawsInventoryEO.getProcessEndTime() != null) { + processEndTimeStr = sdf.format(projectLawsInventoryEO.getProcessEndTime()); + } + dataMap.put("COMPLETION_DATE", StringUtils.isNotEmpty(processEndTimeStr) ? processEndTimeStr : ""); + + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + String finalDutyTerritory = dutyTerritory; + List dutyTerritoryDictItemList = sysDictItemServiceImpl.selectItemsByDictCode("duty_territory"); + String dutyTerritoryName = ""; + if (StringUtils.isNotEmpty(finalDutyTerritory)) { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + dutyTerritoryName = dutyTerritoryDictItemList.stream() + .filter(e -> finalDutyTerritory.contains(e.getItemValue())) + .map(SysDictItem::getItemText) + .collect(Collectors.joining(",")); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + dutyTerritoryName = dutyTerritoryDictItemList.stream() + .filter(e -> finalDutyTerritory.contains(e.getItemValue())) + .map(SysDictItem::getEnName) + .collect(Collectors.joining(",")); + } + } + dataMap.put("RESPONSIBLE_FIELD", StringUtils.isNotEmpty(dutyTerritoryName) ? dutyTerritoryName : ""); + + String studioEngineer = projectLibraryBase.getStudioEngineer(); + QueryWrapper queryStudioUserWrapper = new QueryWrapper<>(); + queryStudioUserWrapper.lambda().eq(SysUser::getId, studioEngineer); + SysUser studioUserInfo = sysUserMapper.selectOne(queryStudioUserWrapper); + dataMap.put("STUDIO", StringUtils.isNotEmpty(studioUserInfo.getUsername()) ? studioUserInfo.getUsername() : ""); + + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + String engineeringInterfaceName = ""; + if (StringUtils.isNotEmpty(engineeringInterfacePerson)) { + QueryWrapper queryEngineeringInterfaceUserWrapper = new QueryWrapper<>(); + queryEngineeringInterfaceUserWrapper.lambda().eq(SysUser::getId, engineeringInterfacePerson); + SysUser engineeringInterfaceInfo = sysUserMapper.selectOne(queryEngineeringInterfaceUserWrapper); + engineeringInterfaceName = engineeringInterfaceInfo.getUsername(); + } + + dataMap.put("ENGINEERING", StringUtils.isNotEmpty(engineeringInterfaceName) ? engineeringInterfaceName : ""); + + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + String homologationEngineerName = ""; + if (StringUtils.isNotEmpty(homologationEngineerId)) { + QueryWrapper queryHomologationEngineerUserWrapper = new QueryWrapper<>(); + queryHomologationEngineerUserWrapper.lambda().eq(SysUser::getId, homologationEngineerId); + SysUser homologationEngineerInfo = sysUserMapper.selectOne(queryHomologationEngineerUserWrapper); + homologationEngineerName = homologationEngineerInfo.getUsername(); + } + dataMap.put("HOMOLOGATION", StringUtils.isNotEmpty(homologationEngineerName) ? homologationEngineerName : ""); + + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + String regulationOwnerName = ""; + if (StringUtils.isNotEmpty(regulationOwnerId)) { + QueryWrapper queryRegulationOwnerUserWrapper = new QueryWrapper<>(); + queryRegulationOwnerUserWrapper.lambda().eq(SysUser::getId, regulationOwnerId); + SysUser regulationOwnerInfo = sysUserMapper.selectOne(queryRegulationOwnerUserWrapper); + regulationOwnerName = regulationOwnerInfo.getUsername(); + } + dataMap.put("REGULATION_ENG", StringUtils.isNotEmpty(regulationOwnerName) ? regulationOwnerName : ""); + log.debug("导出word报告,查询数据结束 ============================================================================="); + log.debug("导出word报告,获取模板开始 ============================================================================="); + //File templateFile = new File(exportPdfTempPath + "temp/ComplianceReportTemplate.docx"); + InputStream inputStream = PlatformProjectLawsInventoryEOServiceImpl.class.getClassLoader().getResourceAsStream("exportPdfTemp/ComplianceReportTemplate.docx"); + /*try { + FileUtils.copyInputStreamToFile(inputStream, templateFile); + } catch (IOException e) { + e.printStackTrace(); + }*/ + + + log.debug("导出word报告,获取模板结束 ============================================================================="); + //if(templateFile != null){ + if (inputStream != null) { + try { + String uuid = UUID.randomUUID().toString(); + //final String TEMP_FILE_PATH = System.getProperty("os.name").toLowerCase().contains("windows") ? System.getProperty("user.dir") + File.separator : "/home/admin/tempfile/"; + final String TEMP_FILE_PATH = exportPdfTempPath + "exportFile/"; + + File pathFile = new File(TEMP_FILE_PATH); + if (!pathFile.exists()) { + pathFile.mkdirs(); + } + String outFile = TEMP_FILE_PATH + uuid + ".docx"; + exportFile = new File(outFile); + FileOutputStream os = new FileOutputStream(outFile); + //WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new FileInputStream(templateFile)); + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(inputStream); + + //验证符合性流程实例id + String verifyPId = projectLawsInventoryEO.getVerifyPId(); + //Compliance Attachments 验证符合性流程里最后通过审批的“工程确认”中的附件 + setTableContent(1, wordMLPackage, params, verifyPId); + //Validation Compliance Check Approvals(验证符合性确认的审批历史数据) + setTableContent(4, wordMLPackage, params, verifyPId); + + //设计符合性流程实例id + String designPId = projectLawsInventoryEO.getDesignPId(); + //Design Compliance Check Approvals (设计符合性确认的审批历史数据) + setTableContent(3, wordMLPackage, params, designPId); + + WordUtil.replaceVariable(wordMLPackage, dataMap); + Docx4J.save(wordMLPackage, os); + + //将替换后的文档输出出去。 + fin = new FileInputStream(outFile); + resp.setCharacterEncoding("utf-8"); + resp.setContentType("application/docx"); + + String filename = ""; + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + filename = "法规清单报告"; + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + filename = "Compliance List report"; + } + // 设置浏览器以下载的方式处理该文件 + if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { + filename = URLEncoder.encode(filename, "UTF-8"); + } else { + filename = new String(filename.getBytes("UTF-8"), "ISO8859-1"); + } + resp.setHeader("Content-Disposition", "attachment;filename=" + filename + ".docx"); + out = resp.getOutputStream(); + + // 缓冲区 + byte[] buffer = new byte[512]; + int bytesToRead = -1; + + // 通过循环将读入的Word文件的内容输出到浏览器中 + while ((bytesToRead = fin.read(buffer)) != -1) { + out.write(buffer, 0, bytesToRead); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (fin != null) { + fin.close(); + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + if (exportFile != null) { + // 删除导出去的文件 + exportFile.delete(); + } + } + } else { + throw new JeroBootException("路径 :" + exportPdfTempPath + "temp/ComplianceReportTemplate.docx" + " 中没有找到文件"); + } + } + + /** + * 设置表内容 + * + * @param tableIndex 表的下标 + * @param wordMLPackage + * @param params + * @param pId 流程实例id + */ + public void setTableContent(int tableIndex, WordprocessingMLPackage wordMLPackage, Map params, String pId) { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + List> dataList = new ArrayList<>(); + // 设置数据 + if (StringUtils.isNotEmpty(pId)) { + if (tableIndex == 1) { + /*QueryWrapper taskFeedbackQueryWrapper = new QueryWrapper<>(); + taskFeedbackQueryWrapper.lambda().eq(ProjectTaskInventoryFeedbackEO::getActiProcInstId,pId); + List projectTaskInventoryFeedbackEOList = projectTaskInventoryFeedbackEOService.getBaseMapper().selectList(taskFeedbackQueryWrapper); + if(CollectionUtils.isNotEmpty(projectTaskInventoryFeedbackEOList)){ + List fileIdList = projectTaskInventoryFeedbackEOList.stream().map(ProjectTaskInventoryFeedbackEO::getFileId).distinct().collect(Collectors.toList()); + String fileId = StringUtils.join(fileIdList,","); + List fileList = iOSSFileService.getFileInfos(fileId); + if(CollectionUtils.isNotEmpty(fileList)){ + fileList.forEach(file -> { + Map fileMap = new HashMap<>(); + fileMap.put("ITEM_FILENAME", StringUtils.isNotEmpty(file.getFileName()) ? file.getFileName() : ""); + fileMap.put("ITEM_FILEPATH", StringUtils.isNotEmpty(file.getUrl()) ? file.getUrl() : ""); + *//*fileMap.put("item.fileName", file.getFileName()); + fileMap.put("item.filePath", file.getUrl());*//* + dataList.add(fileMap); + }); + } + }*/ + params.put("actiProcInstId", pId); + List processHistoryEOList = processHistoryEOService.queryList(params); + if (CollectionUtils.isNotEmpty(processHistoryEOList)) { + List fileIdList = processHistoryEOList.stream().map(ProcessHistoryEO::getApprovalFile).distinct().collect(Collectors.toList()); + String fileId = StringUtils.join(fileIdList, ","); + List fileList = iOSSFileService.getFileInfos(fileId); + if (CollectionUtils.isNotEmpty(fileList)) { + fileList.forEach(file -> { + Map fileMap = new HashMap<>(); + fileMap.put("ITEM_FILENAME", StringUtils.isNotEmpty(file.getFileName()) ? file.getFileName() : ""); + fileMap.put("ITEM_FILEPATH", StringUtils.isNotEmpty(file.getUrl()) ? file.getUrl() : ""); + /*fileMap.put("item.fileName", file.getFileName()); + fileMap.put("item.filePath", file.getUrl());*/ + dataList.add(fileMap); + }); + } + } + } else if (tableIndex == 3) { + params.put("actiProcInstId", pId); + List processHistoryEOList = processHistoryEOService.queryList(params); + if (CollectionUtils.isNotEmpty(processHistoryEOList)) { + processHistoryEOList.forEach(processHistory -> { + String createTime = sdf.format(processHistory.getCreateTime()); + + Map designMap = new HashMap<>(); + designMap.put("DESIGN_RESULT", StringUtils.isNotEmpty(processHistory.getReviewResult()) ? processHistory.getReviewResult() : ""); + designMap.put("DESIGN_OPINION", StringUtils.isNotEmpty(processHistory.getApprovalOpinion()) ? processHistory.getApprovalOpinion() : ""); + designMap.put("DESIGN_NODE", StringUtils.isNotEmpty(processHistory.getName()) ? processHistory.getName() : ""); + designMap.put("DESIGN_OPERATOR", StringUtils.isNotEmpty(processHistory.getAssignee()) ? processHistory.getAssignee() : ""); + designMap.put("DESIGN_DATETIME", StringUtils.isNotEmpty(createTime) ? createTime : ""); + + /*designMap.put("design.result", processHistory.getReviewResult()); + designMap.put("design.opinion", processHistory.getApprovalOpinion()); + designMap.put("design.node", processHistory.getName()); + designMap.put("design.operator", processHistory.getAssignee()); + designMap.put("design.dateTime", createTime);*/ + dataList.add(designMap); + }); + } + } else if (tableIndex == 4) { + params.put("actiProcInstId", pId); + List processHistoryEOList = processHistoryEOService.queryList(params); + if (CollectionUtils.isNotEmpty(processHistoryEOList)) { + processHistoryEOList.forEach(processHistory -> { + String createTime = sdf.format(processHistory.getCreateTime()); + + Map verifyMap = new HashMap<>(); + verifyMap.put("VERIFY_RESULT", StringUtils.isNotEmpty(processHistory.getReviewResult()) ? processHistory.getReviewResult() : ""); + verifyMap.put("VERIFY_OPINION", StringUtils.isNotEmpty(processHistory.getApprovalOpinion()) ? processHistory.getApprovalOpinion() : ""); + verifyMap.put("VERIFY_NODE", StringUtils.isNotEmpty(processHistory.getName()) ? processHistory.getName() : ""); + verifyMap.put("VERIFY_OPERATOR", StringUtils.isNotEmpty(processHistory.getAssignee()) ? processHistory.getAssignee() : ""); + verifyMap.put("VERIFY_DATETIME", StringUtils.isNotEmpty(createTime) ? createTime : ""); + + /*verifyMap.put("verify.result", processHistory.getReviewResult()); + verifyMap.put("verify.opinion", processHistory.getApprovalOpinion()); + verifyMap.put("verify.node", processHistory.getName()); + verifyMap.put("verify.operator", processHistory.getAssignee()); + verifyMap.put("verify.dateTime", createTime);*/ + dataList.add(verifyMap); + }); + } + } + } + + //构造循环列表的数据 + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(wordMLPackage.getMainDocumentPart().getContent(), find); + Tbl table = (Tbl) find.results.get(tableIndex); + //第二行约定为模板 + Tr dynamicTr = (Tr) table.getContent().get(1); + //获取模板行的xml数据 + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + + for (Map mapList : dataList) { + Tr newTr = (Tr) XmlUtils.unmarshallFromTemplate(dynamicTrXml, mapList);//填充模板行数据 + table.getContent().add(newTr); + } + //删除模板行的占位行 + table.getContent().remove(1); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public static WordprocessingMLPackage getTemplate(String name) throws Docx4JException, FileNotFoundException { + WordprocessingMLPackage template = WordprocessingMLPackage.load(new FileInputStream(new File(name))); + return template; + } + + /** + * 催办 + * + * @param json + * @return + */ + @Override + public Result expediting(JSONObject json) { + String cut = json.getString("cut"); + String ids = json.getString("ids"); + String projectLibraryId = json.getString("projectLibraryId"); + String operateType = json.getString("operateType"); // 操作类型,判断是studio催办 还是法规工程师催办 + if (StringUtils.isEmpty(ids)) { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + throw new JeroBootException("请至少选择一条数据!"); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + throw new JeroBootException("Please select at least one data!"); + } + } + + //法规清单id数组 + List projectLawsInventoryIdList = Arrays.asList(ids.split(",")); + + QueryWrapper lawsInventoryEOQueryWrapper = new QueryWrapper<>(); + lawsInventoryEOQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + lawsInventoryEOQueryWrapper.lambda().in(ProjectLawsInventoryEO::getId, projectLawsInventoryIdList); + List projectLawsInventoryEOList = this.baseMapper.selectList(lawsInventoryEOQueryWrapper); + + // 催办类型 可以只催设计符合性 也可以只催验证符合性 + String expeditingType = json.getString("expeditingType"); + if (StringUtils.contains(expeditingType, OperatorTypeEnum.LAWS_INVENTORY_DESIGN_EXPEDITING.getValue())) { + // 只有studio催办的时候,才会给法规工程师发消息 + if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_STUDIO_EXPEDITING.getValue())) { + // 设计符合性 清单待校核状态数据催办。 + this.designExpeditingToBeChecked(projectLibraryId, projectLawsInventoryEOList); + // 设计符合性 结果待审查状态数据催办。 + this.designExpeditingToBeReviewed(projectLibraryId, projectLawsInventoryEOList); + } + // 设计符合性 清单待确认状态数据催办 + this.designExpeditingToBeConfirmed(projectLibraryId, projectLawsInventoryEOList); + // 设计符合性 结果待提交状态数据催办 + this.designExpeditingToBeSubmitted(projectLibraryId, projectLawsInventoryEOList); + } + if (StringUtils.contains(expeditingType, OperatorTypeEnum.LAWS_INVENTORY_VERIFY_EXPEDITING.getValue())) { + // 只有studio催办的时候,才会给法规工程师发消息 + if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_STUDIO_EXPEDITING.getValue())) { + // 验证符合性 清单待校核状态数据催办。 + this.verifyExpeditingToBeChecked(projectLibraryId, projectLawsInventoryEOList); + // 验证符合性 结果待审查状态数据催办。 + this.verifyExpeditingToBeReviewed(projectLibraryId, projectLawsInventoryEOList); + } + // 验证符合性 清单待确认状态数据催办 + this.verifyExpeditingToBeConfirmed(projectLibraryId, projectLawsInventoryEOList); + // 验证符合性 结果待提交状态数据催办 + this.verifyExpeditingToBeSubmitted(projectLibraryId, projectLawsInventoryEOList); + } + + /*//获取已经发起的 任务确认流程信息(当前处理人) + JSONObject queryFlowCurrentTaskJson = new JSONObject(); + queryFlowCurrentTaskJson.put("projectLawsInventoryIdList",projectLawsInventoryIdList); + queryFlowCurrentTaskJson.put("flowType",FlowTypeEnum.RWQRLC.getValue()); + String result = this.taskFeignClient.queryFlowCurrentTask(queryFlowCurrentTaskJson); + JSONObject jsonObject = JSONObject.parseObject(result); + + QueryWrapper libraryBaseQueryWrapper = new QueryWrapper<>(); + libraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getId,projectLibraryId); + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseMapper.selectOne(libraryBaseQueryWrapper); + + SysUser studioUserInfo = this.sysUserMapper.selectOne( + new QueryWrapper().lambda().eq(SysUser::getId, projectLibraryBase.getStudioEngineer()) + ); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + projectLawsInventoryEOList.forEach(projectLawsInventoryEO -> { + + //如果清单确认状态为待确认的,进行催办 + if(StringUtils.equals(projectLawsInventoryEO.getInventoryAffirmStatus(),InventoryAffirmStatusEnum.LIST_TO_CONFIRM.getValue())){ + List inventoryAffirmUserIdList = new ArrayList<>(); + + if(StringUtils.isEmpty(projectLawsInventoryEO.getHomologationEngineerSubmitStatus())){ + //如果'认证工程师提交状态'为空,则代表认证工程师没提交过,给认证工程师发消息 + inventoryAffirmUserIdList.add(projectLawsInventoryEO.getHomologationEngineerId()); + } + + if(StringUtils.isEmpty(projectLawsInventoryEO.getRegulationOwnerSubmitStatus())){ + //如果'法规工程师提交状态'为空,则代表认证工程师没提交过,给认证工程师发消息 + inventoryAffirmUserIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); + } + + if(CollectionUtils.isNotEmpty(inventoryAffirmUserIdList)){ + //如果清单确认 没办理的用户不为空,给这些人发送消息,清单确认催办 + inventoryAffirmUserIdList = inventoryAffirmUserIdList.stream().distinct().collect(Collectors.toList()); + + log.debug("清单确认待办人员:" + inventoryAffirmUserIdList.toString()); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + QueryWrapper projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + + //消息内容 + //String msgContentEN = "Please address the regulation list confirmation process for "+ projectNameInfoEO.getProjectName() +" ASAP. "; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + //feishuMsgVo.setContent("Hello! Please address the regulation list confirmation process ASAP. "); + //feishuMsgVo.setTaskType("Regulation List Confirmation"); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); + //系统内部跳转链接 + //String href = "" + " View details" + ""; + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + //sendMessage(msgTitle, msgContentEN,inventoryAffirmUserIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.LIST_CONFIRMATION,studioUserInfo.getUsername()); + + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String PRN = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; + + String dueDate = new SimpleDateFormat("yyyy-MM-dd").format(projectLawsInventoryEO.getInventoryAffirmDueDate()); + + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(inventoryAffirmUserIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_LIST_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_LIST_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,请尽快查看处理此项任务,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Please check and address the task in a timely manner. Thank you!"); + feishuMsgVo.setEnContentLower("Project: " + PRN + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: "+ dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + } + + //如果任务确认状态为待确认的,进行催办 + if(StringUtils.equals(projectLawsInventoryEO.getTaskAffirmStatus(),TaskAffirmStatusEnum.LIST_TO_CONFIRM.getValue())){ + List taskAffirmUserIdList = new ArrayList<>(); + + List> currentTaskList = (List>) jsonObject.get("currentTaskList"); + + List finalTaskAffirmUserIdList = new ArrayList<>(); + currentTaskList.forEach(currentTask -> { + String projectLawsInventoryId = (String) currentTask.get("projectLawsInventoryId"); + if(StringUtils.equals(projectLawsInventoryId,projectLawsInventoryEO.getId())){ + List> taskList = (List>) currentTask.get("taskList"); + taskList.forEach(task -> { + String assignee = (String) task.get("assignee"); + finalTaskAffirmUserIdList.add(assignee); + }); + } + }); + + if(CollectionUtils.isNotEmpty(finalTaskAffirmUserIdList)){ + //如果任务确认 没办理的用户不为空,给这些人发送消息,任务确认催办 + taskAffirmUserIdList = finalTaskAffirmUserIdList.stream().distinct().collect(Collectors.toList()); + log.debug("任务确认待办人员:" + taskAffirmUserIdList.toString()); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + QueryWrapper projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId,projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + + //消息内容 + //String msgContentEN = "Please address the regulation task confirmation process for "+ projectNameInfoEO.getProjectName() +" ASAP. "; + //String msgTitle = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket() + // + ": You have a regulation task confirmation to complete"; + + //FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); + //feishuMsgVo.setContent("Hello! Please address the task ASAP. "); + //feishuMsgVo.setTaskType("Regulation List Confirmation"); + //feishuMsgVo.setProject(projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + " " + projectLibraryBase.getTargetMarket()); + + //飞书跳转链接 + String hrefFeishu = backUrl + JumpLinkEnum.TASK_AFFIRM_LINK.getLink(); + //系统内部跳转链接 + //String href = "" + " View details" + ""; + + //String contentInfo = msgContentEN + " " + href; + //Map sendMessageMap = new HashMap<>(); + //sendMessageMap.put("hrefFeishu",hrefFeishu); + //sendMessageMap.put("contentInfo",contentInfo); + + //发送消息 + //sendMessage(msgTitle, msgContentEN,taskAffirmUserIdList,projectLibraryId,sendMessageMap, feishuMsgVo, MessageTypeEnum.TASK_CONFIRMATION,studioUserInfo.getUsername()); + + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String PRN = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; + + String dueDate = new SimpleDateFormat("yyyy-MM-dd").format(projectLawsInventoryEO.getTaskAffirmDueDate()); + //法规中英文 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(projectLawsInventoryEO.getStandId()); + String LAW_EN = ""; + if (ObjectUtils.isEmpty(bussDocumentLibraryEO)) { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle(); + } else { + if (ObjectUtils.isEmpty(bussDocumentLibraryEO.getTitleEn())) { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle(); + } else { + LAW_EN = projectLawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn();//法规 + } + } + + List thirdIdList = new ArrayList<>(); + List sysUsers = sysUserService.listByIds(taskAffirmUserIdList); + if (ObjectUtils.isNotEmpty(sysUsers)) { + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(MessageType2Enum.REGULATION_TASK_CONFIRMATION.getCn() + "/" + MessageType2Enum.REGULATION_TASK_CONFIRMATION.getEn()); + feishuMsgVo.setCnContentUpper("您好,请尽快查看处理此项任务,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + PRN + + "\n法规: " + projectLawsInventoryEO.getSerialNumber() + " " + projectLawsInventoryEO.getTitle() + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Hello! Please check and address the task ASAP. Thank you!"); + feishuMsgVo.setEnContentLower("Project: " + PRN + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: "+ dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdIdList.toArray(new String[thirdIdList.size()]), feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + + } + } + });*/ + + return Result.OK(); + } + + /** + * 验证符合性 结果待提交状态数据催办 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void verifyExpeditingToBeSubmitted(String projectLibraryId, List projectLawsInventoryEOList) { + // 催办验证符合性流程状态为 结果待提交的 责任人 + List toBeSubmitLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getVerifyFlowStatus(), ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(toBeSubmitLawsInventoryList)) { + Map> verifyDutyGroupMap = toBeSubmitLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getVerifyDutyId)); + for (Map.Entry> verifyDutyMap : verifyDutyGroupMap.entrySet()) { + String verifyDutyId = verifyDutyMap.getKey(); + List lawsInventoryEOList = verifyDutyMap.getValue(); + if (StringUtils.isEmpty(verifyDutyId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + this.lawsInventoryEOListSortByVerifyDueDate(lawsInventoryEOList); + + Date verifyDueDate = lawsInventoryEOList.get(0).getVerifyDueDate(); + String endTime = ""; + if (verifyDueDate != null) { + endTime = DateUtils.formatDate(verifyDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(verifyDutyId.split(",")); + // 给设计符合性流程责任人发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请尽快查看处理此项任务,谢谢!"); + params.put("contentEn", "Hello! Please check and address the task ASAP. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryBase.getId(), todoCenterParams); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P",(String)hrefFeishuMap.get("hrefFeishu_CN_P")); + + String regulationOwnerId = lawsInventoryEOList.get(0).getRegulationOwnerId(); + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + params.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(TemplateInfoEnum2.VALIDATION_COMPLIANCE_CONFIRMATION1.getValue(), params); + } + } + } + } + + /** + * 验证符合性 清单待确认状态数据催办 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void verifyExpeditingToBeConfirmed(String projectLibraryId, List projectLawsInventoryEOList) { + // 催办验证符合性流程状态为 清单待确认的 责任人 + List toBeConfirmedLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getVerifyFlowStatus(), ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(toBeConfirmedLawsInventoryList)) { + Map> verifyDutyGroupMap = toBeConfirmedLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getVerifyDutyId)); + for (Map.Entry> verifyDutyMap : verifyDutyGroupMap.entrySet()) { + String verifyDutyId = verifyDutyMap.getKey(); + List lawsInventoryEOList = verifyDutyMap.getValue(); + if (StringUtils.isEmpty(verifyDutyId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + + this.lawsInventoryEOListSortByVerifyDueDate(lawsInventoryEOList); + Date verifyDueDate = lawsInventoryEOList.get(0).getVerifyDueDate(); + String endTime = ""; + if (verifyDueDate != null) { + endTime = DateUtils.formatDate(verifyDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(verifyDutyId.split(",")); + // 给验证符合性流程责任人发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请及时查看确认以下任务要求,谢谢!"); + params.put("contentEn", "Hello! Please check and confirm the following task requirement in a timely manner. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + params.put("flowTypeCn","验证符合性流程"); + params.put("flowTypeEn","Validation Compliance Process"); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryId, todoCenterParams); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P",(String)hrefFeishuMap.get("hrefFeishu_CN_P")); + + String regulationOwnerId = lawsInventoryEOList.get(0).getRegulationOwnerId(); + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + params.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_TASK_CONFIRMATION4.getValue(), params); + } + } + } + } + + /** + * 验证符合性 结果待审查状态数据催办。 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void verifyExpeditingToBeReviewed(String projectLibraryId, List projectLawsInventoryEOList) { + // 如果验证符合性流程状态为 结果待审查,催办时就需要给这一条数据的法规工程师发消息 + List toBeReviewedLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getVerifyFlowStatus(), ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(toBeReviewedLawsInventoryList)) { + Map> regulationOwnerGroupMap = toBeReviewedLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getRegulationOwnerId)); + for (Map.Entry> regulationOwnerMap : regulationOwnerGroupMap.entrySet()) { + String regulationOwnerId = regulationOwnerMap.getKey(); + List lawsInventoryEOList = regulationOwnerMap.getValue(); + if (StringUtils.isEmpty(regulationOwnerId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + + this.lawsInventoryEOListSortByVerifyDueDate(lawsInventoryEOList); + Date verifyDueDate = lawsInventoryEOList.get(0).getVerifyDueDate(); + String endTime = ""; + if (verifyDueDate != null) { + endTime = DateUtils.formatDate(verifyDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(regulationOwnerId.split(",")); + // 给法规工程师发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请尽快查看处理此项任务,谢谢!"); + params.put("contentEn", "Hello! Please check and address the task ASAP. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryBase.getId(), todoCenterParams); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P",(String)hrefFeishuMap.get("hrefFeishu_CN_P")); + + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + params.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(TemplateInfoEnum2.VALIDATION_COMPLIANCE_CONFIRMATION1.getValue(), params); + } + } + } + } + + /** + * 验证符合性 清单待校核状态数据催办。 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void verifyExpeditingToBeChecked(String projectLibraryId, List projectLawsInventoryEOList) { + // 如果验证符合性流程状态为 清单待校核,催办时就需要给这一条数据的法规工程师发消息 + List toBeCheckedLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(toBeCheckedLawsInventoryList)) { + Map> regulationOwnerGroupMap = toBeCheckedLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getRegulationOwnerId)); + for (Map.Entry> regulationOwnerMap : regulationOwnerGroupMap.entrySet()) { + String regulationOwnerId = regulationOwnerMap.getKey(); + List lawsInventoryEOList = regulationOwnerMap.getValue(); + if (StringUtils.isEmpty(regulationOwnerId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + + this.lawsInventoryEOListSortByInventoryAffirmDueDate(lawsInventoryEOList); + Date inventoryAffirmDueDate = lawsInventoryEOList.get(0).getInventoryAffirmDueDate(); + String endTime = ""; + if (inventoryAffirmDueDate != null) { + endTime = DateUtils.formatDate(inventoryAffirmDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(regulationOwnerId.split(",")); + // 给法规工程师发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请及时校核法规清单内容并发起符合性流程,谢谢!"); + params.put("contentEn", "Please check the content of the regulation list and initiate the compliance process in a timely manner. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取法规清单 - 飞书跳转链接 + Map hrefFeishuMap = this.getProjectLawsInventoryLinkHrefFeishu(projectLibraryBase.getId(), PRN_CN, PRN_EN, com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P", (String) hrefFeishuMap.get("hrefFeishu_CN_P")); + params.put("Initiator", projectLibraryBase.getStudioEngineerName()); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_LIST_RELEASE1.getValue(), params); + } + } + } + } + + /** + * 设计符合性 结果待提交状态数据催办 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void designExpeditingToBeSubmitted(String projectLibraryId, List projectLawsInventoryEOList) { + // 催办设计符合性流程状态为 结果待提交的 责任人 + List toBeSubmitLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getDesignFlowStatus(), ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(toBeSubmitLawsInventoryList)) { + Map> designDutyGroupMap = toBeSubmitLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getVerifyDutyId)); + for (Map.Entry> designDutyMap : designDutyGroupMap.entrySet()) { + String designDutyId = designDutyMap.getKey(); + List lawsInventoryEOList = designDutyMap.getValue(); + if (StringUtils.isEmpty(designDutyId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + this.lawsInventoryEOListSortByVerifyDueDate(lawsInventoryEOList); + + Date designDueDate = lawsInventoryEOList.get(0).getDesignDueDate(); + String endTime = ""; + if (designDueDate != null) { + endTime = DateUtils.formatDate(designDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(designDutyId.split(",")); + // 给设计符合性流程责任人发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请尽快查看处理此项任务,谢谢!"); + params.put("contentEn", "Hello! Please check and address the task ASAP. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryBase.getId(), todoCenterParams); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P",(String)hrefFeishuMap.get("hrefFeishu_CN_P")); + + String regulationOwnerId = lawsInventoryEOList.get(0).getRegulationOwnerId(); + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + params.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(TemplateInfoEnum2.DESIGN_COMPLIANCE_CONFIRMATION1.getValue(), params); + } + } + } + } + + /** + * 设计符合性 清单待确认状态数据催办 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void designExpeditingToBeConfirmed(String projectLibraryId, List projectLawsInventoryEOList) { + // 催办设计符合性流程状态为 清单待确认的 责任人 + List toBeConfirmedLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getDesignFlowStatus(), ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(toBeConfirmedLawsInventoryList)) { + Map> designDutyGroupMap = toBeConfirmedLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getDesignDutyId)); + for (Map.Entry> designDutyMap : designDutyGroupMap.entrySet()) { + String designDutyId = designDutyMap.getKey(); + List lawsInventoryEOList = designDutyMap.getValue(); + if (StringUtils.isEmpty(designDutyId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + + this.lawsInventoryEOListSortByDesignDueDate(lawsInventoryEOList); + Date designDueDate = lawsInventoryEOList.get(0).getDesignDueDate(); + String endTime = ""; + if (designDueDate != null) { + endTime = DateUtils.formatDate(designDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(designDutyId.split(",")); + // 给设计符合性流程责任人发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请及时查看确认以下任务要求,谢谢!"); + params.put("contentEn", "Hello! Please check and confirm the following task requirement in a timely manner. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + params.put("flowTypeCn","设计符合性流程"); + params.put("flowTypeEn","Design Compliance Process"); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryId, todoCenterParams); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P",(String)hrefFeishuMap.get("hrefFeishu_CN_P")); + + String regulationOwnerId = lawsInventoryEOList.get(0).getRegulationOwnerId(); + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + params.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_TASK_CONFIRMATION4.getValue(), params); + } + } + } + } + + /** + * 设计符合性 结果待审查状态数据催办 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void designExpeditingToBeReviewed(String projectLibraryId, List projectLawsInventoryEOList) { + // 如果设计符合性流程状态为 结果待审查,催办时就需要给这一条数据的法规工程师发消息 + List toBeReviewedLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getDesignFlowStatus(), ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(toBeReviewedLawsInventoryList)) { + Map> regulationOwnerGroupMap = toBeReviewedLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getRegulationOwnerId)); + for (Map.Entry> regulationOwnerMap : regulationOwnerGroupMap.entrySet()) { + String regulationOwnerId = regulationOwnerMap.getKey(); + List lawsInventoryEOList = regulationOwnerMap.getValue(); + if (StringUtils.isEmpty(regulationOwnerId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + + this.lawsInventoryEOListSortByDesignDueDate(lawsInventoryEOList); + Date designDueDate = lawsInventoryEOList.get(0).getDesignDueDate(); + String endTime = ""; + if (designDueDate != null) { + endTime = DateUtils.formatDate(designDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(regulationOwnerId.split(",")); + // 给法规工程师发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请尽快查看处理此项任务,谢谢!"); + params.put("contentEn", "Hello! Please check and address the task ASAP. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取待办中心 - 飞书跳转链接 + Map todoCenterParams = new HashMap<>(); + todoCenterParams.put("projectNameCn", PRN_CN); + todoCenterParams.put("projectNameEn", PRN_EN); + Map hrefFeishuMap = this.getToDoCenterLinkHrefFeishu(projectLibraryBase.getId(), todoCenterParams); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P",(String)hrefFeishuMap.get("hrefFeishu_CN_P")); + + List regulationOwnerUserList = this.sysUserService.querySysUserListByIdList(Arrays.asList(regulationOwnerId.split(","))); + String regulationOwnerUserName = this.sysUserService.getUsernameByUserId(regulationOwnerUserList, regulationOwnerId); + params.put("Initiator", regulationOwnerUserName); + + this.sendMessageByTemplateId(TemplateInfoEnum2.DESIGN_COMPLIANCE_CONFIRMATION1.getValue(), params); + } + } + } + } + + /** + * 设计符合性 清单待校核状态数据催办 + * + * @param projectLibraryId + * @param projectLawsInventoryEOList + */ + private void designExpeditingToBeChecked(String projectLibraryId, List projectLawsInventoryEOList) { + // 如果设计符合性流程状态为 清单待校核,催办时就需要给这一条数据的法规工程师发消息 + List toBeCheckedLawsInventoryList = projectLawsInventoryEOList.stream().filter(lawsInventory -> { + boolean flag = false; + if (StringUtils.equals(lawsInventory.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(toBeCheckedLawsInventoryList)) { + Map> regulationOwnerGroupMap = toBeCheckedLawsInventoryList.stream().collect(Collectors.groupingBy(ProjectLawsInventoryEO::getRegulationOwnerId)); + for (Map.Entry> regulationOwnerMap : regulationOwnerGroupMap.entrySet()) { + String regulationOwnerId = regulationOwnerMap.getKey(); + List lawsInventoryEOList = regulationOwnerMap.getValue(); + if (StringUtils.isEmpty(regulationOwnerId) || CollectionUtils.isEmpty(lawsInventoryEOList)) { + continue; + } + + this.lawsInventoryEOListSortByInventoryAffirmDueDate(lawsInventoryEOList); + Date inventoryAffirmDueDate = lawsInventoryEOList.get(0).getInventoryAffirmDueDate(); + String endTime = ""; + if (inventoryAffirmDueDate != null) { + endTime = DateUtils.formatDate(inventoryAffirmDueDate); + } + String serialNumbers = lawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + List userIdList = Arrays.asList(regulationOwnerId.split(",")); + // 给法规工程师发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请及时校核法规清单内容并发起符合性流程,谢谢!"); + params.put("contentEn", "Please check the content of the regulation list and initiate the compliance process in a timely manner. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取法规清单 - 飞书跳转链接 + Map hrefFeishuMap = this.getProjectLawsInventoryLinkHrefFeishu(projectLibraryBase.getId(), PRN_CN, PRN_EN, com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P", (String) hrefFeishuMap.get("hrefFeishu_CN_P")); + params.put("Initiator", projectLibraryBase.getStudioEngineerName()); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_LIST_RELEASE1.getValue(), params); + } + } + } + } + + + @Override + public List getRoleByUserId(String projectLibraryId, String cut) { + List sysRoles = new LinkedList<>(); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //项目详情中取R&H Studio和认证工程师 + List projectLibraryBases = projectLibraryBaseService.queryById(projectLibraryId, null); + String certificationEngineerName = ""; + if (projectLibraryBases.size() != 0) { + certificationEngineerName = projectLibraryBases.get(0).getCertificationEngineerName(); + String studioEngineerName = projectLibraryBases.get(0).getStudioEngineerName(); + if (StringUtils.isNotBlank(studioEngineerName) && studioEngineerName.equals(loginUser.getUsername())) { + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.STUDIO_ENGINEER.getValue()); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.STUDIO_ENGINEER.getName()); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.STUDIO_ENGINEER.getCode()); + } + + sysRoles.add(sysRole); + } + + // 认证 + if ((StringUtils.isNotBlank(certificationEngineerName) && certificationEngineerName.contains(loginUser.getUsername()))) { + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.HOMOLOGATION_ENGINEER.getName()); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.HOMOLOGATION_ENGINEER.getCode()); + } + sysRoles.add(sysRole); + } + } + //相关人员名单中取法规工程师 + /*List projectRelatedPersonnels = projectRelatedPersonnelService.queryPageList(projectLibraryId,null,null,null,null,null); + List lawEngineerNameList = new ArrayList<>(); + if(projectRelatedPersonnels.size() != 0){ + for (ProjectRelatedPersonnel projectRelatedPersonnel : projectRelatedPersonnels) { + String lawEngineerName = projectRelatedPersonnel.getLawEngineerName(); + if(StringUtils.isNotBlank(lawEngineerName)){ + lawEngineerName = lawEngineerName.replaceAll(" ",""); + lawEngineerNameList.addAll(Arrays.asList(lawEngineerName.split(","))); + } + } + } + if(lawEngineerNameList.contains(loginUser.getUsername())){ + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getName()); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getCode()); + } + sysRoles.add(sysRole); + }*/ + /*List certificationEngineerList = new ArrayList<>(); + if(projectRelatedPersonnels.size() != 0){ + for(ProjectRelatedPersonnel projectRelatedPersonnel : projectRelatedPersonnels){ + String certificationEngineerName1 = projectRelatedPersonnel.getCertificationEngineerName(); + if(StringUtils.isNotBlank(certificationEngineerName1)){ + certificationEngineerName1 = certificationEngineerName1.replaceAll(" ",""); + certificationEngineerList.addAll(Arrays.asList(certificationEngineerName1.split(","))); + } + } + } + if((StringUtils.isNotBlank(certificationEngineerName) && certificationEngineerName.contains(loginUser.getUsername())) + || certificationEngineerList.contains(loginUser.getUsername())){ + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.HOMOLOGATION_ENGINEER.getName()); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.HOMOLOGATION_ENGINEER.getCode()); + } + sysRoles.add(sysRole); + }*/ + + /*List engineeringInterfacePersonList = new ArrayList<>(); + if(projectRelatedPersonnels.size() != 0){ + for(ProjectRelatedPersonnel projectRelatedPersonnel : projectRelatedPersonnels){ + String engineeringInterfacePerson = projectRelatedPersonnel.getEngineeringInterfacePersonName(); + if(StringUtils.isNotBlank(engineeringInterfacePerson)){ + engineeringInterfacePerson = engineeringInterfacePerson.replaceAll(" ",""); + engineeringInterfacePersonList.addAll(Arrays.asList(engineeringInterfacePerson.split(","))); + } + } + } + if(engineeringInterfacePersonList.contains(loginUser.getUsername())){ + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getValue()); + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getName()); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getCode()); + } + sysRoles.add(sysRole); + }*/ + +// if((StringUtils.isNotBlank(certificationEngineerName) && certificationEngineerName.contains(loginUser.getUsername())) +// || lawEngineerNameList.contains(loginUser.getUsername())){ +// SysRole sysRole = new SysRole(); +// sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue()); +// if(StringUtils.equals(cut,CutEnum.CN.getValue())){ +// sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getName()); +// }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ +// sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getCode()); +// } +// sysRoles.add(sysRole); +// +// } + + // 法规工程师 + QueryWrapper querylawEngineerCountWrap = new QueryWrapper<>(); + querylawEngineerCountWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + querylawEngineerCountWrap.lambda().eq(ProjectLawsInventoryEO::getRegulationOwnerId, loginUser.getId()); + Integer lawCount = this.baseMapper.selectCount(querylawEngineerCountWrap); + if (lawCount > 0) { + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getName()); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getCode()); + } + sysRoles.add(sysRole); + } + + + // 工程接口人 + QueryWrapper queryEipCountWrap = new QueryWrapper<>(); + queryEipCountWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + queryEipCountWrap.lambda().eq(ProjectLawsInventoryEO::getEngineeringInterfacePerson, loginUser.getId()); + Integer eipCount = this.baseMapper.selectCount(queryEipCountWrap); + if (eipCount > 0) { + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getValue()); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getName()); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getCode()); + } + sysRoles.add(sysRole); + } + + // 责任人 + QueryWrapper queryDutyPersonCountWrap = new QueryWrapper<>(); + queryDutyPersonCountWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + queryDutyPersonCountWrap.and(query -> { + query.lambda().eq(ProjectLawsInventoryEO::getDesignDutyId, loginUser.getId()); + query.or().lambda().eq(ProjectLawsInventoryEO::getVerifyDutyId, loginUser.getId()); + }); + Integer dutyPersonCount = this.baseMapper.selectCount(queryDutyPersonCountWrap); + if (dutyPersonCount > 0) { + SysRole sysRole = new SysRole(); + sysRole.setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.PERSON_LIABLE1.getValue()); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.PERSON_LIABLE1.getName()); + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + sysRole.setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.PERSON_LIABLE1.getCode()); + } + sysRoles.add(sysRole); + } + + + List roleList = sysRoleMapper.getRoleByUserId(loginUser.getId()); + //studio角色,法规工程师/认证工程师,领导角色,管理员角色,Viewer + if (roleList.size() != 0) { + List manager = roleList.stream().filter(e -> com.jero.modules.system.enums.ProjectRoleEnum.MANAGER.getCode().equals(e.getRoleCode())).collect(Collectors.toList()); + List admin = roleList.stream().filter(e -> com.jero.modules.system.enums.ProjectRoleEnum.ADMIN.getCode().equals(e.getRoleCode())).collect(Collectors.toList()); + List Viewer = roleList.stream().filter(e -> com.jero.modules.system.enums.ProjectRoleEnum.VIEWER.getCode().equals(e.getRoleCode())).collect(Collectors.toList()); + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + if (manager.size() != 0) { + manager.get(0).setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.MANAGER.getValue()); + sysRoles.addAll(manager); + } + if (admin.size() != 0) { + admin.get(0).setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.ADMIN.getValue()); + sysRoles.addAll(admin); + } + if (Viewer.size() != 0) { + Viewer.get(0).setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.VIEWER.getValue()); + sysRoles.addAll(Viewer); + } + } else if (StringUtils.equals(cut, CutEnum.EN.getValue())) { + if (manager.size() != 0) { + manager.get(0).setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.MANAGER.getValue()); + manager.get(0).setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.MANAGER.getCode()); + sysRoles.addAll(manager); + } + if (admin.size() != 0) { + admin.get(0).setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.ADMIN.getValue()); + admin.get(0).setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.ADMIN.getCode()); + sysRoles.addAll(admin); + } + if (Viewer.size() != 0) { + Viewer.get(0).setRoleCode(com.jero.modules.system.enums.ProjectRoleEnum.VIEWER.getValue()); + Viewer.get(0).setRoleName(com.jero.modules.system.enums.ProjectRoleEnum.VIEWER.getCode()); + sysRoles.addAll(Viewer); + } + + } + + } + return sysRoles; + } + + /** + * 获取一个用户的id + * 例如:如果法规工程师不是空,判断当前这个法规工程师,是否在这个责任领域的数组里, + * 1、如果在的话,不用管他; + * 2、如果只有一个人,则把这个用户设置进来; + * 3、如果不在,判断这个责任领域下是否有多个法规工程师,如果是,则把这个法规工程师设置为空; + * + * @param roleCode 角色编码 + * @param projectRelatedPersonnelList 相关人员对象数组 + * @param studioEngineer studioCode + * @param engineersId 现有的工程师id + * @return + */ + public String ToGetAUserId(String roleCode, List projectRelatedPersonnelList, String studioEngineer, String engineersId) { + String resultUserId = ""; + //法规工程师 + if (StringUtils.equals(roleCode, ProjectRoleEnum.REGULATI_ENGINEER.getValue())) { + String lawEngineer = projectRelatedPersonnelList.stream().filter(relatedPersonnel -> { + boolean flag = false; + if (StringUtils.isNotEmpty(relatedPersonnel.getLawEngineer())) { + flag = true; + } + return flag; + }).map(ProjectRelatedPersonnel::getLawEngineer).distinct().collect(Collectors.joining(",")); + if (StringUtils.isNotEmpty(lawEngineer)) { + if (!StringUtils.contains(lawEngineer, engineersId)) { + String[] lawEngineerArr = lawEngineer.split(","); + if (lawEngineerArr.length == 1) { + resultUserId = lawEngineer; + } + } else { + resultUserId = engineersId; + } + } + } + //认证工程师 + if (StringUtils.equals(roleCode, ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue())) { + String certificationEngineer = projectRelatedPersonnelList.stream().filter(relatedPersonnel -> { + boolean flag = false; + if (StringUtils.isNotEmpty(relatedPersonnel.getLawEngineer())) { + flag = true; + } + return flag; + }).map(ProjectRelatedPersonnel::getCertificationEngineer).distinct().collect(Collectors.joining(",")); + if (StringUtils.isNotEmpty(certificationEngineer)) { + if (!StringUtils.contains(certificationEngineer, engineersId)) { + String[] certificationEngineerArr = certificationEngineer.split(","); + if (certificationEngineerArr.length == 1) { + resultUserId = certificationEngineer; + } + } else { + resultUserId = engineersId; + } + } + } + //工程接口人 + if (StringUtils.equals(roleCode, ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue())) { + String engineeringInterfacePerson = projectRelatedPersonnelList.stream().filter(relatedPersonnel -> { + boolean flag = false; + if (StringUtils.isNotEmpty(relatedPersonnel.getLawEngineer())) { + flag = true; + } + return flag; + }).map(ProjectRelatedPersonnel::getEngineeringInterfacePerson).distinct().collect(Collectors.joining(",")); + if (StringUtils.isNotEmpty(engineeringInterfacePerson)) { + if (!StringUtils.contains(engineeringInterfacePerson, engineersId)) { + String[] engineeringInterfacePersonArr = engineeringInterfacePerson.split(","); + if (engineeringInterfacePersonArr.length == 1) { + resultUserId = engineeringInterfacePerson; + } + } else { + resultUserId = engineersId; + } + } + } + //studio + if (StringUtils.equals(roleCode, ProjectRoleEnum.STUDIO_ENGINEER.getValue())) { + resultUserId = studioEngineer; + } + return resultUserId; + } + + /** + * 初始化 法规清单对应的 项目状态评估表 + * + * @param projectLawsInventoryId + */ + public void initConditionAssessmentEO(String projectLawsInventoryId) { + + QueryWrapper removeWrapper = new QueryWrapper<>(); + removeWrapper.lambda().eq(ConditionAssessmentEO::getProjectLawsInventoryId, projectLawsInventoryId); + this.conditionAssessmentEOService.remove(removeWrapper); + + ConditionAssessmentEO conditionAssessmentEO = new ConditionAssessmentEO(); + conditionAssessmentEO.setRoleCode(ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue()); + conditionAssessmentEO.setProjectLawsInventoryId(projectLawsInventoryId); + conditionAssessmentEO.setConditionAssessment(CurrentProjectStatusEnum.BLUE.getValue()); + this.conditionAssessmentEOService.addOrUpdate(conditionAssessmentEO); + } + + /** + * 添加流程信息 + * + * @param processInfoEO + * @param projectLibraryId + * @param endTime + */ + @Override + public void addProcessInfo(ProcessInfoEO processInfoEO, String projectLibraryId, Date endTime) { + String id = null; + //查询当前项目之前有没有启动过清单确认 + QueryWrapper processInfoQueryWrap = new QueryWrapper<>(); + processInfoQueryWrap.lambda().eq(ProcessInfoEO::getProjectLibraryId, projectLibraryId); + processInfoQueryWrap.lambda().eq(ProcessInfoEO::getFlowType, FlowTypeEnum.QDQR.getValue()); + List processInfoEOList = this.processInfoEOService.list(processInfoQueryWrap); + if (CollectionUtils.isNotEmpty(processInfoEOList)) { + id = processInfoEOList.get(0).getId(); + //删除之前创建的数据 + this.processInfoEOService.remove(processInfoQueryWrap); + } else { + id = UUID.randomUUID().toString().replace("-", ""); + } + + processInfoEO.setId(id); + processInfoEO.setProjectLibraryId(projectLibraryId); + + processInfoEO.setEndTime(endTime); + processInfoEO.setStatus(TodoCenterStatusEnum.LIST_TO_CONFIRM.getValue()); + processInfoEO.setFlowType(FlowTypeEnum.QDQR.getValue()); + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + processInfoEO.setCreateBy(currentUser.getId()); + this.processInfoEOService.add(processInfoEO); + } + + /** + * 添加流程信息,用户的待办、已办信息。 + * + * @param processInfoId + * @param processInfoDetailEOList + * @param endTime + */ + @Override + public void addProcessInfoDetail(String processInfoId, List processInfoDetailEOList, Date endTime) { + processInfoDetailEOList.forEach(detail -> { + detail.setProcessInfoId(processInfoId); + detail.setFlowType(FlowTypeEnum.QDQR.getValue()); + + QueryWrapper deleteDetailWrap = new QueryWrapper<>(); + deleteDetailWrap.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId, detail.getProjectLawsInventoryId()); + deleteDetailWrap.lambda().eq(ProcessInfoDetailEO::getUserId, detail.getUserId()); + this.processInfoDetailEOService.remove(deleteDetailWrap); + }); + + //删除studio在这个项目的清单确认已办任务。 + /*QueryWrapper deleteStudioDetailWrap = new QueryWrapper<>(); + deleteStudioDetailWrap.lambda().eq(ProcessInfoDetailEO::getTaskDefinitionKey,InventoryAffirmNodeEnum.INITIATED_BY_STUDIO_ENGINEERS.getKey()); + deleteStudioDetailWrap.lambda().eq(ProcessInfoDetailEO::getProcessInfoId,processInfoId); + this.processInfoDetailEOService.remove(deleteStudioDetailWrap);*/ + + this.processInfoDetailEOService.saveBatch(processInfoDetailEOList); + } + + /** + * 更新流程信息,用户的待办、已办任务信息 + * + * @param projeceLawsInventoryId + */ + public void updateProcessInfoDetail(String projeceLawsInventoryId) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + QueryWrapper detailQueryWrapper = new QueryWrapper<>(); + detailQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId, projeceLawsInventoryId); + detailQueryWrapper.lambda().eq(ProcessInfoDetailEO::getUserId, currentUser.getId()); + detailQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType, FlowTypeEnum.QDQR.getValue()); + List detailEOList = this.processInfoDetailEOService.list(detailQueryWrapper); + + if (CollectionUtils.isNotEmpty(detailEOList)) { + String processInfoId = detailEOList.get(0).getProcessInfoId(); + + detailEOList.forEach(detail -> { + detail.setSubmitTime(new Date()); + detail.setStatus(TaskStatusEnum.HAVE_DONE.getValue()); + }); + this.processInfoDetailEOService.updateBatchById(detailEOList); + + //查询当前项目下还有没有未完成的任务 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getProcessInfoId, processInfoId); + queryWrapper.lambda().eq(ProcessInfoDetailEO::getStatus, TaskStatusEnum.NOT_DONE.getValue()); + int count = this.processInfoDetailEOService.count(queryWrapper); + //如果没有待办任务 + if (count == 0) { + ProcessInfoEO processInfoEO = new ProcessInfoEO(); + processInfoEO.setStatus(TodoCenterStatusEnum.COMPLETED.getValue()); + processInfoEO.setId(processInfoId); + this.processInfoEOService.updateById(processInfoEO); + } + } + } + + /** + * 任务清单催办 + * + * @param projectTaskUrgVo + * @return + */ + @Override + public Result taskUrg(ProjectTaskUrgVo projectTaskUrgVo) { + if (ObjectUtils.isEmpty(projectTaskUrgVo.getProjectLawsInventoryIds())) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException("请选择至少一条数据"); + } else { + throw new JeroBootException("Please select at least one piece of data"); + } + + } + if (ObjectUtils.isEmpty(projectTaskUrgVo.getType())) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException("请选择催办类型"); + } else { + throw new JeroBootException("Please select the type of reminder"); + } + } + + String title = ""; + + if (FlowTypeEnum.SJFHXSHLC.getValue().equals(projectTaskUrgVo.getType())) { + title = MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.DESIGN_COMPLIANCE_CONFIRMATION.getEn(); + } else if (FlowTypeEnum.PREHOMOQRLC.getValue().equals(projectTaskUrgVo.getType())) { + title = MessageType2Enum.PRE_HOMO_CONFIRMATION.getCn() + "/" + MessageType2Enum.PRE_HOMO_CONFIRMATION.getEn(); + } else if (FlowTypeEnum.YZFHXSCLC.getValue().equals(projectTaskUrgVo.getType())) { + title = MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getCn() + "/" + MessageType2Enum.VALIDATION_COMPLIANCE_CONFIRMATION.getEn(); + } else { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException("请选择正确的催办类型"); + } else { + throw new JeroBootException("Please select the correct type of reminder"); + } + } + String[] ProjectLawsInventoryIds = projectTaskUrgVo.getProjectLawsInventoryIds().split(","); + ProjectLawsInventoryEO projectLawsInventoryEO = baseMapper.selectById(ProjectLawsInventoryIds[0]); + if (ObjectUtils.isEmpty(projectLawsInventoryEO)) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException("程序异常,请刷新页面并重新操作"); + } else { + throw new JeroBootException("The program is abnormal, please refresh the page and operate again"); + } + } + + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(new QueryWrapper() + .lambda().eq(ProjectLibraryBase::getId, projectLawsInventoryEO.getProjectLibraryId())); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId, projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + QueryWrapper projectYearInfoEOQueryWrapper = new QueryWrapper<>(); + projectYearInfoEOQueryWrapper.lambda().eq(ProjectYearNameInfoEO::getId, projectLibraryBase.getYearNameId()); + ProjectYearNameInfoEO projectYearNameInfoEO = projectYearNameInfoEOMapper.selectOne(projectYearInfoEOQueryWrapper); + + //项目名称 + String projectVersion = (com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId()) && com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getProjectVersion())) ? "00" : projectLibraryBase.getProjectVersion(); + String projectName = projectNameInfoEO.getProjectName() + "-" + projectYearNameInfoEO.getYearName() + "-" + projectLibraryBase.getTargetMarket() + "-" + projectVersion; + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //飞书跳转链接 + String hrefFeishu = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryBase.getId() + + JumpLinkEnum.DESIGN_AFFIRM_LINK.getType() + + "&projectName=" + projectNameInfoEO.getProjectName() + "-" + + projectYearNameInfoEO.getYearName() + + "&targetMarket=" + projectLibraryBase.getTargetMarket(); + + for (String projectLawsInventoryId : ProjectLawsInventoryIds) { + ProjectLawsInventoryEO lawsInventoryEO = baseMapper.selectById(projectLawsInventoryId); + if (ObjectUtils.isEmpty(lawsInventoryEO)) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException("程序异常,请刷新页面并重新操作"); + } else { + throw new JeroBootException("The program is abnormal, please refresh the page and operate again"); + } + } + String LAW_CN = lawsInventoryEO.getSerialNumber() + " " + lawsInventoryEO.getTitle();//法规 + BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(lawsInventoryEO.getStandId()); + String LAW_EN = lawsInventoryEO.getSerialNumber() + " " + bussDocumentLibraryEO.getTitleEn();//法规 + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + String userId = ""; + String dueDate = null; + + QueryWrapper queryProjectTaskInventoryWrapper = new QueryWrapper<>(); + queryProjectTaskInventoryWrapper.isNotNull("design_p_id").or().isNotNull("verify_p_id"); + queryProjectTaskInventoryWrapper.lambda().eq(ProjectTaskInventoryEO::getProjectLawsInventoryId, projectLawsInventoryId); + List list = projectTaskInventoryEOService.list(queryProjectTaskInventoryWrapper); + + if (FlowTypeEnum.SJFHXSHLC.getValue().equals(projectTaskUrgVo.getType())) { + dueDate = sdf.format(lawsInventoryEO.getDesignDueDate()); + if (DesignComplianceStatusEnum.TO_REVIEW.getValue().equals(list.get(0).getDesignStatus()) + || DesignComplianceStatusEnum.REVIEW_COMPLETED.getValue().equals(list.get(0).getDesignStatus())) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException(LAW_CN + "已经被确认,无法催办"); + } else { + throw new JeroBootException(LAW_EN + "has been confirmed,can't be urged"); + } + } + if (ObjectUtils.isNotEmpty(lawsInventoryEO.getDesignDutyId())) { + userId = lawsInventoryEO.getDesignDutyId(); + } + } else if (FlowTypeEnum.PREHOMOQRLC.getValue().equals(projectTaskUrgVo.getType())) { + dueDate = sdf.format(lawsInventoryEO.getPrehomoDueDate()); + if (DesignComplianceStatusEnum.TO_REVIEW.getValue().equals(list.get(0).getPrehomoStatus()) + || DesignComplianceStatusEnum.REVIEW_COMPLETED.getValue().equals(list.get(0).getPrehomoStatus())) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException(LAW_CN + "已经被确认,无法催办"); + } else { + throw new JeroBootException(LAW_EN + "has been confirmed,can't be urged"); + } + } + if (ObjectUtils.isNotEmpty(lawsInventoryEO.getPrehomoDutyId())) { + userId = lawsInventoryEO.getPrehomoDutyId(); + } + } else if (FlowTypeEnum.YZFHXSCLC.getValue().equals(projectTaskUrgVo.getType())) { + dueDate = sdf.format(lawsInventoryEO.getVerifyDueDate()); + if (DesignComplianceStatusEnum.TO_REVIEW.getValue().equals(list.get(0).getVerifyStatus()) + || DesignComplianceStatusEnum.REVIEW_COMPLETED.getValue().equals(list.get(0).getVerifyStatus())) { + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + throw new JeroBootException(LAW_CN + "已经被确认,无法催办"); + } else { + throw new JeroBootException(LAW_EN + "has been confirmed,can't be urged"); + } + } + if (ObjectUtils.isNotEmpty(lawsInventoryEO.getVerifyDutyId())) { + userId = lawsInventoryEO.getVerifyDutyId(); + } + } + + String[] thirdId = new String[1]; + if (ObjectUtils.isNotEmpty(userId)) { + SysUser user = sysUserMapper.selectById(userId); + if (ObjectUtils.isNotEmpty(user)) { + thirdId[0] = user.getThirdId(); + } + } + try { + FeishuMsg2Vo feishuMsgVo = new FeishuMsg2Vo(); + feishuMsgVo.setTitle(title); + feishuMsgVo.setCnContentUpper("您好,请尽快查看处理此项任务,谢谢!"); + feishuMsgVo.setCnContentLower("项目: " + projectName + + "\n法规: " + LAW_CN + + "\n发起人: " + currentUser.getUsername() + + "\n截止时间: " + dueDate); + feishuMsgVo.setEnContentUpper("Hello! Please check and address the task ASAP. Thank you!"); + feishuMsgVo.setEnContentLower("Project: " + projectName + + "\nRegulation No: " + LAW_EN + + "\nInitiator: " + currentUser.getUsername() + + "\nDue Date: " + dueDate); + feishuMsgVo.setUrl(hrefFeishu); + feishuMsgVo.setColor(MsgColorEnum.GREEN.getValue()); // 颜色 + feishuService.sendCard(thirdId, feishuMsgVo); + } catch (IOException e) { + log.error("飞书消息推送失败"); + } + } + if (CutEnum.CN.getValue().equals(projectTaskUrgVo.getCut())) { + return new Result<>().success("催办成功!"); + } else { + return new Result<>().success("Success of the urging!"); + } + + } + + @Override + public Result updateFlowInfoByProjectLibraryIds(String projectLibraryIds) { + if (StringUtils.isEmpty(projectLibraryIds)) { + throw new JeroBootException("项目库id不能为空"); + } + + List projectLibraryIdList = Arrays.asList(projectLibraryIds.split(",")); + + QueryWrapper lawsInventoryQueryWrap = new QueryWrapper<>(); + lawsInventoryQueryWrap.lambda().in(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryIdList); + List projectLawsInventoryEOList = this.baseMapper.selectList(lawsInventoryQueryWrap); + + projectLawsInventoryEOList.forEach(lawsInventoryEO -> { + this.updateFlowInfo(lawsInventoryEO); + }); + + return new Result<>().success("操作成功!"); + } + + @Override + public Result studioPublish(JSONObject json) { + String projectLibraryId = json.getString("projectLibraryId"); + String cut = json.getString("cut"); + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + String ids = json.getString("ids"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //清单确认截止时间 + String inventoryAffirmDueDate = json.getString("inventoryAffirmDueDate"); + Date endTime = new Date(); + try { + endTime = sdf.parse(inventoryAffirmDueDate); + } catch (ParseException e) { + e.printStackTrace(); + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isEmpty(ids)) { + throw new JeroBootException("至少选择一条数据进行操作!"); + } + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List projectLawsInventoryEOS = this.baseMapper.selectList(queryWrapper); + + List userIdList = new ArrayList<>(); + List processInfoDetailEOList = new ArrayList<>(); + + //交付物类型为NA,写远了不好找,写在这里方便以后优化 + String naType = "1645667531513237506"; + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) { + //未发起或拒绝 可以发起清单确认 + boolean checkStatus = (StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + ); + //如果该数据的法规工程师不为空 + boolean checkUser = (StringUtils.isNotEmpty(projectLawsInventoryEO.getRegulationOwnerId())); + if (checkStatus && checkUser) { + //如果交付物为NA则流程状态直接为不涉及 + if(StringUtils.equals(projectLawsInventoryEO.getDesignDeliverableType(),naType)){ + projectLawsInventoryEO.setDesignFlowStatus(ComplianceFlowStatusEnum.UNINVOLVED.getValue()); + }else if (StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue())) { + projectLawsInventoryEO.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()); + } + if(StringUtils.equals(projectLawsInventoryEO.getVerifyDeliverableType(),naType)){ + projectLawsInventoryEO.setVerifyFlowStatus(ComplianceFlowStatusEnum.UNINVOLVED.getValue()); + }else if (StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue())) { + projectLawsInventoryEO.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()); + } + projectLawsInventoryEO.setInventoryAffirmDueDate(endTime); + + userIdList.add(projectLawsInventoryEO.getRegulationOwnerId()); + //如果都是不涉及就不发待办 + if (!projectLawsInventoryEO.getDesignFlowStatus().equals(ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + && !projectLawsInventoryEO.getVerifyFlowStatus().equals(ComplianceFlowStatusEnum.UNINVOLVED.getValue())) { + ProcessInfoDetailEO processInfoDetailEO = new ProcessInfoDetailEO(); + processInfoDetailEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + processInfoDetailEO.setUserId(projectLawsInventoryEO.getRegulationOwnerId()); + processInfoDetailEO.setTaskDefinitionKey(InventoryAffirmNodeEnum.REGULATION_OWNER_AUDIT.getKey()); + processInfoDetailEO.setEndTime(endTime); + processInfoDetailEO.setCreateTime(new Date()); + processInfoDetailEO.setCreateBy(currentUser.getId()); + processInfoDetailEO.setStatus(TaskStatusEnum.NOT_DONE.getValue()); + processInfoDetailEOList.add(processInfoDetailEO); + } + } + } + + this.updateBatchById(projectLawsInventoryEOS); + + ProcessInfoEO processInfoEO = new ProcessInfoEO(); + this.addProcessInfo(processInfoEO, projectLibraryId, endTime); + this.addProcessInfoDetail(processInfoEO.getId(), processInfoDetailEOList, endTime); + + userIdList = userIdList.stream().distinct().collect(Collectors.toList()); + // 给法规工程师发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,请及时校核法规清单内容并发起符合性流程,谢谢!"); + params.put("contentEn", "Please check the content of the regulation list and initiate the compliance process in a timely manner. Thank you!"); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", inventoryAffirmDueDate); + params.put("userIdList", userIdList); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取法规清单 - 飞书跳转链接 + Map hrefFeishuMap = this.getProjectLawsInventoryLinkHrefFeishu(projectLibraryBase.getId(), PRN_CN, PRN_EN, com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P", (String) hrefFeishuMap.get("hrefFeishu_CN_P")); + params.put("Initiator", projectLibraryBase.getStudioEngineerName()); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_LIST_RELEASE1.getValue(), params); + } + + return Result.OK("发起清单确认成功!"); + } + + @Override + public Result studioWithdrew(JSONObject json) { + String projectLibraryId = json.getString("projectLibraryId"); + String cut = json.getString("cut"); + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + String ids = json.getString("ids"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isEmpty(ids)) { + throw new JeroBootException("至少选择一条数据进行操作!"); + } + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List projectLawsInventoryEOS = this.baseMapper.selectList(queryWrapper); + + projectLawsInventoryEOS = projectLawsInventoryEOS.stream().filter(lawsInventory -> { + boolean flag = false; + boolean toBeCheckedFlag = ( + StringUtils.equals(lawsInventory.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(lawsInventory.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + ); + boolean dutyPersonRejectedFlag = ( + StringUtils.equals(lawsInventory.getDesignFlowStatus(), ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + || StringUtils.equals(lawsInventory.getVerifyFlowStatus(), ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + ); + if (toBeCheckedFlag || dutyPersonRejectedFlag) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + // 将待办中心法规工程师的 清单确认 待办任务转为已办 + QueryWrapper pidQueryWrap = new QueryWrapper<>(); + pidQueryWrap.lambda().in(ProcessInfoDetailEO::getProjectLawsInventoryId, ids); + List pidList = this.processInfoDetailEOService.list(pidQueryWrap); + if (CollectionUtils.isNotEmpty(pidList)) { + pidList.forEach(pid -> { + pid.setStatus(TaskStatusEnum.HAVE_DONE.getValue()); + }); + this.processInfoDetailEOService.updateBatchById(pidList); + } + + + this.lawsInventoryEOListSortByInventoryAffirmDueDate(projectLawsInventoryEOS); + Date inventoryAffirmDueDate = projectLawsInventoryEOS.get(0).getInventoryAffirmDueDate(); + String endTime = ""; + if (inventoryAffirmDueDate != null) { + endTime = DateUtils.formatDate(inventoryAffirmDueDate); + } + + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) { + if (StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue())) { + projectLawsInventoryEO.setDesignFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + } + if (StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue())) { + projectLawsInventoryEO.setVerifyFlowStatus(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + } + } + + List userIdList = projectLawsInventoryEOS.stream().map(ProjectLawsInventoryEO::getRegulationOwnerId).distinct().collect(Collectors.toList()); + String serialNumbers = projectLawsInventoryEOS.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + this.updateBatchById(projectLawsInventoryEOS); + + // 给法规工程师发消息 + Map params = new HashMap<>(); + params.put("contentCn", "您好,该任务已被发起人撤回。"); + params.put("contentEn", "Hello! This regulation has been withdrawn by the initiator."); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + // 获取法规清单 - 飞书跳转链接 + Map hrefFeishuMap = this.getProjectLawsInventoryLinkHrefFeishu(projectLibraryBase.getId(), PRN_CN, PRN_EN, com.jero.modules.system.enums.ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P", (String) hrefFeishuMap.get("hrefFeishu_CN_P")); + params.put("Initiator", projectLibraryBase.getStudioEngineerName()); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_LIST_RELEASE2.getValue(), params); + } + + return Result.OK("撤回成功!"); + } + + @Override + public Result regulationOwnerReturned(JSONObject json) { + String projectLibraryId = json.getString("projectLibraryId"); + String cut = json.getString("cut"); + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + + // studio信息 + SysUser studioUserInfo = this.sysUserMapper.selectOne( + new QueryWrapper().lambda().eq(SysUser::getId, projectLibraryBase.getStudioEngineer()) + ); + + String ids = json.getString("ids"); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isEmpty(ids)) { + throw new JeroBootException("至少选择一条数据进行操作!"); + } + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List projectLawsInventoryEOS = this.baseMapper.selectList(queryWrapper); + for (ProjectLawsInventoryEO projectLawsInventoryEO : projectLawsInventoryEOS) { + if (StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getDesignFlowStatus(), ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue())) { + projectLawsInventoryEO.setDesignFlowStatus(ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()); + } + if (StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(projectLawsInventoryEO.getVerifyFlowStatus(), ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue())) { + projectLawsInventoryEO.setVerifyFlowStatus(ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()); + } + } + + this.updateBatchById(projectLawsInventoryEOS); + + this.lawsInventoryEOListSortByInventoryAffirmDueDate(projectLawsInventoryEOS); + Date inventoryAffirmDueDate = projectLawsInventoryEOS.get(0).getInventoryAffirmDueDate(); + String endTime = ""; + if (inventoryAffirmDueDate != null) { + endTime = DateUtils.formatDate(inventoryAffirmDueDate); + } + List userIdList = Arrays.asList(studioUserInfo.getId().split(",")); + String serialNumbers = projectLawsInventoryEOS.stream().map(ProjectLawsInventoryEO::getSerialNumber).distinct().collect(Collectors.joining(",")); + + // 给studio发消息 + Map params = new HashMap<>(); + String contentCn = "您好,该任务被" + currentUser.getUsername() + "退回,请及时查看处理。"; + String contentEn = "Hello! This task is rejected by " + currentUser.getUsername() + ". Please check and address it in a timely manner."; + params.put("contentCn", contentCn); + params.put("contentEn", contentEn); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("userIdList", userIdList); + params.put("serialNumbers", serialNumbers); + + // 获取法规清单 - 飞书跳转链接 + Map hrefFeishuMap = this.getProjectLawsInventoryLinkHrefFeishu(projectLibraryBase.getId(), PRN_CN, PRN_EN, com.jero.modules.system.enums.ProjectRoleEnum.STUDIO_ENGINEER.getValue()); + params.put("hrefFeishu_CN", (String) hrefFeishuMap.get("hrefFeishu_CN")); + params.put("hrefFeishu_EN", (String) hrefFeishuMap.get("hrefFeishu_EN")); + params.put("hrefFeishu_CN_P", (String) hrefFeishuMap.get("hrefFeishu_CN_P")); + params.put("Initiator", projectLibraryBase.getStudioEngineerName()); + + this.sendMessageByTemplateId(TemplateInfoEnum2.REGULATION_LIST_RELEASE3.getValue(), params); + } + return Result.OK("退回成功!"); + } + + @Override + public String getDeliverableTypeNameById(String projectLawsInventoryId, String cut, String flowType, List projectLawsInventoryEOList, List categoryList) { + String result = ""; + + for (ProjectLawsInventoryEO lawsInventory : projectLawsInventoryEOList) { + if (StringUtils.equals(projectLawsInventoryId, lawsInventory.getId())) { + if (StringUtils.equals(flowType, FlowTypeEnum.SJFHXSHLC.getValue())) { + List designDeliverableTypeList = Arrays.asList(lawsInventory.getDesignDeliverableType().split(",")); + result = this.getTreeName(cut, categoryList, designDeliverableTypeList); + } else if (StringUtils.equals(flowType, FlowTypeEnum.YZFHXSCLC.getValue())) { + lawsInventory.getVerifyDeliverableType(); + List verifyDeliverableTypeList = Arrays.asList(lawsInventory.getVerifyDeliverableType().split(",")); + result = this.getTreeName(cut, categoryList, verifyDeliverableTypeList); + } + } + } + return result; + } + + @Override + public String getDutyTerritoryNameById(String projectLawsInventoryId, String cut, List projectLawsInventoryEOList, List sysDictItems, String dicCode) { + String result = ""; + for (ProjectLawsInventoryEO lawsInventory : projectLawsInventoryEOList) { + if (StringUtils.equals(projectLawsInventoryId, lawsInventory.getId())) { + String dutyTerritory = lawsInventory.getDutyTerritory(); + result = disposeShowDictItemValue(sysDictItems, dutyTerritory, cut, ProjectInventoryFieldEnum.DUTY_TERRITORY.getValue()); + break; + } + } + return result; + } + + @Override + public void sendMessageByTemplateId(String templeteId, Map params) { + LoginUser currentUser = null; + try { + currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + } catch (Exception ex) { + log.error("获取当前用户信息失败!"); + } + + List userIdList = (List) params.get("userIdList"); + if (CollectionUtils.isNotEmpty(userIdList)) { + List userInfoList = this.sysUserService.querySysUserListByIdList(userIdList); + + String projectLibraryId = (String) params.get("projectLibraryId"); + String endTime = (String) params.get("endTime"); + String Initiator = (String) params.get("Initiator"); + String serialNumbers = (String) params.get("serialNumbers"); + String contentCn = (String) params.get("contentCn"); + String contentEn = (String) params.get("contentEn"); + String flowTypeCn = (String) params.get("flowTypeCn"); + String flowTypeEn = (String) params.get("flowTypeEn"); + String hrefFeishu_CN = (String) params.get("hrefFeishu_CN"); + String hrefFeishu_EN = (String) params.get("hrefFeishu_EN"); + String hrefFeishu_CN_P = (String) params.get("hrefFeishu_CN_P"); + + + ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.selectById(projectLibraryId); + if (ObjectUtils.isNotEmpty(projectLibraryBase)) { + String PRN_EN = projectLibraryBase.getProjectNameEn();//项目名称 英文 + String PRN_CN = projectLibraryBase.getProjectNameCn();//项目名称 中文 + + try { + for (String userId : userIdList) { + String thirdId = this.sysUserService.getUserThirdIdByUserId(userInfoList, userId); + + if (StringUtils.isNotEmpty(thirdId)) { + // 根据结束时间进行排序,获取最近的时间,发消息时使用。 + JSONObject larkMesJson = new JSONObject(); + larkMesJson.put("template_id", templeteId); + larkMesJson.put("userIds", thirdId); + + Map templateVariableMap = new HashMap<>(); + templateVariableMap.put("contentCn", contentCn); + templateVariableMap.put("contentEn", contentEn); + templateVariableMap.put("projectNameCn", PRN_CN); + templateVariableMap.put("projectNameEn", PRN_EN); + templateVariableMap.put("Initiator", Initiator); + templateVariableMap.put("studioEngineerName", projectLibraryBase.getStudioEngineerName()); + templateVariableMap.put("endTime", endTime); + templateVariableMap.put("viewBtnUrlCn", hrefFeishu_CN); + templateVariableMap.put("viewBtnUrlCnPhone", hrefFeishu_CN_P); + templateVariableMap.put("viewBtnUrlEn", hrefFeishu_EN); + templateVariableMap.put("operateUserName", ObjectUtils.isNotEmpty(currentUser) ? currentUser.getUsername() : projectLibraryBase.getStudioEngineerName()); + templateVariableMap.put("standName", serialNumbers); + templateVariableMap.put("flowTypeCn", flowTypeCn); + templateVariableMap.put("flowTypeEn", flowTypeEn); + + larkMesJson.put("templateVariableMap", templateVariableMap); + this.feishuService.batchSendLarkCardMsgByTemplate2(larkMesJson); + } + } + } catch (Exception e) { + log.error("飞书消息推送失败"); + } + } + } + } + + @Override + public Map getProjectLawsInventoryLinkHrefFeishu(String projectLibraryId, String PRN_CN, String PRN_EN, String roleOpen) { + Map result = new HashMap<>(); + + String hrefFeishu_CN = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + PRN_CN + + "&roleOpen=" + roleOpen; + + //飞书跳转链接 + String hrefFeishu_EN = backUrl + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getLink() + + projectLibraryId + + JumpLinkEnum.INVENTORY_AFFIRM_LINK.getType() + + "&projectName=" + PRN_EN + + "&roleOpen=" + roleOpen; + + //飞书手机跳转链接 + String hrefFeishu_CN_P = backUrlPhone + + JumpLinkEnum.TO_DO_CENTER_PHONE.getLink()+ "?keyWord=" + PRN_CN; + + result.put("hrefFeishu_CN", URLUtil.encode(hrefFeishu_CN)); + result.put("hrefFeishu_EN", URLUtil.encode(hrefFeishu_EN)); + result.put("hrefFeishu_CN_P", URLUtil.encode(hrefFeishu_CN_P)); + return result; + } + + @Override + public Map getToDoCenterLinkHrefFeishu(String projectLibraryId, Map todoCenterParams) { + String projectNameCn = (String) todoCenterParams.get("projectNameCn"); + String projectNameEn = (String) todoCenterParams.get("projectNameEn"); + +// ProjectLibraryBase projectLibraryBase = this.projectLibraryBaseService.getBaseMapper().selectProjectName(projectLibraryId); +// String projectNameCn = projectLibraryBase.getProjectName(); + + Map result = new HashMap<>(); + + String hrefFeishu_CN = backUrl + + JumpLinkEnum.FGRW_TO_DO_CENTER_LINK.getLink() + "?projectName=" + projectNameCn; + + //飞书跳转链接 + String hrefFeishu_EN = backUrl + + JumpLinkEnum.FGRW_TO_DO_CENTER_LINK.getLink() + "?projectName=" + projectNameEn; + + //飞书手机端跳转链接 + String hrefFeishu_CN_P = backUrlPhone + + JumpLinkEnum.TO_DO_CENTER_PHONE.getLink() + "?keyWord=" + projectNameCn; + + result.put("hrefFeishu_CN", URLUtil.encode(hrefFeishu_CN)); + result.put("hrefFeishu_EN", URLUtil.encode(hrefFeishu_EN)); + result.put("hrefFeishu_CN_P",URLUtil.encode(hrefFeishu_CN_P)); + return result; + } + + @Override + public void lawsInventoryEOListSortByInventoryAffirmDueDate(List projectLawsInventoryEOS) { + Collections.sort(projectLawsInventoryEOS, new Comparator() { + @Override + public int compare(ProjectLawsInventoryEO p1, ProjectLawsInventoryEO p2) { + if (p1.getInventoryAffirmDueDate() != null && p2.getInventoryAffirmDueDate() != null) { + return p1.getInventoryAffirmDueDate().compareTo(p2.getInventoryAffirmDueDate()); + } + return 1; + } + }); + } + + @Override + public void lawsInventoryEOListSortByDesignDueDate(List projectLawsInventoryEOS) { + Collections.sort(projectLawsInventoryEOS, new Comparator() { + @Override + public int compare(ProjectLawsInventoryEO p1, ProjectLawsInventoryEO p2) { + if (p1.getDesignDueDate() != null && p2.getDesignDueDate() != null) { + return p1.getDesignDueDate().compareTo(p2.getDesignDueDate()); + } + return 1; + } + }); + } + + @Override + public void lawsInventoryEOListSortByVerifyDueDate(List projectLawsInventoryEOS) { + Collections.sort(projectLawsInventoryEOS, new Comparator() { + @Override + public int compare(ProjectLawsInventoryEO p1, ProjectLawsInventoryEO p2) { + if (p1.getDesignDueDate() != null && p2.getDesignDueDate() != null) { + return p1.getDesignDueDate().compareTo(p2.getDesignDueDate()); + } + return 1; + } + }); + } + + @Override + public void createQueryPermission(int isProjectRole, LoginUser currentUser, QueryWrapper queryWrapper) { + // 如果是法规工程师,只能看到法规工程师是自己的数据 + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue())) { + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getRegulationOwnerId, currentUser.getId()); + } + // 如果是责任人,只能看到设计符合性或验证符合型 责任人是自己的数据。 + if (isProjectRole == Integer.parseInt(com.jero.modules.system.enums.ProjectRoleEnum.PERSON_LIABLE1.getValue())) { + queryWrapper.and(query -> { + query.lambda().eq(ProjectLawsInventoryEO::getDesignDutyId, currentUser.getId()); + query.or().lambda().eq(ProjectLawsInventoryEO::getVerifyDutyId, currentUser.getId()); + }); + } + // 如果是工程接口人,只能看到工程接口人是自己的数据。 + if (isProjectRole == Integer.parseInt(com.jero.modules.system.enums.ProjectRoleEnum.INTERFACE_PERSON1.getValue())) { + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getEngineeringInterfacePerson, currentUser.getId()); + } + } + + /** + * 系统内所有用户验证 + * + * @param projectLawsInventoryEO + * @param errorMsg + * @param msgList + * @param regulationOwnerId + * @param sysUserList + * @param nameCn + * @param nameEn + * @param fieldNumber + */ + private void sysUserVerify(ProjectLawsInventoryEO projectLawsInventoryEO, + String errorMsg, List msgList, + String userName, + List sysUserList, + String nameCn, String nameEn, + String fieldNumber) { + //单选 + if (userName.contains(",")) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + "导入只能填写一个用户名, "; + } else { + errorMsg += "Only one user name can be entered for" + nameEn + "import, "; + } + msgList.add(errorMsg); + } + + if (sysUserList.size() != 0) { + int count = 0; + for (SysUser sysUser : sysUserList) { + if (StringUtils.equals(userName, sysUser.getUsername())) { + count++; + if (ProjectRoleEnum.DESIGNDUTY.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setDesignDutyId(sysUser.getId()); + } else if (ProjectRoleEnum.VERIFYDUTY.getValue().equals(fieldNumber)) { + projectLawsInventoryEO.setVerifyDutyId(sysUser.getId()); + } + break; + } + } + if (count == 0) { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + userName + "在系统中不存在, "; + } else { + errorMsg += nameEn + userName + "Does not exist in the system, "; + } + msgList.add(errorMsg); + } + } else { + if (CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())) { + errorMsg += nameCn + userName + "在系统中不存在, "; + } else { + errorMsg += nameEn + userName + "Does not exist in the system, "; + } + msgList.add(errorMsg); + } + } + + + @Override + public Result resetFlowTemp(JSONObject parmas) { + String ids = parmas.getString("ids"); + String projectLibraryId = parmas.getString("projectLibraryId"); + if (StringUtils.isNotEmpty(ids)) { + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(ProjectLawsInventoryEO::getId, Arrays.asList(ids.split(","))); + queryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List projectLawsInventoryEOS = this.list(queryWrapper); + + List idList = Arrays.asList(ids.split(",")); + String projectLawsInventoryIds = ids; + String pIds = ""; + + ProjectLawsInventoryEO projectLawsInventoryEO = new ProjectLawsInventoryEO(); + projectLawsInventoryEO.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); + projectLawsInventoryEO.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); + //清单、任务确认初始化。 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(ProjectLawsInventoryEO::getId, idList); + updateWrapper.set(ProjectLawsInventoryEO::getRegulationOwnerSubmitStatus, null); + updateWrapper.set(ProjectLawsInventoryEO::getHomologationEngineerSubmitStatus, null); + updateWrapper.set(ProjectLawsInventoryEO::getSendMsgFlag, null); + updateWrapper.set(ProjectLawsInventoryEO::getSendMsgCurrentFlag, null); + updateWrapper.set(ProjectLawsInventoryEO::getInventoryAffirmDueDate, null); + updateWrapper.set(ProjectLawsInventoryEO::getTaskAffirmDueDate, null); + updateWrapper.set(ProjectLawsInventoryEO::getDesignFlowStatus, ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + updateWrapper.set(ProjectLawsInventoryEO::getVerifyFlowStatus, ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()); + super.update(projectLawsInventoryEO, updateWrapper); + + QueryWrapper processInfoQueryWrap = new QueryWrapper<>(); + processInfoQueryWrap.lambda().in(ProcessInfoEO::getProjectLawsInventoryId, idList); + List processInfoEOList = this.processInfoEOService.list(processInfoQueryWrap); + List actiProcInstIdList = processInfoEOList.stream().filter(processInfo -> { + boolean flag = false; + if (StringUtils.equals(processInfo.getFlowType(), FlowTypeEnum.SJFHXSHLC.getValue()) || StringUtils.equals(processInfo.getFlowType(), FlowTypeEnum.YZFHXSCLC.getValue())) { + flag = true; + } + return flag; + }).map(ProcessInfoEO::getActiProcInstId).distinct().collect(Collectors.toList()); + + pIds = actiProcInstIdList.stream().map(String::valueOf).collect(Collectors.joining(",")); + JSONObject params = new JSONObject(); + params.put("projectLawsInventoryIds", projectLawsInventoryIds); + params.put("pIds", pIds); + //根据流程实例id 、 法规清单id 删除相关流程。 + workFlowFeignClient.deleteProcessInstanceByProjectLawsInventoryIds(params); + + //清除流程中心对应的数据 + params.put("ids", ids); + this.processInfoEOService.change(params); + + // 删除流程历史数据 + this.processHistoryEOService.deleteBiActiProcInstIdList(actiProcInstIdList); + } + return Result.OK("变更成功!"); + } + + @Override + public Result updateFlowStatusBatch(JSONObject json) { + String flowStatus = json.getString("flowStatus"); + JSONArray lawsInventoryArray = json.getJSONArray("lawsInventoryArray"); + if (CollectionUtils.isNotEmpty(lawsInventoryArray)) { + List> lawsInventoryMapList = new ArrayList<>(); + Map lawsInventoryMap = null; + for (Object lawsInventory : lawsInventoryArray) { + lawsInventoryMap = JSONObject.parseObject(JSONObject.toJSONString(lawsInventory), Map.class); + lawsInventoryMapList.add(lawsInventoryMap); + } + + List lawsInventoryIdList = lawsInventoryMapList.stream().map(e -> (String) e.get("id")).distinct().collect(Collectors.toList()); + + QueryWrapper pliQueryWrap = new QueryWrapper<>(); + pliQueryWrap.lambda().in(ProjectLawsInventoryEO::getId, lawsInventoryIdList); + List pliEoList = this.list(pliQueryWrap); + if (CollectionUtils.isNotEmpty(pliEoList) && CollectionUtils.isNotEmpty(lawsInventoryMapList)) { + for (Map map : lawsInventoryMapList) { + String id = (String) map.get("id"); + String operateType = (String) map.get("operateType"); + pliEoList.forEach(pliEo -> { + if (StringUtils.equals(id, pliEo.getId())) { + if (StringUtils.contains(operateType, OperatorTypeEnum.LAWS_INVENTORY_DESIGN_UPDATE_FLOW_STATUS.getValue())) { + pliEo.setDesignFlowStatus(flowStatus); + } + if (StringUtils.contains(operateType, OperatorTypeEnum.LAWS_INVENTORY_VERIFY_UPDATE_FLOW_STATUS.getValue())) { + pliEo.setVerifyFlowStatus(flowStatus); + } + } + }); + } + this.updateBatchById(pliEoList); + } + } + return new Result<>().success("批量更新状态成功!"); + } + + @Override + public Result citeDeliverable(JSONObject json) { + String cut = json.getString("cut"); + String operateType = json.getString("operateType"); + String flowType = ""; + if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_DESIGN_CITE_DELIVERABLE.getValue())) { + flowType = FlowTypeEnum.SJFHXSHLC.getValue(); + } else if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_VERIFY_CITE_DELIVERABLE.getValue())) { + flowType = FlowTypeEnum.YZFHXSCLC.getValue(); + } + + String resultMsg = ""; + ProcessHistoryEO citePhEo = null; + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + resultMsg = "引用交付物成功!"; + } else { + resultMsg = "Successfully referenced deliverables!"; + } + + String serialNumber = json.getString("serialNumber"); + String dutyTerritory = json.getString("dutyTerritory"); + String citeProjectLibraryId = json.getString("citeProjectLibraryId"); + if (StringUtils.isEmpty(citeProjectLibraryId)) { + throw new JeroBootException("请选择引用的项目!"); + } + + // 符合性流程已完成的状态 + List complianceFlowStatusList = new ArrayList<>(); + complianceFlowStatusList.add(ComplianceFlowStatusEnum.CONFORMITY.getValue()); + complianceFlowStatusList.add(ComplianceFlowStatusEnum.INCONFORMITY.getValue()); + complianceFlowStatusList.add(ComplianceFlowStatusEnum.TO_TRACK.getValue()); + complianceFlowStatusList.add(ComplianceFlowStatusEnum.UNINVOLVED.getValue()); + + QueryWrapper citePliQueryWrap = new QueryWrapper<>(); + citePliQueryWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, citeProjectLibraryId); + if (StringUtils.equals(flowType, FlowTypeEnum.SJFHXSHLC.getValue())) { + citePliQueryWrap.lambda().in(ProjectLawsInventoryEO::getDesignFlowStatus, complianceFlowStatusList); + } else if (StringUtils.equals(flowType, FlowTypeEnum.YZFHXSCLC.getValue())) { + citePliQueryWrap.lambda().in(ProjectLawsInventoryEO::getVerifyFlowStatus, complianceFlowStatusList); + } + List citePliEoList = this.list(citePliQueryWrap); + if (CollectionUtils.isNotEmpty(citePliEoList)) { + List citePliEoListTemp = citePliEoList.stream().filter(citePliEo -> { + boolean serialNumberFlag = (StringUtils.equals(serialNumber, citePliEo.getSerialNumber())); + boolean dutyTerritoryFlag = Arrays.equals(dutyTerritory.split(","), citePliEo.getDutyTerritory().split(",")); + boolean deliverableTypeFlag = false; + + if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_DESIGN_CITE_DELIVERABLE.getValue())) { + String designDeliverableType = json.getString("designDeliverableType"); + deliverableTypeFlag = Arrays.equals(designDeliverableType.split(","), citePliEo.getDesignDeliverableType().split(",")); + } else if (StringUtils.equals(operateType, OperatorTypeEnum.LAWS_INVENTORY_VERIFY_CITE_DELIVERABLE.getValue())) { + String verifyDeliverableType = json.getString("verifyDeliverableType"); + deliverableTypeFlag = Arrays.equals(verifyDeliverableType.split(","), citePliEo.getVerifyDeliverableType().split(",")); + } + + return serialNumberFlag && dutyTerritoryFlag && deliverableTypeFlag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(citePliEoListTemp)) { + ProjectLawsInventoryEO citePliEo = citePliEoListTemp.get(0); + String citePliEoId = citePliEo.getId(); + + QueryWrapper citePiQueryWrap = new QueryWrapper<>(); + citePiQueryWrap.lambda().eq(ProcessInfoEO::getProjectLawsInventoryId, citePliEoId); + citePiQueryWrap.lambda().eq(ProcessInfoEO::getFlowType, flowType); + citePiQueryWrap.orderByDesc("create_time"); + List citePiEoList = this.processInfoEOService.list(citePiQueryWrap); + if (CollectionUtils.isNotEmpty(citePiEoList)) { + ProcessInfoEO citePiEo = citePiEoList.get(0); + String citePiEoActiProcInstId = citePiEo.getActiProcInstId(); + + List taskDefinitionKeyList = new ArrayList<>(); + if (StringUtils.equals(flowType, FlowTypeEnum.SJFHXSHLC.getValue())) { + taskDefinitionKeyList.add(DesignComplianceFlowNodeKeyEnum.ZRRTJJFW.getValue()); + taskDefinitionKeyList.add(DesignComplianceFlowNodeKeyEnum.DEZRRTJJFW.getValue()); + } else if (StringUtils.equals(flowType, FlowTypeEnum.YZFHXSCLC.getValue())) { + taskDefinitionKeyList.add(VerifyComplianceFlowNodeKeyEnum.ZRRTJJFW.getValue()); + taskDefinitionKeyList.add(VerifyComplianceFlowNodeKeyEnum.DEZRRTJJFW.getValue()); + } + + QueryWrapper citePhQueryWrap = new QueryWrapper<>(); + citePhQueryWrap.lambda().eq(ProcessHistoryEO::getActiProcInstId, citePiEoActiProcInstId); + citePhQueryWrap.lambda().in(ProcessHistoryEO::getTaskDefinitionKey, taskDefinitionKeyList); + citePhQueryWrap.orderByDesc("create_time"); + List citePhEoList = this.processHistoryEOService.list(citePhQueryWrap); + if (CollectionUtils.isNotEmpty(citePhEoList)) { + citePhEo = citePhEoList.get(0); + } + } + } + + if (ObjectUtils.isEmpty(citePhEo)) { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + resultMsg = "所选引用项目中,没有匹配到数据,请重新选择!"; + } else { + resultMsg = "There is no matching data in the selected reference project. Please reselect!"; + } + } + } else { + if (StringUtils.equals(cut, CutEnum.CN.getValue())) { + resultMsg = "所选引用项目中流程完成数据为空,请重新选择!"; + } else { + resultMsg = "The process completion data in the selected reference project is empty, please reselect!"; + } + } + return Result.OK(resultMsg, citePhEo); + } + + @Override + public Result compulsoryTransfer(JSONObject json) { + String projectLibraryId = json.getString("projectLibraryId"); + String ids = json.getString("ids"); + if (StringUtils.isEmpty(ids)) { + throw new JeroBootException("请选择数据进行强制转办操作!"); + } + List projectLawsInventoryIdList = Arrays.asList(ids.split(",")); + + String designTransferUserId = json.getString("designTransferUserId"); + String verifyTransferUserId = json.getString("verifyTransferUserId"); + + QueryWrapper pliQueryWrap = new QueryWrapper<>(); + pliQueryWrap.lambda().in(ProjectLawsInventoryEO::getId, projectLawsInventoryIdList); + List pliEoList = this.list(pliQueryWrap); + if (CollectionUtils.isNotEmpty(pliEoList)) { + QueryWrapper piQueryWrap = new QueryWrapper<>(); + piQueryWrap.lambda().in(ProcessInfoEO::getProjectLawsInventoryId, projectLawsInventoryIdList); + List piEoList = this.processInfoEOService.list(piQueryWrap); + + if (CollectionUtils.isNotEmpty(piEoList)) { + if (StringUtils.isNotEmpty(designTransferUserId)) { + pliEoList.forEach(pliEo -> { + pliEo.setDesignDutyId(designTransferUserId); + }); + // 设计符合性相关待办任务强制转办 + this.designCompulsoryTransfer(projectLibraryId, designTransferUserId, pliEoList, piEoList); + } + if (StringUtils.isNotEmpty(verifyTransferUserId)) { + pliEoList.forEach(pliEo -> { + pliEo.setVerifyDutyId(verifyTransferUserId); + }); + // 验证符合性相关待办任务强制转办 + this.verifyCompulsoryTransfer(projectLibraryId, verifyTransferUserId, pliEoList, piEoList); + } + + this.updateBatchById(pliEoList); + } + } + return Result.OK("强制转办成功!"); + } + + @Override + public List> getTaskToConfirmStatistics(List projectLawsInventoryEOList) { + List> result = new ArrayList<>(); + + int notStartedCount = 0; + int toConfirmCount = 0; + int acceptedCount = 0; + int rejectedCount = 0; + if(CollectionUtils.isNotEmpty(projectLawsInventoryEOList)){ + // 未发起 + int designNotStartedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + ); + return flag; + }).count(); + int verifyNotStartedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + ); + return flag; + }).count(); + notStartedCount = designNotStartedCount + verifyNotStartedCount; + + // 待确认 + int designToConfirmCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + ); + return flag; + }).count(); + int verifyToConfirmCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + ); + return flag; + }).count(); + toConfirmCount = designToConfirmCount + verifyToConfirmCount; + + // 接受 + int designAcceptedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) + ); + return flag; + }).count(); + int verifyAcceptedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) + ); + return flag; + }).count(); + acceptedCount = designAcceptedCount + verifyAcceptedCount; + + // 拒绝 + int designRejectedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + ); + return flag; + }).count(); + int verifyRejectedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + ); + return flag; + }).count(); + rejectedCount = designRejectedCount + verifyRejectedCount; + } + + Map notStartedMap = new HashMap<>(); + Map toConfirmMap = new HashMap<>(); + Map acceptedMap = new HashMap<>(); + Map rejectedMap = new HashMap<>(); + + notStartedMap.put("taskAffirmStatus",TaskAffirmStatusEnum.NOT_STARTED.getValue()); + notStartedMap.put("taskAffirmStatusCount",notStartedCount); + + toConfirmMap.put("taskAffirmStatus",TaskAffirmStatusEnum.LIST_TO_CONFIRM.getValue()); + toConfirmMap.put("taskAffirmStatusCount",toConfirmCount); + + acceptedMap.put("taskAffirmStatus",TaskAffirmStatusEnum.ACCEPTED.getValue()); + acceptedMap.put("taskAffirmStatusCount",acceptedCount); + + rejectedMap.put("taskAffirmStatus",TaskAffirmStatusEnum.REJECTED.getValue()); + rejectedMap.put("taskAffirmStatusCount",rejectedCount); + + result.add(notStartedMap); + result.add(toConfirmMap); + result.add(acceptedMap); + result.add(rejectedMap); + return result; + } + + @Override + public List> getDesignComplianceStatistice(List projectLawsInventoryEOList) { + List> result = new ArrayList<>(); + + int notStartedCount = 0; + int toConfirmCount = 0; + int complianceCount = 0; + int nonComplianceCount = 0; + if(CollectionUtils.isNotEmpty(projectLawsInventoryEOList)){ + // 未发起 + notStartedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + ); + return flag; + }).count(); + + // 待确认 + toConfirmCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) + ); + return flag; + }).count(); + + // 符合 + complianceCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + ); + return flag; + }).count(); + + // 不符合 + nonComplianceCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + ); + return flag; + }).count(); + } + + Map notStartedMap = new HashMap<>(); + Map toConfirmMap = new HashMap<>(); + Map acceptedMap = new HashMap<>(); + Map rejectedMap = new HashMap<>(); + + notStartedMap.put("designFlowTaskStatus",TaskAffirmStatusEnum.NOT_STARTED.getValue()); + notStartedMap.put("designFlowTaskStatusCount",notStartedCount); + + toConfirmMap.put("designFlowTaskStatus",TaskAffirmStatusEnum.LIST_TO_CONFIRM.getValue()); + toConfirmMap.put("designFlowTaskStatusCount",toConfirmCount); + + acceptedMap.put("designFlowTaskStatus",ComplianceFlowStatusEnum.CONFORMITY.getValue()); + acceptedMap.put("designFlowTaskStatusCount",complianceCount); + + rejectedMap.put("designFlowTaskStatus",ComplianceFlowStatusEnum.INCONFORMITY.getValue()); + rejectedMap.put("designFlowTaskStatusCount",nonComplianceCount); + + result.add(notStartedMap); + result.add(toConfirmMap); + result.add(acceptedMap); + result.add(rejectedMap); + return result; + } + + @Override + public List> getVerifyComplianceStatistice(List projectLawsInventoryEOList) { + List> result = new ArrayList<>(); + + int notStartedCount = 0; + int toConfirmCount = 0; + int complianceCount = 0; + int nonComplianceCount = 0; + if(CollectionUtils.isNotEmpty(projectLawsInventoryEOList)){ + // 未发起 + notStartedCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + ); + return flag; + }).count(); + + // 待确认 + toConfirmCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) + ); + return flag; + }).count(); + + // 符合 + complianceCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + ); + return flag; + }).count(); + + // 不符合 + nonComplianceCount = (int) projectLawsInventoryEOList.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + ); + return flag; + }).count(); + } + + Map notStartedMap = new HashMap<>(); + Map toConfirmMap = new HashMap<>(); + Map acceptedMap = new HashMap<>(); + Map rejectedMap = new HashMap<>(); + + notStartedMap.put("verifyFlowTaskStatus",TaskAffirmStatusEnum.NOT_STARTED.getValue()); + notStartedMap.put("verifyFlowTaskStatusCount",notStartedCount); + + toConfirmMap.put("verifyFlowTaskStatus",TaskAffirmStatusEnum.LIST_TO_CONFIRM.getValue()); + toConfirmMap.put("verifyFlowTaskStatusCount",toConfirmCount); + + acceptedMap.put("verifyFlowTaskStatus",ComplianceFlowStatusEnum.CONFORMITY.getValue()); + acceptedMap.put("verifyFlowTaskStatusCount",complianceCount); + + rejectedMap.put("verifyFlowTaskStatus",ComplianceFlowStatusEnum.INCONFORMITY.getValue()); + rejectedMap.put("verifyFlowTaskStatusCount",nonComplianceCount); + + result.add(notStartedMap); + result.add(toConfirmMap); + result.add(acceptedMap); + result.add(rejectedMap); + return result; + } + + @Override + public List> queryNotComplianList(Map params) { + String cut = (String) params.get("cut"); + + List complianceFlowStatusList = new ArrayList<>(); + complianceFlowStatusList.add(ComplianceFlowStatusEnum.INCONFORMITY.getValue()); + complianceFlowStatusList.add(ComplianceFlowStatusEnum.TO_TRACK.getValue()); + params.put("complianceFlowStatusList",complianceFlowStatusList); + List> result = this.baseMapper.queryNotComplianList(params); + if(CollectionUtils.isNotEmpty(result)){ + List sysDictItems = sysDictItemServiceImpl.selectItemsAll(); + + List userIdList = new ArrayList<>(); + + List regulationOwnerIdList = result.stream().filter( + data -> StringUtils.isNotEmpty((String) data.get("regulationOwnerId")) + ).map(e -> (String) e.get("regulationOwnerId")).distinct().collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(regulationOwnerIdList)){ + userIdList.addAll(regulationOwnerIdList); + } + + List dutyIdList = result.stream().filter( + data -> StringUtils.isNotEmpty((String) data.get("dutyId")) + ).map(e -> (String) e.get("dutyId")).distinct().collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(dutyIdList)){ + userIdList.addAll(dutyIdList); + } + List userList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(userIdList)){ + userList = this.sysUserService.querySysUserListByIdList(userIdList); + } + //流程实例id + List processInfoDetailEOS = new ArrayList<>(); + List projectLawsInventoryIdList = result.stream().map(e -> (String) e.get("id")).collect(Collectors.toList()); + List processHistoryEOList = new ArrayList<>(); + if(ObjectUtils.isNotEmpty(projectLawsInventoryIdList)){ + QueryWrapper processInfoDetailEOQueryWrapper = new QueryWrapper<>(); + processInfoDetailEOQueryWrapper.lambda().in(ProcessInfoDetailEO::getProjectLawsInventoryId,projectLawsInventoryIdList); + processInfoDetailEOQueryWrapper.orderByDesc("create_time"); + processInfoDetailEOS = this.processInfoDetailEOService.list(processInfoDetailEOQueryWrapper); + if(ObjectUtils.isNotEmpty(processInfoDetailEOS)){ + List actiProcInstIdList = processInfoDetailEOS.stream().map(ProcessInfoDetailEO::getActiProcInstId).collect(Collectors.toList()); + if(ObjectUtils.isNotEmpty(actiProcInstIdList)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByAsc("create_time"); + queryWrapper.lambda().in(ProcessHistoryEO::getActiProcInstId, actiProcInstIdList); + processHistoryEOList = processHistoryEOService.list(queryWrapper); + if(ObjectUtils.isNotEmpty(processHistoryEOList)){ + this.processHistoryEOServiceImpl.disposeData(processHistoryEOList,cut); + } + } + } + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (Map dataMap : result) { + dataMap.put("uuid",dataMap.get("id")); + //相关法规 + dataMap.put("lawsName",dataMap.get("serialNumber")); + //相关项目(旧数据的未符合项,都是属于这一个项目的) + dataMap.put("projectName",params.get("projectName")); + dataMap.put("projectid",params.get("projectLibraryId")); + //创建时间 + dataMap.put("createTime",dataMap.get("createTime")); + //更新时间 + dataMap.put("updateTime",dataMap.get("updateTime")); + + String dutyTerritory = (String) dataMap.get("dutyTerritory"); + if(StringUtils.isNotEmpty(dutyTerritory)){ + if(StringUtils.isNotEmpty(dutyTerritory)){ + String dutyTerritory_dictText = this.disposeShowDictItemValue(sysDictItems, dutyTerritory,cut,ProjectInventoryFieldEnum.DUTY_TERRITORY.getValue()); + dataMap.put("dutyTerritory_dictText",dutyTerritory_dictText); + //责任部门 + dataMap.put("dutyTerritory",dutyTerritory_dictText); + } + } + + String flowStatus = (String) dataMap.get("flowStatus"); + String problemType_dictText = ""; + if(StringUtils.isNotEmpty(flowStatus)){ + String textByValue = ComplianceFlowStatusEnum.getTextByValue(flowStatus, cut); + if(ComplianceFlowStatusEnum.INCONFORMITY.getCnName().equals(textByValue) + || ComplianceFlowStatusEnum.INCONFORMITY.getEnName().equals(textByValue)){ + //问题类型 + if(CutEnum.CN.getValue().equals(cut)){ + problemType_dictText = ComplianceFlowStatusEnum.LAWS_INCONFORMITY.getCnName(); + dataMap.put("problemType_dictText",problemType_dictText); + }else{ + problemType_dictText = ComplianceFlowStatusEnum.LAWS_INCONFORMITY.getEnName(); + dataMap.put("problemType_dictText",problemType_dictText); + } + //问题状态 + dataMap.put("problemState", ColourEnum.RED.getName()); + } + if(ComplianceFlowStatusEnum.TO_TRACK.getCnName().equals(textByValue) + ||ComplianceFlowStatusEnum.TO_TRACK.getEnName().equals(textByValue)){ + //问题类型 + if(CutEnum.CN.getValue().equals(cut)){ + problemType_dictText = ComplianceFlowStatusEnum.LAWS_TO_TRACK.getCnName(); + dataMap.put("problemType_dictText",problemType_dictText); + }else{ + problemType_dictText = ComplianceFlowStatusEnum.LAWS_TO_TRACK.getEnName(); + dataMap.put("problemType_dictText",problemType_dictText); + } + //问题状态 + dataMap.put("problemState",ColourEnum.YELLOW.getName()); + } + dataMap.put("flowStatusName",ComplianceFlowStatusEnum.getTextByValue(flowStatus,cut)); + } + + if(CollectionUtils.isNotEmpty(userList)){ + String regulationOwnerId = (String) dataMap.get("regulationOwnerId"); + if(StringUtils.isNotEmpty(regulationOwnerId)){ + String regulationOwnerIdName = this.sysUserService.getUsernameByUserId(userList,regulationOwnerId); + dataMap.put("regulationOwnerIdName",regulationOwnerIdName); + } + String dutyId = (String) dataMap.get("dutyId"); + if(StringUtils.isNotEmpty(dutyId)){ + String dutyIdName = this.sysUserService.getUsernameByUserId(userList,dutyId); + dataMap.put("dutyIdName",dutyIdName); + //创建人 + dataMap.put("createBy",dutyIdName); + } + } + + String flowType = (String) dataMap.get("flowType"); + if(StringUtils.isNotEmpty(flowType)){ + dataMap.put("flowTypeName",FlowTypeEnum.getTextByValue(flowType,cut)); + } + //标题 + if(CutEnum.CN.getValue().equals(cut)){ + dataMap.put("title",(String) dataMap.get("flowTypeName") + problemType_dictText); + }else{ + dataMap.put("title",(String) dataMap.get("flowTypeName") +" " + problemType_dictText); + } + + dataMap.put("flag", DataEnum.OLD.getValue()); + + // 更新时间,创建时间 + if(ObjectUtils.isNotEmpty(processInfoDetailEOS)){ + List collect = processInfoDetailEOS.stream() + .filter(e -> StringUtils.isNotBlank(e.getFlowType()) && e.getFlowType().equals(flowType)).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(collect)){ + dataMap.put("actiProcInstId",collect.get(0).getActiProcInstId()); + if(ObjectUtils.isNotEmpty(processHistoryEOList)){ + List processHistoryEOSTemp = processHistoryEOList.stream().filter(e -> StringUtils.isNotBlank(e.getActiProcInstId()) + && e.getActiProcInstId().equals(collect.get(0).getActiProcInstId())).collect(Collectors.toList()); + //创建时间为任务节点为符合性审查,处理结果为不符合或待追踪的操作时间 + //更新时间为最新的流程时间 + if(!processHistoryEOSTemp.isEmpty()){ + //更新时间 + if(ObjectUtils.isNotEmpty(processHistoryEOSTemp.get(processHistoryEOSTemp.size()-1).getCreateTime())){ + dataMap.put("updateTime",sdf.format(processHistoryEOSTemp.get(processHistoryEOSTemp.size()-1).getCreateTime())); + } + //创建时间 + List processHistoryEOS = processHistoryEOSTemp.stream().filter(e -> StringUtils.isNotBlank(e.getTaskDefinitionKey()) + && DesignComplianceFlowNodeKeyEnum.FGGCSSH.getValue().equals(e.getTaskDefinitionKey()) + && (ComplianceFlowStatusEnum.INCONFORMITY.getValue().equals(e.getOperatorResult()) || ComplianceFlowStatusEnum.TO_TRACK.getValue().equals(e.getOperatorResult()))).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(processHistoryEOS)) { + if(ObjectUtils.isNotEmpty(processHistoryEOS.get(0).getCreateTime())){ + dataMap.put("createTime",sdf.format(processHistoryEOS.get(0).getCreateTime())); + } + } + } + } + } + } +// QueryWrapper processInfoDetailEOQueryWrapper = new QueryWrapper<>(); +// processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getProjectLawsInventoryId,(String)dataMap.get("id")); +// processInfoDetailEOQueryWrapper.lambda().eq(ProcessInfoDetailEO::getFlowType,flowType); +// processInfoDetailEOQueryWrapper.orderByDesc("create_time"); +// List processInfoDetailEOS = this.processInfoDetailEOService.list(processInfoDetailEOQueryWrapper); +// if(CollectionUtils.isNotEmpty(processInfoDetailEOS)){ +// dataMap.put("actiProcInstId",processInfoDetailEOS.get(0).getActiProcInstId()); +// } + } + + + + } + //新数据 + List> mapList = getNewData(params, cut); + if(ObjectUtils.isNotEmpty(mapList)){ + result.addAll(mapList); + } + //条件查询 + result = dataParameter(params, result); + //表头排序 + heartSort(params, result); + + + return result; + } + + private void heartSort(Map params, List> result) { + Collator comparator = Collator.getInstance(Locale.CHINESE); + if ("title".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("title")) ? String.valueOf(e1.get("title")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("title")) ? String.valueOf(e2.get("title")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("title")) ? String.valueOf(e1.get("title")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("title")) ? String.valueOf(e2.get("title")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("lawsName".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("lawsName")) ? String.valueOf(e1.get("lawsName")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("lawsName")) ? String.valueOf(e2.get("lawsName")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("lawsName")) ? String.valueOf(e1.get("lawsName")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("lawsName")) ? String.valueOf(e2.get("lawsName")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("projectName".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("projectName")) ? String.valueOf(e1.get("projectName")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("projectName")) ? String.valueOf(e2.get("projectName")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("projectName")) ? String.valueOf(e1.get("projectName")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("projectName")) ? String.valueOf(e2.get("projectName")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("problemType_dictText".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("problemType_dictText")) ? String.valueOf(e1.get("problemType_dictText")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("problemType_dictText")) ? String.valueOf(e2.get("problemType_dictText")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("problemType_dictText")) ? String.valueOf(e1.get("problemType_dictText")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("problemType_dictText")) ? String.valueOf(e2.get("problemType_dictText")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("dutyTerritory".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("dutyTerritory")) ? String.valueOf(e1.get("dutyTerritory")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("dutyTerritory")) ? String.valueOf(e2.get("dutyTerritory")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("dutyTerritory")) ? String.valueOf(e1.get("dutyTerritory")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("dutyTerritory")) ? String.valueOf(e2.get("dutyTerritory")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("createBy".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("createBy")) ? String.valueOf(e1.get("createBy")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("createBy")) ? String.valueOf(e2.get("createBy")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("createBy")) ? String.valueOf(e1.get("createBy")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("createBy")) ? String.valueOf(e2.get("createBy")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("problemState".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("problemState")) ? String.valueOf(e1.get("problemState")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("problemState")) ? String.valueOf(e2.get("problemState")) : ""; + return comparator.compare(e1Field, e2Field); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + String e1Field = ObjectUtils.isNotEmpty(e1.get("problemState")) ? String.valueOf(e1.get("problemState")) : ""; + String e2Field = ObjectUtils.isNotEmpty(e2.get("problemState")) ? String.valueOf(e2.get("problemState")) : ""; + return comparator.compare(e2Field, e1Field); + }); + } + } + if ("createTime".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + if (e1.get("createTime") == null || e2.get("createTime") == null) { + return 0; + } + return comparator.compare(e1.get("createTime"), e2.get("createTime")); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + if (e1.get("createTime") == null || e2.get("createTime") == null) { + return 0; + } + return comparator.compare(e2.get("createTime"), e1.get("createTime")); + }); + } + } + if ("updateTime".equals(params.get("orderByField"))) { + if (OrderEnum.POSITIVE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + if (e1.get("updateTime") == null || e2.get("updateTime") == null) { + return 0; + } + return comparator.compare(e1.get("updateTime"), e2.get("updateTime")); + }); + } else if (OrderEnum.REVERSE.getValue().equals(params.get("orderBy"))) { + Collections.sort(result, (e1, e2) -> { + if (e1.get("updateTime") == null || e2.get("updateTime") == null) { + return 0; + } + return comparator.compare(e2.get("updateTime"), e1.get("updateTime")); + }); + } + } + } + + @NotNull + private List> getNewData(Map params, String cut) { + //新数据 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(ProblemManagementEO::getProjectId,params.get("projectLibraryId")); + List managementEOList = problemManagementEOService.list(wrapper); + //法规 + List lawsIdList = managementEOList.stream() + .filter(e-> StringUtils.isNotBlank(e.getLawsId())).map(ProblemManagementEO::getLawsId).collect(Collectors.toList()); + //项目 + List projectIdList = managementEOList.stream() + .filter(e->StringUtils.isNotBlank(e.getProjectId())).map(ProblemManagementEO::getProjectId).collect(Collectors.toList()); + //相关文件 + List fileList = managementEOList.stream() + .filter(e -> StringUtils.isNotBlank(e.getFile())).map(ProblemManagementEO::getFile).collect(Collectors.toList()); + //审批证据 + List approvalEvidenceList = managementEOList.stream() + .filter(e -> StringUtils.isNotBlank(e.getApprovalEvidence())).map(ProblemManagementEO::getApprovalEvidence).collect(Collectors.toList()); + List connectList = new ArrayList<>(); + if(!fileList.isEmpty()){ + connectList.addAll(fileList); + } + if(!approvalEvidenceList.isEmpty()){ + connectList.addAll(approvalEvidenceList); + } + List fileInfoList = new ArrayList<>(); + if(!connectList.isEmpty()){ + fileInfoList = iOSSFileService.getFileInfosByConnectId(StringUtils.join(connectList,",")); + } + + List documentLibraryEOList = new ArrayList<>(); + if(!lawsIdList.isEmpty()){ + Set lawIdSet = new HashSet<>(); + for (String lawIds : lawsIdList) { + lawIdSet.addAll(Arrays.asList(lawIds.split(","))); + } + if(!lawIdSet.isEmpty()){ + LambdaQueryWrapper wrapperDocument = new LambdaQueryWrapper<>(); + wrapperDocument.in(BussDocumentLibraryEO::getId, lawIdSet); + documentLibraryEOList = bussDocumentLibraryEOService.list(wrapperDocument); + } + } + + List projectLibraryBaseList = new ArrayList<>(); + if(!projectIdList.isEmpty()){ + Set projectIdSet = new HashSet<>(); + for (String projectIds : projectIdList) { + projectIdSet.addAll(Arrays.asList(projectIds.split(","))); + } + if(!projectIdSet.isEmpty()){ + projectLibraryBaseList = problemManagementEOMapper.queryByIds(StringUtils.join(projectIdSet,",")); + } + } + List problemTypeList = sysDictService.queryDictItemsByCode(DicCodeEnum.PROBLEM_TYPE.getCode()); + + List ncrTrackVOList = new ArrayList<>(); + List> mapList = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (ProblemManagementEO problemManagementEO : managementEOList) { + Map map = new HashMap<>(); + map.put("title",problemManagementEO.getTitle()); + map.put("psIssue",problemManagementEO.getPsIssue()); + map.put("dutyTerritory",problemManagementEO.getDutyTerritory()); + map.put("problemState",problemManagementEO.getProblemState()); + map.put("problemType",problemManagementEO.getProblemType()); + map.put("description",problemManagementEO.getDescription()); + map.put("conclusion",problemManagementEO.getConclusion()); + map.put("createBy",problemManagementEO.getCreateBy()); + map.put("createTime",sdf.format(problemManagementEO.getCreateTime())); + map.put("updateTime",sdf.format(problemManagementEO.getUpdateTime())); + map.put("uuid",problemManagementEO.getId()); + map.put("id",problemManagementEO.getId()); + map.put("flag",DataEnum.NEW.getValue()); + + List dictModelList = problemTypeList.stream().filter(e -> e.getValue().equals(problemManagementEO.getProblemType())).collect(Collectors.toList()); + + if(!dictModelList.isEmpty()){ + if(CutEnum.CN.getValue().equals(cut)){ + map.put("problemType_dictText",dictModelList.get(0).getText()); + }else{ + map.put("problemType_dictText",dictModelList.get(0).getTextEn()); + } + } + //相关法规 + if(StringUtils.isNotBlank(problemManagementEO.getLawsId())){ + if(!documentLibraryEOList.isEmpty()){ + List documentLibraryEOListTemp = documentLibraryEOList.stream() + .filter(e->StringUtils.isNotBlank(problemManagementEO.getLawsId()) + && problemManagementEO.getLawsId().contains(e.getId())).collect(Collectors.toList()); + List serialNumberList = documentLibraryEOListTemp.stream().map(BussDocumentLibraryEO::getSerialNumber).collect(Collectors.toList()); + problemManagementEO.setLawsName(StringUtils.join(serialNumberList,",")); + map.put("lawsName",StringUtils.join(serialNumberList,",")); + map.put("lawsId",problemManagementEO.getLawsId()); + } + } + //相关项目 + if(StringUtils.isNotBlank(problemManagementEO.getProjectId())){ + List projectLibraryBaseListTemp = projectLibraryBaseList.stream() + .filter(e->StringUtils.isNotBlank(problemManagementEO.getProjectId()) + && problemManagementEO.getProjectId().contains(e.getId())).collect(Collectors.toList()); + //目标市场数据字典 + List targetMarketList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + List projectNameList = new ArrayList<>(); + for (ProjectLibraryBase projectLibraryBase : projectLibraryBaseListTemp) { + //目标市场 + String targetMarket = problemManagementEOService.getMarket(cut, targetMarketList, projectLibraryBase); + //主项目的版本号 + String projectVersion = ""; + if(com.jero.modules.system.util.StringUtils.isBlank(projectLibraryBase.getParentId())){ + projectVersion = "00"; + }else{ + projectVersion = projectLibraryBase.getProjectVersion(); + } + projectNameList.add(projectLibraryBase.getProjectName() + + "-" + projectLibraryBase.getYearName() + + "-" + targetMarket + +"-"+projectVersion); + } + if(!projectNameList.isEmpty()){ + problemManagementEO.setProjectName(StringUtils.join(projectNameList,",")); + map.put("projectName",StringUtils.join(projectNameList,",")); + map.put("projectId",problemManagementEO.getProjectId()); + } + } + + //相关文件连接 + if(StringUtils.isNotBlank(problemManagementEO.getFileLink())){ + List list = new ArrayList<>(); + for (String fileLink : problemManagementEO.getFileLink().split(",")) { + ProblemManagementVO problemManagementVO = new ProblemManagementVO(); + problemManagementVO.setFileLink(fileLink); + list.add(problemManagementVO); + } + problemManagementEO.setFileLinkList(list); + map.put("fileLinkList",list); + } + + //审批证据连接 + if(StringUtils.isNotBlank(problemManagementEO.getApprovalEvidenceLink())){ + List list = new ArrayList<>(); + for (String approvalEvidenceLink : problemManagementEO.getApprovalEvidenceLink().split(",")) { + ProblemManagementVO problemManagementVO = new ProblemManagementVO(); + problemManagementVO.setApprovalEvidenceLink(approvalEvidenceLink); + list.add(problemManagementVO); + } + problemManagementEO.setApprovalEvidenceLinkList(list); + map.put("approvalEvidenceLinkList",list); + } + //进度追踪 + if(StringUtils.isNotBlank(problemManagementEO.getProgressTracking())){ + List list = new ArrayList<>(); + for (String progressTracking : problemManagementEO.getProgressTracking().split(",")) { + ProblemManagementVO problemManagementVO = new ProblemManagementVO(); + problemManagementVO.setProgressTracking(progressTracking); + list.add(problemManagementVO); + } + problemManagementEO.setProgressTrackingList(list); + map.put("progressTrackingList",list); + } + //相关文件 + if(StringUtils.isNotBlank(problemManagementEO.getFile())){ + List collect = fileInfoList.stream() + .filter(e -> e.getConnectId().equals(problemManagementEO.getFile())).collect(Collectors.toList()); + problemManagementEO.setFileList(collect); + map.put("fileList",collect); + map.put("file",problemManagementEO.getFile()); + } + //审批证据 + if(StringUtils.isNotBlank(problemManagementEO.getApprovalEvidence())){ + List collect = fileInfoList.stream() + .filter(e -> e.getConnectId().equals(problemManagementEO.getApprovalEvidence())).collect(Collectors.toList()); + problemManagementEO.setApprovalEvidenceFileList(collect); + map.put("approvalEvidenceFileList",collect); + map.put("approvalEvidence",problemManagementEO.getApprovalEvidence()); + + } + mapList.add(map); + NcrTrackVO ncrTrackVOTemp = new NcrTrackVO(); + BeanUtils.copyProperties(problemManagementEO,ncrTrackVOTemp); + ncrTrackVOTemp.setUuid(ncrTrackVOTemp.getId()); + ncrTrackVOTemp.setFlag(DataEnum.NEW.getValue()); + ncrTrackVOList.add(ncrTrackVOTemp); + } + return mapList; + } + + private List> dataParameter(Map params, List> mapList) { + if(ObjectUtils.isNotEmpty(params.get("title"))){//标题 + mapList = mapList.stream().filter(e->ObjectUtils.isNotEmpty(e.get("title")) + && e.get("title").toString().contains(params.get("title").toString())).collect(Collectors.toList()); + } + if(ObjectUtils.isNotEmpty(params.get("lawsName"))){//相关法规 + mapList = mapList.stream().filter(e->ObjectUtils.isNotEmpty(e.get("lawsName")) + && e.get("lawsName").toString().contains(params.get("lawsName").toString())).collect(Collectors.toList()); + } + if(ObjectUtils.isNotEmpty(params.get("projectId"))){//相关项目 + mapList = mapList.stream().filter(e->ObjectUtils.isNotEmpty(e.get("projectId")) + && String.valueOf(e.get("projectId")).equals(String.valueOf(params.get("projectId")))).collect(Collectors.toList()); + } + if(ObjectUtils.isNotEmpty(params.get("problemType_dictText"))){//问题类型 + mapList = mapList.stream().filter(e->ObjectUtils.isNotEmpty(e.get("problemType_dictText")) + && e.get("problemType_dictText").toString().equals(params.get("problemType_dictText").toString())).collect(Collectors.toList()); + } + if(ObjectUtils.isNotEmpty(params.get("dutyTerritory"))){//责任领域 + mapList = mapList.stream().filter(e->ObjectUtils.isNotEmpty(e.get("dutyTerritory")) + && e.get("dutyTerritory").toString().contains(params.get("dutyTerritory").toString())).collect(Collectors.toList()); + } + if(ObjectUtils.isNotEmpty(params.get("problemState"))){//问题状态 + mapList = mapList.stream().filter(e->ObjectUtils.isNotEmpty(e.get("problemState")) + && e.get("problemState").toString().contains(params.get("problemState").toString())).collect(Collectors.toList()); + } + return mapList; + } + + @Override + public void exportNotComplianList(HttpServletResponse response, HttpServletRequest request, Map params) { +// params.put("projectLibraryId","1546314907190935554"); +// params.put("projectName","EDS1.2 EVO-G1.1-中国-00"); +// params.put("cut","en"); + +// Map map1 = new HashMap<>(); +// map1.put("id","e4a2fe2b042e4150943e82094250f54d"); +// Map map2 = new HashMap<>(); +// map2.put("id","e1d5b1aa19344abb8154deea15539daa"); +// List> ncrTrackVOList =new ArrayList<>(); +// ncrTrackVOList.add(map1); +// ncrTrackVOList.add(map2); +// +// params.put("ncrTrackVOList",ncrTrackVOList); + + + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdfTemp = new SimpleDateFormat("yyyy-MM-dd"); + String cut = (String) params.get("cut"); + String header = ""; + String sheetName = ""; + if (StringUtils.equals(cut,CutEnum.CN.getValue())) { + sheetName = "问题管理"; + header = "标题,问题类型,PS_ISSUE,创建人,创建时间,相关法规,相关项目,责任部门,问题状态,描述和分析"; + } else if (StringUtils.equals(cut,CutEnum.EN.getValue())) { + header = "Title,Issue Type,PS-ISSUE,Creator,Create Date,Related Regualtions,Related Project,Resonsible Field,Status,Description"; + sheetName = "Problem management"; + } + + OutputStream os = null; + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet(sheetName); + + List> dataList = this.queryNotComplianList(params); + + List> expertDataList = new ArrayList<>(); + if(ObjectUtils.allNotNull(dataList)){ + List> mapList = (List>) params.get("ncrTrackVOList"); + if(ObjectUtils.isNotEmpty(mapList)){ + for (Map map : mapList) { + List> collect = dataList.stream().filter(e -> ObjectUtils.isNotEmpty(e.get("id")) && e.get("id").equals(map.get("id"))).collect(Collectors.toList()); + expertDataList.addAll(collect); + } + dataList = expertDataList; + } + } + + CellStyle cellStyle = workbook.createCellStyle(); + cellStyle.setAlignment(HorizontalAlignment.CENTER); + Row rowHeader = sheet.createRow(0);//开始创建标题行 + if (com.jero.modules.system.util.StringUtils.isNotBlank(header)) { + String[] headerArr = header.split(","); + for (int i = 0; i < headerArr.length; i++) { + sheet.setColumnWidth(i, 5000); // 设置列宽度为5000 + Cell cellHeader = rowHeader.createCell(i); + cellHeader.setCellStyle(cellStyle); + cellHeader.setCellValue(headerArr[i]); + } + } + + if(CollectionUtils.isNotEmpty(dataList)){ + for (int i = 0; i < dataList.size(); i++) { + Row row = sheet.createRow(i + 1); + row.createCell(0).setCellValue((String) dataList.get(i).get("title")); + row.createCell(1).setCellValue((String) dataList.get(i).get("problemType_dictText")); + row.createCell(2).setCellValue((String) dataList.get(i).get("psIssue")); + row.createCell(3).setCellValue((String) dataList.get(i).get("createBy")); + row.createCell(4).setCellValue((String) dataList.get(i).get("createTime")); + row.createCell(5).setCellValue((String) dataList.get(i).get("lawsName")); + row.createCell(6).setCellValue((String) dataList.get(i).get("projectName")); + row.createCell(7).setCellValue((String) dataList.get(i).get("dutyTerritory")); + row.createCell(8).setCellValue((String) dataList.get(i).get("problemState")); + row.createCell(9).setCellValue((String) dataList.get(i).get("description")); + } + } + try { + String path = uploadpath + "/tempZip"; + File fileTemp = new File(path); + if (fileTemp.exists()) { + fileTemp.delete(); + } + fileTemp.mkdirs(); + String name = ""; + if(CutEnum.CN.getValue().equals(cut)){ + name = "问题管理"; + }else{ + name = "Problem management"; + } + OutputStream excelOS = new FileOutputStream(path + File.separator + name + sdfTemp.format(new Date())+".xlsx"); + workbook.write(excelOS); + excelOS.flush(); + + //处理文件 + List connectIdList = new ArrayList<>(); + List fileList = dataList.stream() + .filter(e -> ObjectUtils.isNotEmpty(e.get("file"))).map(e -> e.get("file")).collect(Collectors.toList()); + List approvalEvidenceList = dataList.stream() + .filter(e -> ObjectUtils.isNotEmpty(e.get("approvalEvidence"))).map(e -> e.get("approvalEvidence")).collect(Collectors.toList()); + if(!fileList.isEmpty()){ + connectIdList.addAll(fileList); + } + if(!approvalEvidenceList.isEmpty()){ + connectIdList.addAll(approvalEvidenceList); + } + if(!connectIdList.isEmpty()){ + List fileInfosList = iOSSFileService.getFileInfosByConnectId(StringUtils.join(connectIdList, ",")); + for (Map map : dataList) { + String title = (String) map.get("title"); + String createTime = ""; + if(ObjectUtils.isNotEmpty(map.get("createTime"))){ + createTime = String.valueOf(map.get("createTime")).split(" ")[0]; + } + String folder = title+createTime; + List connectIdListTemp = new ArrayList<>(); + if(ObjectUtils.isNotEmpty(map.get("file"))){ + connectIdListTemp.add((String) map.get("file")); + } + if(ObjectUtils.isNotEmpty(map.get("approvalEvidence"))){ + connectIdListTemp.add((String) map.get("approvalEvidence")); + } + if(!connectIdListTemp.isEmpty()){ + List ossFileList = fileInfosList.stream().filter(e -> connectIdListTemp.contains(e.getConnectId())).collect(Collectors.toList()); + if (ossFileList.size() != 0) { + String fileNowPath = path + File.separator + folder; + File file = new File(fileNowPath); + if (file.exists()) { + file.delete(); + } + file.mkdirs(); + for (OSSFile ossFile : ossFileList) { + String url = ossFile.getUrl(); + //判断文件是否存在 + if(StringUtils.isNotBlank(url)){ + //判断文件是否存在 + boolean b = CosBootUtil.doesObjectExist(url); + if(b){ + InputStream download = CosBootUtil.download(url); + if(url.endsWith(".pdf") || url.endsWith(".PDF")){ + String currentTime = sdf.format(new Date()); + String waterContent = loginUser.getUsername() + " " + currentTime; + File newFile = PDFUtils.PDFWatermark(download,uploadpath,ossFile.getFileName(),waterContent); + download = new FileInputStream(newFile.getPath()); + } + documentLibraryEOService.copyFile(download, fileNowPath + File.separator + ossFile.getFileName()); + } + } + } + } + } + } + } + ZipUtil.zip(path, path + ".zip"); + //文件 + FileInputStream fis = new FileInputStream(path + ".zip"); + os = response.getOutputStream(); + + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("导出失败"); + }else{ + throw new JeroBootException("Export failure"); + } + }finally { + IOUtils.closeQuietly(os); + File file = new File(uploadpath + "/tempZip"); + FileUtil.deleteContents(file); + File fileTemp = new File(uploadpath + "/tempZip.zip"); + FileUtil.deleteContents(fileTemp); + } + } + + /** + * 设计符合性相关待办任务强制转办 + * + * @param projectLibraryId + * @param designTransferUserId + * @param pliEoList + * @param piEoList + */ + private void designCompulsoryTransfer(String projectLibraryId, String designTransferUserId, List pliEoList, List piEoList) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List designPiEoList = piEoList.stream().filter(piEo -> { + boolean flag = false; + if (StringUtils.equals(piEo.getFlowType(), FlowTypeEnum.SJFHXSHLC.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + List taskDefinitionKeyList = new ArrayList<>(); + taskDefinitionKeyList.add(DesignComplianceFlowNodeKeyEnum.ZRRQR.getValue()); + taskDefinitionKeyList.add(DesignComplianceFlowNodeKeyEnum.DEZRRQR.getValue()); + taskDefinitionKeyList.add(DesignComplianceFlowNodeKeyEnum.ZRRTJJFW.getValue()); + taskDefinitionKeyList.add(DesignComplianceFlowNodeKeyEnum.DEZRRTJJFW.getValue()); + + List actiProcInstIdList = designPiEoList.stream().map(ProcessInfoEO::getActiProcInstId).distinct().collect(Collectors.toList()); + QueryWrapper pidQueryWrap = new QueryWrapper<>(); + pidQueryWrap.lambda().in(ProcessInfoDetailEO::getActiProcInstId, actiProcInstIdList); + pidQueryWrap.lambda().eq(ProcessInfoDetailEO::getStatus, TaskStatusEnum.NOT_DONE.getValue()); + pidQueryWrap.lambda().in(ProcessInfoDetailEO::getTaskDefinitionKey, taskDefinitionKeyList); + List pidEoList = this.processInfoDetailEOService.list(pidQueryWrap); + + if (CollectionUtils.isNotEmpty(pidEoList)) { + pidEoList.forEach(pidEo -> { + pidEo.setUserId(designTransferUserId); + }); + String taskIds = pidEoList.stream().map(ProcessInfoDetailEO::getTaskId).distinct().collect(Collectors.joining(",")); + Result changeAssigneeBatchResult = this.workFlowFeignClient.changeAssigneeBatch(taskIds, designTransferUserId); + if (changeAssigneeBatchResult.isSuccess()) { + this.processInfoDetailEOService.updateBatchById(pidEoList); + + for (ProcessInfoDetailEO pidEo : pidEoList) { + List piEoListTemp = piEoList.stream().filter(piEo -> { + boolean flag = false; + if (StringUtils.equals(piEo.getActiProcInstId(), pidEo.getActiProcInstId())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(piEoListTemp)) { + ProcessInfoEO piEoTemp = piEoListTemp.get(0); + String projectLawsInventoryId = piEoTemp.getProjectLawsInventoryId(); + + List pliEoListTemp = pliEoList.stream().filter(pliEo -> { + boolean flag = false; + if (StringUtils.equals(pliEo.getId(), projectLawsInventoryId)) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(pliEoListTemp)) { + ProjectLawsInventoryEO pliEoTemp = pliEoListTemp.get(0); + + Map params = new HashMap<>(); + + String endTime = ""; + String contentCn = ""; + String contentEn = ""; + String templateId = ""; + String taskDefinitionKey = pidEo.getTaskDefinitionKey(); + if (StringUtils.equals(taskDefinitionKey, DesignComplianceFlowNodeKeyEnum.ZRRQR.getValue()) + || StringUtils.equals(taskDefinitionKey, DesignComplianceFlowNodeKeyEnum.DEZRRQR.getValue())) { + + params.put("flowTypeCn","设计符合性流程"); + params.put("flowTypeEn","Design Compliance Process"); + contentCn = "您好,请及时查看确认以下任务要求,谢谢!"; + contentEn = "Hello! Please check and confirm the following task requirement in a timely manner. Thank you!"; + templateId = TemplateInfoEnum2.REGULATION_TASK_CONFIRMATION4.getValue(); + endTime = DateUtils.formatDate(pliEoTemp.getDesignDutyDueDate()); + } else if (StringUtils.equals(taskDefinitionKey, DesignComplianceFlowNodeKeyEnum.ZRRTJJFW.getValue()) + || StringUtils.equals(taskDefinitionKey, DesignComplianceFlowNodeKeyEnum.DEZRRTJJFW.getValue())) { + contentCn = "您好," + currentUser.getUsername() + "向您分发了该任务,请及时查看处理,谢谢!"; + contentEn = "Hello! " + currentUser.getUsername() + " has assigned the task to you. Please check and address it in a timely manner. Thank you!"; + templateId = TemplateInfoEnum2.DESIGN_COMPLIANCE_CONFIRMATION1.getValue(); + endTime = DateUtils.formatDate(pliEoTemp.getDesignDueDate()); + } + + params.put("userIdList", Arrays.asList(designTransferUserId.split(","))); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("serialNumbers", pliEoTemp.getSerialNumber()); + params.put("contentCn", contentCn); + params.put("contentEn", contentEn); + params.put("id", projectLawsInventoryId); + + JSONObject sendMsgJson = new JSONObject(); + sendMsgJson.put("actiProcInstId",pidEo.getActiProcInstId()); + sendMsgJson.put("taskDefinitionKey", taskDefinitionKey); + sendMsgJson.put("requestSource", RequestSourceEnum.WORK_FLOW.getValue()); + sendMsgJson.put("operatorType", OperatorTypeEnum.SEND_MSG.getValue()); + sendMsgJson.put("templateId", templateId); + sendMsgJson.put("flowType", "Design"); + sendMsgJson.put("params", params); + this.processCall(sendMsgJson); + } + } + } + } + } + } + + /** + * 验证符合性相关待办任务强制转办 + * + * @param projectLibraryId + * @param verifyTransferUserId + * @param pliEoList + * @param piEoList + */ + private void verifyCompulsoryTransfer(String projectLibraryId, String verifyTransferUserId, List pliEoList, List piEoList) { + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + List verifyPiEoList = piEoList.stream().filter(piEo -> { + boolean flag = false; + if (StringUtils.equals(piEo.getFlowType(), FlowTypeEnum.YZFHXSCLC.getValue())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + List taskDefinitionKeyList = new ArrayList<>(); + taskDefinitionKeyList.add(VerifyComplianceFlowNodeKeyEnum.ZRRQR.getValue()); + taskDefinitionKeyList.add(VerifyComplianceFlowNodeKeyEnum.DEZRRQR.getValue()); + taskDefinitionKeyList.add(VerifyComplianceFlowNodeKeyEnum.ZRRTJJFW.getValue()); + taskDefinitionKeyList.add(VerifyComplianceFlowNodeKeyEnum.DEZRRTJJFW.getValue()); + + List actiProcInstIdList = verifyPiEoList.stream().map(ProcessInfoEO::getActiProcInstId).distinct().collect(Collectors.toList()); + QueryWrapper pidQueryWrap = new QueryWrapper<>(); + pidQueryWrap.lambda().in(ProcessInfoDetailEO::getActiProcInstId, actiProcInstIdList); + pidQueryWrap.lambda().eq(ProcessInfoDetailEO::getStatus, TaskStatusEnum.NOT_DONE.getValue()); + pidQueryWrap.lambda().in(ProcessInfoDetailEO::getTaskDefinitionKey, taskDefinitionKeyList); + List pidEoList = this.processInfoDetailEOService.list(pidQueryWrap); + + if (CollectionUtils.isNotEmpty(pidEoList)) { + pidEoList.forEach(pidEo -> { + pidEo.setUserId(verifyTransferUserId); + }); + String taskIds = pidEoList.stream().map(ProcessInfoDetailEO::getTaskId).distinct().collect(Collectors.joining(",")); + Result changeAssigneeBatchResult = this.workFlowFeignClient.changeAssigneeBatch(taskIds, verifyTransferUserId); + if (changeAssigneeBatchResult.isSuccess()) { + this.processInfoDetailEOService.updateBatchById(pidEoList); + + for (ProcessInfoDetailEO pidEo : pidEoList) { + List piEoListTemp = piEoList.stream().filter(piEo -> { + boolean flag = false; + if (StringUtils.equals(piEo.getActiProcInstId(), pidEo.getActiProcInstId())) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(piEoListTemp)) { + ProcessInfoEO piEoTemp = piEoListTemp.get(0); + String projectLawsInventoryId = piEoTemp.getProjectLawsInventoryId(); + + List pliEoListTemp = pliEoList.stream().filter(pliEo -> { + boolean flag = false; + if (StringUtils.equals(pliEo.getId(), projectLawsInventoryId)) { + flag = true; + } + return flag; + }).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(pliEoListTemp)) { + ProjectLawsInventoryEO pliEoTemp = pliEoListTemp.get(0); + + Map params = new HashMap<>(); + + String endTime = ""; + String contentCn = ""; + String contentEn = ""; + String templateId = ""; + String taskDefinitionKey = pidEo.getTaskDefinitionKey(); + if (StringUtils.equals(taskDefinitionKey, VerifyComplianceFlowNodeKeyEnum.ZRRQR.getValue()) + || StringUtils.equals(taskDefinitionKey, VerifyComplianceFlowNodeKeyEnum.DEZRRQR.getValue())) { + params.put("flowTypeCn","验证符合性流程"); + params.put("flowTypeEn","Validation Compliance Process"); + + contentCn = "您好,请及时查看确认以下任务要求,谢谢!"; + contentEn = "Hello! Please check and confirm the following task requirement in a timely manner. Thank you!"; + templateId = TemplateInfoEnum2.REGULATION_TASK_CONFIRMATION4.getValue(); + endTime = DateUtils.formatDate(pliEoTemp.getVerifyDutyDueDate()); + } else if (StringUtils.equals(taskDefinitionKey, VerifyComplianceFlowNodeKeyEnum.ZRRTJJFW.getValue()) + || StringUtils.equals(taskDefinitionKey, VerifyComplianceFlowNodeKeyEnum.DEZRRTJJFW.getValue())) { + contentCn = "您好," + currentUser.getUsername() + "向您分发了该任务,请及时查看处理,谢谢!"; + contentEn = "Hello! " + currentUser.getUsername() + " has assigned the task to you. Please check and address it in a timely manner. Thank you!"; + templateId = TemplateInfoEnum2.VALIDATION_COMPLIANCE_CONFIRMATION1.getValue(); + endTime = DateUtils.formatDate(pliEoTemp.getVerifyDueDate()); + } + + params.put("userIdList", Arrays.asList(verifyTransferUserId.split(","))); + params.put("projectLibraryId", projectLibraryId); + params.put("endTime", endTime); + params.put("serialNumbers", pliEoTemp.getSerialNumber()); + params.put("contentCn", contentCn); + params.put("contentEn", contentEn); + params.put("id", projectLawsInventoryId); + + JSONObject sendMsgJson = new JSONObject(); + sendMsgJson.put("actiProcInstId",pidEo.getActiProcInstId()); + sendMsgJson.put("taskDefinitionKey", taskDefinitionKey); + sendMsgJson.put("requestSource", RequestSourceEnum.WORK_FLOW.getValue()); + sendMsgJson.put("operatorType", OperatorTypeEnum.SEND_MSG.getValue()); + sendMsgJson.put("templateId", templateId); + sendMsgJson.put("flowType", "Verify"); + sendMsgJson.put("params", params); + this.processCall(sendMsgJson); + } + } + } + } + } + } + + + @Override + public Map groupByFGRwqrStatus(List pliEos) { + Map result = new HashMap<>(); + + Map projectScheduleExportMap = new HashMap<>(); + Map toBeReleasedMap = new HashMap<>(); + Map toBeVerifiedMap = new HashMap<>(); + Map toBeConfirmedMap = new HashMap<>(); + Map acceptMap = new HashMap<>(); + Map refuseMap = new HashMap<>(); + + double toBeReleasedCount = 0; + double toBeVerifiedCount = 0; + double toBeConfirmedCount = 0; + double acceptCount = 0; + double refuseCount = 0; + double count = 0; + // 计算百分比 + double percentage = 0; + String percentageStr = "0"; + if(CollectionUtils.isNotEmpty(pliEos)){ + List designToBeReleased = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + List verifyToBeReleased = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + toBeReleasedMap.put("designToBeReleased",designToBeReleased); + toBeReleasedMap.put("verifyToBeReleased",verifyToBeReleased); + + List designToBeVerified = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + List verifyToBeVerified = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + toBeVerifiedMap.put("designToBeVerified",designToBeVerified); + toBeVerifiedMap.put("verifyToBeVerified",verifyToBeVerified); + + List designToBeConfirmed = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + List verifyToBeConfirmed = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + toBeConfirmedMap.put("designToBeConfirmed",designToBeConfirmed); + toBeConfirmedMap.put("verifyToBeConfirmed",verifyToBeConfirmed); + + List designAccept = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) +// || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + List verifyAccept = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) +// || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + acceptMap.put("designAccept",designAccept); + acceptMap.put("verifyAccept",verifyAccept); + + List designRefuse = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + List verifyRefuse = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + refuseMap.put("designRefuse",designRefuse); + refuseMap.put("verifyRefuse",verifyRefuse); + + toBeReleasedCount = designToBeReleased.size() + verifyToBeReleased.size(); + toBeVerifiedCount = designToBeVerified.size() + verifyToBeVerified.size(); + toBeConfirmedCount = designToBeConfirmed.size() + verifyToBeConfirmed.size(); + acceptCount = designAccept.size() + verifyAccept.size(); + refuseCount = designRefuse.size() + verifyRefuse.size(); + count = toBeReleasedCount + toBeVerifiedCount + toBeConfirmedCount + acceptCount + refuseCount; + if(count <= 0){ + percentage = 0; + }else{ + // 计算百分比 + percentage = acceptCount / count * 100; + } + percentageStr = percentage != 0 ? df.format(percentage) : "0"; + } + result.put(ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue(),toBeReleasedMap); + result.put(ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue(),toBeVerifiedMap); + result.put(ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue(),toBeConfirmedMap); + result.put(ComplianceFlowStatusEnum.CONFORMITY.getValue(),acceptMap); + result.put(ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue(),refuseMap); + + projectScheduleExportMap.put("toBeReleased",toBeReleasedCount); + projectScheduleExportMap.put("toBeVerified",toBeVerifiedCount); + projectScheduleExportMap.put("toBeConfirmed",toBeConfirmedCount); + projectScheduleExportMap.put("accept",acceptCount); + projectScheduleExportMap.put("refuse",refuseCount); + projectScheduleExportMap.put("percentage",percentageStr + percentSign); + result.put("projectScheduleExportMap",projectScheduleExportMap); + return result; + } + + @Override + public Map groupByDesignStatus(List pliEos) { + Map result = new HashMap<>(); + + Map projectScheduleExportMap = new HashMap<>(); + + double notStartCount = 0; // 未发起 + double toBeSubmittedCount = 0; // 待提交 + double toBeReviewedCount = 0; // 待审查 + double complianceCount = 0; // 符合 + double nonComplianceCount = 0; // 不符合 + double toBeTrackedCount = 0; // 待追踪 + double notInvolvedCount = 0; // 不涉及 + double taskTerminationCount = 0; // 任务终止 + double count = 0; + // 计算百分比 + double percentage = 0; + String percentageStr = "0"; + if(CollectionUtils.isNotEmpty(pliEos)){ + List designNotStart = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + || StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List designToBeSubmitted = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List designToBeReviewed = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List designCompliance = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List designNonCompliance = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List designToBeTracked = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List designNotInvolved = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List taskTermination = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getDesignFlowStatus(),ComplianceFlowStatusEnum.TERMINATION_OF_TASK.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + notStartCount = designNotStart.size(); + toBeSubmittedCount = designToBeSubmitted.size(); + toBeReviewedCount = designToBeReviewed.size(); + complianceCount = designCompliance.size(); + nonComplianceCount = designNonCompliance.size(); + toBeTrackedCount = designToBeTracked.size(); + notInvolvedCount = designNotInvolved.size(); + taskTerminationCount = taskTermination.size(); + count = notStartCount + toBeSubmittedCount + toBeReviewedCount + complianceCount + nonComplianceCount + toBeTrackedCount + taskTerminationCount; + // 计算百分比 + if(count <= 0){ + percentage = 0; + }else{ + percentage = complianceCount / count * 100; + } + percentageStr = percentage != 0 ? df.format(percentage) : "0"; + } + + projectScheduleExportMap.put("notStart",notStartCount); + projectScheduleExportMap.put("toBeSubmitted",toBeSubmittedCount); + projectScheduleExportMap.put("toBeReviewed",toBeReviewedCount); + projectScheduleExportMap.put("compliance",complianceCount); + projectScheduleExportMap.put("nonCompliance",nonComplianceCount); + projectScheduleExportMap.put("toBeTracked",toBeTrackedCount); + projectScheduleExportMap.put("notInvolved",notInvolvedCount); + projectScheduleExportMap.put("taskTermination",taskTerminationCount); + projectScheduleExportMap.put("count",count); + projectScheduleExportMap.put("percentage",percentageStr + percentSign); + result.put("projectScheduleExportMap",projectScheduleExportMap); + return result; + } + + @Override + public Map groupByVerifyStatus(List pliEos) { + Map result = new HashMap<>(); + + Map projectScheduleExportMap = new HashMap<>(); + + double notStartCount = 0; // 未发起 + double toBeSubmittedCount = 0; // 待提交 + double toBeReviewedCount = 0; // 待审查 + double complianceCount = 0; // 符合 + double nonComplianceCount = 0; // 不符合 + double toBeTrackedCount = 0; // 待追踪 + double notInvolvedCount = 0; // 不涉及 + double taskTerminationCount = 0; // 任务终止 + double count = 0; + // 计算百分比 + double percentage = 0; + String percentageStr = "0"; + if(CollectionUtils.isNotEmpty(pliEos)){ + List verifyNotStart = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_RELEASED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.LIST_TO_BE_CHECKED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TASK_TO_BE_CONFIRMED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.DUTY_PERSON_REJECTED.getValue()) + || StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.REGULATORY_ENGINEER_RETURNS.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List verifyToBeSubmitted = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List verifyToBeReviewed = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List verifyCompliance = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.CONFORMITY.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List verifyNonCompliance = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List verifyToBeTracked = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TO_TRACK.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List verifyNotInvolved = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + List taskTermination = pliEos.stream().filter(pliEo -> { + boolean flag = ( + StringUtils.equals(pliEo.getVerifyFlowStatus(),ComplianceFlowStatusEnum.TERMINATION_OF_TASK.getValue()) + ); + return flag; + }).collect(Collectors.toList()); + + notStartCount = verifyNotStart.size(); + toBeSubmittedCount = verifyToBeSubmitted.size(); + toBeReviewedCount = verifyToBeReviewed.size(); + complianceCount = verifyCompliance.size(); + nonComplianceCount = verifyNonCompliance.size(); + toBeTrackedCount = verifyToBeTracked.size(); + notInvolvedCount = verifyNotInvolved.size(); + taskTerminationCount = taskTermination.size(); + + count = notStartCount + toBeSubmittedCount + toBeReviewedCount + complianceCount + nonComplianceCount + toBeTrackedCount + taskTerminationCount; + if(count <= 0){ + percentage = 0; + }else{ + // 计算百分比 + percentage = complianceCount / count * 100; + } + percentageStr = percentage != 0 ? df.format(percentage) : "0"; + } + + projectScheduleExportMap.put("notStart",notStartCount); + projectScheduleExportMap.put("toBeSubmitted",toBeSubmittedCount); + projectScheduleExportMap.put("toBeReviewed",toBeReviewedCount); + projectScheduleExportMap.put("compliance",complianceCount); + projectScheduleExportMap.put("nonCompliance",nonComplianceCount); + projectScheduleExportMap.put("toBeTracked",toBeTrackedCount); + projectScheduleExportMap.put("notInvolved",notInvolvedCount); + projectScheduleExportMap.put("taskTermination",taskTerminationCount); + projectScheduleExportMap.put("count",count); + projectScheduleExportMap.put("percentage",percentageStr + percentSign); + result.put("projectScheduleExportMap",projectScheduleExportMap); + return result; + } + + @Override + public IPage queryPage(ProjectLawsInventoryEO projectLawsInventoryEO, Integer pageNo, Integer pageSize, HttpServletRequest req) { + String dutyTerritoryStr = ""; + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDutyTerritory())) { + dutyTerritoryStr = projectLawsInventoryEO.getDutyTerritory(); + projectLawsInventoryEO.setDutyTerritory(null); + } + String designFlowStatusStr = ""; + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getDesignFlowStatus())) { + designFlowStatusStr = projectLawsInventoryEO.getDesignFlowStatus(); + projectLawsInventoryEO.setDesignFlowStatus(null); + } + String verifyFlowStatusStr = ""; + if (StringUtils.isNotEmpty(projectLawsInventoryEO.getVerifyFlowStatus())) { + verifyFlowStatusStr = projectLawsInventoryEO.getVerifyFlowStatus(); + projectLawsInventoryEO.setVerifyFlowStatus(null); + } + + // 根据一级责任领域(统计节点),查询该一级责任领域下所有子责任领域的法规清单数据。 + if(StringUtils.isNotEmpty(projectLawsInventoryEO.getFirstLevelDutyTerritory())){ + List sysDictItems = this.sysDictItemServiceImpl.selectItemsAll(); + List dutyTerritorys = new ArrayList<>(); + Map> firstLevelDTMap = this.sysDictItemServiceImpl.getFirstLevelSysDictItemByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue(), sysDictItems); + String[] firstLevelDTArr = projectLawsInventoryEO.getFirstLevelDutyTerritory().split(","); + for (String firstLevelDT : firstLevelDTArr){ + if(CollectionUtils.isNotEmpty(firstLevelDTMap.get(firstLevelDT))){ + dutyTerritorys.addAll(firstLevelDTMap.get(firstLevelDT)); + } + } + if(CollectionUtils.isNotEmpty(dutyTerritorys)){ + dutyTerritoryStr = dutyTerritorys.stream().map(SysDictItem::getItemValue).distinct().collect(Collectors.joining(",")); + } + } + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(projectLawsInventoryEO, req.getParameterMap()); + queryWrapper.orderByDesc("create_time","serial_number"); + + if (StringUtils.isNotEmpty(dutyTerritoryStr)) { + String finalDutyTerritoryStr = dutyTerritoryStr.replaceAll("\\*",""); + queryWrapper.and(query -> { + query.lambda().like(ProjectLawsInventoryEO::getDutyTerritory, finalDutyTerritoryStr); + if(StringUtils.contains(finalDutyTerritoryStr,",")){ + String[] dutyTerritoryArr = finalDutyTerritoryStr.split(","); + for (String duty : dutyTerritoryArr) { + query.or(q -> { + q.like("duty_territory",duty); + }); + } + } + }); + } + + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int isProjectRole = Integer.parseInt(projectLawsInventoryEO.getRoleCode()); + if (isProjectRole == Integer.parseInt(ProjectRoleEnum.VIEWER.getValue())) { + //查当前用户Viewer对应责任领域 + List dutyTerritoryList = this.projectUserDutyTerritoryService.queryDutyTerritoryByUserId(currentUser.getId()); + if (ObjectUtils.isNotEmpty(dutyTerritoryList)) { + queryWrapper.and(query -> { + for (String duty : dutyTerritoryList) { + query.or(q -> { + q.like("duty_territory", duty); + }); + } + }); + } + } + if (StringUtils.isNotEmpty(designFlowStatusStr)) { + String finalDesignFlowStatusStr = designFlowStatusStr.replaceAll("\\*",""); + queryWrapper.and(query -> { + query.lambda().like(ProjectLawsInventoryEO::getDesignFlowStatus, finalDesignFlowStatusStr); + if(StringUtils.contains(finalDesignFlowStatusStr,",")){ + String[] designFlowStatusArr = finalDesignFlowStatusStr.split(","); + for (String dsf : designFlowStatusArr) { + query.or(q -> { + q.like("design_flow_status",dsf); + }); + } + } + }); + } + if (StringUtils.isNotEmpty(verifyFlowStatusStr)) { + String finalVerifyFlowStatusStr = verifyFlowStatusStr.replaceAll("\\*",""); + queryWrapper.and(query -> { + query.lambda().like(ProjectLawsInventoryEO::getVerifyFlowStatus, finalVerifyFlowStatusStr); + if(StringUtils.contains(finalVerifyFlowStatusStr,",")){ + String[] verifyFlowStatusArr = finalVerifyFlowStatusStr.split(","); + for (String vsf : verifyFlowStatusArr) { + query.or(q -> { + q.like("verify_flow_status",vsf); + }); + } + } + }); + } + + if(isProjectRole != Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.MANAGER.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.ADMIN.getValue()) + && isProjectRole != Integer.parseInt(ProjectRoleEnum.VIEWER.getValue())){ + // 创建查询权限 + this.createQueryPermission(isProjectRole,currentUser,queryWrapper); + } + + Page page = new Page(pageNo, pageSize); + IPage pageList = this.page(page, queryWrapper); + List result = pageList.getRecords(); + + this.dataDispose(result,currentUser,isProjectRole,projectLawsInventoryEO.getCut()); + this.dataDictDispose(result,projectLawsInventoryEO.getCut()); + //表头排序 + result = this.hearSort(projectLawsInventoryEO, result); + return pageList; + } + + @Override + public Result finalizationVerify(Map params) { + boolean result = false; // 返回true,可以定版,返回false 不能定版 + String projectLibraryId = (String) params.get("projectLibraryId"); + if(StringUtils.isEmpty(projectLibraryId)){ + throw new JeroBootException("项目库id不能为空,请检查!"); + } + QueryWrapper pliQueryWrap = new QueryWrapper<>(); + pliQueryWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); + List pliEoList = this.list(pliQueryWrap); + if(CollectionUtils.isNotEmpty(pliEoList)){ + for (ProjectLawsInventoryEO pliEo : pliEoList) { + String designFlowStatus = pliEo.getDesignFlowStatus(); + String verifyFlowStatus = pliEo.getVerifyFlowStatus(); + boolean designFlowStatusFlag = ( + StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.CONFORMITY.getValue()) + || StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + || StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.TO_TRACK.getValue()) + || StringUtils.equals(designFlowStatus,ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + ); + boolean verifyFlowStatusFlag = ( + StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_SUBMITTED.getValue()) + || StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.RESULTS_TO_BE_REVIEWED.getValue()) + || StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.CONFORMITY.getValue()) + || StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.INCONFORMITY.getValue()) + || StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.TO_TRACK.getValue()) + || StringUtils.equals(verifyFlowStatus,ComplianceFlowStatusEnum.UNINVOLVED.getValue()) + ); + if(designFlowStatusFlag && verifyFlowStatusFlag){ + result = true; + }else { + result = false; + break; + } + } + } + return Result.OK(result); + } + + @Override + public Map>> queryDutyPersonByProjectId(Map params) { + Map>> result = new HashMap<>(); + String projectLibraryId = (String) params.get("projectLibraryId"); + if(StringUtils.isNotEmpty(projectLibraryId)){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); + List pliList = this.list(queryWrapper); + List designDutyList = new ArrayList<>(); + List verifyDutyList = new ArrayList<>(); + for (ProjectLawsInventoryEO pli: pliList) { + if(StringUtils.isNotEmpty(pli.getDesignDutyId())){ + designDutyList.add(pli.getDesignDutyId()); + } + if(StringUtils.isNotEmpty(pli.getVerifyDutyId())){ + verifyDutyList.add(pli.getVerifyDutyId()); + } + } + if(CollectionUtils.isNotEmpty(designDutyList)){ + List> resList = new ArrayList<>(); + List userList = this.sysUserService.querySysUserListByIdList(designDutyList); + if(CollectionUtils.isNotEmpty(userList)){ + for (SysUser user : userList) { + Map userMap = new HashMap<>(); + userMap.put("id",user.getId()); + userMap.put("userName",user.getUsername()); + resList.add(userMap); + } + } + result.put("designDutyList",resList); + } + + if(CollectionUtils.isNotEmpty(verifyDutyList)){ + List> resList = new ArrayList<>(); + List userList = this.sysUserService.querySysUserListByIdList(verifyDutyList); + if(CollectionUtils.isNotEmpty(userList)){ + for (SysUser user : userList) { + Map userMap = new HashMap<>(); + userMap.put("id",user.getId()); + userMap.put("userName",user.getUsername()); + resList.add(userMap); + } + } + result.put("verifyDutyList",resList); + } + } + return result; + } + + @Override + public List getUserDutyTerritoryList(Map params) { + List result = new ArrayList<>(); + String userId = (String) params.get("userId"); + String projectLibraryId = (String) params.get("projectLibraryId"); + List dutyTerritorySdiList = (List) params.get("dutyTerritorySdiList"); + + QueryWrapper pliQueryWrap = new QueryWrapper<>(); + pliQueryWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); + pliQueryWrap.and(pliQuery -> { + pliQuery.lambda().eq(ProjectLawsInventoryEO::getRegulationOwnerId,userId) + .or().eq(ProjectLawsInventoryEO::getDesignDutyId,userId) + .or().eq(ProjectLawsInventoryEO::getVerifyDutyId,userId); + }); + List pliEoList = this.list(pliQueryWrap); + if(CollectionUtils.isNotEmpty(pliEoList)){ + List dutyTerritoryIdList = Arrays.asList( + pliEoList.stream().map(ProjectLawsInventoryEO::getDutyTerritory).collect(Collectors.joining(",")).split(",") + ).stream().distinct().collect(Collectors.toList()); + + result = dutyTerritorySdiList.stream().filter(dutyTerritory -> { + boolean flag = false; + for (String dutyTerritoryId : dutyTerritoryIdList) { + if (StringUtils.equals(dutyTerritoryId, dutyTerritory.getItemValue())) { + flag = true; + break; + } + } + return flag; + }).collect(Collectors.toList()); + } + + return result; + } + @Override + public void replacementUser(JSONObject json) { + String userId = json.getString("userId"); + String projectLibraryId = json.getString("projectLibraryId"); + List> replacementUserList = (List>) json.get("replacementUserList"); + + QueryWrapper pliQueryWrap = new QueryWrapper<>(); + pliQueryWrap.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId, projectLibraryId); + List pliEoList = this.list(pliQueryWrap); + + // 根据法规清单id,获取该法规清单在待办中心的任务明细。 + List oldPliEoIdList = pliEoList.stream().map(ProjectLawsInventoryEO::getId).distinct().collect(Collectors.toList()); + QueryWrapper pidEoQueryWrap = new QueryWrapper<>(); + pidEoQueryWrap.lambda().in(ProcessInfoDetailEO::getProjectLawsInventoryId, oldPliEoIdList); + List pidEoList = this.processInfoDetailEOService.list(pidEoQueryWrap); + + List updateEoList = new ArrayList<>(); + for (Map replacementUserMap : replacementUserList) { + String dutyTerritory = (String) replacementUserMap.get("dutyTerritory"); + String newUserId = (String) replacementUserMap.get("newUserId"); + if (StringUtils.isNotEmpty(newUserId)) { + for (ProjectLawsInventoryEO pliEo : pliEoList) { + if (StringUtils.contains(pliEo.getDutyTerritory(), dutyTerritory)) { +// QueryWrapper oldPliQueryWrap = new QueryWrapper<>(); +// oldPliQueryWrap.lambda().eq(ProjectLawsInventoryEO::getId,pliEo.getId()); +// List oldPliEoList = this.list(oldPliQueryWrap); + // 过滤出来修改之前的法规清单数据 + List oldPliEoList = pliEoList.stream().filter(p -> StringUtils.equals(p.getId(),pliEo.getId())).distinct().collect(Collectors.toList()); + ProjectLawsInventoryEO newPliEo = new ProjectLawsInventoryEO(); + + if (StringUtils.equals(pliEo.getRegulationOwnerId(), userId)) { + newPliEo.setRegulationOwnerId(newUserId); + // 处理编辑法规工程师的逻辑 + this.editService.updateRegulationOwner(newPliEo, oldPliEoList,pidEoList); + pliEo.setRegulationOwnerId(newUserId); + } + if (StringUtils.equals(pliEo.getEngineeringInterfacePerson(), userId)) { + pliEo.setEngineeringInterfacePerson(newUserId); + } + + if(StringUtils.equals(pliEo.getDesignDutyId(), userId) || StringUtils.equals(pliEo.getVerifyDutyId(), userId)){ + if (StringUtils.equals(pliEo.getDesignDutyId(), userId)) { + newPliEo.setDesignDutyId(newUserId); + } + if (StringUtils.equals(pliEo.getVerifyDutyId(), userId)) { + newPliEo.setVerifyDutyId(newUserId); + } + // 处理编辑责任人的逻辑 + this.editService.updateDutyPerson(newPliEo, oldPliEoList,pidEoList); + if (StringUtils.equals(pliEo.getDesignDutyId(), userId)) { + pliEo.setDesignDutyId(newUserId); + } + if (StringUtils.equals(pliEo.getVerifyDutyId(), userId)) { + pliEo.setVerifyDutyId(newUserId); + } + } + updateEoList.add(pliEo); + } + } + } + } + + if (CollectionUtils.isNotEmpty(updateEoList)) { + this.updateBatchById(updateEoList); + } + } + + + /** + * 验证用户在该项目中的角色 + * + * @param projectLibraryId 项目库id + * @param currentUserId 登录人id + * @param lawsInventoryId 法规清单id + * @return + */ + @Override + public int checkUserRole(String projectLibraryId, String currentUserId, String lawsInventoryId) { + int result = -1; + try { + QueryWrapper projectLibraryBaseQueryWrapper = new QueryWrapper<>(); + projectLibraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getId, projectLibraryId); + projectLibraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getStudioEngineer, currentUserId); + Integer projectLibrayBaseCount = projectLibraryBaseMapper.selectCount(projectLibraryBaseQueryWrapper); + if (projectLibrayBaseCount > 0) { + result = Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()); + } else { + if (StringUtils.isNotEmpty(lawsInventoryId)) { + //查询用户是否是法规工程师 + QueryWrapper queryWrapperFG = new QueryWrapper<>(); + queryWrapperFG.lambda().eq(ProjectLawsInventoryEO::getRegulationOwnerId, currentUserId); + queryWrapperFG.lambda().eq(ProjectLawsInventoryEO::getId, lawsInventoryId); + Integer lawsInventoryCountFG = super.baseMapper.selectCount(queryWrapperFG); + + QueryWrapper queryWrapperRZ = new QueryWrapper<>(); + queryWrapperRZ.lambda().eq(ProjectLawsInventoryEO::getHomologationEngineerId, currentUserId); + queryWrapperRZ.lambda().eq(ProjectLawsInventoryEO::getId, lawsInventoryId); + Integer lawsInventoryCountRZ = super.baseMapper.selectCount(queryWrapperRZ); + + //如果两个工程师都是这个用户 + if (lawsInventoryCountFG > 0 && lawsInventoryCountRZ > 0) { + result = Integer.parseInt(ProjectRoleEnum.REGULATI_AND_HOMOLOGATION_ENGINEER.getValue()); + } else if (lawsInventoryCountFG > 0) { + result = Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + } else if (lawsInventoryCountRZ > 0) { + result = Integer.parseInt(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + } + } + } + } catch (Exception ex) { + log.error("验证用户在该项目中的角色失败:" + ex.getMessage()); + throw new JeroBootException("验证用户在该项目中的角色失败!"); + } + return result; + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/ProjectPlatformServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectLibraryBaseServiceImpl.java similarity index 99% rename from jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/ProjectPlatformServiceImpl.java rename to jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectLibraryBaseServiceImpl.java index e328bc564..3cded8721 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/ProjectPlatformServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectLibraryBaseServiceImpl.java @@ -55,7 +55,6 @@ import com.jero.modules.project.mapper.ProjectTaskInventoryEOMapper; import com.jero.modules.project.mapper.ProjectUserPermissionMapper; import com.jero.modules.project.service.IConditionAssessmentEOService; import com.jero.modules.project.service.IProjectCertificationInventoryEOService; -import com.jero.modules.project.service.IProjectLibraryBaseService; import com.jero.modules.project.service.IProjectLibraryRoleRelEOService; import com.jero.modules.project.service.IProjectLibraryStatisticsService; import com.jero.modules.project.service.IProjectUserPermissionService; @@ -65,8 +64,8 @@ import com.jero.modules.project.service.impl.ProjectNameInfoEOServiceImpl; import com.jero.modules.project.service.impl.ProjectRelatedPersonnelServiceImpl; import com.jero.modules.project.service.impl.ProjectTaskPlanningServiceImpl; import com.jero.modules.project.vo.TimeNodeVO; -import com.jero.modules.projectPlatform.mapper.ProjectPlatformMapper; -import com.jero.modules.projectPlatform.service.IProjectPlatformService; +import com.jero.modules.projectPlatform.mapper.PlatformProjectLibraryBaseMapper; +import com.jero.modules.projectPlatform.service.IPlatformIProjectLibraryBaseService; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.enums.DicCodeEnum; @@ -129,7 +128,7 @@ import java.util.stream.Collectors; * @Version: V1.0 */ @Service -public class ProjectPlatformServiceImpl extends ServiceImpl implements IProjectPlatformService { +public class PlatformProjectLibraryBaseServiceImpl extends ServiceImpl implements IPlatformIProjectLibraryBaseService { @Autowired private ProjectLibraryBaseMapper projectLibraryBaseMapper; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectNameInfoEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectNameInfoEOServiceImpl.java new file mode 100644 index 000000000..3d7ea9c7f --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/projectPlatform/service/impl/PlatformProjectNameInfoEOServiceImpl.java @@ -0,0 +1,382 @@ +package com.jero.modules.projectPlatform.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.system.vo.DictModel; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.entity.ProjectNameInfoEO; +import com.jero.modules.project.entity.ProjectYearNameInfoEO; +import com.jero.modules.project.mapper.ProblemManagementEOMapper; +import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; +import com.jero.modules.project.service.impl.ProblemManagementEOServiceImpl; +import com.jero.modules.project.service.impl.ProjectYearNameInfoEOServiceImpl; +import com.jero.modules.projectPlatform.mapper.PlatpromProjectNameInfoEOMapper; +import com.jero.modules.projectPlatform.service.IPlatformProjectNameInfoEOService; +import com.jero.modules.space.service.SpaceServiceImpl; +import com.jero.modules.system.enums.DicCodeEnum; +import com.jero.modules.system.service.ISysDictService; +import com.jero.modules.system.util.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** + * @Description: 项目名信息表 + * @Author: jero-boot + * @Date: 2022-04-18 + * @Version: V1.0 + */ +@Service +public class PlatformProjectNameInfoEOServiceImpl extends ServiceImpl implements IPlatformProjectNameInfoEOService { + @Autowired + private ProjectNameInfoEOMapper projectNameInfoEOMapper; + + @Autowired + private SpaceServiceImpl spaceService; + + @Autowired + private ProjectYearNameInfoEOServiceImpl projectYearNameInfoEOService; + @Autowired + private ProblemManagementEOMapper problemManagementEOMapper; + @Autowired + private ISysDictService sysDictService; + @Autowired + private ProblemManagementEOServiceImpl problemManagementEOService; + /** + * 保存 + * + * @param projectNameInfoEO + * @return + */ + @Override + public void add(ProjectNameInfoEO projectNameInfoEO) { + Date now = new Date(); + projectNameInfoEO.setCreateTime(now); + projectNameInfoEO.setUpdateTime(now); + save(projectNameInfoEO); + } + + /** + * 更新 + * + * @param projectNameInfoEO + * @return + */ + @Override + public void editById(ProjectNameInfoEO projectNameInfoEO) { + Date now = new Date(); + projectNameInfoEO.setUpdateTime(now); + saveOrUpdate(projectNameInfoEO); + } + + /** + * 通过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 ProjectNameInfoEO queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + QueryWrapper nameInfoEOQueryWrapper = new QueryWrapper<>(); + List projectNameInfoEOList = list(nameInfoEOQueryWrapper); +// List projectNameInfoIdList = projectNameInfoEOList.stream().map(e -> e.getId()).collect(Collectors.toList()); + for (ProjectNameInfoEO projectNameInfoEO : projectNameInfoEOList){ + QueryWrapper yearNameInfoEOQueryWrapper = new QueryWrapper<>(); + yearNameInfoEOQueryWrapper.eq("project_name_id",projectNameInfoEO.getId()); + List yearNameInfoDataList = projectYearNameInfoEOService.list(yearNameInfoEOQueryWrapper); + if(CollectionUtils.isNotEmpty(yearNameInfoDataList)) { + projectNameInfoEO.setYearNameDataList(yearNameInfoDataList); + } + } + +// List projectNameAndYear = projectNameInfoEOMapper.selectProjectNameAndYear(); + return projectNameInfoEOList; + } + /** + * 列表查询 + * + * @return + */ + @Override + public List queryProjectNameList(String cut) { + List projectLibraryBaseList = problemManagementEOMapper.queryByIds(null); + //目标市场数据字典 + List targetMarketList = sysDictService.queryDictItemsByCode(DicCodeEnum.REGION.getCode()); + for (ProjectLibraryBase projectLibraryBase : projectLibraryBaseList) { + //目标市场 + String targetMarket = problemManagementEOService.getMarket(cut, targetMarketList, projectLibraryBase); + //主项目的版本号 + String projectVersion = ""; + if(StringUtils.isBlank(projectLibraryBase.getParentId())){ + projectVersion = "00"; + }else{ + projectVersion = projectLibraryBase.getProjectVersion(); + } + if(StringUtils.isNotBlank(projectLibraryBase.getYearName())){ + projectLibraryBase.setProjectName(projectLibraryBase.getProjectName() + + "-" + projectLibraryBase.getYearName() + + "-" + targetMarket + +"-"+projectVersion); + } + } + return projectLibraryBaseList; + } + +/* @Override + public void getSpaceInfo(String cut){ + String jsonData =""; + try { + jsonData = spaceService.getSign(); + if(StringUtils.isNotBlank(jsonData)) { + //静态测试数据 + *//* jsonData = "{\n" + + " \"resultData\": [\n" + + " {\n" + + " \"modelCode\": \"ES8_00\",\n" + + " \"modelName\": \"ES8\",\n" + + " \"hardwarePltCode\": \"mhp_npa\",\n" + + " \"hardwarePltName\": \"NPA\",\n" + + " \"softwarePltCode\": \"msp_nt1\",\n" + + " \"softwarePltName\": \"NT1\",\n" + + " \"modelYearInfoList\": [\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1\",\n" + + " \"yearName\": \"G1.1\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.2\",\n" + + " \"yearName\": \"G1.2\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.3\",\n" + + " \"yearName\": \"G1.3\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.f\",\n" + + " \"yearName\": \"G1.F\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.f.e\",\n" + + " \"yearName\": \"G1.F.E\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_my2018\",\n" + + " \"yearName\": \"MY2018\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.5\",\n" + + " \"yearName\": \"G1.5\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"modelCode\": \"FURY_00\",\n" + + " \"modelName\": \"FURY\",\n" + + " \"hardwarePltCode\": \"mhp_npa\",\n" + + " \"hardwarePltName\": \"NPA\",\n" + + " \"softwarePltCode\": \"msp_nt1\",\n" + + " \"softwarePltName\": \"NT1\",\n" + + " \"modelYearInfoList\": [\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1\",\n" + + " \"yearName\": \"G1.1\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.2\",\n" + + " \"yearName\": \"G1.2\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.3\",\n" + + " \"yearName\": \"G1.3\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.f\",\n" + + " \"yearName\": \"G1.F\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.6\",\n" + + " \"yearName\": \"G1.6\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.5\",\n" + + " \"yearName\": \"G1.5\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1.e\",\n" + + " \"yearName\": \"G1.1.E\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"modelCode\": \"FORCE_00\",\n" + + " \"modelName\": \"FORCE\",\n" + + " \"hardwarePltCode\": \"mhp_npb\",\n" + + " \"hardwarePltName\": \"NPB\",\n" + + " \"softwarePltCode\": \"msp_nt2\",\n" + + " \"softwarePltName\": \"NT2\",\n" + + " \"modelYearInfoList\": [\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1\",\n" + + " \"yearName\": \"G1.1\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1.e\",\n" + + " \"yearName\": \"G1.1.E\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.2\",\n" + + " \"yearName\": \"G1.2\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.3\",\n" + + " \"yearName\": \"G1.3\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.f\",\n" + + " \"yearName\": \"G1.F\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.6\",\n" + + " \"yearName\": \"G1.6\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.5\",\n" + + " \"yearName\": \"G1.5\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"modelCode\": \"Gemini_00\",\n" + + " \"modelName\": \"Gemini\",\n" + + " \"hardwarePltCode\": \"mhp_npa\",\n" + + " \"hardwarePltName\": \"NPA\",\n" + + " \"softwarePltCode\": \"msp_nt2\",\n" + + " \"softwarePltName\": \"NT2\",\n" + + " \"modelYearInfoList\": [\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1\",\n" + + " \"yearName\": \"G1.1\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1.e\",\n" + + " \"yearName\": \"G1.1.E\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"modelCode\": \"Pegasus_00\",\n" + + " \"modelName\": \"Pegasus\",\n" + + " \"hardwarePltCode\": \"mhp_npc\",\n" + + " \"hardwarePltName\": \"NPC\",\n" + + " \"softwarePltCode\": \"msp_nt2\",\n" + + " \"softwarePltName\": \"NT2\",\n" + + " \"modelYearInfoList\": [\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1\",\n" + + " \"yearName\": \"G1.1\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_g1.1.e\",\n" + + " \"yearName\": \"G1.1.E\"\n" + + " },\n" + + " {\n" + + " \"yearCode\": \"mp_G1.1.RH\",\n" + + " \"yearName\": \"G1.1.RH\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"resultCode\": \"WL-0000\",\n" + + " \"resultDesc\": \"Success\"\n" + + "}";*//* + + JSONObject result = (JSONObject) JSON.parse(jsonData); + JSONArray resultData = result.getJSONArray("resultData"); + + String modelName = "";//项目名称 + String hardwarePltName = "";//车型平台 + String softwarePltName = "";//数字平台 + + //获取resultData中所需的数据 + for (int i = 0; i < resultData.size(); i++) { + JSONObject jsonObject = resultData.getJSONObject(i); + modelName = jsonObject.getString("modelName");//项目名称 + hardwarePltName = jsonObject.getString("hardwarePltName");//车型平台 + softwarePltName = jsonObject.getString("softwarePltName");//数字平台 + String nameInfoId = UUID.randomUUID().toString().replace("-", ""); + + ProjectNameInfoEO projectNameInfoEO = new ProjectNameInfoEO(); + projectNameInfoEO.setId(nameInfoId); + projectNameInfoEO.setProjectName(modelName); + projectNameInfoEO.setVehiclePlatform(hardwarePltName); + projectNameInfoEO.setDigitalPlatform(softwarePltName); + //保存 + save(projectNameInfoEO); + + //设置年款名 + JSONArray modelYearInfoJson = jsonObject.getJSONArray("modelYearInfoList"); + for (int j = 0; j < modelYearInfoJson.size(); j++) { + JSONObject modelYearInfo = modelYearInfoJson.getJSONObject(j); + String yearName = modelYearInfo.getString("yearName"); + + ProjectYearNameInfoEO projectYearNameInfoEO = new ProjectYearNameInfoEO(); + projectYearNameInfoEO.setProjectNameId(nameInfoId); + projectYearNameInfoEO.setYearName(yearName); + //保存 + projectYearNameInfoEOService.save(projectYearNameInfoEO); + + } + if(CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("从Space获取项目名称相关数据,成功保存"); + }else{ + throw new JeroBootException("Get the data related to the project name from Space and save it successfully."); + } + } + }else{ + if(CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("从Space获取项目名称相关数据为空"); + }else{ + throw new JeroBootException("Data related to obtaining project name from Space is empty."); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + }*/ + +}