diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java index b7d54618..a9351cac 100644 --- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java +++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BLApplicantAfter.java @@ -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 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"); diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary10After.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary10After.java index de4b3219..7e1f91a5 100644 --- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary10After.java +++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary10After.java @@ -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 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 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 zhrUserIdList = Arrays.stream(zhrUserId.split(",")).filter(StringUtils::isNotBlank).collect(Collectors.toList()); + // 对旧数据做兼容,如果流程定义版本低于13则是旧数据,批准节点是单人处理,之后的版本是多人处理 + if (processDefinition.getVersion() <= 13) { + // 如果存在 批准 节点的数据,taskId为空。 不用添加,否则需要添加。 + QueryWrapper 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 busProcessHistoryList = bphService.list(bphQueryWrap); - if (CollectionUtils.isEmpty(busProcessHistoryList)) { - List 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 busProcessHistoryList = bphService.list(bphQueryWrap); + if (CollectionUtils.isEmpty(busProcessHistoryList)) { + List 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 bphList = new ArrayList<>(); + int orderNum = bphService.getMaxOrderNum(delegateTask.getProcessInstanceId(),BussLibraryNodeKeyEnum.BUSS_LIBRARY10.getValue()); + String pzPBphId = UUID.randomUUID().toString(); + for (String userId : zhrUserIdList) { + QueryWrapper 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 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"); diff --git a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary11After.java b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary11After.java index ed3eeb4d..1545b144 100644 --- a/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary11After.java +++ b/src/main/java/com/ydw/bat/wkflow/listener/bussLibrary/BussLibrary11After.java @@ -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 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 queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(BusProcessNew::getTaskId,delegateTask.getId()); + List 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 historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(delegateTask.getProcessInstanceId()) + .taskDefinitionKey(delegateTask.getTaskDefinitionKey()) + .unfinished() + .list(); + List unFinishedTaskIdList = historicTaskInstanceList.stream() + .map(HistoricTaskInstance::getId) + .filter(taskId -> !Objects.equals(taskId, delegateTask.getId())) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(unFinishedTaskIdList)) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(BusProcessNew::getPId, delegateTask.getProcessInstanceId()); + wrapper.in(BusProcessNew::getTaskId, unFinishedTaskIdList); + List busProcessNewList = busBean.list(wrapper); + for (BusProcessNew busProcessNew : busProcessNewList) { + webServiceOAService.deleteOAByMandatory(busProcessNew.getId(), busProcessNew.getUserId()); + } + } + if(StringUtils.isNotBlank(object.getString("xdUserId"))) { // 驳回节点数据 BusProcessNew busProcessNew = new BusProcessNew();