Przeglądaj źródła

新增自定义流程属性-新增默认节点

wangliang 3 lat temu
rodzic
commit
6d7a884770

+ 3 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/service/AbstractMultiWorkFlowService.java

@@ -111,17 +111,17 @@ public abstract class AbstractMultiWorkFlowService implements DefaultInstanceCon
      * @return
      */
     @Override
-    public FlowTaskLink createDefaultUserTask(CustomFlowDto customFlowDto, FlowTaskLink flowTaskLink, String id) {
+    public CustomFlowDto createDefaultUserTask(CustomFlowDto customFlowDto, FlowTaskLink flowTaskLink, String id) {
         CustomFlowDto customFlowDefaultDto = new CustomFlowDto();
         BeanUtils.copyProperties(customFlowDto, customFlowDefaultDto);
         customFlowDefaultDto.setId(id);
         customFlowDefaultDto.setType(CustomFlowTypeEnum.PROCESS);
-        customFlowDefaultDto.setContent("提交试卷");
+        customFlowDefaultDto.setContent(DEFAULT_USER_TASK_NAME);
         customFlowDefaultDto.setH(customFlowDefaultDto.getH() + 30D);
         customFlowDefaultDto.setY(customFlowDefaultDto.getY() + 50D);
         customFlowDefaultDto.setFlowTaskId(CustomFlowDynamicBuildEnum.USER_TASK.getId() + id);
         FlowTaskNode nodeDefault = new FlowTaskNode(customFlowDefaultDto);
         flowTaskLink.add(nodeDefault);
-        return flowTaskLink;
+        return customFlowDefaultDto;
     }
 }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/service/MultiWorkFlow.java

@@ -29,5 +29,5 @@ public interface MultiWorkFlow {
      * @param id
      * @return
      */
-    FlowTaskLink createDefaultUserTask(CustomFlowDto customFlowDto, FlowTaskLink flowTaskLink, String id);
+    CustomFlowDto createDefaultUserTask(CustomFlowDto customFlowDto, FlowTaskLink flowTaskLink, String id);
 }

+ 22 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFCustomFlow.java

@@ -45,6 +45,9 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否发布,0:否,1:是")
     private Boolean publish;
 
+    @ApiModelProperty(value = "是否启动,0:否,1:是")
+    private Boolean start;
+
     @ApiModelProperty(value = "自定义流程源数据")
     private String objectData;
 
@@ -58,6 +61,9 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "流程版本id")
     private String actFlowId;
 
+    @ApiModelProperty(value = "流程过程变量数据")
+    private String flowProcessVar;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -76,6 +82,22 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
         insertInfo(userId);
     }
 
+    public Boolean getStart() {
+        return start;
+    }
+
+    public void setStart(Boolean start) {
+        this.start = start;
+    }
+
+    public String getFlowProcessVar() {
+        return flowProcessVar;
+    }
+
+    public void setFlowProcessVar(String flowProcessVar) {
+        this.flowProcessVar = flowProcessVar;
+    }
+
     public void setSchoolId(Long schoolId) {
         this.schoolId = schoolId;
     }

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ActivitiService.java

@@ -145,7 +145,8 @@ public interface ActivitiService {
      *
      * @param customFlowSaveDto
      * @param id
+     * @return
      * @throws IOException
      */
-    public void dynamicBuildBpmn(CustomFlowSaveDto customFlowSaveDto, String id) throws IOException;
+    public Map<String, Object> dynamicBuildBpmn(CustomFlowSaveDto customFlowSaveDto, String id) throws IOException;
 }

