Commit ed28d6d5ed0bcc632be022d6de667e6dd8b70173

Authored by YunaiV
1 parent 325a8d0a

解决单元测试的报错问题

Showing 39 changed files with 34 additions and 1963 deletions
yudao-module-bpm/yudao-module-bpm-biz/pom.xml
@@ -73,23 +73,5 @@ @@ -73,23 +73,5 @@
73 <groupId>cn.iocoder.boot</groupId> 73 <groupId>cn.iocoder.boot</groupId>
74 <artifactId>yudao-spring-boot-starter-flowable</artifactId> 74 <artifactId>yudao-spring-boot-starter-flowable</artifactId>
75 </dependency> 75 </dependency>
76 - <!--junit4-->  
77 - <dependency>  
78 - <groupId>junit</groupId>  
79 - <artifactId>junit</artifactId>  
80 - <version>4.11</version>  
81 - <scope>test</scope>  
82 - </dependency>  
83 - <dependency>  
84 - <groupId>com.h2database</groupId>  
85 - <artifactId>h2</artifactId>  
86 - <version>1.4.196</version>  
87 - <scope>test</scope>  
88 - </dependency>  
89 - <dependency>  
90 - <groupId>org.dom4j</groupId>  
91 - <artifactId>dom4j</artifactId>  
92 - <version>2.1.3</version>  
93 - </dependency>  
94 </dependencies> 76 </dependencies>
95 </project> 77 </project>
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/AbstractOATest.java deleted
1 -package cn.iocoder.yudao.module.bpm;  
2 -  
3 -import org.flowable.engine.*;  
4 -import org.flowable.engine.impl.ProcessEngineImpl;  
5 -import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;  
6 -import org.flowable.engine.impl.test.TestHelper;  
7 -import org.flowable.engine.test.FlowableRule;  
8 -import org.junit.AfterClass;  
9 -import org.junit.Before;  
10 -import org.junit.BeforeClass;  
11 -import org.junit.Rule;  
12 -  
13 -/**  
14 - * 抽象测试基类  
15 - *  
16 - * @author henryyan cuicui  
17 - */  
18 -public abstract class AbstractOATest {  
19 -  
20 - protected String configurationResource = "flowable.cfg.xml";  
21 -  
22 - /**  
23 - * 专门用于测试套件  
24 - */  
25 - @Rule  
26 - public FlowableRule activitiRule = new FlowableRule("flowable.cfg.xml");  
27 -  
28 - protected ProcessEngineConfigurationImpl processEngineConfiguration;  
29 -  
30 - protected ProcessEngine processEngine;  
31 - protected RepositoryService repositoryService;  
32 - protected RuntimeService runtimeService;  
33 - protected TaskService taskService;  
34 - protected HistoryService historyService;  
35 - protected IdentityService identityService;  
36 - protected ManagementService managementService;  
37 - protected FormService formService;  
38 -  
39 - /**  
40 - * 开始测试  
41 - */  
42 - @BeforeClass  
43 - public static void setUpForClass() throws Exception {  
44 - System.out.println("++++++++ 开始测试 ++++++++");  
45 - }  
46 -  
47 - /**  
48 - * 结束测试  
49 - */  
50 - @AfterClass  
51 - public static void testOverForClass() throws Exception {  
52 - System.out.println("-------- 结束测试 --------");  
53 - }  
54 -  
55 - protected void initializeProcessEngine() {  
56 - processEngine = TestHelper.getProcessEngine(configurationResource);  
57 - }  
58 -  
59 - /**  
60 - * 初始化变量  
61 - */  
62 - @Before  
63 - public void setUp() throws Exception {  
64 - if (processEngine == null) {  
65 - initializeProcessEngine();  
66 - }  
67 -  
68 - processEngineConfiguration = ((ProcessEngineImpl) processEngine).getProcessEngineConfiguration();  
69 - repositoryService = processEngine.getRepositoryService();  
70 - runtimeService = processEngine.getRuntimeService();  
71 - taskService = processEngine.getTaskService();  
72 - historyService = processEngine.getHistoryService();  
73 - identityService = processEngine.getIdentityService();  
74 - managementService = processEngine.getManagementService();  
75 - formService = processEngine.getFormService();  
76 - }  
77 -  
78 -}  
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/ConditionTest.java deleted
1 -package cn.iocoder.yudao.module.bpm;  
2 -  
3 -import org.flowable.engine.history.HistoricDetail;  
4 -import org.flowable.engine.history.HistoricFormProperty;  
5 -import org.flowable.engine.history.HistoricProcessInstance;  
6 -import org.flowable.engine.history.HistoricVariableUpdate;  
7 -import org.flowable.engine.repository.ProcessDefinition;  
8 -import org.flowable.engine.runtime.ProcessInstance;  
9 -import org.flowable.engine.test.Deployment;  
10 -import org.flowable.task.api.Task;  
11 -import org.joda.time.DateTime;  
12 -import org.junit.Test;  
13 -  
14 -import java.text.SimpleDateFormat;  
15 -import java.util.*;  
16 -  
17 -import static org.junit.Assert.assertEquals;  
18 -import static org.junit.Assert.assertNotNull;  
19 -  
20 -/**  
21 - * 条件测试  
22 - * 1 某个节点-支付额度需要大于70%  
23 - * 2 支付条件完成后,开始倒计时15天,要完成流程处理  
24 - * @author cuicui  
25 - */  
26 -public class ConditionTest extends AbstractOATest {  
27 -  
28 - @Test  
29 - @Deployment(resources = {"chapter6/leave-timeLimit-money/leave-formkey-ext.bpmn", "chapter6/leave-timeLimit-money/leave-start.form",  
30 - "chapter6/leave-timeLimit-money/approve-deptLeader.form", "chapter6/leave-timeLimit-money/approve-hr.form", "chapter6/leave-timeLimit-money/report-back.form",  
31 - "chapter6/leave-timeLimit-money/modify-apply.form"})  
32 - public void allPass() throws Exception {  
33 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
34 - Map<String, String> variables = new HashMap<String, String>();  
35 - Calendar ca = Calendar.getInstance();  
36 - String startDate = sdf.format(ca.getTime());  
37 - ca.add(Calendar.DAY_OF_MONTH, 2); // 当前日期加2天  
38 - String endDate = sdf.format(ca.getTime());  
39 -  
40 - // 启动流程  
41 - variables.put("startDate", startDate);  
42 - variables.put("endDate", endDate);  
43 - variables.put("reason", "公休");  
44 -  
45 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();  
46 -  
47 - // 读取启动表单  
48 - Object renderedStartForm = formService.getRenderedStartForm(processDefinition.getId());  
49 - assertNotNull(renderedStartForm);  
50 -  
51 - // 启动流程  
52 - // 设置当前用户  
53 - String currentUserId = "henryyan";  
54 - identityService.setAuthenticatedUserId(currentUserId);  
55 - ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), variables);  
56 - assertNotNull(processInstance);  
57 -  
58 - // 部门领导审批通过  
59 - Task deptLeaderTask = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();  
60 - assertNotNull(formService.getRenderedTaskForm(deptLeaderTask.getId()));  
61 - variables = new HashMap<String, String>();  
62 - variables.put("deptLeaderApproved", "true");  
63 - formService.submitTaskFormData(deptLeaderTask.getId(), variables);  
64 -  
65 - // 人事审批通过  
66 - Task hrTask = taskService.createTaskQuery().taskCandidateGroup("hr").singleResult();  
67 - assertNotNull(formService.getRenderedTaskForm(hrTask.getId()));  
68 - variables = new HashMap<String, String>();  
69 - variables.put("hrApproved", "true");  
70 - //手动设置支付金额  
71 - variables.put("amountMoney", "19999");  
72 - formService.submitTaskFormData(hrTask.getId(), variables);  
73 - //判断支付金额是否>1万元  
74 - // 财务打款通过  
75 - Task caiwuTask = taskService.createTaskQuery().taskCandidateGroup("caiwu").singleResult();  
76 - printTask(caiwuTask);  
77 - taskService.complete(caiwuTask.getId());  
78 - //判断倒计时15天  
79 - Task chuNaTask = taskService.createTaskQuery().taskCandidateGroup("chuNa").singleResult();  
80 - printTask(chuNaTask);  
81 - taskService.complete(chuNaTask.getId());  
82 -  
83 - // 销假(根据申请人的用户ID读取)  
84 -// Task reportBackTask = taskService.createTaskQuery().taskAssignee(currentUserId).singleResult();  
85 -// assertNotNull(formService.getRenderedTaskForm(reportBackTask.getId()));  
86 -// variables = new HashMap<String, String>();  
87 -// variables.put("reportBackDate", sdf.format(ca.getTime()));  
88 -// formService.submitTaskFormData(reportBackTask.getId(), variables);  
89 -  
90 - // 验证流程是否已经结束  
91 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().finished().singleResult();  
92 - assertNotNull(historicProcessInstance);  
93 -  
94 - // 读取历史变量  
95 - Map<String, Object> historyVariables = packageVariables(processInstance);  
96 -  
97 - // 验证执行结果  
98 - assertEquals("ok", historyVariables.get("result"));  
99 -  
100 - }  
101 -  
102 - /**  
103 - * 查询过期任务  
104 - * @throws Exception  
105 - */  
106 - @Test  
107 - @Deployment(resources = {"chapter6/leave-timeLimit-money/leave-formkey-ext.bpmn", "chapter6/leave-timeLimit-money/leave-start.form",  
108 - "chapter6/leave-timeLimit-money/approve-deptLeader.form", "chapter6/leave-timeLimit-money/approve-hr.form", "chapter6/leave-timeLimit-money/report-back.form",  
109 - "chapter6/leave-timeLimit-money/modify-apply.form"})  
110 - public void dueDate() throws Exception {  
111 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
112 - Map<String, String> variables = new HashMap<String, String>();  
113 - Calendar ca = Calendar.getInstance();  
114 - String startDate = sdf.format(ca.getTime());  
115 - ca.add(Calendar.DAY_OF_MONTH, 2); // 当前日期加2天  
116 - String endDate = sdf.format(ca.getTime());  
117 -  
118 - // 启动流程  
119 - variables.put("startDate", startDate);  
120 - variables.put("endDate", endDate);  
121 - variables.put("reason", "公休");  
122 -  
123 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();  
124 -  
125 - // 读取启动表单  
126 - Object renderedStartForm = formService.getRenderedStartForm(processDefinition.getId());  
127 - assertNotNull(renderedStartForm);  
128 -  
129 - // 启动流程  
130 - // 设置当前用户  
131 - String currentUserId = "henryyan";  
132 - identityService.setAuthenticatedUserId(currentUserId);  
133 - ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), variables);  
134 - assertNotNull(processInstance);  
135 -  
136 - // 部门领导审批通过  
137 - Task deptLeaderTask = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();  
138 - assertNotNull(formService.getRenderedTaskForm(deptLeaderTask.getId()));  
139 - variables = new HashMap<String, String>();  
140 - variables.put("deptLeaderApproved", "true");  
141 - formService.submitTaskFormData(deptLeaderTask.getId(), variables);  
142 -  
143 - // 人事审批通过  
144 - Task hrTask = taskService.createTaskQuery().taskCandidateGroup("hr").singleResult();  
145 - assertNotNull(formService.getRenderedTaskForm(hrTask.getId()));  
146 - variables = new HashMap<String, String>();  
147 - variables.put("hrApproved", "true");  
148 - //手动设置支付金额  
149 - variables.put("amountMoney", "19999");  
150 - formService.submitTaskFormData(hrTask.getId(), variables);  
151 - //判断支付金额是否>1万元  
152 - // 财务打款通过  
153 - Task caiwuTask = taskService.createTaskQuery().taskCandidateGroup("caiwu").singleResult();  
154 - printTask(caiwuTask);  
155 -  
156 - //设置5天前就过期了  
157 - DateTime dateTime = DateTime.now();  
158 - DateTime minusDays = dateTime.minusDays(5);  
159 - taskService.setDueDate(caiwuTask.getId(),minusDays.toDate());  
160 - //查询今天以前的过期任务  
161 - List<Task> listTask = taskService.createTaskQuery().taskDueBefore(new Date()).list();  
162 - for (Task task : listTask) {  
163 - printTask(task);  
164 - }  
165 -  
166 - // 销假(根据申请人的用户ID读取)  
167 -// Task reportBackTask = taskService.createTaskQuery().taskAssignee(currentUserId).singleResult();  
168 -// assertNotNull(formService.getRenderedTaskForm(reportBackTask.getId()));  
169 -// variables = new HashMap<String, String>();  
170 -// variables.put("reportBackDate", sdf.format(ca.getTime()));  
171 -// formService.submitTaskFormData(reportBackTask.getId(), variables);  
172 -  
173 - // 验证流程是否已经结束  
174 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().finished().singleResult();  
175 - assertNotNull(historicProcessInstance);  
176 -  
177 - // 读取历史变量  
178 - Map<String, Object> historyVariables = packageVariables(processInstance);  
179 -  
180 - // 验证执行结果  
181 - assertEquals("ok", historyVariables.get("result"));  
182 -  
183 - }  
184 -  
185 - /**  
186 - * 任意流程的跳转  
187 - */  
188 - @Test  
189 - public void taskJump(){  
190 - // 当前任务  
191 - String taskId="ddd";  
192 - Task task = taskService.createTaskQuery().taskId(taskId).singleResult();  
193 - String assignee = "下一个自由跳转人";  
194 - taskService.setAssignee(taskId,assignee);  
195 - // 自由跳转  
196 - String taskDefKey="目标-任务名称";  
197 - //moveActivityIdTo的两个参数,源任务key,目标任务key  
198 - runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()).moveActivityIdTo(task.getTaskDefinitionKey(), taskDefKey).changeState();  
199 -  
200 - }  
201 -  
202 -  
203 - /**  
204 - * 读取历史变量并封装到Map中  
205 - */  
206 - private Map<String, Object> packageVariables(ProcessInstance processInstance) {  
207 - Map<String, Object> historyVariables = new HashMap<String, Object>();  
208 - List<HistoricDetail> list = historyService.createHistoricDetailQuery().processInstanceId(processInstance.getId()).list();  
209 - for (HistoricDetail historicDetail : list) {  
210 - if (historicDetail instanceof HistoricFormProperty) {  
211 - // 表单中的字段  
212 - HistoricFormProperty field = (HistoricFormProperty) historicDetail;  
213 - historyVariables.put(field.getPropertyId(), field.getPropertyValue());  
214 - System.out.println("form field: taskId=" + field.getTaskId() + ", " + field.getPropertyId() + " = " + field.getPropertyValue());  
215 - } else if (historicDetail instanceof HistoricVariableUpdate) {  
216 - HistoricVariableUpdate variable = (HistoricVariableUpdate) historicDetail;  
217 - historyVariables.put(variable.getVariableName(), variable.getValue());  
218 - System.out.println("variable: " + variable.getVariableName() + " = " + variable.getValue());  
219 - }  
220 - }  
221 - return historyVariables;  
222 - }  
223 - private void printTask(Task task){  
224 - System.out.println(task.getName()+" : " + task.getDueDate());  
225 - }  
226 -}  
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/LeaveFormKeyTest.java deleted
1 -package cn.iocoder.yudao.module.bpm;  
2 -  
3 -import org.flowable.engine.history.HistoricDetail;  
4 -import org.flowable.engine.history.HistoricFormProperty;  
5 -import org.flowable.engine.history.HistoricProcessInstance;  
6 -import org.flowable.engine.history.HistoricVariableUpdate;  
7 -import org.flowable.engine.repository.ProcessDefinition;  
8 -import org.flowable.engine.runtime.ProcessInstance;  
9 -import org.flowable.engine.test.Deployment;  
10 -import org.flowable.task.api.Task;  
11 -import org.junit.Test;  
12 -  
13 -import java.text.SimpleDateFormat;  
14 -import java.util.Calendar;  
15 -import java.util.HashMap;  
16 -import java.util.List;  
17 -import java.util.Map;  
18 -  
19 -import static org.junit.Assert.assertEquals;  
20 -import static org.junit.Assert.assertNotNull;  
21 -  
22 -/**  
23 - * @author henryyan  
24 - */  
25 -public class LeaveFormKeyTest extends AbstractOATest {  
26 -  
27 - @Test  
28 - @Deployment(resources = {"chapter6/leave-formkey/leave-formkey.bpmn", "chapter6/leave-formkey/leave-start.form",  
29 - "chapter6/leave-formkey/approve-deptLeader.form", "chapter6/leave-formkey/approve-hr.form", "chapter6/leave-formkey/report-back.form",  
30 - "chapter6/leave-formkey/modify-apply.form"})  
31 - public void allPass() throws Exception {  
32 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
33 - Map<String, String> variables = new HashMap<String, String>();  
34 - Calendar ca = Calendar.getInstance();  
35 - String startDate = sdf.format(ca.getTime());  
36 - ca.add(Calendar.DAY_OF_MONTH, 2); // 当前日期加2天  
37 - String endDate = sdf.format(ca.getTime());  
38 -  
39 - // 启动流程  
40 - variables.put("startDate", startDate);  
41 - variables.put("endDate", endDate);  
42 - variables.put("reason", "公休");  
43 -  
44 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();  
45 -  
46 - // 读取启动表单  
47 - Object renderedStartForm = formService.getRenderedStartForm(processDefinition.getId());  
48 - assertNotNull(renderedStartForm);  
49 -  
50 - // 启动流程  
51 - // 设置当前用户  
52 - String currentUserId = "henryyan";  
53 - identityService.setAuthenticatedUserId(currentUserId);  
54 - ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), variables);  
55 - assertNotNull(processInstance);  
56 -  
57 - // 部门领导审批通过  
58 - Task deptLeaderTask = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();  
59 - assertNotNull(formService.getRenderedTaskForm(deptLeaderTask.getId()));  
60 - variables = new HashMap<String, String>();  
61 - variables.put("deptLeaderApproved", "true");  
62 - formService.submitTaskFormData(deptLeaderTask.getId(), variables);  
63 -  
64 - // 人事审批通过  
65 - Task hrTask = taskService.createTaskQuery().taskCandidateGroup("hr").singleResult();  
66 - assertNotNull(formService.getRenderedTaskForm(hrTask.getId()));  
67 - variables = new HashMap<String, String>();  
68 - variables.put("hrApproved", "true");  
69 - formService.submitTaskFormData(hrTask.getId(), variables);  
70 -  
71 - // 销假(根据申请人的用户ID读取)  
72 - Task reportBackTask = taskService.createTaskQuery().taskAssignee(currentUserId).singleResult();  
73 - assertNotNull(formService.getRenderedTaskForm(reportBackTask.getId()));  
74 - variables = new HashMap<String, String>();  
75 - variables.put("reportBackDate", sdf.format(ca.getTime()));  
76 - formService.submitTaskFormData(reportBackTask.getId(), variables);  
77 -  
78 - // 验证流程是否已经结束  
79 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().finished().singleResult();  
80 - assertNotNull(historicProcessInstance);  
81 -  
82 - // 读取历史变量  
83 - Map<String, Object> historyVariables = packageVariables(processInstance);  
84 -  
85 - // 验证执行结果  
86 - assertEquals("ok", historyVariables.get("result"));  
87 -  
88 - }  
89 -  
90 - /**  
91 - * 任意流程的跳转  
92 - */  
93 - @Test  
94 - public void taskJump(){  
95 - // 当前任务  
96 - String taskId="ddd";  
97 - Task task = taskService.createTaskQuery().taskId(taskId).singleResult();  
98 - String assignee = "下一个自由跳转人";  
99 - taskService.setAssignee(taskId,assignee);  
100 - // 自由跳转  
101 - String taskDefKey="目标-任务名称";  
102 - //moveActivityIdTo的两个参数,源任务key,目标任务key  
103 - runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()).moveActivityIdTo(task.getTaskDefinitionKey(), taskDefKey).changeState();  
104 -  
105 - }  
106 -  
107 - /**  
108 - * 领导驳回后申请人取消申请  
109 - */  
110 - @Test  
111 - @Deployment(resources = "chapter6/dynamic-form/leave.bpmn")  
112 - public void cancelApply() throws Exception {  
113 -  
114 - // 设置当前用户  
115 - String currentUserId = "henryyan";  
116 - identityService.setAuthenticatedUserId(currentUserId);  
117 -  
118 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("leave").singleResult();  
119 -  
120 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
121 - Map<String, String> variables = new HashMap<String, String>();  
122 - Calendar ca = Calendar.getInstance();  
123 - String startDate = sdf.format(ca.getTime());  
124 - ca.add(Calendar.DAY_OF_MONTH, 2);  
125 - String endDate = sdf.format(ca.getTime());  
126 -  
127 - // 启动流程  
128 - variables.put("startDate", startDate);  
129 - variables.put("endDate", endDate);  
130 - variables.put("reason", "公休");  
131 - ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), variables);  
132 - assertNotNull(processInstance);  
133 -  
134 - // 部门领导审批通过  
135 - Task deptLeaderTask = taskService.createTaskQuery().taskCandidateGroup("deptLeader").singleResult();  
136 - variables = new HashMap<String, String>();  
137 - variables.put("deptLeaderApproved", "false");  
138 - formService.submitTaskFormData(deptLeaderTask.getId(), variables);  
139 -  
140 - // 调整申请  
141 - Task modifyApply = taskService.createTaskQuery().taskAssignee(currentUserId).singleResult();  
142 - variables = new HashMap<String, String>();  
143 - variables.put("reApply", "false");  
144 - variables.put("startDate", startDate);  
145 - variables.put("endDate", endDate);  
146 - variables.put("reason", "公休");  
147 - formService.submitTaskFormData(modifyApply.getId(), variables);  
148 -  
149 - // 读取历史变量  
150 - Map<String, Object> historyVariables = packageVariables(processInstance);  
151 -  
152 - // 验证执行结果  
153 - assertEquals("canceled", historyVariables.get("result"));  
154 -  
155 - }  
156 -  
157 - /**  
158 - * 读取历史变量并封装到Map中  
159 - */  
160 - private Map<String, Object> packageVariables(ProcessInstance processInstance) {  
161 - Map<String, Object> historyVariables = new HashMap<String, Object>();  
162 - List<HistoricDetail> list = historyService.createHistoricDetailQuery().processInstanceId(processInstance.getId()).list();  
163 - for (HistoricDetail historicDetail : list) {  
164 - if (historicDetail instanceof HistoricFormProperty) {  
165 - // 表单中的字段  
166 - HistoricFormProperty field = (HistoricFormProperty) historicDetail;  
167 - historyVariables.put(field.getPropertyId(), field.getPropertyValue());  
168 - System.out.println("form field: taskId=" + field.getTaskId() + ", " + field.getPropertyId() + " = " + field.getPropertyValue());  
169 - } else if (historicDetail instanceof HistoricVariableUpdate) {  
170 - HistoricVariableUpdate variable = (HistoricVariableUpdate) historicDetail;  
171 - historyVariables.put(variable.getVariableName(), variable.getValue());  
172 - System.out.println("variable: " + variable.getVariableName() + " = " + variable.getValue());  
173 - }  
174 - }  
175 - return historyVariables;  
176 - }  
177 -}  
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/MultiInstancesTest.java deleted
1 -package cn.iocoder.yudao.module.bpm;  
2 -  
3 -import org.flowable.engine.history.HistoricDetail;  
4 -import org.flowable.engine.history.HistoricFormProperty;  
5 -import org.flowable.engine.history.HistoricProcessInstance;  
6 -import org.flowable.engine.history.HistoricVariableUpdate;  
7 -import org.flowable.engine.repository.ProcessDefinition;  
8 -import org.flowable.engine.runtime.ProcessInstance;  
9 -import org.flowable.engine.test.Deployment;  
10 -import org.flowable.task.api.Task;  
11 -import org.junit.jupiter.api.Test;  
12 -  
13 -import java.text.SimpleDateFormat;  
14 -import java.util.*;  
15 -  
16 -import static org.junit.jupiter.api.Assertions.assertEquals;  
17 -import static org.junit.jupiter.api.Assertions.assertNotNull;  
18 -  
19 -/**  
20 - * @author henryyan  
21 - * testMultiInstanceForUserTask 会签  
22 - * cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.BpmUserTaskActivityBehavior#handleAssignments(org.flowable.task.service.TaskService, java.lang.String, java.lang.String, java.util.List, java.util.List, org.flowable.task.service.impl.persistence.entity.TaskEntity, org.flowable.common.engine.impl.el.ExpressionManager, org.flowable.engine.delegate.DelegateExecution, org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl)  
23 - *  
24 - * 发生了死锁  
25 - * cn.iocoder.yudao.module.bpm.controller.admin.task.BpmProcessInstanceController#createProcessInstance(cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO)  
26 - * 执行了两次,任务分配到了同一个人  
27 - */  
28 -public class MultiInstancesTest extends AbstractOATest {  
29 -  
30 - /**  
31 - * Java Service多实例(是否顺序结果一样)  
32 - */  
33 - @Test  
34 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceFixedNumbers.bpmn"})  
35 - public void testParallel() throws Exception {  
36 - Map<String, Object> variables = new HashMap<String, Object>();  
37 - long loop = 3;  
38 - variables.put("loop", loop);  
39 - variables.put("counter", 0); // 计数器  
40 - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testMultiInstanceFixedNumbers", variables);  
41 - Object variable = runtimeService.getVariable(processInstance.getId(), "counter");  
42 - assertEquals(loop, variable);  
43 - }  
44 -  
45 - /**  
46 - * 用户任务多实例--顺序  
47 - */  
48 - @Test  
49 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceForUserTask.sequential.bpmn"})  
50 - public void testForUserSequence() throws Exception {  
51 - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testMultiInstanceForUserTask");  
52 - long count = taskService.createTaskQuery().processInstanceId(processInstance.getId()).count();  
53 - assertEquals(1, count);  
54 -  
55 - Task task = taskService.createTaskQuery().singleResult();  
56 - taskService.complete(task.getId());  
57 - count = taskService.createTaskQuery().processInstanceId(processInstance.getId()).count();  
58 - assertEquals(1, count);  
59 -  
60 - task = taskService.createTaskQuery().singleResult();  
61 - taskService.complete(task.getId());  
62 - count = taskService.createTaskQuery().processInstanceId(processInstance.getId()).count();  
63 - assertEquals(1, count);  
64 -  
65 - task = taskService.createTaskQuery().singleResult();  
66 - taskService.complete(task.getId());  
67 - count = taskService.createTaskQuery().processInstanceId(processInstance.getId()).count();  
68 - assertEquals(0, count);  
69 - }  
70 -  
71 - /**  
72 - * 用户任务多实例--并行  
73 - */  
74 - @Test  
75 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceForUserTask.nosequential.bpmn"})  
76 - public void testForUserNoSequential() throws Exception {  
77 - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testMultiInstanceForUserTask");  
78 - long count = taskService.createTaskQuery().processInstanceId(processInstance.getId()).count();  
79 - assertEquals(3, count);  
80 - }  
81 -  
82 - /**  
83 - * 用户任务多实例,通过用户数量决定实例个数--并行  
84 - */  
85 - @Test  
86 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceForUserTask.users.nosequential.bpmn"})  
87 - public void testForUserCreateByUsersNoSequential() throws Exception {  
88 - Map<String, Object> variables = new HashMap<String, Object>();  
89 - List<String> users = Arrays.asList("user1", "user2", "user3");  
90 - variables.put("users", users);  
91 - runtimeService.startProcessInstanceByKey("testMultiInstanceForUserTask", variables);  
92 - for (String userId : users) {  
93 - assertEquals(1, taskService.createTaskQuery().taskAssignee(userId).count());  
94 - }  
95 - }  
96 -  
97 - /**  
98 - * 用户任务多实例,通过用户数量决定实例个数--顺序  
99 - */  
100 - @Test  
101 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceForUserTask.users.sequential.bpmn"})  
102 - public void testForUserCreateByUsersSequential() throws Exception {  
103 - Map<String, Object> variables = new HashMap<String, Object>();  
104 - List<String> users = Arrays.asList("user1", "user2", "user3");  
105 - variables.put("users", users);  
106 - runtimeService.startProcessInstanceByKey("testMultiInstanceForUserTask", variables);  
107 - for (String userId : users) {  
108 - Task task = taskService.createTaskQuery().taskAssignee(userId).singleResult();  
109 - taskService.complete(task.getId());  
110 - }  
111 - }  
112 -  
113 - /**  
114 - * 用户任务多实例,按照任务完成的百分比比率决定是否提前结束流程  
115 - */  
116 - @Test  
117 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceForUserTask.users.sequential.with.complete.conditon.bpmn"})  
118 - public void testForUserCreateByUsersSequentialWithCompleteCondition() throws Exception {  
119 - Map<String, Object> variables = new HashMap<String, Object>();  
120 - List<String> users = Arrays.asList("user1", "user2", "user3");  
121 - variables.put("users", users);  
122 - variables.put("rate", 0.6d);  
123 - runtimeService.startProcessInstanceByKey("testMultiInstanceForUserTask", variables);  
124 -  
125 - Task task = taskService.createTaskQuery().taskAssignee("user1").singleResult();  
126 - taskService.complete(task.getId());  
127 -  
128 - task = taskService.createTaskQuery().taskAssignee("user2").singleResult();  
129 - taskService.complete(task.getId());  
130 -  
131 - long count = historyService.createHistoricProcessInstanceQuery().finished().count();  
132 - assertEquals(1, count);  
133 -  
134 - }  
135 -  
136 - /**  
137 - * 用户任务多实例,按照任务完成的百分比比率决定是否提前结束流程  
138 - */  
139 - @Test  
140 - @Deployment(resources = {"diagrams/chapter9/testMultiInstanceForUserTask.exception.bpmn"})  
141 - public void testForUserCreateByUsersException() throws Exception {  
142 - Map<String, Object> variables = new HashMap<String, Object>();  
143 - List<String> users = Arrays.asList("user1", "user2", "user3");  
144 - variables.put("users", users);  
145 - runtimeService.startProcessInstanceByKey("testMultiInstanceForUserTask", variables);  
146 -  
147 - Task task = taskService.createTaskQuery().taskAssignee("user1").singleResult();  
148 - taskService.complete(task.getId());  
149 -  
150 - task = taskService.createTaskQuery().taskAssignee("user2").singleResult();  
151 - taskService.complete(task.getId());  
152 -  
153 - task = taskService.createTaskQuery().taskAssignee("user3").singleResult();  
154 - taskService.complete(task.getId());  
155 -  
156 - List<Task> list = taskService.createTaskQuery().list();  
157 - for (Task task2 : list) {  
158 - System.out.println("============" + task2.getName());  
159 - }  
160 -  
161 - }  
162 - /////////////////////////////////////////////////  
163 - /**  
164 - * 全部通过  
165 - */  
166 - @Test  
167 - @Deployment(resources = {"diagrams/chapter9/leave-countersign.bpmn"})  
168 - public void testAllApproved() throws Exception {  
169 - Map<String, Object> variables = new HashMap<String, Object>();  
170 - List<String> users = Arrays.asList("groupLeader", "deptLeader", "hr");  
171 - variables.put("users", users);  
172 - identityService.setAuthenticatedUserId("henryyan");  
173 - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave-countersign", variables);  
174 - for (String user : users) {  
175 - Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).taskAssignee(user).singleResult();  
176 - Map<String, Object> taskVariables = new HashMap<String, Object>();  
177 - taskVariables.put("approved", "true");  
178 - taskService.complete(task.getId(), taskVariables);  
179 - }  
180 -  
181 - Task task = taskService.createTaskQuery().taskAssignee("henryyan").singleResult();  
182 - assertNotNull(task);  
183 - assertEquals("销假", task.getName());  
184 - }  
185 -  
186 - /**  
187 - * 部分通过  
188 - */  
189 - @Test  
190 - @Deployment(resources = {"diagrams/chapter9/leave-countersign.bpmn"})  
191 - public void testNotAllApproved() throws Exception {  
192 - Map<String, Object> variables = new HashMap<String, Object>();  
193 - List<String> users = Arrays.asList("groupLeader", "deptLeader", "hr");  
194 - variables.put("users", users);  
195 - identityService.setAuthenticatedUserId("henryyan");  
196 - ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave-countersign", variables);  
197 - for (String user : users) {  
198 - Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).taskAssignee(user).singleResult();  
199 - Map<String, Object> taskVariables = new HashMap<String, Object>();  
200 - taskVariables.put("approved", "false");  
201 - taskService.complete(task.getId(), taskVariables);  
202 - }  
203 -  
204 - Task task = taskService.createTaskQuery().taskAssignee("henryyan").singleResult();  
205 - assertNotNull(task);  
206 - assertEquals("调整申请", task.getName());  
207 - }  
208 -}  
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX2ScriptTest.java
@@ -6,8 +6,8 @@ import cn.iocoder.yudao.module.system.api.dept.DeptApi; @@ -6,8 +6,8 @@ import cn.iocoder.yudao.module.system.api.dept.DeptApi;
6 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; 6 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
7 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 7 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
8 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; 8 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
9 -import org.flowable.task.service.impl.persistence.entity.TaskEntity;  
10 -import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl; 9 +import org.flowable.engine.delegate.DelegateExecution;
  10 +import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
