From bdc870fab7c09b420079257fb05e3e08a5436ff9 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期三, 01 九月 2021 08:25:02 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

---
 service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java |  370 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 355 insertions(+), 15 deletions(-)

diff --git a/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java b/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
index 3fd32bc..13c1c7f 100644
--- a/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
+++ b/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
@@ -3,18 +3,30 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.PageDto;
 import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.oaWorkflowData.OaWorkflowDataDto;
 import com.java110.dto.user.UserDto;
 import com.java110.dto.workflow.WorkflowDto;
 import com.java110.entity.audit.AuditUser;
 import com.java110.intf.common.IOaWorkflowUserInnerServiceSMO;
 import com.java110.intf.common.IWorkflowInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowDataInnerServiceSMO;
 import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.po.oaWorkflowData.OaWorkflowDataPo;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.EndEvent;
+import org.activiti.bpmn.model.FlowElement;
+import org.activiti.bpmn.model.FlowNode;
+import org.activiti.bpmn.model.SequenceFlow;
+import org.activiti.bpmn.model.UserTask;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.RepositoryService;
 import org.activiti.engine.RuntimeService;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.history.HistoricProcessInstance;
@@ -26,6 +38,8 @@
 import org.activiti.engine.task.Comment;
 import org.activiti.engine.task.Task;
 import org.activiti.engine.task.TaskQuery;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -39,6 +53,7 @@
 @RestController
 public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements IOaWorkflowUserInnerServiceSMO {
 
+    private static Logger logger = LoggerFactory.getLogger(OaWorkflowUserInnerServiceSMOImpl.class);
     @Autowired
     private ProcessEngine processEngine;
 
@@ -49,10 +64,19 @@
     private TaskService taskService;
 
     @Autowired
+    private HistoryService historyService;
+
+    @Autowired
     private IUserInnerServiceSMO userInnerServiceSMOImpl;
 
     @Autowired
     private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl;
+
+    @Autowired
+    private RepositoryService repositoryService;
+
+    @Autowired
+    private IOaWorkflowDataInnerServiceSMO oaWorkflowDataInnerServiceSMOImpl;
 
 
     /**
@@ -65,19 +89,39 @@
         Map<String, Object> variables = new HashMap<String, Object>();
         //variables.put("reqJson", reqJson);
         variables.put("startUserId", reqJson.getString("createUserId"));
-        ProcessInstance processInstance = runtimeService.startProcessInstanceById(getWorkflowDto(reqJson.getString("processDefinitionId")), reqJson.getString("id"), variables);
+        variables.put("nextUserId", reqJson.getString("createUserId"));
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("createUserId"));
+        List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(users, "鐢ㄦ埛涓嶅瓨鍦�");
+
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(getWorkflowDto(reqJson.getString("flowId")), reqJson.getString("id"), variables);
         //灏嗗緱鍒扮殑瀹炰緥娴佺▼id鍊艰祴缁欎箣鍓嶈缃殑鍙橀噺
         String processInstanceId = processInstance.getId();
         // System.out.println("娴佺▼寮�鍚垚鍔�.......瀹炰緥娴佺▼id:" + processInstanceId);
         reqJson.put("processInstanceId", processInstanceId);
         //绗竴涓妭鐐硅嚜鍔ㄦ彁浜�
         //autoFinishFirstTask(reqJson);
+        //鍒峰叆鎵╁睍琛�
+        OaWorkflowDataPo oaWorkflowDataPo = null;
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
+        oaWorkflowDataPo.setPreDataId("-1");
+        oaWorkflowDataPo.setStaffId(reqJson.getString("createUserId"));
+        oaWorkflowDataPo.setStaffName(users.get(0).getName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
         return reqJson;
     }
 
-    //WorkflowDto.DEFAULT_PROCESS +
-    private String getWorkflowDto(String processDefinitionId) {
-        return  processDefinitionId;
+    private String getWorkflowDto(String flowId) {
+        return WorkflowDto.DEFAULT_PROCESS + flowId;
     }
 
     /**
@@ -108,7 +152,7 @@
      */
     public long getUserTaskCount(@RequestBody AuditUser user) {
         TaskService taskService = processEngine.getTaskService();
-        TaskQuery query = taskService.createTaskQuery().processDefinitionId(getWorkflowDto(user.getProcessDefinitionKey()));
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey(getWorkflowDto(user.getFlowId()));
         query.taskAssignee(user.getUserId());
         return query.count();
     }
@@ -120,8 +164,8 @@
      */
     public List<JSONObject> getUserTasks(@RequestBody AuditUser user) {
         TaskService taskService = processEngine.getTaskService();
-        TaskQuery query = taskService.createTaskQuery().processDefinitionId(getWorkflowDto(user.getProcessDefinitionKey()));
-        ;
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey(getWorkflowDto(user.getFlowId()));
+
         query.taskAssignee(user.getUserId());
         query.orderByTaskCreateTime().desc();
         List<Task> list = null;
@@ -140,6 +184,7 @@
             //4.浣跨敤娴佺▼瀹炰緥瀵硅薄鑾峰彇BusinessKey
             String business_key = pi.getBusinessKey();
             taskBusinessKeyMap.put(business_key, task.getId());
+            taskBusinessKeyMap.put("taskId", task.getId());
             taskBusinessKeyMap.put("id", business_key);
             tasks.add(taskBusinessKeyMap);
         }
@@ -156,11 +201,11 @@
     public long getUserHistoryTaskCount(@RequestBody AuditUser user) {
         HistoryService historyService = processEngine.getHistoryService();
 //        Query query = historyService.createHistoricTaskInstanceQuery()
-//                .processDefinitionId("complaint")
+//                .processDefinitionKey("complaint")
 //                .taskAssignee(user.getUserId());
 
         HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
-                .processDefinitionId(getWorkflowDto(user.getProcessDefinitionKey()))
+                .processDefinitionKey(getWorkflowDto(user.getFlowId()))
                 .taskAssignee(user.getUserId())
                 .finished();
         if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
@@ -183,7 +228,7 @@
         HistoryService historyService = processEngine.getHistoryService();
 
         HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
-                .processDefinitionId(getWorkflowDto(user.getProcessDefinitionKey()))
+                .processDefinitionKey(getWorkflowDto(user.getFlowId()))
                 .taskAssignee(user.getUserId())
                 .finished();
         if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
@@ -204,14 +249,18 @@
         List<JSONObject> tasks = new ArrayList<>();
         List<String> complaintIds = new ArrayList<>();
         for (HistoricTaskInstance task : list) {
+            taskBusinessKeyMap = new JSONObject();
             String processInstanceId = task.getProcessInstanceId();
             //3.浣跨敤娴佺▼瀹炰緥锛屾煡璇�
             HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
             //4.浣跨敤娴佺▼瀹炰緥瀵硅薄鑾峰彇BusinessKey
             String business_key = pi.getBusinessKey();
             taskBusinessKeyMap.put(business_key, task.getId());
+            taskBusinessKeyMap.put("taskId", task.getId());
+            taskBusinessKeyMap.put("id", business_key);
             tasks.add(taskBusinessKeyMap);
         }
+
         return tasks;
     }
 
@@ -219,21 +268,218 @@
     public boolean completeTask(@RequestBody JSONObject reqJson) {
         TaskService taskService = processEngine.getTaskService();
         Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
+        if (task == null) {
+            throw new IllegalArgumentException("浠诲姟宸插鐞�");
+        }
+
+        //鎵╁睍 宸ヤ綔娴佸姛鑳�
+        doTaskAuditAgree(reqJson);
+
         String processInstanceId = task.getProcessInstanceId();
-        Authentication.setAuthenticatedUserId(reqJson.getString("createUserId"));
+        Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId"));
         taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
         Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("nextUserId", reqJson.getString("nextUserId"));
         variables.put("auditCode", reqJson.getString("auditCode"));
-        variables.put("currentUserId", reqJson.getString("createUserId"));
-        variables.put("flag", "1200".equals(reqJson.getString("auditCode")) ? "false" : "true");
-        variables.put("startUserId", reqJson.getString("startUserId"));
         taskService.complete(reqJson.getString("taskId"), variables);
-
         ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
         if (pi == null) {
             return true;
         }
         return false;
+    }
+
+    /**
+     * 澶勭悊 瀹℃牳鐘舵��
+     *
+     * @param reqJson
+     */
+    private void doTaskAuditAgree(JSONObject reqJson) {
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("nextUserId"));
+        List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(users, "鐢ㄦ埛涓嶅瓨鍦�");
+
+        String preDataId = "-1";
+        //鏌ヨ褰撳墠鑺傜偣
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        OaWorkflowDataPo oaWorkflowDataPo = null;
+        if (oaWorkflowDataDtos == null || oaWorkflowDataDtos.size() < 1) {
+            oaWorkflowDataPo = new OaWorkflowDataPo();
+            oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+            oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+            oaWorkflowDataPo.setContext("");
+            oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+            oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
+            oaWorkflowDataPo.setPreDataId(preDataId);
+            oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+            oaWorkflowDataPo.setStaffName(users.get(0).getName());
+            oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+            oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+            oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+            return;
+        }
+        //淇敼 褰撳墠 涓哄畬鎴�
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
+
+        //濡傛灉涓�-1 涓嶆彃鍏ヤ换鍔�
+        if ("-1".equals(reqJson.getString("nextUserId"))) {
+            return;
+        }
+
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+        oaWorkflowDataPo.setContext("");
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
+        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+        oaWorkflowDataPo.setStaffName(users.get(0).getName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+    }
+
+    /**
+     * 杞姙
+     *
+     * @param reqJson
+     * @return
+     */
+    public boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson) {
+
+        //鏌ヨ褰撳墠鑺傜偣
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        Assert.listOnlyOne(oaWorkflowDataDtos, "鏁版嵁閿欒鏈寘鍚笂绾ф暟鎹�");
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("nextUserId"));
+        List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(users, "鐢ㄦ埛涓嶅瓨鍦�");
+
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
+        taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
+        //taskService.setOwner(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
+
+        OaWorkflowDataPo oaWorkflowDataPo = null;
+        //淇敼 褰撳墠 涓哄畬鎴�
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
+
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+        oaWorkflowDataPo.setContext("");
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_TRANSFER);
+        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+        oaWorkflowDataPo.setStaffName(users.get(0).getName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+        return true;
+    }
+
+    public boolean goBackTask(@RequestBody JSONObject reqJson) {
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
+        if (task == null) {
+            throw new IllegalArgumentException("浠诲姟宸插鐞�");
+        }
+
+        String event = doTaskAuditUnAgree(reqJson);
+        if (OaWorkflowDataDto.EVENT_COMMIT.equals(event)) { //鎻愪氦鐘舵��
+            String processInstanceId = task.getProcessInstanceId();
+            Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId"));
+            taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
+            Map<String, Object> variables = new HashMap<String, Object>();
+            variables.put("nextUserId", reqJson.getString("nextUserId"));
+            variables.put("auditCode", reqJson.getString("auditCode"));
+            taskService.complete(reqJson.getString("taskId"), variables);
+        } else { //杞崟
+            taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
+        }
+        return true;
+    }
+
+    /**
+     * 瀹℃牳涓嶅悓鎰� 閫�鍥�
+     *
+     * @param reqJson
+     */
+    private String doTaskAuditUnAgree(JSONObject reqJson) {
+        //鏌ヨ褰撳墠鑺傜偣
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        Assert.listOnlyOne(oaWorkflowDataDtos, "娌℃湁涓婄骇澶勭悊浜�");
+
+        if ("-1".equals(oaWorkflowDataDtos.get(0).getPreDataId())) {
+            throw new IllegalArgumentException("娌℃湁涓婄骇澶勭悊浜�");
+        }
+
+        oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setDataId(reqJson.getString(oaWorkflowDataDtos.get(0).getPreDataId()));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> preOaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        //灏嗙幇鍦ㄨ妭鐐瑰鐞嗕负瀹屾垚
+        OaWorkflowDataPo oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
+
+        reqJson.put("nextUserId", preOaWorkflowDataDtos.get(0).getStaffId());
+        if ("1400".equals(reqJson.getString("auditCode"))) {
+            reqJson.put("nextUserId", reqJson.getString("createUserId"));
+        }
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(preOaWorkflowDataDtos.get(0).getBusinessKey());
+        oaWorkflowDataPo.setFlowId(preOaWorkflowDataDtos.get(0).getFlowId());
+        oaWorkflowDataPo.setContext("");
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(preOaWorkflowDataDtos.get(0).getEvent());
+        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getPreDataId());
+        oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+        oaWorkflowDataPo.setStaffName(preOaWorkflowDataDtos.get(0).getStaffName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(preOaWorkflowDataDtos.get(0).getStoreId());
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+
+        return oaWorkflowDataDtos.get(0).getEvent();
     }
 
     public List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson) {
@@ -302,6 +548,100 @@
 
     }
 
