home 2 tahun lalu
induk
melakukan
bfb55de5ab

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

@@ -67,6 +67,30 @@ public class Assert {
     }
 
     /**
+     * 断言为1
+     *
+     * @param along 参数
+     * @param errStr  异常提示
+     */
+    public static void eqOne(Long along, String errStr) {
+        if (along != 1) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言为1
+     *
+     * @param integer 参数
+     * @param errStr  异常提示
+     */
+    public static void eqOne(Integer integer, String errStr) {
+        if (integer != 1) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
      * 断言为真
      *
      * @param flag   参数

+ 13 - 4
hx-common/service-flow/src/main/java/com/fjhx/controller/example/ExampleInfoController.java

@@ -66,15 +66,24 @@ public class ExampleInfoController {
     }
 
     /**
+     * 撤回
+     */
+    @PostMapping("/withdraw")
+    public R withdraw(Map<String, String> condition) {
+        Long withdrawExampleInfoId = Convert.toLong(condition.get("withdrawExampleInfoId"));
+        Long withdrawExampleDetailsId = Convert.toLong(condition.get("withdrawExampleDetailsId"));
+        exampleInfoService.withdraw(withdrawExampleInfoId, withdrawExampleDetailsId);
+        return R.success();
+    }
+
+    /**
      * 撤销
      */
     @PostMapping("/revoke")
     public R revoke(Map<String, String> condition) {
-        Long exampleInfoId = Convert.toLong(condition.get("id"));
-
-        exampleInfoService.revoke(exampleInfoId);
+        Long withdrawExampleInfoId = Convert.toLong(condition.get("withdrawExampleInfoId"));
+        exampleInfoService.revoke(withdrawExampleInfoId);
         return R.success();
     }
 
-
 }

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

@@ -259,6 +259,18 @@ public class FlowClient implements IFlowClient {
         );
     }
 