11 import org.junit.jupiter.api.Test; 11 import org.junit.jupiter.api.Test;
12 import org.mockito.InjectMocks; 12 import org.mockito.InjectMocks;
13 import org.mockito.Mock; 13 import org.mockito.Mock;
@@ -16,6 +16,7 @@ import java.util.Set; @@ -16,6 +16,7 @@ import java.util.Set;
16 16
17 import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; 17 import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
18 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 18 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  19 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
19 import static org.junit.jupiter.api.Assertions.assertEquals; 20 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.mockito.ArgumentMatchers.eq; 21 import static org.mockito.ArgumentMatchers.eq;
21 import static org.mockito.Mockito.when; 22 import static org.mockito.Mockito.when;
@@ -35,13 +36,13 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @@ -35,13 +36,13 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
35 @Test 36 @Test
36 public void testCalculateTaskCandidateUsers_noDept() { 37 public void testCalculateTaskCandidateUsers_noDept() {
37 // 准备参数 38 // 准备参数
38 - TaskEntity task = buildTaskEntity(1L); 39 + DelegateExecution execution = mockDelegateExecution(1L);
39 // mock 方法(startUser) 40 // mock 方法(startUser)
40 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L)); 41 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L));
41 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser); 42 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser);
42 43
43 // 调用 44 // 调用
44 - Set<Long> result = script.calculateTaskCandidateUsers(task); 45 + Set<Long> result = script.calculateTaskCandidateUsers(execution);
45 // 断言 46 // 断言
46 assertEquals(0, result.size()); 47 assertEquals(0, result.size());
47 } 48 }
@@ -49,7 +50,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @@ -49,7 +50,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
49 @Test 50 @Test
50 public void testCalculateTaskCandidateUsers_noParentDept() { 51 public void testCalculateTaskCandidateUsers_noParentDept() {
51 // 准备参数 52 // 准备参数
52 - TaskEntity task = buildTaskEntity(1L); 53 + DelegateExecution execution = mockDelegateExecution(1L);
53 // mock 方法(startUser) 54 // mock 方法(startUser)
54 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L)); 55 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L));
55 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser); 56 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser);
@@ -58,7 +59,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @@ -58,7 +59,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
58 when(deptApi.getDept(eq(10L))).thenReturn(startUserDept); 59 when(deptApi.getDept(eq(10L))).thenReturn(startUserDept);
59 60
60 // 调用 61 // 调用
61 - Set<Long> result = script.calculateTaskCandidateUsers(task); 62 + Set<Long> result = script.calculateTaskCandidateUsers(execution);
62 // 断言 63 // 断言
63 assertEquals(asSet(20L), result); 64 assertEquals(asSet(20L), result);
64 } 65 }
@@ -66,7 +67,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @@ -66,7 +67,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
66 @Test 67 @Test
67 public void testCalculateTaskCandidateUsers_existParentDept() { 68 public void testCalculateTaskCandidateUsers_existParentDept() {
68 // 准备参数 69 // 准备参数
69 - TaskEntity task = buildTaskEntity(1L); 70 + DelegateExecution execution = mockDelegateExecution(1L);
70 // mock 方法(startUser) 71 // mock 方法(startUser)
71 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L)); 72 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L));
72 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser); 73 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser);
@@ -79,18 +80,21 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest { @@ -79,18 +80,21 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
79 when(deptApi.getDept(eq(100L))).thenReturn(parentDept); 80 when(deptApi.getDept(eq(100L))).thenReturn(parentDept);
80 81
81 // 调用 82 // 调用
82 - Set<Long> result = script.calculateTaskCandidateUsers(task); 83 + Set<Long> result = script.calculateTaskCandidateUsers(execution);
83 // 断言 84 // 断言
84 assertEquals(asSet(200L), result); 85 assertEquals(asSet(200L), result);
85 } 86 }
86 87
87 @SuppressWarnings("SameParameterValue") 88 @SuppressWarnings("SameParameterValue")
88 - private TaskEntity buildTaskEntity(Long startUserId) {  
89 - TaskEntityImpl task = new TaskEntityImpl();  
90 -// task.setProcessInstance(new ExecutionEntityImpl());  
91 -// task.getProcessInstance().setStartUserId(String.valueOf(startUserId));  
92 - // TODO  
93 - return task; 89 + private DelegateExecution mockDelegateExecution(Long startUserId) {
  90 + ExecutionEntityImpl execution = new ExecutionEntityImpl();
  91 + execution.setProcessInstanceId(randomString());
  92 + // mock 返回 startUserId
  93 + ExecutionEntityImpl processInstance = new ExecutionEntityImpl();
  94 + processInstance.setStartUserId(String.valueOf(startUserId));
  95 + when(bpmProcessInstanceService.getProcessInstance(eq(execution.getProcessInstanceId())))
  96 + .thenReturn(processInstance);
  97 + return execution;
94 } 98 }
95 99
96 } 100 }
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImplTest.java
@@ -9,12 +9,16 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; @@ -9,12 +9,16 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO;
9 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; 9 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum;
10 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; 10 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum;
11 import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript; 11 import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript;
  12 +import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl.BpmTaskAssignStartUserScript;
