Ver código fonte

任务发起并入策略

guarantee-lsq 7 meses atrás
pai
commit
e45f15b3ee

+ 25 - 0
platform-common/src/main/java/com/platform/common/util/BigDecimalUtil.java

@@ -350,4 +350,29 @@ public class BigDecimalUtil {
         DecimalFormat decimalFormat = new DecimalFormat(format);
         return decimalFormat.format(bigDecimal);
     }
+
+    /**
+     * 比较大小
+     * @param val 基准值
+     * @param changeVal 输入值
+     * @param symbol 符号
+     * @return
+     */
+    public static boolean compareNumber(BigDecimal val, BigDecimal changeVal, int symbol) {
+        switch (symbol){
+            case 0 : // ≠
+                return changeVal.compareTo(val) != 0;
+            case 1 : // <
+                return changeVal.compareTo(val) < 0;
+            case 2: // ≤
+                return changeVal.compareTo(val) <= 0;
+            case 3 : // =
+                return changeVal.compareTo(val) == 0;
+            case 4: // ≥
+                return changeVal.compareTo(val) >= 0;
+            case 5 : // >
+                return changeVal.compareTo(val) > 0;
+        }
+        return false;
+    }
 }

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/dto/custom/CustomClassNameDTO.java

@@ -100,4 +100,5 @@ public class CustomClassNameDTO extends BaseDTO implements Serializable {
 
     private String handleCode; // 处理类编码
 
+    private Integer publicFlag; // 是否公共处理类,1 是 0 否
 }

+ 2 - 0
platform-dao/src/main/java/com/platform/dao/entity/custom/CustomClassName.java

@@ -89,4 +89,6 @@ public class CustomClassName implements Serializable {
 
     private String handleCode; // 处理类编码
 
+    private Integer publicFlag; // 是否公共处理类,1 是 0 否
+
 }

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/vo/query/custom/CustomClassNameVO.java

@@ -79,5 +79,5 @@ public class CustomClassNameVO extends BaseVO implements Serializable {
     private String handleName; // 处理类
 
     private String handleCode; // 处理类编码
-
+    private Integer publicFlag; // 是否公共处理类,1 是 0 否
 }

+ 11 - 169
platform-service/src/main/java/com/platform/service/workflow/impl/WorkflowTaskBomServiceImpl.java

@@ -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);

+ 18 - 14
platform-service/src/main/java/com/platform/service/workflow/verifyStrategy/impl/VerifyPassStrategy.java

