diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/dto/ProcessDTO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/dto/ProcessDTO.java index 7207f510..ef591791 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/dto/ProcessDTO.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/dto/ProcessDTO.java @@ -2,6 +2,7 @@ package com.jero.modules.activiti.process.fb.dto; import com.jero.modules.activiti.entity.ProcessApprovalRecord; import lombok.Data; +import org.activiti.engine.runtime.Execution; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; @@ -25,4 +26,6 @@ public class ProcessDTO { private ProcessApprovalRecord processApprovalRecord; + private Execution execution; + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java index 1237f125..a0415c9a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java @@ -113,4 +113,6 @@ public interface IProcessHandleService { * @Description: 获取全部子流程实例 **/ List subProcessList(String superProcessInstanceId, String subProcessDefinitionKey); + + void saveNodeUserLink(String processInstanceId, String nodeId, List userIdList); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java index 9e77052f..94835d2f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.exception.JeroBootException; 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.entity.ProcessNodeLink; import com.jero.modules.activiti.enums.CommitFlagEnum; import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.process.common.entity.ProcessDraft; @@ -13,11 +15,11 @@ import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO; import com.jero.modules.activiti.process.fb.dto.ProcessDTO; import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; -import com.jero.modules.activiti.process.projectassess.vo.ProcessProjectAssessVO; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.service.ProcessNodeLinkService; import com.jero.common.api.vo.ResultCommon; +import com.jero.modules.activiti.service.ProcessNodeService; import com.jero.modules.laws.common.util.CurrentUserUtil; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RepositoryService; @@ -27,7 +29,6 @@ import org.activiti.engine.runtime.Execution; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,6 +56,8 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { @Resource private ProcessApprovalRecordService processApprovalRecordService; // 任务审批表 @Resource + private ProcessNodeService processNodeService; + @Resource private ProcessNodeLinkService processNodeLinkService; // 流程实例节点关联用户表 @Resource private ProcessDraftService processDraftService; // 流程草稿表 @@ -226,16 +229,18 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { public ProcessDTO getProcessDTO(String taskId) { ProcessDTO processDTO = new ProcessDTO(); ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getToDoByTaskId(taskId); - processDTO.setProcessApprovalRecord(processApprovalRecord); Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); String processInstanceId = task.getProcessInstanceId(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String processDefinitionId = processInstance.getProcessDefinitionId(); + Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult(); processDTO.setTaskId(taskId); processDTO.setProcessInstanceId(processInstanceId); processDTO.setProcessDefinitionId(processDefinitionId); + processDTO.setProcessApprovalRecord(processApprovalRecord); processDTO.setTask(task); processDTO.setProcessInstance(processInstance); + processDTO.setExecution(execution); return processDTO; } @@ -463,4 +468,33 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { .list(); } + /** + * 保存流程定义节点用户 + * @param processInstanceId + * @param nodeId + * @param userIdList + */ + @Override + public void saveNodeUserLink(String processInstanceId, String nodeId, List userIdList) { + String processDefinitionId = runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstanceId).singleResult().getProcessDefinitionId(); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessNode::getProcessDefinitionId, processDefinitionId); + queryWrapper.eq(ProcessNode::getIsView, 1); + queryWrapper.eq(ProcessNode::getXmlNodeId, nodeId); + ProcessNode processNode = processNodeService.getOne(queryWrapper, false); + + List linkList = new ArrayList<>(); + userIdList.forEach(userId -> { + ProcessNodeLink link = new ProcessNodeLink(); + link.setProcessDefinitionId(processDefinitionId); + link.setProcessNodeId(processNode.getId()); + link.setProcessInstanceId(processInstanceId); + link.setUserId(userId); + linkList.add(link); + }); + processNodeLinkService.saveBatch(linkList, linkList.size()); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/common/ProcessProjectAssessCommon.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/common/ProcessProjectAssessCommon.java index f77322b1..7c6e516e 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/common/ProcessProjectAssessCommon.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/common/ProcessProjectAssessCommon.java @@ -7,6 +7,7 @@ package com.jero.modules.activiti.process.projectassess.common; public class ProcessProjectAssessCommon { public static final String STANDARDS_ENGINEER = "standardsEngineer"; public static final String MANAGER_LEADER_LIST = "managerLeaderList"; + public static final String MODULE_OWNER_LIST = "moduleOwnerList"; //法规工程师发起 public static final String FGGCSFQ = "fggcsfq"; //各部门主管级领导下发 diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/entity/ProcessProjectAssessTerm.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/entity/ProcessProjectAssessTerm.java index 684476b6..269a2c1f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/entity/ProcessProjectAssessTerm.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/entity/ProcessProjectAssessTerm.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -114,10 +113,23 @@ public class ProcessProjectAssessTerm { @TableField(exist = false) @ApiModelProperty(value = "责任单位负责人id") private String responsibleUnitLeaders; + /** + * 模块负责人id + */ + @TableField(exist = false) + @ApiModelProperty(value = "模块负责人id") + private String moduleOwners; + + /** + * 不涉及原因 + */ + @TableField(exist = false) + @ApiModelProperty(value = "不涉及原因") + private String notInvolved; @TableField(exist = false) @ApiModelProperty(value = "条款关联用户") - private List processProjectAssessTermUserListList; + private List processProjectAssessTermUserList; } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/service/ProcessProjectAssessService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/service/ProcessProjectAssessService.java index 44411a9f..ce138279 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/service/ProcessProjectAssessService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/projectassess/service/ProcessProjectAssessService.java @@ -1,14 +1,20 @@ package com.jero.modules.activiti.process.projectassess.service; +import java.util.List; + import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.api.vo.ResultCommon; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; +import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.fb.common.ConsultationNodeSort; +import com.jero.modules.activiti.process.fb.common.FbCommon; import com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey; import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO; +import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO; import com.jero.modules.activiti.process.fb.dto.ProcessDTO; import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.process.projectassess.common.ProcessProjectAssessCommon; @@ -18,7 +24,9 @@ import com.jero.modules.activiti.process.projectassess.entity.ProcessProjectAsse import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.activiti.process.projectassess.vo.ProcessProjectAssessVO; +import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.laws.common.util.CurrentUserUtil; +import org.activiti.engine.TaskService; import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -44,6 +52,10 @@ public class ProcessProjectAssessService extends ServiceImpl processInfoVO) { + BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO(); + String taskId = basicTaskInfoDTO.getTaskId(); + ProcessDTO processDTO = processHandleService.getProcessDTO(taskId); + String processInstanceId = processDTO.getProcessInstanceId(); + ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId); + processInfoVO.setBusinessId(processAll.getProjectId()); + Task task = processDTO.getTask(); + String taskDefinitionKey = task.getTaskDefinitionKey(); + switch (taskDefinitionKey) { + case ProcessProjectAssessCommon.GBMZGJLDXF: + gbmzgjldxfSubmit(processInfoVO,processDTO); + break; + case ProcessProjectAssessCommon.GBMZGJLDSP: + break; + case ProcessProjectAssessCommon.MKFZRFF: + break; + case ProcessProjectAssessCommon.SJGCSPG: + break; + default: + } + + } + + private void gbmzgjldxfSubmit(ProcessInfoVO processInfoVO, ProcessDTO processDTO) { + String businessId = processInfoVO.getBusinessId(); + ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord(); + String originUserId = processApprovalRecord.getOriginUserId(); + // 删除原先存储的关联 + LambdaQueryWrapper removeWrapper = new LambdaQueryWrapper<>(); + removeWrapper.eq(ProcessProjectAssessTermUser::getAssessmentId, businessId); + removeWrapper.eq(ProcessProjectAssessTermUser::getResponsibleUnitLeader, originUserId); + processProjectAssessTermUserService.remove(removeWrapper); + + ProcessProjectAssessVO businessInfoDTO = processInfoVO.getBusinessInfoDTO(); + List processProjectAssessTermList = businessInfoDTO.getProcessProjectAssessTermList(); + List allTermUserList = new ArrayList<>(); + List moduleOwnerIds = new ArrayList<>(); + for (ProcessProjectAssessTerm processProjectAssessTerm : processProjectAssessTermList) { + String termId = processProjectAssessTerm.getId(); + Integer canAssignFlag = processProjectAssessTerm.getCanAssignFlag(); + String notInvolved = processProjectAssessTerm.getNotInvolved(); + if (YesOrNoEnum.NO.getInteger().equals(canAssignFlag)){ + continue; + } + if (StringUtils.isNotBlank(notInvolved)) { + ProcessProjectAssessTermUser newTermUser = new ProcessProjectAssessTermUser(); + newTermUser.setAssessmentId(businessId); + newTermUser.setTremId(termId); + newTermUser.setResponsibleUnitLeader(originUserId); + //newTermUser.setParentExecutionId(); + newTermUser.setNotInvolved(notInvolved); + allTermUserList.add(newTermUser); + continue; + } + + String moduleOwners = processProjectAssessTerm.getModuleOwners(); + List moduleOwnerIdList = Arrays.asList(moduleOwners.split(",")); + for (String moduleOwnerId : moduleOwnerIdList) { + ProcessProjectAssessTermUser newTermUser = new ProcessProjectAssessTermUser(); + newTermUser.setAssessmentId(businessId); + newTermUser.setTremId(termId); + newTermUser.setResponsibleUnitLeader(originUserId); + //newTermUser.setParentExecutionId(); + newTermUser.setModuleOwner(moduleOwnerId); + moduleOwnerIds.add(moduleOwnerId); + allTermUserList.add(newTermUser); + } + } + processProjectAssessTermUserService.saveBatch(allTermUserList); + processHandleService.saveNodeUserLink(processDTO.getProcessInstanceId(), ProcessProjectAssessCommon.GBMZGJLDXF, moduleOwnerIds); + // 完成任务 + String taskId = processDTO.getTaskId(); + Map variables = new HashMap<>(); + variables.put(ProcessProjectAssessCommon.MODULE_OWNER_LIST, moduleOwnerIds); + taskService.complete(taskId,variables); } public void saveToDraft(ProcessInfoVO processInfoVO) {