瀏覽代碼

流程调试

wangliang 1 年之前
父節點
當前提交
4a8a0ba109

+ 7 - 6
sop-business/src/main/java/com/qmth/sop/business/activiti/listener/ProcessEventListener.java

@@ -75,7 +75,12 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                                 List<Attribute> attributes = element.attributes();
                                 for (Attribute attr : attributes) {
 //                                    log.info("属性:{},---值:{}", attr.getName(), attr.getValue());
-                                    if (Objects.equals(attr.getName(), SystemConstant.ID) && Objects.equals(attr.getValue(), TFCustomTypeEnum.OFFICE_SOP_FLOW.name())) {
+                                    if (Objects.equals(attr.getName(), SystemConstant.ID) &&
+                                            (Objects.equals(attr.getValue(), TFCustomTypeEnum.OFFICE_SOP_FLOW.name())
+                                                    || Objects.equals(attr.getValue(), TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW.name())
+                                                    || Objects.equals(attr.getValue(), TFCustomTypeEnum.DING_EXCEPTION_FLOW.name())
+                                                    || Objects.equals(attr.getValue(), TFCustomTypeEnum.PROJECT_EXCHANGE_FLOW.name())
+                                                    || Objects.equals(attr.getValue(), TFCustomTypeEnum.QUALITY_PROBLEM_FLOW.name()))) {
                                         customTypeEnum = TFCustomTypeEnum.valueOf(attr.getValue());
                                         break;
                                     }
@@ -87,13 +92,11 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                                     attributes = node.attributes();
 //                                    log.info("节点:{},---值:{}", node.getName(), node.getStringValue());
                                     if (Objects.equals(node.getName(), SystemConstant.USER_TASK) || Objects.equals(node.getName(), SystemConstant.END_EVENT)) {
-                                        if (Objects.equals(node.getName(), SystemConstant.END_EVENT)) {
-                                            flowTaskResult.setSetup(SystemConstant.END_TEMP_ID);
-                                        }
                                         for (Attribute attr : attributes) {
 //                                            log.info("节点属性:{},---节点值:{}", attr.getName(), attr.getValue());
                                             if (Objects.equals(attr.getName(), SystemConstant.ID)) {
                                                 flowTaskResult.setTaskKey(attr.getValue());
+                                                flowTaskResult.setSetup(Integer.valueOf(attr.getValue().substring(attr.getValue().length() - 1, attr.getValue().length())));
                                                 setupMap.put(attr.getValue(), flowTaskResult);
                                             } else if (Objects.equals(attr.getName(), SystemConstant.NAME)) {
                                                 flowTaskResult.setTaskName(attr.getValue());
@@ -103,7 +106,6 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
 //                                            }
                                             else if (Objects.equals(attr.getName(), SystemConstant.FORM_KEY) && SystemConstant.FLOW_MAP.containsKey(resourceEntity.getDeploymentId() + SystemConstant.FLOW_FORM_ID_SPACE + attr.getValue())) {
                                                 flowTaskResult.setFormKey(attr.getValue());
-                                                flowTaskResult.setSetup(Integer.valueOf(attr.getValue().substring(attr.getValue().indexOf(".") - 1, attr.getValue().indexOf("."))));
                                                 List<String> list = SystemConstant.FLOW_MAP.get(resourceEntity.getDeploymentId() + SystemConstant.FLOW_FORM_ID_SPACE + attr.getValue());
                                                 String data = list.get(list.size() - 1);
                                                 List<FlowFormWidgetResult> listData = JSONArray.parseArray(data, FlowFormWidgetResult.class);
@@ -137,7 +139,6 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                                     }
                                 }
                             });
-                            entryList.get(entryList.size() - 1).getValue().setSetup(0);
                             setupMap.clear();
                             Iterator<Map.Entry<String, FlowTaskResult>> iter = entryList.iterator();
                             Map.Entry<String, FlowTaskResult> tmpEntry = null;

+ 17 - 9
sop-business/src/main/java/com/qmth/sop/business/activiti/service/impl/ActivitiServiceImpl.java

@@ -129,17 +129,19 @@ public class ActivitiServiceImpl implements ActivitiService {
      */
     @Override
     public Map<String, Object> createDeployment(List<TFCustomTypeEnum> tfCustomTypeEnumList) throws IOException {
-        Map<String, Object> map = null;
+        Map<String, Object> map = new HashMap<>();
         for (TFCustomTypeEnum tfCustomTypeEnum : tfCustomTypeEnumList) {
             List<TFCustomFlow> tfCustomFlowList = tfCustomFlowService.list(new QueryWrapper<TFCustomFlow>().lambda().eq(TFCustomFlow::getType, tfCustomTypeEnum));
             if (CollectionUtils.isEmpty(tfCustomFlowList)) {
-                map = CollectionUtils.isEmpty(map) ? new HashMap<>() : map;
                 DeploymentBuilder builder = repositoryService.createDeployment();
                 ClassPathResource resource = new ClassPathResource(tfCustomTypeEnum.getFileName());
                 ZipInputStream zip = new ZipInputStream(resource.getInputStream());
                 builder.addZipInputStream(zip);
                 Map<String, Object> mapData = formPropertiesGet(builder.deploy().getId(), null, null);
                 map.put(tfCustomTypeEnum.name(), mapData);
+            } else {
+                Map<String, Object> mapData = formPropertiesGet(tfCustomFlowList.get(0).getFlowDeploymentId(), null, null);
+                map.put(tfCustomTypeEnum.name(), mapData);
             }
         }
         return map;
@@ -361,16 +363,22 @@ public class ActivitiServiceImpl implements ActivitiService {
                 tfCustomFlowService.updateById(tfCustomFlow);
             }
             flowResult = JSONObject.parseObject(tfCustomFlow.getFlowProcessVar(), FlowResult.class);
-            map = this.getFlowFormPropertie(flowResult, map, 1);
-            map.put(SystemConstant.FLOW_DEPLOYMENT_ID, tfCustomFlow.getFlowDeploymentId());
-            map.put(SystemConstant.ID, tfCustomFlow.getId());
+            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+                map = this.getFlowFormPropertie(flowResult, map, 1);
+            }
         } else if (Objects.nonNull(flowId)) {
-            taskList = taskService.createTaskQuery().processInstanceId(String.valueOf(flowId)).list();
-            map = this.getFlowFormPropertie(map, taskList, flowResult, tfCustomFlow);
+            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+                taskList = taskService.createTaskQuery().processInstanceId(String.valueOf(flowId)).list();
+                map = this.getFlowFormPropertie(map, taskList, flowResult, tfCustomFlow);
+            }
         } else {
-            taskList = taskService.createTaskQuery().taskId(String.valueOf(taskId)).list();
-            map = this.getFlowFormPropertie(map, taskList, flowResult, tfCustomFlow);
+            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+                taskList = taskService.createTaskQuery().taskId(String.valueOf(taskId)).list();
+                map = this.getFlowFormPropertie(map, taskList, flowResult, tfCustomFlow);
+            }
         }
