baichengfei 5 年 前
コミット
457d6db8b5

+ 52 - 0
src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluateApprovalRefuseService.java

@@ -0,0 +1,52 @@
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
+
+import com.common.workflow.service.util.HttpRequest;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.delegate.DelegateExecution;
+import org.activiti.engine.delegate.ExecutionListener;
+import org.activiti.engine.delegate.Expression;
+import org.springframework.stereotype.Component;
+
+@Component("evaluateAnnualApprovalRefuseService")
+public class EvaluateApprovalRefuseService implements ExecutionListener {
+
+    private Expression stepCode;
+    // 审批驳回
+    @Override
+    public void notify(DelegateExecution delegateExecution) {
+        String callbackUrl = delegateExecution.getVariable("callbackUrl").toString();
+        // String processKey = delegateExecution.getVariable("processKey").toString();
+        String businessKey = delegateExecution.getVariable("businessKey").toString();
+        Object nowStepCode = stepCode.getValue(delegateExecution).toString();
+        String approveUrl = callbackUrl + "/contract-annual-listener/approval-refuse";
+
+        String createUserId = "";
+        if (callbackUrl.length() > 0) {
+            // TODO 哪个环节被驳回的, 方便短信通知使用
+            String taskName = delegateExecution.getEventName();
+            createUserId = HttpRequest.sendGet(approveUrl, "businessKey=" + businessKey + "&stepCode=" + nowStepCode);
+        } else {
+            throw new ActivitiException("无回调地址,请联系管理员!");
+        }
+        if (createUserId.length() <= 0) {
+            throw new ActivitiException("驳回审批失败!请联系管理员!");
+        }
+
+        if (nowStepCode.equals("-1")) {
+            delegateExecution.setVariableLocal("refuseName", "初审未通过");
+        } else if (nowStepCode.equals("-2")) {
+            delegateExecution.setVariableLocal("refuseName", "复审未通过");
+        } else if (nowStepCode.equals("-3")) {
+            delegateExecution.setVariableLocal("refuseName", "专业处接收未通过");
+        } else if (nowStepCode.equals("-4")) {
+            delegateExecution.setVariableLocal("refuseName", "专业处室未通过");
+        } else if (nowStepCode.equals("-5")) {
+            delegateExecution.setVariableLocal("refuseName", "集中评审未通过");
+        } else if (nowStepCode.equals("-10")) {
+            delegateExecution.setVariableLocal("refuseName", "企管法规处未通过");
+        }
+        System.out.println("合同年度评审 线 驳回: " + nowStepCode);
+        delegateExecution.setVariable("backUsers", createUserId);
+        delegateExecution.setVariableLocal("backUsers", createUserId);
+    }
+}

+ 22 - 0
src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluateApprovalRefuseTaskService.java

@@ -0,0 +1,22 @@
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
+
+import org.activiti.engine.delegate.DelegateTask;
+import org.activiti.engine.delegate.TaskListener;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+@Component("evaluateAnnualApprovalRefuseTaskService")
+public class EvaluateApprovalRefuseTaskService implements TaskListener {
+    // 二级单位初审
+    @Override
+    public void notify(DelegateTask delegateTask) {
+        if (delegateTask.getVariable("backUsers") != null) {
+            String backUsers = delegateTask.getVariable("backUsers").toString();
+            delegateTask.setVariable("users", backUsers);
+            delegateTask.setVariableLocal("users", backUsers);
+            delegateTask.addCandidateUsers(Arrays.asList(backUsers.split(",")));
+            System.out.println("合同年度评审 节点 驳回: " + delegateTask.getVariable("backUsers").toString());
+        }
+    }
+}

+ 7 - 8
src/main/java/com/common/workflow/service/activiti/contractDailyEvaluationListener/EvaluatePreFenTrailService.java → src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluateLawOfficeAuditService.java

@@ -1,4 +1,4 @@
-package com.common.workflow.service.activiti.contractDailyEvaluationListener;
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
 
 import com.common.workflow.service.client.FeignClient;
 import com.common.workflow.service.dto.ApproveInfoDTO;
@@ -13,9 +13,9 @@ import org.springframework.stereotype.Component;
 
 import java.util.Arrays;
 
