feat: 企标废止流程
This commit is contained in:
+13
-2
@@ -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<ProcessApprovalRecord> 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
|
||||
|
||||
+4
-12
@@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ public interface ProcessEsAbolishService extends IService<ProcessEsAbolish> {
|
||||
|
||||
void saveToDraft(ESAbolishDataVO annualInitData);
|
||||
|
||||
ProcessEsAbolish getHandleData(String taskId);
|
||||
ESAbolishDataVO getHandleData(String taskId);
|
||||
|
||||
void approvalInitChange(ESAbolishDataVO annualInitData, boolean pass);
|
||||
}
|
||||
|
||||
+204
-11
@@ -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<ProcessEsAbolishMapper, ProcessEsAbolish>
|
||||
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<String, Object> 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<String, Object> setVariables(ESAbolishFlowUserVO flowUser) {
|
||||
boolean counterSign = StrUtil.isNotBlank(flowUser.getRelatedUser());
|
||||
HashMap<String, Object> map = new HashMap<>(this.setUserVariables(flowUser));
|
||||
actFlowCommonService.putIfNotNull(map, "counterSign", counterSign);
|
||||
return map;
|
||||
}
|
||||
|
||||
public Map<String, Object> setUserVariables(ESAbolishFlowUserVO flowUser) {
|
||||
HashMap<String, Object> 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<String, Object> getUserMap(Map<String, Object> variables) {
|
||||
variables.remove("pass");
|
||||
variables.remove("counterSign");
|
||||
// 转成逗号拼接
|
||||
variables.put("relatedUserList", Optional.ofNullable((List<String>) 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<ProcessDraft> 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<ProcessDraft> 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<ProcessDraft> 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<ProcessEsAbolish> 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<ProcessNode> nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId);
|
||||
ESAbolishFlowUserVO flowUser = new ESAbolishFlowUserVO();
|
||||
Map<String, ProcessNode> 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<String, Object> userMap = new HashMap<>(this.setUserVariables(flowUserInfoVO));
|
||||
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
|
||||
Map<String, Object> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-4
@@ -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;
|
||||
|
||||
|
||||
|
||||
-2
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
+1
-2
@@ -222,9 +222,9 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
|
||||
List<ProcessEsInitChange> esInitChange = initChangeData.getDataList();
|
||||
saveOrUpdateBatch(esInitChange);
|
||||
// 先删后增
|
||||
LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>();
|
||||
if (StrUtil.isBlank(taskId)) {
|
||||
// 第一个节点点击保存没有taskId
|
||||
LambdaUpdateWrapper<ProcessDraft> 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<ProcessEsInitCha
|
||||
processDraftService.saveBatch(draftList);
|
||||
} else {
|
||||
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
|
||||
LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>();
|
||||
draftWrapper.in(ProcessDraft::getProjectId, esInitChange.stream().map(ProcessEsInitChange::getId).collect(Collectors.toList()));
|
||||
processDraftService.remove(draftWrapper);
|
||||
List<ProcessDraft> draftList = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user