wangliang 3 vuotta sitten
vanhempi
commit
28eda3bea1

+ 6 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamStatusEnum.java

@@ -7,6 +7,7 @@ import java.util.List;
 
 /**
  * 命题类型
+ *
  * @Date: 2021/3/23.
  */
 public enum ExamStatusEnum {
@@ -14,9 +15,12 @@ public enum ExamStatusEnum {
     NEW("新建"),
     READY("待命题"),
     STAGE("进行中"),
-    SUBMIT("待审核"),
     FINISH("已完成"),
-    CANCEL("撤回");
+    CANCEL("撤回"),
+
+    DRAFT("草稿"),
+
+    SUBMIT("已提交");
 
     ExamStatusEnum(String desc) {
         this.desc = desc;

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ActivitiService.java

@@ -56,6 +56,13 @@ public interface ActivitiService {
      */
     void deleteProcessInstance(String flowId);
 
+    /**
+     * 流程更新
+     *
+     * @param map
+     */
+    public void flowUpdate(Map<String, Object> map);
+
     /**
      * 记录流程日志
      *

+ 79 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -6,9 +6,11 @@ import com.qmth.distributed.print.business.entity.TFFlowLog;
 import com.qmth.distributed.print.business.service.ActivitiService;
 import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.distributed.print.business.service.TFFlowLogService;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.activiti.bpmn.model.*;
@@ -24,6 +26,7 @@ import org.activiti.engine.impl.persistence.entity.TaskEntity;
 import org.activiti.engine.repository.DeploymentBuilder;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Task;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -162,13 +165,13 @@ public class ActivitiServiceImpl implements ActivitiService {
     }
 
     /**
-     * 记录流程日志
+     * 流程更新
      *
      * @param map
      */
     @Override
     @Transactional
-    public void flowLog(Map<String, Object> map) {
+    public void flowUpdate(Map<String, Object> map) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
         if (Objects.isNull(map.get(SystemConstant.FLOW_ID))) {
@@ -176,33 +179,54 @@ public class ActivitiServiceImpl implements ActivitiService {
         }
         Long flowId = (Long) map.get(SystemConstant.FLOW_ID);
 
-        if (Objects.isNull(map.get(SystemConstant.TASK_ID))) {
-            throw ExceptionResultEnum.ERROR.exception("命题任务id不能为空");
-        }
-        Long taskId = (Long) map.get(SystemConstant.TASK_ID);
-
         if (Objects.isNull(map.get(SystemConstant.FLOW_STATUS))) {
             throw ExceptionResultEnum.ERROR.exception("流程状态不能为空");
         }
         FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
 
-        Long teachId = Objects.nonNull(map.get(SystemConstant.TEACH_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.TEACH_ID))) : null;
+        Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.APPROVE_ID))) : null;
         QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
         tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, flowId);
         TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
         if (Objects.isNull(tfFlowApprove)) {//新建流程
-            tfFlowApprove = new TFFlowApprove(flowId, teachId, flowStatusEnum, sysUser.getId());
+            tfFlowApprove = new TFFlowApprove(flowId, approveId, flowStatusEnum, sysUser.getId());
         } else {//更新流程
             tfFlowApprove.updateInfo(sysUser.getId());
-            tfFlowApprove.setApproveId(teachId);
+            tfFlowApprove.setApproveId(approveId);
             tfFlowApprove.setStatus(flowStatusEnum);
         }
         tfFlowApproveService.saveOrUpdate(tfFlowApprove);
+    }
 
