From bdcb64f0293f27e2dfb3de12a60f6e8412cb962b Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 26 五月 2022 01:45:22 +0800
Subject: [PATCH] 退费修改为 从证书地址中获取

---
 service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java |  440 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 359 insertions(+), 81 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 850445e..0f15842 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
@@ -2,39 +2,36 @@
 
 
 import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Transactional;
 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.FlowNode;
-import org.activiti.bpmn.model.SequenceFlow;
-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.HistoricActivityInstance;
+import org.activiti.bpmn.model.*;
+import org.activiti.engine.*;
 import org.activiti.engine.history.HistoricProcessInstance;
 import org.activiti.engine.history.HistoricTaskInstance;
 import org.activiti.engine.history.HistoricTaskInstanceQuery;
 import org.activiti.engine.impl.identity.Authentication;
-import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
 import org.activiti.engine.query.Query;
-import org.activiti.engine.runtime.Execution;
 import org.activiti.engine.runtime.ProcessInstance;
 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 com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -70,6 +67,9 @@
     @Autowired
     private RepositoryService repositoryService;
 
+    @Autowired
+    private IOaWorkflowDataInnerServiceSMO oaWorkflowDataInnerServiceSMOImpl;
+
 
     /**
      * 鍚姩娴佺▼
@@ -82,6 +82,12 @@
         //variables.put("reqJson", reqJson);
         variables.put("startUserId", reqJson.getString("createUserId"));
         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();
@@ -89,6 +95,20 @@
         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;
     }
 
@@ -237,17 +257,29 @@
     }
 
 
+    @Java110Transactional
     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("浠诲姟宸插鐞�");
+        }
+
+        //鍒ゆ柇鏄惁涓虹粨鏉熸祦绋�
+        if ("1500".equals(reqJson.getString("auditCode"))) {
+            doTaskFinish(reqJson);
+        } else {
+            //鎵╁睍 宸ヤ綔娴佸姛鑳�
+            doTaskAuditAgree(reqJson);
+        }
+
         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("startUserId", reqJson.getString("startUserId"));
+        variables.put("auditCode", reqJson.getString("auditCode"));
         taskService.complete(reqJson.getString("taskId"), variables);
-
         ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
         if (pi == null) {
             return true;
@@ -255,88 +287,229 @@
         return false;
     }
 
+    private void doTaskFinish(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);
+
+        if (oaWorkflowDataDtos == null || oaWorkflowDataDtos.size() < 1) {
+            return;
+        }
+        //淇敼 褰撳墠 涓哄畬鎴�
+        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);
+    }
+
+    /**
+     * 澶勭悊 瀹℃牳鐘舵��
+     *
+     * @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
+     */
+    @Java110Transactional
     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"));
+        //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;
     }
-
+    @Java110Transactional
     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("娴佺▼鏈惎鍔ㄦ垨宸叉墽琛屽畬鎴愶紝鏃犳硶閫�鍥�");
+            throw new IllegalArgumentException("浠诲姟宸插鐞�");
         }
-        List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()
-                .processInstanceBusinessKey(reqJson.getString("id"))
-                .orderByTaskCreateTime()
-                .asc()
-                .list();
-        String myTaskId = null;
-        HistoricTaskInstance myTask = null;
-        for (HistoricTaskInstance hti : htiList) {
-            if (reqJson.getString("curUserId").equals(hti.getAssignee())) {
-                myTaskId = hti.getId();
-                myTask = hti;
-                break;
-            }
+//        //閫�鍥炵粰鎻愪氦鑰�
+//        if ("1400".equals(reqJson.getString("auditCode"))) {
+//            String processInstanceId = task.getProcessInstanceId();
+//            Authentication.setAuthenticatedUserId(reqJson.getString("startUserId"));
+//            taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
+//            Map<String, Object> variables = new HashMap<String, Object>();
+//            variables.put("nextUserId", reqJson.getString("startUserId"));
+//            variables.put("auditCode", reqJson.getString("auditCode"));
+//            taskService.complete(reqJson.getString("taskId"), variables);
+//
+//            return true;
+//        }
+
+        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"));
         }
-        if (null == myTaskId) {
-            throw new IllegalArgumentException("璇ヤ换鍔¢潪褰撳墠鐢ㄦ埛鎻愪氦锛屾棤娉曢��鍥�");
-        }
-
-        String processDefinitionId = myTask.getProcessDefinitionId();
-        ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
-        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
-
-        //鍙橀噺
-//		Map<String, VariableInstance> variables = runtimeService.getVariableInstances(currentTask.getExecutionId());
-        String myActivityId = null;
-        List<HistoricActivityInstance> haiList = historyService.createHistoricActivityInstanceQuery()
-                .executionId(myTask.getExecutionId()).finished().list();
-        for (HistoricActivityInstance hai : haiList) {
-            if (myTaskId.equals(hai.getTaskId())) {
-                myActivityId = hai.getActivityId();
-                break;
-            }
-        }
-        FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId);
-
-
-        Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
-        String activityId = execution.getActivityId();
-        logger.warn("------->> activityId:" + activityId);
-        FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
-
-        //璁板綍鍘熸椿鍔ㄦ柟鍚�
-        List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
-        oriSequenceFlows.addAll(flowNode.getOutgoingFlows());
-
-        //娓呯悊娲诲姩鏂瑰悜
-        flowNode.getOutgoingFlows().clear();
-        //寤虹珛鏂版柟鍚�
-        List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
-        SequenceFlow newSequenceFlow = new SequenceFlow();
-        newSequenceFlow.setId("newSequenceFlowId");
-        newSequenceFlow.setSourceFlowElement(flowNode);
-        newSequenceFlow.setTargetFlowElement(myFlowNode);
-        newSequenceFlowList.add(newSequenceFlow);
-        flowNode.setOutgoingFlows(newSequenceFlowList);
-
-        Authentication.setAuthenticatedUserId(reqJson.getString("curUserId"));
-        taskService.addComment(task.getId(), task.getProcessInstanceId(), "閫�鍥烇紝" + reqJson.getString("auditMessage"));
-
-        Map<String, Object> currentVariables = new HashMap<String, Object>();
-        currentVariables.put("applier", reqJson.getString("curUserId"));
-        //瀹屾垚浠诲姟
-        taskService.complete(task.getId(), currentVariables);
-        //鎭㈠鍘熸柟鍚�
-        flowNode.setOutgoingFlows(oriSequenceFlows);
         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(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("startUserId"));
+        }
+        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) {
@@ -405,6 +578,111 @@
 
     }
 
+    @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();
+        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("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;
+                }
+                //缁撴潫
+                vars.put("auditCode", "1500");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    //true 鑾峰彇杈撳嚭鑺傜偣鍚嶇О
+                    taskObj.put("exit", outgoingFlow.getTargetFlowElement().getName());
+                    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"); // 闇�瑕佸墠鍙版寚瀹�
+                    }
+                    taskObj.put("next", outgoingFlow.getTargetFlowElement().getName());
+                }
+            }
+            //濡傛灉涓嬩竴涓负 缁撴潫鑺傜偣
+            if (targetFlowElement instanceof EndEvent) {
+                //true 鑾峰彇杈撳嚭鑺傜偣鍚嶇О
+                taskObj.put("exit", "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