From 020fe8a2568425843c2197e5a8888de9d64648c0 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 24 三月 2022 18:53:45 +0800
Subject: [PATCH] 合并泰安代码

---
 service-common/src/main/java/com/java110/common/smo/impl/WorkflowV1InnerServiceSMOImpl.java |  142 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 128 insertions(+), 14 deletions(-)

diff --git a/service-common/src/main/java/com/java110/common/smo/impl/WorkflowV1InnerServiceSMOImpl.java b/service-common/src/main/java/com/java110/common/smo/impl/WorkflowV1InnerServiceSMOImpl.java
index aba9a03..eaa1672 100644
--- a/service-common/src/main/java/com/java110/common/smo/impl/WorkflowV1InnerServiceSMOImpl.java
+++ b/service-common/src/main/java/com/java110/common/smo/impl/WorkflowV1InnerServiceSMOImpl.java
@@ -16,20 +16,28 @@
 package com.java110.common.smo.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.java110.common.dao.IWorkflowV1ServiceDao;
-import com.java110.intf.common.IWorkflowV1InnerServiceSMO;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.PageDto;
 import com.java110.dto.workflow.WorkflowDto;
+import com.java110.intf.common.IWorkflowV1InnerServiceSMO;
 import com.java110.po.workflow.WorkflowPo;
 import com.java110.utils.util.BeanConvertUtil;
-import com.java110.core.base.smo.BaseServiceSMO;
-import com.java110.dto.user.UserDto;
-import com.java110.dto.PageDto;
+import com.java110.utils.util.StringUtil;
+import org.activiti.bpmn.model.*;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 绫昏〃杩帮細 鏈嶅姟涔嬪墠璋冪敤鐨勬帴鍙e疄鐜扮被锛屼笉瀵瑰鎻愪緵鎺ュ彛鑳藉姏 鍙敤浜庢帴鍙e缓璋冪敤
@@ -45,28 +53,35 @@
     @Autowired
     private IWorkflowV1ServiceDao workflowV1ServiceDaoImpl;
 
+    @Autowired
+    private ProcessEngine processEngine;
+
+
+    @Autowired
+    private RepositoryService repositoryService;
+
 
     @Override
