diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/common/RevisionTaskNodeIdConstant.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/common/RevisionTaskNodeIdConstant.java index 32d85252..a9a18748 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/common/RevisionTaskNodeIdConstant.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/common/RevisionTaskNodeIdConstant.java @@ -6,8 +6,6 @@ package com.jero.modules.activiti.process.esRevisionAdvice.common; */ public class RevisionTaskNodeIdConstant { - /** 主起草人分发 */ - public static final String MAIN_DRAFT_USER_DISTRIBUTE = "Activity_0v98tow"; /** 法规工程师确认是否开启征求意见 */ public static final String CONFIRM_ADVISE = "Activity_1siuksf"; /** 设计工程师填写意见 */ @@ -16,5 +14,8 @@ public class RevisionTaskNodeIdConstant { public static final String ADVICE_COLLECT = "Activity_1riqzkp"; /** 法规工程师派号 */ public static final String SET_STANDARD_NUMBER = "Activity_1ralk8e"; - + /** 征求意见人员 */ + public static final String ADVICE_USER_LIST = "adviceUserList"; + /** 开启征求意见 */ + public static final String OPEN = "open"; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java index 59113b71..702aabf8 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java @@ -103,19 +103,25 @@ public class EsRevisionAdvice implements Serializable { @Dict(dicCode = "consultation_opinion") private String handleAdvice; - /** - * 0无意见 1有意见 - */ - @ApiModelProperty(value = "0无意见 1有意见") - @Dict(dicCode = "yn") - private String haveNoOpinion; - /** * 理由 */ @ApiModelProperty(value = "理由") private String reason; + /** + * 轮数 + */ + @ApiModelProperty(value = "轮数") + @Dict(dicCode = "batch_num") + private Integer batchNum; + + /** + * 标准Id + */ + @ApiModelProperty(value = "标准Id") + private String standardId; + @TableField(exist = false) private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java index cba60628..9e14c5b5 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java @@ -1,11 +1,28 @@ package com.jero.modules.activiti.process.esRevisionAdvice.listener; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.jero.modules.activiti.process.common.enums.StandardStateEnum; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService; +import com.jero.modules.laws.common.constant.FieldCommon; +import com.jero.modules.laws.common.service.ILawsCommonService; +import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService; +import com.jero.modules.tag.enums.TableNameEnum; import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.ExecutionListener; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +import static com.jero.modules.laws.common.constant.FieldCommon.MAIN_DRAFT_USER; /** * @author: Mzaxd @@ -17,91 +34,59 @@ public class ProcessESRevisionEndListener implements ExecutionListener { @Resource private EnterpriseStandardPlanService espService; -// @Resource -// private EsRevisionService esRevisionService; -// -// @Resource -// private EnterpriseStandardReviewMeetingRecordService rmrService; -// -// @Resource -// private EnterpriseStandardRmrEvaluateDetailService rmrDetailService; -// -// @Resource -// private ILawsCommonService lawsCommonService; -// -// @Resource -// private IBusProcessModelHisService busProcessModelHisService; + @Resource + private EsRevisionService esRevisionService; + @Resource + private EsRevisionAdviceService esAdviceService; + @Resource + private ILawsCommonService lawsCommonService; @Override public void notify(DelegateExecution delegateExecution) { // 获取流程实例Id String processInstanceId = delegateExecution.getProcessInstanceId(); // 根据流程Id获取业务数据 -// LambdaQueryWrapper revisionWrapper = new LambdaQueryWrapper<>(); -// revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); -// // 获取企标相关数据 -// ProcessEsRevision data = esRevisionService.getOne(revisionWrapper); -// Map variables = JSON.parseObject(data.getBusinessJson(), Map.class); -// String inspectContentJson = data.getInspectContentJson(); -// List> inspectContentList; -// if (StrUtil.isNotBlank(inspectContentJson)) { -// inspectContentList = -// JSON.parseObject(inspectContentJson, new TypeReference>>() {}); -// variables.put(FieldCommon.CHECK_LIST, inspectContentList); -// } -// // 将标准号进行拆分后填充字段 -// String standardNumber = (String) variables.get(FieldCommon.STANDARD_NUMBER); -// if (StringUtils.isNotBlank(standardNumber)) { -// Map map = EnterpriseStandardUtil.splitStandardNumber(standardNumber); -// variables.putAll(map); -// // 如果没有主起草人,则需要填充主起草人 -// } -// // 主起草人 -// String mainDraftUser = (String) variables.get(FieldCommon.MAIN_DRAFTING_USER); -// if (StringUtils.isBlank(mainDraftUser)) { -// variables.put(FieldCommon.MAIN_DRAFTING_USER, data.getMainDraftUser()); -// } -// // 标准状态 -// variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.RELEASE.getStateValue()); -// String tryFlag = (String) variables.get(FieldCommon.TRY_FLAG); -// if (tryFlag != null) { -// if (tryFlag.equals(YesOrNoEnum.YES.getValue())) { -// variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.TRIAL_OPERATION.getStateValue()); -// } -// } -// variables.put(FieldCommon.RELEASE_DATE, data.getReleaseDate()); -// variables.put(FieldCommon.IMPLEMENTATION_DATE, data.getImplementDate()); -// variables.put(FieldCommon.MAIN_DRAFTING_UNIT_RESPONSIBLE_PERSON, data.getApprovalUser()); -// variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue()); -// variables.put(FieldCommon.AUTH_DEPT, data.getAuthDept()); -// String standardId = IdWorker.getIdStr(); -// variables.put(FieldCommon.ID, standardId); -// // minio上传在线编辑文件 -// String onEditFile = data.getOnEditFile(); -// if (StringUtils.isNotBlank(onEditFile)) { -// String fileId = busProcessModelHisService.saveProcessFileToOss(onEditFile); -// variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, fileId); -// } -// // 发布企标 -// lawsCommonService.commonAdd(variables); -// String espId = data.getEspId(); -// EnterpriseStandardPlan esp = espService.getById(espId); -// // 保存评审会记录 -// EnterpriseStandardReviewMeetingRecord esRmr = new EnterpriseStandardReviewMeetingRecord(); -// esRmr.setStandardId(standardId); -// esRmr.setPlanId(esp.getId()); -// esRmr.setReviewDate(data.getReviewDate()); -// esRmr.setReviewUser(data.getReviewUser()); -// rmrService.save(esRmr); -// // 保存评审会评审结果 -// List reviewMeetingDetailVOS = data.parseReviewMeetingDetails(); -// List rmrEvaluateDetails = -// BeanCopyUtils.copyBeanList(reviewMeetingDetailVOS, EnterpriseStandardRmrEvaluateDetail.class); -// rmrEvaluateDetails.forEach(r -> r.setReviewMeetingId(esRmr.getId())); -// rmrDetailService.saveBatch(rmrEvaluateDetails); -// // 更新企标计划状态 -// espService.updateById(esp); + LambdaQueryWrapper revisionWrapper = new LambdaQueryWrapper<>(); + revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); + // 获取企标相关数据 + ProcessEsRevision data = esRevisionService.getOne(revisionWrapper); + // 将数据转换为Map + Map variables = transMap(data); + // 发布企标 + String esId = lawsCommonService.commonAdd(variables); + // 所有意见设置标准Id + LambdaQueryWrapper adviceWrapper = new LambdaQueryWrapper<>(); + adviceWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId); + List list = esAdviceService.list(adviceWrapper); + if (!list.isEmpty()) { + list.forEach(item -> item.setStandardId(esId)); + } + // 更新企标计划状态 + String espId = data.getEspId(); + EnterpriseStandardPlan esp = espService.getById(espId); + espService.updateById(esp); + } + + private Map transMap(ProcessEsRevision data) { + Map variables; + // 转换 创建 ObjectMapper 实例并设置命名策略 + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); + // 将对象转换为 Map + variables = objectMapper.convertValue(data, Map.class); + variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue()); + // 主起草人 + String mainDraftUser = (String) variables.get(MAIN_DRAFT_USER); + variables.put(FieldCommon.MAIN_DRAFTING_USER, mainDraftUser); + // 标准状态 + variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.CURRENTLY_EFFECTIVE.getStateValue()); + String standardId = IdWorker.getIdStr(); + variables.put(FieldCommon.ID, standardId); + String onEditFile = data.getOnEditFile(); + // 发布稿 + variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile); + return variables; } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java index a0e73fdb..e08441c2 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java @@ -1,22 +1,18 @@ package com.jero.modules.activiti.process.esRevisionAdvice.service.impl; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.api.SendMessageAPI; import com.jero.common.api.dto.message.SendMessageDTO; import com.jero.common.api.vo.ResultCommon; -import com.jero.common.aspect.TranslationAspect; 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.ProcessApprovalRecord; -import com.jero.modules.activiti.enums.ProcessStatusEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum; 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.esRevisionAdvice.entity.EsRevisionAdvice; -import com.jero.modules.activiti.process.esRevisionAdvice.entity.HandleAdviceEnum; import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision; import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO; import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionMapper; @@ -27,15 +23,13 @@ import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO; import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; 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.laws.common.constant.FieldCommon; +import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon; import com.jero.modules.laws.enterprise.entity.ESPProjectStatus; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService; -import com.jero.modules.laws.system.service.ILawsContactManageService; import com.jero.modules.sys.utils.UserUtils; -import com.jero.modules.system.service.ISysUserDepartService; -import com.jero.modules.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; @@ -48,7 +42,6 @@ import java.util.*; import java.util.stream.Collectors; import static com.jero.modules.activiti.common.ActivitiCommon.MAIN_INSTANCE_ID; -import static com.jero.modules.activiti.common.ActivitiCommon.PASS; import static com.jero.modules.activiti.process.esRevisionAdvice.common.RevisionTaskNodeIdConstant.*; /** @@ -87,25 +80,7 @@ public class EsRevisionServiceImpl extends ServiceImpl processInfoVO) { @@ -193,35 +168,24 @@ public class EsRevisionServiceImpl extends ServiceImpl> map = adviceList.stream().collect(Collectors.groupingBy(EsRevisionAdvice::getBatchNum)); + // 获取轮数最大的轮数 + Integer maxNum = this.calculateAdviceBatchNum(adviceList); + adviceList = map.get(maxNum); + } } // 获取当前流程 - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); - String processDefinitionId = processInstance.getProcessDefinitionId(); String xmlNodeId = record.getNodeId(); // 设置流程信息 switch (xmlNodeId) { case CONFIRM_ADVISE: - // 判断是否开启征求意见子流程 设置流程变量 -// boolean adviceFlag = !data.getAdviceFlag().equals(YesOrNoEnum.NO.getValue()); -// if (adviceFlag) { -// List adviceUserList = Arrays.asList(data.getAdviceUsers().split(",")); -// taskService.setVariable(taskId, "adviceUserList", adviceUserList); -// taskService.setVariable(taskId, "open", true); -// // 保存流程数据 -// saveOrUpdate(data); -// userMap.put("mainDraftCollectUser", mainDraftUser); -// userMap.put("contactUser", data.getContactUser()); -// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap); -// } else { -// taskService.setVariable(taskId, "open", false); -// } - break; case ADVICE: - - case ADVICE_COLLECT: - case SET_STANDARD_NUMBER: - + break; + case ADVICE_COLLECT: + processVo.setAdviceList(adviceList); } // 设置流程变量等相关信息 processVo.setProcessInfo(data); @@ -255,30 +219,42 @@ public class EsRevisionServiceImpl extends ServiceImpl userMap = new HashMap<>(); + LambdaQueryWrapper detailQueryWrapper = new LambdaQueryWrapper<>(); + detailQueryWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId); + List dbAdviceList = adviceService.list(detailQueryWrapper); + // 筛选出最新一轮 + Integer maxBatchNum = this.calculateAdviceBatchNum(dbAdviceList); switch (xmlNodeId) { case CONFIRM_ADVISE: // 判断是否开启征求意见子流程 设置流程变量 boolean adviceFlag = !data.getAdviceFlag().equals(YesOrNoEnum.NO.getValue()); if (adviceFlag) { List adviceUserList = Arrays.asList(data.getAdviceUsers().split(",")); - taskService.setVariable(taskId, "adviceUserList", adviceUserList); - taskService.setVariable(taskId, "open", true); + taskService.setVariable(taskId, ADVICE_USER_LIST, adviceUserList); + taskService.setVariable(taskId, OPEN, true); // 保存流程数据 saveOrUpdate(data); -// userMap.put("mainDraftCollectUser", mainDraftUser); -// userMap.put("contactUser", data.getContactUser()); - processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap); + userMap.put(ADVICE_USER_LIST, data.getAdviceUsers()); + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); } else { - taskService.setVariable(taskId, "open", false); + taskService.setVariable(taskId, OPEN, false); } break; case ADVICE: - + // 保存意见数据 + adviceList.forEach(advice -> advice.setProcessInstanceId(processInstanceId)); + adviceList.forEach(advice -> advice.setBatchNum(maxBatchNum)); + adviceService.saveBatch(adviceList); case ADVICE_COLLECT: - + // 保存数据 + adviceService.updateBatchById(adviceList); + // 给主起草人发消息 + String mainDraftUser = (String) taskService.getVariable(taskId, FieldCommon.MAIN_DRAFT_USER); + this.sendMessageToMainDraftUser(mainDraftUser, processInstanceId, maxBatchNum); case SET_STANDARD_NUMBER: + // 保存数据 + updateById(data); } - runtimeService.setVariable(processInstanceId, PASS, true); // 审批节点 actFlowCommonService.completeTask(taskId, curUserId); // 更新审批表为完成,填充数据 @@ -289,56 +265,20 @@ public class EsRevisionServiceImpl extends ServiceImpl advices = revision.getAdvices(); - Map> adviceMap = advices.stream() - .collect(Collectors.groupingBy(EsRevisionAdvice::getCreateUserId)); - // 按照Map的Key遍历 - for (String userId : adviceMap.keySet()) { - List adviceList = adviceMap.get(userId); - // 只有未被采纳和部分采纳才发消息 - if (adviceList.stream().allMatch(advice -> HandleAdviceEnum.AGREE.getValue().equals(advice.getHandleAdvice()))) { - continue; - } - SendMessageDTO sendMessageDTO = new SendMessageDTO(); -// sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.ES_REVISION_ADVICE); - sendMessageDTO.setToUserId(userId); - Map sendMap = new HashMap<>(); - sendMap.put("prcNum", processAll.getPrcNum()); - sendMap.put("prcName", processAll.getPrcName()); - StringBuilder msg = new StringBuilder(); - for (EsRevisionAdvice advice : adviceList) { - // 采纳的不发消息 - if (HandleAdviceEnum.AGREE.getValue().equals(advice.getHandleAdvice())) { - continue; - } - msg.append(advice.getClauseNum()).append(" ").append(advice.getClauseName()); - if (HandleAdviceEnum.DISAGREE.getValue().equals(advice.getHandleAdvice())) { - msg.append(" 未被采纳,"); - } else { - msg.append(" 被部分采纳,"); - } - msg.append("理由为:").append(advice.getReason()).append(";"); - } - // 去除最后一个分号 - if (StrUtil.isNotBlank(msg)) { - msg.deleteCharAt(msg.length() - 1); - } - sendMap.put("msg", msg.toString()); - sendMessageDTO.setMap(sendMap); -// sendMessageAPI.sendMessage(sendMessageDTO); - } + private Integer calculateAdviceBatchNum(List adviceList) { + return adviceList.stream().mapToInt(EsRevisionAdvice::getBatchNum).max().orElse(0); } - -// @Override - public void updateAllPlanDate() { - // 从流程主表找到所有企标制修订流程 - List processAlls = processAllService.list(new LambdaQueryWrapper() -// .eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue()) - .ne(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue())); -// this.updatePlanDateByProcessInstanceId(processAlls); + private void sendMessageToMainDraftUser(String mainDraftUser, String processInstanceId, Integer maxBatchNum) { + ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId); + SendMessageDTO sendMessageDTO = new SendMessageDTO(); + sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.ES_REVISION_ADVICE); + sendMessageDTO.setToUserId(mainDraftUser); + Map sendMap = new HashMap<>(); + sendMap.put("prcNum", processAll.getPrcNum()); + sendMap.put("batchNum", maxBatchNum.toString()); + sendMessageDTO.setMap(sendMap); + sendMessageAPI.sendMessage(sendMessageDTO); } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/MessageTemplateCodeCommon.java b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/MessageTemplateCodeCommon.java index a1230b6b..7dfedc4d 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/MessageTemplateCodeCommon.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/MessageTemplateCodeCommon.java @@ -14,6 +14,7 @@ public class MessageTemplateCodeCommon { public static final String URGING = "urging"; // 催办 public static final String REPLACE_STANDARD_NEW = "replace_standard_new"; // 当前标准引用的标准有新版本标准 public static final String IMPLEMENTATION_DATE_NEW_STANDARD = "implementation_date_new_standard"; // 代替标准到实施日期 + public static final String ES_REVISION_ADVICE = "es_revision_advice"; // 代替标准到实施日期 }