-@Component("evaluatePreFenTrailService")
-public class EvaluatePreFenTrailService implements TaskListener {
-    // 二级单位分办
+@Component("evaluateAnnualLawOfficeAuditService")
+public class EvaluateLawOfficeAuditService implements TaskListener {
+    // 企业法规处审核, 非入库
     @Override
     public void notify(DelegateTask delegateTask) {
         String callbackUrl = delegateTask.getVariable("callbackUrl").toString();
@@ -23,23 +23,22 @@ public class EvaluatePreFenTrailService implements TaskListener {
         ApproveParamsDTO approveParams = new ApproveParamsDTO();
         approveParams.setBusinessKey(businessKey);
         ApproveInfoDTO approveInfo = null;
-
+        String approveInfoJson = "";
         if (callbackUrl.length() > 0) {
             FeignClient client = Feign.builder()
                 .decoder(new JacksonDecoder())
                 .encoder(new JacksonEncoder())
                 .target(FeignClient.class, callbackUrl);
-            approveInfo = client.getEvaluatePreFirstAuditors(approveParams);
+            approveInfo = client.getEvaluateAnnualLawOfficeAuditors(approveParams);
         } else {
             throw new ActivitiException("无回调地址,请联系管理员!");
         }
         if (approveInfo.getUsers().length() <= 0) {
             throw new ActivitiException("未找到审核用户,请联系管理员!");
         }
-        System.out.println("信息变更工作流 获取分办人: " + approveInfo.getUsers());
+        System.out.println("合同年度评审 获取企业法规处审核审核人: " + approveInfo.getUsers());
         delegateTask.setVariable("users", approveInfo.getUsers());
         delegateTask.setVariableLocal("users", approveInfo.getUsers());
         delegateTask.addCandidateUsers(Arrays.asList(approveInfo.getUsers().split(",")));
     }
 }
-

+ 36 - 0
src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluatePreFirstTrailService.java

@@ -0,0 +1,36 @@
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
+
+import com.common.workflow.service.util.HttpRequest;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.delegate.DelegateTask;
+import org.activiti.engine.delegate.TaskListener;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+@Component("evaluateAnnualPreFirstTrailService")
+public class EvaluatePreFirstTrailService implements TaskListener {
+    // 二级单位初审
+    @Override
+    public void notify(DelegateTask delegateTask) {
+        String callbackUrl = delegateTask.getVariable("callbackUrl").toString();
+        // String processKey = delegateTask.getVariable("processKey").toString();
+        String businessKey = delegateTask.getVariable("businessKey").toString();
+
+        String approveUrl = callbackUrl + "/contract-annual-listener/pre-first-trail";
+
+        String approveIds = "";
+        if (callbackUrl.length() > 0) {
+            approveIds = HttpRequest.sendGet(approveUrl, "businessKey=" + businessKey);
+        } else {
+            throw new ActivitiException("无回调地址,请联系管理员!");
+        }
+        if (approveIds.length() <= 0) {
+            throw new ActivitiException("未找到审核用户,请联系管理员!");
+        }
+        System.out.println("合同年度评审工作流 获取初审人: " + approveIds);
+        delegateTask.setVariable("users", approveIds);
+        delegateTask.setVariableLocal("users", approveIds);
+        delegateTask.addCandidateUsers(Arrays.asList(approveIds.split(",")));
+    }
+}

+ 33 - 0
src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluatePreProfAuditService.java

@@ -0,0 +1,33 @@
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
+
+import com.common.workflow.service.util.HttpRequest;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.delegate.DelegateTask;
+import org.activiti.engine.delegate.TaskListener;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+@Component("evaluateAnnualPreProfAuditService")
+public class EvaluatePreProfAuditService  implements TaskListener {
+    // 业务处室专业审批 仅用于回调更新状态
+    @Override
+    public void notify(DelegateTask delegateTask) {
+        String callbackUrl = delegateTask.getVariable("callbackUrl").toString();
+        // String processKey = delegateTask.getVariable("processKey").toString();
+        String businessKey = delegateTask.getVariable("businessKey").toString();
+
+        String approveUrl = callbackUrl + "/contract-annual-listener/pre-prof-audit";
+
+        String res = "";
+        if (callbackUrl.length() > 0) {
+            res = HttpRequest.sendGet(approveUrl, "businessKey=" + businessKey);
+        } else {
+            throw new ActivitiException("无回调地址,请联系管理员!");
+        }
+        if (!res.equals("1")) {
+            throw new ActivitiException("工作流异常,请联系管理员!");
+        }
+        System.out.println("合同年度评审 业务处室专业审批");
+    }
+}

+ 36 - 0
src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluatePreSecondTrailService.java

@@ -0,0 +1,36 @@
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
+
+import com.common.workflow.service.util.HttpRequest;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.delegate.DelegateTask;
+import org.activiti.engine.delegate.TaskListener;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+@Component("evaluateAnnualPreSecondTrailService")
+public class EvaluatePreSecondTrailService implements TaskListener {
+    // 二级单位复审
+    @Override
+    public void notify(DelegateTask delegateTask) {
+        String callbackUrl = delegateTask.getVariable("callbackUrl").toString();
+        // String processKey = delegateTask.getVariable("processKey").toString();
+        String businessKey = delegateTask.getVariable("businessKey").toString();
+
+        String approveUrl = callbackUrl + "/contract-annual-listener/pre-second-trail";
+
+        String approveIds = "";
+        if (callbackUrl.length() > 0) {
+            approveIds = HttpRequest.sendGet(approveUrl, "businessKey=" + businessKey);
+        } else {
+            throw new ActivitiException("无回调地址,请联系管理员!");
+        }
+        if (approveIds.length() <= 0) {
+            throw new ActivitiException("未找到审核用户,请联系管理员!");
+        }
+        System.out.println("合同年度评审工作流 获取二级单位复审审核人: " + approveIds);
+        delegateTask.setVariable("users", approveIds);
+        delegateTask.setVariableLocal("users", approveIds);
+        delegateTask.addCandidateUsers(Arrays.asList(approveIds.split(",")));
+    }
+}

+ 9 - 6
src/main/java/com/common/workflow/service/activiti/contractDailyEvaluationListener/EvaluatePreStorageAuditService.java → src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluatePreThirdTrialService.java

@@ -1,8 +1,11 @@
-package com.common.workflow.service.activiti.contractDailyEvaluationListener;
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
 
+import com.alibaba.fastjson.JSONObject;
 import com.common.workflow.service.client.FeignClient;
 import com.common.workflow.service.dto.ApproveInfoDTO;
 import com.common.workflow.service.dto.ApproveParamsDTO;
+import com.common.workflow.service.util.HttpRequest;
+import com.fasterxml.jackson.databind.util.JSONPObject;
 import feign.Feign;
 import feign.jackson.JacksonDecoder;
 import feign.jackson.JacksonEncoder;
@@ -13,9 +16,9 @@ import org.springframework.stereotype.Component;
 
 import java.util.Arrays;
 
-@Component("evaluatePreStorageAuditService")
-public class EvaluatePreStorageAuditService implements TaskListener {
-    // 企业法规处入库审核
+@Component("evaluateAnnualPreThirdTrialService")
+public class EvaluatePreThirdTrialService  implements TaskListener {
+    // 业务处室接收分办
     @Override
     public void notify(DelegateTask delegateTask) {
         String callbackUrl = delegateTask.getVariable("callbackUrl").toString();
@@ -29,7 +32,7 @@ public class EvaluatePreStorageAuditService implements TaskListener {
                 .decoder(new JacksonDecoder())
                 .encoder(new JacksonEncoder())
                 .target(FeignClient.class, callbackUrl);
-            approveInfo = client.getEvaluatePreStorageAuditors(approveParams);
+            approveInfo = client.getEvaluateAnnualPreThirdTrail(approveParams);
             // approveInfoJson = HttpRequest.sendGet(approveUrl, "businessKey=" + businessKey);
             // approveInfo = (ApproveInfoDTO) JSONObject.parse(approveInfoJson);
         } else {
@@ -38,7 +41,7 @@ public class EvaluatePreStorageAuditService implements TaskListener {
         if (approveInfo.getUsers().length() <= 0) {
             throw new ActivitiException("未找到审核用户,请联系管理员!");
         }
-        System.out.println("信息变更工作流 获取入库审核人: " + approveInfo.getUsers());
+        System.out.println("合同年度评审 获取业务处室接收分办审批人: " + approveInfo.getUsers());
         delegateTask.setVariable("users", approveInfo.getUsers());
         delegateTask.setVariableLocal("users", approveInfo.getUsers());
         delegateTask.addCandidateUsers(Arrays.asList(approveInfo.getUsers().split(",")));

+ 33 - 0
src/main/java/com/common/workflow/service/activiti/contractAnnualEvaluationListener/EvaluateWorkflowEndService.java

@@ -0,0 +1,33 @@
+package com.common.workflow.service.activiti.contractAnnualEvaluationListener;
+
+import com.common.workflow.service.util.HttpRequest;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.delegate.DelegateExecution;
+import org.activiti.engine.delegate.DelegateTask;
+import org.activiti.engine.delegate.ExecutionListener;
+import org.activiti.engine.delegate.TaskListener;
+import org.springframework.stereotype.Component;
+
+@Component("evaluateAnnualWorkflowEndService")
+public class EvaluateWorkflowEndService implements ExecutionListener {
+    // 企业法规处审批入库完成
+    @Override
+    public void notify(DelegateExecution delegateExecution) {
+        String callbackUrl = delegateExecution.getVariable("callbackUrl").toString();
+        // String processKey = delegateTask.getVariable("processKey").toString();
+        String businessKey = delegateExecution.getVariable("businessKey").toString();
+
+        String approveUrl = callbackUrl + "/contract-annual-listener/workflow-end";
+
+        String res = "0";
+        if (callbackUrl.length() > 0) {
+            res = HttpRequest.sendGet(approveUrl, "businessKey=" + businessKey);
+        } else {
+            throw new ActivitiException("无回调地址,请联系管理员!");
+        }
+        if (res.equals("0")) {
+            throw new ActivitiException("审核入库失败!请联系管理员!");
+        }
+        System.out.println("合同年度评审工作流 结束 ");
+    }
+}

+ 8 - 8
src/main/java/com/common/workflow/service/client/FeignClient.java

@@ -79,11 +79,6 @@ public interface FeignClient {
     ApproveInfoDTO getInfoChangePreStorageAuditors(@RequestBody ApproveParamsDTO approveParamsDTO);
 
     // 合同日常评审 ⬇
-    // 二级单位提交申请 获取分办人员列表
-    @Headers({"Content-Type: application/json","Accept: application/json"})
-    @RequestLine("POST /contract-daily-listener/pre-fen-trail")
-    ApproveInfoDTO getEvaluatePreFirstAuditors(@RequestBody ApproveParamsDTO approveParamsDTO);
-
     @Headers({"Content-Type: application/json","Accept: application/json"})
     @RequestLine("POST /contract-daily-listener/pre-third-trail")
     ApproveInfoDTO getEvaluatePreThirdTrail(@RequestBody ApproveParamsDTO approveParamsDTO);
@@ -91,9 +86,14 @@ public interface FeignClient {
     @Headers({"Content-Type: application/json","Accept: application/json"})
     @RequestLine("POST /contract-daily-listener/law-office-auditors")
     ApproveInfoDTO getEvaluateLawOfficeAuditors(@RequestBody ApproveParamsDTO approveParamsDTO);
-    // 企管法规处入库
+
+    // 合同年审 ⬇
+    @Headers({"Content-Type: application/json","Accept: application/json"})
+    @RequestLine("POST /contract-annual-listener/pre-third-trail")
+    ApproveInfoDTO getEvaluateAnnualPreThirdTrail(@RequestBody ApproveParamsDTO approveParamsDTO);
+
     @Headers({"Content-Type: application/json","Accept: application/json"})
-    @RequestLine("POST /contract-daily-listener/pre-storage-audit")
-    ApproveInfoDTO getEvaluatePreStorageAuditors(@RequestBody ApproveParamsDTO approveParamsDTO);
+    @RequestLine("POST /contract-annual-listener/law-office-auditors")
+    ApproveInfoDTO getEvaluateAnnualLawOfficeAuditors(@RequestBody ApproveParamsDTO approveParamsDTO);
 
 }

+ 230 - 0
src/main/resources/processes/oil_annual_contract_evaluation.bpmn20.xml

@@ -0,0 +1,230 @@
+<?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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
+  <process id="oil_annual_contract_evaluation" name="oil_annual_contract_evaluation" isExecutable="true">
+    <documentation>年度合同评价</documentation>
+    <startEvent id="startEvent1"></startEvent>
+    <exclusiveGateway id="sid-C538D2C1-20B5-4A37-9315-4F2144AA4947"></exclusiveGateway>
+    <userTask id="sid-C4B210EC-9A8C-4E24-823D-6178DF80C1E3" name="二级单位初审" activiti:candidateUsers="${users}">
+      <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${evaluateAnnualPreFirstTrailService}"></activiti:taskListener>
+      </extensionElements>
+    </userTask>
+    <exclusiveGateway id="sid-FD786368-CB74-4798-9732-9FDDCA255213"></exclusiveGateway>
+    <sequenceFlow id="sid-EDD9B2DF-3DAE-43D5-8B21-BEFFAF39DCFA" sourceRef="sid-C4B210EC-9A8C-4E24-823D-6178DF80C1E3" targetRef="sid-FD786368-CB74-4798-9732-9FDDCA255213"></sequenceFlow>
+    <userTask id="sid-0546DD7D-1209-4A32-8DBE-2FCAABAFDE36" name="二级单位复审" activiti:candidateUsers="${users}">
+      <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${evaluateAnnualPreSecondTrailService}"></activiti:taskListener>
+      </extensionElements>
+    </userTask>
+    <exclusiveGateway id="sid-50F2D5C6-151E-473E-924F-C3870F97471A"></exclusiveGateway>
+    <userTask id="sid-F69982A0-3F90-4A87-9951-F2CFA8FBE989" name="专业处室分办" activiti:candidateUsers="${users}">
+      <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${evaluateAnnualPreThirdTrialService}"></activiti:taskListener>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-9A2D0670-8225-4F2B-9FB3-2B87DD502A43" name="专业审批" activiti:candidateUsers="${users}">
+      <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${evaluateAnnualPreProfAuditService}"></activiti:taskListener>
+      </extensionElements>
+    </userTask>
+    <exclusiveGateway id="sid-8E07F48B-65B2-4541-A150-230589C7F95C"></exclusiveGateway>
+    <sequenceFlow id="sid-5F2A768D-E979-4EA6-967D-3096F4E47819" sourceRef="sid-9A2D0670-8225-4F2B-9FB3-2B87DD502A43" targetRef="sid-8E07F48B-65B2-4541-A150-230589C7F95C"></sequenceFlow>
+    <userTask id="sid-E04E3408-E2BB-4EC6-B98E-F80BE1108543" name="企管法规处审批">
+      <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${evaluateAnnualLawOfficeAuditService}"></activiti:taskListener>
+      </extensionElements>
+    </userTask>
+    <userTask id="sid-9EF255A9-52B1-4287-8B53-0FB1D4A7C440" name="年度评价" activiti:assignee="${recorder}">
+      <extensionElements>
+        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
+      </extensionElements>
+    </userTask>
+    <sequenceFlow id="sid-DE0F7BD6-366E-4F25-BC55-32E20E0E87B2" sourceRef="startEvent1" targetRef="sid-9EF255A9-52B1-4287-8B53-0FB1D4A7C440"></sequenceFlow>
+    <userTask id="sid-DACC03AA-AFA8-4413-B45D-C091829081F3" name="审批未通过" activiti:candidateUsers="${users}">
+      <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${evaluateAnnualApprovalRefuseTaskService}"></activiti:taskListener>
+      </extensionElements>
+    </userTask>
+    <exclusiveGateway id="sid-BEFC66DD-132F-4177-A66B-63D5CED8E569"></exclusiveGateway>
+    <sequenceFlow id="sid-D7E91776-67E4-4AEB-9A94-6BCC3940579F" sourceRef="sid-E04E3408-E2BB-4EC6-B98E-F80BE1108543" targetRef="sid-BEFC66DD-132F-4177-A66B-63D5CED8E569"></sequenceFlow>
+    <sequenceFlow id="sid-936CB097-C571-4CCC-A87A-2BA9E81A3D21" sourceRef="sid-9EF255A9-52B1-4287-8B53-0FB1D4A7C440" targetRef="sid-C538D2C1-20B5-4A37-9315-4F2144AA4947"></sequenceFlow>
+    <endEvent id="sid-B04F4DC7-A903-4B14-9A50-2DF73371D021"></endEvent>
+    <sequenceFlow id="sid-82ED82B2-70D5-4451-8947-19ECE964186E" sourceRef="sid-0546DD7D-1209-4A32-8DBE-2FCAABAFDE36" targetRef="sid-50F2D5C6-151E-473E-924F-C3870F97471A"></sequenceFlow>
+    <sequenceFlow id="sid-4A8162DB-FC76-4EEB-9ED1-2F6C34BB955F" sourceRef="sid-F69982A0-3F90-4A87-9951-F2CFA8FBE989" targetRef="sid-9A2D0670-8225-4F2B-9FB3-2B87DD502A43"></sequenceFlow>
+    <sequenceFlow id="sid-1BB01316-967A-4EE7-BCCB-C228297E1C3A" sourceRef="sid-BEFC66DD-132F-4177-A66B-63D5CED8E569" targetRef="sid-DACC03AA-AFA8-4413-B45D-C091829081F3">
+      <extensionElements>
+        <activiti:executionListener event="start" delegateExpression="${evaluateAnnualApprovalRefuseService}">
+          <activiti:field name="stepCode">
+            <activiti:string><![CDATA[-9]]></activiti:string>
+          </activiti:field>
+        </activiti:executionListener>
+      </extensionElements>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-7C2671DD-3ED3-4954-9624-8CAB37D93B9F" sourceRef="sid-8E07F48B-65B2-4541-A150-230589C7F95C" targetRef="sid-DACC03AA-AFA8-4413-B45D-C091829081F3">
+      <extensionElements>
+        <activiti:executionListener event="start" delegateExpression="${evaluateAnnualApprovalRefuseService}">
+          <activiti:field name="stepCode">
+            <activiti:string><![CDATA[-4]]></activiti:string>
+          </activiti:field>
+        </activiti:executionListener>
+      </extensionElements>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-0B8C208F-2626-4C00-8D76-7281BE3C5AFF" sourceRef="sid-50F2D5C6-151E-473E-924F-C3870F97471A" targetRef="sid-DACC03AA-AFA8-4413-B45D-C091829081F3">
+      <extensionElements>
+        <activiti:executionListener event="start" delegateExpression="${evaluateAnnualApprovalRefuseService}">
+          <activiti:field name="stepCode">
+            <activiti:string><![CDATA[-2]]></activiti:string>
+          </activiti:field>
+        </activiti:executionListener>
+      </extensionElements>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-D6C4C528-F1E9-44DD-9571-AA9A4F62295B" sourceRef="sid-8E07F48B-65B2-4541-A150-230589C7F95C" targetRef="sid-E04E3408-E2BB-4EC6-B98E-F80BE1108543">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==1}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-EF9E7048-6BF1-4AD1-8B6B-59F1B628B09D" sourceRef="sid-50F2D5C6-151E-473E-924F-C3870F97471A" targetRef="sid-F69982A0-3F90-4A87-9951-F2CFA8FBE989">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==1}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-656BD5B2-E542-4CC9-8F0A-6E20E9DC7941" sourceRef="sid-FD786368-CB74-4798-9732-9FDDCA255213" targetRef="sid-0546DD7D-1209-4A32-8DBE-2FCAABAFDE36">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==1}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-AD7B8834-3457-4C02-B2CE-BFABA169F94B" sourceRef="sid-FD786368-CB74-4798-9732-9FDDCA255213" targetRef="sid-DACC03AA-AFA8-4413-B45D-C091829081F3">
+      <extensionElements>
+        <activiti:executionListener event="start" delegateExpression="${evaluateAnnualApprovalRefuseService}">
+          <activiti:field name="stepCode">
+            <activiti:string><![CDATA[-1]]></activiti:string>
+          </activiti:field>
+        </activiti:executionListener>
+      </extensionElements>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-9CFA6746-2F45-4937-819D-3C3812A73CBA" sourceRef="sid-DACC03AA-AFA8-4413-B45D-C091829081F3" targetRef="sid-C538D2C1-20B5-4A37-9315-4F2144AA4947"></sequenceFlow>
+    <sequenceFlow id="sid-898C6AF6-1DE5-4121-9FD9-9494A85182F5" sourceRef="sid-C538D2C1-20B5-4A37-9315-4F2144AA4947" targetRef="sid-C4B210EC-9A8C-4E24-823D-6178DF80C1E3"></sequenceFlow>
+    <sequenceFlow id="sid-3CA7D770-9CB1-4506-B7E6-CD9B2793A192" sourceRef="sid-BEFC66DD-132F-4177-A66B-63D5CED8E569" targetRef="sid-B04F4DC7-A903-4B14-9A50-2DF73371D021">
+      <extensionElements>
+        <activiti:executionListener event="start" delegateExpression="${evaluateAnnualWorkflowEndService}"></activiti:executionListener>
+      </extensionElements>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${result==1}]]></conditionExpression>
+    </sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_oil_annual_contract_evaluation">
+    <bpmndi:BPMNPlane bpmnElement="oil_annual_contract_evaluation" id="BPMNPlane_oil_annual_contract_evaluation">
+      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
+        <omgdc:Bounds height="30.0" width="30.0" x="80.0" y="163.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-C538D2C1-20B5-4A37-9315-4F2144AA4947" id="BPMNShape_sid-C538D2C1-20B5-4A37-9315-4F2144AA4947">
+        <omgdc:Bounds height="40.0" width="40.0" x="295.0" y="158.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-C4B210EC-9A8C-4E24-823D-6178DF80C1E3" id="BPMNShape_sid-C4B210EC-9A8C-4E24-823D-6178DF80C1E3">
+        <omgdc:Bounds height="80.0" width="100.0" x="380.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-FD786368-CB74-4798-9732-9FDDCA255213" id="BPMNShape_sid-FD786368-CB74-4798-9732-9FDDCA255213">
+        <omgdc:Bounds height="40.0" width="40.0" x="525.0" y="158.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-0546DD7D-1209-4A32-8DBE-2FCAABAFDE36" id="BPMNShape_sid-0546DD7D-1209-4A32-8DBE-2FCAABAFDE36">
+        <omgdc:Bounds height="80.0" width="100.0" x="610.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-50F2D5C6-151E-473E-924F-C3870F97471A" id="BPMNShape_sid-50F2D5C6-151E-473E-924F-C3870F97471A">
+        <omgdc:Bounds height="40.0" width="40.0" x="755.0" y="158.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-F69982A0-3F90-4A87-9951-F2CFA8FBE989" id="BPMNShape_sid-F69982A0-3F90-4A87-9951-F2CFA8FBE989">
+        <omgdc:Bounds height="80.0" width="100.0" x="840.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-9A2D0670-8225-4F2B-9FB3-2B87DD502A43" id="BPMNShape_sid-9A2D0670-8225-4F2B-9FB3-2B87DD502A43">
+        <omgdc:Bounds height="80.0" width="100.0" x="985.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-8E07F48B-65B2-4541-A150-230589C7F95C" id="BPMNShape_sid-8E07F48B-65B2-4541-A150-230589C7F95C">
+        <omgdc:Bounds height="40.0" width="40.0" x="1130.0" y="158.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-E04E3408-E2BB-4EC6-B98E-F80BE1108543" id="BPMNShape_sid-E04E3408-E2BB-4EC6-B98E-F80BE1108543">
+        <omgdc:Bounds height="80.0" width="100.0" x="1215.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-9EF255A9-52B1-4287-8B53-0FB1D4A7C440" id="BPMNShape_sid-9EF255A9-52B1-4287-8B53-0FB1D4A7C440">
+        <omgdc:Bounds height="80.0" width="100.0" x="155.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-DACC03AA-AFA8-4413-B45D-C091829081F3" id="BPMNShape_sid-DACC03AA-AFA8-4413-B45D-C091829081F3">
+        <omgdc:Bounds height="80.0" width="100.0" x="265.0" y="255.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-BEFC66DD-132F-4177-A66B-63D5CED8E569" id="BPMNShape_sid-BEFC66DD-132F-4177-A66B-63D5CED8E569">
+        <omgdc:Bounds height="40.0" width="40.0" x="1360.0" y="158.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-B04F4DC7-A903-4B14-9A50-2DF73371D021" id="BPMNShape_sid-B04F4DC7-A903-4B14-9A50-2DF73371D021">
+        <omgdc:Bounds height="28.0" width="28.0" x="1445.0" y="164.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="sid-AD7B8834-3457-4C02-B2CE-BFABA169F94B" id="BPMNEdge_sid-AD7B8834-3457-4C02-B2CE-BFABA169F94B">
+        <omgdi:waypoint x="545.0" y="198.0"></omgdi:waypoint>
+        <omgdi:waypoint x="545.0" y="295.0"></omgdi:waypoint>
+        <omgdi:waypoint x="365.0" y="295.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-DE0F7BD6-366E-4F25-BC55-32E20E0E87B2" id="BPMNEdge_sid-DE0F7BD6-366E-4F25-BC55-32E20E0E87B2">
+        <omgdi:waypoint x="110.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="155.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-936CB097-C571-4CCC-A87A-2BA9E81A3D21" id="BPMNEdge_sid-936CB097-C571-4CCC-A87A-2BA9E81A3D21">
+        <omgdi:waypoint x="255.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="295.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-EF9E7048-6BF1-4AD1-8B6B-59F1B628B09D" id="BPMNEdge_sid-EF9E7048-6BF1-4AD1-8B6B-59F1B628B09D">
+        <omgdi:waypoint x="795.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="840.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-898C6AF6-1DE5-4121-9FD9-9494A85182F5" id="BPMNEdge_sid-898C6AF6-1DE5-4121-9FD9-9494A85182F5">
+        <omgdi:waypoint x="335.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="380.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-4A8162DB-FC76-4EEB-9ED1-2F6C34BB955F" id="BPMNEdge_sid-4A8162DB-FC76-4EEB-9ED1-2F6C34BB955F">
+        <omgdi:waypoint x="940.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="985.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-656BD5B2-E542-4CC9-8F0A-6E20E9DC7941" id="BPMNEdge_sid-656BD5B2-E542-4CC9-8F0A-6E20E9DC7941">
+        <omgdi:waypoint x="565.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="610.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-D6C4C528-F1E9-44DD-9571-AA9A4F62295B" id="BPMNEdge_sid-D6C4C528-F1E9-44DD-9571-AA9A4F62295B">
+        <omgdi:waypoint x="1170.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1215.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-0B8C208F-2626-4C00-8D76-7281BE3C5AFF" id="BPMNEdge_sid-0B8C208F-2626-4C00-8D76-7281BE3C5AFF">
+        <omgdi:waypoint x="775.0" y="198.0"></omgdi:waypoint>
+        <omgdi:waypoint x="775.0" y="295.0"></omgdi:waypoint>
+        <omgdi:waypoint x="365.0" y="295.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-9CFA6746-2F45-4937-819D-3C3812A73CBA" id="BPMNEdge_sid-9CFA6746-2F45-4937-819D-3C3812A73CBA">
+        <omgdi:waypoint x="315.0" y="255.0"></omgdi:waypoint>
+        <omgdi:waypoint x="315.0" y="198.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-3CA7D770-9CB1-4506-B7E6-CD9B2793A192" id="BPMNEdge_sid-3CA7D770-9CB1-4506-B7E6-CD9B2793A192">
+        <omgdi:waypoint x="1400.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1445.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-7C2671DD-3ED3-4954-9624-8CAB37D93B9F" id="BPMNEdge_sid-7C2671DD-3ED3-4954-9624-8CAB37D93B9F">
+        <omgdi:waypoint x="1150.0" y="198.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1150.0" y="295.0"></omgdi:waypoint>
+        <omgdi:waypoint x="365.0" y="295.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-EDD9B2DF-3DAE-43D5-8B21-BEFFAF39DCFA" id="BPMNEdge_sid-EDD9B2DF-3DAE-43D5-8B21-BEFFAF39DCFA">
+        <omgdi:waypoint x="480.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="525.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-5F2A768D-E979-4EA6-967D-3096F4E47819" id="BPMNEdge_sid-5F2A768D-E979-4EA6-967D-3096F4E47819">
+        <omgdi:waypoint x="1085.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1130.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-D7E91776-67E4-4AEB-9A94-6BCC3940579F" id="BPMNEdge_sid-D7E91776-67E4-4AEB-9A94-6BCC3940579F">
+        <omgdi:waypoint x="1315.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1360.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-82ED82B2-70D5-4451-8947-19ECE964186E" id="BPMNEdge_sid-82ED82B2-70D5-4451-8947-19ECE964186E">
+        <omgdi:waypoint x="710.0" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="755.0" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-1BB01316-967A-4EE7-BCCB-C228297E1C3A" id="BPMNEdge_sid-1BB01316-967A-4EE7-BCCB-C228297E1C3A">
+        <omgdi:waypoint x="1380.0" y="198.0"></omgdi:waypoint>
+        <omgdi:waypoint x="1380.0" y="295.0"></omgdi:waypoint>
+        <omgdi:waypoint x="365.0" y="295.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>