fix: 企标制修订-技术标准批准节点改为多人处理节点

This commit is contained in:
wxyclub
2024-04-26 14:22:29 +08:00
parent adfb662fcf
commit 090beef0b1
3 changed files with 191 additions and 40 deletions
@@ -26,6 +26,7 @@ import org.apache.tomcat.util.digester.ArrayStack;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* 发起企标制修订流程后
@@ -369,15 +370,34 @@ public class BLApplicantAfter implements TaskListener{
// 批准
String zhrUserId = json.getString("zhrUserId");
BusProcessHistory pzBph = new BusProcessHistory();
pzBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzBph.setUserId(zhrUserId);
pzBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzBph.setOrderNum(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getOrderNum());
pzBph.setIsSub("2");
pzBph.setIsMany("2");
bphList.add(pzBph);
List<String> zhrUserIdList = Arrays.stream(zhrUserId.split(",")).filter(StringUtils::isNotBlank).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(qcUserIdList)) {
// 批准节点父节点信息
BusProcessHistory pzPBph = new BusProcessHistory();
String pzPBphId = UUID.randomUUID().toString();
pzPBph.setId(pzPBphId);
pzPBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzPBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzPBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzPBph.setOrderNum(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getOrderNum());
pzPBph.setIsSub("2");
pzPBph.setIsMany("1");
bphList.add(pzPBph);
for (String eachZhrUserId : zhrUserIdList) {
// 批准子节点信息
BusProcessHistory pzBph = new BusProcessHistory();
pzBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzBph.setUserId(eachZhrUserId);
pzBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzBph.setOrderNum(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getOrderNum());
pzBph.setIsSub("2");
pzBph.setIsMany("1");
pzBph.setManyPId(pzPBphId);
bphList.add(pzBph);
}
}
// 培训
String pxUserId = json.getString("pxUserId");
@@ -1,7 +1,6 @@
package com.ydw.bat.wkflow.listener.bussLibrary;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessHistory;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessName;
@@ -15,13 +14,18 @@ import com.ydw.bat.wkflow.util.SpringContextUtil;
import com.ydw.bat.wkflow.util.enums.BussLibraryNodeKeyEnum;
import com.ydw.bat.wkflow.util.enums.FlowTypeEnum;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* 专委会副主任/起草单位中心主任审定后
@@ -29,6 +33,11 @@ import java.util.List;
public class BussLibrary10After implements TaskListener{
@Override
public void notify(DelegateTask delegateTask) {
RepositoryService repositoryService = SpringContextUtil.getBean(RepositoryService.class);
// 获取当前流程的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(delegateTask.getProcessDefinitionId())
.singleResult();
IDatasService datasService = SpringContextUtil.getBean(IDatasService.class);
IBusProcessNewService busBean = SpringContextUtil.getBean(IBusProcessNewService.class);
IBusProcessNameService busProcessNameService = SpringContextUtil.getBean(IBusProcessNameService.class);
@@ -70,10 +79,16 @@ public class BussLibrary10After implements TaskListener{
if(StringUtils.isNotBlank(approvalOpinion)){
if ("0".equalsIgnoreCase(approvalOpinion)) {
if(StringUtils.isNotBlank(object.getString("zhrUserId"))){
delegateTask.setVariable("zhrUserId",object.getString("zhrUserId"));
nextUserList.add(object.getString("zhrUserId"));
String zhrUserId = object.getString("zhrUserId");
if(StringUtils.isNotBlank(zhrUserId)){
List<String> zhrUserIdList = Arrays.stream(zhrUserId.split(",")).filter(StringUtils::isNotBlank).collect(Collectors.toList());
// 对旧数据做兼容,如果流程定义版本低于13则是旧数据,批准节点是单人处理,之后的版本是多人处理
if (processDefinition.getVersion() <= 13) {
delegateTask.setVariable("zhrUserId",zhrUserIdList.get(0));
} else {
delegateTask.setVariable("zhrUserId",zhrUserIdList);
}
nextUserList.addAll(zhrUserIdList);
// BussUtils.approvalFunc2(delegateTask, object, prcName, nextUserList);
BussUtils.approvalFunc3(delegateTask, object, prcName, nextUserList);
@@ -104,43 +119,90 @@ public class BussLibrary10After implements TaskListener{
}else {
throw new ActivitiException("1#2 提交OR驳回参数不存在");
}
this.addBusProcessHistory(object,delegateTask);
this.addBusProcessHistory(object,delegateTask, processDefinition);
}
private String verifyObj(String str){
return (str == null || str.equals("")) ? "" : str;
}
public void addBusProcessHistory(JSONObject json,DelegateTask delegateTask) {
public void addBusProcessHistory(JSONObject json,DelegateTask delegateTask, ProcessDefinition processDefinition) {
IBusProcessHistoryService bphService = SpringContextUtil.getBean(IBusProcessHistoryService.class);
Integer fzrFlag = (Integer) delegateTask.getVariable("fzrFlag");
if (fzrFlag == 0) {
String zhrUserId = json.getString("zhrUserId");
// 如果存在 批准 节点的数据,taskId为空。 不用添加,否则需要添加。
QueryWrapper<BusProcessHistory> bphQueryWrap = new QueryWrapper<>();
bphQueryWrap.lambda().eq(BusProcessHistory::getActiProcInstId, delegateTask.getProcessInstanceId());
bphQueryWrap.lambda().eq(BusProcessHistory::getUserId, zhrUserId);
bphQueryWrap.lambda().eq(BusProcessHistory::getTaskKey, BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
bphQueryWrap.lambda().isNull(BusProcessHistory::getTaskId);
List<String> zhrUserIdList = Arrays.stream(zhrUserId.split(",")).filter(StringUtils::isNotBlank).collect(Collectors.toList());
// 对旧数据做兼容,如果流程定义版本低于13则是旧数据,批准节点是单人处理,之后的版本是多人处理
if (processDefinition.getVersion() <= 13) {
// 如果存在 批准 节点的数据,taskId为空。 不用添加,否则需要添加。
QueryWrapper<BusProcessHistory> bphQueryWrap = new QueryWrapper<>();
bphQueryWrap.lambda().eq(BusProcessHistory::getActiProcInstId, delegateTask.getProcessInstanceId());
bphQueryWrap.lambda().eq(BusProcessHistory::getUserId, zhrUserId);
bphQueryWrap.lambda().eq(BusProcessHistory::getTaskKey, BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
bphQueryWrap.lambda().isNull(BusProcessHistory::getTaskId);
List<BusProcessHistory> busProcessHistoryList = bphService.list(bphQueryWrap);
if (CollectionUtils.isEmpty(busProcessHistoryList)) {
List<BusProcessHistory> bphList = new ArrayList<>();
// 批准
BusProcessHistory pzBph = new BusProcessHistory();
pzBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzBph.setUserId(zhrUserId);
pzBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzBph.setIsSub("2");
pzBph.setIsMany("2");
int orderNum = bphService.getMaxOrderNum(delegateTask.getProcessInstanceId(), BussLibraryNodeKeyEnum.BUSS_LIBRARY10.getValue());
pzBph.setOrderNum(orderNum + 1);
bphList.add(pzBph);
List<BusProcessHistory> busProcessHistoryList = bphService.list(bphQueryWrap);
if (CollectionUtils.isEmpty(busProcessHistoryList)) {
List<BusProcessHistory> bphList = new ArrayList<>();
// 批准
BusProcessHistory pzBph = new BusProcessHistory();
pzBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzBph.setUserId(zhrUserId);
pzBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzBph.setIsSub("2");
pzBph.setIsMany("2");
int orderNum = bphService.getMaxOrderNum(delegateTask.getProcessInstanceId(), BussLibraryNodeKeyEnum.BUSS_LIBRARY10.getValue());
pzBph.setOrderNum(orderNum + 1);
bphList.add(pzBph);
bphService.insertBatch(bphList);
bphService.updateOrderNum(delegateTask.getProcessInstanceId(), orderNum + 1, bphList.size());
bphService.insertBatch(bphList);
bphService.updateOrderNum(delegateTask.getProcessInstanceId(), orderNum + 1, bphList.size());
}
} else {
if (CollectionUtils.isNotEmpty(zhrUserIdList)) {
List<BusProcessHistory> bphList = new ArrayList<>();
int orderNum = bphService.getMaxOrderNum(delegateTask.getProcessInstanceId(),BussLibraryNodeKeyEnum.BUSS_LIBRARY10.getValue());
String pzPBphId = UUID.randomUUID().toString();
for (String userId : zhrUserIdList) {
QueryWrapper<BusProcessHistory> bphQueryWrap = new QueryWrapper<>();
bphQueryWrap.lambda().eq(BusProcessHistory::getActiProcInstId,delegateTask.getProcessInstanceId());
bphQueryWrap.lambda().eq(BusProcessHistory::getUserId,userId);
bphQueryWrap.lambda().eq(BusProcessHistory::getTaskKey, BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
bphQueryWrap.lambda().isNull(BusProcessHistory::getTaskId);
List<BusProcessHistory> busProcessHistoryList = bphService.list(bphQueryWrap);
if (CollectionUtils.isEmpty(busProcessHistoryList)) {
BusProcessHistory pzBph = new BusProcessHistory();
pzBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzBph.setUserId(userId);
pzBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzBph.setOrderNum(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getOrderNum());
pzBph.setIsSub("2");
pzBph.setIsMany("1");
pzBph.setManyPId(pzPBphId);
pzBph.setOrderNum(orderNum + 1);
bphList.add(pzBph);
}
}
if (CollectionUtils.isNotEmpty(bphList)) {
BusProcessHistory pzPBph = new BusProcessHistory();
pzPBph.setId(pzPBphId);
pzPBph.setActiProcInstId(delegateTask.getProcessInstanceId());
pzPBph.setTaskKey(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getValue());
pzPBph.setFlowType(FlowTypeEnum.QBZXD_JSBZ.getValue());
pzPBph.setOrderNum(BussLibraryNodeKeyEnum.BUSS_LIBRARY11.getOrderNum());
pzPBph.setIsSub("2");
pzPBph.setIsMany("1");
pzPBph.setOrderNum(orderNum + 1);
bphList.add(pzPBph);
bphService.insertBatch(bphList);
bphService.updateOrderNum(delegateTask.getProcessInstanceId(),orderNum + 1,bphList.size());
}
}
}
} else if (fzrFlag == 1) {
String cxdUserId = (String) delegateTask.getVariable("cxdUserId");
@@ -11,17 +11,22 @@ import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessHistoryService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNameService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNewService;
import com.ydw.bat.wkflow.business_main.datas.service.IDatasService;
import com.ydw.bat.wkflow.business_oa.webService.service.WebServiceOAService;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import com.ydw.bat.wkflow.util.enums.BussLibraryNodeKeyEnum;
import com.ydw.bat.wkflow.util.enums.FlowTypeEnum;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.HistoryService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.history.HistoricTaskInstance;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 专委会主任/总院院长或主管副院长批准后
@@ -32,6 +37,7 @@ public class BussLibrary11After implements TaskListener{
IDatasService datasService = SpringContextUtil.getBean(IDatasService.class);
IBusProcessNewService busBean = SpringContextUtil.getBean(IBusProcessNewService.class);
IBusProcessNameService busProcessNameService = SpringContextUtil.getBean(IBusProcessNameService.class);
WebServiceOAService webServiceOAService = SpringContextUtil.getBean(WebServiceOAService.class);
QueryWrapper<Datas> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ACTI_TASK_ID", delegateTask.getId());
@@ -75,13 +81,76 @@ public class BussLibrary11After implements TaskListener{
delegateTask.setVariable("pxUserId",object.getString("pxUserId"));
nextUserList.add(object.getString("pxUserId"));
// BussUtils.approvalFunc2(delegateTask, object, prcName, nextUserList);
BussUtils.approvalFunc3(delegateTask, object, prcName, nextUserList);
// 存储当前节点意见
LambdaQueryWrapper<BusProcessNew> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(BusProcessNew::getTaskId,delegateTask.getId());
List<BusProcessNew> list = busBean.list(queryWrapper1);
if (list.isEmpty()) {
throw new ActivitiException("流程实例不存在");
}
// 当前节点
BusProcessNew busProcessNew = list.get(0);
busProcessNew.setCommitText(object.getString("commentText"));
busProcessNew.setTaskId(delegateTask.getId());
busProcessNew.setTaskInfo(delegateTask.getName());
busBean.saveOrUpdate(busProcessNew);
// 下一个节点
try {
Integer nrOfCompletedInstances = delegateTask.getVariable("nrOfCompletedInstances", Integer.class);
if (nrOfCompletedInstances == 0) {
for (String nextUser : nextUserList) {
BusProcessNew busProcessNewNext = new BusProcessNew();
busProcessNewNext.setMsgType("clause");
busProcessNewNext.setPId(delegateTask.getProcessInstanceId());
busProcessNewNext.setMesg(object.toJSONString());
busProcessNewNext.setFinishFlag("0");
busProcessNewNext.setUserId(nextUser);
busProcessNewNext.setPrcName(prcName);
busBean.save(busProcessNewNext);
}
}
} catch (NullPointerException e) {
// 对旧数据做兼容,旧流程是单人处理节点没有 nrOfCompletedInstances
for (String nextUser : nextUserList) {
BusProcessNew busProcessNewNext = new BusProcessNew();
busProcessNewNext.setMsgType("clause");
busProcessNewNext.setPId(delegateTask.getProcessInstanceId());
busProcessNewNext.setMesg(object.toJSONString());
busProcessNewNext.setFinishFlag("0");
busProcessNewNext.setUserId(nextUser);
busProcessNewNext.setPrcName(prcName);
busBean.save(busProcessNewNext);
}
}
delegateTask.setVariable("zrFlag", 0);
}else {
throw new ActivitiException("1#2主起草人用户参数不存在,请配置相关用户");
}
} else {
HistoryService historyService = SpringContextUtil.getBean(HistoryService.class);
// 改为多人处理节点后需要驳回需要删除未完成人员的待办OA
List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(delegateTask.getProcessInstanceId())
.taskDefinitionKey(delegateTask.getTaskDefinitionKey())
.unfinished()
.list();
List<String> unFinishedTaskIdList = historicTaskInstanceList.stream()
.map(HistoricTaskInstance::getId)
.filter(taskId -> !Objects.equals(taskId, delegateTask.getId()))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(unFinishedTaskIdList)) {
LambdaQueryWrapper<BusProcessNew> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BusProcessNew::getPId, delegateTask.getProcessInstanceId());
wrapper.in(BusProcessNew::getTaskId, unFinishedTaskIdList);
List<BusProcessNew> busProcessNewList = busBean.list(wrapper);
for (BusProcessNew busProcessNew : busProcessNewList) {
webServiceOAService.deleteOAByMandatory(busProcessNew.getId(), busProcessNew.getUserId());
}
}
if(StringUtils.isNotBlank(object.getString("xdUserId"))) {
// 驳回节点数据
BusProcessNew busProcessNew = new BusProcessNew();