12 import cn.iocoder.yudao.module.system.api.dept.DeptApi; 13 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
  14 +import cn.iocoder.yudao.module.system.api.dept.PostApi;
13 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; 15 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
  16 +import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
14 import cn.iocoder.yudao.module.system.api.permission.PermissionApi; 17 import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
  18 +import cn.iocoder.yudao.module.system.api.permission.RoleApi;
15 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 19 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
16 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; 20 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
17 -import org.flowable.task.service.impl.persistence.entity.TaskEntity; 21 +import org.flowable.engine.delegate.DelegateExecution;
18 import org.junit.jupiter.api.Test; 22 import org.junit.jupiter.api.Test;
19 import org.springframework.boot.test.mock.mockito.MockBean; 23 import org.springframework.boot.test.mock.mockito.MockBean;
20 import org.springframework.context.annotation.Import; 24 import org.springframework.context.annotation.Import;
@@ -37,7 +41,7 @@ import static org.mockito.Mockito.when; @@ -37,7 +41,7 @@ import static org.mockito.Mockito.when;
37 * 41 *
38 * @author 芋道源码 42 * @author 芋道源码
39 */ 43 */
40 -@Import(BpmTaskAssignRuleServiceImpl.class) 44 +@Import({BpmTaskAssignRuleServiceImpl.class, BpmTaskAssignStartUserScript.class}) // Import 引入 BpmTaskAssignStartUserScript 目的是保证不报错
41 public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest { 45 public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
42 46
43 @Resource 47 @Resource
@@ -51,6 +55,12 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest { @@ -51,6 +55,12 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
51 private AdminUserApi adminUserApi; 55 private AdminUserApi adminUserApi;
52 @MockBean 56 @MockBean
53 private PermissionApi permissionApi; 57 private PermissionApi permissionApi;
  58 + @MockBean
  59 + private RoleApi roleApi;
  60 + @MockBean
  61 + private PostApi postApi;
  62 + @MockBean
  63 + private DictDataApi dictDataApi;
54 64
55 @Test 65 @Test
56 public void testCalculateTaskCandidateUsers_Role() { 66 public void testCalculateTaskCandidateUsers_Role() {
@@ -159,7 +169,7 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest { @@ -159,7 +169,7 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
159 BpmTaskAssignScript script1 = new BpmTaskAssignScript() { 169 BpmTaskAssignScript script1 = new BpmTaskAssignScript() {
160 170
161 @Override 171 @Override
162 - public Set<Long> calculateTaskCandidateUsers(TaskEntity task) { 172 + public Set<Long> calculateTaskCandidateUsers(DelegateExecution task) {
163 return singleton(11L); 173 return singleton(11L);
164 } 174 }
165 175
@@ -171,7 +181,7 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest { @@ -171,7 +181,7 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
171 BpmTaskAssignScript script2 = new BpmTaskAssignScript() { 181 BpmTaskAssignScript script2 = new BpmTaskAssignScript() {
172 182
173 @Override 183 @Override
174 - public Set<Long> calculateTaskCandidateUsers(TaskEntity task) { 184 + public Set<Long> calculateTaskCandidateUsers(DelegateExecution task) {
175 return singleton(22L); 185 return singleton(22L);
176 } 186 }
177 187
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/application-unit-test.yaml
@@ -20,8 +20,9 @@ spring: @@ -20,8 +20,9 @@ spring:
20 init: 20 init:
21 schema-locations: classpath:/sql/create_tables.sql 21 schema-locations: classpath:/sql/create_tables.sql
22 22
23 -mybatis: 23 +mybatis-plus:
24 lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 24 lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
  25 + type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject
25 26
26 --- #################### 定时任务相关配置 #################### 27 --- #################### 定时任务相关配置 ####################
27 28
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/dynamic-form/leave-dynamic-form-with-javascript.zip deleted
No preview for this file type
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/dynamic-form/leave-dynamic-form.zip deleted
No preview for this file type
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/dynamic-form/leave.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<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.kafeitu.me/activiti/leave">  
3 - <process id="leave" name="请假流程-动态表单" isExecutable="true">  
4 - <documentation>请假流程演示-动态表单</documentation>  
5 - <startEvent id="startevent1" name="Start" activiti:initiator="applyUserId">  
6 - <extensionElements>  
7 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
8 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
9 - <activiti:formProperty id="reason" name="请假原因" type="string" required="true"></activiti:formProperty>  
10 - <activiti:formProperty id="validScript" type="javascript" default="alert('表单已经加载完毕');"></activiti:formProperty>  
11 - </extensionElements>  
12 - </startEvent>  
13 - <userTask id="deptLeaderAudit" name="部门领导审批" activiti:candidateGroups="deptLeader">  
14 - <extensionElements>  
15 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
16 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
17 - <activiti:formProperty id="reason" name="请假原因" type="string" writable="false"></activiti:formProperty>  
18 - <activiti:formProperty id="deptLeaderApproved" name="审批意见" type="enum" required="true">  
19 - <activiti:value id="true" name="同意"></activiti:value>  
20 - <activiti:value id="false" name="拒绝"></activiti:value>  
21 - </activiti:formProperty>  
22 - </extensionElements>  
23 - </userTask>  
24 - <exclusiveGateway id="exclusivegateway5" name="Exclusive Gateway"></exclusiveGateway>  
25 - <userTask id="modifyApply" name="调整申请" activiti:assignee="${applyUserId}">  
26 - <extensionElements>  
27 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
28 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
29 - <activiti:formProperty id="reason" name="请假原因" type="string" required="true"></activiti:formProperty>  
30 - <activiti:formProperty id="reApply" name="重新申请" type="enum" required="true">  
31 - <activiti:value id="true" name="重新申请"></activiti:value>  
32 - <activiti:value id="false" name="取消申请"></activiti:value>  
33 - </activiti:formProperty>  
34 - </extensionElements>  
35 - </userTask>  
36 - <userTask id="hrAudit" name="人事审批" activiti:candidateGroups="hr">  
37 - <extensionElements>  
38 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
39 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
40 - <activiti:formProperty id="reason" name="请假原因" type="string" writable="false"></activiti:formProperty>  
41 - <activiti:formProperty id="hrApproved" name="审批意见" type="enum" required="true">  
42 - <activiti:value id="true" name="同意"></activiti:value>  
43 - <activiti:value id="false" name="拒绝"></activiti:value>  
44 - </activiti:formProperty>  
45 - </extensionElements>  
46 - </userTask>  
47 - <exclusiveGateway id="exclusivegateway6" name="Exclusive Gateway"></exclusiveGateway>  
48 - <userTask id="reportBack" name="销假" activiti:assignee="${applyUserId}">  
49 - <extensionElements>  
50 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
51 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
52 - <activiti:formProperty id="reason" name="请假原因" type="string" writable="false"></activiti:formProperty>  
53 - <activiti:formProperty id="reportBackDate" name="销假日期" type="date" default="${endDate}" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
54 - </extensionElements>  
55 - </userTask>  
56 - <endEvent id="endevent1" name="End"></endEvent>  
57 - <exclusiveGateway id="exclusivegateway7" name="Exclusive Gateway"></exclusiveGateway>  
58 - <sequenceFlow id="flow2" sourceRef="startevent1" targetRef="deptLeaderAudit"></sequenceFlow>  
59 - <sequenceFlow id="flow3" sourceRef="deptLeaderAudit" targetRef="exclusivegateway5"></sequenceFlow>  
60 - <sequenceFlow id="flow4" name="拒绝" sourceRef="exclusivegateway5" targetRef="modifyApply">  
61 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderApproved == 'false'}]]></conditionExpression>  
62 - </sequenceFlow>  
63 - <sequenceFlow id="flow5" name="同意" sourceRef="exclusivegateway5" targetRef="hrAudit">  
64 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderApproved == 'true'}]]></conditionExpression>  
65 - </sequenceFlow>  
66 - <sequenceFlow id="flow6" sourceRef="hrAudit" targetRef="exclusivegateway6"></sequenceFlow>  
67 - <sequenceFlow id="flow7" name="同意" sourceRef="exclusivegateway6" targetRef="reportBack">  
68 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrApproved == 'true'}]]></conditionExpression>  
69 - </sequenceFlow>  
70 - <sequenceFlow id="flow8" name="销假" sourceRef="reportBack" targetRef="endevent1">  
71 - <extensionElements>  
72 - <activiti:executionListener event="take" expression="${execution.setVariable('result', 'ok')}"></activiti:executionListener>  
73 - </extensionElements>  
74 - </sequenceFlow>  
75 - <sequenceFlow id="flow9" name="拒绝" sourceRef="exclusivegateway6" targetRef="modifyApply">  
76 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrApproved == 'false'}]]></conditionExpression>  
77 - </sequenceFlow>  
78 - <sequenceFlow id="flow10" name="重新申请" sourceRef="exclusivegateway7" targetRef="deptLeaderAudit">  
79 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'true'}]]></conditionExpression>  
80 - </sequenceFlow>  
81 - <sequenceFlow id="flow11" sourceRef="modifyApply" targetRef="exclusivegateway7"></sequenceFlow>  
82 - <sequenceFlow id="flow12" name="结束流程" sourceRef="exclusivegateway7" targetRef="endevent1">  
83 - <extensionElements>  
84 - <activiti:executionListener event="take" expression="${execution.setVariable('result', 'canceled')}"></activiti:executionListener>  
85 - </extensionElements>  
86 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'false'}]]></conditionExpression>  
87 - </sequenceFlow>  
88 - <textAnnotation id="textannotation1" textFormat="text/plain">  
89 - <text>请求被驳回后员工可以选择继续申请,或者取消本次申请</text>  
90 - </textAnnotation>  
91 - <association id="association1" sourceRef="modifyApply" targetRef="textannotation1"></association>  
92 - </process>  
93 - <bpmndi:BPMNDiagram id="BPMNDiagram_leave">  
94 - <bpmndi:BPMNPlane bpmnElement="leave" id="BPMNPlane_leave">  
95 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
96 - <omgdc:Bounds height="35.0" width="35.0" x="10.0" y="30.0"></omgdc:Bounds>  
97 - </bpmndi:BPMNShape>  
98 - <bpmndi:BPMNShape bpmnElement="deptLeaderAudit" id="BPMNShape_deptLeaderAudit">  
99 - <omgdc:Bounds height="55.0" width="105.0" x="90.0" y="20.0"></omgdc:Bounds>  
100 - </bpmndi:BPMNShape>  
101 - <bpmndi:BPMNShape bpmnElement="exclusivegateway5" id="BPMNShape_exclusivegateway5">  
102 - <omgdc:Bounds height="40.0" width="40.0" x="250.0" y="27.0"></omgdc:Bounds>  
103 - </bpmndi:BPMNShape>  
104 - <bpmndi:BPMNShape bpmnElement="modifyApply" id="BPMNShape_modifyApply">  
105 - <omgdc:Bounds height="55.0" width="105.0" x="218.0" y="108.0"></omgdc:Bounds>  
106 - </bpmndi:BPMNShape>  
107 - <bpmndi:BPMNShape bpmnElement="hrAudit" id="BPMNShape_hrAudit">  
108 - <omgdc:Bounds height="55.0" width="105.0" x="358.0" y="20.0"></omgdc:Bounds>  
109 - </bpmndi:BPMNShape>  
110 - <bpmndi:BPMNShape bpmnElement="exclusivegateway6" id="BPMNShape_exclusivegateway6">  
111 - <omgdc:Bounds height="40.0" width="40.0" x="495.0" y="27.0"></omgdc:Bounds>  
112 - </bpmndi:BPMNShape>  
113 - <bpmndi:BPMNShape bpmnElement="reportBack" id="BPMNShape_reportBack">  
114 - <omgdc:Bounds height="55.0" width="105.0" x="590.0" y="20.0"></omgdc:Bounds>  
115 - </bpmndi:BPMNShape>  
116 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
117 - <omgdc:Bounds height="35.0" width="35.0" x="625.0" y="223.0"></omgdc:Bounds>  
118 - </bpmndi:BPMNShape>  
119 - <bpmndi:BPMNShape bpmnElement="exclusivegateway7" id="BPMNShape_exclusivegateway7">  
120 - <omgdc:Bounds height="40.0" width="40.0" x="250.0" y="220.0"></omgdc:Bounds>  
121 - </bpmndi:BPMNShape>  
122 - <bpmndi:BPMNShape bpmnElement="textannotation1" id="BPMNShape_textannotation1">  
123 - <omgdc:Bounds height="57.0" width="120.0" x="361.0" y="174.0"></omgdc:Bounds>  
124 - </bpmndi:BPMNShape>  
125 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
126 - <omgdi:waypoint x="45.0" y="47.0"></omgdi:waypoint>  
127 - <omgdi:waypoint x="90.0" y="47.0"></omgdi:waypoint>  
128 - </bpmndi:BPMNEdge>  
129 - <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">  
130 - <omgdi:waypoint x="195.0" y="47.0"></omgdi:waypoint>  
131 - <omgdi:waypoint x="250.0" y="47.0"></omgdi:waypoint>  
132 - </bpmndi:BPMNEdge>  
133 - <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">  
134 - <omgdi:waypoint x="270.0" y="67.0"></omgdi:waypoint>  
135 - <omgdi:waypoint x="270.0" y="108.0"></omgdi:waypoint>  
136 - <bpmndi:BPMNLabel>  
137 - <omgdc:Bounds height="11.0" width="22.0" x="280.0" y="67.0"></omgdc:Bounds>  
138 - </bpmndi:BPMNLabel>  
139 - </bpmndi:BPMNEdge>  
140 - <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">  
141 - <omgdi:waypoint x="290.0" y="47.0"></omgdi:waypoint>  
142 - <omgdi:waypoint x="358.0" y="47.0"></omgdi:waypoint>  
143 - <bpmndi:BPMNLabel>  
144 - <omgdc:Bounds height="11.0" width="22.0" x="300.0" y="30.0"></omgdc:Bounds>  
145 - </bpmndi:BPMNLabel>  
146 - </bpmndi:BPMNEdge>  
147 - <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">  
148 - <omgdi:waypoint x="463.0" y="47.0"></omgdi:waypoint>  
149 - <omgdi:waypoint x="495.0" y="47.0"></omgdi:waypoint>  
150 - </bpmndi:BPMNEdge>  
151 - <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7">  
152 - <omgdi:waypoint x="535.0" y="47.0"></omgdi:waypoint>  
153 - <omgdi:waypoint x="590.0" y="47.0"></omgdi:waypoint>  
154 - <bpmndi:BPMNLabel>  
155 - <omgdc:Bounds height="11.0" width="22.0" x="544.0" y="30.0"></omgdc:Bounds>  
156 - </bpmndi:BPMNLabel>  
157 - </bpmndi:BPMNEdge>  
158 - <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">  
159 - <omgdi:waypoint x="642.0" y="75.0"></omgdi:waypoint>  
160 - <omgdi:waypoint x="642.0" y="223.0"></omgdi:waypoint>  
161 - <bpmndi:BPMNLabel>  
162 - <omgdc:Bounds height="11.0" width="22.0" x="652.0" y="75.0"></omgdc:Bounds>  
163 - </bpmndi:BPMNLabel>  
164 - </bpmndi:BPMNEdge>  
165 - <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">  
166 - <omgdi:waypoint x="515.0" y="67.0"></omgdi:waypoint>  
167 - <omgdi:waypoint x="514.0" y="135.0"></omgdi:waypoint>  
168 - <omgdi:waypoint x="323.0" y="135.0"></omgdi:waypoint>  
169 - <bpmndi:BPMNLabel>  
170 - <omgdc:Bounds height="11.0" width="22.0" x="525.0" y="67.0"></omgdc:Bounds>  
171 - </bpmndi:BPMNLabel>  
172 - </bpmndi:BPMNEdge>  
173 - <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">  
174 - <omgdi:waypoint x="250.0" y="240.0"></omgdi:waypoint>  
175 - <omgdi:waypoint x="142.0" y="239.0"></omgdi:waypoint>  
176 - <omgdi:waypoint x="142.0" y="75.0"></omgdi:waypoint>  
177 - <bpmndi:BPMNLabel>  
178 - <omgdc:Bounds height="11.0" width="44.0" x="152.0" y="221.0"></omgdc:Bounds>  
179 - </bpmndi:BPMNLabel>  
180 - </bpmndi:BPMNEdge>  
181 - <bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">  
182 - <omgdi:waypoint x="270.0" y="163.0"></omgdi:waypoint>  
183 - <omgdi:waypoint x="270.0" y="220.0"></omgdi:waypoint>  
184 - </bpmndi:BPMNEdge>  
185 - <bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12">  
186 - <omgdi:waypoint x="290.0" y="240.0"></omgdi:waypoint>  
187 - <omgdi:waypoint x="625.0" y="240.0"></omgdi:waypoint>  
188 - <bpmndi:BPMNLabel>  
189 - <omgdc:Bounds height="11.0" width="44.0" x="429.0" y="247.0"></omgdc:Bounds>  
190 - </bpmndi:BPMNLabel>  
191 - </bpmndi:BPMNEdge>  
192 - <bpmndi:BPMNEdge bpmnElement="association1" id="BPMNEdge_association1">  
193 - <omgdi:waypoint x="323.0" y="135.0"></omgdi:waypoint>  
194 - <omgdi:waypoint x="421.0" y="174.0"></omgdi:waypoint>  
195 - </bpmndi:BPMNEdge>  
196 - </bpmndi:BPMNPlane>  
197 - </bpmndi:BPMNDiagram>  
198 -</definitions>  
199 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/dynamic-form/leave.png deleted