+        map.put(SystemConstant.FLOW_DEPLOYMENT_ID, tfCustomFlow.getFlowDeploymentId());
+        map.put(SystemConstant.ID, tfCustomFlow.getId());
         return map;
     }
 

+ 1 - 1
sop-business/src/main/java/com/qmth/sop/business/entity/TFCustomFlow.java

@@ -39,7 +39,7 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "模式类型")
     private TFCustomModelTypeEnum modelType;
 
-    @ApiModelProperty(value = "流程类型,OFFICE_SOP_FLOW:教务处SOP,CLOUD_MARK_SOP_FLOW:云悦君SOP")
+    @ApiModelProperty(value = "流程类型,OFFICE_SOP_FLOW:教务处SOP,CLOUD_MARK_SOP_FLOW:云阅卷SOP,DING_EXCEPTION_FLOW:考勤异常审核流程,PROJECT_EXCHANGE_FLOW:项目计划变更流程,QUALITY_PROBLEM_FLOW:质量问题反馈流程")
     private TFCustomTypeEnum type;
 
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")

+ 1 - 1
sop-business/src/main/resources/db/install/sop_db.sql

@@ -1671,7 +1671,7 @@ CREATE TABLE `t_f_custom_flow` (
                                    `org_id` bigint DEFAULT NULL COMMENT '机构id',
                                    `name` varchar(100) NOT NULL COMMENT '流程名称',
                                    `model_type` varchar(50) NOT NULL COMMENT '流程模式类型,USER_FIXED:指定人员,APPROVE_SET:发起人指定',
-                                   `type` varchar(100) NOT NULL COMMENT '流程类型,OFFICE_SOP_FLOW:教务处SOP,CLOUD_MARK_SOP_FLOW:云阅卷SOP',
+                                   `type` varchar(100) NOT NULL COMMENT '流程类型,OFFICE_SOP_FLOW:教务处SOP,CLOUD_MARK_SOP_FLOW:云阅卷SOP,DING_EXCEPTION_FLOW:考勤异常审核流程,PROJECT_EXCHANGE_FLOW:项目计划变更流程,QUALITY_PROBLEM_FLOW:质量问题反馈流程',
                                    `enable` tinyint DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
                                    `publish` tinyint NOT NULL DEFAULT '1' COMMENT '是否发布,0:否,1:是',
                                    `object_data` mediumtext COMMENT '自定义流程源数据',

+ 1 - 9
sop-business/src/main/resources/db/log/wangliang_update_log.sql

@@ -286,12 +286,4 @@ WHERE id=18;
 
 INSERT INTO sys_privilege
 (id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
-VALUES(3000, '修改密码', '/api/admin/common/update_password', 'URL', 64, 13, 'SYS', NULL, 1, 1, 0);
-
-
-
-
-
-
-
-
+VALUES(3000, '修改密码', '/api/admin/common/update_password', 'URL', 64, 13, 'SYS', NULL, 1, 1, 0);

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

@@ -16,8 +16,6 @@ import java.nio.charset.Charset;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Objects;
 import java.util.StringJoiner;
 
@@ -196,7 +194,6 @@ public class SystemConstant {
     public static final String ID = "id";
     public static final String FORM_KEY = "formKey";
     public static final String FLOW_FORM_ID_SPACE = "|";
-    public static final Integer END_TEMP_ID = 100000000;
     public static final String FORM_PROPERTIES = "formProperties";
     public static final String FLOW_DEPLOYMENT_ID = "flowDeploymentId";
     public static final String APPROVE = "approve";//流程审核变量

+ 7 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/TFCustomTypeEnum.java

@@ -11,7 +11,13 @@ public enum TFCustomTypeEnum {
 
     OFFICE_SOP_FLOW("教务处SOP", "officeSopFlow", "testform1.zip"),
 
-    CLOUD_MARK_SOP_FLOW("云阅卷SOP", "cloudMarkSopFlow", null);
+    CLOUD_MARK_SOP_FLOW("云阅卷SOP", "cloudMarkSopFlow", null),
+
+    DING_EXCEPTION_FLOW("考勤异常审核流程", "dingExceptionFlow", "dingExceptionFlow.zip"),
+
+    PROJECT_EXCHANGE_FLOW("项目计划变更流程 ", "projectExchangeFlow", "projectExchangeFlow.zip"),
+
+    QUALITY_PROBLEM_FLOW("质量问题反馈流程 ", "qualityProblemFlow", "qualityProblemFlow.zip");
 
     private String title;
 

+ 1 - 1
sop-server/src/main/java/com/qmth/sop/server/api/ActivitiFromHtmlController.java

@@ -40,7 +40,7 @@ public class ActivitiFromHtmlController {
     @RequestMapping(value = "/createDeployment", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = Object.class)})
     public Result createDeployment() throws IOException {
-        return ResultUtil.ok(activitiService.createDeployment(Arrays.asList(TFCustomTypeEnum.OFFICE_SOP_FLOW)));
+        return ResultUtil.ok(activitiService.createDeployment(Arrays.asList(TFCustomTypeEnum.OFFICE_SOP_FLOW, TFCustomTypeEnum.DING_EXCEPTION_FLOW, TFCustomTypeEnum.PROJECT_EXCHANGE_FLOW, TFCustomTypeEnum.QUALITY_PROBLEM_FLOW)));
     }
 
     @ApiOperation(value = "上传流程接口")

+ 1 - 1
sop-server/src/main/java/com/qmth/sop/server/start/StartRunning.java

@@ -36,7 +36,7 @@ public class StartRunning implements CommandLineRunner {
     public void run(String... args) throws Exception {
         log.info("服务器启动时执行 start");
         sysConfigService.selectAll();
-        activitiService.createDeployment(Arrays.asList(TFCustomTypeEnum.OFFICE_SOP_FLOW));
+        activitiService.createDeployment(Arrays.asList(TFCustomTypeEnum.OFFICE_SOP_FLOW, TFCustomTypeEnum.DING_EXCEPTION_FLOW, TFCustomTypeEnum.PROJECT_EXCHANGE_FLOW, TFCustomTypeEnum.QUALITY_PROBLEM_FLOW));
         tsAuthService.appInfoInit();
         log.info("服务器启动时执行 end");
     }

+ 73 - 0
sop-server/src/main/resources/dingExceptionFlow.bpmn

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test" id="m1626068475250" name="">
+  <process id="DING_EXCEPTION_FLOW" isExecutable="true" isClosed="false" processType="None">
+    <endEvent id="f_usertask_ding_exception_end_0" name="结束"></endEvent>
+    <userTask id="f_usertask_ding_exception_approve_2" name="异常处理审核" activiti:assignee="${assignee2}">
+      <multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${assigneeList2}" activiti:elementVariable="assignee2">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject2==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <startEvent id="startevent1" name="Start"></startEvent>
+    <userTask id="f_usertask_ding_exception_apply_1" name="异常处理申请" activiti:assignee="${assignee1}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList1}" activiti:elementVariable="assignee1">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject1==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <sequenceFlow id="flow6" sourceRef="startevent1" targetRef="f_usertask_ding_exception_apply_1"></sequenceFlow>
+    <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>
+    <sequenceFlow id="flow14" sourceRef="f_usertask_ding_exception_apply_1" targetRef="f_usertask_ding_exception_approve_2"></sequenceFlow>
+    <sequenceFlow id="flow15" name="驳回" sourceRef="exclusivegateway2" targetRef="f_usertask_ding_exception_apply_1">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_ding_exception_apply_1'}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow16" sourceRef="f_usertask_ding_exception_approve_2" targetRef="exclusivegateway2"></sequenceFlow>
+    <sequenceFlow id="flow17" name="通过" sourceRef="exclusivegateway2" targetRef="f_usertask_ding_exception_end_0">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_ding_exception_end_0'}]]></conditionExpression>
+    </sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_DING_EXCEPTION_FLOW">
+    <bpmndi:BPMNPlane bpmnElement="DING_EXCEPTION_FLOW" id="BPMNPlane_DING_EXCEPTION_FLOW">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_ding_exception_end_0" id="BPMNShape_f_usertask_ding_exception_end_0">
+        <omgdc:Bounds height="35.0" width="35.0" x="475.0" y="360.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_ding_exception_approve_2" id="BPMNShape_f_usertask_ding_exception_approve_2">
+        <omgdc:Bounds height="55.0" width="85.0" x="450.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
+        <omgdc:Bounds height="35.0" width="35.0" x="240.0" y="40.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_ding_exception_apply_1" id="BPMNShape_f_usertask_ding_exception_apply_1">
+        <omgdc:Bounds height="55.0" width="85.0" x="215.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">
+        <omgdc:Bounds height="40.0" width="40.0" x="472.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
+        <omgdi:waypoint x="257.0" y="75.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="130.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14">
+        <omgdi:waypoint x="300.0" y="157.0"></omgdi:waypoint>
+        <omgdi:waypoint x="450.0" y="157.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
+        <omgdi:waypoint x="472.0" y="260.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="260.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="185.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="472.0" y="260.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
+        <omgdi:waypoint x="492.0" y="185.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="240.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
+        <omgdi:waypoint x="492.0" y="280.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="360.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="492.0" y="280.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

二進制
sop-server/src/main/resources/dingExceptionFlow.zip


+ 0 - 0
sop-server/src/main/resources/inside_approve_3.form → sop-server/src/main/resources/inside_approve.form


+ 0 - 0
sop-server/src/main/resources/project_2.form → sop-server/src/main/resources/project.form


+ 73 - 0
sop-server/src/main/resources/projectExchangeFlow.bpmn

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test" id="m1626068475250" name="">
+  <process id="PROJECT_EXCHANGE_FLOW" isExecutable="true" isClosed="false" processType="None">
+    <endEvent id="f_usertask_project_exchange_end_0" name="结束"></endEvent>
+    <userTask id="f_usertask_project_exchange_approve_2" name="项目计划变更审核" activiti:assignee="${assignee2}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList2}" activiti:elementVariable="assignee2">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject2==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <startEvent id="startevent1" name="Start"></startEvent>
+    <userTask id="f_usertask_project_exchange_apply_1" name="项目计划变更申请" activiti:assignee="${assignee1}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList1}" activiti:elementVariable="assignee1">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject1==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <sequenceFlow id="flow6" sourceRef="startevent1" targetRef="f_usertask_project_exchange_apply_1"></sequenceFlow>
+    <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>
+    <sequenceFlow id="flow14" sourceRef="f_usertask_project_exchange_apply_1" targetRef="f_usertask_project_exchange_approve_2"></sequenceFlow>
+    <sequenceFlow id="flow15" name="驳回" sourceRef="exclusivegateway2" targetRef="f_usertask_project_exchange_apply_1">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_project_exchange_apply_1'}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow16" sourceRef="f_usertask_project_exchange_approve_2" targetRef="exclusivegateway2"></sequenceFlow>
+    <sequenceFlow id="flow17" name="通过" sourceRef="exclusivegateway2" targetRef="f_usertask_project_exchange_end_0">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_project_exchange_end_0'}]]></conditionExpression>
+    </sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_PROJECT_EXCHANGE_FLOW">
+    <bpmndi:BPMNPlane bpmnElement="PROJECT_EXCHANGE_FLOW" id="BPMNPlane_PROJECT_EXCHANGE_FLOW">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_project_exchange_end_0" id="BPMNShape_f_usertask_project_exchange_end_0">
+        <omgdc:Bounds height="35.0" width="35.0" x="475.0" y="360.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_project_exchange_approve_2" id="BPMNShape_f_usertask_project_exchange_approve_2">
+        <omgdc:Bounds height="55.0" width="85.0" x="450.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
+        <omgdc:Bounds height="35.0" width="35.0" x="240.0" y="40.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_project_exchange_apply_1" id="BPMNShape_f_usertask_project_exchange_apply_1">
+        <omgdc:Bounds height="55.0" width="85.0" x="215.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">
+        <omgdc:Bounds height="40.0" width="40.0" x="472.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
+        <omgdi:waypoint x="257.0" y="75.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="130.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14">
+        <omgdi:waypoint x="300.0" y="157.0"></omgdi:waypoint>
+        <omgdi:waypoint x="450.0" y="157.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
+        <omgdi:waypoint x="472.0" y="260.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="260.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="185.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="472.0" y="260.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
+        <omgdi:waypoint x="492.0" y="185.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="240.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
+        <omgdi:waypoint x="492.0" y="280.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="360.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="492.0" y="280.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

二進制
sop-server/src/main/resources/projectExchangeFlow.zip


+ 150 - 0
sop-server/src/main/resources/qualityProblemFlow.bpmn

@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test" id="m1626068475250" name="">
+  <process id="QUALITY_PROBLEM_FLOW" isExecutable="true" isClosed="false" processType="None">
+    <userTask id="f_usertask_quality_problem_approve_2" name="项目计划变更审核" activiti:assignee="${assignee2}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList2}" activiti:elementVariable="assignee2">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject2==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <startEvent id="startevent1" name="Start"></startEvent>
+    <userTask id="f_usertask_quality_problem_apply_1" name="质量问题反馈申请" activiti:assignee="${assignee1}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList1}" activiti:elementVariable="assignee1">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject1==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <sequenceFlow id="flow6" sourceRef="startevent1" targetRef="f_usertask_quality_problem_apply_1"></sequenceFlow>
+    <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>
+    <sequenceFlow id="flow15" name="驳回" sourceRef="exclusivegateway2" targetRef="f_usertask_quality_problem_apply_1">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_quality_problem_apply_1'}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="f_usertask_quality_problem_check_3" name="项目计划变更复核" activiti:assignee="${assignee3}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList3}" activiti:elementVariable="assignee3">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject3==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <sequenceFlow id="flow17" name="通过" sourceRef="exclusivegateway2" targetRef="f_usertask_quality_problem_check_3">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_quality_problem_check_3'}]]></conditionExpression>
+    </sequenceFlow>
+    <exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway>
+    <sequenceFlow id="flow18" sourceRef="f_usertask_quality_problem_check_3" targetRef="exclusivegateway3"></sequenceFlow>
+    <sequenceFlow id="flow19" name="驳回" sourceRef="exclusivegateway3" targetRef="f_usertask_quality_problem_approve_2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_quality_problem_approve_2'}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="f_usertask_quality_problem_third_check_4" name="乙方复核" activiti:assignee="${assignee4}">
+      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList4}" activiti:elementVariable="assignee4">
+        <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject4==1}</completionCondition>
+      </multiInstanceLoopCharacteristics>
+    </userTask>
+    <sequenceFlow id="flow20" name="通过" sourceRef="exclusivegateway3" targetRef="f_usertask_quality_problem_third_check_4">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_quality_problem_third_check_4'}]]></conditionExpression>
+    </sequenceFlow>
+    <exclusiveGateway id="exclusivegateway4" name="Exclusive Gateway"></exclusiveGateway>
+    <sequenceFlow id="flow21" sourceRef="f_usertask_quality_problem_third_check_4" targetRef="exclusivegateway4"></sequenceFlow>
+    <sequenceFlow id="flow22" name="驳回" sourceRef="exclusivegateway4" targetRef="f_usertask_quality_problem_approve_2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_quality_problem_approve_2'}]]></conditionExpression>
+    </sequenceFlow>
+    <endEvent id="f_usertask_quality_problem_end_0" name="结束"></endEvent>
+    <sequenceFlow id="flow23" name="通过" sourceRef="exclusivegateway4" targetRef="f_usertask_quality_problem_end_0">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_quality_problem_end_0'}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow24" sourceRef="f_usertask_quality_problem_apply_1" targetRef="f_usertask_quality_problem_approve_2"></sequenceFlow>
+    <sequenceFlow id="flow25" sourceRef="f_usertask_quality_problem_approve_2" targetRef="exclusivegateway2"></sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_QUALITY_PROBLEM_FLOW">
+    <bpmndi:BPMNPlane bpmnElement="QUALITY_PROBLEM_FLOW" id="BPMNPlane_QUALITY_PROBLEM_FLOW">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_quality_problem_approve_2" id="BPMNShape_f_usertask_quality_problem_approve_2">
+        <omgdc:Bounds height="55.0" width="85.0" x="450.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
+        <omgdc:Bounds height="35.0" width="35.0" x="240.0" y="40.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_quality_problem_apply_1" id="BPMNShape_f_usertask_quality_problem_apply_1">
+        <omgdc:Bounds height="55.0" width="85.0" x="215.0" y="130.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">
+        <omgdc:Bounds height="40.0" width="40.0" x="472.0" y="240.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_quality_problem_check_3" id="BPMNShape_f_usertask_quality_problem_check_3">
+        <omgdc:Bounds height="55.0" width="105.0" x="440.0" y="330.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="BPMNShape_exclusivegateway3">
+        <omgdc:Bounds height="40.0" width="40.0" x="680.0" y="337.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_quality_problem_third_check_4" id="BPMNShape_f_usertask_quality_problem_third_check_4">
+        <omgdc:Bounds height="55.0" width="105.0" x="648.0" y="480.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="exclusivegateway4" id="BPMNShape_exclusivegateway4">
+        <omgdc:Bounds height="40.0" width="40.0" x="472.0" y="487.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="f_usertask_quality_problem_end_0" id="BPMNShape_f_usertask_quality_problem_end_0">
+        <omgdc:Bounds height="35.0" width="35.0" x="475.0" y="590.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
+        <omgdi:waypoint x="257.0" y="75.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="130.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
+        <omgdi:waypoint x="472.0" y="260.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="260.0"></omgdi:waypoint>
+        <omgdi:waypoint x="257.0" y="185.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="472.0" y="260.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
+        <omgdi:waypoint x="492.0" y="280.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="330.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="492.0" y="280.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18">
+        <omgdi:waypoint x="545.0" y="357.0"></omgdi:waypoint>
+        <omgdi:waypoint x="680.0" y="357.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow19" id="BPMNEdge_flow19">
+        <omgdi:waypoint x="700.0" y="337.0"></omgdi:waypoint>
+        <omgdi:waypoint x="699.0" y="157.0"></omgdi:waypoint>
+        <omgdi:waypoint x="535.0" y="157.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="700.0" y="337.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow20" id="BPMNEdge_flow20">
+        <omgdi:waypoint x="700.0" y="377.0"></omgdi:waypoint>
+        <omgdi:waypoint x="700.0" y="480.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="700.0" y="377.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow21" id="BPMNEdge_flow21">
+        <omgdi:waypoint x="648.0" y="507.0"></omgdi:waypoint>
+        <omgdi:waypoint x="512.0" y="507.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow22" id="BPMNEdge_flow22">
+        <omgdi:waypoint x="472.0" y="507.0"></omgdi:waypoint>
+        <omgdi:waypoint x="202.0" y="506.0"></omgdi:waypoint>
+        <omgdi:waypoint x="202.0" y="239.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="185.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="472.0" y="507.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow23" id="BPMNEdge_flow23">
+        <omgdi:waypoint x="492.0" y="527.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="590.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="22.0" x="492.0" y="527.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow24" id="BPMNEdge_flow24">
+        <omgdi:waypoint x="300.0" y="157.0"></omgdi:waypoint>
+        <omgdi:waypoint x="450.0" y="157.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow25" id="BPMNEdge_flow25">
+        <omgdi:waypoint x="492.0" y="185.0"></omgdi:waypoint>
+        <omgdi:waypoint x="492.0" y="240.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

二進制
sop-server/src/main/resources/qualityProblemFlow.zip


+ 0 - 0
sop-server/src/main/resources/start_1.form → sop-server/src/main/resources/start.form


+ 22 - 22
sop-server/src/main/resources/testform1.bpmn

@@ -1,57 +1,57 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test" id="m1626068475250" name="">
   <process id="OFFICE_SOP_FLOW" isExecutable="true" isClosed="false" processType="None">
-    <userTask id="f_usertask_jwc_inside_approve" name="教务处sop_内审" activiti:assignee="${assignee3}" activiti:formKey="inside_approve_3.form">
+    <userTask id="f_usertask_jwc_inside_approve_3" name="教务处sop_内审" activiti:assignee="${assignee3}" activiti:formKey="inside_approve.form">
       <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList3}" activiti:elementVariable="assignee3">
         <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject3==1}</completionCondition>
       </multiInstanceLoopCharacteristics>
     </userTask>
-    <endEvent id="f_usertask_jwc_end" name="结束"></endEvent>
-    <userTask id="f_usertask_jwc_project" name="教务处sop_项目关键信息" activiti:assignee="${assignee2}" activiti:formKey="project_2.form">
+    <endEvent id="f_usertask_jwc_end_0" name="结束"></endEvent>
+    <userTask id="f_usertask_jwc_project_2" name="教务处sop_项目关键信息" activiti:assignee="${assignee2}" activiti:formKey="project.form">
       <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList2}" activiti:elementVariable="assignee2">
         <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject2==1}</completionCondition>
       </multiInstanceLoopCharacteristics>
     </userTask>
     <startEvent id="startevent1" name="Start"></startEvent>
-    <userTask id="f_usertask_jwc_start" name="新增sop" activiti:assignee="${assignee1}" activiti:formKey="start_1.form">
+    <userTask id="f_usertask_jwc_start_1" name="新增sop" activiti:assignee="${assignee1}" activiti:formKey="start.form">
       <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList1}" activiti:elementVariable="assignee1">
         <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject1==1}</completionCondition>
       </multiInstanceLoopCharacteristics>
     </userTask>
-    <sequenceFlow id="flow6" sourceRef="startevent1" targetRef="f_usertask_jwc_start"></sequenceFlow>
+    <sequenceFlow id="flow6" sourceRef="startevent1" targetRef="f_usertask_jwc_start_1"></sequenceFlow>
     <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>
-    <sequenceFlow id="flow12" name="通过" sourceRef="exclusivegateway2" targetRef="f_usertask_jwc_inside_approve">
-      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_inside_approve'}]]></conditionExpression>
+    <sequenceFlow id="flow12" name="通过" sourceRef="exclusivegateway2" targetRef="f_usertask_jwc_inside_approve_3">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_inside_approve_3'}]]></conditionExpression>
     </sequenceFlow>
-    <sequenceFlow id="flow14" sourceRef="f_usertask_jwc_start" targetRef="f_usertask_jwc_project"></sequenceFlow>
-    <sequenceFlow id="flow15" name="驳回" sourceRef="exclusivegateway2" targetRef="f_usertask_jwc_start">
-      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_start'}]]></conditionExpression>
+    <sequenceFlow id="flow14" sourceRef="f_usertask_jwc_start_1" targetRef="f_usertask_jwc_project_2"></sequenceFlow>
+    <sequenceFlow id="flow15" name="驳回" sourceRef="exclusivegateway2" targetRef="f_usertask_jwc_start_1">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_start_1'}]]></conditionExpression>
     </sequenceFlow>