-    public int saveWorkflow(@RequestBody  WorkflowPo workflowPo) {
+    public int saveWorkflow(@RequestBody WorkflowPo workflowPo) {
         int saveFlag = workflowV1ServiceDaoImpl.saveWorkflowInfo(BeanConvertUtil.beanCovertMap(workflowPo));
         return saveFlag;
     }
 
-     @Override
-    public int updateWorkflow(@RequestBody  WorkflowPo workflowPo) {
+    @Override
+    public int updateWorkflow(@RequestBody WorkflowPo workflowPo) {
         int saveFlag = workflowV1ServiceDaoImpl.updateWorkflowInfo(BeanConvertUtil.beanCovertMap(workflowPo));
         return saveFlag;
     }
 
-     @Override
-    public int deleteWorkflow(@RequestBody  WorkflowPo workflowPo) {
-       workflowPo.setStatusCd("1");
-       int saveFlag = workflowV1ServiceDaoImpl.updateWorkflowInfo(BeanConvertUtil.beanCovertMap(workflowPo));
-       return saveFlag;
+    @Override
+    public int deleteWorkflow(@RequestBody WorkflowPo workflowPo) {
+        workflowPo.setStatusCd("1");
+        int saveFlag = workflowV1ServiceDaoImpl.updateWorkflowInfo(BeanConvertUtil.beanCovertMap(workflowPo));
+        return saveFlag;
     }
 
     @Override
-    public List<WorkflowDto> queryWorkflows(@RequestBody  WorkflowDto workflowDto) {
+    public List<WorkflowDto> queryWorkflows(@RequestBody WorkflowDto workflowDto) {
 
         //鏍¢獙鏄惁浼犱簡 鍒嗛〉淇℃伅
 
@@ -84,6 +99,105 @@
 
     @Override
     public int queryWorkflowsCount(@RequestBody WorkflowDto workflowDto) {
-        return workflowV1ServiceDaoImpl.queryWorkflowsCount(BeanConvertUtil.beanCovertMap(workflowDto));    }
+        return workflowV1ServiceDaoImpl.queryWorkflowsCount(BeanConvertUtil.beanCovertMap(workflowDto));
+    }
+
+
+    /**
+     * @param reqJson {
+     *                taskId:"",
+     *                startUserId:""
+     *                }
+     * @return
+     */
+    @Override
+    public List<JSONObject> getWorkflowNextNode(@RequestBody JSONObject reqJson) {
+        List<JSONObject> tasks = new ArrayList<>();
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
+        if (task == null) {
+            throw new IllegalArgumentException("浠诲姟宸插鐞�");
+        }
+        BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
+        FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
+        //鑾峰彇褰撳墠鑺傜偣杈撳嚭杩炵嚎
+        List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
+        JSONObject taskObj = null;
+        taskObj = new JSONObject();
+        taskObj.put("assignee", "-1"); //  榛樿 涓嶉渶瑕佹寚瀹氫笅涓�涓鐞嗕汉 琛ㄧず缁撴潫
+        boolean isReturn = false;
+        //閬嶅巻杈撳嚭杩炵嚎
+        for (SequenceFlow outgoingFlow : outgoingFlows) {
+            //鑾峰彇杈撳嚭鑺傜偣鍏冪礌
+            FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
+            isReturn = false;
+            //鎺掗櫎闈炵敤鎴蜂换鍔℃帴鐐�
+            if (targetFlowElement instanceof UserTask) {
+                //鍒ゆ柇杈撳嚭鑺傜偣鐨別l琛ㄨ揪寮�
+                Map vars = new HashMap();
+                vars.put("flag", "false"); // 1100
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    isReturn = true;
+                }
+                if (!isReturn) {
+                    String assignee = ((UserTask) targetFlowElement).getAssignee();
+                    if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < 0) {
+                        taskObj.put("assignee", assignee); // 涓嬩竴鑺傜偣澶勭悊浜�
+                    }
+                    if ("${startUserId}".equals(assignee)) {
+                        taskObj.put("assignee", reqJson.getString("startUserId")); // 寮�濮嬩汉
+                    }
+                    if ("${nextUserId}".equals(assignee)) {
+                        taskObj.put("assignee", "-2"); // 闇�瑕佸墠鍙版寚瀹�
+                    }
+                }
+            }
+            //濡傛灉涓嬩竴涓负 缁撴潫鑺傜偣
+            if (targetFlowElement instanceof EndEvent) {
+                //true 鑾峰彇杈撳嚭鑺傜偣鍚嶇О
+                taskObj.put("assignee", "-1");
+            }
+        }
+        tasks.add(taskObj);
+        return tasks;
+    }
+
+    /**
+     * el琛ㄨ揪寮忓垽鏂�
+     *
+     * @param expression
+     * @param vars
+     * @return
+     */
+    private static boolean isCondition(String expression, Map<String, Object> vars) {
+        if (expression == null || expression == "") {
+            return false;
+        }
+
+        //鍒嗗壊琛ㄨ揪寮�
+        String[] exprArr = expression.split("[{}$&]");
+        for (String expr : exprArr) {
+            //鏄惁鍖呭惈閿甿essage
+            if (expr.contains("flag")) {
+                if (!vars.containsKey("flag")) {
+                    continue;
+                }
+                if (expr.contains("==")) {
+                    String[] primes = expr.split("==");
+                    String valExpr = primes[1].trim();
+                    if (valExpr.startsWith("'")) {
+                        valExpr = valExpr.substring(1);
+                    }
+                    if (valExpr.endsWith("'")) {
+                        valExpr = valExpr.substring(0, valExpr.length() - 1);
+                    }
+                    if (primes.length == 2 && valExpr.equals(vars.get("flag"))) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
 
 }

--
Gitblit v1.8.0