27.6 KB

yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/approve-deptLeader.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">申请人:</label>  
3 - <div class="controls">${applyUserId}</div>  
4 -</div>  
5 -<div class="control-group">  
6 - <label class="control-label" for="startDate">开始时间:</label>  
7 - <div class="controls">  
8 - <input type="text" id="startDate" name="startDate" value="${startDate}" readonly />  
9 - </div>  
10 -</div>  
11 -<div class="control-group">  
12 - <label class="control-label" for="endDate">结束时间:</label>  
13 - <div class="controls">  
14 - <input type="text" id="endDate" name="endDate" value="${endDate}" readonly />  
15 - </div>  
16 -</div>  
17 -<div class="control-group">  
18 - <label class="control-label" for="reason">请假原因:</label>  
19 - <div class="controls">  
20 - <textarea id="reason" name="reason" readonly>${reason}</textarea>  
21 - </div>  
22 -</div>  
23 -<div class="control-group">  
24 - <label class="control-label" for="deptLeaderApproved">审批意见:</label>  
25 - <div class="controls">  
26 - <select name="deptLeaderApproved" id="deptLeaderApproved">  
27 - <option value="true">同意</option>  
28 - <option value="false">拒绝</option>  
29 - </select>  
30 - </div>  
31 -</div>  
32 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/approve-hr.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">申请人:</label>  
3 - <div class="controls">${applyUserId}</div>  
4 -</div>  
5 -<div class="control-group">  
6 - <label class="control-label" for="startDate">开始时间:</label>  
7 - <div class="controls">  
8 - <input type="text" id="startDate" name="startDate" value="${startDate}" readonly />  
9 - </div>  
10 -</div>  
11 -<div class="control-group">  
12 - <label class="control-label" for="endDate">结束时间:</label>  
13 - <div class="controls">  
14 - <input type="text" id="endDate" name="endDate" value="${endDate}" readonly />  
15 - </div>  
16 -</div>  
17 -<div class="control-group">  
18 - <label class="control-label" for="reason">请假原因:</label>  
19 - <div class="controls">  
20 - <textarea id="reason" name="reason" readonly>${reason}</textarea>  
21 - </div>  
22 -</div>  
23 -<div class="control-group">  
24 - <label class="control-label" for="hrApproved">审批意见:</label>  
25 - <div class="controls">  
26 - <select name="hrApproved" id="hrApproved">  
27 - <option value="true">同意</option>  
28 - <option value="false">拒绝</option>  
29 - </select>  
30 - </div>  
31 -</div>  
32 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/leave-formkey.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<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.kafeitu.me/activiti">  
3 - <process id="leave-formkey" name="请假流程-外置表单" isExecutable="true">  
4 - <documentation>《Activiti实战》第6章的例子--外置表单</documentation>  
5 - <startEvent id="startevent1" name="Start" activiti:initiator="applyUserId" activiti:formKey="chapter6/leave-formkey/leave-start.form"></startEvent>  
6 - <userTask id="deptLeaderVerify" name="部门经理审批" activiti:candidateGroups="deptLeader" activiti:formKey="chapter6/leave-formkey/approve-deptLeader.form"></userTask>  
7 - <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>  
8 - <userTask id="hrVerify" name="人事经理审批" activiti:candidateGroups="hr" activiti:formKey="chapter6/leave-formkey/approve-hr.form"></userTask>  
9 - <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>  
10 - <userTask id="reportBack" name="销假" activiti:assignee="${applyUserId}" activiti:formKey="chapter6/leave-formkey/report-back.form"></userTask>  
11 - <endEvent id="endevent1" name="End"></endEvent>  
12 - <userTask id="modifyApply" name="调整申请内容" activiti:assignee="${applyUserId}" activiti:formKey="chapter6/leave-formkey/modify-apply.form"></userTask>  
13 - <exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway>  
14 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="deptLeaderVerify"></sequenceFlow>  
15 - <sequenceFlow id="flow2" sourceRef="deptLeaderVerify" targetRef="exclusivegateway1"></sequenceFlow>  
16 - <sequenceFlow id="flow3" name="同意" sourceRef="exclusivegateway1" targetRef="hrVerify">  
17 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderApproved == 'true'}]]></conditionExpression>  
18 - </sequenceFlow>  
19 - <sequenceFlow id="flow4" sourceRef="hrVerify" targetRef="exclusivegateway2"></sequenceFlow>  
20 - <sequenceFlow id="flow5" name="同意" sourceRef="exclusivegateway2" targetRef="reportBack">  
21 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrApproved == 'true'}]]></conditionExpression>  
22 - </sequenceFlow>  
23 - <sequenceFlow id="flow6" sourceRef="reportBack" targetRef="endevent1">  
24 - <extensionElements>  
25 - <activiti:executionListener event="take" expression="${execution.setVariable('result', 'ok')}"></activiti:executionListener>  
26 - </extensionElements>  
27 - </sequenceFlow>  
28 - <sequenceFlow id="flow7" name="不同意" sourceRef="exclusivegateway2" targetRef="modifyApply">  
29 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrApproved == 'false'}]]></conditionExpression>  
30 - </sequenceFlow>  
31 - <sequenceFlow id="flow8" name="不同意" sourceRef="exclusivegateway1" targetRef="modifyApply">  
32 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderApproved == 'true'}]]></conditionExpression>  
33 - </sequenceFlow>  
34 - <sequenceFlow id="flow9" sourceRef="modifyApply" targetRef="exclusivegateway3"></sequenceFlow>  
35 - <sequenceFlow id="flow10" name="调整后继续申请" sourceRef="exclusivegateway3" targetRef="deptLeaderVerify">  
36 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'true'}]]></conditionExpression>  
37 - </sequenceFlow>  
38 - <sequenceFlow id="flow11" name="取消申请,并设置取消标志" sourceRef="exclusivegateway3" targetRef="endevent1">  
39 - <extensionElements>  
40 - <activiti:executionListener event="take" expression="${execution.setVariable('result', 'canceled')}"></activiti:executionListener>  
41 - </extensionElements>  
42 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'false'}]]></conditionExpression>  
43 - </sequenceFlow>  
44 - <textAnnotation id="textannotation1" textFormat="text/plain">  
45 - <text>请求被驳回后员工可以选择继续申请,或者取消本次申请</text>  
46 - </textAnnotation>  
47 - <association id="association1" sourceRef="modifyApply" targetRef="textannotation1"></association>  
48 - </process>  
49 - <bpmndi:BPMNDiagram id="BPMNDiagram_leave-formkey">  
50 - <bpmndi:BPMNPlane bpmnElement="leave-formkey" id="BPMNPlane_leave-formkey">  
51 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
52 - <omgdc:Bounds height="35.0" width="35.0" x="10.0" y="50.0"></omgdc:Bounds>  
53 - </bpmndi:BPMNShape>  
54 - <bpmndi:BPMNShape bpmnElement="deptLeaderVerify" id="BPMNShape_deptLeaderVerify">  
55 - <omgdc:Bounds height="55.0" width="105.0" x="90.0" y="40.0"></omgdc:Bounds>  
56 - </bpmndi:BPMNShape>  
57 - <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1">  
58 - <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="47.0"></omgdc:Bounds>  
59 - </bpmndi:BPMNShape>  
60 - <bpmndi:BPMNShape bpmnElement="hrVerify" id="BPMNShape_hrVerify">  
61 - <omgdc:Bounds height="55.0" width="105.0" x="310.0" y="40.0"></omgdc:Bounds>  
62 - </bpmndi:BPMNShape>  
63 - <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">  
64 - <omgdc:Bounds height="40.0" width="40.0" x="470.0" y="47.0"></omgdc:Bounds>  
65 - </bpmndi:BPMNShape>  
66 - <bpmndi:BPMNShape bpmnElement="reportBack" id="BPMNShape_reportBack">  
67 - <omgdc:Bounds height="55.0" width="105.0" x="580.0" y="40.0"></omgdc:Bounds>  
68 - </bpmndi:BPMNShape>  
69 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
70 - <omgdc:Bounds height="35.0" width="35.0" x="615.0" y="213.0"></omgdc:Bounds>  
71 - </bpmndi:BPMNShape>  
72 - <bpmndi:BPMNShape bpmnElement="modifyApply" id="BPMNShape_modifyApply">  
73 - <omgdc:Bounds height="55.0" width="105.0" x="198.0" y="120.0"></omgdc:Bounds>  
74 - </bpmndi:BPMNShape>  
75 - <bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="BPMNShape_exclusivegateway3">  
76 - <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="210.0"></omgdc:Bounds>  
77 - </bpmndi:BPMNShape>  
78 - <bpmndi:BPMNShape bpmnElement="textannotation1" id="BPMNShape_textannotation1">  
79 - <omgdc:Bounds height="57.0" width="112.0" x="340.0" y="168.0"></omgdc:Bounds>  
80 - </bpmndi:BPMNShape>  
81 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
82 - <omgdi:waypoint x="45.0" y="67.0"></omgdi:waypoint>  
83 - <omgdi:waypoint x="90.0" y="67.0"></omgdi:waypoint>  
84 - </bpmndi:BPMNEdge>  
85 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
86 - <omgdi:waypoint x="195.0" y="67.0"></omgdi:waypoint>  
87 - <omgdi:waypoint x="230.0" y="67.0"></omgdi:waypoint>  
88 - </bpmndi:BPMNEdge>  
89 - <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">  
90 - <omgdi:waypoint x="270.0" y="67.0"></omgdi:waypoint>  
91 - <omgdi:waypoint x="310.0" y="67.0"></omgdi:waypoint>  
92 - <bpmndi:BPMNLabel>  
93 - <omgdc:Bounds height="11.0" width="22.0" x="269.0" y="50.0"></omgdc:Bounds>  
94 - </bpmndi:BPMNLabel>  
95 - </bpmndi:BPMNEdge>  
96 - <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">  
97 - <omgdi:waypoint x="415.0" y="67.0"></omgdi:waypoint>  
98 - <omgdi:waypoint x="470.0" y="67.0"></omgdi:waypoint>  
99 - </bpmndi:BPMNEdge>  
100 - <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">  
101 - <omgdi:waypoint x="510.0" y="67.0"></omgdi:waypoint>  
102 - <omgdi:waypoint x="580.0" y="67.0"></omgdi:waypoint>  
103 - <bpmndi:BPMNLabel>  
104 - <omgdc:Bounds height="11.0" width="22.0" x="529.0" y="50.0"></omgdc:Bounds>  
105 - </bpmndi:BPMNLabel>  
106 - </bpmndi:BPMNEdge>  
107 - <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">  
108 - <omgdi:waypoint x="632.0" y="95.0"></omgdi:waypoint>  
109 - <omgdi:waypoint x="632.0" y="213.0"></omgdi:waypoint>  
110 - </bpmndi:BPMNEdge>  
111 - <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7">  
112 - <omgdi:waypoint x="490.0" y="87.0"></omgdi:waypoint>  
113 - <omgdi:waypoint x="490.0" y="147.0"></omgdi:waypoint>  
114 - <omgdi:waypoint x="303.0" y="147.0"></omgdi:waypoint>  
115 - <bpmndi:BPMNLabel>  
116 - <omgdc:Bounds height="11.0" width="33.0" x="438.0" y="119.0"></omgdc:Bounds>  
117 - </bpmndi:BPMNLabel>  
118 - </bpmndi:BPMNEdge>  
119 - <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">  
120 - <omgdi:waypoint x="250.0" y="87.0"></omgdi:waypoint>  
121 - <omgdi:waypoint x="250.0" y="120.0"></omgdi:waypoint>  
122 - <bpmndi:BPMNLabel>  
123 - <omgdc:Bounds height="11.0" width="33.0" x="260.0" y="87.0"></omgdc:Bounds>  
124 - </bpmndi:BPMNLabel>  
125 - </bpmndi:BPMNEdge>  
126 - <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">  
127 - <omgdi:waypoint x="250.0" y="175.0"></omgdi:waypoint>  
128 - <omgdi:waypoint x="250.0" y="210.0"></omgdi:waypoint>  
129 - </bpmndi:BPMNEdge>  
130 - <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">  
131 - <omgdi:waypoint x="230.0" y="230.0"></omgdi:waypoint>  
132 - <omgdi:waypoint x="142.0" y="230.0"></omgdi:waypoint>  
133 - <omgdi:waypoint x="142.0" y="95.0"></omgdi:waypoint>  
134 - <bpmndi:BPMNLabel>  
135 - <omgdc:Bounds height="11.0" width="77.0" x="159.0" y="210.0"></omgdc:Bounds>  
136 - </bpmndi:BPMNLabel>  
137 - </bpmndi:BPMNEdge>  
138 - <bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">  
139 - <omgdi:waypoint x="270.0" y="230.0"></omgdi:waypoint>  
140 - <omgdi:waypoint x="615.0" y="230.0"></omgdi:waypoint>  
141 - <bpmndi:BPMNLabel>  
142 - <omgdc:Bounds height="33.0" width="100.0" x="58.0" y="-37.0"></omgdc:Bounds>  
143 - </bpmndi:BPMNLabel>  
144 - </bpmndi:BPMNEdge>  
145 - <bpmndi:BPMNEdge bpmnElement="association1" id="BPMNEdge_association1">  
146 - <omgdi:waypoint x="303.0" y="147.0"></omgdi:waypoint>  
147 - <omgdi:waypoint x="396.0" y="168.0"></omgdi:waypoint>  
148 - </bpmndi:BPMNEdge>  
149 - </bpmndi:BPMNPlane>  
150 - </bpmndi:BPMNDiagram>  
151 -</definitions>  
152 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/leave-formkey.png deleted