@@ -49,7 +49,6 @@ public class VerifyPassStrategy extends AbstractBaseStrategy {
     private WorkflowTaskBomMapper workflowTaskBomMapper;
     @Resource
     private WorkflowTaskMapper workflowTaskMapper;
-    ;
 
     @Override
     public Integer getType() {
@@ -120,20 +119,26 @@ public class VerifyPassStrategy extends AbstractBaseStrategy {
                     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("");
-                    findFlag = (Boolean) method.invoke(obj, primaryKey, val, symbol);
-                } catch (NoSuchMethodException e) {
-                    e.printStackTrace();
-                } catch (IllegalAccessException e2) {
-                    e2.printStackTrace();
-                } catch (InvocationTargetException e3) {
-                    e3.printStackTrace();
+                // 分情况讨论,如果选择是自定义处理类
+                if(className.getPublicFlag() == null || className.getPublicFlag() == 0){
+                    Object obj = BeanUtils.getBean(className.getHandleCode());
+                    Class cla = obj.getClass();
+                    try {
+                        Method method = cla.getMethod("");
+                        findFlag = (Boolean) method.invoke(obj, primaryKey, val, symbol);
+                    } catch (NoSuchMethodException e) {
+                        e.printStackTrace();
+                    } catch (IllegalAccessException e2) {
+                        e2.printStackTrace();
+                    } catch (InvocationTargetException e3) {
+                        e3.printStackTrace();
+                    }
+                }else{
+                    // 公共处理类
+                    findFlag = BigDecimalUtil.compareNumber(val,BigDecimalUtil.valueNull(primaryKey),symbol);
                 }
-                if (findFlag) {
+                if(findFlag){
                     // 获取下一个节点,封装审批人
                     int nodeSort = node.getNodeLevel();
                     nodeSort++;
@@ -144,7 +149,6 @@ public class VerifyPassStrategy extends AbstractBaseStrategy {
                     List<WorkflowNodeVO> nodeList = workflowNodeMapper.selectNodeList(nextNode);
                     bom = getBomByNode(nodeList.get(0), updTask, updBom);
                 }
-                // 获取分支
                 break;
             case CommonConstants.VERIFY_USER_TYPE: // 审核人处理
                 bom = getBomByNode(node, updTask, updBom);

+ 193 - 0
platform-service/src/main/java/com/platform/service/workflow/verifyStrategy/impl/VerifyPublishStrategy.java

@@ -0,0 +1,193 @@
+package com.platform.service.workflow.verifyStrategy.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.platform.common.constant.CommonConstants;
+import com.platform.common.exception.DeniedException;
+import com.platform.common.util.*;
+import com.platform.dao.dto.workflow.WorkflowNodeDTO;
+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.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.vo.query.workflow.WorkflowNodeVO;
+import com.platform.service.workflow.verifyStrategy.AbstractBaseStrategy;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+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;
+
+/**
+ * 3 同意  4 回退 5 终止  6 撤回
+ */
+@Slf4j
+@Component
+@Service("verifyPublishStrategy")
+public class VerifyPublishStrategy extends AbstractBaseStrategy {
+    @Resource
+    private CustomFormDataMapper customFormDataMapper;
+    @Resource
+    private CustomClassNameMapper customClassNameMapper;
+    @Resource
+    private WorkflowNodeMapper workflowNodeMapper;
+    @Resource
+    private WorkflowTaskBomMapper workflowTaskBomMapper;
+    @Resource
+    private WorkflowTaskMapper workflowTaskMapper;
+
+    @Override
+    public Integer getType() {
+        return TaskRecordStatusEnum.APPLY_SUCCESS.getValue();
+    }
+
+    @Override
+    public void verify(List<WorkflowNodeVO> nodeList, WorkflowTaskRecordDTO record) {
+        WorkflowTask updTask = new WorkflowTask();
+        updTask.setId(record.getTaskId());
+        updTask.setFlowId(record.getFlowId());
+        updTask.setApplyTime(LocalDateTime.now());
+        WorkflowTaskBom updBom = new WorkflowTaskBom();
+        updBom.setId(record.getTaskBomId());
+        updBom.setHandleRemark(record.getHandleRemark());
+        // 生成taskBom
+        generateTaskBom(nodeList, updTask, updBom, customFormDataMapper.selectByPrimaryKey(record.getFormDataId()));
+        // 存储记录
+        saveTaskRecord(record);
+    }
+
+    @Override
+    public void saveTaskRecord(WorkflowTaskRecordDTO record) {
+        super.saveTaskRecord(record);
+    }
+
+    private void finishTask(WorkflowTaskBom updBom, WorkflowTask updTask) {
+        updBom.setStatus(YesNoEnum.YES.getValue());
+        updBom.setHandleTime(LocalDateTime.now());
+        // 修改老节点
+        workflowTaskBomMapper.updateByPrimaryKeySelective(updBom);
+        // 修改任务
+        updTask.setStatus(FlowTaskStatusEnum.FINISH.getValue());
+        updTask.setLastTime(LocalDateTime.now());
+        updTask.setLastUserName(SecurityUtils.getUserInfo().getRealName());
+        updTask.setLastUserId(SecurityUtils.getUserInfo().getUserId());
+        updTask.setRemark("已结束");
+        workflowTaskMapper.updateByPrimaryKeySelective(updTask);
+    }
+
+    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;
+    }
+
+    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());
+                Boolean findFlag = Boolean.FALSE; // 符合分支条件
+                // 分情况讨论,如果选择是自定义处理类
+                if(className.getPublicFlag() == null || className.getPublicFlag() == 0){
+                    Object obj = BeanUtils.getBean(className.getHandleCode());
+                    Class cla = obj.getClass();
+                    try {
+                        Method method = cla.getMethod("");
+                        findFlag = (Boolean) method.invoke(obj, primaryKey, val, symbol);
+                    } catch (NoSuchMethodException e) {
+                        e.printStackTrace();
+                    } catch (IllegalAccessException e2) {
+                        e2.printStackTrace();
+                    } catch (InvocationTargetException e3) {
+                        e3.printStackTrace();
+                    }
+                }else{
+                    // 公共处理类
+                    findFlag = BigDecimalUtil.compareNumber(val,BigDecimalUtil.valueNull(primaryKey),symbol);
+                }
+                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;
+    }
+
+    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.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() + "处理");
+        // 存入bom
+        workflowTaskBomMapper.insert(bom);
+        // 修改老节点
+        workflowTaskBomMapper.updateByPrimaryKeySelective(updBom);
+        // 修改任务
+        workflowTaskMapper.updateByPrimaryKeySelective(updTask);
+        return bom;
+    }
+
+    private String getPrimaryKey(String json, String fieldName) {
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        return jsonObject.getString(fieldName);
+    }
+
+}