+    @Override
+    public List<JSONObject> nextAllNodeTaskList(@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();
+        boolean isReturn = false;
+        //閬嶅巻杈撳嚭杩炵嚎
+        for (SequenceFlow outgoingFlow : outgoingFlows) {
+            //鑾峰彇杈撳嚭鑺傜偣鍏冪礌
+            FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
+            isReturn = false;
+            //鎺掗櫎闈炵敤鎴蜂换鍔℃帴鐐�
+            if (targetFlowElement instanceof UserTask) {
+                //鍒ゆ柇杈撳嚭鑺傜偣鐨別l琛ㄨ揪寮�
+                Map vars = new HashMap();
+                vars.put("auditCode", "1200");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    //true 鑾峰彇杈撳嚭鑺傜偣鍚嶇О
+                    taskObj.put("back", outgoingFlow.getTargetFlowElement().getName());
+                    isReturn = true;
+                }
+                vars.put("auditCode", "1400");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    //true 鑾峰彇杈撳嚭鑺傜偣鍚嶇О
+                    taskObj.put("backIndex", outgoingFlow.getTargetFlowElement().getName());
+                    isReturn = true;
+                }
+                if (!isReturn) {
+                    String assignee = ((UserTask) targetFlowElement).getAssignee();
+                    if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < 0) {
+                        taskObj.put("assignee", assignee); // 涓嬩竴鑺傜偣澶勭悊浜�
+                    }
+                }
+            }
+
+            //濡傛灉涓嬩竴涓负 缁撴潫鑺傜偣
+            if (targetFlowElement instanceof EndEvent) {
+                Map vars = new HashMap();
+                vars.put("auditCode", "1100");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    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("auditCode")) {
+                if (!vars.containsKey("auditCode")) {
+                    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("auditCode"))) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
 
     public ProcessEngine getProcessEngine() {
         return processEngine;

--
Gitblit v1.8.0