From 9c44f5fdbfc8a6329c8a1987e8a733affb231f2f Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期六, 20 六月 2020 15:36:23 +0800
Subject: [PATCH] 工作流部署完成
---
service-common/src/main/java/com/java110/common/smo/impl/WorkflowInnerServiceSMOImpl.java | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 231 insertions(+), 8 deletions(-)
diff --git a/service-common/src/main/java/com/java110/common/smo/impl/WorkflowInnerServiceSMOImpl.java b/service-common/src/main/java/com/java110/common/smo/impl/WorkflowInnerServiceSMOImpl.java
index 1b68a09..6406445 100644
--- a/service-common/src/main/java/com/java110/common/smo/impl/WorkflowInnerServiceSMOImpl.java
+++ b/service-common/src/main/java/com/java110/common/smo/impl/WorkflowInnerServiceSMOImpl.java
@@ -2,13 +2,29 @@
import com.java110.common.dao.IWorkflowServiceDao;
-import com.java110.core.smo.common.IWorkflowInnerServiceSMO;
-import com.java110.dto.workflow.WorkflowDto;
-import com.java110.utils.util.BeanConvertUtil;
import com.java110.core.base.smo.BaseServiceSMO;
-import com.java110.dto.user.UserDto;
+import com.java110.core.smo.common.IWorkflowInnerServiceSMO;
import com.java110.core.smo.user.IUserInnerServiceSMO;
import com.java110.dto.PageDto;
+import com.java110.dto.user.UserDto;
+import com.java110.dto.workflow.WorkflowDto;
+import com.java110.dto.workflow.WorkflowStepDto;
+import com.java110.dto.workflow.WorkflowStepStaffDto;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
+import org.activiti.bpmn.BpmnAutoLayout;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.EndEvent;
+import org.activiti.bpmn.model.ExclusiveGateway;
+import org.activiti.bpmn.model.ParallelGateway;
+import org.activiti.bpmn.model.Process;
+import org.activiti.bpmn.model.SequenceFlow;
+import org.activiti.bpmn.model.StartEvent;
+import org.activiti.bpmn.model.UserTask;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.repository.Deployment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -34,7 +50,7 @@
private IUserInnerServiceSMO userInnerServiceSMOImpl;
@Override
- public List<WorkflowDto> queryWorkflows(@RequestBody WorkflowDto workflowDto) {
+ public List<WorkflowDto> queryWorkflows(@RequestBody WorkflowDto workflowDto) {
//鏍¢獙鏄惁浼犱簡 鍒嗛〉淇℃伅
@@ -64,7 +80,7 @@
* 浠庣敤鎴峰垪琛ㄤ腑鏌ヨ鐢ㄦ埛锛屽皢鐢ㄦ埛涓殑淇℃伅 鍒锋柊鍒� floor瀵硅薄涓�
*
* @param workflow 灏忓尯宸ヤ綔娴佷俊鎭�
- * @param users 鐢ㄦ埛鍒楄〃
+ * @param users 鐢ㄦ埛鍒楄〃
*/
private void refreshWorkflow(WorkflowDto workflow, List<UserDto> users) {
for (UserDto user : users) {
@@ -80,7 +96,7 @@
* @param workflows 灏忓尯妤间俊鎭�
* @return 鎵归噺userIds 淇℃伅
*/
- private String[] getUserIds(List<WorkflowDto> workflows) {
+ private String[] getUserIds(List<WorkflowDto> workflows) {
List<String> userIds = new ArrayList<String>();
for (WorkflowDto workflow : workflows) {
userIds.add(workflow.getFlowId());
@@ -89,9 +105,216 @@
return userIds.toArray(new String[userIds.size()]);
}
+ /**
+ * @Date锛�2017/11/24
+ * @Description锛氬垱寤烘祦绋嬪苟閮ㄧ讲
+ */
+ protected void addFlowDeployment(@RequestBody WorkflowDto workflowDto) {
+
+ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+
+// RepositoryService repositoryService = processEngine.getRepositoryService();
+// repositoryService.deleteDeployment("1");
+
+ // 1. 寤虹珛妯″瀷
+ BpmnModel model = new BpmnModel();
+ Process process = new Process();
+ model.addProcess(process);
+ process.setId(workflowDto.getFlowId());
+ process.setName(workflowDto.getFlowName());
+ process.setDocumentation(workflowDto.getDescrible());
+ //娣诲姞娴佺▼
+ //寮�濮嬭妭鐐�
+ process.addFlowElement(createStartEvent());
+ List<WorkflowStepDto> workflowStepDtos = workflowDto.getWorkflowSteps();
+ for (int i = 0; i < workflowStepDtos.size(); i++) {
+ WorkflowStepDto step = workflowStepDtos.get(i);
+ //鍒ゆ柇鏄惁浼氱
+ if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(step.getType())) {
+ //浼氱
+ //鍔犲叆骞惰缃戝叧-鍒嗘敮
+ process.addFlowElement(createParallelGateway("parallelGateway-fork" + i, "骞惰缃戝叧-鍒嗘敮" + i));
+ //鑾峰彇瑙掕壊涓嬫墍鏈夌敤鎴�
+ List<WorkflowStepStaffDto> userList = step.getWorkflowStepStaffs();
+ for (int u = 0; u < userList.size(); u++) {
+ //骞惰缃戝叧鍒嗘敮鐨勫鏍歌妭鐐�
+ process.addFlowElement(createUserTask("userTask" + i + u, "骞惰缃戝叧鍒嗘敮鐢ㄦ埛瀹℃牳鑺傜偣" + i + u, userList.get(u).getStaffId()));
+ }
+ //骞惰缃戝叧-姹囪仛
+ process.addFlowElement(createParallelGateway("parallelGateway-join" + i, "骞惰缃戝叧鍒�-姹囪仛" + i));
+
+ } else {
+ //鏅�氭祦杞�
+ //瀹℃牳鑺傜偣
+ process.addFlowElement(createGroupTask("task" + i, "缁勫鏍歌妭鐐�" + i, step.getWorkflowStepStaffs().get(0).getStaffId()));
+ //鍥為��鑺傜偣
+ process.addFlowElement(createUserTask("repulse" + i, "鍥為��鑺傜偣" + i, "${startUserId}"));
+ }
+ }
+ //缁撴潫鑺傜偣
+ process.addFlowElement(createEndEvent());
+
+ //杩炵嚎
+ for (int y = 0; y < workflowStepDtos.size(); y++) {
+ WorkflowStepDto step = workflowStepDtos.get(y);
+ //鏄惁浼氱
+ if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(step.getType())) {
+ //浼氱
+ //鍒ゆ柇鏄惁绗竴涓妭鐐�
+ if (y == 0) {
+ //寮�濮嬭妭鐐瑰拰骞惰缃戝叧-鍒嗘敮杩炵嚎
+ process.addFlowElement(createSequenceFlow("startEvent", "parallelGateway-fork" + y, "寮�濮嬭妭鐐瑰埌骞惰缃戝叧-鍒嗘敮" + y, ""));
+ } else {
+ //瀹℃牳鑺傜偣鎴栬�呭苟琛岀綉鍏�-姹囪仛鍒板苟琛岀綉鍏�-鍒嗘敮
+ //鍒ゆ柇涓婁竴涓妭鐐规槸鍚︽槸浼氱
+ if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(workflowStepDtos.get(y - 1).getType())) {
+ process.addFlowElement(createSequenceFlow("parallelGateway-join" + (y - 1), "parallelGateway-fork" + y, "骞惰缃戝叧-姹囪仛鍒板苟琛岀綉鍏�-鍒嗘敮" + y, ""));
+ } else {
+ process.addFlowElement(createSequenceFlow("task" + (y - 1), "parallelGateway-fork" + y, "涓婁竴涓鏍歌妭鐐瑰埌骞惰缃戝叧-鍒嗘敮" + y, ""));
+ }
+ }
+ //骞惰缃戝叧-鍒嗘敮鍜屼細绛剧敤鎴疯繛绾匡紝浼氱鐢ㄦ埛鍜屽苟琛岀綉鍏�-姹囪仛杩炵嚎
+ List<WorkflowStepStaffDto> userList = step.getWorkflowStepStaffs();
+ for (int u = 0; u < userList.size(); u++) {
+ process.addFlowElement(createSequenceFlow("parallelGateway-fork" + y, "userTask" + y + u, "骞惰缃戝叧-鍒嗘敮鍒颁細绛剧敤鎴�" + y + u, ""));
+ process.addFlowElement(createSequenceFlow("userTask" + y + u, "parallelGateway-join" + y, "浼氱鐢ㄦ埛鍒板苟琛岀綉鍏�-姹囪仛", ""));
+ }
+ //鏈�鍚庝竴涓妭鐐� 骞惰缃戝叧-姹囪仛鍒扮粨鏉熻妭鐐�
+ if (y == (userList.size() - 1)) {
+ process.addFlowElement(createSequenceFlow("parallelGateway-join" + y, "endEvent", "骞惰缃戝叧-姹囪仛鍒扮粨鏉熻妭鐐�", ""));
+ }
+ } else {
+ //鏅�氭祦杞�
+ //绗竴涓妭鐐�
+ if (y == 0) {
+ //寮�濮嬭妭鐐瑰拰瀹℃牳鑺傜偣1
+ process.addFlowElement(createSequenceFlow("startEvent", "task" + y, "寮�濮嬭妭鐐瑰埌瀹℃牳鑺傜偣" + y, ""));
+ } else {
+ //鍒ゆ柇涓婁竴涓妭鐐规槸鍚︿細绛�
+ if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(workflowStepDtos.get(y - 1).getType())) {
+ //浼氱
+ //骞惰缃戝叧-姹囪仛鍒板鏍歌妭鐐�
+ process.addFlowElement(createSequenceFlow("parallelGateway-join" + (y - 1), "task" + y, "骞惰缃戝叧-姹囪仛鍒板鏍歌妭鐐�" + y, ""));
+ } else {
+ //鏅��
+ process.addFlowElement(createSequenceFlow("task" + (y - 1), "task" + y, "瀹℃牳鑺傜偣" + (y - 1) + "鍒板鏍歌妭鐐�" + y, "${flag=='true'}"));
+ }
+ }
+ //鏄惁鏈�鍚庝竴涓妭鐐�
+ if (y == (workflowStepDtos.size() - 1)) {
+ //瀹℃牳鑺傜偣鍒扮粨鏉熻妭鐐�
+ process.addFlowElement(createSequenceFlow("task" + y, "endEvent", "瀹℃牳鑺傜偣" + y + "鍒扮粨鏉熻妭鐐�", "${flag=='true'}"));
+ }
+ //瀹℃牳鑺傜偣鍒板洖閫�鑺傜偣
+ process.addFlowElement(createSequenceFlow("task" + y, "repulse" + y, "瀹℃牳涓嶉�氳繃-鎵撳洖" + y, "${flag=='false'}"));
+ process.addFlowElement(createSequenceFlow("repulse" + y, "task" + y, "鍥為��鑺傜偣鍒板鏍歌妭鐐�" + y, ""));
+ }
+ }
+
+ // 2. 鐢熸垚鐨勫浘褰俊鎭�
+ new BpmnAutoLayout(model).execute();
+
+ // 3. 閮ㄧ讲娴佺▼
+ Deployment deployment = processEngine.getRepositoryService().createDeployment().addBpmnModel(process.getId() + ".bpmn", model).name(process.getId() + "_deployment").deploy();
+
+ // // 4. 鍚姩涓�涓祦绋嬪疄渚�
+// ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(process.getId());
+//
+// // 5. 鑾峰彇娴佺▼浠诲姟
+// List<Task> tasks = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).list();
+// try{
+// // 6. 灏嗘祦绋嬪浘淇濆瓨鍒版湰鍦版枃浠�
+// InputStream processDiagram = processEngine.getRepositoryService().getProcessDiagram(processInstance.getProcessDefinitionId());
+// FileUtils.copyInputStreamToFile(processDiagram, new File("/deployments/"+process.getId()+".png"));
+//
+// // 7. 淇濆瓨BPMN.xml鍒版湰鍦版枃浠�
+// InputStream processBpmn = processEngine.getRepositoryService().getResourceAsStream(deployment.getId(), process.getId()+".bpmn");
+// FileUtils.copyInputStreamToFile(processBpmn,new File("/deployments/"+process.getId()+".bpmn"));
+// }catch (Exception e){
+// e.printStackTrace();
+// }
+
+ System.out.println(".........end...");
+ }
+
+
+ //浠诲姟鑺傜偣-缁�
+ protected UserTask createGroupTask(String id, String name, String candidateGroup) {
+ List<String> candidateGroups = new ArrayList<String>();
+ candidateGroups.add(candidateGroup);
+ UserTask userTask = new UserTask();
+ userTask.setName(name);
+ userTask.setId(id);
+ userTask.setCandidateGroups(candidateGroups);
+ return userTask;
+ }
+
+ //浠诲姟鑺傜偣-鐢ㄦ埛
+ protected UserTask createUserTask(String id, String name, String userPkno) {
+ List<String> candidateUsers = new ArrayList<String>();
+ candidateUsers.add(userPkno);
+ UserTask userTask = new UserTask();
+ userTask.setName(name);
+ userTask.setId(id);
+ userTask.setCandidateUsers(candidateUsers);
+ return userTask;
+ }
+
+ //浠诲姟鑺傜偣-閿佸畾鑰�
+ protected UserTask createAssigneeTask(String id, String name, String assignee) {
+ UserTask userTask = new UserTask();
+ userTask.setName(name);
+ userTask.setId(id);
+ userTask.setAssignee(assignee);
+ return userTask;
+ }
+
+ /*杩炵嚎*/
+ protected SequenceFlow createSequenceFlow(String from, String to, String name, String conditionExpression) {
+ SequenceFlow flow = new SequenceFlow();
+ flow.setSourceRef(from);
+ flow.setTargetRef(to);
+ flow.setName(name);
+ if (!StringUtil.isEmpty(conditionExpression)) {
+ flow.setConditionExpression(conditionExpression);
+ }
+ return flow;
+ }
+
+ //鎺掍粬缃戝叧
+ protected ExclusiveGateway createExclusiveGateway(String id, String name) {
+ ExclusiveGateway exclusiveGateway = new ExclusiveGateway();
+ exclusiveGateway.setId(id);
+ exclusiveGateway.setName(name);
+ return exclusiveGateway;
+ }
+
+ //骞惰缃戝叧
+ protected ParallelGateway createParallelGateway(String id, String name) {
+ ParallelGateway gateway = new ParallelGateway();
+ gateway.setId(id);
+ gateway.setName(name);
+ return gateway;
+ }
+
+ //寮�濮嬭妭鐐�
+ protected StartEvent createStartEvent() {
+ StartEvent startEvent = new StartEvent();
+ startEvent.setId("startEvent");
+ return startEvent;
+ }
+
+ /*缁撴潫鑺傜偣*/
+ protected EndEvent createEndEvent() {
+ EndEvent endEvent = new EndEvent();
+ endEvent.setId("endEvent");
+ return endEvent;
+ }
+
@Override
public int queryWorkflowsCount(@RequestBody WorkflowDto workflowDto) {
- return workflowServiceDaoImpl.queryWorkflowsCount(BeanConvertUtil.beanCovertMap(workflowDto)); }
+ return workflowServiceDaoImpl.queryWorkflowsCount(BeanConvertUtil.beanCovertMap(workflowDto));
+ }
public IWorkflowServiceDao getWorkflowServiceDaoImpl() {
return workflowServiceDaoImpl;
--
Gitblit v1.8.0