fix(标准解读流程): 基础性调整
This commit is contained in:
@@ -11,28 +11,8 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum ProcessTypeEnum {
|
public enum ProcessTypeEnum {
|
||||||
DEMO("测试流程", 0, "com.jero.modules.activiti.process.demo.service.ProcessDemoService", "/workCenter/StandardEntryOrChangeProcess", "/workCenter/StandardEntryOrChangeProcess"),
|
DEMO("测试流程", 0, "com.jero.modules.activiti.process.demo.service.ProcessDemoService", "/workCenter/StandardEntryOrChangeProcess", "/workCenter/StandardEntryOrChangeProcess"),
|
||||||
FB_ENTRY_CHANGE("标准法规入库/变更流程", 1, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbEntryChangeServiceImpl", "/workCenter/StandardEntryOrChangeProcess", "/workCenter/StandardEntryOrChangeProcess"),
|
STANDARD_INTERPRET("标准解读流程", 2, "com.jero.modules.activiti.process.standardinterpret.service.impl.StandardInterpretFlow", "", ""),
|
||||||
FB_STANDARD_CONSULTATION("标准征求意见流程", 2, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardConsultationServiceImpl", "/workCenter/StandardConsultationProcess", "/workCenter/StandardConsultationProcess"),
|
;
|
||||||
PROJECT_ASSESS("项目合规评估流程", 3, "com.jero.modules.activiti.process.projectassess.service.ProcessProjectAssessService", "/workCenter/ProjectComplianceEvaluationProcess", "/workCenter/ProjectComplianceEvaluationProcess"),
|
|
||||||
STANDARD_COMPLIANCE_CHECK("法规符合性排查流程", 4, "com.jero.modules.activiti.process.standardComplianceCheck.service.ProcessStandardComplianceCheckService", "/workCenter/StandardComplianceCheckProcess", "/workCenter/StandardComplianceCheckProcess"),
|
|
||||||
PROJECT_STANDARD("法规合规评估流程", 5, "com.jero.modules.activiti.process.projectstandard.service.ProcessProjectStandardService", "/workCenter/StandardComplianceProcess", "/workCenter/StandardComplianceProcess"),
|
|
||||||
FB_STANDARD_PURCHASE("法规采购流程", 6, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardPurchaseServiceImpl", "/workCenter/StandardProcurementProcess", "/workCenter/StandardProcurementProcess"),
|
|
||||||
ES_INIT_CHANGE("企标立项/变更计划", 7, "com.jero.modules.activiti.process.esInitChange.service.impl.ProcessEsInitChangeServiceImpl", "/workCenter/enterpriseStandardInitChange/planApprovalChangeFlow", "/workCenter/enterpriseStandardInitChange"),
|
|
||||||
ES_ANNUAL_REPORT("年度制修订计划审批流程(各部门主动上报)", 8, "com.jero.modules.activiti.process.esAbolish.service.impl.ProcessEsAbolishServiceImpl", "/workCenter/annualRevisionPlanActivelyReport/revisionPlanActivelyReportFlow", "/workCenter/annualRevisionPlanActivelyReport"),
|
|
||||||
ES_ANNUAL_INIT("年度制修订计划审批流程(标准化发起)", 9, "com.jero.modules.activiti.process.esAnnualReport.service.impl.ProcessEsAnnualReportServiceImpl", "/workCenter/annualRevisionPlanStandardizationInit/revisionPlanStandardizationInitFlow", "/workCenter/annualRevisionPlanStandardizationInit"),
|
|
||||||
ES_REVISION("企标制修订流程(草案编写/征求意见/报批)", 10, "com.jero.modules.activiti.process.esRevision.service.impl.EsRevisionServiceImpl", "/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow", "/workCenter/enterpriseStandardRevision"),
|
|
||||||
ES_CHANGE("企标更改流程", 11, "com.jero.modules.activiti.process.esChange.service.impl.ProcessEsChangeServiceImpl", "/workCenter/enterpriseStandardChange/enterpriseStandardChangeFlow", "/workCenter/enterpriseStandardChange/enterpriseStandardChangeFlow"),
|
|
||||||
ES_RECHECK("企标复审流程", 12, "com.jero.modules.activiti.process.esRecheck.service.impl.ProcessEsRecheckServiceImpl", "/workCenter/enterpriseStandardRecheck/enterpriseStandardRecheckFlow", "/workCenter/enterpriseStandardRecheck"),
|
|
||||||
ES_ABOLISH("企标废止流程", 13, "com.jero.modules.activiti.process.esAbolish.service.impl.ProcessEsAbolishServiceImpl", "/workCenter/enterpriseStandardAnnul/enterpriseStandardAnnulFlow", "/workCenter/enterpriseStandardAnnul"),
|
|
||||||
ES_ARCHIVE("企标封存流程", 14, "com.jero.modules.activiti.process.esArchive.service.impl.ProcessEsArchiveServiceImpl", "/workCenter/enterpriseStandardSealSave/enterpriseStandardSealSaveFlow", "/workCenter/enterpriseStandardSealSave"),
|
|
||||||
ES_ENABLE("已封存企标启用流程", 15, "com.jero.modules.activiti.process.esEnable.service.impl.ProcessEsEnableServiceImpl", "/workCenter/enterpriseStandardStartUse/enterpriseStandardStartUseFlow", "/workCenter/enterpriseStandardStartUse"),
|
|
||||||
ES_INSPECT_PLAN("企标稽查计划", 16, "com.jero.modules.activiti.process.esinspectplan.service.impl.EsInspectPlanFlow", "/workCenter/EnterpriseStandardInspectionPlan", "/workCenter/EnterpriseStandardInspectionPlan"),
|
|
||||||
ES_INSPECT("企标稽查流程", 17, "com.jero.modules.activiti.process.esinspect.service.impl.EsInspectFlow", "/workCenter/EnterpriseStandardInspectionProcess", "/workCenter/EnterpriseStandardInspectionProcess"),
|
|
||||||
ES_INSPECT_DELAY_APPLY("稽查延期申请流程", 18, "com.jero.modules.activiti.process.esinspectdelayapply.service.impl.EsInspectDelayApplyFlow", "/workCenter/InspectionExtensionRequestProcess", "/workCenter/InspectionExtensionRequestProcess"),
|
|
||||||
ES_INSPECT_REPORT("企标稽查整改", 19, "com.jero.modules.activiti.process.esinspectrectify.service.impl.EsInspectRectifyFlow", "/workCenter/EnterpriseStandardInspectionRectification", "/workCenter/EnterpriseStandardInspectionRectification"),
|
|
||||||
PERMISSION_APPLY_PROCESS("权限申请流程", 20, "com.jero.modules.activiti.process.espermissionapply.service.impl.EsPermissionApplyFlow", "/workCenter/PermissionApplicationProcess", "/workCenter/PermissionApplicationProcess"),
|
|
||||||
STANDARD_DECLARE("标准宣贯流程", 21, "com.jero.modules.activiti.process.esdeclare.service.impl.EsDeclareFlow", "/workCenter/StandardPromotionProcess", "/noMobile"),
|
|
||||||
MEETING_MANAGE("会后管理流程", 22, "com.jero.modules.activiti.process.meetingmanage.service.impl.MeetingManageFlow", "/workCenter/PostMeetingManageProcess", "/noMobile");
|
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
private final Integer value;
|
private final Integer value;
|
||||||
|
|||||||
+373
@@ -0,0 +1,373 @@
|
|||||||
|
package com.jero.modules.activiti.process.aspect;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.jero.common.constant.enums.LanguageEnum;
|
||||||
|
import com.jero.common.exception.JeroBootException;
|
||||||
|
import com.jero.common.system.vo.LoginUser;
|
||||||
|
import com.jero.common.util.MessageUtils;
|
||||||
|
import com.jero.common.util.SnowflakeUtils;
|
||||||
|
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.enums.VariableTypeEnum;
|
||||||
|
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||||
|
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
|
||||||
|
import com.jero.modules.activiti.service.ProcessAllService;
|
||||||
|
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||||
|
import com.jero.modules.activiti.service.ProcessNodeService;
|
||||||
|
import com.jero.modules.activiti.util.SpringContextUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.activiti.bpmn.model.Process;
|
||||||
|
import org.activiti.bpmn.model.UserTask;
|
||||||
|
import org.activiti.engine.HistoryService;
|
||||||
|
import org.activiti.engine.RepositoryService;
|
||||||
|
import org.activiti.engine.RuntimeService;
|
||||||
|
import org.activiti.engine.TaskService;
|
||||||
|
import org.activiti.engine.history.HistoricProcessInstance;
|
||||||
|
import org.activiti.engine.task.Task;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.shiro.SecurityUtils;
|
||||||
|
import org.aspectj.lang.JoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.AfterReturning;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Before;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.core.annotation.Order;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: 流程aop
|
||||||
|
* @Description:
|
||||||
|
* @Author: yjz
|
||||||
|
* @Date: 2023-12-07 15:45
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
@Transactional(rollbackFor = RuntimeException.class)
|
||||||
|
public class ProcessAspect {
|
||||||
|
@Resource
|
||||||
|
private TaskService taskService;
|
||||||
|
@Resource
|
||||||
|
private HistoryService historyService;
|
||||||
|
@Resource
|
||||||
|
private RepositoryService repositoryService;
|
||||||
|
@Resource
|
||||||
|
private ProcessApprovalRecordService processApprovalRecordService;
|
||||||
|
@Resource
|
||||||
|
private ProcessDraftService processDraftService;
|
||||||
|
@Resource
|
||||||
|
private RuntimeService runtimeService;
|
||||||
|
@Resource
|
||||||
|
private ProcessAllService processAllService;
|
||||||
|
@Resource
|
||||||
|
private ProcessNodeService processNodeService;
|
||||||
|
private static final String PROCESS_ALL = "processAll";
|
||||||
|
private static final String SAVE_BY_DRAFT = "2";
|
||||||
|
/**
|
||||||
|
* 强制撤回
|
||||||
|
*/
|
||||||
|
private static final String REVOCATION = "3";
|
||||||
|
|
||||||
|
|
||||||
|
// 流程发起
|
||||||
|
@Pointcut("execution(public * com.jero.modules.activiti.process..*Controller.flowStart(..))")
|
||||||
|
public void processServiceFlowStart() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流程保存
|
||||||
|
@Pointcut("execution(public * com.jero.modules.activiti.process..*Controller.flowSave(..))")
|
||||||
|
public void processServiceFlowSave() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流程审批
|
||||||
|
@Pointcut("execution(public * com.jero.modules.activiti.process..*Controller.flowApproval(..))")
|
||||||
|
public void processServiceFlowApproval() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流程转办
|
||||||
|
@Pointcut("execution(public * com.jero.modules.activiti.process..*Controller.flowTransfer(..))")
|
||||||
|
public void processServiceFlowTransfer() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流程驳回
|
||||||
|
@Pointcut("execution(public * com.jero.modules.activiti.process..*Controller.flowReject(..))")
|
||||||
|
public void processServiceFlowReject() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before("processServiceFlowApproval() || processServiceFlowReject()")
|
||||||
|
public void doBefore(JoinPoint jp) {
|
||||||
|
log.info("==========流程合法性校验前置方法开始==========");
|
||||||
|
if (!Objects.isNull(jp.getArgs())) {
|
||||||
|
Map<String, Objects> map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class);
|
||||||
|
Object object = map.get(PROCESS_ALL);
|
||||||
|
ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class);
|
||||||
|
if (checkTaskExistence(processAll.getTaskId())){
|
||||||
|
if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())){
|
||||||
|
throw new JeroBootException("任务不存在!");
|
||||||
|
}else {
|
||||||
|
throw new JeroBootException("The task does not exist!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
if (!getTaskAssignee(processAll.getTaskId()).equals(loginUser.getId())){
|
||||||
|
if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())){
|
||||||
|
throw new JeroBootException("非当前节点处理人!");
|
||||||
|
}else {
|
||||||
|
throw new JeroBootException("Not the current node processor!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("==========流程合法性校验前置方法结束==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before("processServiceFlowReject()")
|
||||||
|
public void doBeforeCountersignReject(JoinPoint jp){
|
||||||
|
log.info("==========流程会签节点驳回一票否决前置方法开始==========");
|
||||||
|
if (!Objects.isNull(jp.getArgs())) {
|
||||||
|
Map<String, Objects> map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class);
|
||||||
|
Object object = map.get(PROCESS_ALL);
|
||||||
|
ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class);
|
||||||
|
|
||||||
|
Object objectMap = map.get("map");
|
||||||
|
Map<String, Object> stringObjectMap = JSON.parseObject(JSON.toJSONString(objectMap), Map.class);
|
||||||
|
|
||||||
|
if ((stringObjectMap.containsKey("pass") && !(boolean) stringObjectMap.get("pass")) && isMultiTask(processAll.getTaskId())){
|
||||||
|
// 所有会签人数
|
||||||
|
Integer all = (Integer) taskService.getVariable(processAll.getTaskId(), "nrOfInstances");
|
||||||
|
taskService.setVariable(processAll.getTaskId(), "nrOfCompletedInstances", all);
|
||||||
|
// 其他会签人员审批信息,更新状态为未处理
|
||||||
|
processApprovalRecordService.update(
|
||||||
|
new LambdaUpdateWrapper<ProcessApprovalRecord>()
|
||||||
|
.eq(ProcessApprovalRecord::getProcessInstanceId, processAll.getProcessInstanceId())
|
||||||
|
.eq(ProcessApprovalRecord::getNodeId, processAll.getNodeId())
|
||||||
|
.isNull(ProcessApprovalRecord::getEndTime)
|
||||||
|
.ne(ProcessApprovalRecord::getTaskId, processAll.getTaskId())
|
||||||
|
.set(ProcessApprovalRecord::getCommitText, CommitFlagEnum.UNDISPOSED.getName())
|
||||||
|
.set(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.SUSPEND.getValue()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("==========流程会签节点驳回一票否决前置方法结束==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterReturning("processServiceFlowReject()")
|
||||||
|
@Order(1)
|
||||||
|
public void doAfter(JoinPoint jp) {
|
||||||
|
log.info("==========流程驳回,若驳回到的节点之前经过转办,则驳回到转办人手里后置方法开始==========");
|
||||||
|
if (!Objects.isNull(jp.getArgs())) {
|
||||||
|
Map<String, Objects> map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class);
|
||||||
|
Object object = map.get(PROCESS_ALL);
|
||||||
|
ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class);
|
||||||
|
|
||||||
|
Object objectMap = map.get("map");
|
||||||
|
Map<String, Object> stringObjectMap = JSON.parseObject(JSON.toJSONString(objectMap), Map.class);
|
||||||
|
// 特殊节点排除
|
||||||
|
if ((stringObjectMap.containsKey("pass") && !(boolean) stringObjectMap.get("pass"))){
|
||||||
|
// 驳回的节点
|
||||||
|
List<ProcessApprovalRecord> processApprovalRecordList = processApprovalRecordService.list(
|
||||||
|
new LambdaQueryWrapper<ProcessApprovalRecord>()
|
||||||
|
.eq(ProcessApprovalRecord::getProcessInstanceId, processAll.getProcessInstanceId())
|
||||||
|
.orderByDesc(ProcessApprovalRecord::getCreateTime));
|
||||||
|
if (!processApprovalRecordList.isEmpty()){
|
||||||
|
ProcessApprovalRecord processApprovalRecord = processApprovalRecordList.get(0);
|
||||||
|
processApprovalRecordList.remove(0);
|
||||||
|
Optional<ProcessApprovalRecord> optional = processApprovalRecordList.stream().filter(v ->
|
||||||
|
v.getTaskName().equals(processApprovalRecord.getTaskName())
|
||||||
|
&& v.getNodeId().equals(processApprovalRecord.getNodeId())).findFirst();
|
||||||
|
optional.ifPresent(v -> {
|
||||||
|
// 是否转办过
|
||||||
|
if (StringUtils.isNotBlank(v.getTransferBy())){
|
||||||
|
// 转办给转办人
|
||||||
|
taskService.setAssignee(processApprovalRecord.getTaskId(), v.getUserId());
|
||||||
|
// 更新流程审批记录表
|
||||||
|
processApprovalRecordService.update(
|
||||||
|
new LambdaUpdateWrapper<ProcessApprovalRecord>()
|
||||||
|
.eq(ProcessApprovalRecord::getTaskId, processApprovalRecord.getTaskId())
|
||||||
|
.set(ProcessApprovalRecord::getUserId, v.getUserId())
|
||||||
|
.set(ProcessApprovalRecord::getOriginUserId, v.getUserId()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("==========流程驳回,若驳回到的节点之前经过转办,则驳回到转办人手里后置方法结束==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterReturning("processServiceFlowSave() || processServiceFlowStart()")
|
||||||
|
public void doAfterFlowSave(JoinPoint jp) {
|
||||||
|
log.info("==========流程保存到草稿后置方法开始==========");
|
||||||
|
if (!Objects.isNull(jp.getArgs())) {
|
||||||
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
Map<String, Objects> map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class);
|
||||||
|
Object processApprovalRecordObject = map.get("processApprovalRecord");
|
||||||
|
String infoJsonStr = String.valueOf(map.get("infoJsonStr"));
|
||||||
|
String saveSource = String.valueOf(map.get("saveSource"));
|
||||||
|
Object processAllObject = map.get(PROCESS_ALL);
|
||||||
|
if (!Objects.isNull(processApprovalRecordObject) && !Objects.isNull(processAllObject)){
|
||||||
|
ProcessApprovalRecord processApprovalRecord = JSON.parseObject(JSON.toJSONString(processApprovalRecordObject), ProcessApprovalRecord.class);
|
||||||
|
ProcessAll processAll = JSON.parseObject(JSON.toJSONString(processAllObject), ProcessAll.class);
|
||||||
|
if (StringUtils.isBlank(processAll.getNodeId()) || SAVE_BY_DRAFT.equals(saveSource)){
|
||||||
|
ProcessDraft processDraft = new ProcessDraft();
|
||||||
|
setProperty(loginUser, infoJsonStr, processApprovalRecord, processAll, processDraft);
|
||||||
|
// 删除旧草稿
|
||||||
|
processDraftService.remove(new LambdaQueryWrapper<ProcessDraft>()
|
||||||
|
.eq(ProcessDraft::getProjectId, processAll.getProjectId())
|
||||||
|
.eq(ProcessDraft::getUserId, loginUser.getId()));
|
||||||
|
// 保存新草稿
|
||||||
|
processDraftService.save(processDraft);
|
||||||
|
|
||||||
|
// 保存新草稿(强制撤回用)
|
||||||
|
processDraft.setId(String.valueOf(SnowflakeUtils.snowflake()));
|
||||||
|
processDraft.setSaveSource(REVOCATION);
|
||||||
|
processDraft.setInfoJsonStr(processDraft.getInfoJsonStr().replaceFirst("\\{", "{\"revocation\": true,"));
|
||||||
|
processDraftService.save(processDraft);
|
||||||
|
|
||||||
|
if (jp.getSignature().getName().equals("flowStart")){
|
||||||
|
// 发起后删除草稿
|
||||||
|
processDraftService.remove(new LambdaQueryWrapper<ProcessDraft>()
|
||||||
|
.eq(ProcessDraft::getProjectId, processAll.getProjectId())
|
||||||
|
.eq(ProcessDraft::getUserId, loginUser.getId())
|
||||||
|
.and(qw -> qw.ne(ProcessDraft::getSaveSource, REVOCATION)
|
||||||
|
.or().isNull(ProcessDraft::getSaveSource)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("==========流程保存到草稿后置方法结束==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterReturning("processServiceFlowStart() || processServiceFlowApproval() || processServiceFlowReject()")
|
||||||
|
public void doAfterRemoveDraft(JoinPoint jp) {
|
||||||
|
log.info("==========流程发起、审批、驳回。删除草稿后置方法开始==========");
|
||||||
|
if (!Objects.isNull(jp.getArgs())) {
|
||||||
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
Map<String, Objects> map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class);
|
||||||
|
Object object = map.get(PROCESS_ALL);
|
||||||
|
if (!Objects.isNull(object)){
|
||||||
|
// 发起、审批、驳回
|
||||||
|
ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class);
|
||||||
|
// 删除草稿
|
||||||
|
processDraftService.remove(new LambdaQueryWrapper<ProcessDraft>()
|
||||||
|
.eq(ProcessDraft::getProjectId, processAll.getProjectId())
|
||||||
|
.eq(ProcessDraft::getUserId, loginUser.getId())
|
||||||
|
.and(qw -> qw.ne(ProcessDraft::getSaveSource, REVOCATION)
|
||||||
|
.or().isNull(ProcessDraft::getSaveSource)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("==========流程发起、审批、驳回。删除草稿后置方法结束==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@AfterReturning("processServiceFlowTransfer()")
|
||||||
|
public void doAfterFlowTransfer(JoinPoint jp) {
|
||||||
|
log.info("==========流程转办后置方法开始==========");
|
||||||
|
if (!Objects.isNull(jp.getArgs())) {
|
||||||
|
String taskId = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), String.class);
|
||||||
|
String toUserId = JSON.parseObject(JSON.toJSONString(jp.getArgs()[1]), String.class);
|
||||||
|
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
|
||||||
|
String processInstanceId = processApprovalRecord.getProcessInstanceId();
|
||||||
|
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
|
||||||
|
TaskService taskService = SpringContextUtil.getBean(TaskService.class);
|
||||||
|
Task task = taskService.createTaskQuery().taskId(processApprovalRecord.getTaskId()).singleResult();
|
||||||
|
// 查询节点信息
|
||||||
|
ProcessNode processNode = processNodeService.getOne(
|
||||||
|
new LambdaQueryWrapper<ProcessNode>()
|
||||||
|
.eq(ProcessNode::getProcessDefinitionId, processAll.getProcessDefinitionId())
|
||||||
|
.eq(ProcessNode::getXmlNodeId, processApprovalRecord.getNodeId()));
|
||||||
|
if (!Objects.isNull(processNode) && VariableTypeEnum.STRING.getName().equals(processNode.getVariableType())){
|
||||||
|
runtimeService.setVariable(task.getExecutionId(), processNode.getVariableName(), toUserId);
|
||||||
|
}
|
||||||
|
// 稽查延期申请流程 稽查联络人评估 节点特殊处理
|
||||||
|
// if (ProcessTypeEnum.ES_INSPECT_DELAY_APPLY.getValue().equals(processAll.getPrcType())
|
||||||
|
// && EsInspectDelayApplyCommon.PROCESS_NODE_3.equals(processApprovalRecord.getNodeId())){
|
||||||
|
// LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
// IProcessEsInspectDelayApplyService processEsInspectDelayApplyService = SpringContextUtil.getBean(IProcessEsInspectDelayApplyService.class);
|
||||||
|
// processEsInspectDelayApplyService.update(
|
||||||
|
// new LambdaUpdateWrapper<ProcessEsInspectDelayApply>()
|
||||||
|
// .eq(ProcessEsInspectDelayApply::getProjectId, processAll.getProjectId())
|
||||||
|
// .eq(ProcessEsInspectDelayApply::getLiaisons, loginUser.getId())
|
||||||
|
// .set(ProcessEsInspectDelayApply::getLiaisons, toUserId));
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
log.info("==========流程转办后置方法结束==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setProperty(LoginUser loginUser, String infoJsonStr, ProcessApprovalRecord processApprovalRecord, ProcessAll processAll, ProcessDraft processDraft) {
|
||||||
|
// 属性拷贝
|
||||||
|
BeanUtils.copyProperties(processAll, processDraft);
|
||||||
|
processDraft.setCreateBy("");
|
||||||
|
processDraft.setId("");
|
||||||
|
processDraft.setUpdateBy("");
|
||||||
|
Date date = new Date();
|
||||||
|
if (Objects.isNull(processAll.getCreateTime())){
|
||||||
|
processDraft.setCreateTime(date);
|
||||||
|
}else {
|
||||||
|
processDraft.setCreateTime(processAll.getCreateTime());
|
||||||
|
}
|
||||||
|
processDraft.setUpdateBy("");
|
||||||
|
processDraft.setUpdateTime(date);
|
||||||
|
// 保存草稿表
|
||||||
|
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(processApprovalRecord.getCommitFile())){
|
||||||
|
processDraft.setHandleFile(processApprovalRecord.getCommitFile());
|
||||||
|
}
|
||||||
|
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(processApprovalRecord.getCommitText())){
|
||||||
|
processDraft.setHandleText(processApprovalRecord.getCommitText());
|
||||||
|
}
|
||||||
|
if (!Objects.isNull(processAll.getDueTime())){
|
||||||
|
processDraft.setProcessDueDate(processAll.getDueTime());
|
||||||
|
}
|
||||||
|
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(processAll.getPrcMes())){
|
||||||
|
processDraft.setProcessDescription(processAll.getPrcMes());
|
||||||
|
}
|
||||||
|
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(infoJsonStr)){
|
||||||
|
processDraft.setInfoJsonStr(infoJsonStr);
|
||||||
|
}
|
||||||
|
processDraft.setUserId(loginUser.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否会签节点
|
||||||
|
* @param taskId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isMultiTask(String taskId){
|
||||||
|
// 根据流程实例id查询
|
||||||
|
Task task = taskService.createTaskQuery()
|
||||||
|
.taskId(taskId)
|
||||||
|
.singleResult();
|
||||||
|
// 获取流程实例对象
|
||||||
|
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||||
|
.processInstanceId(task.getProcessInstanceId())
|
||||||
|
.singleResult();
|
||||||
|
// 获取流程定义对象,主要用于判断流程任务结点是否为会签结点
|
||||||
|
Process process = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId())
|
||||||
|
.getProcessById(historicProcessInstance.getProcessDefinitionKey());
|
||||||
|
// 获取当前任务结点
|
||||||
|
Optional<UserTask> userTask = process.getFlowElements().stream()
|
||||||
|
.filter(flowElement -> task.getTaskDefinitionKey().equals(flowElement.getId()))
|
||||||
|
.map(UserTask.class::cast)
|
||||||
|
.findAny();
|
||||||
|
return userTask.isPresent() && !Objects.isNull(userTask.get().getLoopCharacteristics());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkTaskExistence(String taskId) {
|
||||||
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||||
|
return Objects.isNull(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTaskAssignee(String taskId) {
|
||||||
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||||
|
return task.getAssignee();
|
||||||
|
}
|
||||||
|
}
|
||||||
+76
@@ -1,22 +1,29 @@
|
|||||||
package com.jero.modules.activiti.process.common.utility;
|
package com.jero.modules.activiti.process.common.utility;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
import com.jero.common.exception.JeroBootException;
|
import com.jero.common.exception.JeroBootException;
|
||||||
import com.jero.common.system.vo.LoginUser;
|
import com.jero.common.system.vo.LoginUser;
|
||||||
|
import com.jero.common.util.SnowflakeUtils;
|
||||||
import com.jero.modules.activiti.entity.ProcessAll;
|
import com.jero.modules.activiti.entity.ProcessAll;
|
||||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||||
import com.jero.modules.activiti.enums.FinishFlagEnum;
|
import com.jero.modules.activiti.enums.FinishFlagEnum;
|
||||||
|
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
|
||||||
|
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
|
||||||
|
import com.jero.modules.activiti.process.standardinterpret.vo.FlowApproveInfo;
|
||||||
import com.jero.modules.activiti.service.ProcessAllService;
|
import com.jero.modules.activiti.service.ProcessAllService;
|
||||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,6 +40,7 @@ public class FlowUtility {
|
|||||||
|
|
||||||
private final ProcessAllService processAllService;
|
private final ProcessAllService processAllService;
|
||||||
private final ProcessApprovalRecordService processApprovalRecordService;
|
private final ProcessApprovalRecordService processApprovalRecordService;
|
||||||
|
private final ProcessDraftService processDraftService;
|
||||||
|
|
||||||
public void flowApprovalUpdate(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord){
|
public void flowApprovalUpdate(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord){
|
||||||
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
@@ -51,6 +59,74 @@ public class FlowUtility {
|
|||||||
.set(ProcessApprovalRecord::getEndTime, new Date()));
|
.set(ProcessApprovalRecord::getEndTime, new Date()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void flowSaveUpdate(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord){
|
||||||
|
// 更新流程信息
|
||||||
|
processAllService.update(new LambdaUpdateWrapper<ProcessAll>()
|
||||||
|
.eq(ProcessAll::getId, processAll.getId())
|
||||||
|
.set(ProcessAll::getPrcName, processAll.getPrcName())
|
||||||
|
.set(ProcessAll::getPrcMes, processAll.getPrcMes())
|
||||||
|
.set(ProcessAll::getDueTime, processAll.getDueTime()));
|
||||||
|
// 更新流程审批信息
|
||||||
|
processApprovalRecordService.update(new LambdaUpdateWrapper<ProcessApprovalRecord>()
|
||||||
|
.eq(ProcessApprovalRecord::getTaskId, processAll.getTaskId())
|
||||||
|
.set(ProcessApprovalRecord::getCommitText, processApprovalRecord.getCommitText())
|
||||||
|
.set(ProcessApprovalRecord::getCommitFile, processApprovalRecord.getCommitFile()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public FlowApproveInfo queryFlowApproveInfo(String projectId, String taskId){
|
||||||
|
FlowApproveInfo flowApproveInfo = new FlowApproveInfo();
|
||||||
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
|
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
|
||||||
|
.eq(ProcessAll::getProjectId, projectId)
|
||||||
|
.orderByDesc(ProcessAll::getCreateTime), false);
|
||||||
|
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
|
||||||
|
// 是否存在草稿
|
||||||
|
List<ProcessDraft> processDraftList = processDraftService.list(new LambdaQueryWrapper<ProcessDraft>()
|
||||||
|
.eq(ProcessDraft::getProjectId, projectId)
|
||||||
|
.eq(ProcessDraft::getUserId, loginUser.getId())
|
||||||
|
.and(qw -> qw.ne(ProcessDraft::getSaveSource, "3")
|
||||||
|
.or().isNull(ProcessDraft::getSaveSource)));
|
||||||
|
if (!processDraftList.isEmpty()){
|
||||||
|
String id = "";
|
||||||
|
if(Objects.isNull(processAll)){
|
||||||
|
processAll = new ProcessAll();
|
||||||
|
id = String.valueOf(SnowflakeUtils.snowflake());
|
||||||
|
}else {
|
||||||
|
id = processAll.getId();
|
||||||
|
}
|
||||||
|
// 存在草稿
|
||||||
|
ProcessDraft processDraft = processDraftList.get(0);
|
||||||
|
// 属性拷贝
|
||||||
|
BeanUtils.copyProperties(processDraft, processAll);
|
||||||
|
processAll.setId(id);
|
||||||
|
if (StringUtils.isNotBlank(processDraft.getHandleFile())){
|
||||||
|
processApprovalRecord.setCommitFile(processDraft.getHandleFile());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(processDraft.getHandleText())){
|
||||||
|
processApprovalRecord.setCommitText(processDraft.getHandleText());
|
||||||
|
}
|
||||||
|
if (!Objects.isNull(processDraft.getProcessDueDate())){
|
||||||
|
processAll.setDueTime(processDraft.getProcessDueDate());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(processDraft.getProcessDescription())){
|
||||||
|
processAll.setPrcMes(processDraft.getProcessDescription());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(processDraft.getInfoJsonStr())){
|
||||||
|
flowApproveInfo.setInfoJsonStr(processDraft.getInfoJsonStr());
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
// 不存在草稿
|
||||||
|
processApprovalRecord = processApprovalRecordService.getOne(new LambdaQueryWrapper<ProcessApprovalRecord>()
|
||||||
|
.eq(ProcessApprovalRecord::getUserId, loginUser.getId())
|
||||||
|
.eq(ProcessApprovalRecord::getTaskId, taskId)
|
||||||
|
, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
flowApproveInfo.setProcessAll(processAll);
|
||||||
|
flowApproveInfo.setProcessApprovalRecord(processApprovalRecord);
|
||||||
|
return flowApproveInfo;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将Map中值为List类型的元素转换为以逗号分隔的字符串。
|
* 将Map中值为List类型的元素转换为以逗号分隔的字符串。
|
||||||
* 这样做的目的是为了简化Map的表示,尤其是当List中包含多个元素时。
|
* 这样做的目的是为了简化Map的表示,尤其是当List中包含多个元素时。
|
||||||
|
|||||||
+38
@@ -62,6 +62,19 @@ public class StandardInterpretFlowController {
|
|||||||
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
|
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准解读流程-流程保存
|
||||||
|
* @param standardInterpretFlowDTO 标准解读流程对象
|
||||||
|
* @return 结果对象
|
||||||
|
*/
|
||||||
|
@AutoLog(value = "标准解读流程-流程保存")
|
||||||
|
@ApiOperation(value="标准解读流程-流程保存", notes="标准解读流程-流程保存")
|
||||||
|
@PostMapping(value = "/flowSave")
|
||||||
|
public Result<T> flowSave(@RequestBody StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
||||||
|
standardInterpretFlowService.flowSave(standardInterpretFlowDTO);
|
||||||
|
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标准解读流程-流程审批
|
* 标准解读流程-流程审批
|
||||||
* @param standardInterpretFlowDTO 标准解读流程对象
|
* @param standardInterpretFlowDTO 标准解读流程对象
|
||||||
@@ -89,6 +102,31 @@ public class StandardInterpretFlowController {
|
|||||||
return Result.OK(standardInterpretFlowService.queryDetail(projectId, taskId));
|
return Result.OK(standardInterpretFlowService.queryDetail(projectId, taskId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准解读流程-驳回
|
||||||
|
* @param standardInterpretFlowDTO 标准解读流程对象
|
||||||
|
* @return 结果对象
|
||||||
|
*/
|
||||||
|
@AutoLog(value = "标准解读流程-驳回")
|
||||||
|
@ApiOperation(value="标准解读流程-驳回", notes="标准解读流程-驳回")
|
||||||
|
@PostMapping(value = "/flowReject")
|
||||||
|
public Result<T> flowReject(@RequestBody StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
||||||
|
standardInterpretFlowService.flowApproval(standardInterpretFlowDTO);
|
||||||
|
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标准解读流程-流程转办
|
||||||
|
* @return 结果对象
|
||||||
|
*/
|
||||||
|
@AutoLog(value = "标准解读流程-流程转办")
|
||||||
|
@ApiOperation(value="标准解读流程-流程转办", notes="标准解读流程-流程转办")
|
||||||
|
@GetMapping(value = "/flowTransfer")
|
||||||
|
public Result<T> flowTransfer(@ApiParam("任务id") String taskId, @ApiParam("用户id") String userId) {
|
||||||
|
standardInterpretFlowService.flowTransfer(taskId, userId);
|
||||||
|
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标准解读流程-生成项目id
|
* 标准解读流程-生成项目id
|
||||||
* @return 项目id
|
* @return 项目id
|
||||||
|
|||||||
+5
-2
@@ -50,9 +50,12 @@ public class ProcessStandardInterpretClauseSublist extends BaseEntity {
|
|||||||
/**法规注释*/
|
/**法规注释*/
|
||||||
@ApiModelProperty(value = "法规注释")
|
@ApiModelProperty(value = "法规注释")
|
||||||
private String regulatoryNotes;
|
private String regulatoryNotes;
|
||||||
/**关键词*/
|
/**涉及系统/部件)*/
|
||||||
@ApiModelProperty(value = "关键词")
|
@ApiModelProperty(value = "涉及系统/部件)")
|
||||||
private String keywords;
|
private String keywords;
|
||||||
|
/**涉及系统/部件)*/
|
||||||
|
@ApiModelProperty(value = "关键控制器)")
|
||||||
|
private String keyController;
|
||||||
/**适用零部件*/
|
/**适用零部件*/
|
||||||
@ApiModelProperty(value = "适用零部件")
|
@ApiModelProperty(value = "适用零部件")
|
||||||
private String applicableComponents;
|
private String applicableComponents;
|
||||||
|
|||||||
+14
@@ -40,6 +40,20 @@ public interface StandardInterpretFlowService {
|
|||||||
*/
|
*/
|
||||||
void flowApproval(StandardInterpretFlowDTO standardInterpretFlowDTO);
|
void flowApproval(StandardInterpretFlowDTO standardInterpretFlowDTO);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程保存
|
||||||
|
* @param standardInterpretFlowDTO
|
||||||
|
*/
|
||||||
|
void flowSave(StandardInterpretFlowDTO standardInterpretFlowDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程转办
|
||||||
|
* @param taskId
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
void flowTransfer(String taskId, String userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程监听
|
* 流程监听
|
||||||
* @param delegateTask
|
* @param delegateTask
|
||||||
|
|||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
package com.jero.modules.activiti.process.standardinterpret.service.impl;
|
||||||
|
|
||||||
|
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.service.ProcessAllService;
|
||||||
|
import com.jero.modules.activiti.service.WorkCenterService;
|
||||||
|
import com.jero.modules.activiti.util.SpringContextUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: EsInspectPlanFlowService
|
||||||
|
* @Description:
|
||||||
|
* @Author: yjz
|
||||||
|
* @Date: 2024-01-11 21:19
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Transactional(rollbackFor = {Exception.class, JeroBootException.class})
|
||||||
|
@Service
|
||||||
|
public class StandardInterpretFlow implements WorkCenterService {
|
||||||
|
/**
|
||||||
|
* 强制撤回
|
||||||
|
* @param processAll 流程总表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void changeToDraft(ProcessAll processAll) {
|
||||||
|
// 删除业务表数据
|
||||||
|
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
|
||||||
|
processAllService.physicalDeleteByProjectId("process_standard_interpret", processAll.getProjectId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转办
|
||||||
|
* @param processAll
|
||||||
|
* @param processApprovalRecord
|
||||||
|
* @param toUserId
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void handleTransfer(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord, String toUserId, String userId) {
|
||||||
|
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
|
||||||
|
processAllService.specialTransfer(processAll, processApprovalRecord, toUserId, userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
+151
-16
@@ -16,6 +16,7 @@ import com.jero.modules.activiti.enums.FinishFlagEnum;
|
|||||||
import com.jero.modules.activiti.enums.ProcessStatusEnum;
|
import com.jero.modules.activiti.enums.ProcessStatusEnum;
|
||||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||||
import com.jero.modules.activiti.process.common.utility.FlowUtility;
|
import com.jero.modules.activiti.process.common.utility.FlowUtility;
|
||||||
|
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
|
||||||
import com.jero.modules.activiti.process.standardinterpret.common.StandardInterpretCommon;
|
import com.jero.modules.activiti.process.standardinterpret.common.StandardInterpretCommon;
|
||||||
import com.jero.modules.activiti.process.standardinterpret.controller.ProcessStandardInterpretClauseSublistController;
|
import com.jero.modules.activiti.process.standardinterpret.controller.ProcessStandardInterpretClauseSublistController;
|
||||||
import com.jero.modules.activiti.process.standardinterpret.dto.StandardInterpretDTO;
|
import com.jero.modules.activiti.process.standardinterpret.dto.StandardInterpretDTO;
|
||||||
@@ -27,6 +28,7 @@ import com.jero.modules.activiti.process.standardinterpret.service.ProcessStanda
|
|||||||
import com.jero.modules.activiti.process.standardinterpret.service.ProcessStandardInterpretClauseSublistService;
|
import com.jero.modules.activiti.process.standardinterpret.service.ProcessStandardInterpretClauseSublistService;
|
||||||
import com.jero.modules.activiti.process.standardinterpret.service.ProcessStandardInterpretService;
|
import com.jero.modules.activiti.process.standardinterpret.service.ProcessStandardInterpretService;
|
||||||
import com.jero.modules.activiti.process.standardinterpret.service.StandardInterpretFlowService;
|
import com.jero.modules.activiti.process.standardinterpret.service.StandardInterpretFlowService;
|
||||||
|
import com.jero.modules.activiti.process.standardinterpret.vo.FlowApproveInfo;
|
||||||
import com.jero.modules.activiti.process.standardinterpret.vo.StandardInterpretFlowVO;
|
import com.jero.modules.activiti.process.standardinterpret.vo.StandardInterpretFlowVO;
|
||||||
import com.jero.modules.activiti.service.ProcessAllService;
|
import com.jero.modules.activiti.service.ProcessAllService;
|
||||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||||
@@ -73,6 +75,7 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe
|
|||||||
private final ProcessStandardInterpretClauseSublistService processStandardInterpretClauseSublistService;
|
private final ProcessStandardInterpretClauseSublistService processStandardInterpretClauseSublistService;
|
||||||
private final ILawsDomesticStandardService lawsDomesticStandardService;
|
private final ILawsDomesticStandardService lawsDomesticStandardService;
|
||||||
private final ProcessStandardInterpretClauseSublistController processStandardInterpretClauseSublist;
|
private final ProcessStandardInterpretClauseSublistController processStandardInterpretClauseSublist;
|
||||||
|
private final IProcessHandleService processHandleService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void flowStart(StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
public void flowStart(StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
||||||
@@ -229,32 +232,150 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe
|
|||||||
log.info("发起 标准解读流程(子解读人流程)");
|
log.info("发起 标准解读流程(子解读人流程)");
|
||||||
}else if (StandardInterpretCommon.MASTER_INTERPRET_SUMMARY.equals(taskDefinitionKey)){
|
}else if (StandardInterpretCommon.MASTER_INTERPRET_SUMMARY.equals(taskDefinitionKey)){
|
||||||
// 标准主解读汇总 合并条款
|
// 标准主解读汇总 合并条款
|
||||||
|
ProcessStandardInterpret processStandardInterpret = processStandardInterpretService.getOne(
|
||||||
|
new LambdaQueryWrapper<ProcessStandardInterpret>()
|
||||||
|
.eq(ProcessStandardInterpret::getProjectId, processAlls.getProjectId()));
|
||||||
|
if (!Objects.isNull(processStandardInterpret)) {
|
||||||
|
String id = processStandardInterpret.getId();
|
||||||
|
List<ProcessStandardInterpretClause> processStandardInterpretClauseList =
|
||||||
|
processStandardInterpretClauseService.list(
|
||||||
|
new LambdaQueryWrapper<ProcessStandardInterpretClause>()
|
||||||
|
.eq(ProcessStandardInterpretClause::getStandardInterpretId, id));
|
||||||
|
if (!processStandardInterpretClauseList.isEmpty()) {
|
||||||
|
List<String> standardInterpretClauseIdList = processStandardInterpretClauseList.stream()
|
||||||
|
.map(ProcessStandardInterpretClause::getId).collect(Collectors.toList());
|
||||||
|
List<ProcessStandardInterpretClauseSublist> processStandardInterpretClauseSublistList =
|
||||||
|
processStandardInterpretClauseSublistService.list(
|
||||||
|
new LambdaQueryWrapper<ProcessStandardInterpretClauseSublist>()
|
||||||
|
.in(ProcessStandardInterpretClauseSublist::getStandardInterpretClauseId
|
||||||
|
, standardInterpretClauseIdList));
|
||||||
|
// 根据条款分组
|
||||||
|
Map<String, List<ProcessStandardInterpretClauseSublist>> listMap =
|
||||||
|
processStandardInterpretClauseSublistList.stream()
|
||||||
|
.collect(Collectors.groupingBy(ProcessStandardInterpretClauseSublist::getClauseId));
|
||||||
|
listMap.forEach((k, v) -> {
|
||||||
|
ProcessStandardInterpretClauseSublist first = v.get(0);
|
||||||
|
v.remove(0);
|
||||||
|
for (ProcessStandardInterpretClauseSublist standardInterpretClauseSublist : v) {
|
||||||
|
// 合并
|
||||||
|
first.setInterpretPersonId(first.getInterpretPersonId()
|
||||||
|
+ "," + standardInterpretClauseSublist.getInterpretPersonId());
|
||||||
|
first.setTranslation(first.getTranslation()
|
||||||
|
+ "," + standardInterpretClauseSublist.getTranslation());
|
||||||
|
first.setIsSameAsPrevVersion(first.getIsSameAsPrevVersion()
|
||||||
|
+ "," + standardInterpretClauseSublist.getIsSameAsPrevVersion());
|
||||||
|
first.setChangeDescription(first.getChangeDescription()
|
||||||
|
+ "," + standardInterpretClauseSublist.getChangeDescription());
|
||||||
|
first.setRegulatoryNotes(first.getRegulatoryNotes()
|
||||||
|
+ "," + standardInterpretClauseSublist.getRegulatoryNotes());
|
||||||
|
first.setKeywords(first.getKeywords()
|
||||||
|
+ "," + standardInterpretClauseSublist.getKeywords());
|
||||||
|
first.setKeyController(first.getKeyController()
|
||||||
|
+ "," + standardInterpretClauseSublist.getKeyController());
|
||||||
|
first.setApplicableComponents(first.getApplicableComponents()
|
||||||
|
+ "," + standardInterpretClauseSublist.getApplicableComponents());
|
||||||
|
first.setRelatedDepartment(first.getRelatedDepartment()
|
||||||
|
+ "," + standardInterpretClauseSublist.getRelatedDepartment());
|
||||||
|
first.setResponsibleModule(first.getResponsibleModule()
|
||||||
|
+ "," + standardInterpretClauseSublist.getResponsibleModule());
|
||||||
|
first.setRelatedModule(first.getRelatedModule()
|
||||||
|
+ "," + standardInterpretClauseSublist.getRelatedModule());
|
||||||
|
first.setApplications(first.getApplications()
|
||||||
|
+ "," + standardInterpretClauseSublist.getApplications());
|
||||||
|
first.setPowerType(first.getPowerType()
|
||||||
|
+ "," + standardInterpretClauseSublist.getPowerType());
|
||||||
|
first.setDomainArea(first.getDomainArea()
|
||||||
|
+ "," + standardInterpretClauseSublist.getDomainArea());
|
||||||
|
first.setConfigurationRequirements(first.getConfigurationRequirements()
|
||||||
|
+ "," + standardInterpretClauseSublist.getConfigurationRequirements());
|
||||||
|
first.setNewCerImplementDate(first.getNewCerImplementDate()
|
||||||
|
+ "," + standardInterpretClauseSublist.getNewCerImplementDate());
|
||||||
|
first.setNewCerImplementDate(first.getNewCerImplementDate()
|
||||||
|
+ "," + standardInterpretClauseSublist.getNewCerImplementDate());
|
||||||
|
first.setEnterpriseStandard(first.getEnterpriseStandard()
|
||||||
|
+ "," + standardInterpretClauseSublist.getEnterpriseStandard());
|
||||||
|
first.setTechnicalSpecificationDesignGuide(first.getTechnicalSpecificationDesignGuide()
|
||||||
|
+ "," + standardInterpretClauseSublist.getTechnicalSpecificationDesignGuide());
|
||||||
|
first.setDrawingTemplate(first.getDrawingTemplate()
|
||||||
|
+ "," + standardInterpretClauseSublist.getDrawingTemplate());
|
||||||
|
first.setTechnicalAgreementTemplate(first.getTechnicalAgreementTemplate()
|
||||||
|
+ "," + standardInterpretClauseSublist.getTechnicalAgreementTemplate());
|
||||||
|
first.setVerificationReportTemplateChecklist(first.getVerificationReportTemplateChecklist()
|
||||||
|
+ "," + standardInterpretClauseSublist.getVerificationReportTemplateChecklist());
|
||||||
|
first.setDvpTemplate(first.getDvpTemplate()
|
||||||
|
+ "," + standardInterpretClauseSublist.getDvpTemplate());
|
||||||
|
first.setDfema(first.getDfema()
|
||||||
|
+ "," + standardInterpretClauseSublist.getDfema());
|
||||||
|
first.setKeyTechnologyDecompositionTable(first.getKeyTechnologyDecompositionTable()
|
||||||
|
+ "," + standardInterpretClauseSublist.getKeyTechnologyDecompositionTable());
|
||||||
|
first.setOtherDocumentsTemplates(first.getOtherDocumentsTemplates()
|
||||||
|
+ "," + standardInterpretClauseSublist.getOtherDocumentsTemplates());
|
||||||
|
first.setP3(first.getP3()
|
||||||
|
+ "," + standardInterpretClauseSublist.getP3());
|
||||||
|
first.setP5(first.getP5()
|
||||||
|
+ "," + standardInterpretClauseSublist.getP5());
|
||||||
|
first.setRemarks(first.getRemarks()
|
||||||
|
+ "," + standardInterpretClauseSublist.getRemarks());
|
||||||
|
processStandardInterpretClauseSublistService
|
||||||
|
.removeById(standardInterpretClauseSublist.getId());
|
||||||
|
}
|
||||||
|
// 去重
|
||||||
|
distinct(first);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
log.info("标准解读流程-流程监听器 结束");
|
log.info("标准解读流程-流程监听器 结束");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void distinct(ProcessStandardInterpretClauseSublist data) {
|
||||||
|
data.setKeywords(toDistinct(data.getKeywords()));
|
||||||
|
data.setKeyController(toDistinct(data.getKeyController()));
|
||||||
|
data.setIsSameAsPrevVersion(toDistinct(data.getIsSameAsPrevVersion()));
|
||||||
|
data.setResponsibleDepartment(toDistinct(data.getResponsibleDepartment()));
|
||||||
|
data.setResponsibleModule(toDistinct(data.getResponsibleModule()));
|
||||||
|
data.setRelatedDepartment(toDistinct(data.getResponsibleDepartment()));
|
||||||
|
data.setRelatedModule(toDistinct(data.getRelatedModule()));
|
||||||
|
data.setApplications(toDistinct(data.getApplications()));
|
||||||
|
data.setPowerType(toDistinct(data.getPowerType()));
|
||||||
|
data.setDomainArea(toDistinct(data.getDomainArea()));
|
||||||
|
data.setConfigurationRequirements(toDistinct(data.getConfigurationRequirements()));
|
||||||
|
data.setNewCerImplementDate(toDistinct(data.getNewCerImplementDate()));
|
||||||
|
data.setNewProductionImplementation(toDistinct(data.getNewProductionImplementation()));
|
||||||
|
data.setEnterpriseStandard(toDistinct(data.getEnterpriseStandard()));
|
||||||
|
data.setTechnicalSpecificationDesignGuide(toDistinct(data.getTechnicalSpecificationDesignGuide()));
|
||||||
|
data.setDrawingTemplate(toDistinct(data.getDrawingTemplate()));
|
||||||
|
data.setTechnicalAgreementTemplate(toDistinct(data.getTechnicalAgreementTemplate()));
|
||||||
|
data.setVerificationReportTemplateChecklist(toDistinct(data.getVerificationReportTemplateChecklist()));
|
||||||
|
data.setDvpTemplate(toDistinct(data.getDvpTemplate()));
|
||||||
|
data.setDfema(toDistinct(data.getDfema()));
|
||||||
|
data.setKeyTechnologyDecompositionTable(toDistinct(data.getKeyTechnologyDecompositionTable()));
|
||||||
|
data.setOtherDocumentsTemplates(toDistinct(data.getOtherDocumentsTemplates()));
|
||||||
|
data.setP3(toDistinct(data.getP3()));
|
||||||
|
data.setP5(toDistinct(data.getP5()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String toDistinct(String str) {
|
||||||
|
if (StringUtils.isNotBlank(str)){
|
||||||
|
List<String> list = Arrays.asList(str.split(","));
|
||||||
|
return list.stream().distinct().collect(Collectors.joining(","));
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StandardInterpretFlowVO queryDetail(String projectId, String taskId) {
|
public StandardInterpretFlowVO queryDetail(String projectId, String taskId) {
|
||||||
StandardInterpretFlowVO standardInterpretFlowVO = new StandardInterpretFlowVO();
|
StandardInterpretFlowVO standardInterpretFlowVO = new StandardInterpretFlowVO();
|
||||||
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
|
|
||||||
// 查询流程信息
|
// 查询流程信息
|
||||||
ProcessAll processAll = processAllService.getOne(
|
FlowApproveInfo flowApproveInfo = flowUtility.queryFlowApproveInfo(projectId, taskId);
|
||||||
new LambdaQueryWrapper<ProcessAll>()
|
standardInterpretFlowVO.setProcessAll(flowApproveInfo.getProcessAll());
|
||||||
.eq(ProcessAll::getProjectId, projectId)
|
standardInterpretFlowVO.setProcessApprovalRecord(flowApproveInfo.getProcessApprovalRecord());
|
||||||
.orderByDesc(ProcessAll::getCreateTime), false);
|
|
||||||
standardInterpretFlowVO.setProcessAll(processAll);
|
|
||||||
|
|
||||||
// 查询流程审批信息
|
|
||||||
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getOne(
|
|
||||||
new LambdaQueryWrapper<ProcessApprovalRecord>()
|
|
||||||
.eq(ProcessApprovalRecord::getUserId, loginUser.getId())
|
|
||||||
.eq(ProcessApprovalRecord::getTaskId, taskId), false);
|
|
||||||
standardInterpretFlowVO.setProcessApprovalRecord(processApprovalRecord);
|
|
||||||
|
|
||||||
// 查询业务信息
|
// 查询业务信息
|
||||||
standardInterpretFlowVO.setData(queryBusinessData(processAll, processApprovalRecord));
|
StandardInterpretDTO data = queryBusinessData(flowApproveInfo.getProcessAll(),
|
||||||
|
flowApproveInfo.getProcessApprovalRecord());
|
||||||
|
standardInterpretFlowVO.setData(data);
|
||||||
return standardInterpretFlowVO;
|
return standardInterpretFlowVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,6 +444,20 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe
|
|||||||
.list();
|
.list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void flowSave(StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
||||||
|
// 处理业务数据
|
||||||
|
handleBusinessData(standardInterpretFlowDTO);
|
||||||
|
// 保存流程信息
|
||||||
|
flowUtility.flowSaveUpdate(standardInterpretFlowDTO.getProcessAll(),
|
||||||
|
standardInterpretFlowDTO.getProcessApprovalRecord());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void flowTransfer(String taskId, String userId) {
|
||||||
|
processHandleService.transfer(taskId, userId);
|
||||||
|
}
|
||||||
|
|
||||||
private void handleBusinessData(StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
private void handleBusinessData(StandardInterpretFlowDTO standardInterpretFlowDTO) {
|
||||||
// map(参数)
|
// map(参数)
|
||||||
Map<String, Object> map = standardInterpretFlowDTO.getMap();
|
Map<String, Object> map = standardInterpretFlowDTO.getMap();
|
||||||
@@ -403,7 +538,7 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe
|
|||||||
// 设置未分配数量
|
// 设置未分配数量
|
||||||
map.put(StandardInterpretCommon.UNALLOCATED_QUANTITY, unallocatedQuantity);
|
map.put(StandardInterpretCommon.UNALLOCATED_QUANTITY, unallocatedQuantity);
|
||||||
// 设置子解读人
|
// 设置子解读人
|
||||||
map.put(StandardInterpretCommon.INTERPRETING_PEOPLE, interpretPersonIdList);
|
map.put(StandardInterpretCommon.INTERPRETING_PEOPLE, new ArrayList<>(interpretPersonIdList));
|
||||||
processStandardInterpretClauseSublistService.saveBatch(processStandardInterpretClauseSublists);
|
processStandardInterpretClauseSublistService.saveBatch(processStandardInterpretClauseSublists);
|
||||||
}else {
|
}else {
|
||||||
// 不分发
|
// 不分发
|
||||||
|
|||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package com.jero.modules.activiti.process.standardinterpret.vo;
|
||||||
|
|
||||||
|
import com.jero.modules.activiti.entity.ProcessAll;
|
||||||
|
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: FlowApproveInfo
|
||||||
|
* @Description:
|
||||||
|
* @Author: yjz
|
||||||
|
* @Date: 2024-07-05 11:02
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class FlowApproveInfo {
|
||||||
|
/**流程信息*/
|
||||||
|
@ApiModelProperty(value = "流程信息")
|
||||||
|
private ProcessAll processAll;
|
||||||
|
|
||||||
|
/**流程审批信息*/
|
||||||
|
@ApiModelProperty(value = "流程审批信息")
|
||||||
|
private ProcessApprovalRecord processApprovalRecord;
|
||||||
|
|
||||||
|
/**草稿信息json字符串*/
|
||||||
|
@ApiModelProperty(value = "草稿信息json字符串")
|
||||||
|
private String infoJsonStr;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user