Commit f5d46ada by weiguanying

flowable工作流引擎预研--自动化汇款demo开发代码提交

parent 759fffc5
package com.example.flowable;
package com.cn.brilliance.flowable;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......
package com.cn.brilliance.flowable.automate.check;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoCheckFailServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("messageSending")) ) {
//delegateExecution.setVariable("messageSending","自动化复核服务");
log.info("办结!");
}
}
}
package com.cn.brilliance.flowable.automate.check;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoCheckServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("autoTimeSpan"))) {
delegateExecution.setVariable("autoCheck", "true");
log.info("自动化检查服务ok");
}
}
}
package com.cn.brilliance.flowable.automate.check;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class CompletedServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("false".equals(delegateExecution.getVariable("autoCheck")) ) {
delegateExecution.setVariable("autoCheckFailMsg","自动化复核服务");
log.info(delegateExecution.getVariable("autoCheckFailMsg") + "失败落人工" + "发送短信");
}
}
}
package com.cn.brilliance.flowable.automate.check;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class MessageSendServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("secAuthCheck"))) {
delegateExecution.setVariable("messageSending", "true");
log.info("报文发送ok");
}
}
}
package com.cn.brilliance.flowable.automate.check;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class SecAuthCheckServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("autoCheck"))) {
delegateExecution.setVariable("secAuthCheck", "true");
log.info("二级授权检查ok");
}
}
}
package com.cn.brilliance.flowable.automate.handling.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoHandingCheckServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("autoHanding"))) {
delegateExecution.setVariable("autoHandingCheck", "true");
log.info("自动经办核验ok");
}
}
}
package com.cn.brilliance.flowable.automate.handling.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoHandingFailServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("false".equals(delegateExecution.getVariable("autoHandingCheck"))) {
delegateExecution.setVariable("autoHandingFailMsg", "自动化经办检核服务");
log.info(delegateExecution.getVariable("autoHandingFailMsg") + "失败转人工");
log.info("发送短信");
} else if
("false".equals(delegateExecution.getVariable("autoHandingSave"))) {
delegateExecution.setVariable("autoHandingFailMsg", "自动化经办存盘服务");
log.info(delegateExecution.getVariable("autoHandingFailMsg") + "失败转人工");
log.info("发送短信");
}
}
}
package com.cn.brilliance.flowable.automate.handling.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoHandingSaveServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("autoHandingCheck"))) {
delegateExecution.setVariable("autoHandingSave", "true");
log.info("交易存盘服务ok");
}
}
}
package com.cn.brilliance.flowable.automate.handling.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoHandingServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("autoTimeSpan"))) {
delegateExecution.setVariable("autoHanding", "true");
log.info("自动经办数据适配ok");
}
}
}
package com.cn.brilliance.flowable.automate.message.model;
import lombok.Data;
@Data
public class MessageVo {
private String successFlag;
}
package com.cn.brilliance.flowable.automate.message.service;
import com.cn.brilliance.flowable.automate.message.model.MessageVo;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* 来报处理服务组件
*/
@Component
@Slf4j
public class MessageProcessingServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
MessageVo vo = new MessageVo();
vo.setSuccessFlag("true");
delegateExecution.setVariable("messageProcess","true");
log.info("来报处理");
}
}
package com.cn.brilliance.flowable.automate.message.service;
import com.cn.brilliance.flowable.automate.message.model.MessageVo;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* 来报处理服务组件
*/
@Component
@Slf4j
public class MessageServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
MessageVo vo = new MessageVo();
vo.setSuccessFlag("true");
delegateExecution.setVariable("message","true");
log.info("短信发送");
}
}
package com.cn.brilliance.flowable.automate.rule.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoAccessFailServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("false".equals(delegateExecution.getVariable("autoAccess")) ) {
delegateExecution.setVariable("autoAccessFailMsg","自动化准入服务");
log.info(delegateExecution.getVariable("autoAccessFailMsg") + "失败落人工");
}
if ("false".equals(delegateExecution.getVariable("autoTimeSpan")) ) {
delegateExecution.setVariable("autoAccessFailMsg","自动化时段判断");
log.info(delegateExecution.getVariable("autoAccessFailMsg") + "失败落人工");
}
}
}
package com.cn.brilliance.flowable.automate.rule.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoAccessServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
if ("true".equals(delegateExecution.getVariable("messageProcess")) && "yes".equals(delegateExecution.getVariable("work"))) {
delegateExecution.setVariable("autoAccess", "true");
log.info("自动化准入服务ok");
} else if ("no".equals(delegateExecution.getVariable("work"))){
delegateExecution.setVariable("autoAccess", "false");
log.info("自动化准入服务失败!");
}
}
}
package com.cn.brilliance.flowable.automate.rule.service;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Flowable工作流业务规则服务
*/
@Component
@Slf4j
public class AutoTimeSpanServiceTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
String timeString = getTimeForMM();
if ("true".equals(delegateExecution.getVariable("autoAccess")) ) {
if ( "偶数".equals(timeString)){
delegateExecution.setVariable("autoTimeSpan", "true");
log.info("当前时间分钟数为偶数");
log.info("自动化时段判断ok");
}
if ( "奇数".equals(timeString)){
delegateExecution.setVariable("autoTimeSpan", "false");
log.info("当前时间分钟数为奇数");
log.info("自动化时段判断失败");
}
} else {
delegateExecution.setVariable("autoTimeSpan", "false");
log.info("自动化时段判断失败!");
}
}
private String getTimeForMM(){
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("mm");
int num = Integer.parseInt(sdf.format(d));
String result = (num%2==0)?"偶数":"奇数";
return result;
}
}
package com.example.flowable.config;
package com.cn.brilliance.flowable.config;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.flowable.spring.boot.EngineConfigurationConfigurer;
......
package com.cn.brilliance.flowable.controller;
import org.flowable.engine.ProcessEngine;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
@RestController
@RequestMapping(value = "auto")
public class AutomatedController {
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private RepositoryService repositoryService;
@Autowired
private ProcessEngine processEngine;
/**
* 添加报信用卡申请流程
*/
@RequestMapping(value = "add", method = RequestMethod.GET)
public String addExpense(
) {
//启动流程并传入启动流程id
HashMap<String, Object> map = new HashMap<>();
map.put("work", "yes");
map.put("money", "yes");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("automatedRemittanceOrchestration", map);
return "提交成功.流程Id为:" + processInstance.getId();
}
}
\ No newline at end of file
package com.example.flowable.controller;
package com.cn.brilliance.flowable.controller;
import org.flowable.engine.*;
import org.flowable.engine.runtime.ProcessInstance;
......
package com.example.flowable.controller;
package com.cn.brilliance.flowable.controller;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.*;
......
package com.example.flowable.taskHandler;
package com.cn.brilliance.flowable.taskHandler;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
......
package com.example.flowable.taskHandler;
package com.cn.brilliance.flowable.taskHandler;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
......
package com.example.flowable;
package com.cn.brilliance.flowable.taskHandler;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
......
package com.example.flowable;
package com.cn.brilliance.flowable.taskHandler;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
......
<?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:flowable="http://flowable.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.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
<process id="CreditCard" name="creditcard" isExecutable="true">
<documentation>信用卡申请规则扭转</documentation>
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
<exclusiveGateway id="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" name="信用卡发放准入规则网关"></exclusiveGateway>
<sequenceFlow id="sid-BA8E0A27-19CC-4799-841C-D561E02C58CC" sourceRef="startEvent1" targetRef="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D"></sequenceFlow>
<serviceTask id="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" name="征信判断服务" flowable:class="com.example.flowable.ServiceTask1"></serviceTask>
<endEvent id="sid-FF25E057-8353-4897-82E8-E6AA566D1519" name="不发卡"></endEvent>
<serviceTask id="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" name="信用卡金额判断服务" flowable:class="com.example.flowable.ServiceTask2"></serviceTask>
<endEvent id="sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC" name="发信用卡"></endEvent>
<sequenceFlow id="sid-320CC5D6-D191-4E85-8035-6F45618E9166" name="有工作" sourceRef="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" targetRef="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${work=='yes'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-C5FE683F-33FE-4869-8898-F212CFC5D94C" name="无工作" sourceRef="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" targetRef="sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<documentation>如果申请人既没房也没车,同时学历为本科以上,并且月薪少于2000,同时之前没有信用卡的,那么不通过</documentation>
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${work=='no'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-99143761-DC5A-42FA-980C-083205108F9F" name="征信不通过" sourceRef="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" targetRef="sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<documentation>没房也没车大专以下月薪少于5000不通过</documentation>
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${credit=='no'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-44D3689F-796E-47FD-B732-D89A02343ACA" name="工资低于2000" sourceRef="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" targetRef="sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${salary<=2000}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-0040323B-4A7C-433A-959F-0C3D134981F9" name="征信通过" sourceRef="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" targetRef="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC">
<documentation>没房也没车大专以下月薪少于5000不通过</documentation>
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${credit=='yes'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-A9DAC90F-9BC5-4EF1-B815-B73E04158A77" name="工资大于2000" sourceRef="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" targetRef="sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${salary>2000 and grantCard=='yes'}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_CreditCard">
<bpmndi:BPMNPlane bpmnElement="CreditCard" id="BPMNPlane_CreditCard">
<bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
<omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" id="BPMNShape_sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D">
<omgdc:Bounds height="40.0" width="40.0" x="255.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" id="BPMNShape_sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D">
<omgdc:Bounds height="80.0" width="100.0" x="450.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-FF25E057-8353-4897-82E8-E6AA566D1519" id="BPMNShape_sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<omgdc:Bounds height="28.0" width="28.0" x="360.0" y="270.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" id="BPMNShape_sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC">
<omgdc:Bounds height="80.0" width="100.0" x="645.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC" id="BPMNShape_sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC">
<omgdc:Bounds height="28.0" width="28.0" x="840.0" y="156.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-BA8E0A27-19CC-4799-841C-D561E02C58CC" id="BPMNEdge_sid-BA8E0A27-19CC-4799-841C-D561E02C58CC" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="20.5" flowable:targetDockerY="20.5">
<omgdi:waypoint x="129.94999695909908" y="178.0"></omgdi:waypoint>
<omgdi:waypoint x="192.5" y="178.0"></omgdi:waypoint>
<omgdi:waypoint x="192.5" y="170.5"></omgdi:waypoint>
<omgdi:waypoint x="255.5" y="170.5"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-320CC5D6-D191-4E85-8035-6F45618E9166" id="BPMNEdge_sid-320CC5D6-D191-4E85-8035-6F45618E9166" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
<omgdi:waypoint x="294.48805220881326" y="170.45758928571425"></omgdi:waypoint>
<omgdi:waypoint x="450.0" y="170.11124721603562"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-0040323B-4A7C-433A-959F-0C3D134981F9" id="BPMNEdge_sid-0040323B-4A7C-433A-959F-0C3D134981F9" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
<omgdi:waypoint x="549.9499999999803" y="170.0"></omgdi:waypoint>
<omgdi:waypoint x="645.0" y="170.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-99143761-DC5A-42FA-980C-083205108F9F" id="BPMNEdge_sid-99143761-DC5A-42FA-980C-083205108F9F" flowable:sourceDockerX="50.0" flowable:sourceDockerY="79.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="500.0" y="209.95000000000002"></omgdi:waypoint>
<omgdi:waypoint x="500.0" y="232.0"></omgdi:waypoint>
<omgdi:waypoint x="374.0" y="232.0"></omgdi:waypoint>
<omgdi:waypoint x="374.0" y="270.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-44D3689F-796E-47FD-B732-D89A02343ACA" id="BPMNEdge_sid-44D3689F-796E-47FD-B732-D89A02343ACA" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="695.0" y="209.95000000000002"></omgdi:waypoint>
<omgdi:waypoint x="695.0" y="284.0"></omgdi:waypoint>
<omgdi:waypoint x="387.9499192832599" y="284.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-A9DAC90F-9BC5-4EF1-B815-B73E04158A77" id="BPMNEdge_sid-A9DAC90F-9BC5-4EF1-B815-B73E04158A77" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="744.9499999999605" y="170.0"></omgdi:waypoint>
<omgdi:waypoint x="840.0" y="170.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-C5FE683F-33FE-4869-8898-F212CFC5D94C" id="BPMNEdge_sid-C5FE683F-33FE-4869-8898-F212CFC5D94C" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="275.5" y="189.44165933098594"></omgdi:waypoint>
<omgdi:waypoint x="275.5" y="284.0"></omgdi:waypoint>
<omgdi:waypoint x="360.0" y="284.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
<?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:flowable="http://flowable.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.flowable.org/processdef">
<process id="Expense" name="ExpenseProcess" isExecutable="true">
<documentation>报销流程</documentation>
<startEvent id="start" name="开始"></startEvent>
<userTask id="fillTask" name="出差报销" flowable:assignee="${taskUser}">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">
<![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<exclusiveGateway id="judgeTask"></exclusiveGateway>
<userTask id="directorTak" name="经理审批">
<extensionElements>
<flowable:taskListener event="create"
class="com.example.flowable.taskHandler.ManagerTaskHandler"></flowable:taskListener>
</extensionElements>
</userTask>
<userTask id="bossTask" name="老板审批">
<extensionElements>
<flowable:taskListener event="create"
class="com.example.flowable.taskHandler.BossTaskHandler"></flowable:taskListener>
</extensionElements>
</userTask>
<endEvent id="end" name="结束"></endEvent>
<sequenceFlow id="directorNotPassFlow" name="驳回" sourceRef="directorTak" targetRef="fillTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="bossNotPassFlow" name="驳回" sourceRef="bossTask" targetRef="fillTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow1" sourceRef="start" targetRef="fillTask"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="fillTask" targetRef="judgeTask"></sequenceFlow>
<sequenceFlow id="judgeMore" name="大于500元" sourceRef="judgeTask" targetRef="bossTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${money > 500}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="bossPassFlow" name="通过" sourceRef="bossTask" targetRef="end">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="directorPassFlow" name="通过" sourceRef="directorTak" targetRef="end">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="judgeLess" name="小于500元" sourceRef="judgeTask" targetRef="directorTak">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${money <= 500}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_Expense">
<bpmndi:BPMNPlane bpmnElement="Expense" id="BPMNPlane_Expense">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="285.0" y="135.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="fillTask" id="BPMNShape_fillTask">
<omgdc:Bounds height="80.0" width="100.0" x="405.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="judgeTask" id="BPMNShape_judgeTask">
<omgdc:Bounds height="40.0" width="40.0" x="585.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="directorTak" id="BPMNShape_directorTak">
<omgdc:Bounds height="80.0" width="100.0" x="735.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="bossTask" id="BPMNShape_bossTask">
<omgdc:Bounds height="80.0" width="100.0" x="555.0" y="255.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="771.0" y="281.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="315.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="405.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="505.0" y="150.16611295681062"></omgdi:waypoint>
<omgdi:waypoint x="585.4333333333333" y="150.43333333333334"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="judgeLess" id="BPMNEdge_judgeLess">
<omgdi:waypoint x="624.5530726256983" y="150.44692737430168"></omgdi:waypoint>
<omgdi:waypoint x="735.0" y="150.1392757660167"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="directorNotPassFlow" id="BPMNEdge_directorNotPassFlow">
<omgdi:waypoint x="785.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="785.0" y="37.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="37.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="110.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="bossPassFlow" id="BPMNEdge_bossPassFlow">
<omgdi:waypoint x="655.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="771.0" y="295.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="judgeMore" id="BPMNEdge_judgeMore">
<omgdi:waypoint x="605.4340277777778" y="169.56597222222223"></omgdi:waypoint>
<omgdi:waypoint x="605.1384083044983" y="255.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="directorPassFlow" id="BPMNEdge_directorPassFlow">
<omgdi:waypoint x="785.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="785.0" y="281.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="bossNotPassFlow" id="BPMNEdge_bossNotPassFlow">
<omgdi:waypoint x="555.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="190.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
package com.example.flowable;
package com.cn.brilliance.flowable;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
......
package com.example.flowable.junit;
package com.cn.brilliance.flowable.junit;
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricActivityInstance;
......@@ -19,6 +19,7 @@ public class FlowableTest {
ProcessEngineConfiguration configuration = null;
@BeforeEach
@Test
public void before() {
/**
* 获取流程引擎对象,会在对应数据库下建立相关工作流表,如果已存在,则不会再创建
......@@ -45,7 +46,7 @@ public class FlowableTest {
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService
.createDeployment()
.addClasspathResource("creditcard.bpmn20.xml")
.addClasspathResource("processes/creditcard.bpmn20.xml")
.name("creditcard")
.deploy();
......@@ -94,7 +95,10 @@ public class FlowableTest {
varivale.put("nrOfHolidays", "3");
varivale.put("description", "工作累了,出去玩玩");
// 通过流程请求key启动流程实例 pbpmn20.xml文件里process id="holidayRequest"
ProcessInstance holidayRequest = runtimeService.startProcessInstanceByKey("holidayRequest", varivale);
// ProcessInstance holidayRequest = runtimeService.startProcessInstanceByKey("holidayRequest", varivale);
ProcessInstance holidayRequest = runtimeService.startProcessInstanceByKey("automatedRemittanceOrchestration", varivale);
// 通过流程请求id启动流程实例 flowable.act_re_procdef 的 DEPLOYMENT_ID_ 即部署id
// runtimeService.startProcessInstanceById("2501");
System.out.println("holidayRequest.getActivityId() = " + holidayRequest.getActivityId());
......
<?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:flowable="http://flowable.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.flowable.org/processdef">
<process id="Expense1" name="ExpenseProcess" isExecutable="true">
<documentation>报销流程</documentation>
<startEvent id="start" name="开始"></startEvent>
<userTask id="fillTask" name="出差报销" flowable:assignee="${taskUser}">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">
<![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<exclusiveGateway id="judgeTask"></exclusiveGateway>
<userTask id="directorTak" name="经理审批">
<extensionElements>
<flowable:taskListener event="create"
class="com.example.flowable.taskHandler.ManagerTaskHandler"></flowable:taskListener>
</extensionElements>
</userTask>
<userTask id="bossTask" name="老板审批">
<extensionElements>
<flowable:taskListener event="create"
class="com.example.flowable.taskHandler.BossTaskHandler"></flowable:taskListener>
</extensionElements>
</userTask>
<endEvent id="end" name="结束"></endEvent>
<sequenceFlow id="directorNotPassFlow" name="驳回" sourceRef="directorTak" targetRef="fillTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="bossNotPassFlow" name="驳回" sourceRef="bossTask" targetRef="fillTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow1" sourceRef="start" targetRef="fillTask"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="fillTask" targetRef="judgeTask"></sequenceFlow>
<sequenceFlow id="judgeMore" name="大于500元" sourceRef="judgeTask" targetRef="bossTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${money > 500}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="bossPassFlow" name="通过" sourceRef="bossTask" targetRef="end">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="directorPassFlow" name="通过" sourceRef="directorTak" targetRef="end">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="judgeLess" name="小于500元" sourceRef="judgeTask" targetRef="directorTak">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${money <= 500}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_Expense">
<bpmndi:BPMNPlane bpmnElement="Expense" id="BPMNPlane_Expense">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="285.0" y="135.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="fillTask" id="BPMNShape_fillTask">
<omgdc:Bounds height="80.0" width="100.0" x="405.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="judgeTask" id="BPMNShape_judgeTask">
<omgdc:Bounds height="40.0" width="40.0" x="585.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="directorTak" id="BPMNShape_directorTak">
<omgdc:Bounds height="80.0" width="100.0" x="735.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="bossTask" id="BPMNShape_bossTask">
<omgdc:Bounds height="80.0" width="100.0" x="555.0" y="255.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="771.0" y="281.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="315.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="405.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="505.0" y="150.16611295681062"></omgdi:waypoint>
<omgdi:waypoint x="585.4333333333333" y="150.43333333333334"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="judgeLess" id="BPMNEdge_judgeLess">
<omgdi:waypoint x="624.5530726256983" y="150.44692737430168"></omgdi:waypoint>
<omgdi:waypoint x="735.0" y="150.1392757660167"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="directorNotPassFlow" id="BPMNEdge_directorNotPassFlow">
<omgdi:waypoint x="785.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="785.0" y="37.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="37.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="110.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="bossPassFlow" id="BPMNEdge_bossPassFlow">
<omgdi:waypoint x="655.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="771.0" y="295.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="judgeMore" id="BPMNEdge_judgeMore">
<omgdi:waypoint x="605.4340277777778" y="169.56597222222223"></omgdi:waypoint>
<omgdi:waypoint x="605.1384083044983" y="255.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="directorPassFlow" id="BPMNEdge_directorPassFlow">
<omgdi:waypoint x="785.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="785.0" y="281.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="bossNotPassFlow" id="BPMNEdge_bossNotPassFlow">
<omgdi:waypoint x="555.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="190.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
<?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:flowable="http://flowable.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.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
<process id="CreditCard" name="creditcard" isExecutable="true">
<documentation>信用卡申请规则扭转</documentation>
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
<exclusiveGateway id="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" name="信用卡发放准入规则网关"></exclusiveGateway>
<sequenceFlow id="sid-BA8E0A27-19CC-4799-841C-D561E02C58CC" sourceRef="startEvent1" targetRef="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D"></sequenceFlow>
<serviceTask id="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" name="征信判断服务" flowable:class="com.example.flowable.ServiceTask1"></serviceTask>
<endEvent id="sid-FF25E057-8353-4897-82E8-E6AA566D1519" name="不发卡"></endEvent>
<serviceTask id="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" name="信用卡金额判断服务" flowable:class="com.example.flowable.ServiceTask2"></serviceTask>
<endEvent id="sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC" name="发信用卡"></endEvent>
<sequenceFlow id="sid-320CC5D6-D191-4E85-8035-6F45618E9166" name="有工作" sourceRef="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" targetRef="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${work=='yes'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-C5FE683F-33FE-4869-8898-F212CFC5D94C" name="无工作" sourceRef="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" targetRef="sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<documentation>如果申请人既没房也没车,同时学历为本科以上,并且月薪少于2000,同时之前没有信用卡的,那么不通过</documentation>
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${work=='no'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-99143761-DC5A-42FA-980C-083205108F9F" name="征信不通过" sourceRef="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" targetRef="sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<documentation>没房也没车大专以下月薪少于5000不通过</documentation>
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${credit=='no'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-44D3689F-796E-47FD-B732-D89A02343ACA" name="工资低于2000" sourceRef="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" targetRef="sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${salary<=2000}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-0040323B-4A7C-433A-959F-0C3D134981F9" name="征信通过" sourceRef="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" targetRef="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC">
<documentation>没房也没车大专以下月薪少于5000不通过</documentation>
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${credit=='yes'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-A9DAC90F-9BC5-4EF1-B815-B73E04158A77" name="工资大于2000" sourceRef="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" targetRef="sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${salary>2000 and grantCard=='yes'}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_CreditCard">
<bpmndi:BPMNPlane bpmnElement="CreditCard" id="BPMNPlane_CreditCard">
<bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
<omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D" id="BPMNShape_sid-0EAC9C81-F059-4262-9877-F3A0BA3A1A3D">
<omgdc:Bounds height="40.0" width="40.0" x="255.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D" id="BPMNShape_sid-27B8A747-45B9-48CF-8A13-AB1A06D68F7D">
<omgdc:Bounds height="80.0" width="100.0" x="450.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-FF25E057-8353-4897-82E8-E6AA566D1519" id="BPMNShape_sid-FF25E057-8353-4897-82E8-E6AA566D1519">
<omgdc:Bounds height="28.0" width="28.0" x="360.0" y="270.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC" id="BPMNShape_sid-8CE39D16-B2C1-46C1-BD48-BD20B529EFFC">
<omgdc:Bounds height="80.0" width="100.0" x="645.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC" id="BPMNShape_sid-F23C964D-129B-4B5D-89A2-61A490CDCCAC">
<omgdc:Bounds height="28.0" width="28.0" x="840.0" y="156.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-BA8E0A27-19CC-4799-841C-D561E02C58CC" id="BPMNEdge_sid-BA8E0A27-19CC-4799-841C-D561E02C58CC" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="20.5" flowable:targetDockerY="20.5">
<omgdi:waypoint x="129.94999695909908" y="178.0"></omgdi:waypoint>
<omgdi:waypoint x="192.5" y="178.0"></omgdi:waypoint>
<omgdi:waypoint x="192.5" y="170.5"></omgdi:waypoint>
<omgdi:waypoint x="255.5" y="170.5"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-320CC5D6-D191-4E85-8035-6F45618E9166" id="BPMNEdge_sid-320CC5D6-D191-4E85-8035-6F45618E9166" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
<omgdi:waypoint x="294.48805220881326" y="170.45758928571425"></omgdi:waypoint>
<omgdi:waypoint x="450.0" y="170.11124721603562"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-0040323B-4A7C-433A-959F-0C3D134981F9" id="BPMNEdge_sid-0040323B-4A7C-433A-959F-0C3D134981F9" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
<omgdi:waypoint x="549.9499999999803" y="170.0"></omgdi:waypoint>
<omgdi:waypoint x="645.0" y="170.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-99143761-DC5A-42FA-980C-083205108F9F" id="BPMNEdge_sid-99143761-DC5A-42FA-980C-083205108F9F" flowable:sourceDockerX="50.0" flowable:sourceDockerY="79.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="500.0" y="209.95000000000002"></omgdi:waypoint>
<omgdi:waypoint x="500.0" y="232.0"></omgdi:waypoint>
<omgdi:waypoint x="374.0" y="232.0"></omgdi:waypoint>
<omgdi:waypoint x="374.0" y="270.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-44D3689F-796E-47FD-B732-D89A02343ACA" id="BPMNEdge_sid-44D3689F-796E-47FD-B732-D89A02343ACA" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="695.0" y="209.95000000000002"></omgdi:waypoint>
<omgdi:waypoint x="695.0" y="284.0"></omgdi:waypoint>
<omgdi:waypoint x="387.9499192832599" y="284.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-A9DAC90F-9BC5-4EF1-B815-B73E04158A77" id="BPMNEdge_sid-A9DAC90F-9BC5-4EF1-B815-B73E04158A77" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="744.9499999999605" y="170.0"></omgdi:waypoint>
<omgdi:waypoint x="840.0" y="170.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-C5FE683F-33FE-4869-8898-F212CFC5D94C" id="BPMNEdge_sid-C5FE683F-33FE-4869-8898-F212CFC5D94C" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="275.5" y="189.44165933098594"></omgdi:waypoint>
<omgdi:waypoint x="275.5" y="284.0"></omgdi:waypoint>
<omgdi:waypoint x="360.0" y="284.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
<?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:flowable="http://flowable.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.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
<process id="demo" name="demo" isExecutable="true">
<documentation>demo</documentation>
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
<serviceTask id="sid-88EA1C36-FEAE-4361-B729-0BD8A70DE59A" flowable:class="com.example.flowable.MyServiceTask"></serviceTask>
<serviceTask id="sid-39B59FB3-20A5-48D5-B1C6-E75EE0A3E4B8" flowable:class="com.example.flowable.MyServiceTask2"></serviceTask>
<serviceTask id="sid-D0C785ED-3A44-4D30-B18A-885381835170" flowable:class="com.example.flowable.MyServiceTask3"></serviceTask>
<endEvent id="sid-A0846D42-E6C2-4922-BE07-D9F70C295286"></endEvent>
<sequenceFlow id="sid-BDF0D3DE-AED6-45D9-95DD-CB0D295EAC23" name="通过" sourceRef="startEvent1" targetRef="sid-88EA1C36-FEAE-4361-B729-0BD8A70DE59A">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-C639D6A8-1D89-45A0-B985-51B307424D51" name="通过3" sourceRef="sid-D0C785ED-3A44-4D30-B18A-885381835170" targetRef="sid-A0846D42-E6C2-4922-BE07-D9F70C295286">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${end2=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-27338A14-7ACE-4207-BB16-993526FECBFA" name="通过2" sourceRef="sid-39B59FB3-20A5-48D5-B1C6-E75EE0A3E4B8" targetRef="sid-A0846D42-E6C2-4922-BE07-D9F70C295286">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${end1=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-DEBA4A42-0169-45F0-B641-398BBD8731BE" name="通过4" sourceRef="sid-88EA1C36-FEAE-4361-B729-0BD8A70DE59A" targetRef="sid-39B59FB3-20A5-48D5-B1C6-E75EE0A3E4B8">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${end4=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-C32D6D4D-DEEE-457B-A24C-0DDF57FB182F" name="不通过3" sourceRef="sid-88EA1C36-FEAE-4361-B729-0BD8A70DE59A" targetRef="sid-D0C785ED-3A44-4D30-B18A-885381835170">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${end3=='不通过'}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_demo">
<bpmndi:BPMNPlane bpmnElement="demo" id="BPMNPlane_demo">
<bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
<omgdc:Bounds height="30.0" width="30.0" x="90.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-88EA1C36-FEAE-4361-B729-0BD8A70DE59A" id="BPMNShape_sid-88EA1C36-FEAE-4361-B729-0BD8A70DE59A">
<omgdc:Bounds height="80.0" width="100.0" x="285.0" y="125.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-39B59FB3-20A5-48D5-B1C6-E75EE0A3E4B8" id="BPMNShape_sid-39B59FB3-20A5-48D5-B1C6-E75EE0A3E4B8">
<omgdc:Bounds height="80.0" width="100.0" x="465.0" y="30.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-D0C785ED-3A44-4D30-B18A-885381835170" id="BPMNShape_sid-D0C785ED-3A44-4D30-B18A-885381835170">
<omgdc:Bounds height="80.0" width="100.0" x="480.0" y="255.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-A0846D42-E6C2-4922-BE07-D9F70C295286" id="BPMNShape_sid-A0846D42-E6C2-4922-BE07-D9F70C295286">
<omgdc:Bounds height="28.0" width="28.0" x="750.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-BDF0D3DE-AED6-45D9-95DD-CB0D295EAC23" id="BPMNEdge_sid-BDF0D3DE-AED6-45D9-95DD-CB0D295EAC23" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
<omgdi:waypoint x="119.94999965443563" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="285.0" y="165.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-C32D6D4D-DEEE-457B-A24C-0DDF57FB182F" id="BPMNEdge_sid-C32D6D4D-DEEE-457B-A24C-0DDF57FB182F" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
<omgdi:waypoint x="335.0" y="204.95"></omgdi:waypoint>
<omgdi:waypoint x="335.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="480.0" y="295.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-27338A14-7ACE-4207-BB16-993526FECBFA" id="BPMNEdge_sid-27338A14-7ACE-4207-BB16-993526FECBFA" flowable:sourceDockerX="99.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="564.95" y="70.0"></omgdi:waypoint>
<omgdi:waypoint x="642.5" y="70.0"></omgdi:waypoint>
<omgdi:waypoint x="642.5" y="134.0"></omgdi:waypoint>
<omgdi:waypoint x="750.0" y="134.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-DEBA4A42-0169-45F0-B641-398BBD8731BE" id="BPMNEdge_sid-DEBA4A42-0169-45F0-B641-398BBD8731BE" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="10.0" flowable:targetDockerY="38.0">
<omgdi:waypoint x="384.94999999997884" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="418.0" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="415.0" y="68.0"></omgdi:waypoint>
<omgdi:waypoint x="465.0" y="68.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-C639D6A8-1D89-45A0-B985-51B307424D51" id="BPMNEdge_sid-C639D6A8-1D89-45A0-B985-51B307424D51" flowable:sourceDockerX="99.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="4.0" flowable:targetDockerY="23.0">
<omgdi:waypoint x="579.95" y="294.13142857142856"></omgdi:waypoint>
<omgdi:waypoint x="750.0443289528545" y="146.39360860582016"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
<?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:flowable="http://flowable.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.flowable.org/processdef">
<process id="Expense" name="ExpenseProcess" isExecutable="true">
<documentation>报销流程</documentation>
<startEvent id="start" name="开始"></startEvent>
<userTask id="fillTask" name="出差报销" flowable:assignee="${taskUser}">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">
<![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<exclusiveGateway id="judgeTask"></exclusiveGateway>
<userTask id="directorTak" name="经理审批">
<extensionElements>
<flowable:taskListener event="create"
class="com.example.flowable.taskHandler.ManagerTaskHandler"></flowable:taskListener>
</extensionElements>
</userTask>
<userTask id="bossTask" name="老板审批">
<extensionElements>
<flowable:taskListener event="create"
class="com.example.flowable.taskHandler.BossTaskHandler"></flowable:taskListener>
</extensionElements>
</userTask>
<endEvent id="end" name="结束"></endEvent>
<sequenceFlow id="directorNotPassFlow" name="驳回" sourceRef="directorTak" targetRef="fillTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="bossNotPassFlow" name="驳回" sourceRef="bossTask" targetRef="fillTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow1" sourceRef="start" targetRef="fillTask"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="fillTask" targetRef="judgeTask"></sequenceFlow>
<sequenceFlow id="judgeMore" name="大于500元" sourceRef="judgeTask" targetRef="bossTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${money > 500}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="bossPassFlow" name="通过" sourceRef="bossTask" targetRef="end">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="directorPassFlow" name="通过" sourceRef="directorTak" targetRef="end">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="judgeLess" name="小于500元" sourceRef="judgeTask" targetRef="directorTak">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${money <= 500}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_Expense">
<bpmndi:BPMNPlane bpmnElement="Expense" id="BPMNPlane_Expense">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="285.0" y="135.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="fillTask" id="BPMNShape_fillTask">
<omgdc:Bounds height="80.0" width="100.0" x="405.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="judgeTask" id="BPMNShape_judgeTask">
<omgdc:Bounds height="40.0" width="40.0" x="585.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="directorTak" id="BPMNShape_directorTak">
<omgdc:Bounds height="80.0" width="100.0" x="735.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="bossTask" id="BPMNShape_bossTask">
<omgdc:Bounds height="80.0" width="100.0" x="555.0" y="255.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="771.0" y="281.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="315.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="405.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="505.0" y="150.16611295681062"></omgdi:waypoint>
<omgdi:waypoint x="585.4333333333333" y="150.43333333333334"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="judgeLess" id="BPMNEdge_judgeLess">
<omgdi:waypoint x="624.5530726256983" y="150.44692737430168"></omgdi:waypoint>
<omgdi:waypoint x="735.0" y="150.1392757660167"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="directorNotPassFlow" id="BPMNEdge_directorNotPassFlow">
<omgdi:waypoint x="785.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="785.0" y="37.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="37.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="110.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="bossPassFlow" id="BPMNEdge_bossPassFlow">
<omgdi:waypoint x="655.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="771.0" y="295.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="judgeMore" id="BPMNEdge_judgeMore">
<omgdi:waypoint x="605.4340277777778" y="169.56597222222223"></omgdi:waypoint>
<omgdi:waypoint x="605.1384083044983" y="255.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="directorPassFlow" id="BPMNEdge_directorPassFlow">
<omgdi:waypoint x="785.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="785.0" y="281.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="bossNotPassFlow" id="BPMNEdge_bossNotPassFlow">
<omgdi:waypoint x="555.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="295.0"></omgdi:waypoint>
<omgdi:waypoint x="455.0" y="190.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
com\example\flowable\config\FlowableConfig.class
com\example\flowable\controller\ExpenseController.class
com\example\flowable\controller\TestFlowable.class
com\example\flowable\taskHandler\ManagerTaskHandler.class
com\example\flowable\FlowableApplication.class
com\example\flowable\taskHandler\BossTaskHandler.class
D:\javacompany\flowable-master\src\main\java\com\example\flowable\config\FlowableConfig.java
D:\javacompany\flowable-master\src\main\java\com\example\flowable\controller\TestFlowable.java
D:\javacompany\flowable-master\src\main\java\com\example\flowable\controller\ExpenseController.java
D:\javacompany\flowable-master\src\main\java\com\example\flowable\taskHandler\BossTaskHandler.java
D:\javacompany\flowable-master\src\main\java\com\example\flowable\taskHandler\ManagerTaskHandler.java
D:\javacompany\flowable-master\src\main\java\com\example\flowable\FlowableApplication.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\automate\rule\service\autoTimeSpanServiceTask.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\taskHandler\ServiceTask2.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\FlowableApplication.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\automate\rule\service\autoAccessServiceTask.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\taskHandler\ManagerTaskHandler.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\controller\ExpenseController.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\taskHandler\ServiceTask1.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\controller\CreditCardController.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\automate\message\model\MessageVo.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\automate\message\service\MessageServiceTask.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\automate\rule\service\autoAccessFailServiceTask.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\config\FlowableConfig.java
D:\javacompany\flowable-master\src\main\java\com\cn\brilliance\flowable\taskHandler\BossTaskHandler.java
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment