Просмотр исходного кода

质量问题审核流程修改

wangliang 1 год назад
Родитель
Сommit
826f4a415f

+ 123 - 101
sop-business/src/main/java/com/qmth/sop/business/activiti/listener/ProcessEventListener.java

@@ -1,6 +1,7 @@
 package com.qmth.sop.business.activiti.listener;
 
 import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.sop.business.bean.result.FlowFormWidgetResult;
 import com.qmth.sop.business.bean.result.FlowResult;
 import com.qmth.sop.business.bean.result.FlowTablePropResult;
@@ -62,110 +63,13 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                     log.info("ENTITY_CREATED,id:{},name:{},deploymentId:{},persistentState:{}", resourceEntity.getId(), resourceEntity.getName(), resourceEntity.getDeploymentId(), resourceEntity.getPersistentState());
                     String xml = new String(resourceEntity.getBytes(), StandardCharsets.UTF_8);
                     if (resourceEntity.getName().endsWith(SystemConstant.BPMN_PREFIX)) {
-                        log.info("ENTITY_CREATED,xml:{}", xml);
-                        try {
-                            Document doc = DocumentHelper.parseText(xml);
-                            Element rootElement = doc.getRootElement();
-                            // 通过element对象的elementIterator方法获取迭代器
-                            Iterator iterator = rootElement.elementIterator();
-                            LinkedHashMap<String, FlowTaskResult> setupMap = new LinkedHashMap<>();//流程审批步骤map
-                            TFCustomTypeEnum customTypeEnum = null;
-                            while (iterator.hasNext()) {
-                                Element element = (Element) iterator.next();
-                                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())
-                                                    || 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;
-                                    }
-                                }
-                                Iterator itt = element.elementIterator();
-                                while (itt.hasNext()) {
-                                    FlowTaskResult flowTaskResult = new FlowTaskResult();
-                                    Element node = (Element) itt.next();
-                                    attributes = node.attributes();
-//                                    log.info("节点:{},---值:{}", node.getName(), node.getStringValue());
-                                    if (Objects.equals(node.getName(), SystemConstant.USER_TASK) || Objects.equals(node.getName(), SystemConstant.END_EVENT)) {
-                                        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());
-                                            }
-//                                            else if (Objects.equals(attr.getName(), SystemConstant.ASSIGNEE_USER)) {
-//                                                flowTaskResult.setFlowTaskVar(attr.getValue().replaceAll("\\$\\{", "").replaceAll("\\}", ""));
-//                                            }
-                                            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());
-                                                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);
-                                                for (FlowFormWidgetResult f : listData) {
-                                                    f.setFormId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormId());
-                                                    f.setFormName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormName());
-                                                    if (!CollectionUtils.isEmpty(f.getTablePropList())) {
-                                                        for (FlowTablePropResult t : f.getTablePropList()) {
-                                                            t.setTdId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdId());
-                                                            t.setTdName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdName());
-                                                        }
-                                                    }
-                                                }
-                                                flowTaskResult.setFormProperty(listData);
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                            List<Map.Entry<String, FlowTaskResult>> entryList = new ArrayList<Map.Entry<String, FlowTaskResult>>(setupMap.entrySet());
-                            //比较器
-                            Collections.sort(entryList, new Comparator<Map.Entry<String, FlowTaskResult>>() {
-                                @Override
-                                public int compare(Map.Entry<String, FlowTaskResult> o1, Map.Entry<String, FlowTaskResult> o2) {
-                                    if (o2.getValue().getSetup() < o1.getValue().getSetup()) {
-                                        return 1;
-                                    } else if (o2.getValue().getSetup() > o1.getValue().getSetup()) {
-                                        return -1;
-                                    } else {
-                                        return 0;
-                                    }
-                                }
-                            });
-                            setupMap.clear();
-                            Iterator<Map.Entry<String, FlowTaskResult>> iter = entryList.iterator();
-                            Map.Entry<String, FlowTaskResult> tmpEntry = null;
-                            while (iter.hasNext()) {
-                                tmpEntry = iter.next();
-                                setupMap.put(tmpEntry.getKey(), tmpEntry.getValue());
-                            }
-                            FlowResult flowResult = new FlowResult(resourceEntity.getDeploymentId(), resourceEntity.getName(), setupMap);
-                            log.info("flowResult:{}", JacksonUtil.parseJson(flowResult));
-                            TFCustomFlowService tfCustomFlowService = SpringContextHolder.getBean(TFCustomFlowService.class);
-                            TFCustomFlow maxTfCustomFlow = tfCustomFlowService.findMaxVersion(null, flowResult.getFlowName(), customTypeEnum);
-                            TFCustomFlow tfCustomFlow = new TFCustomFlow(null, flowResult.getFlowName(), customTypeEnum, flowResult.getFlowDeploymentId(), TFCustomModelTypeEnum.USER_FIXED);
-                            flowResult.setId(tfCustomFlow.getId());
-                            if (Objects.nonNull(maxTfCustomFlow)) {
-                                tfCustomFlow.setVersion(maxTfCustomFlow.getVersion() + 1);
-                            } else {
-                                tfCustomFlow.setVersion(1);
-                            }
-                            flowResult.setVersion(tfCustomFlow.getVersion());
-                            tfCustomFlow.setFlowProcessVar(JacksonUtil.parseJson(flowResult));
-                            tfCustomFlowService.save(tfCustomFlow);
-                        } catch (DocumentException e) {
-                            log.error(SystemConstant.LOG_ERROR, e);
-                        }
+                        parseXml(xml, resourceEntity);
                     } else {
 //                        log.info("ENTITY_CREATED,data:{}", data);
                         SystemConstant.FLOW_MAP.add(resourceEntity.getDeploymentId() + SystemConstant.FLOW_FORM_ID_SPACE + resourceEntity.getName(), xml);
+                        if (SystemConstant.FLOW_MAP.containsKey(resourceEntity.getDeploymentId() + SystemConstant.BPMN_PREFIX)) {
+                            parseXml(SystemConstant.FLOW_MAP.get(resourceEntity.getDeploymentId() + SystemConstant.BPMN_PREFIX).get(0), resourceEntity);
+                        }
                     }
                 }
                 break;
