home 2 éve
szülő
commit
c49f335db3

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

@@ -1,7 +1,6 @@
 package com.fjhx.controller.process;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.params.NodeDetailsVo;
 import com.fjhx.service.process.ProcessNodeService;
@@ -65,8 +64,9 @@ public class ProcessTenantController {
      * 获取流程详情
      */
     @PostMapping("/getDetails")
-    public R addVersion(@RequestBody ProcessTenant processTenant) {
-        return R.data(processNodeService.list(ProcessNode::getProcessTenantId, processTenant.getId()));
+    public R getDetails(@RequestBody ProcessTenant processTenant) {
+        Map<String, Object> result = processNodeService.getDetails(processTenant.getId());
+        return R.data(result);
     }
 
     /**

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

@@ -9,6 +9,7 @@ import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.example.ExampleDetails;
 import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.entity.process.ProcessInfo;
+import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ButtonNameEnum;
@@ -19,9 +20,9 @@ import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleInfoService;
 import com.fjhx.service.process.ProcessInfoService;
 import com.fjhx.service.process.ProcessNodeButtonService;
+import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.service.process.ProcessTenantService;
 import com.fjhx.utils.Assert;
-import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,8 +31,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 
 @RestController
@@ -47,6 +48,9 @@ public class FlowClient implements IFlowClient {
     private ProcessTenantService processTenantService;
 
     @Autowired
+    private ProcessNodeService processNodeService;
+
+    @Autowired
     private ProcessNodeButtonService processNodeButtonService;
 
     @Autowired
@@ -58,7 +62,6 @@ public class FlowClient implements IFlowClient {
     public R<ExampleResult> create(Long flowLinkNo, String code, String nodeCode, String title, String remarks, String cacheData) {
 
         ExampleResult exampleResult = new ExampleResult();
-        exampleResult.setDeleteExample(true);
 
         int count = exampleInfoService.count(Wrappers.<ExampleInfo>lambdaQuery()
                 .eq(ExampleInfo::getFlowLinkNo, flowLinkNo)
@@ -79,139 +82,75 @@ public class FlowClient implements IFlowClient {
         // 创建流程实例
         ExampleInfo exampleInfo = new ExampleInfo();
         exampleInfo.setProcessInfoId(processInfo.getId());
+        exampleInfo.setTitle(title);
         exampleInfo.setFlowLinkNo(flowLinkNo);
         exampleInfo.setCacheData(cacheData);
-        exampleInfo.setTitle(title);
 
-        // 开始流程明细
-        ExampleDetails startExampleDetails = createExampleDetails(
-                exampleInfo.getId(), processInfo.getId(), null, ButtonNameEnum.START.getType());
-        startExampleDetails.setHandleUserId(AuthUtil.getUserId());
-        startExampleDetails.setRemarks(remarks);
 
         // 走默认流程,直接完成
         if (processTenant == null) {
-            exampleInfoEnd(exampleInfo);
+            exampleInfo.setComplete(StatusConstant.YES);
+            exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
+            exampleInfo.setProcessNodeCode(FlowConstant.END_CODE);
             exampleInfo.setFlowType(FlowConstant.FLOW_TYPE_DEFAULT);
-            exampleInfo.setHandleResult(HandleResultEnum.ADOPT.getType());
+            exampleInfo.setHandleResult(HandleResultEnum.SUCCESS.getType());
             exampleInfoService.save(exampleInfo);
 
+            // 开始流程明细
+            ExampleDetails startDetails = new ExampleDetails();
+            startDetails.setExampleInfoId(exampleInfo.getId());
+            startDetails.setProcessInfoId(processInfo.getId());
+            startDetails.setNameType(ButtonNameEnum.START.getType());
+            startDetails.setHandleUserId(AuthUtil.getUserId());
+            startDetails.setRemarks(remarks);
+
             // 结束流程明细
-            ExampleDetails endExampleDetails = createExampleDetails(
-                    exampleInfo.getId(), processInfo.getId(), null, ButtonNameEnum.END.getType());
+            ExampleDetails endDetails = new ExampleDetails();
+            endDetails.setExampleInfoId(exampleInfo.getId());
+            endDetails.setProcessInfoId(processInfo.getId());
+            endDetails.setNameType(ButtonNameEnum.END.getType());
 
             // 封装返回值
             exampleResult.setOldExampleInfo(exampleInfo);
-            exampleResult.setExampleDetailsIdList(
-                    Arrays.asList(startExampleDetails.getId(), endExampleDetails.getId()));
+            exampleResult.setExampleInfo(exampleInfo);
+            exampleResult.setExampleDetailsIdList(Arrays.asList(startDetails.getId(), endDetails.getId()));
             exampleResult.setHandleType(ButtonNameEnum.END.getType());
             exampleResult.setCacheDataStr(cacheData);
             return R.data(exampleResult);
         }
 
-        Long processTenantId = processTenant.getId();
-        exampleInfo.setFlowType(FlowConstant.FLOW_TYPE_TENANT);
-        exampleInfo.setProcessTenantId(processTenantId);
-
-        // 开始节点明细赋值租户流程id
-        startExampleDetails.setProcessTenantId(processTenant.getId());
-
-        // 获取跳转节点
-        nodeCode = ObjectUtil.isNotEmpty(nodeCode) ? nodeCode : FlowConstant.START_CODE;
-
-        // 如果流程跳转到结束
-        if (FlowConstant.END_CODE.equals(nodeCode)) {
-            exampleInfoEnd(exampleInfo);
-            exampleInfo.setHandleResult(HandleResultEnum.ADOPT.getType());
-            exampleInfoService.save(exampleInfo);
-
-            ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
-
-            startExampleDetails.setExampleInfoId(exampleInfo.getId());
-            endExampleDetails.setExampleInfoId(exampleInfo.getId());
-            saveExampleDetails(startExampleDetails, endExampleDetails);
-
-            // 返回值
-            exampleResult.setOldExampleInfo(exampleInfo);
-            exampleResult.setCacheDataStr(cacheData);
-            exampleResult.setExampleDetailsIdList(
-                    Arrays.asList(startExampleDetails.getId(), endExampleDetails.getId()));
-            exampleResult.setHandleType(ButtonNameEnum.END.getType());
-
-            return R.data(exampleResult);
-        }
-
         // 查询节点
-        ProcessNodeButton processNodeButton = processNodeButtonService.getOne(
-                Wrappers.<ProcessNodeButton>lambdaQuery()
-                        .eq(ProcessNodeButton::getProcessTenantId, processTenantId)
-                        .eq(ProcessNodeButton::getProcessNodeCode, nodeCode));
-
+        ProcessNodeButton processNodeButton = processNodeButtonService.getOne(Wrappers.<ProcessNodeButton>lambdaQuery()
+                .eq(ProcessNodeButton::getProcessTenantId, processTenant.getId())
+                .eq(ProcessNodeButton::getProcessNodeCode, FlowConstant.START_CODE));
         Assert.notEmpty(processNodeButton, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
 
-        // 赋值所在节点
-        startExampleDetails.setProcessNodeId(processNodeButton.getProcessNodeId());
-        startExampleDetails.setProcessNodeButtonId(processNodeButton.getId());
-
-        // 如果所在节点是开始节点,流转到下一节点,否则所在节点是指定code的节点
-        Long jumpNodeId;
-        String jumpNodeCode;
-        if (FlowConstant.START_CODE.equals(processNodeButton.getProcessNodeCode())) {
-            jumpNodeId = processNodeButton.getJumpNodeId();
-            jumpNodeCode = processNodeButton.getJumpNodeCode();
-        } else {
-            jumpNodeId = processNodeButton.getProcessNodeId();
-            jumpNodeCode = processNodeButton.getProcessNodeCode();
-        }
-
-        // 如果流程跳转到结束
-        if (FlowConstant.END_CODE.equals(jumpNodeCode)) {
-
-            exampleInfoEnd(exampleInfo);
-            exampleInfo.setHandleResult(HandleResultEnum.ADOPT.getType());
-            exampleInfoService.save(exampleInfo);
-
-            ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
-
-            startExampleDetails.setExampleInfoId(exampleInfo.getId());
-
-            endExampleDetails.setExampleInfoId(exampleInfo.getId());
-            endExampleDetails.setProcessNodeId(jumpNodeId);
-
-            saveExampleDetails(startExampleDetails, endExampleDetails);
-
-            // 返回值
-            exampleResult.setExampleDetailsIdList(
-                    Arrays.asList(startExampleDetails.getId(), endExampleDetails.getId()));
-            exampleResult.setHandleType(ButtonNameEnum.END.getType());
-
-        } else {
-            exampleInfo.setComplete(StatusConstant.NO);
-            exampleInfo.setProcessNodeId(jumpNodeId);
-            exampleInfo.setProcessNodeCode(jumpNodeCode);
-            exampleInfo.setHandleResult(HandleResultEnum.NOT_START.getType());
-            exampleInfoService.save(exampleInfo);
-
-            startExampleDetails.setExampleInfoId(exampleInfo.getId());
-            exampleDetailsService.save(startExampleDetails);
-
-            // 返回值
-            exampleResult.setExampleDetailsIdList(Collections.singletonList(startExampleDetails.getId()));
-        }
+        exampleInfo.setFlowType(FlowConstant.FLOW_TYPE_TENANT);
+        exampleInfo.setProcessTenantId(processTenant.getId());
+        exampleInfo.setProcessNodeId(processNodeButton.getProcessNodeId());
+        exampleInfo.setProcessNodeCode(processNodeButton.getProcessNodeCode());
+        exampleInfo.setComplete(StatusConstant.NO);
+        exampleInfo.setHandleResult(HandleResultEnum.IN_PROGRESS.getType());
+        exampleInfoService.save(exampleInfo);
 
-        exampleResult.setOldExampleInfo(exampleInfo);
-        exampleResult.setCacheDataStr(cacheData);
+        JumpVo jumpVo = new JumpVo();
+        setJumpNode(jumpVo, processNodeButton, nodeCode);
+        exampleResult.setJumpVo(jumpVo);
 
         return R.data(exampleResult);
     }
 
-    @GetMapping(GET_NODE_BUTTON_BY_ID)
+    @GetMapping(GET_JUMP_VO)
     @Override
-    public R<ProcessNodeButton> getNodeButtonById(Long buttonId) {
+    public R<JumpVo> getJumpVo(Long buttonId, String nodeCode) {
+        JumpVo jumpVo = new JumpVo();
+
         ProcessNodeButton processNodeButton = processNodeButtonService.getById(buttonId);
         Assert.notEmpty(processNodeButton, "nodeButton is null");
 
-        return R.data(processNodeButton);
+        setJumpNode(jumpVo, processNodeButton, nodeCode);
+
+        return R.data(jumpVo);
     }
 
 
@@ -222,13 +161,13 @@ public class FlowClient implements IFlowClient {
 
         // 返回值
         ExampleResult exampleResult = new ExampleResult();
-        exampleResult.setDeleteExample(false);
 
         // 创建流程实例
         ExampleInfo oleExampleInfo = exampleInfoService.getOne(Wrappers.<ExampleInfo>lambdaQuery()
                 .eq(ExampleInfo::getFlowLinkNo, jumpVo.getFlowLinkNo())
                 .eq(ExampleInfo::getComplete, StatusConstant.NO));
 
+        // 复制除一个对象做修改
         ExampleInfo exampleInfo = ObjectUtil.clone(oleExampleInfo);
         Assert.notEmpty(exampleInfo, FlowExplainConstant.EXAMPLE_INFO_NULL);
 
@@ -239,99 +178,53 @@ public class FlowClient implements IFlowClient {
 
         // 明细
         ExampleDetails exampleDetails = createExampleDetails(exampleInfo, jumpVo.getNameType());
-        exampleDetails.setProcessNodeId(exampleInfo.getProcessNodeId());
         exampleDetails.setProcessNodeButtonId(jumpVo.getButtonId());
-        exampleDetails.setRemarks(jumpVo.getRemarks());
         exampleDetails.setHandleUserId(AuthUtil.getUserId());
+        exampleDetails.setRemarks(jumpVo.getRemarks());
 
-        // 流程结束
-        if (FlowConstant.END_CODE.equals(jumpVo.getJumpNodeCode())) {
-
-            // 赋值流程结束
-            exampleInfoEnd(exampleInfo);
-            exampleInfo.setHandleResult(HandleResultEnum.ADOPT.getType());
-            exampleInfoService.updateById(exampleInfo);
-
-            // 结束明细
-            ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
+        // 赋值按钮处理方法
+        exampleResult.setHandleType(jumpVo.getNameType());
 
-            exampleDetails.setExampleInfoId(exampleInfo.getId());
-            endExampleDetails.setExampleInfoId(exampleInfo.getId());
-            saveExampleDetails(exampleDetails, endExampleDetails);
+        if (ButtonNameEnum.REJECT.getType().equals(jumpVo.getNameType())) {
 
-            exampleResult.setOldExampleInfo(oleExampleInfo);
-            exampleResult.setCacheDataStr(exampleInfo.getCacheData());
-            exampleResult.setExampleDetailsIdList(Arrays.asList(exampleDetails.getId(), endExampleDetails.getId()));
-            exampleResult.setHandleType(ButtonNameEnum.END.getType());
-            return R.data(exampleResult);
-        }
+            exampleInfo.setHandleResult(HandleResultEnum.FAIL.getType());
 
-        // 如果是自定义节点跳转
-        if (jumpVo.isSpecifyJump()) {
-            List<ProcessNodeButton> list = processNodeButtonService.list(Wrappers.<ProcessNodeButton>lambdaQuery()
-                    .eq(ProcessNodeButton::getProcessTenantId, exampleInfo.getProcessTenantId())
-                    .eq(ProcessNodeButton::getProcessNodeCode, jumpVo.getJumpNodeCode()));
+        } else if (FlowConstant.END_CODE.equals(jumpVo.getJumpNodeCode())) {
 
-            if (list.size() == 0) {
-                throw new ServiceException(FlowExplainConstant.NOT_CODE);
-            }
+            exampleInfo.setHandleResult(HandleResultEnum.SUCCESS.getType());
 
-            if (list.size() > 1) {
-                throw new ServiceException(FlowExplainConstant.MULTIPLE_CODE);
-            }
+            // 赋值结束处理方法
+            exampleResult.setHandleType(ButtonNameEnum.END.getType());
 
-            ProcessNodeButton processNodeButton = list.get(0);
-            jumpVo.setJumpNodeId(processNodeButton.getJumpNodeId());
-            jumpVo.setJumpNodeCode(processNodeButton.getJumpNodeCode());
-            jumpVo.setNameType(processNodeButton.getNameType());
         }
 
-        // 通过结束
-        if (ButtonNameEnum.END.getType().equals(jumpVo.getNameType())) {
-            exampleInfoEnd(exampleInfo);
-            exampleInfo.setHandleResult(HandleResultEnum.ADOPT.getType());
+        exampleInfo.setProcessNodeId(jumpVo.getJumpNodeId());
+        exampleInfo.setProcessNodeCode(jumpVo.getJumpNodeCode());
 
-            ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
-            endExampleDetails.setProcessNodeId(jumpVo.getJumpNodeId());
-
-            exampleDetails.setExampleInfoId(exampleInfo.getId());
-            endExampleDetails.setExampleInfoId(exampleInfo.getId());
-            saveExampleDetails(exampleDetails, endExampleDetails);
-            // 流程实例明细id
-            exampleResult.setExampleDetailsIdList(Arrays.asList(exampleDetails.getId(), endExampleDetails.getId()));
-        }
-        // 驳回结束
-        else if (ButtonNameEnum.REJECT.getType().equals(jumpVo.getNameType())) {
-            exampleInfoEnd(exampleInfo);
-            exampleInfo.setHandleResult(HandleResultEnum.FAIL.getType());
+        List<Long> exampleDetailsIdList = new ArrayList<>();
 
-            ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
-            endExampleDetails.setProcessNodeId(jumpVo.getJumpNodeId());
+        // 流程结束
+        if (FlowConstant.END_CODE.equals(jumpVo.getJumpNodeCode())) {
 
-            exampleDetails.setExampleInfoId(exampleInfo.getId());
-            endExampleDetails.setExampleInfoId(exampleInfo.getId());
-            saveExampleDetails(exampleDetails, exampleDetails);
+            exampleInfo.setComplete(StatusConstant.YES);
 
-            // 流程实例明细id
-            exampleResult.setExampleDetailsIdList(Arrays.asList(exampleDetails.getId(), endExampleDetails.getId()));
-        }
-        // 流程流转
-        else {
-            exampleInfo.setProcessNodeId(jumpVo.getJumpNodeId());
-            exampleInfo.setProcessNodeCode(jumpVo.getJumpNodeCode());
-            exampleInfo.setHandleResult(HandleResultEnum.START.getType());
+            // 结束明细
+            ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
 
-            exampleDetails.setExampleInfoId(exampleInfo.getId());
+            exampleDetailsService.saveBatch(Arrays.asList(exampleDetails, endExampleDetails));
+            exampleDetailsIdList.add(exampleDetails.getId());
+            exampleDetailsIdList.add(endExampleDetails.getId());
+        } else {
             exampleDetailsService.save(exampleDetails);
-
-            // 流程实例明细id
-            exampleResult.setExampleDetailsIdList(Collections.singletonList(exampleDetails.getId()));
+            exampleDetailsIdList.add(exampleDetails.getId());
         }
 
         exampleInfoService.updateById(exampleInfo);
+
         exampleResult.setOldExampleInfo(oleExampleInfo);
+        exampleResult.setExampleInfo(exampleInfo);
         exampleResult.setCacheDataStr(exampleInfo.getCacheData());
-        exampleResult.setHandleType(jumpVo.getNameType());
+        exampleResult.setExampleDetailsIdList(exampleDetailsIdList);
 
         return R.data(exampleResult);
     }
@@ -358,40 +251,45 @@ public class FlowClient implements IFlowClient {
         );
     }
 
-    /**
-     * 创建流程实例明细
-     */
-    private ExampleDetails createExampleDetails(ExampleInfo exampleInfo, Integer nameType) {
-        return createExampleDetails(
-                exampleInfo.getId(), exampleInfo.getProcessInfoId(), exampleInfo.getProcessTenantId(), nameType);
-    }
+    private void setJumpNode(JumpVo jumpVo, ProcessNodeButton processNodeButton, String nodeCode) {
+        // 赋值按钮名称类型
+        jumpVo.setNameType(processNodeButton.getNameType());
+        jumpVo.setButtonId(processNodeButton.getId());
 
-    /**
-     * 创建流程实例明细
-     */
-    private ExampleDetails createExampleDetails(Long exampleInfoId, Long processInfoId, Long processTenantId, Integer nameType) {
-        ExampleDetails endExampleDetails = new ExampleDetails();
-        endExampleDetails.setExampleInfoId(exampleInfoId);
-        endExampleDetails.setProcessInfoId(processInfoId);
-        endExampleDetails.setProcessTenantId(processTenantId);
-        endExampleDetails.setNameType(nameType);
-        return endExampleDetails;
-    }
+        // 非分支跳转
+        if (ObjectUtil.isNotEmpty(processNodeButton.getJumpNodeId())) {
+            jumpVo.setJumpNodeId(processNodeButton.getJumpNodeId());
+            jumpVo.setJumpNodeCode(processNodeButton.getJumpNodeCode());
+        }
+        // 分支跳转
+        else {
+            // 跳转节点编码不为空
+            Assert.notEmpty(nodeCode, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
 
-    /**
-     * 赋值实例结束参数
-     */
-    private void exampleInfoEnd(ExampleInfo exampleInfo) {
-        exampleInfo.setComplete(StatusConstant.YES);
-        exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
-        exampleInfo.setProcessNodeCode(FlowConstant.END_CODE);
+            // 查询跳转到哪个分支节点
+            ProcessNode processNode = processNodeService.getOne(Wrappers.<ProcessNode>lambdaQuery()
+                    .eq(ProcessNode::getParentId, processNodeButton.getProcessNodeId())
+                    .eq(ProcessNode::getCode, nodeCode));
+
+            // 分支节点不为空
+            Assert.notEmpty(processNode, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
+
+            jumpVo.setJumpNodeId(processNode.getId());
+            jumpVo.setJumpNodeCode(processNode.getCode());
+        }
     }
 
     /**
-     * 保存流程明细
+     * 创建流程实例明细
      */
-    private void saveExampleDetails(ExampleDetails... exampleDetails) {
-        exampleDetailsService.saveBatch(Arrays.asList(exampleDetails));
+    private ExampleDetails createExampleDetails(ExampleInfo exampleInfo, Integer nameType) {
+        ExampleDetails exampleDetails = new ExampleDetails();
+        exampleDetails.setExampleInfoId(exampleInfo.getId());
+        exampleDetails.setProcessInfoId(exampleInfo.getProcessInfoId());
+        exampleDetails.setProcessTenantId(exampleInfo.getProcessTenantId());
+        exampleDetails.setProcessNodeId(exampleInfo.getProcessNodeId());
+        exampleDetails.setNameType(nameType);
+        return exampleDetails;
     }
 
 }

+ 4 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/process/ProcessNodeService.java

@@ -4,6 +4,8 @@ import com.fjhx.base.BaseService;
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.params.ProcessNodeVo;
 
+import java.util.Map;
+
 /**
  * <p>
  * 服务类
@@ -18,4 +20,6 @@ public interface ProcessNodeService extends BaseService<ProcessNode> {
 
     void edit(ProcessNodeVo processNodeVo);
 
+    Map<String, Object> getDetails(Long id);
+
 }

+ 24 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessNodeServiceImpl.java

@@ -4,16 +4,21 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.constants.FlowExplainConstant;
 import com.fjhx.entity.process.ProcessNode;
+import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.mapper.process.ProcessNodeMapper;
 import com.fjhx.params.ProcessNodeVo;
 import com.fjhx.service.process.ProcessNodeService;
+import com.fjhx.service.process.ProcessTenantService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.FileClientUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -26,6 +31,10 @@ import java.util.List;
 @Service
 public class ProcessNodeServiceImpl extends ServiceImpl<ProcessNodeMapper, ProcessNode> implements ProcessNodeService {
 
+
+    @Autowired
+    private ProcessTenantService processTenantService;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(ProcessNodeVo processNodeVo) {
@@ -42,6 +51,21 @@ public class ProcessNodeServiceImpl extends ServiceImpl<ProcessNodeMapper, Proce
         FileClientUtil.againBindingFile(processNodeVo.getId(), processNodeVo.getFileInfo());
     }
 
+    @Override
+    public Map<String, Object> getDetails(Long id) {
+        Map<String, Object> result = new HashMap<>();
+
+        ProcessTenant processTenant = processTenantService.getById(id);
+
+        List<ProcessNode> list = list(ProcessNode::getProcessTenantId, id);
+
+        result.put("list", list);
+        result.put("nodeObject", processTenant.getNodeObject());
+        result.put("lineObject", processTenant.getLineObject());
+
+        return result;
+    }
+
     /**
      * 验证字段
      */

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

@@ -110,6 +110,9 @@ public class ProcessTenantServiceImpl extends ServiceImpl<ProcessTenantMapper, P
         newProcessTenant.setVersionNumber(newProcessTenant.getVersionNumber() + 1);
         newProcessTenant.setCurrentVersion(StatusConstant.NO);
 
+        newProcessTenant.setLineObject(nodeDetailsVo.getLineObject());
+        newProcessTenant.setNodeObject(nodeDetailsVo.getNodeObject());
+
         // 保存数据
         save(newProcessTenant);
 

+ 1 - 1
hx-service-api/service-flow-api/src/main/java/com/fjhx/entity/example/ExampleInfo.java

@@ -50,7 +50,7 @@ public class ExampleInfo extends BaseEntity {
     private String processNodeCode;
 
     /**
-     * 处理结果
+     * 处理结果 1进行中 2已通过 3未通过
      */
     private Integer handleResult;
 

+ 3 - 4
hx-service-api/service-flow-api/src/main/java/com/fjhx/enums/HandleResultEnum.java

@@ -6,10 +6,9 @@ import java.util.HashMap;
 
 @Getter
 public enum HandleResultEnum {
-    NOT_START(1, "未开始"),
-    START(2, "已开始"),
-    ADOPT(3, "通过"),
-    FAIL(4, "不通过");
+    IN_PROGRESS(1, "进行中"),
+    SUCCESS(2, "通过"),
+    FAIL(3, "不通过");
 
     private final Integer type;
     private final String name;

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

@@ -1,7 +1,6 @@
 package com.fjhx.feign;
 
 import com.fjhx.constants.ClientConstant;
-import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.params.ExampleResult;
 import com.fjhx.params.JumpVo;
 import org.springblade.core.tool.api.R;
@@ -18,7 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 public interface IFlowClient {
 
     String CREATE = ClientConstant.API_PREFIX + "/create";
-    String GET_NODE_BUTTON_BY_ID = ClientConstant.API_PREFIX + "/getNodeButtonById";
+    String GET_JUMP_VO = ClientConstant.API_PREFIX + "/getJumpVO";
     String JUMP = ClientConstant.API_PREFIX + "/jump";
     String ROLL_BACK = ClientConstant.API_PREFIX + "/rollBack";
 
@@ -27,7 +26,6 @@ public interface IFlowClient {
      *
      * @param flowLinkNo 绑定流程编号
      * @param code       流程编码
-     * @param nodeCode   跳转节点编码
      * @param remarks    发起原因/处理意见
      * @param cacheData  缓存数据
      */
@@ -45,8 +43,9 @@ public interface IFlowClient {
      * @param buttonId 按钮id
      * @return 按钮对象
      */
-    @GetMapping(GET_NODE_BUTTON_BY_ID)
-    R<ProcessNodeButton> getNodeButtonById(@RequestParam("buttonId") Long buttonId);
+    @GetMapping(GET_JUMP_VO)
+    R<JumpVo> getJumpVo(@RequestParam("buttonId") Long buttonId,
+                        @RequestParam(value = "nodeCode", required = false) String nodeCode);
 
     /**
      * 流程跳转

+ 12 - 4
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/ExampleResult.java

@@ -10,12 +10,17 @@ import java.util.List;
 public class ExampleResult {
 
     /**
-     * 流程实例
+     * 流程实例
      */
     private ExampleInfo oldExampleInfo;
 
     /**
-     * 流程实例明细id
+     * 现流程实例
+     */
+    private ExampleInfo exampleInfo;
+
+    /**
+     * 新增流程实例明细id
      */
     private List<Long> exampleDetailsIdList;
 
@@ -30,19 +35,22 @@ public class ExampleResult {
     private String cacheDataStr;
 
     /**
+     * 跳转节点
+     */
+    private JumpVo jumpVo;
+
+    /**
      * 回滚是否删除流程实例
      */
     private boolean deleteExample;
 
     public void after(Runnable runnable) {
-
         try {
             runnable.run();
         } catch (Exception e) {
             FlowConstructor.rollBack(this);
             throw e;
         }
-
     }
 
 }

+ 0 - 5
hx-service-api/service-flow-api/src/main/java/com/fjhx/params/JumpVo.java

@@ -26,11 +26,6 @@ public class JumpVo {
     private String cacheDataStr;
 
     /**
-     * 是否根据编码指定跳转
-     */
-    private boolean specifyJump;
-
-    /**
      * 跳转节点id
      */
     private Long jumpNodeId;

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

@@ -23,6 +23,10 @@ public class NodeDetailsVo {
      */
     private Long processTenantId;
 
+    private String nodeObject;
+
+    private String lineObject;
+
     /**
      * 节点详情列表
      */

+ 3 - 8
hx-service-api/service-flow-api/src/main/java/com/fjhx/utils/ExampleAbstract.java

@@ -37,20 +37,16 @@ public abstract class ExampleAbstract {
     /**
      * 审批驳回方法(直接结束流程)
      * 需要时重写即可
-     *
-     * @param code 节点编码
      */
-    public void reject(String code) {
+    public void reject() {
 
     }
 
     /**
      * 审批不通过方法(返回上一节点)
      * 需要时重写即可
-     *
-     * @param code 节点编码
      */
-    public void fail(String code) {
+    public void fail() {
 
     }
 
@@ -58,10 +54,9 @@ public abstract class ExampleAbstract {
      * 控制流程流转
      * 存在分支时需要重写此方法,流转向指定分支
      *
-     * @param code 节点编码
      * @return 指定流转分支编码
      */
-    public String circulation(String code) {
+    public String circulation() {
         return null;
     }
 

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

@@ -3,9 +3,7 @@ package com.fjhx.utils;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.fjhx.constants.FlowConstant;
 import com.fjhx.constants.FlowExplainConstant;
-import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.feign.IFlowClient;
 import com.fjhx.params.ExampleResult;
@@ -68,16 +66,15 @@ public class FlowConstructor {
         // 缓存对象转字符串
         String cacheDataStr = getCacheDataStr(cacheData);
 
-        // 查询跳转节点
-        String nodeCode = exampleAbstract.circulation(FlowConstant.START_CODE);
+        // 赋值缓存
+        exampleAbstract.setCacheData(cacheDataStr);
+        String nodeCode = exampleAbstract.circulation();
 
         // 执行流程
         R<ExampleResult> exampleResultR = flowClient.create(flowLinkNo, code, nodeCode, title, remarks, cacheDataStr);
         ExampleResult result = Assert.result(exampleResultR);
 
-        exampleAbstract.setCacheData(cacheDataStr);
-
-        // 如果流程结束,执行结束方法
+        // 默认流程,直接执行结束方法
         if (ButtonNameEnum.END.getType().equals(result.getHandleType())) {
             try {
                 exampleAbstract.end();
@@ -85,8 +82,17 @@ public class FlowConstructor {
                 rollBack(result);
                 throw e;
             }
+            return result;
         }
 
+        JumpVo jumpVo = result.getJumpVo();
+        jumpVo.setFlowLinkNo(flowLinkNo);
+        jumpVo.setRemarks(remarks);
+        jumpVo.setCacheDataStr(cacheDataStr);
+
+        result = flowJump(jumpVo);
+        result.setDeleteExample(true);
+
         return result;
     }
 
@@ -118,63 +124,18 @@ public class FlowConstructor {
         // 缓存对象转字符串
         String cacheDataStr = getCacheDataStr(cacheData);
 
-        // 获取按钮
-        ProcessNodeButton processNodeButton = Assert.result(flowClient.getNodeButtonById(buttonId));
-
-        // 查询跳转节点
-        String processNodeCode = processNodeButton.getProcessNodeCode();
-        String nodeCode = exampleAbstract.circulation(processNodeCode);
+        // 赋值缓存
+        exampleAbstract.setCacheData(cacheDataStr);
+        String nodeCode = exampleAbstract.circulation();
 
-        JumpVo jumpVo = new JumpVo();
+        // 获取按钮
+        JumpVo jumpVo = Assert.result(flowClient.getJumpVo(buttonId, nodeCode));
         jumpVo.setFlowLinkNo(flowLinkNo);
-        jumpVo.setButtonId(buttonId);
         jumpVo.setRemarks(remarks);
         jumpVo.setCacheDataStr(cacheDataStr);
-        if (ObjectUtil.isNotEmpty(nodeCode)) {
-            jumpVo.setSpecifyJump(true);
-            jumpVo.setJumpNodeCode(nodeCode);
-        } else {
-            jumpVo.setSpecifyJump(false);
-            jumpVo.setJumpNodeId(processNodeButton.getJumpNodeId());
-            jumpVo.setJumpNodeCode(processNodeButton.getJumpNodeCode());
-            jumpVo.setNameType(processNodeButton.getNameType());
-        }
-
-        R<ExampleResult> exampleResultR = flowClient.jump(jumpVo);
-        ExampleResult result = Assert.result(exampleResultR);
-
-        exampleAbstract.setCacheData(result.getCacheDataStr());
-
-        // 如果流程结束,执行结束方法
-        if (ButtonNameEnum.END.getType().equals(result.getHandleType())) {
-            try {
-                exampleAbstract.end();
-            } catch (Exception e) {
-                rollBack(result);
-                throw e;
-            }
-        }
-
-        // 如果流程结束,执行结束方法
-        if (ButtonNameEnum.REJECT.getType().equals(result.getHandleType())) {
-            try {
-                exampleAbstract.reject(result.getOldExampleInfo().getProcessNodeCode());
-            } catch (Exception e) {
-                rollBack(result);
-                throw e;
-            }
-        }
-
-        // 审批不通过方法
-        if (ButtonNameEnum.FAIL.getType().equals(result.getHandleType())) {
-            try {
-                exampleAbstract.fail(result.getOldExampleInfo().getProcessNodeCode());
-            } catch (Exception e) {
-                rollBack(result);
-                throw e;
-            }
-        }
 
+        ExampleResult result = flowJump(jumpVo);
+        result.setDeleteExample(false);
         return result;
     }
 
@@ -203,4 +164,34 @@ public class FlowConstructor {
         return code;
     }
 
+    /**
+     * 流程跳转
+     */
+    private ExampleResult flowJump(JumpVo jumpVo) {
+
+        R<ExampleResult> exampleResultR = flowClient.jump(jumpVo);
+        ExampleResult result = Assert.result(exampleResultR);
+
+        exampleAbstract.setCacheData(result.getCacheDataStr());
+        try {
+            switch (ButtonNameEnum.get(result.getHandleType())) {
+                case END:
+                    exampleAbstract.end();
+                    break;
+
+                case REJECT:
+                    exampleAbstract.reject();
+                    break;
+
+                case FAIL:
+                    exampleAbstract.fail();
+                    break;
+            }
+        } catch (Exception e) {
+            rollBack(result);
+            throw e;
+        }
+        return result;
+    }
+
 }

+ 7 - 12
hx-service/storage-restructure/src/main/java/com/fjhx/controller/common/CommonFileController.java

@@ -65,18 +65,18 @@ public class CommonFileController {
                     }
 
                     @Override
-                    public void reject(String code) {
-                        System.out.println("已拒绝该流程");
+                    public void reject() {
+                        System.err.println("审批驳回方法(直接结束流程)");
                     }
 
                     @Override
-                    public String circulation(String code) {
-                        return null;
+                    public String circulation() {
+                        return super.circulation();
                     }
 
                     @Override
-                    public void fail(String code) {
-                        super.fail(code);
+                    public void fail() {
+                        System.err.println("审批不通过方法(返回上一节点)");
                     }
                 }
         );
@@ -90,20 +90,15 @@ public class CommonFileController {
         map.put("processInfoId", "1111111111111111111111");
         map.put("processTenantId", "222222222222222222222");
 
-
         ExampleResult result = flowConstructor().create(123456L, "测试开始流程", "测试开始流程", map);
 
-        result.after(() -> {
-            int i = 1 / 0;
-        });
-
         return R.success(result);
     }
 
 
     @GetMapping("jump")
     public R jump(@RequestParam("buttonId") Long buttonId) {
-        flowConstructor().jump(123456L, buttonId, "测试流程运行", "男").after(() -> {
+        flowConstructor().jump(123456L, buttonId, "测试流程运行").after(() -> {
 
         });
         return R.success();

+ 3 - 3
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockWaterMapper.xml

@@ -229,8 +229,8 @@
         '' quantity,
         pc.Price price,
         asod.CreatedTime createTime,
-        sum(asod.Quantity) changeNum,
-        sum(asod.Amount) amount
+        sum(-asod.Quantity) changeNum,
+        sum(-asod.Amount) amount
         FROM apply_stockoutdetail asod
         LEFT JOIN material m ON asod.MaterialCode = m.`Code`
         LEFT JOIN supplier s ON asod.SupplierId = s.ID
@@ -238,7 +238,7 @@
         WHERE asod.IsDelete != 1
         AND asod.BackMaterialType = 1
         AND (asod.CreatedTime BETWEEN #{condition.beginTime} AND #{condition.endTime})
-        AND asod.BackMaterialProgress IN (4, 5, 10, 11)
+        AND asod.BackMaterialProgress IN (3,4, 5, 10, 11)
         <if test="condition.keyword neq null and condition.keyword neq '' ">
             and (
             instr(m.Code, #{condition.keyword} )>0