27.4 KB

yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/leave-formkey.zip deleted
No preview for this file type
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/leave-start.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">开始时间:</label>  
3 - <div class="controls">  
4 - <input type="text" id="startDate" name="startDate" class="datepicker" data-date-format="yyyy-mm-dd" required />  
5 - </div>  
6 -</div>  
7 -<div class="control-group">  
8 - <label class="control-label" for="endDate">结束时间:</label>  
9 - <div class="controls">  
10 - <input type="text" id="endDate" name="endDate" class="datepicker" data-date-format="yyyy-mm-dd" required />  
11 - </div>  
12 -</div>  
13 -<div class="control-group">  
14 - <label class="control-label" for="reason">请假原因:</label>  
15 - <div class="controls">  
16 - <textarea id="reason" name="reason" required></textarea>  
17 - </div>  
18 -</div>  
19 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/modify-apply.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">开始时间:</label>  
3 - <div class="controls">  
4 - <input type="text" id="startDate" name="startDate" value="${startDate}" class="datepicker" data-date-format="yyyy-mm-dd" required />  
5 - </div>  
6 -</div>  
7 -<div class="control-group">  
8 - <label class="control-label" for="endDate">结束时间:</label>  
9 - <div class="controls">  
10 - <input type="text" id="endDate" name="endDate" value="${endDate}" class="datepicker" data-date-format="yyyy-mm-dd" required />  
11 - </div>  
12 -</div>  
13 -<div class="control-group">  
14 - <label class="control-label" for="reason">请假原因:</label>  
15 - <div class="controls">  
16 - <textarea id="reason" name="reason" required>${reason}</textarea>  
17 - </div>  
18 -</div>  
19 -<div class="control-group">  
20 - <label class="control-label" for="reason">是否继续申请:</label>  
21 - <div class="controls">  
22 - <select id="reApply" name="reApply">  
23 - <option value='true'>重新申请</option>  
24 - <option value='false'>结束流程</option>  
25 - </select>  
26 - </div>  
27 -</div>  
28 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-formkey/report-back.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">申请人:</label>  
3 - <div class="controls">${applyUserId}</div>  
4 -</div>  
5 -<div class="control-group">  
6 - <label class="control-label" for="startDate">开始时间:</label>  
7 - <div class="controls">  
8 - <input type="text" id="startDate" name="startDate" value="${startDate}" readonly />  
9 - </div>  
10 -</div>  
11 -<div class="control-group">  
12 - <label class="control-label" for="endDate">结束时间:</label>  
13 - <div class="controls">  
14 - <input type="text" id="endDate" name="endDate" value="${endDate}" readonly />  
15 - </div>  
16 -</div>  
17 -<div class="control-group">  
18 - <label class="control-label" for="reason">请假原因:</label>  
19 - <div class="controls">  
20 - <textarea id="reason" name="reason" readonly>${reason}</textarea>  
21 - </div>  
22 -</div>  
23 -<div class="control-group">  
24 - <label class="control-label" for="reportBackDate">销假日期:</label>  
25 - <div class="controls">  
26 - <input type="text" id="reportBackDate" name="reportBackDate" class="datepicker" data-date-format="yyyy-mm-dd" required />  
27 - </div>  
28 -</div>  
29 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/approve-deptLeader.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">申请人:</label>  
3 - <div class="controls">${applyUserId}</div>  
4 -</div>  
5 -<div class="control-group">  
6 - <label class="control-label" for="startDate">开始时间:</label>  
7 - <div class="controls">  
8 - <input type="text" id="startDate" name="startDate" value="${startDate}" readonly />  
9 - </div>  
10 -</div>  
11 -<div class="control-group">  
12 - <label class="control-label" for="endDate">结束时间:</label>  
13 - <div class="controls">  
14 - <input type="text" id="endDate" name="endDate" value="${endDate}" readonly />  
15 - </div>  
16 -</div>  
17 -<div class="control-group">  
18 - <label class="control-label" for="reason">请假原因:</label>  
19 - <div class="controls">  
20 - <textarea id="reason" name="reason" readonly>${reason}</textarea>  
21 - </div>  
22 -</div>  
23 -<div class="control-group">  
24 - <label class="control-label" for="deptLeaderApproved">审批意见:</label>  
25 - <div class="controls">  
26 - <select name="deptLeaderApproved" id="deptLeaderApproved">  
27 - <option value="true">同意</option>  
28 - <option value="false">拒绝</option>  
29 - </select>  
30 - </div>  
31 -</div>  
32 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/approve-hr.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">申请人:</label>  
3 - <div class="controls">${applyUserId}</div>  
4 -</div>  
5 -<div class="control-group">  
6 - <label class="control-label" for="startDate">开始时间:</label>  
7 - <div class="controls">  
8 - <input type="text" id="startDate" name="startDate" value="${startDate}" readonly />  
9 - </div>  
10 -</div>  
11 -<div class="control-group">  
12 - <label class="control-label" for="endDate">结束时间:</label>  
13 - <div class="controls">  
14 - <input type="text" id="endDate" name="endDate" value="${endDate}" readonly />  
15 - </div>  
16 -</div>  
17 -<div class="control-group">  
18 - <label class="control-label" for="reason">请假原因:</label>  
19 - <div class="controls">  
20 - <textarea id="reason" name="reason" readonly>${reason}</textarea>  
21 - </div>  
22 -</div>  
23 -<div class="control-group">  
24 - <label class="control-label" for="hrApproved">审批意见:</label>  
25 - <div class="controls">  
26 - <select name="hrApproved" id="hrApproved">  
27 - <option value="true">同意</option>  
28 - <option value="false">拒绝</option>  
29 - </select>  
30 - </div>  
31 -</div>  
32 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/leave-formkey-ext.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<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.kafeitu.me/activiti">  
3 - <process id="conditionTest" name="请假流程-外置表单" isExecutable="true">  
4 - <documentation>《Activiti实战》第6章的例子--外置表单</documentation>  
5 - <extensionElements>  
6 - <activiti:executionListener event="start" delegateExpression="${execution.setVariable('leave', leaveEntityManager.newLeave(execution))}"></activiti:executionListener>  
7 - </extensionElements>  
8 - <startEvent id="startevent1" name="Start" activiti:initiator="applyUserId" activiti:formKey="chapter6/leave-timeLimit-money/leave-start.form"></startEvent>  
9 - <userTask id="deptLeaderVerify" name="部门经理审批" activiti:candidateGroups="deptLeader" activiti:formKey="chapter6/leave-timeLimit-money/approve-deptLeader.form">  
10 - <extensionElements>  
11 - <activiti:taskListener event="complete" expression="${leave.setDeptLeaderApproved(deptLeaderApproved)}"></activiti:taskListener>  
12 - </extensionElements>  
13 - </userTask>  
14 - <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>  
15 - <userTask id="hrVerify" name="人事经理审批" activiti:candidateGroups="hr" activiti:formKey="chapter6/leave-timeLimit-money/approve-hr.form"></userTask>  
16 - <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>  
17 - <endEvent id="endevent1" name="End"></endEvent>  
18 - <userTask id="modifyApply" name="调整申请内容" activiti:assignee="${applyUserId}" activiti:formKey="chapter6/leave-timeLimit-money/modify-apply.form"></userTask>  
19 - <exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway>  
20 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="deptLeaderVerify"></sequenceFlow>  
21 - <sequenceFlow id="flow2" sourceRef="deptLeaderVerify" targetRef="exclusivegateway1"></sequenceFlow>  
22 - <sequenceFlow id="flow3" name="同意" sourceRef="exclusivegateway1" targetRef="hrVerify">  
23 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderApproved == 'true'}]]></conditionExpression>  
24 - </sequenceFlow>  
25 - <sequenceFlow id="flow4" sourceRef="hrVerify" targetRef="exclusivegateway2"></sequenceFlow>  
26 - <sequenceFlow id="flow7" name="不同意" sourceRef="exclusivegateway2" targetRef="modifyApply">  
27 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrApproved == 'false'}]]></conditionExpression>  
28 - </sequenceFlow>  
29 - <sequenceFlow id="flow8" name="不同意" sourceRef="exclusivegateway1" targetRef="modifyApply">  
30 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderApproved == 'true'}]]></conditionExpression>  
31 - </sequenceFlow>  
32 - <sequenceFlow id="flow9" sourceRef="modifyApply" targetRef="exclusivegateway3"></sequenceFlow>  
33 - <sequenceFlow id="flow10" name="调整后继续申请" sourceRef="exclusivegateway3" targetRef="deptLeaderVerify">  
34 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'true'}]]></conditionExpression>  
35 - </sequenceFlow>  
36 - <sequenceFlow id="flow11" name="取消申请,并设置取消标志" sourceRef="exclusivegateway3" targetRef="endevent1">  
37 - <extensionElements>  
38 - <activiti:executionListener event="take" expression="${execution.setVariable('result', 'canceled')}"></activiti:executionListener>  
39 - </extensionElements>  
40 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'false'}]]></conditionExpression>  
41 - </sequenceFlow>  
42 - <exclusiveGateway id="exclusivegateway4" name="Exclusive Gateway"></exclusiveGateway>  
43 - <sequenceFlow id="flow12" name="同意" sourceRef="exclusivegateway2" targetRef="exclusivegateway4">  
44 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrApproved == 'true'}]]></conditionExpression>  
45 - </sequenceFlow>  
46 - <userTask id="usertask1" name="财务打款" activiti:candidateGroups="caiwu" activiti:dueDate="${moneyDateVariable}">  
47 - <documentation>倒计时30秒</documentation>  
48 - </userTask>  
49 - <sequenceFlow id="flow13" name="金额 &gt;= 1万元" sourceRef="exclusivegateway4" targetRef="usertask1">  
50 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${amountMoney >= 10000}]]></conditionExpression>  
51 - </sequenceFlow>  
52 - <userTask id="usertask2" name="金额不够重新付款"></userTask>  
53 - <sequenceFlow id="flow14" name="金额 &lt; 1万" sourceRef="exclusivegateway4" targetRef="usertask2">  
54 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${amountMoney < 10000}]]></conditionExpression>  
55 - </sequenceFlow>  
56 - <userTask id="usertask3" name="打款完成" activiti:candidateGroups="chuNa"></userTask>  
57 - <sequenceFlow id="flow15" sourceRef="usertask1" targetRef="usertask3"></sequenceFlow>  
58 - <textAnnotation id="textannotation1" textFormat="text/plain">  
59 - <text>请求被驳回后员工可以选择继续申请,或者取消本次申请</text>  
60 - </textAnnotation>  
61 - <association id="association1" sourceRef="modifyApply" targetRef="textannotation1"></association>  
62 - </process>  
63 - <bpmndi:BPMNDiagram id="BPMNDiagram_conditionTest">  
64 - <bpmndi:BPMNPlane bpmnElement="conditionTest" id="BPMNPlane_conditionTest">  
65 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
66 - <omgdc:Bounds height="35.0" width="35.0" x="10.0" y="50.0"></omgdc:Bounds>  
67 - </bpmndi:BPMNShape>  
68 - <bpmndi:BPMNShape bpmnElement="deptLeaderVerify" id="BPMNShape_deptLeaderVerify">  
69 - <omgdc:Bounds height="55.0" width="105.0" x="90.0" y="40.0"></omgdc:Bounds>  
70 - </bpmndi:BPMNShape>  
71 - <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1">  
72 - <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="47.0"></omgdc:Bounds>  
73 - </bpmndi:BPMNShape>  
74 - <bpmndi:BPMNShape bpmnElement="hrVerify" id="BPMNShape_hrVerify">  
75 - <omgdc:Bounds height="55.0" width="105.0" x="310.0" y="40.0"></omgdc:Bounds>  
76 - </bpmndi:BPMNShape>  
77 - <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">  
78 - <omgdc:Bounds height="40.0" width="40.0" x="470.0" y="47.0"></omgdc:Bounds>  
79 - </bpmndi:BPMNShape>  
80 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
81 - <omgdc:Bounds height="35.0" width="35.0" x="615.0" y="213.0"></omgdc:Bounds>  
82 - </bpmndi:BPMNShape>  
83 - <bpmndi:BPMNShape bpmnElement="modifyApply" id="BPMNShape_modifyApply">  
84 - <omgdc:Bounds height="55.0" width="105.0" x="198.0" y="120.0"></omgdc:Bounds>  
85 - </bpmndi:BPMNShape>  
86 - <bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="BPMNShape_exclusivegateway3">  
87 - <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="210.0"></omgdc:Bounds>  
88 - </bpmndi:BPMNShape>  
89 - <bpmndi:BPMNShape bpmnElement="exclusivegateway4" id="BPMNShape_exclusivegateway4">  
90 - <omgdc:Bounds height="40.0" width="40.0" x="600.0" y="47.0"></omgdc:Bounds>  
91 - </bpmndi:BPMNShape>  
92 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
93 - <omgdc:Bounds height="55.0" width="105.0" x="760.0" y="40.0"></omgdc:Bounds>  
94 - </bpmndi:BPMNShape>  
95 - <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">  
96 - <omgdc:Bounds height="55.0" width="105.0" x="568.0" y="140.0"></omgdc:Bounds>  
97 - </bpmndi:BPMNShape>  
98 - <bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3">  
99 - <omgdc:Bounds height="55.0" width="105.0" x="910.0" y="40.0"></omgdc:Bounds>  
100 - </bpmndi:BPMNShape>  
101 - <bpmndi:BPMNShape bpmnElement="textannotation1" id="BPMNShape_textannotation1">  
102 - <omgdc:Bounds height="57.0" width="112.0" x="340.0" y="168.0"></omgdc:Bounds>  
103 - </bpmndi:BPMNShape>  
104 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
105 - <omgdi:waypoint x="45.0" y="67.0"></omgdi:waypoint>  
106 - <omgdi:waypoint x="90.0" y="67.0"></omgdi:waypoint>  
107 - </bpmndi:BPMNEdge>  
108 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
109 - <omgdi:waypoint x="195.0" y="67.0"></omgdi:waypoint>  
110 - <omgdi:waypoint x="230.0" y="67.0"></omgdi:waypoint>  
111 - </bpmndi:BPMNEdge>  
112 - <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">  
113 - <omgdi:waypoint x="270.0" y="67.0"></omgdi:waypoint>  
114 - <omgdi:waypoint x="310.0" y="67.0"></omgdi:waypoint>  
115 - <bpmndi:BPMNLabel>  
116 - <omgdc:Bounds height="42.0" width="22.0" x="269.0" y="50.0"></omgdc:Bounds>  
117 - </bpmndi:BPMNLabel>  
118 - </bpmndi:BPMNEdge>  
119 - <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">  
120 - <omgdi:waypoint x="415.0" y="67.0"></omgdi:waypoint>  
121 - <omgdi:waypoint x="470.0" y="67.0"></omgdi:waypoint>  
122 - </bpmndi:BPMNEdge>  
123 - <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7">  
124 - <omgdi:waypoint x="490.0" y="87.0"></omgdi:waypoint>  
125 - <omgdi:waypoint x="490.0" y="147.0"></omgdi:waypoint>  
126 - <omgdi:waypoint x="303.0" y="147.0"></omgdi:waypoint>  
127 - <bpmndi:BPMNLabel>  
128 - <omgdc:Bounds height="42.0" width="33.0" x="438.0" y="119.0"></omgdc:Bounds>  
129 - </bpmndi:BPMNLabel>  
130 - </bpmndi:BPMNEdge>  
131 - <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">  
132 - <omgdi:waypoint x="250.0" y="87.0"></omgdi:waypoint>  
133 - <omgdi:waypoint x="250.0" y="120.0"></omgdi:waypoint>  
134 - <bpmndi:BPMNLabel>  
135 - <omgdc:Bounds height="42.0" width="33.0" x="260.0" y="87.0"></omgdc:Bounds>  
136 - </bpmndi:BPMNLabel>  
137 - </bpmndi:BPMNEdge>  
138 - <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">  
139 - <omgdi:waypoint x="250.0" y="175.0"></omgdi:waypoint>  
140 - <omgdi:waypoint x="250.0" y="210.0"></omgdi:waypoint>  
141 - </bpmndi:BPMNEdge>  
142 - <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">  
143 - <omgdi:waypoint x="230.0" y="230.0"></omgdi:waypoint>  
144 - <omgdi:waypoint x="142.0" y="230.0"></omgdi:waypoint>  
145 - <omgdi:waypoint x="142.0" y="95.0"></omgdi:waypoint>  
146 - <bpmndi:BPMNLabel>  
147 - <omgdc:Bounds height="42.0" width="77.0" x="159.0" y="210.0"></omgdc:Bounds>  
148 - </bpmndi:BPMNLabel>  
149 - </bpmndi:BPMNEdge>  
150 - <bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">  
151 - <omgdi:waypoint x="270.0" y="230.0"></omgdi:waypoint>  
152 - <omgdi:waypoint x="615.0" y="230.0"></omgdi:waypoint>  
153 - <bpmndi:BPMNLabel>  
154 - <omgdc:Bounds height="42.0" width="100.0" x="58.0" y="-37.0"></omgdc:Bounds>  
155 - </bpmndi:BPMNLabel>  
156 - </bpmndi:BPMNEdge>  
157 - <bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12">  
158 - <omgdi:waypoint x="510.0" y="67.0"></omgdi:waypoint>  
159 - <omgdi:waypoint x="600.0" y="67.0"></omgdi:waypoint>  
160 - <bpmndi:BPMNLabel>  
161 - <omgdc:Bounds height="14.0" width="24.0" x="510.0" y="67.0"></omgdc:Bounds>  
162 - </bpmndi:BPMNLabel>  
163 - </bpmndi:BPMNEdge>  
164 - <bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13">  
165 - <omgdi:waypoint x="640.0" y="67.0"></omgdi:waypoint>  
166 - <omgdi:waypoint x="760.0" y="67.0"></omgdi:waypoint>  
167 - <bpmndi:BPMNLabel>  
168 - <omgdc:Bounds height="14.0" width="72.0" x="640.0" y="67.0"></omgdc:Bounds>  
169 - </bpmndi:BPMNLabel>  
170 - </bpmndi:BPMNEdge>  
171 - <bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14">  
172 - <omgdi:waypoint x="620.0" y="87.0"></omgdi:waypoint>  
173 - <omgdi:waypoint x="620.0" y="140.0"></omgdi:waypoint>  
174 - <bpmndi:BPMNLabel>  
175 - <omgdc:Bounds height="14.0" width="54.0" x="620.0" y="87.0"></omgdc:Bounds>  
176 - </bpmndi:BPMNLabel>  
177 - </bpmndi:BPMNEdge>  
178 - <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">  
179 - <omgdi:waypoint x="865.0" y="67.0"></omgdi:waypoint>  
180 - <omgdi:waypoint x="910.0" y="67.0"></omgdi:waypoint>  
181 - </bpmndi:BPMNEdge>  
182 - <bpmndi:BPMNEdge bpmnElement="association1" id="BPMNEdge_association1">  
183 - <omgdi:waypoint x="303.0" y="147.0"></omgdi:waypoint>  
184 - <omgdi:waypoint x="396.0" y="168.0"></omgdi:waypoint>  
185 - </bpmndi:BPMNEdge>  
186 - </bpmndi:BPMNPlane>  
187 - </bpmndi:BPMNDiagram>  
188 -</definitions>  
189 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/leave-formkey-ext.png deleted

