home il y a 2 ans
Parent
commit
efbf5e5b3d

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

@@ -28,6 +28,15 @@ public class ExampleInfoController {
     private ExampleInfoService exampleInfoService;
 
     /**
+     * 代办
+     */
+    @PostMapping("/getWaitingProcessingPage")
+    public R getWaitingProcessingPage(@RequestBody Map<String, String> condition) {
+        List<Map<String, Object>> result = exampleInfoService.getWaitingProcessingPage(condition);
+        return R.data(result);
+    }
+
+    /**
      * 审批记录
      */
     @PostMapping("/record")
@@ -36,6 +45,5 @@ public class ExampleInfoController {
         return R.data(result);
     }
 
-
 }
 

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

@@ -14,6 +14,7 @@ import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.enums.HandleResultEnum;
+import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.params.ExampleResult;
 import com.fjhx.params.JumpVo;
 import com.fjhx.service.example.ExampleDetailsService;
@@ -86,7 +87,6 @@ public class FlowClient implements IFlowClient {
         exampleInfo.setFlowLinkNo(flowLinkNo);
         exampleInfo.setCacheData(cacheData);
 
-
         // 走默认流程,直接完成
         if (processTenant == null) {
             exampleInfo.setComplete(StatusConstant.YES);
@@ -162,7 +162,7 @@ public class FlowClient implements IFlowClient {
         // 返回值
         ExampleResult exampleResult = new ExampleResult();
 
-        // 创建流程实例
+        // 查询流程实例
         ExampleInfo oleExampleInfo = exampleInfoService.getOne(Wrappers.<ExampleInfo>lambdaQuery()
                 .eq(ExampleInfo::getFlowLinkNo, jumpVo.getFlowLinkNo())
                 .eq(ExampleInfo::getComplete, StatusConstant.NO));
@@ -185,40 +185,46 @@ public class FlowClient implements IFlowClient {
         // 赋值按钮处理方法
         exampleResult.setHandleType(jumpVo.getNameType());
 
+        // 不通过
         if (ButtonNameEnum.REJECT.getType().equals(jumpVo.getNameType())) {
-
-            // 不通过
             exampleInfo.setHandleResult(HandleResultEnum.FAIL.getType());
-
-        } else if (FlowConstant.END_CODE.equals(jumpVo.getJumpNodeCode())) {
-
-            // 通过
+        }
+        // 通过
+        else if (FlowConstant.END_CODE.equals(jumpVo.getJumpNodeCode())) {
             exampleInfo.setHandleResult(HandleResultEnum.SUCCESS.getType());
-
             // 赋值结束处理方法
             exampleResult.setHandleType(ButtonNameEnum.END.getType());
-
         }
 
         exampleInfo.setProcessNodeId(jumpVo.getJumpNodeId());
         exampleInfo.setProcessNodeCode(jumpVo.getJumpNodeCode());
+        exampleInfo.setHandleObjectType(jumpVo.getHandleObjectType());
+        exampleInfo.setHandleObjectIdSet(jumpVo.getHandleObjectIdSet());
 
         List<Long> exampleDetailsIdList = new ArrayList<>();
 
         // 流程结束
         if (FlowConstant.END_CODE.equals(jumpVo.getJumpNodeCode())) {
-
+            // 赋值流程完成
             exampleInfo.setComplete(StatusConstant.YES);
 
-            // 结束明细
+            // 流程明细
             ExampleDetails endExampleDetails = createExampleDetails(exampleInfo, ButtonNameEnum.END.getType());
-
             exampleDetailsService.saveBatch(Arrays.asList(exampleDetails, endExampleDetails));
             exampleDetailsIdList.add(exampleDetails.getId());
             exampleDetailsIdList.add(endExampleDetails.getId());
-        } else {
+        }
+        // 正常跳转
+        else {
+            // 流程明细
             exampleDetailsService.save(exampleDetails);
             exampleDetailsIdList.add(exampleDetails.getId());
+
+            // 如果跳转节点到发起(一直回退到发起人),处理人只能是发起人
+            if (FlowConstant.START_CODE.equals(jumpVo.getJumpNodeCode())) {
+                exampleInfo.setHandleObjectType(ProcessNodeHandleObjectTypeEnum.USER.getType());
+                exampleInfo.setHandleObjectIdSet(exampleInfo.getCreateUser().toString());
+            }
         }
 
         exampleInfoService.updateById(exampleInfo);
@@ -253,15 +259,17 @@ public class FlowClient implements IFlowClient {
         );
     }
 
+
     private void setJumpNode(JumpVo jumpVo, ProcessNodeButton processNodeButton, String nodeCode) {
         // 赋值按钮名称类型
         jumpVo.setNameType(processNodeButton.getNameType());
         jumpVo.setButtonId(processNodeButton.getId());
 
+        ProcessNode processNode;
+
         // 非分支跳转
         if (ObjectUtil.isNotEmpty(processNodeButton.getJumpNodeId())) {
-            jumpVo.setJumpNodeId(processNodeButton.getJumpNodeId());
-            jumpVo.setJumpNodeCode(processNodeButton.getJumpNodeCode());
+            processNode = processNodeService.getById(processNodeButton.getJumpNodeId());
         }
         // 分支跳转
         else {
@@ -269,16 +277,19 @@ public class FlowClient implements IFlowClient {
             Assert.notEmpty(nodeCode, FlowExplainConstant.SPECIFY_BRANCH_EMPTY);
 
             // 查询跳转到哪个分支节点
-            ProcessNode processNode = processNodeService.getOne(Wrappers.<ProcessNode>lambdaQuery()
+            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());
         }
+
+        jumpVo.setJumpNodeId(processNode.getId());
+        jumpVo.setJumpNodeCode(processNode.getCode());
+        jumpVo.setHandleObjectType(processNode.getHandleObjectType());
+        jumpVo.setHandleObjectIdSet(processNode.getHandleObjectIdSet());
+
     }
 
     /**

+ 9 - 1
hx-common/service-flow/src/main/java/com/fjhx/mapper/example/ExampleInfoMapper.java

@@ -1,7 +1,13 @@
 package com.fjhx.mapper.example;
 
-import com.fjhx.entity.example.ExampleInfo;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.example.ExampleInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -13,4 +19,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ExampleInfoMapper extends BaseMapper<ExampleInfo> {
 
+    List<Map<String, Object>> getWaitingProcessingPage(@Param("page") Page<ExampleInfo> page, @Param("ew") QueryWrapper<Object> wrapper);
+
 }

+ 13 - 0
hx-common/service-flow/src/main/java/com/fjhx/mapper/example/ExampleInfoMapper.xml

@@ -2,4 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mapper.example.ExampleInfoMapper">
 
+    <select id="getWaitingProcessingPage" resultType="java.util.Map">
+        SELECT pi.`code`       flowCode,
+               pi.module_name  moduleName,
+               ei.title        flowTitle,
+               ei.create_user  createUser,
+               ei.create_time  createTime,
+               ei.id           flowId,
+               ei.flow_link_no flowLinkNo
+        FROM example_info ei
+                 LEFT JOIN process_info pi ON ei.process_info_id = pi.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

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

@@ -16,6 +16,8 @@ import java.util.Map;
  */
 public interface ExampleInfoService extends BaseService<ExampleInfo> {
 
+    List<Map<String, Object>> getWaitingProcessingPage(Map<String, String> condition);
+
     List<Map<String, Object>> record(Long flowLinkNo);
 
 }

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

@@ -1,14 +1,17 @@
 package com.fjhx.service.example.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.BaseEntity;
 import com.fjhx.constants.FlowConstant;
+import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.example.ExampleDetails;
 import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.enums.ButtonNameEnum;
+import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.mapper.example.ExampleInfoMapper;
 import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleInfoService;
@@ -16,6 +19,8 @@ import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.UserClientUtil;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -45,6 +50,34 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
     private ProcessNodeButtonService processNodeButtonService;
 
     @Override
+    public List<Map<String, Object>> getWaitingProcessingPage(Map<String, String> condition) {
+
+        BladeUser user = AuthUtil.getUser();
+        Assert.notEmpty(user, "没有找到用户信息");
+
+        Long userId = user.getUserId();
+        String roleId = user.getRoleId();
+        String deptId = user.getDeptId();
+
+        QueryWrapper<Object> wrapper = Wrappers.query()
+                .eq("ei.complete", StatusConstant.NO)
+                .and(q -> q
+                        .eq("ei.handle_object_type", ProcessNodeHandleObjectTypeEnum.ALL.getType())
+                        .or(e -> e
+                                .eq("ei.handle_object_type", ProcessNodeHandleObjectTypeEnum.USER.getType())
+                                .like("ei.handle_object_id_set", userId))
+                        .or(e -> e
+                                .eq("ei.handle_object_type", ProcessNodeHandleObjectTypeEnum.ROLE.getType())
+                                .like("ei.handle_object_id_set", roleId))
+                        .or(e -> e
+                                .eq("ei.handle_object_type", ProcessNodeHandleObjectTypeEnum.DEPT.getType())
+                                .like("ei.handle_object_id_set", deptId))
+                );
+        
+        return baseMapper.getWaitingProcessingPage(createPage(condition), wrapper);
+    }
+
+    @Override
     public List<Map<String, Object>> record(Long flowLinkNo) {
         Assert.notEmpty(flowLinkNo, "业务关联编码不能为空");
 
@@ -70,89 +103,72 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
 
         // 查询所有节点
         List<ProcessNode> processNodeList = processNodeService.list(ProcessNode::getProcessTenantId, exampleInfo.getProcessTenantId());
-
         // 根据节点id封装为map
         Map<Long, ProcessNode> processNodeMap = processNodeList.stream().collect(Collectors.toMap(ProcessNode::getId, item -> item));
         // 根据父节点id封装为map
         Map<Long, List<ProcessNode>> parentProcessNodeMap = processNodeList.stream().collect(Collectors.groupingBy(ProcessNode::getParentId));
 
-        // 下一节点id
-        ProcessNode nextNode = null;
-
-        if (result.size() > 0) {
-
-            for (Map<String, Object> map : result) {
-
-                // 赋值节点名称
-                ProcessNode processNode = processNodeMap.get((Long) map.get("nodeId"));
-                String nodeName;
-                if (processNode != null) {
-                    nodeName = processNode.getName();
-                } else {
-                    nodeName = FlowConstant.END_NAME;
-                }
-
-                map.put("nodeName", nodeName);
+        for (Map<String, Object> map : result) {
 
-                // 处理类型名称
-                String typeName = ButtonNameEnum.get((Integer) map.get("type")).getName();
-                map.put("typeName", typeName);
+            // 赋值节点名称
+            ProcessNode processNode = processNodeMap.get((Long) map.get("nodeId"));
+            map.put("nodeName", processNode == null ? FlowConstant.END_NAME : processNode.getName());
 
-                // 赋值用户名称与岗位
-                Map<String, Object> userNameAndPostMap = userNameAndPost.get((Long) map.get("userId"));
-                if (userNameAndPostMap != null) {
-                    map.putAll(userNameAndPostMap);
-                }
+            // 处理类型名称
+            map.put("typeName", ButtonNameEnum.get((Integer) map.get("type")).getName());
 
+            // 赋值用户名称与岗位
+            Map<String, Object> userNameAndPostMap = userNameAndPost.get((Long) map.get("userId"));
+            if (userNameAndPostMap != null) {
+                map.putAll(userNameAndPostMap);
             }
 
-            // 下一个节点进行中
-            Map<String, Object> map = result.get(result.size() - 1);
-            List<ProcessNode> processNodes = parentProcessNodeMap.get((Long) map.get("nodeId"));
-            if (processNodes != null && processNodes.size() == 1) {
-                nextNode = processNodes.get(0);
-
-                HashMap<String, Object> item = new HashMap<>();
-                item.put("type", ButtonNameEnum.HAVE_IN_HAND.getType());
-                item.put("typeName", ButtonNameEnum.HAVE_IN_HAND.getName());
-                item.put("nodeName", nextNode.getName());
-                item.put("nodeId", nextNode.getId());
-
-                List<ProcessNodeButton> list = processNodeButtonService.list(ProcessNodeButton::getProcessNodeId, nextNode.getId());
-                List<HashMap<Object, Object>> collect = list.stream().map(ProcessNodeButtonItem -> {
-                    HashMap<Object, Object> itemResult = new HashMap<>();
-                    itemResult.put("id", ProcessNodeButtonItem.getId());
-                    itemResult.put("type", ProcessNodeButtonItem.getNameType());
-                    itemResult.put("typeName", ButtonNameEnum.getName(ProcessNodeButtonItem.getNameType()));
-                    return itemResult;
-                }).collect(Collectors.toList());
-
-                item.put("buttonList", collect);
-
-                result.add(item);
-
-                List<ProcessNode> nextProcessNodes = parentProcessNodeMap.get(nextNode.getId());
-                if (nextProcessNodes != null && nextProcessNodes.size() == 1) {
-                    nextNode = nextProcessNodes.get(0);
-                }
-            }
         }
 
-        // 寻找之后未处理的节点(未开始)
-        while (nextNode != null) {
-            HashMap<String, Object> map = new HashMap<>();
-            map.put("type", ButtonNameEnum.NOT_STARTED.getType());
-            map.put("typeName", ButtonNameEnum.NOT_STARTED.getName());
-            map.put("nodeName", nextNode.getName());
-            map.put("nodeId", nextNode.getId());
-            result.add(map);
-
-            List<ProcessNode> processNodes = parentProcessNodeMap.get(nextNode.getId());
-            if (processNodes != null && processNodes.size() == 1) {
-                nextNode = processNodes.get(0);
-            } else {
-                nextNode = null;
+        // 下一个节点进行中
+        ProcessNode nextNode = processNodeMap.get(exampleInfo.getProcessNodeId());
+
+        if (nextNode != null) {
+            HashMap<String, Object> item = new HashMap<>();
+            item.put("type", ButtonNameEnum.HAVE_IN_HAND.getType());
+            item.put("typeName", ButtonNameEnum.HAVE_IN_HAND.getName());
+            item.put("nodeName", nextNode.getName());
+            item.put("nodeId", nextNode.getId());
+
+            // 节点处理按钮
+            List<ProcessNodeButton> list = processNodeButtonService.list(ProcessNodeButton::getProcessNodeId, nextNode.getId());
+            List<HashMap<Object, Object>> handleButtonList = list.stream().map(ProcessNodeButtonItem -> {
+                HashMap<Object, Object> itemResult = new HashMap<>();
+                itemResult.put("id", ProcessNodeButtonItem.getId());
+                itemResult.put("type", ProcessNodeButtonItem.getNameType());
+                itemResult.put("typeName", ButtonNameEnum.getName(ProcessNodeButtonItem.getNameType()));
+                return itemResult;
+            }).collect(Collectors.toList());
+            item.put("buttonList", handleButtonList);
+            result.add(item);
+
+            // 寻找之后未处理的节点(未开始)
+            List<ProcessNode> nextProcessNodes = parentProcessNodeMap.get(nextNode.getId());
+            if (nextProcessNodes != null && nextProcessNodes.size() == 1) {
+                nextNode = nextProcessNodes.get(0);
+
+                while (nextNode != null) {
+                    HashMap<String, Object> map = new HashMap<>();
+                    map.put("type", ButtonNameEnum.NOT_STARTED.getType());
+                    map.put("typeName", ButtonNameEnum.NOT_STARTED.getName());
+                    map.put("nodeName", nextNode.getName());
+                    map.put("nodeId", nextNode.getId());
+                    result.add(map);
+
+                    List<ProcessNode> processNodes = parentProcessNodeMap.get(nextNode.getId());
+                    if (processNodes != null && processNodes.size() == 1) {
+                        nextNode = processNodes.get(0);
+                    } else {
+                        nextNode = null;
+                    }
+                }
             }
+
         }
 
         return result;

+ 0 - 5
hx-service-api/service-flow-api/src/main/java/com/fjhx/constants/FlowExplainConstant.java

@@ -55,9 +55,4 @@ public interface FlowExplainConstant {
 
     String EXAMPLE_INFO_NULL = "流程未发起或已结束";
 
-    String NOT_CODE = "没有找到节点编码";
-
-    String MULTIPLE_CODE = "匹配到多个节点编码";
-
-
 }

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

@@ -70,6 +70,16 @@ public class ExampleInfo extends BaseEntity {
     private String cacheData;
 
     /**
+     * 处理人类型
+     */
+    private Integer handleObjectType;
+
+    /**
+     * 指定类型id集合
+     */
+    private String handleObjectIdSet;
+
+    /**
      * 备注
      */
     private String remarks;

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

@@ -38,9 +38,10 @@ public interface IFlowClient {
                             @RequestParam(value = "cacheData", required = false) String cacheData);
 
     /**
-     * 获取按钮
+     * 获取跳转参数
      *
      * @param buttonId 按钮id
+     * @param nodeCode 节点编码
      * @return 按钮对象
      */
     @GetMapping(GET_JUMP_VO)

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

@@ -40,4 +40,14 @@ public class JumpVo {
      */
     private Integer nameType;
 
+    /**
+     * 处理人类型
+     */
+    private Integer handleObjectType;
+
+    /**
+     * 指定类型id集合
+     */
+    private String handleObjectIdSet;
+
 }

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

@@ -89,6 +89,7 @@ public class FlowConstructor {
         jumpVo.setRemarks(remarks);
         jumpVo.setCacheDataStr(cacheDataStr);
 
+
         result = flowJump(jumpVo);
         result.setDeleteExample(true);
 
@@ -96,7 +97,7 @@ public class FlowConstructor {
     }
 
     public ExampleResult jump(JumpVo jumpVo) {
-        return jump(jumpVo.getFlowLinkNo(), jumpVo.getButtonId(), jumpVo.getRemarks(), null);
+        return jump(jumpVo.getFlowLinkNo(), jumpVo.getButtonId(), jumpVo.getRemarks(), jumpVo.getCacheDataStr());
     }
 
     public ExampleResult jump(Long flowLinkNo, Long buttonId, String remarks) {

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

@@ -90,7 +90,7 @@ public class CommonFileController {
         map.put("processInfoId", "1111111111111111111111");
         map.put("processTenantId", "222222222222222222222");
 
-        ExampleResult result = flowConstructor().create(123456L, "测试开始流程", "测试开始流程", map);
+        ExampleResult result = flowConstructor().create(123456L, "测试流程", "测试开始流程", map);
 
         return R.success(result);
     }