+ 54 - 34
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -179,17 +179,49 @@ public class ActivitiServiceImpl implements ActivitiService {
      */
     @Override
     public ProcessInstance flowStart(Map<String, Object> map) {
-        BasicSchool basicSchool = (BasicSchool) ServletUtil.getRequestSchool();
-        ProcessInstance processInstance = null;
-        Map<String, List<String>> flowSchoolCodeMap = SystemConstant.getFlowSchoolCodeMap();
-        //广东医科大学
-        if (flowSchoolCodeMap.get(SystemConstant.GDYKDX_FLOW_KEY).contains(basicSchool.getCode())) {
-            processInstance = this.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
-        } else if (flowSchoolCodeMap.get(SystemConstant.JXZYY_FLOW_KEY).contains(basicSchool.getCode())) {//江西中医药大学
-            processInstance = this.startActivity(SystemConstant.JXZYY_FLOW_KEY, map);
-        } else {
-            throw ExceptionResultEnum.ERROR.exception("未配置流程学校code");
+//        BasicSchool basicSchool = (BasicSchool) ServletUtil.getRequestSchool();
+//        ProcessInstance processInstance = null;
+//        Map<String, List<String>> flowSchoolCodeMap = SystemConstant.getFlowSchoolCodeMap();
+//        //广东医科大学
+//        if (flowSchoolCodeMap.get(SystemConstant.GDYKDX_FLOW_KEY).contains(basicSchool.getCode())) {
+//            processInstance = this.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+//        } else if (flowSchoolCodeMap.get(SystemConstant.JXZYY_FLOW_KEY).contains(basicSchool.getCode())) {//江西中医药大学
+//            processInstance = this.startActivity(SystemConstant.JXZYY_FLOW_KEY, map);
+//        } else {
+//            throw ExceptionResultEnum.ERROR.exception("未配置流程学校code");
+//        }
+        String id = (String) map.get(SystemConstant.ID);
+        BpmnModel model = (BpmnModel) map.get(SystemConstant.MODEL);
+        Map flowProcessVarMap = (Map) map.get(SystemConstant.FLOW_PROCESS_VAR_MAP);
+
+        //部署流程
+        String bpmnName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_MODEL_NAME;
+        String bpmnPngName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_PNG_NAME;
+        String bpmnProcessName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_PROCESS_NAME;
+        String bpmnDeploymentName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_DEPLOYMENT_NAME;
+        Deployment deployment = repositoryService.createDeployment().addBpmnModel(bpmnName, model).name(bpmnDeploymentName).deploy();
+
+        //启动流程
+        ProcessInstance processInstance = flowProcessVarMap.size() > 0 ? runtimeService.startProcessInstanceByKey(id, flowProcessVarMap) : runtimeService.startProcessInstanceByKey(id);
+
+        //保存png图片和xml文件(这一步可做可不做)
+        InputStream processDiagram = repositoryService.getProcessDiagram(processInstance.getProcessDefinitionId());
+        try {
+            FileUtils.copyInputStreamToFile(processDiagram, new File(SystemConstant.TEMP_FILES_DIR + File.separator + DefaultInstanceConvertToMultiInstance.BPMN_NAME + File.separator + bpmnPngName));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+//        InputStream processBpmn = repositoryService.getResourceAsStream(deployment.getId(), bpmnName);
+//        FileUtils.copyInputStreamToFile(processBpmn, new File(SystemConstant.TEMP_FILES_DIR + File.separator + DefaultInstanceConvertToMultiInstance.BPMN_NAME + File.separator + id + "-multiple-process.bpmn20.xml"));
+
+        InputStream processBpmn = repositoryService.getResourceAsStream(deployment.getId(), bpmnName);
+        try {
+            FileUtils.copyInputStreamToFile(processBpmn, new File(SystemConstant.TEMP_FILES_DIR + File.separator + DefaultInstanceConvertToMultiInstance.BPMN_NAME + File.separator + bpmnProcessName));
+        } catch (IOException e) {
+            e.printStackTrace();
         }
+        map.computeIfAbsent(SystemConstant.FLOW_START, v -> true);
         return processInstance;
     }
 
@@ -1430,11 +1462,12 @@ public class ActivitiServiceImpl implements ActivitiService {
      *
      * @param customFlowSaveDto
      * @param id
+     * @return
      * @throws IOException
      */
     @Override
     @Transactional
-    public void dynamicBuildBpmn(CustomFlowSaveDto customFlowSaveDto, String id) throws IOException {
+    public Map<String, Object> dynamicBuildBpmn(CustomFlowSaveDto customFlowSaveDto, String id) throws IOException {
         BpmnModel model = new BpmnModel();
         Process process = new Process();
         model.addProcess(process);
@@ -1444,7 +1477,7 @@ public class ActivitiServiceImpl implements ActivitiService {
         List<CustomFlowDto> customFlowLists = customFlowSaveDto.getCustomFlowLists();
         Map<CustomFlowTypeEnum, CustomFlowDto> customFlowTypeEnumCustomFlowDtoMap = new HashMap<>();
         FlowTaskLink flowTaskLink = new FlowTaskLink();
-        Map<String, Object> flowVarMap = new HashMap<>();
+        Map<String, Object> flowProcessVarMap = new HashMap<>();
         for (int i = 0; i < customFlowLists.size(); i++) {
             CustomFlowDto customFlowDto = customFlowLists.get(i);
             FlowTaskNode node = new FlowTaskNode(customFlowDto);
@@ -1459,8 +1492,8 @@ public class ActivitiServiceImpl implements ActivitiService {
                     customFlowDto.setFlowTaskId(CustomFlowDynamicBuildEnum.START.getId());
                     process.addFlowElement(createStartEvent());
                     //默认在开始节点后新增一个审批节点
-                    flowTaskLink = multiWorkFlow.createDefaultUserTask(customFlowDto, flowTaskLink, DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK);
-                    flowVarMap.computeIfAbsent(SystemConstant.APPROVE_ID, v -> sysUser.getId());
+                    multiWorkFlow.createDefaultUserTask(customFlowDto, flowTaskLink, DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK);
+                    flowProcessVarMap.computeIfAbsent(SystemConstant.APPROVE_ID, v -> sysUser.getId());
                     process.addFlowElement(createUserTask(CustomFlowDynamicBuildEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, Objects.nonNull(flowTaskLink.getLast().getTask().getContent()) && !Objects.equals(flowTaskLink.getLast().getTask().getContent(), "") ? flowTaskLink.getLast().getTask().getContent() : DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK_NAME, DefaultInstanceConvertToMultiInstance.APPROVE_ID_EXP));
                     break;
                 case PROCESS://过程节点
@@ -1489,7 +1522,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                         switch (customFlowPropertyDto.getMultipleUserApproveType()) {
                             case ORDER://依次审批
                             case ALL://会签审批
-                                flowVarMap.computeIfAbsent(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, v -> approveUserIds);
+                                flowProcessVarMap.computeIfAbsent(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, v -> approveUserIds);
                                 break;
                             default:
                                 break;
@@ -1545,25 +1578,12 @@ public class ActivitiServiceImpl implements ActivitiService {
         //生成图像信息
         new BpmnAutoLayout(model).execute();
 
-        //部署流程
-        String bpmnName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_MODEL_NAME;
-        String bpmnPngName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_PNG_NAME;
-        String bpmnProcessName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_PROCESS_NAME;
-        String bpmnDeploymentName = id + DefaultInstanceConvertToMultiInstance.FLOW_BPMN_DEPLOYMENT_NAME;
-        Deployment deployment = repositoryService.createDeployment().addBpmnModel(bpmnName, model).name(bpmnDeploymentName).deploy();
-
-        //启动流程
-        ProcessInstance processInstance = flowVarMap.size() > 0 ? runtimeService.startProcessInstanceByKey(id, flowVarMap) : runtimeService.startProcessInstanceByKey(id);
-
-        //保存png图片和xml文件(这一步可做可不做)
-        InputStream processDiagram = repositoryService.getProcessDiagram(processInstance.getProcessDefinitionId());
-        FileUtils.copyInputStreamToFile(processDiagram, new File(SystemConstant.TEMP_FILES_DIR + File.separator + DefaultInstanceConvertToMultiInstance.BPMN_NAME + File.separator + bpmnPngName));
-
-//        InputStream processBpmn = repositoryService.getResourceAsStream(deployment.getId(), bpmnName);
-//        FileUtils.copyInputStreamToFile(processBpmn, new File(SystemConstant.TEMP_FILES_DIR + File.separator + DefaultInstanceConvertToMultiInstance.BPMN_NAME + File.separator + id + "-multiple-process.bpmn20.xml"));
-
-        InputStream processBpmn = repositoryService.getResourceAsStream(deployment.getId(), bpmnName);
-        FileUtils.copyInputStreamToFile(processBpmn, new File(SystemConstant.TEMP_FILES_DIR + File.separator + DefaultInstanceConvertToMultiInstance.BPMN_NAME + File.separator + bpmnProcessName));
+        Map<String, Object> map = new HashMap<>();
+        map.computeIfAbsent(SystemConstant.ID, v -> id);
+        map.computeIfAbsent(SystemConstant.MODEL, v -> model);
+        map.computeIfAbsent(SystemConstant.FLOW_PROCESS_VAR_MAP, v -> flowProcessVarMap);
+        this.flowStart(map);
+        return map;
     }
 
     /**

+ 7 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/TFCustomFlowController.java

@@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.security.NoSuchAlgorithmException;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -92,10 +93,13 @@ public class TFCustomFlowController {
                 atomicInteger = new AtomicInteger(dbVersion);
                 tfCustomFlow.setVersion(atomicInteger.incrementAndGet());
             }
-            tfCustomFlowService.save(tfCustomFlow);
-
             //自定义流程处理开始
-            activitiService.dynamicBuildBpmn(customFlowSaveDto, flowBpmnId);
+            Map<String, Object> map = activitiService.dynamicBuildBpmn(customFlowSaveDto, flowBpmnId);
+            tfCustomFlow.setFlowProcessVar(JacksonUtil.parseJson(map));
+            if (Objects.nonNull(map.get(SystemConstant.FLOW_START))) {
+                tfCustomFlow.setStart((Boolean) map.get(SystemConstant.FLOW_START));
+            }
+            tfCustomFlowService.save(tfCustomFlow);
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             if (e instanceof ApiException) {

+ 3 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -56,6 +56,9 @@ public class SystemConstant {
     public static final String UPLOAD_TYPE = "uploadType";
     public static final String HTTP = "http://";
     public static final String ID = "id";
+    public static final String MODEL = "model";
+    public static final String FLOW_PROCESS_VAR_MAP = "flowProcessVarMap";
+    public static final String FLOW_START = "start";
     public static final String FILE = "file";
     public static final String SIZE = "size";
     public static final String HTML_PREFIX = ".html";