-        //增加流水
-        if (flowStatusEnum != FlowStatusEnum.DRAFT && flowStatusEnum != FlowStatusEnum.TO_BE_SUBMIT) {
-            TFFlowLog tfFlowLog = new TFFlowLog(flowId, taskId, teachId, sysUser.getId());
+    /**
+     * 记录流程日志
+     *
+     * @param map
+     */
+    @Override
+    @Transactional
+    public void flowLog(Map<String, Object> map) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        if (Objects.isNull(map.get(SystemConstant.FLOW_ID))) {
+            throw ExceptionResultEnum.ERROR.exception("流程id不能为空");
+        }
+        Long flowId = (Long) map.get(SystemConstant.FLOW_ID);
+
+        Long taskId = null;
+        if (Objects.nonNull(map.get(SystemConstant.TASK_ID))) {
+            taskId = (Long) map.get(SystemConstant.TASK_ID);
+        }
+
+        if (Objects.isNull(map.get(SystemConstant.FLOW_STATUS))) {
+            throw ExceptionResultEnum.ERROR.exception("流程状态不能为空");
         }
+        FlowStatusEnum flowStatusEnum = (FlowStatusEnum) map.get(SystemConstant.FLOW_STATUS);
+
+        Long approveId = Objects.nonNull(map.get(SystemConstant.APPROVE_ID)) ? Long.parseLong(String.valueOf(map.get(SystemConstant.APPROVE_ID))) : null;
+        //增加流水
+        ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
+        TFFlowLog tfFlowLog = new TFFlowLog(flowId, taskId, approveId, sysUser.getId());
     }
 
     /**
@@ -213,6 +237,7 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Override
     @Transactional
     public void taskApprove(Map<String, Object> map) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         if (Objects.isNull(map.get(SystemConstant.FLOW_TASK_ID))) {
             throw ExceptionResultEnum.ERROR.exception("流程任务id不能为空");
         }
@@ -224,14 +249,54 @@ public class ActivitiServiceImpl implements ActivitiService {
         String currActivityId = task.getTaskDefinitionKey();
         BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
         FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
+        QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
+        tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, processInstanceId);
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
         if (currFlow instanceof UserTask) {
             UserTask userTask = (UserTask) currFlow;
             //广东医科大学流程
             if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.GDYKDX_FLOW_KEY)) {
-
+                FlowGdykdxApproveSetupEnum setupEnum = FlowGdykdxApproveSetupEnum.convertToInstance(userTask.getId());
+                if (setupEnum == FlowGdykdxApproveSetupEnum.SUBMIT) {//命题提交
+                    tfFlowApprove.setStatus(FlowStatusEnum.SUBMIT);
+                    tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
+                } else if (setupEnum == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE) {//主任提交
+                    if (Objects.isNull(map.get(SystemConstant.APPROVE))) {
+                        throw ExceptionResultEnum.ERROR.exception("流程变量不能为空");
+                    }
+                    String approve = map.get(SystemConstant.APPROVE).toString();
+                    if (Objects.equals(approve, "0")) {//驳回命题
+                        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
+                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
+                    } else if (Objects.equals(approve, "1")) {//提交
+                        tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
+                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
+                    } else {
+                        throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
+                    }
+                } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
+                    if (Objects.isNull(map.get(SystemConstant.APPROVE))) {
+                        throw ExceptionResultEnum.ERROR.exception("流程变量不能为空");
+                    }
+                    String approve = map.get(SystemConstant.APPROVE).toString();
+                    if (Objects.equals(approve, "0")) {//驳回命题
+                        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
+                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
+                    } else if (Objects.equals(approve, "1")) {//驳回主任
+                        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
+                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
+                    } else if (Objects.equals(approve, "2")) {//提交
+                        tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
+                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
+                    }
+                }
+                tfFlowApprove.updateInfo(sysUser.getId());
             }
         }
         //当前实例的执行到哪个节点
         taskService.complete(String.valueOf(flowTaskId), map);
+        tfFlowApproveService.saveOrUpdate(tfFlowApprove);
+//        ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
+//        activitiService.flowLog(map);
     }
 }

+ 39 - 23
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -274,11 +274,11 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         if (basicExamRule == null) {
             throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
         }
-        if (examTask.getUserId() == null) {
-            examTask.setStatus(ExamStatusEnum.NEW);
-        } else {
-            examTask.setStatus(ExamStatusEnum.READY);
-        }
+//        if (examTask.getUserId() == null) {
+//            examTask.setStatus(ExamStatusEnum.NEW);
+//        } else {
+//            examTask.setStatus(ExamStatusEnum.READY);
+//        }
         examTask.setEnable(true);
         examTask.setCreateId(sysUser.getId());
         examTask.setCreateTime(System.currentTimeMillis());
@@ -324,17 +324,23 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setCreateId(sysUser.getId());
             examTask.setReview(basicExamRule.getReview());
             examTask.setOrgId(sysUser.getOrgId());
+            if (examTask.getUserId() == null) {
+                examTask.setStatus(ExamStatusEnum.DRAFT);
+            } else {
+                if (Objects.isNull(examTask.getFlowId())) {
+                    examTask.setStatus(ExamStatusEnum.SUBMIT);
+                    Map<String, Object> map = new HashMap<>();
+                    map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getId()));
+                    ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+                    examTask.setFlowId(Long.parseLong(processInstance.getId()));
+                } else {//否则走审批流
 
-            Map<String, Object> map = new HashMap<>();
-            map.computeIfAbsent(SystemConstant.TEACH_ID, v -> String.valueOf(sysUser.getId()));
-            ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
-            examTask.setFlowId(Long.parseLong(processInstance.getId()));
+                }
+//                map.computeIfAbsent(SystemConstant.FLOW_ID, v -> examTask.getFlowId());
+//                map.computeIfAbsent(SystemConstant.FLOW_STATUS, v -> Objects.isNull(examTask.getUserId()) ? FlowStatusEnum.DRAFT : FlowStatusEnum.TO_BE_SUBMIT);
+//                activitiService.flowStart(map);
+            }
             this.save(examTask);
-
-            map.computeIfAbsent(SystemConstant.FLOW_ID, v -> examTask.getFlowId());
-            map.computeIfAbsent(SystemConstant.TASK_ID, v -> examTask.getId());
-            map.computeIfAbsent(SystemConstant.FLOW_STATUS, v -> Objects.isNull(examTask.getUserId()) ? FlowStatusEnum.DRAFT : FlowStatusEnum.TO_BE_SUBMIT);
-            activitiService.flowLog(map);
         } catch (Exception e) {
             log.error("请求出错", e);
             if (e instanceof ActivitiObjectNotFoundException) {
@@ -670,7 +676,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 //    }
 
     @Override
-    public IPage<ExamTaskDto> listTaskApply(String auditStatus, String reviewStatus, Long cardRuleId, String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamTaskDto> listTaskApply(String auditStatus, String reviewStatus, Long cardRuleId, String
+            courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
@@ -681,7 +688,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public IPage<ExamTaskDto> listTaskReviewUnaudited(String courseCode, String paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamTaskDto> listTaskReviewUnaudited(String courseCode, String paperNumber, Long userId, Long
+            cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         Page<ExamTaskDto> page = new Page<>(pageNumber, pageSize);
@@ -690,7 +698,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public IPage<ExamTaskDto> listTaskReviewAudited(String reviewStatus, String courseCode, String paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamTaskDto> listTaskReviewAudited(String reviewStatus, String courseCode, String
+            paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         Page<ExamTaskDto> page = new Page<>(pageNumber, pageSize);
@@ -782,7 +791,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return true;
     }
 
-    private void taskAfterPass(ReviewStatusEnum statusEnum, Long examTaskId, ExamTaskPaperLog examTaskPaperLog, SysUser sysUser) {
+    private void taskAfterPass(ReviewStatusEnum statusEnum, Long examTaskId, ExamTaskPaperLog
+            examTaskPaperLog, SysUser sysUser) {
         // 更新记录表状态
         examTaskPaperLog.setReview(true);
         examTaskPaperLog.setReviewStatus(statusEnum);
@@ -818,7 +828,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public IPage<ExamTaskDetailDto> listTaskPaper(String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamTaskDetailDto> listTaskPaper(String courseCode, String paperNumber, Long startTime, Long
+            endTime, Integer pageNumber, Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         // 查询用户角色是否包含命题老师
         List<SysRole> list = sysUserRoleService.listRoleByUserId(sysUser.getId());
@@ -1016,7 +1027,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
      * @return
      */
     @Override