@@ -179,4 +83,122 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
     public boolean isFailOnException() {
         return false;
     }
+
+    /**
+     * 解析xml
+     *
+     * @param xml
+     * @param resourceEntity
+     */
+    protected void parseXml(String xml, ResourceEntity resourceEntity) {
+        log.info("ENTITY_CREATED,xml:{}", xml);
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            Element rootElement = doc.getRootElement();
+            // 通过element对象的elementIterator方法获取迭代器
+            Iterator iterator = rootElement.elementIterator();
+            LinkedHashMap<String, FlowTaskResult> setupMap = new LinkedHashMap<>();//流程审批步骤map
+            TFCustomTypeEnum customTypeEnum = null;
+            while (iterator.hasNext()) {
+                Element element = (Element) iterator.next();
+                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())
+                                    || 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;
+                    }
+                }
+                Iterator itt = element.elementIterator();
+                while (itt.hasNext()) {
+                    FlowTaskResult flowTaskResult = new FlowTaskResult();
+                    Element node = (Element) itt.next();
+                    attributes = node.attributes();
+//                    log.info("节点:{},---值:{}", node.getName(), node.getStringValue());
+                    if (Objects.equals(node.getName(), SystemConstant.USER_TASK) || Objects.equals(node.getName(), SystemConstant.END_EVENT)) {
+                        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());
+                            }
+//                                            else if (Objects.equals(attr.getName(), SystemConstant.ASSIGNEE_USER)) {
+//                                                flowTaskResult.setFlowTaskVar(attr.getValue().replaceAll("\\$\\{", "").replaceAll("\\}", ""));
+//                                            }
+                            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());
+                                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);
+                                for (FlowFormWidgetResult f : listData) {
+                                    f.setFormId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormId());
+                                    f.setFormName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormName());
+                                    if (!CollectionUtils.isEmpty(f.getTablePropList())) {
+                                        for (FlowTablePropResult t : f.getTablePropList()) {
+                                            t.setTdId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdId());
+                                            t.setTdName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdName());
+                                        }
+                                    }
+                                }
+                                flowTaskResult.setFormProperty(listData);
+                            }
+                        }
+                    }
+                }
+            }
+            List<Map.Entry<String, FlowTaskResult>> entryList = new ArrayList<Map.Entry<String, FlowTaskResult>>(setupMap.entrySet());
+            //比较器
+            Collections.sort(entryList, new Comparator<Map.Entry<String, FlowTaskResult>>() {
+                @Override
+                public int compare(Map.Entry<String, FlowTaskResult> o1, Map.Entry<String, FlowTaskResult> o2) {
+                    if (o2.getValue().getSetup() < o1.getValue().getSetup()) {
+                        return 1;
+                    } else if (o2.getValue().getSetup() > o1.getValue().getSetup()) {
+                        return -1;
+                    } else {
+                        return 0;
+                    }
+                }
+            });
+            setupMap.clear();
+            Iterator<Map.Entry<String, FlowTaskResult>> iter = entryList.iterator();
+            Map.Entry<String, FlowTaskResult> tmpEntry = null;
+            while (iter.hasNext()) {
+                tmpEntry = iter.next();
+                setupMap.put(tmpEntry.getKey(), tmpEntry.getValue());
+            }
+            FlowResult flowResult = new FlowResult(resourceEntity.getDeploymentId(), resourceEntity.getName(), setupMap);
+//            log.info("flowResult:{}", JacksonUtil.parseJson(flowResult));
+            TFCustomFlowService tfCustomFlowService = SpringContextHolder.getBean(TFCustomFlowService.class);
+            TFCustomFlow tfCustomFlow = tfCustomFlowService.getOne(new QueryWrapper<TFCustomFlow>().lambda().eq(TFCustomFlow::getFlowDeploymentId, flowResult.getFlowDeploymentId()));
+            if (Objects.isNull(tfCustomFlow)) {
+                TFCustomFlow maxTfCustomFlow = tfCustomFlowService.findMaxVersion(null, flowResult.getFlowName(), customTypeEnum);
+                tfCustomFlow = new TFCustomFlow(null, flowResult.getFlowName(), customTypeEnum, flowResult.getFlowDeploymentId(), TFCustomModelTypeEnum.USER_FIXED);
+                flowResult.setId(tfCustomFlow.getId());
+                if (Objects.nonNull(maxTfCustomFlow)) {
+                    tfCustomFlow.setVersion(maxTfCustomFlow.getVersion() + 1);
+                } else {
+                    tfCustomFlow.setVersion(1);
+                }
+                flowResult.setVersion(tfCustomFlow.getVersion());
+            } else {
+                flowResult.setId(tfCustomFlow.getId());
+                flowResult.setVersion(tfCustomFlow.getVersion());
+                tfCustomFlow.setUpdateTime(System.currentTimeMillis());
+            }
+            tfCustomFlow.setFlowProcessVar(JacksonUtil.parseJson(flowResult));
+            tfCustomFlowService.saveOrUpdate(tfCustomFlow);
+        } catch (DocumentException e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+        SystemConstant.FLOW_MAP.add(resourceEntity.getDeploymentId() + SystemConstant.BPMN_PREFIX, xml);
+    }
 }

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