+    @Override
+    public R withdraw(Long withdrawExampleInfoId, Long withdrawExampleDetailsId) {
+        exampleInfoService.withdraw(withdrawExampleInfoId, withdrawExampleDetailsId);
+        return R.success();
+    }
+
+    @Override
+    public R revoke(Long revokeExampleInfoId) {
+        exampleInfoService.revoke(revokeExampleInfoId);
+        return R.success();
+    }
+
 
     private void setJumpNode(JumpVo jumpVo, ProcessNodeButton processNodeButton, String nodeCode) {
         // 赋值按钮名称类型

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

@@ -25,6 +25,8 @@ public interface ExampleInfoService extends BaseService<ExampleInfo> {
 
     Page<Map<String, Object>> getDone(Map<String, String> condition);
 
-    void revoke(Long exampleInfoId);
+    void withdraw(Long withdrawExampleInfoId, Long withdrawExampleDetailsId);
+
+    void revoke(Long withdrawExampleInfoId);
 
 }

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

@@ -31,6 +31,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -123,6 +124,7 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
         List<Map<String, Object>> result = exampleDetailsService.listMaps(
                 Wrappers.<ExampleDetails>query()
                         .select("example_info_id exampleInfoId",
+                                "id exampleDetailsId",
                                 "handle_user_id userId", // 处理人id
                                 "remarks", // 审批意见
                                 "name_type type", // 处理类型
@@ -134,12 +136,6 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
                         .eq(ExampleDetails::getExampleInfoId, exampleInfo.getId())
                         .orderByAsc(BaseEntity::getId));
 
-        // 如果最后一个节点处理人是自己,可以撤回
-        Map<String, Object> lastNode = result.get(result.size() - 1);
-        if (result.size() > 1 && Convert.toLong(lastNode.get("userId")).equals(AuthUtil.getUserId())) {
-            lastNode.put("withdrawProcessNodeId", result.get(result.size() - 2).get("nodeId").toString());
-            lastNode.put("withdrawExampleInfoId", lastNode.get("exampleInfoId").toString());
-        }
 
         // 查询用户名称与岗位
         List<Long> userId = result.stream().map(item -> (Long) item.get("userId")).collect(Collectors.toList());
@@ -176,10 +172,20 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
             return result;
         }
 
+        Map<String, Object> lastNode = result.get(result.size() - 1);
+
+        // 如果最后一个节点处理人是自己,可以撤回
+        if (result.size() > 1 && Convert.toLong(lastNode.get("userId")).equals(AuthUtil.getUserId())) {
+            lastNode.put("withdrawProcessNodeId", result.get(result.size() - 2).get("nodeId").toString());
+            lastNode.put("withdrawExampleInfoId", lastNode.get("exampleInfoId").toString());
+            lastNode.put("withdrawExampleDetailsId", lastNode.get("exampleDetailsId").toString());
+        }
+
         // 如果下一个节点是开始节点,发起人是自己,可以撤销
         if (FlowConstant.START_CODE.equals(nextNode.getCode()) &&
                 AuthUtil.getUserId().equals(Convert.toLong(result.get(0).get("createUser")))) {
             lastNode.put("revokeExampleInfoId", lastNode.get("exampleInfoId").toString());
+            lastNode.put("revokeExampleDetailsId", lastNode.get("exampleDetailsId").toString());
         }
 
         next(result, nextNode, parentProcessNodeMap);
@@ -286,9 +292,36 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
         return page;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public void revoke(Long exampleInfoId) {
+    public void withdraw(Long withdrawExampleInfoId, Long withdrawExampleDetailsId) {
+        List<ExampleDetails> list = exampleDetailsService.list(
+                Wrappers.<ExampleDetails>lambdaQuery()
+                        .eq(ExampleDetails::getExampleInfoId, withdrawExampleInfoId)
+                        .ge(BaseEntity::getId, withdrawExampleDetailsId));
+        Assert.eqOne(list.size(), "下一审批节点已被处理,无法撤回");
+
+        ExampleDetails exampleDetails = list.get(0);
+        ProcessNode processNode = processNodeService.getById(exampleDetails.getProcessNodeId());
+
+        ExampleInfo exampleInfo = new ExampleInfo();
+        exampleInfo.setId(withdrawExampleInfoId);
+        exampleInfo.setProcessNodeId(processNode.getId());
+        exampleInfo.setProcessNodeCode(processNode.getCode());
+        updateById(exampleInfo);
+
+        exampleDetailsService.removeById(exampleDetails.getId());
+    }
 
+    @Override
+    public void revoke(Long withdrawExampleInfoId) {
+        ExampleInfo exampleInfo = getById(withdrawExampleInfoId);
+        Assert.eqTrue(FlowConstant.START_CODE.equals(exampleInfo.getProcessNodeCode()),
+                "下一节点已被处理,不可撤销");
+
+        exampleInfo.setHandleResult(HandleResultEnum.REVOKE.getType());
+        exampleInfo.setComplete(StatusConstant.YES);
+        updateById(exampleInfo);
     }
 
 

+ 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未通过
+     * 处理结果 1审批中 2已通过 3不通过 4已撤销
      */
     private Integer handleResult;
 

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

@@ -9,7 +9,7 @@ public enum HandleResultEnum {
     IN_PROGRESS(1, "审批中"),
     SUCCESS(2, "已通过"),
     FAIL(3, "不通过"),
-    revoke(4, "已撤销");
+    REVOKE(4, "已撤销");
 
     private final Integer type;
     private final String name;

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

@@ -20,6 +20,8 @@ public interface IFlowClient {
     String GET_JUMP_VO = ClientConstant.API_PREFIX + "/getJumpVO";
     String JUMP = ClientConstant.API_PREFIX + "/jump";
     String ROLL_BACK = ClientConstant.API_PREFIX + "/rollBack";
+    String WITHDRAW = ClientConstant.API_PREFIX + "/withdraw";
+    String REVOKE = ClientConstant.API_PREFIX + "/revoke";
 
     /**
      * 创建流程
@@ -60,4 +62,16 @@ public interface IFlowClient {
     @PostMapping(ROLL_BACK)
     void rollBack(@RequestBody ExampleResult result);
 
+    /**
+     * 撤回
+     */
+    @PostMapping(WITHDRAW)
+    R withdraw(@RequestParam Long withdrawExampleInfoId, @RequestParam Long withdrawExampleDetailsId);
+
+    /**
+     * 撤销
+     */
+    @PostMapping(REVOKE)
+    R revoke(@RequestParam Long revokeExampleInfoId);
+
 }