17.3 KB

yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/leave-start.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">开始时间:</label>  
3 - <div class="controls">  
4 - <input type="text" id="startDate" name="startDate" class="datepicker" data-date-format="yyyy-mm-dd" required />  
5 - </div>  
6 -</div>  
7 -<div class="control-group">  
8 - <label class="control-label" for="endDate">结束时间:</label>  
9 - <div class="controls">  
10 - <input type="text" id="endDate" name="endDate" class="datepicker" data-date-format="yyyy-mm-dd" required />  
11 - </div>  
12 -</div>  
13 -<div class="control-group">  
14 - <label class="control-label" for="reason">请假原因:</label>  
15 - <div class="controls">  
16 - <textarea id="reason" name="reason" required></textarea>  
17 - </div>  
18 -</div>  
19 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/modify-apply.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">开始时间:</label>  
3 - <div class="controls">  
4 - <input type="text" id="startDate" name="startDate" value="${startDate}" class="datepicker" data-date-format="yyyy-mm-dd" required />  
5 - </div>  
6 -</div>  
7 -<div class="control-group">  
8 - <label class="control-label" for="endDate">结束时间:</label>  
9 - <div class="controls">  
10 - <input type="text" id="endDate" name="endDate" value="${endDate}" class="datepicker" data-date-format="yyyy-mm-dd" required />  
11 - </div>  
12 -</div>  
13 -<div class="control-group">  
14 - <label class="control-label" for="reason">请假原因:</label>  
15 - <div class="controls">  
16 - <textarea id="reason" name="reason" required>${reason}</textarea>  
17 - </div>  
18 -</div>  
19 -<div class="control-group">  
20 - <label class="control-label" for="reason">是否继续申请:</label>  
21 - <div class="controls">  
22 - <select id="reApply" name="reApply">  
23 - <option value='true'>重新申请</option>  
24 - <option value='false'>结束流程</option>  
25 - </select>  
26 - </div>  
27 -</div>  
28 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/chapter6/leave-timeLimit-money/report-back.form deleted
1 -<div class="control-group">  
2 - <label class="control-label" for="startDate">申请人:</label>  
3 - <div class="controls">${applyUserId}</div>  
4 -</div>  
5 -<div class="control-group">  
6 - <label class="control-label" for="startDate">开始时间:</label>  
7 - <div class="controls">  
8 - <input type="text" id="startDate" name="startDate" value="${startDate}" readonly />  
9 - </div>  
10 -</div>  
11 -<div class="control-group">  
12 - <label class="control-label" for="endDate">结束时间:</label>  
13 - <div class="controls">  
14 - <input type="text" id="endDate" name="endDate" value="${endDate}" readonly />  
15 - </div>  
16 -</div>  
17 -<div class="control-group">  
18 - <label class="control-label" for="reason">请假原因:</label>  
19 - <div class="controls">  
20 - <textarea id="reason" name="reason" readonly>${reason}</textarea>  
21 - </div>  
22 -</div>  
23 -<div class="control-group">  
24 - <label class="control-label" for="reportBackDate">销假日期:</label>  
25 - <div class="controls">  
26 - <input type="text" id="reportBackDate" name="reportBackDate" class="datepicker" data-date-format="yyyy-mm-dd" required />  
27 - </div>  
28 -</div>  
29 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/leave-countersign.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
3 - 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"  
4 - xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"  
5 - targetNamespace="http://www.activiti.org/test">  
6 - <process id="leave-countersign" name="请假流程-会签" isExecutable="true">  
7 - <documentation>请假流程演示-会签</documentation>  
8 - <startEvent id="startevent1" name="Start" activiti:initiator="applyUserId">  
9 - <extensionElements>  
10 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
11 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
12 - <activiti:formProperty id="reason" name="请假原因" type="string" required="true"></activiti:formProperty>  
13 - <activiti:formProperty id="users" name="审批参与人" type="users" required="true"></activiti:formProperty>  
14 - <activiti:formProperty id="validScript" type="javascript" default="alert('表单已经加载完毕');"></activiti:formProperty>  
15 - </extensionElements>  
16 - </startEvent>  
17 - <userTask id="countersign" name="[部门/人事]联合会签" activiti:assignee="${user}">  
18 - <extensionElements>  
19 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
20 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
21 - <activiti:formProperty id="reason" name="请假原因" type="string" writable="false"></activiti:formProperty>  
22 - <activiti:formProperty id="approved" name="审批意见" type="enum" required="true">  
23 - <activiti:value id="true" name="同意"></activiti:value>  
24 - <activiti:value id="false" name="拒绝"></activiti:value>  
25 - </activiti:formProperty>  
26 - <activiti:taskListener event="complete" delegateExpression="${leaveCounterSignCompleteListener}"></activiti:taskListener>  
27 - </extensionElements>  
28 - <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="users"  
29 - activiti:elementVariable="user"></multiInstanceLoopCharacteristics>  
30 - </userTask>  
31 - <userTask id="reportBack" name="销假" activiti:assignee="${applyUserId}">  
32 - <extensionElements>  
33 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
34 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" writable="false"></activiti:formProperty>  
35 - <activiti:formProperty id="reason" name="请假原因" type="string" writable="false"></activiti:formProperty>  
36 - <activiti:formProperty id="reportBackDate" name="销假日期" type="date" default="${endDate}" datePattern="yyyy-MM-dd"  
37 - required="true"></activiti:formProperty>  
38 - </extensionElements>  
39 - </userTask>  
40 - <endEvent id="endevent1" name="End"></endEvent>  
41 - <sequenceFlow id="flow2" sourceRef="startevent1" targetRef="countersign">  
42 - <extensionElements>  
43 - <activiti:executionListener event="take" expression="${execution.setVariable('approvedCounter', 0)}"></activiti:executionListener>  
44 - </extensionElements>  
45 - </sequenceFlow>  
46 - <sequenceFlow id="flow8" name="销假" sourceRef="reportBack" targetRef="endevent1">  
47 - <extensionElements>  
48 - <activiti:executionListener event="take" expression="${execution.setVariable('result', 'ok')}"></activiti:executionListener>  
49 - </extensionElements>  
50 - </sequenceFlow>  
51 - <sequenceFlow id="flow13" name="全部通过" sourceRef="exclusivegateway1" targetRef="reportBack">  
52 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approvedCounter == users.size()}]]></conditionExpression>  
53 - </sequenceFlow>  
54 - <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>  
55 - <sequenceFlow id="flow14" sourceRef="countersign" targetRef="exclusivegateway1"></sequenceFlow>  
56 - <userTask id="modifyApply" name="调整申请" activiti:assignee="${applyUserId}">  
57 - <extensionElements>  
58 - <activiti:formProperty id="startDate" name="请假开始日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
59 - <activiti:formProperty id="endDate" name="请假结束日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty>  
60 - <activiti:formProperty id="reason" name="请假原因" type="string" required="true"></activiti:formProperty>  
61 - <activiti:formProperty id="reApply" name="重新申请" type="enum" required="true">  
62 - <activiti:value id="true" name="重新申请"></activiti:value>  
63 - <activiti:value id="false" name="取消申请"></activiti:value>  
64 - </activiti:formProperty>  
65 - </extensionElements>  
66 - </userTask>  
67 - <sequenceFlow id="flow15" name="部分通过" sourceRef="exclusivegateway1" targetRef="modifyApply">  
68 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approvedCounter < users.size()}]]></conditionExpression>  
69 - </sequenceFlow>  
70 - <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway>  
71 - <sequenceFlow id="flow16" sourceRef="modifyApply" targetRef="exclusivegateway2"></sequenceFlow>  
72 - <sequenceFlow id="flow17" sourceRef="exclusivegateway2" targetRef="endevent1">  
73 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'false'}]]></conditionExpression>  
74 - </sequenceFlow>  
75 - <sequenceFlow id="flow18" name="重新申请" sourceRef="exclusivegateway2" targetRef="countersign">  
76 - <extensionElements>  
77 - <activiti:executionListener event="take" expression="${execution.setVariable('approvedCounter', 0)}"></activiti:executionListener>  
78 - </extensionElements>  
79 - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply == 'true'}]]></conditionExpression>  
80 - </sequenceFlow>  
81 - </process>  
82 - <bpmndi:BPMNDiagram id="BPMNDiagram_leave-countersign">  
83 - <bpmndi:BPMNPlane bpmnElement="leave-countersign" id="BPMNPlane_leave-countersign">  
84 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
85 - <omgdc:Bounds height="35.0" width="35.0" x="10.0" y="30.0"></omgdc:Bounds>  
86 - </bpmndi:BPMNShape>  
87 - <bpmndi:BPMNShape bpmnElement="reportBack" id="BPMNShape_reportBack">  
88 - <omgdc:Bounds height="55.0" width="105.0" x="340.0" y="20.0"></omgdc:Bounds>  
89 - </bpmndi:BPMNShape>  
90 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
91 - <omgdc:Bounds height="35.0" width="35.0" x="375.0" y="203.0"></omgdc:Bounds>  
92 - </bpmndi:BPMNShape>  
93 - <bpmndi:BPMNShape bpmnElement="countersign" id="BPMNShape_countersign">  
94 - <omgdc:Bounds height="55.0" width="105.0" x="90.0" y="20.0"></omgdc:Bounds>  
95 - </bpmndi:BPMNShape>  
96 - <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1">  
97 - <omgdc:Bounds height="40.0" width="40.0" x="220.0" y="27.0"></omgdc:Bounds>  
98 - </bpmndi:BPMNShape>  
99 - <bpmndi:BPMNShape bpmnElement="modifyApply" id="BPMNShape_modifyApply">  
100 - <omgdc:Bounds height="55.0" width="105.0" x="188.0" y="110.0"></omgdc:Bounds>  
101 - </bpmndi:BPMNShape>  
102 - <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2">  
103 - <omgdc:Bounds height="40.0" width="40.0" x="220.0" y="200.0"></omgdc:Bounds>  
104 - </bpmndi:BPMNShape>  
105 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
106 - <omgdi:waypoint x="45.0" y="47.0"></omgdi:waypoint>  
107 - <omgdi:waypoint x="90.0" y="47.0"></omgdi:waypoint>  
108 - </bpmndi:BPMNEdge>  
109 - <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">  
110 - <omgdi:waypoint x="392.0" y="75.0"></omgdi:waypoint>  
111 - <omgdi:waypoint x="392.0" y="203.0"></omgdi:waypoint>  
112 - <bpmndi:BPMNLabel>  
113 - <omgdc:Bounds height="11.0" width="100.0" x="-22.0" y="-17.0"></omgdc:Bounds>  
114 - </bpmndi:BPMNLabel>  
115 - </bpmndi:BPMNEdge>  
116 - <bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13">  
117 - <omgdi:waypoint x="260.0" y="47.0"></omgdi:waypoint>  
118 - <omgdi:waypoint x="340.0" y="47.0"></omgdi:waypoint>  
119 - <bpmndi:BPMNLabel>  
120 - <omgdc:Bounds height="11.0" width="100.0" x="-29.0" y="-17.0"></omgdc:Bounds>  
121 - </bpmndi:BPMNLabel>  
122 - </bpmndi:BPMNEdge>  
123 - <bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14">  
124 - <omgdi:waypoint x="195.0" y="47.0"></omgdi:waypoint>  
125 - <omgdi:waypoint x="220.0" y="47.0"></omgdi:waypoint>  
126 - </bpmndi:BPMNEdge>  
127 - <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">  
128 - <omgdi:waypoint x="240.0" y="67.0"></omgdi:waypoint>  
129 - <omgdi:waypoint x="240.0" y="110.0"></omgdi:waypoint>  
130 - <bpmndi:BPMNLabel>  
131 - <omgdc:Bounds height="11.0" width="100.0" x="10.0" y="0.0"></omgdc:Bounds>  
132 - </bpmndi:BPMNLabel>  
133 - </bpmndi:BPMNEdge>  
134 - <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">  
135 - <omgdi:waypoint x="240.0" y="165.0"></omgdi:waypoint>  
136 - <omgdi:waypoint x="240.0" y="200.0"></omgdi:waypoint>  
137 - </bpmndi:BPMNEdge>  
138 - <bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">  
139 - <omgdi:waypoint x="260.0" y="220.0"></omgdi:waypoint>  
140 - <omgdi:waypoint x="375.0" y="220.0"></omgdi:waypoint>  
141 - </bpmndi:BPMNEdge>  
142 - <bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18">  
143 - <omgdi:waypoint x="220.0" y="220.0"></omgdi:waypoint>  
144 - <omgdi:waypoint x="142.0" y="220.0"></omgdi:waypoint>  
145 - <omgdi:waypoint x="142.0" y="75.0"></omgdi:waypoint>  
146 - <bpmndi:BPMNLabel>  
147 - <omgdc:Bounds height="11.0" width="100.0" x="9.0" y="14.0"></omgdc:Bounds>  
148 - </bpmndi:BPMNLabel>  
149 - </bpmndi:BPMNEdge>  
150 - </bpmndi:BPMNPlane>  
151 - </bpmndi:BPMNDiagram>  
152 -</definitions>  
153 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/leave-countersign.png deleted