-    <sequenceFlow id="flow16" sourceRef="f_usertask_jwc_project" targetRef="exclusivegateway2"></sequenceFlow>
+    <sequenceFlow id="flow16" sourceRef="f_usertask_jwc_project_2" targetRef="exclusivegateway2"></sequenceFlow>
     <exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway>
-    <sequenceFlow id="flow17" sourceRef="f_usertask_jwc_inside_approve" targetRef="exclusivegateway3"></sequenceFlow>
-    <sequenceFlow id="flow18" name="通过" sourceRef="exclusivegateway3" targetRef="f_usertask_jwc_end">
-      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_end'}]]></conditionExpression>
+    <sequenceFlow id="flow17" sourceRef="f_usertask_jwc_inside_approve_3" targetRef="exclusivegateway3"></sequenceFlow>
+    <sequenceFlow id="flow18" name="通过" sourceRef="exclusivegateway3" targetRef="f_usertask_jwc_end_0">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_end_0'}]]></conditionExpression>
     </sequenceFlow>
-    <sequenceFlow id="flow19" name="驳回" sourceRef="exclusivegateway3" targetRef="f_usertask_jwc_project">
-      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_project'}]]></conditionExpression>
+    <sequenceFlow id="flow19" name="驳回" sourceRef="exclusivegateway3" targetRef="f_usertask_jwc_project_2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approve == 'f_usertask_jwc_project_2'}]]></conditionExpression>
     </sequenceFlow>
   </process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_OFFICE_SOP_FLOW">
     <bpmndi:BPMNPlane bpmnElement="OFFICE_SOP_FLOW" id="BPMNPlane_OFFICE_SOP_FLOW">
