瀏覽代碼

审批优化

home 2 年之前
父節點
當前提交
98dd1dcf8e

+ 3 - 34
hx-common/service-flow/src/main/java/com/fjhx/controller/process/ProcessNodeController.java

@@ -2,7 +2,7 @@ package com.fjhx.controller.process;
 
 
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessNodeButton;
-import com.fjhx.params.ProcessNodeVo;
+import com.fjhx.params.NodeDetailsVo;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.service.process.ProcessNodeService;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.api.R;
@@ -31,42 +31,11 @@ public class ProcessNodeController {
     private ProcessNodeButtonService processNodeButtonService;
     private ProcessNodeButtonService processNodeButtonService;
 
 
     /**
     /**
-     * 创建节点
-     */
-    @PostMapping("/add")
-    public R add(@RequestBody ProcessNodeVo processNodeVo) {
-        processNodeService.add(processNodeVo);
-        return R.data(processNodeVo);
-    }
-
-    /**
-     * 编辑节点
-     */
-    @PostMapping("edit")
-    public R edit(@RequestBody ProcessNodeVo processNodeVo) {
-        processNodeService.edit(processNodeVo);
-        return R.success();
-    }
-
-    /**
-     * 删除节点
-     */
-    @PostMapping("/delete")
-    public R delete(@RequestBody ProcessNode processNode) {
-        processNodeService.removeById(processNode.getId());
-        return R.success();
-    }
-
-    /**
      * 保存节点
      * 保存节点
      */
      */
     @PostMapping("/saveNodeList")
     @PostMapping("/saveNodeList")
-    public R saveNodeList(@RequestBody ProcessNode processNode) {
-        Long processTenantId = processNode.getProcessTenantId();
-
-        processNodeButtonService.remove(ProcessNodeButton::getProcessTenantId, processTenantId);
-
-        processNodeButtonService.insertNodeButton(processNodeService.list(ProcessNode::getProcessTenantId, processTenantId));
+    public R saveNodeList(@RequestBody NodeDetailsVo nodeDetailsVo) {
+        processNodeButtonService.insertNodeButton(nodeDetailsVo);
         return R.success();
         return R.success();
     }
     }
 
 

+ 5 - 5
hx-common/service-flow/src/main/java/com/fjhx/feign/FlowClient.java

@@ -13,7 +13,7 @@ import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.params.ExampleInfoEx;
 import com.fjhx.params.ExampleInfoEx;
-import com.fjhx.params.FlowInfo;
+import com.fjhx.params.FlowInfoVo;
 import com.fjhx.params.GetNodeButtonVo;
 import com.fjhx.params.GetNodeButtonVo;
 import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleInfoService;
 import com.fjhx.service.example.ExampleInfoService;
@@ -49,7 +49,7 @@ public class FlowClient implements IFlowClient {
 
 
     @PostMapping(GET_FLOW_INFO)
     @PostMapping(GET_FLOW_INFO)
     @Override
     @Override
-    public R<FlowInfo> getProcessTenant(Long flowLinkNo, String code) {
+    public R<FlowInfoVo> getProcessTenant(Long flowLinkNo, String code) {
 
 
         ExampleInfo exampleInfo = exampleInfoService.getOne(
         ExampleInfo exampleInfo = exampleInfoService.getOne(
                 Wrappers.<ExampleInfo>lambdaQuery()
                 Wrappers.<ExampleInfo>lambdaQuery()
@@ -62,7 +62,7 @@ public class FlowClient implements IFlowClient {
         ProcessInfo processInfo = processInfoService.getOne(ProcessInfo::getCode, code);
         ProcessInfo processInfo = processInfoService.getOne(ProcessInfo::getCode, code);
         Assert.notEmpty(processInfo, String.format(FlowExplainConstant.PROCESS_NOT_EXIST, code));
         Assert.notEmpty(processInfo, String.format(FlowExplainConstant.PROCESS_NOT_EXIST, code));
 
 
-        FlowInfo flowInfo = BeanUtil.toBean(processInfo, FlowInfo.class);
+        FlowInfoVo flowInfoVo = BeanUtil.toBean(processInfo, FlowInfoVo.class);
 
 
         // 获取租户流程
         // 获取租户流程
         ProcessTenant processTenant = processTenantService.getOne(Wrappers.<ProcessTenant>lambdaQuery()
         ProcessTenant processTenant = processTenantService.getOne(Wrappers.<ProcessTenant>lambdaQuery()
@@ -70,9 +70,9 @@ public class FlowClient implements IFlowClient {
                 .eq(ProcessTenant::getBindingTenantId, AuthUtil.getTenantId())
                 .eq(ProcessTenant::getBindingTenantId, AuthUtil.getTenantId())
                 .eq(ProcessTenant::getCurrentVersion, StatusConstant.YES));
                 .eq(ProcessTenant::getCurrentVersion, StatusConstant.YES));
 
 
-        flowInfo.setProcessTenant(processTenant);
+        flowInfoVo.setProcessTenant(processTenant);
 
 
-        return R.data(flowInfo);
+        return R.data(flowInfoVo);
     }
     }
 
 
     @PostMapping(GET_NODE_BUTTON)
     @PostMapping(GET_NODE_BUTTON)

+ 2 - 1
hx-common/service-flow/src/main/java/com/fjhx/service/process/ProcessNodeButtonService.java

@@ -3,6 +3,7 @@ package com.fjhx.service.process;
 import com.fjhx.base.BaseService;
 import com.fjhx.base.BaseService;
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessNodeButton;
+import com.fjhx.params.NodeDetailsVo;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -16,6 +17,6 @@ import java.util.List;
  */
  */
 public interface ProcessNodeButtonService extends BaseService<ProcessNodeButton> {
 public interface ProcessNodeButtonService extends BaseService<ProcessNodeButton> {
 
 
-    void insertNodeButton(List<ProcessNode> asList);
+    void insertNodeButton(NodeDetailsVo nodeDetailsVo);
 
 
 }
 }

+ 28 - 7
hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessNodeButtonServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.service.process.impl;
 package com.fjhx.service.process.impl;
 
 
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.constants.FlowConstant;
 import com.fjhx.constants.FlowConstant;
 import com.fjhx.constants.FlowExplainConstant;
 import com.fjhx.constants.FlowExplainConstant;
@@ -8,6 +9,7 @@ import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.mapper.process.ProcessNodeButtonMapper;
 import com.fjhx.mapper.process.ProcessNodeButtonMapper;
+import com.fjhx.params.NodeDetailsVo;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.Assert;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.log.exception.ServiceException;
@@ -30,7 +32,28 @@ import java.util.stream.Collectors;
 public class ProcessNodeButtonServiceImpl extends ServiceImpl<ProcessNodeButtonMapper, ProcessNodeButton> implements ProcessNodeButtonService {
 public class ProcessNodeButtonServiceImpl extends ServiceImpl<ProcessNodeButtonMapper, ProcessNodeButton> implements ProcessNodeButtonService {
 
 
     @Override
     @Override
-    public void insertNodeButton(List<ProcessNode> processNodeList) {
+    public void insertNodeButton(NodeDetailsVo nodeDetailsVo) {
+
+        List<ProcessNode> processNodeList = nodeDetailsVo.getProcessNodeList();
+
+        // 赋值节点id
+        for (ProcessNode processNode : processNodeList) {
+
+            processNode.setProcessTenantId(nodeDetailsVo.getProcessTenantId());
+
+            long newId = IdWorker.getId();
+
+            Long oldId = processNode.getId();
+            processNode.setId(newId);
+
+            for (ProcessNode node : processNodeList) {
+                if (node.getParentId().equals(oldId)) {
+                    node.setParentId(newId);
+                }
+            }
+
+        }
+
 
 
         // 按父级节点id分组
         // 按父级节点id分组
         Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId = processNodeList.stream()
         Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId = processNodeList.stream()
@@ -88,8 +111,7 @@ public class ProcessNodeButtonServiceImpl extends ServiceImpl<ProcessNodeButtonM
      * 开始节点处理
      * 开始节点处理
      */
      */
     private void startHandle(List<ProcessNodeButton> processNodeButtonList,
     private void startHandle(List<ProcessNodeButton> processNodeButtonList,
-                             Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId,
-                             ProcessNode processNode) {
+                             Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId, ProcessNode processNode) {
         // 下一步
         // 下一步
         ProcessNodeButton next = next(ProcessNodeGroupByParentId, processNode, ButtonNameEnum.START);
         ProcessNodeButton next = next(ProcessNodeGroupByParentId, processNode, ButtonNameEnum.START);
         processNodeButtonList.add(next);
         processNodeButtonList.add(next);
@@ -114,8 +136,7 @@ public class ProcessNodeButtonServiceImpl extends ServiceImpl<ProcessNodeButtonM
      * 审批处理
      * 审批处理
      */
      */
     private void approvalHandle(List<ProcessNodeButton> processNodeButtonList,
     private void approvalHandle(List<ProcessNodeButton> processNodeButtonList,
-                                Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId,
-                                ProcessNode processNode) {
+                                Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId, ProcessNode processNode) {
         // 同意
         // 同意
         ProcessNodeButton next = next(ProcessNodeGroupByParentId, processNode, ButtonNameEnum.AGREE);
         ProcessNodeButton next = next(ProcessNodeGroupByParentId, processNode, ButtonNameEnum.AGREE);
         processNodeButtonList.add(next);
         processNodeButtonList.add(next);
@@ -128,8 +149,7 @@ public class ProcessNodeButtonServiceImpl extends ServiceImpl<ProcessNodeButtonM
      * 办理处理
      * 办理处理
      */
      */
     private void handle(List<ProcessNodeButton> processNodeButtonList,
     private void handle(List<ProcessNodeButton> processNodeButtonList,
-                        Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId,
-                        ProcessNode processNode) {
+                        Map<Long, List<ProcessNode>> ProcessNodeGroupByParentId, ProcessNode processNode) {
         // 完成
         // 完成
         ProcessNodeButton next = next(ProcessNodeGroupByParentId, processNode, ButtonNameEnum.COMPLETE);
         ProcessNodeButton next = next(ProcessNodeGroupByParentId, processNode, ButtonNameEnum.COMPLETE);
         processNodeButtonList.add(next);
         processNodeButtonList.add(next);
@@ -148,6 +168,7 @@ public class ProcessNodeButtonServiceImpl extends ServiceImpl<ProcessNodeButtonM
      */
      */
     private ProcessNodeButton previous(Map<Long, List<ProcessNode>> ProcessNodeGroupById,
     private ProcessNodeButton previous(Map<Long, List<ProcessNode>> ProcessNodeGroupById,
                                        ProcessNode processNode, ButtonNameEnum buttonNameEnum) {
                                        ProcessNode processNode, ButtonNameEnum buttonNameEnum) {
+
         ProcessNodeButton processNodeButton = createProcessNodeButton(processNode, buttonNameEnum);
         ProcessNodeButton processNodeButton = createProcessNodeButton(processNode, buttonNameEnum);
 
 
         // 赋值跳转到上一节点
         // 赋值跳转到上一节点

+ 9 - 7
hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessTenantServiceImpl.java

@@ -13,6 +13,7 @@ import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.mapper.process.ProcessTenantMapper;
 import com.fjhx.mapper.process.ProcessTenantMapper;
+import com.fjhx.params.NodeDetailsVo;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.service.process.ProcessTenantService;
 import com.fjhx.service.process.ProcessTenantService;
@@ -150,27 +151,28 @@ public class ProcessTenantServiceImpl extends ServiceImpl<ProcessTenantMapper, P
 
 
         // 生成默认开始节点
         // 生成默认开始节点
         ProcessNode startProcessNode = new ProcessNode();
         ProcessNode startProcessNode = new ProcessNode();
+        startProcessNode.setId(FlowConstant.TEMP_START_NODE_ID);
         startProcessNode.setType(ProcessNodeTypeEnum.START.getType());
         startProcessNode.setType(ProcessNodeTypeEnum.START.getType());
-        startProcessNode.setProcessTenantId(processTenantId);
         startProcessNode.setParentId(CommonConstant.TOP_PARENT_ID);
         startProcessNode.setParentId(CommonConstant.TOP_PARENT_ID);
         startProcessNode.setName(FlowConstant.START_NAME);
         startProcessNode.setName(FlowConstant.START_NAME);
         startProcessNode.setCode(FlowConstant.START_CODE);
         startProcessNode.setCode(FlowConstant.START_CODE);
         startProcessNode.setHandleObjectType(ProcessNodeHandleObjectTypeEnum.ALL.getType());
         startProcessNode.setHandleObjectType(ProcessNodeHandleObjectTypeEnum.ALL.getType());
-        processNodeService.save(startProcessNode);
 
 
         // 生成默认结束节点
         // 生成默认结束节点
-        Long startProcessNodeId = startProcessNode.getId();
         ProcessNode endProcessNode = new ProcessNode();
         ProcessNode endProcessNode = new ProcessNode();
+        endProcessNode.setId(FlowConstant.TEMP_END_NODE_ID);
         endProcessNode.setType(ProcessNodeTypeEnum.END.getType());
         endProcessNode.setType(ProcessNodeTypeEnum.END.getType());
-        endProcessNode.setProcessTenantId(processTenantId);
-        endProcessNode.setParentId(startProcessNodeId);
+        endProcessNode.setParentId(FlowConstant.TEMP_START_NODE_ID);
         endProcessNode.setName(FlowConstant.END_NAME);
         endProcessNode.setName(FlowConstant.END_NAME);
         endProcessNode.setCode(FlowConstant.END_CODE);
         endProcessNode.setCode(FlowConstant.END_CODE);
-        processNodeService.save(endProcessNode);
 
 
         List<ProcessNode> processNodeList = Arrays.asList(startProcessNode, endProcessNode);
         List<ProcessNode> processNodeList = Arrays.asList(startProcessNode, endProcessNode);
-        processNodeButtonService.insertNodeButton(processNodeList);
 
 
+        NodeDetailsVo nodeDetailsVo = new NodeDetailsVo();
+        nodeDetailsVo.setProcessTenantId(processTenantId);
+        nodeDetailsVo.setProcessNodeList(processNodeList);
+
+        processNodeButtonService.insertNodeButton(nodeDetailsVo);
         return processNodeList;
         return processNodeList;
     }
     }
 
 

+ 10 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/constants/FlowConstant.java

@@ -40,4 +40,14 @@ public interface FlowConstant {
      */
      */
     String END_REMARKS = "流程结束";
     String END_REMARKS = "流程结束";
 
 
+    /**
+     * 临时开始节点id
+     */
+    Long TEMP_START_NODE_ID = 1L;
+
+    /**
+     * 临时结束节点id
+     */
+    Long TEMP_END_NODE_ID = 99L;
+
 }
 }

+ 5 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/entity/process/ProcessInfo.java

@@ -40,4 +40,9 @@ public class ProcessInfo implements Serializable {
      */
      */
     private String moduleName;
     private String moduleName;
 
 
+    /**
+     * 流程名称
+     */
+    private String flowName;
+
 }
 }

+ 2 - 2
hx-service-api/service-flow-api/src/main/java/com/fjhx/feign/IFlowClient.java

@@ -4,7 +4,7 @@ import com.fjhx.constants.ClientConstant;
 import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.params.ExampleInfoEx;
 import com.fjhx.params.ExampleInfoEx;
-import com.fjhx.params.FlowInfo;
+import com.fjhx.params.FlowInfoVo;
 import com.fjhx.params.GetNodeButtonVo;
 import com.fjhx.params.GetNodeButtonVo;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.api.R;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -27,7 +27,7 @@ public interface IFlowClient {
      * 通过流程编码获取流程信息
      * 通过流程编码获取流程信息
      */
      */
     @PostMapping(GET_FLOW_INFO)
     @PostMapping(GET_FLOW_INFO)
-    R<FlowInfo> getProcessTenant(@RequestParam("flowLinkNo") Long flowLinkNo, @RequestParam("code") String code);
+    R<FlowInfoVo> getProcessTenant(@RequestParam("flowLinkNo") Long flowLinkNo, @RequestParam("code") String code);
 
 
     /**
     /**
      * 获取下一节点
      * 获取下一节点

+ 1 - 1
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/FlowInfo.java → hx-service-api/service-flow-api/src/main/java/com/fjhx/params/FlowInfoVo.java

@@ -12,7 +12,7 @@ import lombok.Setter;
  * 流程信息
  * 流程信息
  */
  */
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
-public class FlowInfo extends ProcessInfo {
+public class FlowInfoVo extends ProcessInfo {
 
 
     /**
     /**
      * 租户流程信息
      * 租户流程信息

+ 21 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/NodeDetailsVo.java

@@ -0,0 +1,21 @@
+package com.fjhx.params;
+
+import com.fjhx.entity.process.ProcessNode;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class NodeDetailsVo {
+
+    /**
+     * 租户流程id
+     */
+    private Long processTenantId;
+
+    /**
+     * 节点详情
+     */
+    private List<ProcessNode> processNodeList;
+
+}

+ 5 - 5
hx-service-api/service-flow-api/src/main/java/com/fjhx/utils/FlowConstructor.java

@@ -14,7 +14,7 @@ import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.feign.IFlowClient;
 import com.fjhx.feign.IFlowClient;
 import com.fjhx.params.ExampleInfoEx;
 import com.fjhx.params.ExampleInfoEx;
-import com.fjhx.params.FlowInfo;
+import com.fjhx.params.FlowInfoVo;
 import com.fjhx.params.GetNodeButtonVo;
 import com.fjhx.params.GetNodeButtonVo;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.api.R;
 
 
@@ -50,13 +50,13 @@ public class FlowConstructor {
         Assert.notEmpty(code, FlowExplainConstant.CODE_EMPTY);
         Assert.notEmpty(code, FlowExplainConstant.CODE_EMPTY);
 
 
         // 获取租户流程
         // 获取租户流程
-        R<FlowInfo> r = flowClient.getProcessTenant(flowLinkNo, code);
+        R<FlowInfoVo> r = flowClient.getProcessTenant(flowLinkNo, code);
         Assert.eqTrue(r.isSuccess(), r.getMsg());
         Assert.eqTrue(r.isSuccess(), r.getMsg());
-        FlowInfo flowInfo = r.getData();
+        FlowInfoVo flowInfoVo = r.getData();
 
 
         // 创建流程实例
         // 创建流程实例
         ExampleInfoEx exampleInfo = new ExampleInfoEx();
         ExampleInfoEx exampleInfo = new ExampleInfoEx();
-        exampleInfo.setProcessInfoId(flowInfo.getId());
+        exampleInfo.setProcessInfoId(flowInfoVo.getId());
         exampleInfo.setFlowLinkNo(flowLinkNo);
         exampleInfo.setFlowLinkNo(flowLinkNo);
         if (ObjectUtil.isNotEmpty(exampleAbstract.cacheData)) {
         if (ObjectUtil.isNotEmpty(exampleAbstract.cacheData)) {
             exampleInfo.setCacheData(JSONObject.toJSONString(exampleAbstract.cacheData));
             exampleInfo.setCacheData(JSONObject.toJSONString(exampleAbstract.cacheData));
@@ -66,7 +66,7 @@ public class FlowConstructor {
         startExampleDetails.setRemarks(remarks);
         startExampleDetails.setRemarks(remarks);
 
 
         // 如果租户流程为空,直接完成流程
         // 如果租户流程为空,直接完成流程
-        ProcessTenant processTenant = flowInfo.processTenantEntity();
+        ProcessTenant processTenant = flowInfoVo.processTenantEntity();
         if (ObjectUtil.isEmpty(processTenant)) {
         if (ObjectUtil.isEmpty(processTenant)) {
             exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
             exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
             exampleInfo.setComplete(StatusConstant.YES);
             exampleInfo.setComplete(StatusConstant.YES);