20 KB

yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceFixedNumbers.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceFixedNumbers" name="testMultiInstanceFixedNumbers" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <serviceTask id="servicetask1" name="Service Task" activiti:expression="${counter + 1}" activiti:resultVariableName="counter">  
6 - <multiInstanceLoopCharacteristics isSequential="false">  
7 - <loopCardinality>${loop}</loopCardinality>  
8 - </multiInstanceLoopCharacteristics>  
9 - </serviceTask>  
10 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow>  
11 - <endEvent id="endevent1" name="End"></endEvent>  
12 - <sequenceFlow id="flow2" sourceRef="receivetask1" targetRef="endevent1"></sequenceFlow>  
13 - <receiveTask id="receivetask1" name="Receive Task"></receiveTask>  
14 - <sequenceFlow id="flow3" sourceRef="servicetask1" targetRef="receivetask1"></sequenceFlow>  
15 - </process>  
16 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceFixedNumbers">  
17 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceFixedNumbers" id="BPMNPlane_testMultiInstanceFixedNumbers">  
18 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
19 - <omgdc:Bounds height="35.0" width="35.0" x="50.0" y="50.0"></omgdc:Bounds>  
20 - </bpmndi:BPMNShape>  
21 - <bpmndi:BPMNShape bpmnElement="servicetask1" id="BPMNShape_servicetask1">  
22 - <omgdc:Bounds height="55.0" width="105.0" x="116.0" y="40.0"></omgdc:Bounds>  
23 - </bpmndi:BPMNShape>  
24 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
25 - <omgdc:Bounds height="35.0" width="35.0" x="410.0" y="50.0"></omgdc:Bounds>  
26 - </bpmndi:BPMNShape>  
27 - <bpmndi:BPMNShape bpmnElement="receivetask1" id="BPMNShape_receivetask1">  
28 - <omgdc:Bounds height="55.0" width="105.0" x="260.0" y="40.0"></omgdc:Bounds>  
29 - </bpmndi:BPMNShape>  
30 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
31 - <omgdi:waypoint x="85.0" y="67.0"></omgdi:waypoint>  
32 - <omgdi:waypoint x="116.0" y="67.0"></omgdi:waypoint>  
33 - </bpmndi:BPMNEdge>  
34 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
35 - <omgdi:waypoint x="365.0" y="67.0"></omgdi:waypoint>  
36 - <omgdi:waypoint x="410.0" y="67.0"></omgdi:waypoint>  
37 - </bpmndi:BPMNEdge>  
38 - <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">  
39 - <omgdi:waypoint x="221.0" y="67.0"></omgdi:waypoint>  
40 - <omgdi:waypoint x="260.0" y="67.0"></omgdi:waypoint>  
41 - </bpmndi:BPMNEdge>  
42 - </bpmndi:BPMNPlane>  
43 - </bpmndi:BPMNDiagram>  
44 -</definitions>  
45 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.exception.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceForUserTask" name="testMultiInstanceForUserTask" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <userTask id="usertask1" name="User Task" activiti:assignee="${user}">  
6 - <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${users}" activiti:elementVariable="user"></multiInstanceLoopCharacteristics>  
7 - </userTask>  
8 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>  
9 - <endEvent id="endevent1" name="End"></endEvent>  
10 - <sequenceFlow id="flow2" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>  
11 - <userTask id="usertask2" name="User Task2"></userTask>  
12 - <sequenceFlow id="flow3" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>  
13 - </process>  
14 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceForUserTask">  
15 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceForUserTask" id="BPMNPlane_testMultiInstanceForUserTask">  
16 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
17 - <omgdc:Bounds height="35.0" width="35.0" x="90.0" y="80.0"></omgdc:Bounds>  
18 - </bpmndi:BPMNShape>  
19 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
20 - <omgdc:Bounds height="55.0" width="105.0" x="170.0" y="70.0"></omgdc:Bounds>  
21 - </bpmndi:BPMNShape>  
22 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
23 - <omgdc:Bounds height="35.0" width="35.0" x="340.0" y="190.0"></omgdc:Bounds>  
24 - </bpmndi:BPMNShape>  
25 - <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">  
26 - <omgdc:Bounds height="55.0" width="105.0" x="170.0" y="180.0"></omgdc:Bounds>  
27 - </bpmndi:BPMNShape>  
28 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
29 - <omgdi:waypoint x="125.0" y="97.0"></omgdi:waypoint>  
30 - <omgdi:waypoint x="170.0" y="97.0"></omgdi:waypoint>  
31 - </bpmndi:BPMNEdge>  
32 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
33 - <omgdi:waypoint x="275.0" y="207.0"></omgdi:waypoint>  
34 - <omgdi:waypoint x="340.0" y="207.0"></omgdi:waypoint>  
35 - </bpmndi:BPMNEdge>  
36 - <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">  
37 - <omgdi:waypoint x="222.0" y="125.0"></omgdi:waypoint>  
38 - <omgdi:waypoint x="222.0" y="180.0"></omgdi:waypoint>  
39 - </bpmndi:BPMNEdge>  
40 - </bpmndi:BPMNPlane>  
41 - </bpmndi:BPMNDiagram>  
42 -</definitions>  
43 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.exception.png deleted

