feat: 制修订流程征求意见选人特殊处理
This commit is contained in:
+66
-11
@@ -1,6 +1,7 @@
|
|||||||
package com.jero.modules.activiti.service;
|
package com.jero.modules.activiti.service;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollStreamUtil;
|
import cn.hutool.core.collection.CollStreamUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.jero.common.constant.enums.YesOrNoEnum;
|
import com.jero.common.constant.enums.YesOrNoEnum;
|
||||||
@@ -8,6 +9,8 @@ import com.jero.modules.activiti.entity.ProcessModelNode;
|
|||||||
import com.jero.modules.activiti.entity.ProcessNode;
|
import com.jero.modules.activiti.entity.ProcessNode;
|
||||||
import com.jero.modules.activiti.mapper.ProcessModelNodeMapper;
|
import com.jero.modules.activiti.mapper.ProcessModelNodeMapper;
|
||||||
import com.jero.modules.activiti.mapper.ProcessNodeMapper;
|
import com.jero.modules.activiti.mapper.ProcessNodeMapper;
|
||||||
|
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||||
|
import com.jero.modules.activiti.process.esRevision.entity.RevisionTaskNodeIdConstant;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -18,13 +21,13 @@ import javax.annotation.Resource;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @author liJiaRao
|
||||||
*@author liJiaRao
|
* @date 2023-09-26 15:12
|
||||||
*@date 2023-09-26 15:12
|
*/
|
||||||
*/
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNode> {
|
public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNode> {
|
||||||
@@ -37,15 +40,15 @@ public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNo
|
|||||||
|
|
||||||
public void copyNodeFromModel(String modelId, String processDefinitionId) {
|
public void copyNodeFromModel(String modelId, String processDefinitionId) {
|
||||||
LambdaQueryWrapper<ProcessModelNode> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessModelNode> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(ProcessModelNode::getNodeType,"userTask");
|
wrapper.eq(ProcessModelNode::getNodeType, "userTask");
|
||||||
wrapper.eq(ProcessModelNode::getModelId,modelId);
|
wrapper.eq(ProcessModelNode::getModelId, modelId);
|
||||||
wrapper.isNotNull(ProcessModelNode::getSort);
|
wrapper.isNotNull(ProcessModelNode::getSort);
|
||||||
List<ProcessModelNode> processModelNodes = processModelNodeMapper.selectList(wrapper);
|
List<ProcessModelNode> processModelNodes = processModelNodeMapper.selectList(wrapper);
|
||||||
|
|
||||||
List<ProcessNode> processNodeList = new ArrayList<>();
|
List<ProcessNode> processNodeList = new ArrayList<>();
|
||||||
for (ProcessModelNode processModelNode : processModelNodes) {
|
for (ProcessModelNode processModelNode : processModelNodes) {
|
||||||
ProcessNode node = new ProcessNode();
|
ProcessNode node = new ProcessNode();
|
||||||
BeanUtils.copyProperties(processModelNode,node);
|
BeanUtils.copyProperties(processModelNode, node);
|
||||||
node.setId(null);
|
node.setId(null);
|
||||||
node.setProcessDefinitionId(processDefinitionId);
|
node.setProcessDefinitionId(processDefinitionId);
|
||||||
processNodeList.add(node);
|
processNodeList.add(node);
|
||||||
@@ -85,7 +88,7 @@ public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNo
|
|||||||
viewNodeList.forEach(viewNode -> {
|
viewNodeList.forEach(viewNode -> {
|
||||||
viewNode.setProcessDefinitionId(processDefinitionId);
|
viewNode.setProcessDefinitionId(processDefinitionId);
|
||||||
viewNode.setId(null);
|
viewNode.setId(null);
|
||||||
if (map.containsKey(viewNode.getXmlNodeId())){
|
if (map.containsKey(viewNode.getXmlNodeId())) {
|
||||||
viewNode.setNodeName(map.get(viewNode.getXmlNodeId()));
|
viewNode.setNodeName(map.get(viewNode.getXmlNodeId()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -102,15 +105,67 @@ public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNo
|
|||||||
|
|
||||||
public List<ProcessNode> getNodeList(String processDefinitionId, String processInstanceId) {
|
public List<ProcessNode> getNodeList(String processDefinitionId, String processInstanceId) {
|
||||||
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
|
wrapper.eq(ProcessNode::getProcessDefinitionId, processDefinitionId);
|
||||||
wrapper.orderByAsc(ProcessNode::getSort);
|
wrapper.orderByAsc(ProcessNode::getSort);
|
||||||
//List<ProcessNode> processNodeList = this.list(wrapper);
|
//List<ProcessNode> processNodeList = this.list(wrapper);
|
||||||
List<ProcessNode> processNodeList = processNodeMapper.selectByIdPdIdAndPiId(processDefinitionId,processInstanceId);
|
List<ProcessNode> processNodeList = processNodeMapper.selectByIdPdIdAndPiId(processDefinitionId, processInstanceId);
|
||||||
|
// 制修订流程特殊处理
|
||||||
|
if (processDefinitionId.contains(ProcessType.ES_REVISION.getProcessKey())) {
|
||||||
|
specialProcessEsRevisionPre(processNodeList);
|
||||||
|
}
|
||||||
// 可跳过节点判断
|
// 可跳过节点判断
|
||||||
processNodeList = processNodeList.stream().filter(v ->
|
processNodeList = processNodeList.stream().filter(v ->
|
||||||
YesOrNoEnum.NO.getValue().equals(v.getIsSkip())
|
YesOrNoEnum.NO.getValue().equals(v.getIsSkip())
|
||||||
|| (YesOrNoEnum.YES.getValue().equals(v.getIsSkip()) && StringUtils.isNotBlank(v.getLinkUserIds())))
|
|| (YesOrNoEnum.YES.getValue().equals(v.getIsSkip()) && StringUtils.isNotBlank(v.getLinkUserIds())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
// 制修订流程特殊处理
|
||||||
|
if (processDefinitionId.contains(ProcessType.ES_REVISION.getProcessKey())) {
|
||||||
|
specialProcessEsRevisionEnd(processNodeList);
|
||||||
|
}
|
||||||
return processNodeList;
|
return processNodeList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 前处理
|
||||||
|
* @param processNodeList
|
||||||
|
*/
|
||||||
|
private void specialProcessEsRevisionPre(List<ProcessNode> processNodeList) {
|
||||||
|
String contactUser = null;
|
||||||
|
String adviceObject = null;
|
||||||
|
for (ProcessNode processNode : processNodeList) {
|
||||||
|
if (RevisionTaskNodeIdConstant.CONTACT_USER_DISTRIBUTE.equals(processNode.getXmlNodeId())) {
|
||||||
|
contactUser = processNode.getLinkUserIds();
|
||||||
|
}
|
||||||
|
if (RevisionTaskNodeIdConstant.ADVICE.equals(processNode.getXmlNodeId())) {
|
||||||
|
adviceObject = processNode.getLinkUserIds();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(contactUser) && StrUtil.isBlank(adviceObject)) {
|
||||||
|
processNodeList.forEach(r -> {
|
||||||
|
if (RevisionTaskNodeIdConstant.ADVICE.equals(r.getXmlNodeId())) {
|
||||||
|
r.setLinkUserIds("tempUser");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后处理
|
||||||
|
* @param processNodeList
|
||||||
|
*/
|
||||||
|
private void specialProcessEsRevisionEnd(List<ProcessNode> processNodeList) {
|
||||||
|
String adviceObject = null;
|
||||||
|
for (ProcessNode processNode : processNodeList) {
|
||||||
|
if (RevisionTaskNodeIdConstant.ADVICE.equals(processNode.getXmlNodeId())) {
|
||||||
|
adviceObject = processNode.getLinkUserIds();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("tempUser".equals(adviceObject)) {
|
||||||
|
processNodeList.forEach(r -> {
|
||||||
|
if (RevisionTaskNodeIdConstant.ADVICE.equals(r.getXmlNodeId())) {
|
||||||
|
r.setLinkUserIds(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user