-      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_inside_approve" id="BPMNShape_f_usertask_jwc_inside_approve">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_inside_approve_3" id="BPMNShape_f_usertask_jwc_inside_approve_3">
         <omgdc:Bounds height="55.0" width="85.0" x="450.0" y="330.0"></omgdc:Bounds>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_end" id="BPMNShape_f_usertask_jwc_end">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_end_0" id="BPMNShape_f_usertask_jwc_end_0">
         <omgdc:Bounds height="35.0" width="35.0" x="643.0" y="460.0"></omgdc:Bounds>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_project" id="BPMNShape_f_usertask_jwc_project">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_project_2" id="BPMNShape_f_usertask_jwc_project_2">
         <omgdc:Bounds height="55.0" width="85.0" x="450.0" y="130.0"></omgdc:Bounds>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
         <omgdc:Bounds height="35.0" width="35.0" x="240.0" y="40.0"></omgdc:Bounds>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_start" id="BPMNShape_f_usertask_jwc_start">
+      <bpmndi:BPMNShape bpmnElement="f_usertask_jwc_start_1" id="BPMNShape_f_usertask_jwc_start_1">
         <omgdc:Bounds height="55.0" width="85.0" x="215.0" y="130.0"></omgdc:Bounds>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">
@@ -80,7 +80,7 @@
         <omgdi:waypoint x="257.0" y="260.0"></omgdi:waypoint>
         <omgdi:waypoint x="257.0" y="185.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="472.0" y="260.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="22.0" x="472.0" y="260.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
@@ -103,7 +103,7 @@
         <omgdi:waypoint x="660.0" y="158.0"></omgdi:waypoint>
         <omgdi:waypoint x="535.0" y="157.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="660.0" y="337.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="22.0" x="660.0" y="337.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>

二進制
sop-server/src/main/resources/testform1.zip