@@ -362,16 +362,16 @@ public class ActivitiServiceImpl implements ActivitiService {
                 tfCustomFlowService.updateById(tfCustomFlow);
             }
             flowResult = JSONObject.parseObject(tfCustomFlow.getFlowProcessVar(), FlowResult.class);
-            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.QUALITY_PROBLEM_FLOW) {
                 map = this.getFlowFormPropertie(flowResult, map, 1);
             }
         } else if (Objects.nonNull(flowId)) {
-            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.QUALITY_PROBLEM_FLOW) {
                 taskList = taskService.createTaskQuery().processInstanceId(String.valueOf(flowId)).list();
                 map = this.getFlowFormPropertie(map, taskList, flowResult, tfCustomFlow);
             }
         } else {
-            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+            if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.QUALITY_PROBLEM_FLOW) {
                 taskList = taskService.createTaskQuery().taskId(String.valueOf(taskId)).list();
                 map = this.getFlowFormPropertie(map, taskList, flowResult, tfCustomFlow);
             }

+ 3 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/WidgetInputTypeEnum.java

@@ -23,7 +23,9 @@ public enum WidgetInputTypeEnum {
 
     BOOL("布尔"),
 
-    BIGDECIMAL("精确浮点");
+    BIGDECIMAL("精确浮点"),
+
+    FILE("文件");
 
     private String title;
 

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

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

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

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

+ 7 - 7
sop-server/src/main/resources/qualityProblemFlow.bpmn

@@ -1,13 +1,13 @@
 <?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">
+    <userTask id="f_usertask_quality_problem_approve_2" name="项目计划变更审核" activiti:assignee="${assignee2}" activiti:formKey="quality_problem_approve.form">
+      <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_quality_problem_apply_1" name="质量问题反馈申请" activiti:assignee="${assignee1}">
+    <userTask id="f_usertask_quality_problem_apply_1" name="质量问题反馈申请" activiti:assignee="${assignee1}" activiti:formKey="quality_problem_apply.form">
       <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${assigneeList1}" activiti:elementVariable="assignee1">
         <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject1==1}</completionCondition>
       </multiInstanceLoopCharacteristics>
