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