feat: 制修订流程征求意见选人特殊处理

This commit is contained in:
2023-12-25 17:48:55 +08:00
parent 434c8868df
commit 5c85105cb1
@@ -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);
}
});
}
}
} }