11.5 KB

yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.nosequential.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceForUserTask" name="testMultiInstanceForUserTask" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <userTask id="usertask1" name="User Task">  
6 - <multiInstanceLoopCharacteristics isSequential="false">  
7 - <loopCardinality>3</loopCardinality>  
8 - </multiInstanceLoopCharacteristics>  
9 - </userTask>  
10 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>  
11 - <endEvent id="endevent1" name="End"></endEvent>  
12 - <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>  
13 - </process>  
14 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceForUserTask">  
15 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceForUserTask" id="BPMNPlane_testMultiInstanceForUserTask">  
16 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
17 - <omgdc:Bounds height="35.0" width="35.0" x="90.0" y="80.0"></omgdc:Bounds>  
18 - </bpmndi:BPMNShape>  
19 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
20 - <omgdc:Bounds height="55.0" width="105.0" x="170.0" y="70.0"></omgdc:Bounds>  
21 - </bpmndi:BPMNShape>  
22 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
23 - <omgdc:Bounds height="35.0" width="35.0" x="330.0" y="80.0"></omgdc:Bounds>  
24 - </bpmndi:BPMNShape>  
25 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
26 - <omgdi:waypoint x="125.0" y="97.0"></omgdi:waypoint>  
27 - <omgdi:waypoint x="170.0" y="97.0"></omgdi:waypoint>  
28 - </bpmndi:BPMNEdge>  
29 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
30 - <omgdi:waypoint x="275.0" y="97.0"></omgdi:waypoint>  
31 - <omgdi:waypoint x="330.0" y="97.0"></omgdi:waypoint>  
32 - </bpmndi:BPMNEdge>  
33 - </bpmndi:BPMNPlane>  
34 - </bpmndi:BPMNDiagram>  
35 -</definitions>  
36 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.sequential.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceForUserTask" name="testMultiInstanceForUserTask" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <userTask id="usertask1" name="User Task">  
6 - <multiInstanceLoopCharacteristics isSequential="true">  
7 - <loopCardinality>3</loopCardinality>  
8 - </multiInstanceLoopCharacteristics>  
9 - </userTask>  
10 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>  
11 - <endEvent id="endevent1" name="End"></endEvent>  
12 - <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>  
13 - </process>  
14 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceForUserTask">  
15 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceForUserTask" id="BPMNPlane_testMultiInstanceForUserTask">  
16 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
17 - <omgdc:Bounds height="35.0" width="35.0" x="90.0" y="80.0"></omgdc:Bounds>  
18 - </bpmndi:BPMNShape>  
19 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
20 - <omgdc:Bounds height="55.0" width="105.0" x="170.0" y="70.0"></omgdc:Bounds>  
21 - </bpmndi:BPMNShape>  
22 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
23 - <omgdc:Bounds height="35.0" width="35.0" x="330.0" y="80.0"></omgdc:Bounds>  
24 - </bpmndi:BPMNShape>  
25 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
26 - <omgdi:waypoint x="125.0" y="97.0"></omgdi:waypoint>  
27 - <omgdi:waypoint x="170.0" y="97.0"></omgdi:waypoint>  
28 - </bpmndi:BPMNEdge>  
29 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
30 - <omgdi:waypoint x="275.0" y="97.0"></omgdi:waypoint>  
31 - <omgdi:waypoint x="330.0" y="97.0"></omgdi:waypoint>  
32 - </bpmndi:BPMNEdge>  
33 - </bpmndi:BPMNPlane>  
34 - </bpmndi:BPMNDiagram>  
35 -</definitions>  
36 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.users.nosequential.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceForUserTask" name="testMultiInstanceForUserTask" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <userTask id="usertask1" name="User Task" activiti:assignee="${user}">  
6 - <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${users}" activiti:elementVariable="user"></multiInstanceLoopCharacteristics>  
7 - </userTask>  
8 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>  
9 - <endEvent id="endevent1" name="End"></endEvent>  
10 - <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>  
11 - </process>  
12 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceForUserTask">  
13 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceForUserTask" id="BPMNPlane_testMultiInstanceForUserTask">  
14 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
15 - <omgdc:Bounds height="35.0" width="35.0" x="50.0" y="90.0"></omgdc:Bounds>  
16 - </bpmndi:BPMNShape>  
17 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
18 - <omgdc:Bounds height="55.0" width="105.0" x="130.0" y="80.0"></omgdc:Bounds>  
19 - </bpmndi:BPMNShape>  
20 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
21 - <omgdc:Bounds height="35.0" width="35.0" x="290.0" y="90.0"></omgdc:Bounds>  
22 - </bpmndi:BPMNShape>  
23 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
24 - <omgdi:waypoint x="85.0" y="107.0"></omgdi:waypoint>  
25 - <omgdi:waypoint x="130.0" y="107.0"></omgdi:waypoint>  
26 - </bpmndi:BPMNEdge>  
27 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
28 - <omgdi:waypoint x="235.0" y="107.0"></omgdi:waypoint>  
29 - <omgdi:waypoint x="290.0" y="107.0"></omgdi:waypoint>  
30 - </bpmndi:BPMNEdge>  
31 - </bpmndi:BPMNPlane>  
32 - </bpmndi:BPMNDiagram>  
33 -</definitions>  
34 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.users.sequential.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceForUserTask" name="testMultiInstanceForUserTask" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <userTask id="usertask1" name="User Task" activiti:assignee="${user}">  
6 - <multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${users}" activiti:elementVariable="user"></multiInstanceLoopCharacteristics>  
7 - </userTask>  
8 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>  
9 - <endEvent id="endevent1" name="End"></endEvent>  
10 - <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>  
11 - </process>  
12 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceForUserTask">  
13 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceForUserTask" id="BPMNPlane_testMultiInstanceForUserTask">  
14 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
15 - <omgdc:Bounds height="35.0" width="35.0" x="50.0" y="90.0"></omgdc:Bounds>  
16 - </bpmndi:BPMNShape>  
17 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
18 - <omgdc:Bounds height="55.0" width="105.0" x="130.0" y="80.0"></omgdc:Bounds>  
19 - </bpmndi:BPMNShape>  
20 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
21 - <omgdc:Bounds height="35.0" width="35.0" x="290.0" y="90.0"></omgdc:Bounds>  
22 - </bpmndi:BPMNShape>  
23 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
24 - <omgdi:waypoint x="85.0" y="107.0"></omgdi:waypoint>  
25 - <omgdi:waypoint x="130.0" y="107.0"></omgdi:waypoint>  
26 - </bpmndi:BPMNEdge>  
27 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
28 - <omgdi:waypoint x="235.0" y="107.0"></omgdi:waypoint>  
29 - <omgdi:waypoint x="290.0" y="107.0"></omgdi:waypoint>  
30 - </bpmndi:BPMNEdge>  
31 - </bpmndi:BPMNPlane>  
32 - </bpmndi:BPMNDiagram>  
33 -</definitions>  
34 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.users.sequential.with.complete.conditon.bpmn deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">  
3 - <process id="testMultiInstanceForUserTask" name="testMultiInstanceForUserTask" isExecutable="true">  
4 - <startEvent id="startevent1" name="Start"></startEvent>  
5 - <userTask id="usertask1" name="User Task" activiti:assignee="${user}">  
6 - <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${users}" activiti:elementVariable="user">  
7 - <completionCondition>${nrOfCompletedInstances / nrOfInstances &gt;= rate}</completionCondition>  
8 - </multiInstanceLoopCharacteristics>  
9 - </userTask>  
10 - <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>  
11 - <endEvent id="endevent1" name="End"></endEvent>  
12 - <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>  
13 - </process>  
14 - <bpmndi:BPMNDiagram id="BPMNDiagram_testMultiInstanceForUserTask">  
15 - <bpmndi:BPMNPlane bpmnElement="testMultiInstanceForUserTask" id="BPMNPlane_testMultiInstanceForUserTask">  
16 - <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">  
17 - <omgdc:Bounds height="35.0" width="35.0" x="50.0" y="90.0"></omgdc:Bounds>  
18 - </bpmndi:BPMNShape>  
19 - <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">  
20 - <omgdc:Bounds height="55.0" width="105.0" x="130.0" y="80.0"></omgdc:Bounds>  
21 - </bpmndi:BPMNShape>  
22 - <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">  
23 - <omgdc:Bounds height="35.0" width="35.0" x="290.0" y="90.0"></omgdc:Bounds>  
24 - </bpmndi:BPMNShape>  
25 - <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">  
26 - <omgdi:waypoint x="85.0" y="107.0"></omgdi:waypoint>  
27 - <omgdi:waypoint x="130.0" y="107.0"></omgdi:waypoint>  
28 - </bpmndi:BPMNEdge>  
29 - <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">  
30 - <omgdi:waypoint x="235.0" y="107.0"></omgdi:waypoint>  
31 - <omgdi:waypoint x="290.0" y="107.0"></omgdi:waypoint>  
32 - </bpmndi:BPMNEdge>  
33 - </bpmndi:BPMNPlane>  
34 - </bpmndi:BPMNDiagram>  
35 -</definitions>  
36 \ No newline at end of file 0 \ No newline at end of file
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/diagrams/chapter9/testMultiInstanceForUserTask.users.sequential.with.complete.conditon.png deleted

7.82 KB

yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/flowable.cfg.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
3 - xsi:schemaLocation="http://www.springframework.org/schema/beans  
4 - http://www.springframework.org/schema/beans/spring-beans.xsd">  
5 -  
6 - <bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">  
7 - <!--保存到文件模式-->  
8 - <!--<property name="jdbcUrl" value="jdbc:h2:file:~/activiti-in-action-chapter6;AUTO_SERVER=TRUE" />-->  
9 - <!--内存模式-->  
10 - <property name="jdbcUrl" value="jdbc:h2:mem:activiti-in-action-chapter6;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" />  
11 - <property name="jdbcDriver" value="org.h2.Driver" />  
12 - <property name="jdbcUsername" value="sa" />  
13 - <property name="jdbcPassword" value="" />  
14 -  
15 - <!--HistoryLevel-->  
16 - <property name="history" value="full" />  
17 - <property name="databaseSchemaUpdate" value="true" />  
18 - <property name="flowable5CompatibilityEnabled" value="false" />  
19 -<!-- <property name="jobExecutorActivate" value="false" />-->  
20 - </bean>  
21 -</beans>  
22 \ No newline at end of file 0 \ No newline at end of file