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 519226d9..0b99db8b 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 @@ -1,12 +1,15 @@ package com.jero.modules.activiti.process.common.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; 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.mapper.ProcessNodeMapper; import com.jero.modules.activiti.process.common.entity.CommonVO; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; @@ -50,6 +53,9 @@ public class ActFlowCommonService { @Resource private ProcessApprovalRecordService approvalRecordService; + @Resource + private ProcessNodeMapper processNodeMapper; + /** * 启动流程实例 */ @@ -70,6 +76,7 @@ public class ActFlowCommonService { /** * Map工具 + * * @param map * @param key * @param value @@ -80,6 +87,7 @@ public class ActFlowCommonService { /** * 循环设置流程变量 + * * @param processInstanceId * @param variables */ @@ -91,6 +99,7 @@ public class ActFlowCommonService { /** * 更新审批表为完成,填充数据 + * * @param commonVO * @param taskId * @param pass @@ -171,8 +180,8 @@ public class ActFlowCommonService { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(ProcessApprovalRecord::getId, approvalRecord.getId()); - updateWrapper.set(ProcessApprovalRecord::getTransferBy,loginUser.getId()); - updateWrapper.set(ProcessApprovalRecord::getUserId,userId); + updateWrapper.set(ProcessApprovalRecord::getTransferBy, loginUser.getId()); + updateWrapper.set(ProcessApprovalRecord::getUserId, userId); approvalRecordService.update(updateWrapper); taskService.setAssignee(taskId, userId); log.info("转办 任务Id:{} 转办用户Id{}", taskId, userId); @@ -180,6 +189,7 @@ public class ActFlowCommonService { /** * 判断任务是否存在 + * * @param taskId * @return */ @@ -246,6 +256,7 @@ public class ActFlowCommonService { /** * 更新流程主表 + * * @param processInstanceId * @param userId * @param prcName diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/entity/vo/ESAbolishFlowUserVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/entity/vo/ESAbolishFlowUserVO.java index 93ac2fb8..3e4b9b48 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/entity/vo/ESAbolishFlowUserVO.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/entity/vo/ESAbolishFlowUserVO.java @@ -12,8 +12,8 @@ import lombok.Data; public class ESAbolishFlowUserVO { @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") - @ApiModelProperty("主起草人") - private String mainDraftUser; + @ApiModelProperty("发起人") + private String createUser; // 相关人员 @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @@ -22,20 +22,12 @@ public class ESAbolishFlowUserVO { // 主起草人主管级领导 @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") - @ApiModelProperty("主起草人主管级领导") - private String mainDraftUserLeader; + @ApiModelProperty("起草人和会签人主管级领导") + private String leader; // 标准化审批人 @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty("标准化审批人") private String standardizationUser; - // 主起草人主管级领导上级领导 - @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") - @ApiModelProperty("主起草人主管级领导上级领导") - private String mainDraftUserLeaderLeader; - - - - } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/ProcessEsAbolishService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/ProcessEsAbolishService.java index 8bb6d5dd..ba1d4953 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/ProcessEsAbolishService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/ProcessEsAbolishService.java @@ -15,7 +15,7 @@ public interface ProcessEsAbolishService extends IService { void saveToDraft(ESAbolishDataVO annualInitData); - ProcessEsAbolish getHandleData(String taskId); + ESAbolishDataVO getHandleData(String taskId); void approvalInitChange(ESAbolishDataVO annualInitData, boolean pass); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/impl/ProcessEsAbolishServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/impl/ProcessEsAbolishServiceImpl.java index aa4d8705..33e53acc 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/impl/ProcessEsAbolishServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAbolish/service/impl/ProcessEsAbolishServiceImpl.java @@ -1,44 +1,237 @@ package com.jero.modules.activiti.process.esAbolish.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.entity.ProcessNode; +import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.common.entity.CommonVO; +import com.jero.modules.activiti.process.common.entity.ProcessDraft; +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.esAbolish.entity.ProcessEsAbolish; import com.jero.modules.activiti.process.esAbolish.entity.vo.ESAbolishDataVO; +import com.jero.modules.activiti.process.esAbolish.entity.vo.ESAbolishFlowUserVO; import com.jero.modules.activiti.process.esAbolish.service.ProcessEsAbolishService; import com.jero.modules.activiti.process.esAbolish.mapper.ProcessEsAbolishMapper; +import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange; +import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeFlowUserVO; +import com.jero.modules.activiti.service.ProcessAllService; +import com.jero.modules.activiti.service.ProcessNodeLinkService; +import com.jero.modules.activiti.service.ProcessNodeService; +import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; +import com.jero.modules.sys.utils.UserUtils; import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + /** -* @author ThinkBook -* @description 针对表【process_es_abolish(企业标准)】的数据库操作Service实现 -* @createDate 2023-10-29 21:02:55 -*/ + * @author ThinkBook + * @description 针对表【process_es_abolish(企业标准)】的数据库操作Service实现 + * @createDate 2023-10-29 21:02:55 + */ @Slf4j @Transactional(rollbackFor = JeroBootException.class) @Service public class ProcessEsAbolishServiceImpl extends ServiceImpl - implements ProcessEsAbolishService{ + implements ProcessEsAbolishService { + + @Resource + private ProcessAllService processAllService; + + @Resource + private ActFlowCommonService actFlowCommonService; + + @Resource + private ProcessDraftService processDraftService; + + @Resource + private ProcessNodeLinkService processNodeLinkService; + + @Resource + private ProcessNodeService processNodeService; + + @Resource + private RuntimeService runtimeService; @Override - public void startProcess(ESAbolishDataVO annualInitData) { + public void startProcess(ESAbolishDataVO abolishData) { + // 执行流程发起前的操作 + this.startRunTask(abolishData); + // 流程Key + String processDefinitionKey = ProcessType.ES_INIT_CHANGE.getProcessKey(); + // 当前用户Id + String userId = UserUtils.getUserId(); + // 业务数据 + ProcessEsAbolish esAbolish = abolishData.getData(); + // 人员数据 + ESAbolishFlowUserVO flowUser = abolishData.getFlowUser(); + // 设置流程变量 + Map variables = this.setVariables(flowUser); + // 启动流程 + ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables); + // 获取流程实例ID + String processDefinitionId = processInstance.getProcessDefinitionId(); + String processInstanceId = processInstance.getId(); + // 手动设置所有流程变量 + actFlowCommonService.setProcessVariables(processInstanceId, variables); + // 自动完成第一个任务 + actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId); + // 设置流程实例Id + esAbolish.setProcessInstanceId(processInstanceId); + // 保存到业务流程表 + save(esAbolish); + // 保存选人信息 + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables)); + // 根据流程实例id更新流程总表 + String prcName = abolishData.getCommon().getPrcName(); + String prcMes = abolishData.getCommon().getPrcMes(); + Date dueTime = abolishData.getCommon().getDueTime(); + actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, dueTime); + } + public Map setVariables(ESAbolishFlowUserVO flowUser) { + boolean counterSign = StrUtil.isNotBlank(flowUser.getRelatedUser()); + HashMap map = new HashMap<>(this.setUserVariables(flowUser)); + actFlowCommonService.putIfNotNull(map, "counterSign", counterSign); + return map; + } + + public Map setUserVariables(ESAbolishFlowUserVO flowUser) { + HashMap map = new HashMap<>(); + // 使用一个通用方法来只在不为空时添加键值对 + actFlowCommonService.putIfNotNull(map, "createUser", flowUser.getCreateUser()); + actFlowCommonService.putIfNotNull(map, "leader", flowUser.getLeader()); + actFlowCommonService.putIfNotNull(map, "standardizationApprovalUser", flowUser.getStandardizationUser()); + actFlowCommonService.putIfNotNull(map, "relatedUserList", Optional.ofNullable(flowUser.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + return map; + } + + private Map getUserMap(Map variables) { + variables.remove("pass"); + variables.remove("counterSign"); + // 转成逗号拼接 + variables.put("relatedUserList", Optional.ofNullable((List) variables.get("relatedUserList")) + .map(list -> String.join(",", list)) + .orElse("")); + return variables; } @Override - public void saveToDraft(ESAbolishDataVO annualInitData) { + public void saveToDraft(ESAbolishDataVO abolishDataVO) { + CommonVO commonVO = abolishDataVO.getCommon(); + String taskId = commonVO.getTaskId(); + ProcessEsAbolish esAbolish = abolishDataVO.getData(); + saveOrUpdate(esAbolish); + // 先删后增 + LambdaUpdateWrapper draftWrapper = new LambdaUpdateWrapper<>(); + if (StrUtil.isBlank(taskId)) { + // 第一个节点点击保存没有taskId + draftWrapper.eq(ProcessDraft::getPrcType, ProcessTypeEnum.B.getValue()); + draftWrapper.eq(ProcessDraft::getCreateBy, UserUtils.getUserId()); + processDraftService.remove(draftWrapper); + List draftList = new ArrayList<>(); + ProcessDraft draft = new ProcessDraft(); + draft.setProjectId(esAbolish.getId()); + draft.setPrcType(ProcessTypeEnum.B.getValue()); + draftList.add(draft); + processDraftService.saveBatch(draftList); + } else { + String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); + draftWrapper.eq(ProcessDraft::getProjectId, esAbolish.getId()); + processDraftService.remove(draftWrapper); + List draftList = new ArrayList<>(); + ProcessDraft draft = new ProcessDraft(); + draft.setProjectId(esAbolish.getId()); + draft.setProcessInstanceId(processInstanceId); + draft.setPrcName(commonVO.getPrcName()); + draft.setPrcType(ProcessTypeEnum.B.getValue()); + draftList.add(draft); + processDraftService.saveBatch(draftList); + } + } + public void startRunTask(ESAbolishDataVO abolishData) { + // do nothing now } @Override - public ProcessEsAbolish getHandleData(String taskId) { - return null; + public ESAbolishDataVO getHandleData(String taskId) { + if (!actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("任务不存在"); + } + ESAbolishDataVO abolishData = new ESAbolishDataVO(); + // 使用流程引擎根据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()); + abolishData.setCommon(commonVO); + // 获取流程实例数据 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ProcessEsAbolish::getProcessInstanceId, processInstanceId); + lambdaQueryWrapper.eq(ProcessEsAbolish::getDelFlag, YesOrNoEnum.NO.getValue()); + ProcessEsAbolish data = getOne(lambdaQueryWrapper); + abolishData.setData(data); + // 选人组件内容填充 + abolishData.setFlowUser(this.getProcessUserInfo(processDefinitionId, processInstanceId)); + return abolishData; + } + + private ESAbolishFlowUserVO getProcessUserInfo(String processDefinitionId, String processInstanceId) { + List nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId); + ESAbolishFlowUserVO flowUser = new ESAbolishFlowUserVO(); + Map userMap = nodeList.stream().collect(Collectors.toMap(ProcessNode::getVariableName, node -> node)); + Optional.ofNullable(userMap.get("createUser")).ifPresent(node -> flowUser.setCreateUser(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("leader")).ifPresent(node -> flowUser.setLeader(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("standardizationUser")).ifPresent(node -> flowUser.setStandardizationUser(node.getLinkUserIds())); + Optional.ofNullable(userMap.get("relatedUserList")).ifPresent(node -> flowUser.setRelatedUser(node.getLinkUserIds())); + return flowUser; } @Override - public void approvalInitChange(ESAbolishDataVO annualInitData, boolean pass) { - + public void approvalInitChange(ESAbolishDataVO abolishData, boolean pass) { + String userId = UserUtils.getUserId(); + CommonVO commonVO = abolishData.getCommon(); + String taskId = commonVO.getTaskId(); + if (StrUtil.isBlank(taskId) && !actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("taskId为空或任务不存在"); + } + String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); + String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId); + if (pass) { + ESAbolishFlowUserVO flowUserInfoVO = abolishData.getFlowUser(); + if (flowUserInfoVO != null) { + Map userMap = new HashMap<>(this.setUserVariables(flowUserInfoVO)); + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); + Map variables = setUserVariables(flowUserInfoVO); + actFlowCommonService.setProcessVariables(processInstanceId, variables); + } + runtimeService.setVariable(processInstanceId, "pass", true); + } else { + // 设置流程变量 + runtimeService.setVariable(processInstanceId, "pass", false); + } + // 更新审批表为完成,填充数据 + actFlowCommonService.updateApprovalInfo(commonVO, taskId, pass); + //审批节点 + actFlowCommonService.completeTask(taskId, userId); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java index 615c72a3..6135dbb3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java @@ -9,9 +9,6 @@ import com.jero.modules.activiti.process.common.entity.TransferVO; import com.jero.modules.activiti.process.common.service.ActFlowCommonService; import com.jero.modules.activiti.process.esAnnualInit.entity.vo.AnnualInitDataVO; import com.jero.modules.activiti.process.esAnnualInit.service.ProcessEsAnnualInitService; -import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange; -import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeDataVO; -import com.jero.modules.laws.common.constant.FieldCommon; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.IOUtils; @@ -24,7 +21,6 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; -import java.util.HashMap; import java.util.Map; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/controller/ProcessESInitChangeController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/controller/ProcessESInitChangeController.java index 6c164b4c..77e859cc 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/controller/ProcessESInitChangeController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/controller/ProcessESInitChangeController.java @@ -15,11 +15,9 @@ import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.activiti.engine.runtime.ProcessInstance; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; -import java.util.List; import java.util.Map; /** 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 1779c347..309ffc0e 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 @@ -222,9 +222,9 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl esInitChange = initChangeData.getDataList(); saveOrUpdateBatch(esInitChange); // 先删后增 + LambdaUpdateWrapper draftWrapper = new LambdaUpdateWrapper<>(); if (StrUtil.isBlank(taskId)) { // 第一个节点点击保存没有taskId - LambdaUpdateWrapper draftWrapper = new LambdaUpdateWrapper<>(); draftWrapper.eq(ProcessDraft::getPrcType, ProcessTypeEnum.B.getValue()); draftWrapper.eq(ProcessDraft::getCreateBy, UserUtils.getUserId()); processDraftService.remove(draftWrapper); @@ -238,7 +238,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl draftWrapper = new LambdaUpdateWrapper<>(); draftWrapper.in(ProcessDraft::getProjectId, esInitChange.stream().map(ProcessEsInitChange::getId).collect(Collectors.toList())); processDraftService.remove(draftWrapper); List draftList = new ArrayList<>();