From fca3188cc7be94006b5cbf09efc60922419da382 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Fri, 27 Oct 2023 17:12:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=90=8C=E6=84=8F=E9=A9=B3=E5=9B=9E?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/common/entity/CommonVO.java | 6 + .../common/service/ActFlowCommonService.java | 31 +- .../controller/ESAnnualReportController.java | 64 ++++- .../entity/ProcessEsAnnualReport.java | 43 +++ .../AnnualReportTaskNameConstant.java | 16 ++ .../entity/vo/AnnualReportDataVO.java | 26 ++ .../entity/vo/AnnualReportFlowUserVO.java | 40 +++ .../service/ProcessEsAnnualReportService.java | 9 +- .../ProcessEsAnnualReportServiceImpl.java | 269 +++++++++++++++--- .../impl/ProcessEsInitChangeServiceImpl.java | 97 ++++--- 10 files changed, 505 insertions(+), 96 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/constant/AnnualReportTaskNameConstant.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportDataVO.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportFlowUserVO.java diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/CommonVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/CommonVO.java index 272d73be..6bfeb008 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/CommonVO.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/CommonVO.java @@ -65,4 +65,10 @@ public class CommonVO { */ @ApiModelProperty("流程描述") private String prcMes; + + /** + * 制修订计划说明 + */ + @ApiModelProperty("制修订计划说明") + private String processDescription; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java index 968822d8..56bc6605 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java @@ -2,7 +2,12 @@ package com.jero.modules.activiti.process.common.service; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.entity.ProcessNode; +import com.jero.modules.activiti.enums.CommitFlagEnum; +import com.jero.modules.activiti.enums.FinishFlagEnum; +import com.jero.modules.activiti.process.common.entity.CommonVO; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.service.ProcessNodeService; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RepositoryService; @@ -37,6 +42,9 @@ public class ActFlowCommonService { @Resource private ProcessNodeService processNodeService; + @Resource + private ProcessApprovalRecordService processApprovalRecordService; + /** * 启动流程实例 */ @@ -46,9 +54,6 @@ public class ActFlowCommonService { .orderByProcessDefinitionVersion().desc() .list() .get(0); // 获取最新版本的流程定义 - - // 第一个节点默认通过 - variables.put("pass", true); // 启动流程 ProcessInstance processInstance = runtimeService.startProcessInstanceById(latestProcessDefinition.getId(), variables); // 流程定义ID @@ -58,10 +63,21 @@ public class ActFlowCommonService { return processInstance; } + public void updateApprovalInfo(CommonVO commonVO, String taskId, boolean pass) { + //更新审批表为完成,填充数据 + ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); + approvalRecord.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue()); + approvalRecord.setCommitText(commonVO.getCommitText()); + approvalRecord.setCommitFile(commonVO.getCommitFile()); + approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue()); + approvalRecord.setEndTime(new Date()); + processApprovalRecordService.updateById(approvalRecord); + } + /** * 完成提交任务 */ - public void completeTask(String taskId, String userId, Map map) { + public void completeTask(String taskId, String userId) { //任务Id 查询任务对象 Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (!taskExists(taskId)) { @@ -78,7 +94,8 @@ public class ActFlowCommonService { log.info("负责人id=" + userId); log.info("流程实例id=" + processInstanceId); //完成办理 - taskService.complete(taskId, map); + taskService.complete(taskId); + log.info("-----------完成任务操作 结束----------"); } @@ -148,7 +165,7 @@ public class ActFlowCommonService { return processDefinition.getKey(); } - public void autoCompleteFirstTask(String userId, String processInstanceId, String processDefinitionId, Map variables) { + public void autoCompleteFirstTask(String userId, String processInstanceId, String processDefinitionId) { // 自动完成第一个任务 List> taskList = this.myTaskList(userId); if (!CollectionUtils.isEmpty(taskList)) { @@ -160,7 +177,7 @@ public class ActFlowCommonService { log.info("当前用户ID:{},相关联的流程定义ID:{}", userId, map.get("processDefinitionId").toString()); log.info("匹配到的任务ID:{}", map.get("taskId").toString()); - this.completeTask(map.get("taskId").toString(), userId, variables); + this.completeTask(map.get("taskId").toString(), userId); break; } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java index 2cc60de8..f4fce792 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java @@ -4,7 +4,9 @@ import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.aspect.annotation.Translation; import com.jero.common.constant.enums.YesOrNoEnum; -import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import com.jero.modules.activiti.process.common.entity.TransferVO; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO; import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,7 +24,6 @@ import java.io.OutputStream; import javax.annotation.Resource; -import java.util.List; import java.util.Map; /** @@ -38,6 +39,9 @@ public class ESAnnualReportController { @Resource private ProcessEsAnnualReportService annualReportService; + @Resource + private ActFlowCommonService actFlowCommonService; + /** * 导入模板下载 */ @@ -83,42 +87,74 @@ public class ESAnnualReportController { /** * 新增主动上报申请 * - * @param esAnnualReportList + * @param */ @AutoLog(value = "企标年度制修订主动上报流程-发起流程") @ApiOperation(value="企标年度制修订主动上报流程-发起流程", notes="企标年度制修订主动上报流程-发起流程") @PostMapping("/start") - public Result startInitChange() { - // TODO 暂时不处理参数 - annualReportService.startProcess(); + public Result startInitChange(@RequestBody AnnualReportDataVO annualReportDataVO) { + annualReportService.startProcess(annualReportDataVO); return Result.OK(); } + /** + * 保存到待办 + * @param annualReportDataVO + */ + @AutoLog(value = "企标立项变更流程-保存") + @ApiOperation(value="企标立项变更流程-保存", notes="企标立项变更流程-保存") + @PostMapping("/save") + public Result save(@RequestBody AnnualReportDataVO annualReportDataVO) { + annualReportService.saveToDraft(annualReportDataVO); + return Result.OK(); + } + + /** + * 保存到待办 + * @param taskId + */ + @AutoLog(value = "企标立项变更流程-办理") + @ApiOperation(value="企标立项变更流程-办理", notes="企标立项变更流程-办理") + @PostMapping("/handle") + public Result handle(@RequestParam(value = "taskId") String taskId) { + return Result.OK(annualReportService.getHandleData(taskId)); + } + /** * 同意 * - * @param taskId - * @param esAnnualReportList + * @param annualReportDataVO */ @AutoLog(value = "企标年度制修订主动上报流程-同意") @ApiOperation(value="企标年度制修订主动上报流程-同意", notes="企标年度制修订主动上报流程-同意") @PostMapping("/agree") - public Result agree(@RequestParam("taskId") String taskId, @RequestBody List esAnnualReportList) { - annualReportService.approvalProcess(taskId, esAnnualReportList, true); + public Result agree(@RequestBody AnnualReportDataVO annualReportDataVO) { + annualReportService.approvalProcess(annualReportDataVO, true); return Result.OK(); } /** * 驳回 * - * @param taskId - * @param esAnnualReportList + * @param annualReportDataVO */ @AutoLog(value = "企标年度制修订主动上报流程-驳回") @ApiOperation(value="企标年度制修订主动上报流程-驳回", notes="企标年度制修订主动上报流程-驳回") @PostMapping("/reject") - public Result reject(@RequestParam("taskId") String taskId, @RequestBody List esAnnualReportList) { - annualReportService.approvalProcess(taskId, esAnnualReportList, false); + public Result reject(@RequestBody AnnualReportDataVO annualReportDataVO) { + annualReportService.approvalProcess(annualReportDataVO, false); + return Result.OK(); + } + + /** + * 转办 + * + */ + @AutoLog(value = "企标年度制修订主动上报流程-转办") + @ApiOperation(value="企标年度制修订主动上报流程-转办", notes="企标年度制修订主动上报流程-转办") + @PostMapping(value = "/transfer") + public Result transfer(@RequestBody TransferVO transferVO) { + actFlowCommonService.transfer(transferVO.getTaskId(), transferVO.getUserId()); return Result.OK(); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java index ece6a4d2..085d394a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java @@ -333,6 +333,49 @@ public class ProcessEsAnnualReport implements Serializable { @ApiModelProperty(value = "隶属工作组") private String workGroup; + /** + * 是否下发联络人标识 0不下发 1下发 + */ + @Dict(dicCode = "YN") + @ApiModelProperty(value = "是否下发联络人标识 0不下发 1下发") + private String distributeFlag; + + /** + * 部门联络人 + */ + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "部门联络人") + private String contactUser; + + /** + * 工作组所联络人 + */ + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "工作组所联络人") + private String workGroupUser; + + /** + * 工作组所联络人集合 + */ + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "工作组所联络人集合") + private String workGroupUserList; + + /** + * 联络人主管级上一级领导 + */ + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "联络人主管级上一级领导") + private String contactUserLeaderLeader; + + /** + * 收集联络人主管级领导 + */ + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "收集联络人主管级领导") + private String collectUserLeader; + + @TableField(exist = false) private static final long serialVersionUID = 1L; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/constant/AnnualReportTaskNameConstant.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/constant/AnnualReportTaskNameConstant.java new file mode 100644 index 00000000..75663621 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/constant/AnnualReportTaskNameConstant.java @@ -0,0 +1,16 @@ +package com.jero.modules.activiti.process.esAnnualReport.entity.constant; + +/** + * @author: Mzaxd + * @Date: 2023/10/27 7:32 + */ +public class AnnualReportTaskNameConstant { + public static final String STANDARD_ENGINEER_INIT = "标准化工程师发起"; + public static final String CONTACT_USER_DISTRIBUTE = "各部所联络人 填写/下发任务"; + public static final String WORK_GROUP_COLLECT = "工作组联络人 线下收集,填写计划内容(可跳过)"; + public static final String COLLECT_LEADER_APPROVAL = "收集联络人主管级领导审批"; + public static final String CONTACT_USER_COLLECT = "各部所联络人汇总"; + public static final String CONTACT_USER_LEADER_APPROVAL = "联络人主管级上级领导审批"; + public static final String CONTACT_USER_EDIT = "各部所联络人修改调整"; + public static final String STANDARD_ENGINEER_COLLECT = "标准化工程师归档"; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportDataVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportDataVO.java new file mode 100644 index 00000000..7ca2c6f7 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportDataVO.java @@ -0,0 +1,26 @@ +package com.jero.modules.activiti.process.esAnnualReport.entity.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.modules.activiti.process.common.entity.CommonVO; +import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import lombok.Data; + +import java.util.List; + +/** + * @author: Mzaxd + * @Date: 2023/10/26 17:28 + */ +@Data +public class AnnualReportDataVO { + + @JsonProperty("common") + private CommonVO commonVO; + + @JsonProperty("dataList") + private List dataList; + + @JsonProperty("flowUser") + private AnnualReportFlowUserVO flowUserVO; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportFlowUserVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportFlowUserVO.java new file mode 100644 index 00000000..234a5027 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/vo/AnnualReportFlowUserVO.java @@ -0,0 +1,40 @@ +package com.jero.modules.activiti.process.esAnnualReport.entity.vo; + +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author: Mzaxd + * @Date: 2023/10/26 17:29 + */ +@Data +public class AnnualReportFlowUserVO { + + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty("标准化工程师") + private String standardEngineer; + + // 部所联络人 + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty("个部所联络人") + private String contactUserList; + + // 标准专家 + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty("工作组联络人") + private String workGroupUserList; + + // 主起草人主管级领导 + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty("收集联络人主管级领导") + private String collectUserLeader; + + // 主起草人主管级领导上级领导 + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty("联络人主管级上级领导") + private String contactUserLeaderLeader; + + @ApiModelProperty("是否下发") + private boolean distribute; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java index eb66b672..43d9edad 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java @@ -2,6 +2,7 @@ package com.jero.modules.activiti.process.esAnnualReport.service; import com.baomidou.mybatisplus.extension.service.IService; import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -16,7 +17,11 @@ public interface ProcessEsAnnualReportService extends IService importData(MultipartFile file); - void startProcess(); + void startProcess(AnnualReportDataVO annualReportDataVO); - void approvalProcess(String taskId, List esAnnualReportList, boolean b); + void approvalProcess(AnnualReportDataVO annualReportDataVO, boolean b); + + void saveToDraft(AnnualReportDataVO annualReportDataVO); + + AnnualReportDataVO getHandleData(String taskId); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java index 8cb6a37a..e0739215 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java @@ -7,21 +7,35 @@ import com.jero.common.api.CommonAPI; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.SysDictItemCore; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.entity.ProcessNode; +import com.jero.modules.activiti.enums.CommitFlagEnum; +import com.jero.modules.activiti.enums.FinishFlagEnum; +import com.jero.modules.activiti.process.common.entity.CommonVO; import com.jero.modules.activiti.process.common.enums.ProcessType; import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.common.service.ProcessDraftService; import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO; +import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportFlowUserVO; import com.jero.modules.activiti.process.esAnnualReport.mapper.ProcessEsAnnualReportMapper; import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService; +import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange; import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType; +import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeDataVO; +import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeFlowUserVO; +import com.jero.modules.activiti.service.ProcessAllService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import com.jero.modules.activiti.service.ProcessNodeLinkService; +import com.jero.modules.activiti.service.ProcessNodeService; import com.jero.modules.activiti.util.ExcelUtils; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import com.jero.modules.sys.utils.UserUtils; import lombok.extern.slf4j.Slf4j; -import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; -import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.jeecgframework.poi.excel.ExcelImportUtil; @@ -35,16 +49,18 @@ import java.io.IOException; import java.util.*; import java.util.stream.Collectors; +import static com.jero.modules.activiti.process.esAnnualReport.entity.constant.AnnualReportTaskNameConstant.*; + /** -* @author ThinkBook -* @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Service实现 -* @createDate 2023-10-18 09:52:41 -*/ + * @author ThinkBook + * @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Service实现 + * @createDate 2023-10-18 09:52:41 + */ @Slf4j @Service @Transactional(rollbackFor = JeroBootException.class) public class ProcessEsAnnualReportServiceImpl extends ServiceImpl - implements ProcessEsAnnualReportService { + implements ProcessEsAnnualReportService { @Resource private CommonAPI commonAPI; @@ -59,50 +75,235 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl annualReportList = annualReportData.getDataList(); - Map variables = new HashMap<>(); - variables.put("",""); + // 设置流程变量 + Map variables = setVariables(annualReportData); // 启动流程 - ProcessInstance processInstance = runtimeService.startProcessInstanceById(latestProcessDefinition.getId(), variables); - // 流程定义ID + ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables); + + // 获取流程实例ID String processDefinitionId = processInstance.getProcessDefinitionId(); - // 流程实例Id - String processInstanceId = processInstance.getProcessInstanceId(); + String processInstanceId = processInstance.getId(); // 自动完成第一个任务 - actFlowCommonService.autoCompleteFirstTask(userId, processDefinitionId, processInstanceId, variables); - // TODO 保存数据 - log.info("【启动流程】- 成功,processDefinitionId:{}", processDefinitionId); + actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId); + // 设置流程实例Id + for (ProcessEsAnnualReport annualReport : annualReportList) { + annualReport.setProcessInstanceId(processInstance.getId()); + } + // 保存选人信息 + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables)); + + // 根据流程实例id更新流程总表 + ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); + process.setCreateUserId(userId); + process.setPrcName(annualReportData.getCommonVO().getPrcName()); + process.setPrcMes(annualReportData.getCommonVO().getPrcMes()); + process.setDueTime(annualReportData.getCommonVO().getDueTime()); + processAllService.updateById(process); + // 执行流程发起前的操作 + this.startRunTask(annualReportData); + } + + private Map getUserMap(Map variables) { + variables.remove("distribute"); + variables.remove("processDescription"); + return variables; + } + + public Map setVariables(AnnualReportDataVO annualReportData) { + AnnualReportFlowUserVO annualReportFlowUserVO = annualReportData.getFlowUserVO(); + CommonVO commonVO = annualReportData.getCommonVO(); + Map map = new HashMap<>(); + // 设置流程中各个节点的人 + map.put("standardEngineer", annualReportFlowUserVO.getStandardEngineer()); + if (!annualReportFlowUserVO.getContactUserList().isEmpty()) { + map.put("contactUserList", Optional.of(annualReportFlowUserVO.getContactUserList()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList())); + } + if (!annualReportFlowUserVO.getWorkGroupUserList().isEmpty()) { + map.put("workGroupUserList", Optional.of(annualReportFlowUserVO.getWorkGroupUserList()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList())); + } + map.put("collectUserLeader", annualReportFlowUserVO.getContactUserLeaderLeader()); + map.put("contactUserLeaderLeader", annualReportFlowUserVO.getContactUserLeaderLeader()); + // 设置流程分支判断变量 + map.put("distribute", annualReportFlowUserVO.isDistribute()); + map.put("processDescription", commonVO.getProcessDescription()); + return map; + } + + public void startRunTask(AnnualReportDataVO annualReportDataVO) { + //TODO info部长 } @Override - public void approvalProcess(String taskId, List esAnnualReportList, boolean pass) { + public void approvalProcess(AnnualReportDataVO annualReportDataVO, boolean pass) { String userId = UserUtils.getUserId(); + CommonVO commonVO = annualReportDataVO.getCommonVO(); + AnnualReportFlowUserVO flowUserVO = annualReportDataVO.getFlowUserVO(); + List dataList = annualReportDataVO.getDataList(); + String taskId = commonVO.getTaskId(); + // 获取task + if (StrUtil.isBlank(taskId) && !actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("taskId为空或任务不存在"); + } Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - String taskDefinitionKey = task.getTaskDefinitionKey(); - // TODO 校验数据 - // TODO 根据当前节点类型保存数据 + String taskName = task.getName(); + Map variables = new HashMap<>(); + String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); + String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId); + switch (taskName) { + case CONTACT_USER_DISTRIBUTE: + // 获取是否分发 + if (!flowUserVO.isDistribute()) { + // 保存联络人主管级上级领导 + dataList.forEach(data -> data.setContactUserLeaderLeader(flowUserVO.getContactUserLeaderLeader())); + // 不分发,入库存表 + saveBatch(dataList); + } + // 设置流程变量 + break; + case WORK_GROUP_COLLECT: + String executionId = task.getExecutionId(); + String contactUser = (String) runtimeService.getVariable(executionId, "contactUser"); + dataList.forEach(data -> data.setContactUser(contactUser)); + // 保存收集联络人主管级领导 + dataList.forEach(data -> data.setCollectUserLeader(flowUserVO.getCollectUserLeader())); + dataList.forEach(data -> data.setWorkGroupUser(UserUtils.getUserId())); + saveBatch(dataList); + // 设置流程变量 + break; + case CONTACT_USER_COLLECT: + case CONTACT_USER_EDIT: + // 先删后增 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessEsAnnualReport::getContactUser, UserUtils.getUserId()); + remove(wrapper); + saveBatch(dataList); + break; + } + if (pass) { + // 更新业务流程数据 + variables = setVariables(annualReportDataVO); + variables.put("pass", true); + // 保存选人信息 + Map userMap = this.getUserMap(variables); + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); + } else { + // 设置流程变量 + variables.put("pass", false); + } // 设置流程变量 - // 完成任务 - actFlowCommonService.completeTask(taskId, userId, null); + variables.put("pass", pass); + + //更新审批表为完成,填充数据 + actFlowCommonService.updateApprovalInfo(commonVO, taskId, pass); + //审批节点 + actFlowCommonService.completeTask(taskId, userId); + } + + @Override + public void saveToDraft(AnnualReportDataVO annualReportDataVO) { + + } + + @Override + public AnnualReportDataVO getHandleData(String taskId) { + String userId = UserUtils.getUserId(); + if (!actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("任务不存在"); + } + AnnualReportDataVO annualReportDataVO = new AnnualReportDataVO(); + // 使用流程引擎根据taskId找到流程实例Id + String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); + String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId); + // 获取流程通用数据 + ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); + CommonVO commonVO = new CommonVO(); + commonVO.setPrcName(process.getPrcName()); + commonVO.setTaskId(process.getTaskId()); + commonVO.setPrcMes(process.getPrcMes()); + commonVO.setDueTime(process.getDueTime()); + String processDescription = (String) runtimeService.getVariable(processInstanceId, "processDescription"); + boolean distribute = (boolean) runtimeService.getVariable(processInstanceId, "distribute"); + commonVO.setProcessDescription(processDescription); + annualReportDataVO.setCommonVO(commonVO); + // 获取流程实例数据 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessEsAnnualReport::getProcessInstanceId, processInstanceId); + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + String taskName = task.getName(); + switch (taskName) { + case STANDARD_ENGINEER_INIT: + // do nothing now + break; + case CONTACT_USER_DISTRIBUTE: + // do nothing now + break; + case WORK_GROUP_COLLECT: + // do nothing now + break; + case COLLECT_LEADER_APPROVAL: + wrapper.eq(ProcessEsAnnualReport::getCollectUserLeader, userId); + annualReportDataVO.setDataList(list(wrapper)); + break; + case CONTACT_USER_COLLECT: + wrapper.eq(ProcessEsAnnualReport::getContactUser, userId); + annualReportDataVO.setDataList(list(wrapper)); + break; + case CONTACT_USER_LEADER_APPROVAL: + wrapper.eq(ProcessEsAnnualReport::getContactUserLeaderLeader, userId); + annualReportDataVO.setDataList(list(wrapper)); + break; + case CONTACT_USER_EDIT: + wrapper.eq(ProcessEsAnnualReport::getContactUser, userId); + annualReportDataVO.setDataList(list(wrapper)); + break; + case STANDARD_ENGINEER_COLLECT: + wrapper.eq(ProcessEsAnnualReport::getProcessInstanceId, processInstanceId); + annualReportDataVO.setDataList(list(wrapper)); + break; + } + // 选人组件内容填充 + annualReportDataVO.setFlowUserVO(this.getProcessUserInfo(processDefinitionId, processInstanceId)); + return annualReportDataVO; + } + + private AnnualReportFlowUserVO getProcessUserInfo(String processDefinitionId, String processInstanceId) { + List nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId); + AnnualReportFlowUserVO annualReportFlowUserVO = new AnnualReportFlowUserVO(); + Map userMap = nodeList.stream().collect(Collectors.toMap(ProcessNode::getVariableName, node -> node)); + annualReportFlowUserVO.setStandardEngineer(userMap.get("standardEngineer").getLinkUserIds()); + annualReportFlowUserVO.setContactUserList(userMap.get("contactUserList").getLinkUserIds()); + annualReportFlowUserVO.setWorkGroupUserList(userMap.get("workGroupUserList").getLinkUserIds()); + annualReportFlowUserVO.setCollectUserLeader(userMap.get("collectUserLeader").getLinkUserIds()); + annualReportFlowUserVO.setContactUserLeaderLeader(userMap.get("contactUserLeaderLeader").getLinkUserIds()); + return annualReportFlowUserVO; } @Override @@ -183,7 +384,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item)); - list.forEach(item-> { + list.forEach(item -> { // 如果是制定则去除掉所有的原企标名称 原企标编号 if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) { item.setOriginEnStandardName(null); @@ -199,6 +400,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl list, List listDict) { list.forEach(item -> { item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict)); @@ -212,6 +414,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl validationList(List list, List listDict) { List esList = enterpriseStandardService.list(); List errorMsgs = new ArrayList<>(); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java index 10bb2f34..0e2a5d91 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java @@ -107,15 +107,16 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId); InitChangeFlowUserVO initChangeFlowUserVO = new InitChangeFlowUserVO(); Map userMap = nodeList.stream().collect(Collectors.toMap(ProcessNode::getVariableName, node -> node)); - initChangeFlowUserVO.setCreateUser(userMap.get("createUser").getLinkUserIds()); - initChangeFlowUserVO.setContactUser(userMap.get("contactUser").getLinkUserIds()); - initChangeFlowUserVO.setMainDraftUserLeader(userMap.get("mainDraftUserLeader").getLinkUserIds()); - initChangeFlowUserVO.setMainDraftUserLeaderLeader(userMap.get("mainDraftUserLeaderLeader").getLinkUserIds()); - initChangeFlowUserVO.setStandardizationApprovalUser(userMap.get("standardizationApprovalUser").getLinkUserIds()); - initChangeFlowUserVO.setNewMainDraftUserLeaderLeader(userMap.get("newMainDraftUserLeaderLeader").getLinkUserIds()); - initChangeFlowUserVO.setNewMainDraftUserLeader(userMap.get("newMainDraftUserLeader").getLinkUserIds()); - initChangeFlowUserVO.setCopyUser(userMap.get("copyUser").getLinkUserIds()); - initChangeFlowUserVO.setStandardExpert(userMap.get("standardExpert").getLinkUserIds()); + Optional.ofNullable(userMap.get("createUser")).ifPresent(node -> initChangeFlowUserVO.setCreateUser(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("contactUser")).ifPresent(node -> initChangeFlowUserVO.setContactUser(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("standardExpertList")).ifPresent(node -> initChangeFlowUserVO.setStandardExpert(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("mainDraftUserLeader")).ifPresent(node -> initChangeFlowUserVO.setMainDraftUserLeader(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("mainDraftUserLeaderLeader")).ifPresent(node -> initChangeFlowUserVO.setMainDraftUserLeaderLeader(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("standardizationApprovalUser")).ifPresent(node -> initChangeFlowUserVO.setStandardizationApprovalUser(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("newMainDraftUserLeaderLeader")).ifPresent(node -> initChangeFlowUserVO.setNewMainDraftUserLeaderLeader(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("newMainDraftUserLeader")).ifPresent(node -> initChangeFlowUserVO.setNewMainDraftUserLeader(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("relatedUserList")).ifPresent(node -> initChangeFlowUserVO.setRelatedUser(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("copyUser")).ifPresent(node -> initChangeFlowUserVO.setCopyUser(node.getLinkUserIds())); return initChangeFlowUserVO; } @@ -138,7 +139,14 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl esInitChangeList = initChangeDataVO.getDataList(); Map variables = new HashMap<>(); String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId); if (pass) { - // 校验企标编号是否冲突 - if (!esUtil.verifyEnStandardNumber(esInitChangeList.get(0).getOriginEnStandardNo())) { - throw new JeroBootException("企标编号冲突"); + InitChangeFlowUserVO flowUserInfoVO = initChangeDataVO.getFlowUserInfoVO(); + if (flowUserInfoVO != null) { + Map userMap = new HashMap<>(); + this.setUserMap(userMap, flowUserInfoVO); + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); } - // 更新业务流程数据 - saveOrUpdateBatch(esInitChangeList); - variables = setVariables(initChangeDataVO); - variables.put("pass", true); - // 保存选人信息 - Map userMap = this.getUserMap(variables); - processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); + runtimeService.setVariable(processInstanceId, "pass", true); } else { // 设置流程变量 - InitChangeFlowUserVO processUserInfo = this.getProcessUserInfo(processDefinitionId, processInstanceId); - initChangeDataVO.setFlowUserInfoVO(processUserInfo); - this.setUserMap(variables, processUserInfo); - variables.put("pass", false); +// InitChangeFlowUserVO processUserInfo = this.getProcessUserInfo(processDefinitionId, processInstanceId); +// initChangeDataVO.setFlowUserInfoVO(processUserInfo); + runtimeService.setVariable(processInstanceId, "pass", false); +// variables.put("pass", false); } //更新审批表为完成,填充数据 ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); @@ -203,13 +206,20 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl getUserMap(Map variables) { variables.remove("pass"); variables.remove("applicationCategory"); variables.remove("projectType"); + // 转成逗号拼接 + variables.put("standardExpertList", Optional.ofNullable((List) variables.get("standardExpertList")) + .map(list -> String.join(",", list)) + .orElse("")); + variables.put("relatedUserList", Optional.ofNullable((List) variables.get("relatedUserList")) + .map(list -> String.join(",", list)) + .orElse("")); return variables; } @@ -270,23 +280,30 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl map = new HashMap<>(); - // 设置流程中各个节点的人 - map.put("createUser", initChangeFlowUserVO.getCreateUser()); - map.put("contactUser", initChangeFlowUserVO.getContactUser()); - map.put("standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList())); - map.put("mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); - map.put("mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); - map.put("standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); - map.put("newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); - map.put("newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); - map.put("relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList())); - map.put("copyUser", initChangeFlowUserVO.getCopyUser()); - // 设置流程分支判断变量 - map.put("applicationCategory", initChange.getApplicationCategory()); - map.put("projectType", initChange.getProjectType()); + + // 使用一个通用方法来只在不为空时添加键值对 + putIfNotNull(map, "createUser", initChangeFlowUserVO.getCreateUser()); + putIfNotNull(map, "contactUser", initChangeFlowUserVO.getContactUser()); + putIfNotNull(map, "standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(map, "mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); + putIfNotNull(map, "mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); + putIfNotNull(map, "standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); + putIfNotNull(map, "newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); + putIfNotNull(map, "newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); + putIfNotNull(map, "relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(map, "copyUser", initChangeFlowUserVO.getCopyUser()); + putIfNotNull(map, "applicationCategory", initChange.getApplicationCategory()); + putIfNotNull(map, "projectType", initChange.getProjectType()); + return map; } + private void putIfNotNull(Map map, String key, Object value) { + if (value != null) { + map.put(key, value); + } + } + public void startRunTask(InitChangeDataVO initChangeData) { List esInitChangeList = initChangeData.getDataList(); // 校验企标编号是否冲突