-    public IPage<WorkResult> queryByMyWorkSubmit(IPage<Map> iPage, Long userId, Long schoolId, ExamStatusEnum status) {
+    public IPage<WorkResult> queryByMyWorkSubmit(IPage<Map> iPage, Long userId, Long schoolId, ExamStatusEnum
+            status) {
         return examTaskMapper.queryByMyWorkSubmit(iPage, userId, schoolId, Objects.nonNull(status) ? status.name() : null);
     }
 
@@ -1093,7 +1105,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public IPage<ClientExamTaskDto> listTryTask(Long schoolId, String machineCode, Long orgId, Long printPlanId, String courseCode, String paperNumber, Boolean isTry, Boolean isPass, Integer pageNumber, Integer pageSize) {
+    public IPage<ClientExamTaskDto> listTryTask(Long schoolId, String machineCode, Long orgId, Long
+            printPlanId, String courseCode, String paperNumber, Boolean isTry, Boolean isPass, Integer pageNumber, Integer
+                                                        pageSize) {
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(orgId);
         Page<ClientExamTaskDto> page = new Page<>(pageNumber, pageSize);
         // 印刷任务状态为印刷中(PRINTING),考场状态为待打印(WAITING)
@@ -1103,7 +1117,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public List<ClientExamTaskDto> listTryTask(Long schoolId, String machineCode, Long orgId, Long printPlanId, String courseCode, String paperNumber, Boolean isTry, Boolean isPass) {
+    public List<ClientExamTaskDto> listTryTask(Long schoolId, String machineCode, Long orgId, Long
+            printPlanId, String courseCode, String paperNumber, Boolean isTry, Boolean isPass) {
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(orgId);
         // 印刷任务状态为印刷中(PRINTING),考场状态为待打印(WAITING)
         String[] examDetailstatus = {ExamDetailStatusEnum.NEW.name(), ExamDetailStatusEnum.READY.name()};
@@ -1269,7 +1284,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public List<ExamTaskDetailDto> listTaskPaper(String courseCode, String paperNumber, Long startTime, Long endTime) {
+    public List<ExamTaskDetailDto> listTaskPaper(String courseCode, String paperNumber, Long startTime, Long
+            endTime) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         // 查询用户角色是否包含命题老师
         List<SysRole> list = sysUserRoleService.listRoleByUserId(sysUser.getId());

+ 358 - 1
distributed-print/.bpmn/src/main/resources/processes/GdykdxPaperApprove.bpmn2d

@@ -1,6 +1,363 @@
 <?xml version="1.0" encoding="ASCII"?>
-<pi:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:al="http://eclipse.org/graphiti/mm/algorithms" xmlns:pi="http://eclipse.org/graphiti/mm/pictograms" visible="true" gridUnit="10" diagramTypeId="BPMNdiagram" name="GdykdxPaperApprove" snapToGrid="true" version="0.11.0">
+<pi:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:al="http://eclipse.org/graphiti/mm/algorithms" xmlns:pi="http://eclipse.org/graphiti/mm/pictograms" visible="true" active="true" gridUnit="10" diagramTypeId="BPMNdiagram" name="GdykdxPaperApprove" snapToGrid="true" version="0.11.0">
   <graphicsAlgorithm xsi:type="al:Rectangle" background="//@colors.1" foreground="//@colors.0" lineWidth="1" transparency="0.0" width="1000" height="1000"/>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="1247334493"/>
+    <graphicsAlgorithm xsi:type="al:Ellipse" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="35" height="35" x="43" y="46">
+      <graphicsAlgorithmChildren xsi:type="al:Ellipse" lineWidth="1" transparency="0.0" width="35" height="35" style="//@styles.0"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="//@connections.0"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.0/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="1.0" relativeHeight="0.51">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+  </children>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="337912484"/>
+    <graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="105" height="55" x="151" y="36">
+      <graphicsAlgorithmChildren xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="105" height="55" style="//@styles.1" cornerHeight="20" cornerWidth="20"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="//@connections.1" incomingConnections="//@connections.0 //@connections.4 //@connections.8"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.1/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="1.0" relativeHeight="0.51">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <children visible="true">
+      <properties key="independentObject" value="337912484"/>
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="105" height="23" y="20" style="//@styles.1" font="//@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="&#x63d0;&#x4ea4;&#x8bd5;&#x5377;(&#x547d;&#x9898;&#x8001;&#x5e08;)"/>
+    </children>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Image" lineWidth="1" transparency="0.0" width="16" height="16" x="5" y="5" id="org.activiti.designer.guiusertask" stretchH="false" stretchV="false" proportional="false"/>
+    </children>
+  </children>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="1932869966"/>
+    <graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="105" height="55" x="350" y="36">
+      <graphicsAlgorithmChildren xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="105" height="55" style="//@styles.1" cornerHeight="20" cornerWidth="20"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="//@connections.2" incomingConnections="//@connections.1 //@connections.7"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.2/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="1.0" relativeHeight="0.51">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <children visible="true">
+      <properties key="independentObject" value="1932869966"/>
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="105" height="23" y="20" style="//@styles.1" font="//@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="&#x5ba1;&#x6838;&#x8bd5;&#x5377;(&#x6559;&#x7814;&#x5ba4;&#x4e3b;&#x4efb;)"/>
+    </children>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Image" lineWidth="1" transparency="0.0" width="16" height="16" x="5" y="5" id="org.activiti.designer.guiusertask" stretchH="false" stretchV="false" proportional="false"/>
+    </children>
+  </children>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="1708836882"/>
+    <graphicsAlgorithm xsi:type="al:Ellipse" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="35" height="35" x="385" y="400">
+      <graphicsAlgorithmChildren xsi:type="al:Ellipse" lineWidth="3" transparency="0.0" width="35" height="35" style="//@styles.0"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" incomingConnections="//@connections.6"/>
+  </children>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="1552300438"/>
+    <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="40" height="40" x="382" y="110">
+      <graphicsAlgorithmChildren xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" width="40" height="40" style="//@styles.0">
+        <points y="20"/>
+        <points x="20"/>
+        <points x="40" y="20"/>
+        <points x="20" y="40"/>
+        <points y="20"/>
+      </graphicsAlgorithmChildren>
+      <points y="20"/>
+      <points x="20"/>
+      <points x="40" y="20"/>
+      <points x="20" y="40"/>
+      <points y="20"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="//@connections.3 //@connections.4" incomingConnections="//@connections.2"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.4/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="0.51" relativeHeight="0.1">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <anchors xsi:type="pi:ChopboxAnchor"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.4/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="0.51" relativeHeight="0.93">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Polyline" lineWidth="5" filled="false" transparency="0.0" style="//@styles.0">
+        <points x="30" y="10"/>
+        <points x="10" y="30"/>
+      </graphicsAlgorithm>
+    </children>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Polyline" lineWidth="5" filled="false" transparency="0.0" style="//@styles.0">
+        <points x="10" y="10"/>
+        <points x="30" y="30"/>
+      </graphicsAlgorithm>
+    </children>
+  </children>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="1610993637"/>
+    <graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="105" height="55" x="350" y="190">
+      <graphicsAlgorithmChildren xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="105" height="55" style="//@styles.1" cornerHeight="20" cornerWidth="20"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="//@connections.5" incomingConnections="//@connections.3"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.5/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="1.0" relativeHeight="0.51">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <children visible="true">
+      <properties key="independentObject" value="1610993637"/>
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="105" height="23" y="20" style="//@styles.1" font="//@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="&#x5ba1;&#x6838;&#x8bd5;&#x5377;(&#x6559;&#x5b66;&#x9662;&#x957f;)"/>
+    </children>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Image" lineWidth="1" transparency="0.0" width="16" height="16" x="5" y="5" id="org.activiti.designer.guiusertask" stretchH="false" stretchV="false" proportional="false"/>
+    </children>
+  </children>
+  <children xsi:type="pi:ContainerShape" visible="true" active="true">
+    <properties key="independentObject" value="353544039"/>
+    <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="40" height="40" x="382" y="300">
+      <graphicsAlgorithmChildren xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" width="40" height="40" style="//@styles.0">
+        <points y="20"/>
+        <points x="20"/>
+        <points x="40" y="20"/>
+        <points x="20" y="40"/>
+        <points y="20"/>
+      </graphicsAlgorithmChildren>
+      <points y="20"/>
+      <points x="20"/>
+      <points x="40" y="20"/>
+      <points x="20" y="40"/>
+      <points y="20"/>
+    </graphicsAlgorithm>
+    <anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="//@connections.6 //@connections.7 //@connections.8" incomingConnections="//@connections.5"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.6/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="0.51" relativeHeight="0.1">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <anchors xsi:type="pi:ChopboxAnchor"/>
+    <anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="//@children.6/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="0.51" relativeHeight="0.93">
+      <graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
+    </anchors>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Polyline" lineWidth="5" filled="false" transparency="0.0" style="//@styles.0">
+        <points x="30" y="10"/>
+        <points x="10" y="30"/>
+      </graphicsAlgorithm>
+    </children>
+    <children visible="true">
+      <graphicsAlgorithm xsi:type="al:Polyline" lineWidth="5" filled="false" transparency="0.0" style="//@styles.0">
+        <points x="10" y="10"/>
+        <points x="30" y="30"/>
+      </graphicsAlgorithm>
+    </children>
+  </children>
+  <styles foreground="//@colors.2" lineWidth="20" id="EVENT">
+    <renderingStyle>
+      <adaptedGradientColoredAreas definedStyleId="bpmnEventStyle" gradientType="0">
+        <adaptedGradientColoredAreas styleAdaption="0">
+          <gradientColor>
+            <start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
+              <color red="250" green="251" blue="252"/>
+            </start>
+            <end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
+              <color red="250" green="251" blue="252"/>
+            </end>
+          </gradientColor>
+        </adaptedGradientColoredAreas>
+        <adaptedGradientColoredAreas styleAdaption="0">
+          <gradientColor>
+            <start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </start>
+            <end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </end>
+          </gradientColor>
+        </adaptedGradientColoredAreas>
+        <adaptedGradientColoredAreas styleAdaption="0">
+          <gradientColor>
+            <start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </start>
+            <end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </end>
+          </gradientColor>
+        </adaptedGradientColoredAreas>
+      </adaptedGradientColoredAreas>
+    </renderingStyle>
+  </styles>
+  <styles foreground="//@colors.2" lineWidth="20" id="TASK">
+    <renderingStyle>
+      <adaptedGradientColoredAreas definedStyleId="bpmnTaskStyle" gradientType="0">
+        <adaptedGradientColoredAreas styleAdaption="0">
+          <gradientColor>
+            <start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
+              <color red="250" green="251" blue="252"/>
+            </start>
+            <end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
+              <color red="255" green="255" blue="204"/>
+            </end>
+          </gradientColor>
+        </adaptedGradientColoredAreas>
+        <adaptedGradientColoredAreas styleAdaption="0">
+          <gradientColor>
+            <start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </start>
+            <end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </end>
+          </gradientColor>
+        </adaptedGradientColoredAreas>
+        <adaptedGradientColoredAreas styleAdaption="0">
+          <gradientColor>
+            <start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </start>
+            <end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
+              <color red="229" green="229" blue="194"/>
+            </end>
+          </gradientColor>
+        </adaptedGradientColoredAreas>
+      </adaptedGradientColoredAreas>
+    </renderingStyle>
+  </styles>
+  <styles background="//@colors.2" foreground="//@colors.2" lineWidth="1" id="BPMN-POLYGON-ARROW"/>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.0/@anchors.0" end="//@children.1/@anchors.0">
+    <properties key="independentObject" value="1962559633"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.1/@anchors.0" end="//@children.2/@anchors.0">
+    <properties key="independentObject" value="853192721"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.2/@anchors.0" end="//@children.4/@anchors.0">
+    <properties key="independentObject" value="1857357520"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.4/@anchors.0" end="//@children.5/@anchors.0">
+    <properties key="independentObject" value="1124407949"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="22" height="16" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP" value="&#x901a;&#x8fc7;"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.4/@anchors.0" end="//@children.1/@anchors.0">
+    <properties key="independentObject" value="1671386208"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="22" height="16" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP" value="&#x9a73;&#x56de;"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+    <bendpoints x="203" y="130"/>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.5/@anchors.0" end="//@children.6/@anchors.0">
+    <properties key="independentObject" value="2121613270"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.6/@anchors.0" end="//@children.3/@anchors.0">
+    <properties key="independentObject" value="1726891584"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="22" height="16" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP" value="&#x901a;&#x8fc7;"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.6/@anchors.0" end="//@children.2/@anchors.0">
+    <properties key="independentObject" value="1761403877"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="22" height="16" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP" value="&#x9a73;&#x56de;"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+    <bendpoints x="546" y="319"/>
+    <bendpoints x="546" y="63"/>
+  </connections>
+  <connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="//@children.6/@anchors.0" end="//@children.1/@anchors.0">
+    <properties key="independentObject" value="1822416993"/>
+    <graphicsAlgorithm xsi:type="al:Polyline" foreground="//@colors.2" lineWidth="1" filled="false" transparency="0.0"/>
+    <connectionDecorators visible="true" active="true" location="0.5">
+      <graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" transparency="0.0" width="22" height="16" style="//@styles.1" font="//@fonts.1" verticalAlignment="ALIGNMENT_TOP" value="&#x9a73;&#x56de;"/>
+    </connectionDecorators>
+    <connectionDecorators visible="true" locationRelative="true" location="1.0">
+      <graphicsAlgorithm xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" style="//@styles.2">
+        <points x="-10" y="-5" before="3" after="3"/>
+        <points/>
+        <points x="-10" y="5" before="3" after="3"/>
+        <points x="-8" before="3" after="3"/>
+      </graphicsAlgorithm>
+    </connectionDecorators>
+    <bendpoints x="203" y="321"/>
+  </connections>
   <colors red="227" green="238" blue="249"/>
   <colors red="255" green="255" blue="255"/>
+  <colors/>
+  <fonts name="Arial" size="8"/>
+  <fonts name="Arial" size="11"/>
 </pi:Diagram>

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java

@@ -148,7 +148,7 @@ public class TFFlowController {
     public Result start() {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Map<String, Object> map = new HashMap<>();
-        map.computeIfAbsent(SystemConstant.TEACH_ID, v -> String.valueOf(sysUser.getId()));
+        map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(sysUser.getId()));
         activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
         return ResultUtil.ok();
     }

+ 1 - 1
distributed-print/src/main/resources/processes/GdykdxPaperApprove.bpmn

@@ -2,7 +2,7 @@
 <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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
   <process id="GdykdxPaperApprove" name="GdykdxPaperApprove" isExecutable="true">
     <startEvent id="startevent1" name="Start"></startEvent>
-    <userTask id="usertask1" name="提交试卷(命题老师)" activiti:assignee="${teachId}"></userTask>
+    <userTask id="usertask1" name="提交试卷(命题老师)" activiti:assignee="${approveId}"></userTask>
     <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
     <userTask id="usertask2" name="审核试卷(教研室主任)">
       <extensionElements>

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

@@ -183,7 +183,7 @@ public class SystemConstant {
      */
     public static final String PROCESSES = "processes";
     public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";//流程key
-    public static final String TEACH_ID = "teachId";//命题老师id
+    public static final String APPROVE_ID = "approveId";//审批id
     public static final String FLOW_ID = "flowId";//流程id
     public static final String TASK_ID = "taskId";//命题任务id
     public static final String FLOW_TASK_ID = "flowTaskId";//流程任务id

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowGdykdxApproveSetupEnum.java

@@ -57,4 +57,19 @@ public enum FlowGdykdxApproveSetupEnum {
         }
         return null;
     }
+
+    /**
+     * 状态转换 ToInstance
+     *
+     * @param id
+     * @return
+     */
+    public static FlowGdykdxApproveSetupEnum convertToInstance(String id) {
+        for (FlowGdykdxApproveSetupEnum e : FlowGdykdxApproveSetupEnum.values()) {
+            if (Objects.equals(id, e.getId())) {
+                return e;
+            }
+        }
+        return null;
+    }
 }

+ 0 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowStatusEnum.java

@@ -11,10 +11,6 @@ import java.util.Objects;
  */
 public enum FlowStatusEnum {
 
-    DRAFT("草稿"),
-
-    TO_BE_SUBMIT("待提交"),
-
     SUBMIT("已提交"),
 
     AUDITING("审核中"),