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 73 <groupId>cn.iocoder.boot</groupId>
74 74 <artifactId>yudao-spring-boot-starter-flowable</artifactId>
75 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 76 </dependencies>
95 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 6 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
7 7 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
8 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 11 import org.junit.jupiter.api.Test;
12 12 import org.mockito.InjectMocks;
13 13 import org.mockito.Mock;
... ... @@ -16,6 +16,7 @@ import java.util.Set;
16 16  
17 17 import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
18 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 20 import static org.junit.jupiter.api.Assertions.assertEquals;
20 21 import static org.mockito.ArgumentMatchers.eq;
21 22 import static org.mockito.Mockito.when;
... ... @@ -35,13 +36,13 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
35 36 @Test
36 37 public void testCalculateTaskCandidateUsers_noDept() {
37 38 // 准备参数
38   - TaskEntity task = buildTaskEntity(1L);
  39 + DelegateExecution execution = mockDelegateExecution(1L);
39 40 // mock 方法(startUser)
40 41 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L));
41 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 47 assertEquals(0, result.size());
47 48 }
... ... @@ -49,7 +50,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
49 50 @Test
50 51 public void testCalculateTaskCandidateUsers_noParentDept() {
51 52 // 准备参数
52   - TaskEntity task = buildTaskEntity(1L);
  53 + DelegateExecution execution = mockDelegateExecution(1L);
53 54 // mock 方法(startUser)
54 55 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L));
55 56 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser);
... ... @@ -58,7 +59,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
58 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 64 assertEquals(asSet(20L), result);
64 65 }
... ... @@ -66,7 +67,7 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
66 67 @Test
67 68 public void testCalculateTaskCandidateUsers_existParentDept() {
68 69 // 准备参数
69   - TaskEntity task = buildTaskEntity(1L);
  70 + DelegateExecution execution = mockDelegateExecution(1L);
70 71 // mock 方法(startUser)
71 72 AdminUserRespDTO startUser = randomPojo(AdminUserRespDTO.class, o -> o.setDeptId(10L));
72 73 when(adminUserApi.getUser(eq(1L))).thenReturn(startUser);
... ... @@ -79,18 +80,21 @@ public class BpmTaskAssignLeaderX2ScriptTest extends BaseMockitoUnitTest {
79 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 85 assertEquals(asSet(200L), result);
85 86 }
86 87  
87 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 9 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum;
10 10 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum;
11 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 13 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
  14 +import cn.iocoder.yudao.module.system.api.dept.PostApi;
13 15 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
  16 +import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
14 17 import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
  18 +import cn.iocoder.yudao.module.system.api.permission.RoleApi;
15 19 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
16 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 22 import org.junit.jupiter.api.Test;
19 23 import org.springframework.boot.test.mock.mockito.MockBean;
20 24 import org.springframework.context.annotation.Import;
... ... @@ -37,7 +41,7 @@ import static org.mockito.Mockito.when;
37 41 *
38 42 * @author 芋道源码
39 43 */
40   -@Import(BpmTaskAssignRuleServiceImpl.class)
  44 +@Import({BpmTaskAssignRuleServiceImpl.class, BpmTaskAssignStartUserScript.class}) // Import 引入 BpmTaskAssignStartUserScript 目的是保证不报错
41 45 public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
42 46  
43 47 @Resource
... ... @@ -51,6 +55,12 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
51 55 private AdminUserApi adminUserApi;
52 56 @MockBean
53 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 65 @Test
56 66 public void testCalculateTaskCandidateUsers_Role() {
... ... @@ -159,7 +169,7 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
159 169 BpmTaskAssignScript script1 = new BpmTaskAssignScript() {
160 170  
161 171 @Override
162   - public Set<Long> calculateTaskCandidateUsers(TaskEntity task) {
  172 + public Set<Long> calculateTaskCandidateUsers(DelegateExecution task) {
163 173 return singleton(11L);
164 174 }
165 175  
... ... @@ -171,7 +181,7 @@ public class BpmTaskAssignRuleServiceImplTest extends BaseDbUnitTest {
171 181 BpmTaskAssignScript script2 = new BpmTaskAssignScript() {
172 182  
173 183 @Override
174   - public Set<Long> calculateTaskCandidateUsers(TaskEntity task) {
  184 + public Set<Long> calculateTaskCandidateUsers(DelegateExecution task) {
175 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 20 init:
21 21 schema-locations: classpath:/sql/create_tables.sql
22 22  
23   -mybatis:
  23 +mybatis-plus:
24 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 0 \ No newline at end of file