|
@@ -1,29 +1,23 @@
|
|
|
package com.platform.service.workflow.impl;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.platform.common.bean.AbstractPageResultBean;
|
|
|
-import com.platform.common.constant.CommonConstants;
|
|
|
import com.platform.common.exception.DeniedException;
|
|
|
-import com.platform.common.util.*;
|
|
|
+import com.platform.common.util.ListUtils;
|
|
|
+import com.platform.common.util.SecurityUtils;
|
|
|
+import com.platform.common.util.StringUtils;
|
|
|
import com.platform.dao.bean.MyPage;
|
|
|
import com.platform.dao.dto.workflow.WorkflowNodeDTO;
|
|
|
import com.platform.dao.dto.workflow.WorkflowTaskBomDTO;
|
|
|
import com.platform.dao.dto.workflow.WorkflowTaskRecordDTO;
|
|
|
-import com.platform.dao.entity.custom.CustomClassName;
|
|
|
-import com.platform.dao.entity.custom.CustomFormData;
|
|
|
import com.platform.dao.entity.workflow.WorkflowTask;
|
|
|
import com.platform.dao.entity.workflow.WorkflowTaskBom;
|
|
|
-import com.platform.dao.entity.workflow.WorkflowTaskRecord;
|
|
|
import com.platform.dao.enums.FlowTaskStatusEnum;
|
|
|
import com.platform.dao.enums.TaskRecordStatusEnum;
|
|
|
import com.platform.dao.enums.YesNoEnum;
|
|
|
-import com.platform.dao.mapper.custom.CustomClassNameMapper;
|
|
|
-import com.platform.dao.mapper.custom.CustomFormDataMapper;
|
|
|
import com.platform.dao.mapper.workflow.WorkflowNodeMapper;
|
|
|
import com.platform.dao.mapper.workflow.WorkflowTaskBomMapper;
|
|
|
import com.platform.dao.mapper.workflow.WorkflowTaskMapper;
|
|
|
-import com.platform.dao.mapper.workflow.WorkflowTaskRecordMapper;
|
|
|
import com.platform.dao.vo.query.workflow.WorkflowNodeVO;
|
|
|
import com.platform.dao.vo.query.workflow.WorkflowTaskBomVO;
|
|
|
import com.platform.service.base.impl.BaseServiceImpl;
|
|
@@ -37,10 +31,6 @@ import tk.mybatis.mapper.weekend.Weekend;
|
|
|
import tk.mybatis.mapper.weekend.WeekendCriteria;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.lang.reflect.InvocationTargetException;
|
|
|
-import java.lang.reflect.Method;
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -61,12 +51,6 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
private WorkflowTaskMapper workflowTaskMapper;
|
|
|
@Resource
|
|
|
private WorkflowNodeMapper workflowNodeMapper;
|
|
|
- @Resource
|
|
|
- private CustomClassNameMapper customClassNameMapper;
|
|
|
- @Resource
|
|
|
- private CustomFormDataMapper customFormDataMapper;
|
|
|
- @Resource
|
|
|
- private WorkflowTaskRecordMapper workflowTaskRecordMapper;
|
|
|
|
|
|
@Override
|
|
|
public int batchDelete(List<String> ids) {
|
|
@@ -124,7 +108,6 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
public void publishTask(String id) {
|
|
|
WorkflowTaskBom bom = mapper.selectByPrimaryKey(id);
|
|
|
WorkflowTask task = workflowTaskMapper.selectByPrimaryKey(bom.getTaskId());
|
|
|
- CustomFormData data = customFormDataMapper.selectByPrimaryKey(task.getFormDataId());
|
|
|
// 校验是否处于待发起的状态,bom.status=0 & task.status = 3、5、6
|
|
|
if (bom.getStatus().intValue() != YesNoEnum.NO.getValue()) {
|
|
|
throw new DeniedException("待办事项状态有误,请检查");
|
|
@@ -147,24 +130,14 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
if (CollectionUtils.isEmpty(nodeList)) {
|
|
|
throw new DeniedException("流程配置有误,发起人没有子节点,请检查");
|
|
|
}
|
|
|
- WorkflowTask updTask = new WorkflowTask();
|
|
|
- updTask.setId(bom.getTaskId());
|
|
|
- updTask.setFlowId(task.getFlowId());
|
|
|
- updTask.setApplyTime(LocalDateTime.now());
|
|
|
- WorkflowTaskBom updBom = new WorkflowTaskBom();
|
|
|
- updBom.setId(id);
|
|
|
- WorkflowTaskBom insertBom = generateTaskBom(nodeList,updTask,updBom,data);
|
|
|
- if(insertBom == null){
|
|
|
- throw new DeniedException("审批动态任务生成失败");
|
|
|
- }
|
|
|
- // 存入bom
|
|
|
- mapper.insert(insertBom);
|
|
|
- // 修改老节点
|
|
|
- mapper.updateByPrimaryKey(updBom);
|
|
|
- // 修改任务
|
|
|
- workflowTaskMapper.updateByPrimaryKeySelective(updTask);
|
|
|
- // 存储处理记录
|
|
|
- saveTaskRecord(TaskRecordStatusEnum.APPLY_SUCCESS.getValue(),SecurityUtils.getUserInfo().getRealName() + "发送任务",updTask.getId());
|
|
|
+ WorkflowTaskRecordDTO recordDTO = new WorkflowTaskRecordDTO();
|
|
|
+ recordDTO.setHandleStatus(TaskRecordStatusEnum.APPLY_SUCCESS.getValue());
|
|
|
+ recordDTO.setHandleRemark(SecurityUtils.getUserInfo().getRealName() + "发送任务");
|
|
|
+ recordDTO.setTaskBomId(id);
|
|
|
+ recordDTO.setTaskId(bom.getTaskId());
|
|
|
+ recordDTO.setFlowId(task.getFlowId());
|
|
|
+ BaseStrategy baseStrategy = verifyStrategyList.stream().filter(strategy -> strategy.getType().equals(recordDTO.getHandleStatus())).collect(Collectors.toList()).get(0);
|
|
|
+ baseStrategy.verify(nodeList,recordDTO);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -211,137 +184,6 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void saveTaskRecord(Integer status,String remark,String taskId) {
|
|
|
- WorkflowTaskRecord record = new WorkflowTaskRecord();
|
|
|
- record.setId(IdGeneratorUtils.getObjectId());
|
|
|
- record.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
- record.setCreatedTime(LocalDateTime.now());
|
|
|
- record.setCreatedUserName(SecurityUtils.getUserInfo().getRealName());
|
|
|
- record.setHandleStatus(status);
|
|
|
- record.setTaskId(taskId);
|
|
|
- record.setHandleRemark(remark);
|
|
|
- workflowTaskRecordMapper.insert(record);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成新bom初始方法
|
|
|
- * @param nodeList
|
|
|
- * @param updTask
|
|
|
- * @param updBom
|
|
|
- * @param data
|
|
|
- * @return
|
|
|
- */
|
|
|
- private WorkflowTaskBom generateTaskBom(List<WorkflowNodeVO> nodeList,WorkflowTask updTask,WorkflowTaskBom updBom,CustomFormData data) {
|
|
|
- WorkflowTaskBom bom = null;
|
|
|
- for (WorkflowNodeVO nodeVO : nodeList) {
|
|
|
- bom = generateTaskBom(nodeVO,updTask,updBom,data);
|
|
|
- if (bom != null) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- return bom;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 具体处理分支方法
|
|
|
- * @param node
|
|
|
- * @param updTask
|
|
|
- * @param updBom
|
|
|
- * @param data
|
|
|
- * @return
|
|
|
- */
|
|
|
- private WorkflowTaskBom generateTaskBom(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom,CustomFormData data){
|
|
|
- WorkflowTaskBom bom = null;
|
|
|
- switch (node.getType()) {
|
|
|
- case CommonConstants.CONDITION_TYPE: // 条件分支
|
|
|
- JSONObject switchJson = JSONObject.parseObject(node.getSwitchJson());
|
|
|
- int symbol = switchJson.getInteger("symbol"); // 比较符号 > = < 等
|
|
|
- BigDecimal val = BigDecimalUtil.valueNull(switchJson.getString("value")); // 比较值
|
|
|
- String fieldName = switchJson.getString("fieldName");
|
|
|
- // 获取主键ID值
|
|
|
- String primaryKey = getPrimaryKey(data.getJsonString(),fieldName);
|
|
|
- // 获取表单关联关系
|
|
|
- if(StringUtils.isBlank(node.getSwitchHandleId())){
|
|
|
- throw new DeniedException("分支条件处理class流程未配置");
|
|
|
- }
|
|
|
- CustomClassName className = customClassNameMapper.selectByPrimaryKey(node.getSwitchHandleId());
|
|
|
- Object obj = BeanUtils.getBean(className.getHandleCode());
|
|
|
- Class cla = obj.getClass();
|
|
|
- Boolean findFlag = Boolean.FALSE; // 符合分支条件
|
|
|
- try{
|
|
|
- Method method = cla.getMethod(className.getMethodCode(),String.class,BigDecimal.class,Integer.class);
|
|
|
- findFlag = (Boolean)method.invoke(obj,primaryKey,val,symbol);
|
|
|
- }catch (NoSuchMethodException e){
|
|
|
- e.printStackTrace();
|
|
|
- }catch (IllegalAccessException e2){
|
|
|
- e2.printStackTrace();
|
|
|
- }catch (InvocationTargetException e3){
|
|
|
- e3.printStackTrace();
|
|
|
- }
|
|
|
- if(findFlag){
|
|
|
- // 获取下一个节点,封装审批人
|
|
|
- int nodeSort = node.getNodeLevel();
|
|
|
- nodeSort++;
|
|
|
- WorkflowNodeDTO nextNode = new WorkflowNodeDTO();
|
|
|
- nextNode.setNodeLevel(nodeSort);
|
|
|
- nextNode.setFlowId(data.getFlowId());
|
|
|
- nextNode.setFrontParentId(node.getFrontId());
|
|
|
- List<WorkflowNodeVO> nodeList = workflowNodeMapper.selectNodeList(nextNode);
|
|
|
- bom = getBomByNode(nodeList.get(0),updTask,updBom);
|
|
|
- }
|
|
|
- // 获取分支
|
|
|
- break;
|
|
|
- case CommonConstants.VERIFY_USER_TYPE: // 审核人处理
|
|
|
- bom = getBomByNode(node,updTask,updBom);
|
|
|
- break;
|
|
|
- }
|
|
|
- return bom;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据node获取bom具体方法
|
|
|
- * @param node
|
|
|
- * @return
|
|
|
- */
|
|
|
- private WorkflowTaskBom getBomByNode(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom){
|
|
|
- WorkflowTaskBom bom = new WorkflowTaskBom();
|
|
|
- bom.setId(IdGeneratorUtils.getObjectId());
|
|
|
- bom.setTaskId(updTask.getId());
|
|
|
- bom.setStatus(YesNoEnum.NO.getValue());
|
|
|
- bom.setPersonalType(YesNoEnum.YES.getValue() + 1);
|
|
|
- bom.setCreatedUserName(node.getUserName());
|
|
|
- bom.setCreatedUserId(node.getUserId());
|
|
|
- bom.setCreatedTime(LocalDateTime.now());
|
|
|
- bom.setReadFlag(YesNoEnum.NO.getValue());
|
|
|
- bom.setReminderNum(YesNoEnum.NO.getValue());
|
|
|
- // 修改已有taskBom
|
|
|
- updBom.setStatus(YesNoEnum.YES.getValue());
|
|
|
- updBom.setHandleRemark("发起审批流程"); // 需要修正
|
|
|
- updBom.setHandleTime(LocalDateTime.now());
|
|
|
- // 修改Task
|
|
|
- updTask.setStatus(FlowTaskStatusEnum.VERIFYING.getValue()); // 修正
|
|
|
- updTask.setNodeSort(node.getNodeLevel());
|
|
|
- updTask.setFrontId(node.getFrontId());
|
|
|
- updTask.setLastTime(LocalDateTime.now());
|
|
|
- updTask.setLastUserName(SecurityUtils.getUserInfo().getRealName());
|
|
|
- updTask.setLastUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
- updTask.setCurrentUserId(node.getUserId());
|
|
|
- updTask.setCurrentUserName(node.getUserName());
|
|
|
- updTask.setRemark("待" + node.getUserName() + "处理");
|
|
|
- return bom;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检索表单数据中的主键值
|
|
|
- * @param json
|
|
|
- * @param fieldName
|
|
|
- * @return
|
|
|
- */
|
|
|
- private String getPrimaryKey(String json,String fieldName){
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(json);
|
|
|
- return jsonObject.getString(fieldName);
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public AbstractPageResultBean<WorkflowTaskBom> selectPageInfo(WorkflowTaskBomDTO record, int pageNum, int pageSize) {
|
|
|
PageHelper.startPage(pageNum, pageSize);
|