home před 2 roky
rodič
revize
1b99a0b30a

+ 12 - 0
hx-common/common-tool/src/main/java/com/fjhx/utils/Assert.java

@@ -8,6 +8,18 @@ import java.math.BigDecimal;
 public class Assert {
 
     /**
+     * 断言为空
+     *
+     * @param obj    参数
+     * @param errStr 异常提示
+     */
+    public static void empty(Object obj, String errStr) {
+        if (ObjectUtil.isNotEmpty(obj)) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
      * 断言不为空
      *
      * @param obj    参数

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

@@ -1,7 +1,6 @@
 package com.fjhx.feign;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.fjhx.constants.FlowConstant;
 import com.fjhx.constants.FlowExplainConstant;
 import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.example.ExampleInfo;
@@ -35,17 +34,14 @@ public class FlowClient implements IFlowClient {
     private ProcessNodeButtonService processNodeButtonService;
 
 
-    @PostMapping(GET_EXAMPLE_INFO_BY_BUSINESS_ID)
+    @PostMapping(GET_PROCESS_TENANT)
     @Override
-    public R<ExampleInfo> getExampleInfoByBusinessId(Long businessId) {
+    public R<ProcessTenant> getProcessTenant(Long businessId, String code) {
+
         ExampleInfo exampleInfo = exampleInfoService.getOne(Wrappers.<ExampleInfo>lambdaQuery()
                 .eq(ExampleInfo::getBusinessId, businessId).eq(ExampleInfo::getComplete, StatusConstant.No));
-        return R.success(exampleInfo);
-    }
 
-    @PostMapping(GET_PROCESS_TENANT_BY_CODE)
-    @Override
-    public R<ProcessTenant> getProcessTenantByCode(String code) {
+        Assert.empty(exampleInfo, FlowExplainConstant.EXPLAIN_NOT_EXIST);
 
         // 查找通用流程
         ProcessInfo processInfo = processInfoService.getOne(ProcessInfo::getCode, code);
@@ -56,8 +52,7 @@ public class FlowClient implements IFlowClient {
         ProcessTenant processTenant = processTenantService.getOne(Wrappers.<ProcessTenant>lambdaQuery()
                 .eq(ProcessTenant::getProcessInfoId, processInfoId)
                 .eq(ProcessTenant::getBindingTenantId, AuthUtil.getTenantId())
-                .eq(ProcessTenant::getCurrentVersion, StatusConstant.YES)
-                .last("limit 1"));
+                .eq(ProcessTenant::getCurrentVersion, StatusConstant.YES));
 
         if (processTenant == null) {
             processTenant = new ProcessTenant();
@@ -67,13 +62,13 @@ public class FlowClient implements IFlowClient {
         return R.success(processTenant);
     }
 
-    @PostMapping(GET_PROCESS_NODE_START_BUTTON_BY_PROCESS_TENANT_ID)
+    @PostMapping(GET_PROCESS_NODE_BUTTON_BY_PROCESS_TENANT_ID)
     @Override
-    public R<ProcessNodeButton> getProcessNodeStartButtonByProcessTenantId(Long processTenantId) {
+    public R<ProcessNodeButton> getProcessNodeButtonByProcessTenantId(Long processTenantId, String processNodeCode) {
         ProcessNodeButton processNodeButton = processNodeButtonService.getOne(
                 Wrappers.<ProcessNodeButton>lambdaQuery()
                         .eq(ProcessNodeButton::getProcessTenantId, processTenantId)
-                        .eq(ProcessNodeButton::getProcessNodeCode, FlowConstant.START_CODE));
+                        .eq(ProcessNodeButton::getProcessNodeCode, processNodeCode));
         return R.success(processNodeButton);
     }
 

+ 0 - 3
hx-common/service-flow/src/main/java/com/fjhx/service/example/ExampleInfoService.java

@@ -2,7 +2,6 @@ package com.fjhx.service.example;
 
 import com.fjhx.base.BaseService;
 import com.fjhx.entity.example.ExampleInfo;
-import com.fjhx.utils.ExampleAbstract;
 
 /**
  * <p>
@@ -14,6 +13,4 @@ import com.fjhx.utils.ExampleAbstract;
  */
 public interface ExampleInfoService extends BaseService<ExampleInfo> {
 
-    ExampleInfo create(Long businessId, ExampleAbstract exampleAbstract);
-
 }

+ 0 - 75
hx-common/service-flow/src/main/java/com/fjhx/service/example/impl/ExampleInfoServiceImpl.java

@@ -1,23 +1,12 @@
 package com.fjhx.service.example.impl;
 
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.constants.FlowConstant;
-import com.fjhx.constants.FlowExplainConstant;
-import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.example.ExampleInfo;
-import com.fjhx.entity.process.ProcessInfo;
-import com.fjhx.entity.process.ProcessNodeButton;
-import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.mapper.example.ExampleInfoMapper;
 import com.fjhx.service.example.ExampleInfoService;
 import com.fjhx.service.process.ProcessInfoService;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessTenantService;
-import com.fjhx.utils.Assert;
-import com.fjhx.utils.ExampleAbstract;
-import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -41,68 +30,4 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
     @Autowired
     private ProcessNodeButtonService processNodeButtonService;
 
-
-    @Override
-    public ExampleInfo create(Long businessId, ExampleAbstract exampleAbstract) {
-
-        // 查看流程是否已发起
-        Assert.notEmpty(
-                getOne(Wrappers.<ExampleInfo>lambdaQuery()
-                        .eq(ExampleInfo::getBusinessId, businessId).eq(ExampleInfo::getComplete, StatusConstant.No)),
-                FlowExplainConstant.EXPLAIN_NOT_EXIST);
-
-        // 获取流程编码
-        String code = exampleAbstract.getCode();
-
-        // 查找通用流程
-        ProcessInfo processInfo = processInfoService.getOne(ProcessInfo::getCode, code);
-        Assert.notEmpty(processInfo, String.format(FlowExplainConstant.PROCESS_NOT_EXIST, code));
-        Long processInfoId = processInfo.getId();
-
-        // 获取租户流程
-        ProcessTenant processTenant = processTenantService.getOne(Wrappers.<ProcessTenant>lambdaQuery()
-                .eq(ProcessTenant::getProcessInfoId, processInfoId)
-                .eq(ProcessTenant::getBindingTenantId, AuthUtil.getTenantId())
-                .eq(ProcessTenant::getCurrentVersion, StatusConstant.YES)
-                .last("limit 1"));
-
-        ExampleInfo exampleInfo = new ExampleInfo();
-        exampleInfo.setProcessInfoId(processInfoId);
-        exampleInfo.setBusinessId(businessId);
-        exampleInfo.setCacheData(exampleAbstract.getCacheData());
-
-        // 如果租户流程为空,直接结束流程
-        if (ObjectUtil.isEmpty(processTenant)) {
-            exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
-            exampleInfo.setComplete(StatusConstant.YES);
-
-            // 执行流程结束方法
-            exampleAbstract.end();
-        } else {
-            Long processTenantId = processTenant.getId();
-            exampleInfo.setProcessTenantId(processTenantId);
-
-            ProcessNodeButton processNodeButton = processNodeButtonService.getOne(
-                    Wrappers.<ProcessNodeButton>lambdaQuery()
-                            .eq(ProcessNodeButton::getProcessTenantId, processTenantId)
-                            .eq(ProcessNodeButton::getProcessNodeCode, FlowConstant.START_CODE));
-
-            Long jumpNodeId = processNodeButton.getJumpNodeId();
-
-            // 如果跳转id为空,则走到分支
-            if (jumpNodeId == null) {
-                String circulation = exampleAbstract.circulation(processNodeButton.getProcessNodeCode());
-                Assert.notEmpty(circulation, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
-
-
-
-
-            }
-
-        }
-
-        save(exampleInfo);
-
-        return exampleInfo;
-    }
 }

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

@@ -7,7 +7,6 @@ import com.fjhx.entity.process.ProcessTenant;
 import org.springblade.core.tool.api.R;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * File Feign接口类
@@ -15,28 +14,21 @@ import org.springframework.web.bind.annotation.RequestParam;
 @FeignClient(value = "service-flow")
 public interface IFlowClient {
 
-    String GET_EXAMPLE_INFO_BY_BUSINESS_ID = ClientConstant.API_PREFIX + "/getExampleInfoByBusinessId";
-    String GET_PROCESS_TENANT_BY_CODE = ClientConstant.API_PREFIX + "/getProcessTenantByCode";
+    String GET_PROCESS_TENANT = ClientConstant.API_PREFIX + "/getProcessTenantByCode";
     String EXAMPLE_INFO_SAVE = ClientConstant.API_PREFIX + "/exampleInfoSave";
-    String GET_PROCESS_NODE_START_BUTTON_BY_PROCESS_TENANT_ID = ClientConstant.API_PREFIX + "/getProcessNodeStartButtonByProcessTenantId";
-
-    /**
-     * 通过业务id获取正在进行中的流程实例
-     */
-    @PostMapping(GET_EXAMPLE_INFO_BY_BUSINESS_ID)
-    R<ExampleInfo> getExampleInfoByBusinessId(@RequestParam("businessId") Long businessId);
+    String GET_PROCESS_NODE_BUTTON_BY_PROCESS_TENANT_ID = ClientConstant.API_PREFIX + "/getProcessNodeButtonByProcessTenantId";
 
     /**
      * 通过流程编码获取租户流程
      */
-    @PostMapping(GET_PROCESS_TENANT_BY_CODE)
-    R<ProcessTenant> getProcessTenantByCode(String code);
+    @PostMapping(GET_PROCESS_TENANT)
+    R<ProcessTenant> getProcessTenant(Long businessId, String code);
 
     /**
      * 通过租户业务流程id获取开始节点按钮信息
      */
-    @PostMapping(GET_PROCESS_NODE_START_BUTTON_BY_PROCESS_TENANT_ID)
-    R<ProcessNodeButton> getProcessNodeStartButtonByProcessTenantId(Long processTenantId);
+    @PostMapping(GET_PROCESS_NODE_BUTTON_BY_PROCESS_TENANT_ID)
+    R<ProcessNodeButton> getProcessNodeButtonByProcessTenantId(Long processTenantId, String processNodeCode);
 
     /**
      * 保存流程实例

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

@@ -42,25 +42,23 @@ public class FlowConstructor {
         String code = exampleAbstract.getCode();
         Assert.notEmpty(code, FlowExplainConstant.CODE_EMPTY);
 
-        // 查看流程是否已发起
-        ExampleInfo data = flowClient.getExampleInfoByBusinessId(businessId).getData();
-        Assert.notEmpty(data, FlowExplainConstant.EXPLAIN_NOT_EXIST);
-
-
-        R<ProcessTenant> r = flowClient.getProcessTenantByCode(code);
+        // 获取租户流程
+        R<ProcessTenant> r = flowClient.getProcessTenant(businessId, code);
         Assert.eqTrue(r.isSuccess(), r.getMsg());
 
         ProcessTenant processTenant = r.getData();
 
         Long processInfoId = processTenant.getProcessInfoId();
 
+        // 创建流程实例
         ExampleInfo exampleInfo = new ExampleInfo();
         exampleInfo.setProcessInfoId(processInfoId);
         exampleInfo.setBusinessId(businessId);
         exampleInfo.setCacheData(exampleAbstract.getCacheData());
 
-        // 如果租户流程为空,直接结束流程
+        // 如果租户流程为空,直接完成流程
         if (ObjectUtil.isEmpty(processTenant.getId())) {
+
             exampleInfo.setProcessNodeId(FlowConstant.OVER_PROCESS_FLAG);
             exampleInfo.setComplete(StatusConstant.YES);
 
@@ -70,38 +68,38 @@ public class FlowConstructor {
         // 租户流程不为空,走租户流程
         else {
             Long processTenantId = processTenant.getId();
+
+            // 赋值租户流程id
             exampleInfo.setProcessTenantId(processTenantId);
 
-            // 获取开始节点按钮
-            ProcessNodeButton processNodeButton = flowClient.getProcessNodeStartButtonByProcessTenantId(processTenantId).getData();
-            Long jumpNodeId = processNodeButton.getJumpNodeId();
+            ProcessNodeButton processNodeButton;
 
-            // 调用方法查看是否有指定跳转节点
-            String circulation = exampleAbstract.circulation(processNodeButton.getProcessNodeCode());
-            if (circulation != null) {
-                // 如果跳转id为空,则走到分支
-                if (jumpNodeId == null) {
-//                    String circulation = exampleAbstract.circulation(processNodeButton.getProcessNodeCode());
-                    Assert.notEmpty(circulation, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
-                    // TODO
-                }
+            // 调用方法查看是否有指定跳转节点,没有则正常流转
+            String circulation = exampleAbstract.circulation(FlowConstant.START_CODE);
+            if (ObjectUtil.isNotEmpty(circulation)) {
+                processNodeButton = flowClient.getProcessNodeButtonByProcessTenantId(processTenantId, circulation).getData();
+            } else {
+                processNodeButton = flowClient.getProcessNodeButtonByProcessTenantId(processTenantId, FlowConstant.START_CODE).getData();
             }
-            // 没有则正常流转
+
+            Long jumpNodeId = processNodeButton.getJumpNodeId();
+            // 流程结束
+            if (jumpNodeId.equals(FlowConstant.OVER_PROCESS_FLAG)) {
+                exampleInfo.setComplete(StatusConstant.YES);
+                // 执行流程结束方法
+                exampleAbstract.end();
+            }
+            // 否则正常流转
             else {
-                exampleInfo.setProcessNodeId(jumpNodeId);
-                // 流程结束
-                if (jumpNodeId.equals(FlowConstant.OVER_PROCESS_FLAG)) {
-                    exampleInfo.setComplete(StatusConstant.YES);
-                    // 执行流程结束方法
-                    exampleAbstract.end();
-                }
-                // 否则正常流转
-                else {
-                    exampleInfo.setComplete(StatusConstant.No);
-                }
+                exampleInfo.setComplete(StatusConstant.No);
             }
+
+            // 赋值跳转节点id
+            Assert.notEmpty(jumpNodeId, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
+            exampleInfo.setProcessNodeId(jumpNodeId);
         }
 
+        // 保存流程实例
         return flowClient.exampleInfoSave(exampleInfo).getData();
     }