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