@@ -17,8 +17,8 @@
     <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">
+    <userTask id="f_usertask_quality_problem_check_3" name="项目计划变更复核" activiti:assignee="${assignee3}" activiti:formKey="quality_problem_check.form">
+      <multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${assigneeList3}" activiti:elementVariable="assignee3">
         <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject3==1}</completionCondition>
       </multiInstanceLoopCharacteristics>
     </userTask>
@@ -30,8 +30,8 @@
     <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">
+    <userTask id="f_usertask_quality_problem_third_check_4" name="乙方复核" activiti:assignee="${assignee4}" activiti:formKey="quality_problem_check.form">
+      <multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${assigneeList4}" activiti:elementVariable="assignee4">
         <completionCondition>${nrOfCompletedInstances/nrOfInstances==1 || reject4==1}</completionCondition>
       </multiInstanceLoopCharacteristics>
     </userTask>

BIN
sop-server/src/main/resources/qualityProblemFlow.zip


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
sop-server/src/main/resources/quality_problem_apply.form


+ 1 - 0
sop-server/src/main/resources/quality_problem_approve.form

@@ -0,0 +1 @@
+[{"id":"120","code":"TEXT","type":"FORM","formId":"verify_point","formName":"verify_point","title":"核实情况简要","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"length":50,"name":"文本","span":12},{"id":"121","code":"TEXTAREA","type":"FORM","formId":"verify_remark","formName":"verify_remark","title":"核实情况备注","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"length":500,"name":"文本域","span":12},{"id":"122","code":"POP_SELECT","type":"FORM","formId":"approve_users","formName":"approve_users","title":"责任人多选","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"dataGrid":"/api/admin/common/get_org_user_list","name":"弹出选择框","span":6},{"id":"123","code":"SELECT","type":"FORM","formId":"problem_type","formName":"problem_type","title":"问题类型","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"dataGrid":"/api/admin/common/get_problem_type_list","name":"下拉框","span":6},{"id":"124","code":"POP_SELECT","type":"FORM","formId":"approve_check_users","formName":"approve_check_users","title":"复核人多选","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"dataGrid":"/api/admin/common/get_org_user_list","name":"弹出选择框","span":6},{"id":"125","code":"FILE","type":"FORM","formId":"attachment","formName":"attachment","title":"附图","inputType":"FILE","required":false,"readable":false,"writable":true,"visable":true,"name":"文件","span":6}]

+ 1 - 0
sop-server/src/main/resources/quality_problem_check.form

@@ -0,0 +1 @@
+[{"id":"130","code":"LABEL","type":"FORM","formId":"approve_info","formName":"approve_info","title":"审批意见","inputType":"STRING","required":true,"readable":true,"writable":false,"visable":true,"name":"标签","span":12},{"id":"131","code":"RADIO","type":"FORM","formId":"agree","formName":"agree","title":"同意","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"单选框","span":6},{"id":"132","code":"RADIO","type":"FORM","formId":"no_agree","formName":"agree","title":"不同意","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"单选框","span":6},{"id":"133","code":"TEXTAREA","type":"FORM","formId":"approve_remark","formName":"approve_remark","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"文本域","span":9},{"id":"134","code":"SIGN","type":"FORM","formId":"sign","formName":"sign","title":"添加签名","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"签名","span":3}]

Некоторые файлы не были показаны из-за большого количества измененных файлов