Commit 921f99d39d8aa41771d9785174eb71b313a1c97c
1 parent
b13f7142
fix: 方法,变量名词,注释规范
Showing
7 changed files
with
46 additions
and
52 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
| ... | ... | @@ -46,10 +46,10 @@ public interface ErrorCodeConstants { |
| 46 | 46 | ErrorCode TASK_COMPLETE_FAIL_NOT_EXISTS = new ErrorCode(1_009_005_000, "审批任务失败,原因:该任务不处于未审批"); |
| 47 | 47 | ErrorCode TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "审批任务失败,原因:该任务的审批人不是你"); |
| 48 | 48 | ErrorCode TASK_NOT_EXISTS = new ErrorCode(1_009_005_002, "流程任务不存在"); |
| 49 | - ErrorCode TASK_IS_NOT_ACTIVITY = new ErrorCode(1_009_005_003, "当前任务不属于活动状态,不能操作"); | |
| 50 | - ErrorCode TASK_SOURCE_TARGET_ERROR = new ErrorCode(1_009_005_004, " 当前节点相对于目标节点,不属于串行关系,无法回退"); | |
| 49 | + ErrorCode TASK_IS_PENDING = new ErrorCode(1_009_005_003, "当前任务处于挂起状态,不能操作"); | |
| 50 | + ErrorCode TASK_SOURCE_TARGET_ERROR = new ErrorCode(1_009_005_004, "目标节点是在并行网关上或非同一路线上,不可跳转"); | |
| 51 | 51 | ErrorCode TASK_TARGET_NODE_NOT_EXISTS = new ErrorCode(1_009_005_005, " 目标节点不存在"); |
| 52 | - ErrorCode TASK_ROLLBACK_FAIL = new ErrorCode(1_009_005_006, "回退任务失败,选择回退的节点没有需要回滚的任务!请重新选择其他任务节点"); | |
| 52 | + ErrorCode TASK_RETURN_FAIL = new ErrorCode(1_009_005_006, "回退任务失败,选择回退的节点没有需要回滚的任务!请重新选择其他任务节点"); | |
| 53 | 53 | // ========== 流程任务分配规则 1-009-006-000 ========== |
| 54 | 54 | ErrorCode TASK_ASSIGN_RULE_EXISTS = new ErrorCode(1_009_006_000, "流程({}) 的任务({}) 已经存在分配规则"); |
| 55 | 55 | ErrorCode TASK_ASSIGN_RULE_NOT_EXISTS = new ErrorCode(1_009_006_001, "流程任务分配规则不存在"); | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
| ... | ... | @@ -77,16 +77,17 @@ public class BpmTaskController { |
| 77 | 77 | |
| 78 | 78 | @GetMapping("/get-return-list") |
| 79 | 79 | @Operation(summary = "获取所有可回退的节点", description = "用于【流程详情】的【回退】按钮") |
| 80 | - @PreAuthorize("@ss.hasPermission('bpm:task:rollback')") | |
| 81 | - public CommonResult<List<BpmTaskRollbackRespVO>> getReturnList(String taskId) { | |
| 82 | - return success(taskService.findReturnTaskList(taskId)); | |
| 80 | + @Parameter(name = "taskId", description = "当前任务ID", required = true) | |
| 81 | + @PreAuthorize("@ss.hasPermission('bpm:task:return')") | |
| 82 | + public CommonResult<List<BpmTaskSimpleRespVO>> getReturnList(@RequestParam("taskId") String taskId) { | |
| 83 | + return success(taskService.getReturnTaskList(taskId)); | |
| 83 | 84 | } |
| 84 | 85 | |
| 85 | - @PutMapping("/rollback") | |
| 86 | + @PutMapping("/return") | |
| 86 | 87 | @Operation(summary = "回退任务", description = "用于【流程详情】的【回退】按钮") |
| 87 | - @PreAuthorize("@ss.hasPermission('bpm:task:rollback')") | |
| 88 | - public CommonResult<Boolean> getReturnList(@Valid @RequestBody BpmTaskRollbackReqVO reqVO) { | |
| 89 | - taskService.taskReturn(reqVO); | |
| 88 | + @PreAuthorize("@ss.hasPermission('bpm:task:return')") | |
| 89 | + public CommonResult<Boolean> returnTask(@Valid @RequestBody BpmTaskReturnReqVO reqVO) { | |
| 90 | + taskService.returnTask(reqVO); | |
| 90 | 91 | return success(true); |
| 91 | 92 | } |
| 92 | 93 | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRollbackReqVO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.java
| ... | ... | @@ -7,17 +7,17 @@ import javax.validation.constraints.NotEmpty; |
| 7 | 7 | |
| 8 | 8 | @Schema(description = "管理后台 - 回退流程任务的 Request VO") |
| 9 | 9 | @Data |
| 10 | -public class BpmTaskRollbackReqVO { | |
| 10 | +public class BpmTaskReturnReqVO { | |
| 11 | 11 | |
| 12 | 12 | @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 13 | 13 | @NotEmpty(message = "任务编号不能为空") |
| 14 | 14 | private String id; |
| 15 | 15 | |
| 16 | - @Schema(description = "回退到的任务Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 16 | + @Schema(description = "回退到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 17 | 17 | @NotEmpty(message = "回退到的任务Key不能为空") |
| 18 | 18 | private String targetDefinitionKey; |
| 19 | 19 | |
| 20 | - @Schema(description = "回退意见") | |
| 20 | + @Schema(description = "回退意见", example = "") | |
| 21 | 21 | private String reason; |
| 22 | 22 | |
| 23 | 23 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRollbackRespVO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskSimpleRespVO.java
| ... | ... | @@ -8,10 +8,10 @@ import lombok.Data; |
| 8 | 8 | */ |
| 9 | 9 | @Schema(description = "管理后台 - 流程任务的 可回退的节点 Response VO") |
| 10 | 10 | @Data |
| 11 | -public class BpmTaskRollbackRespVO { | |
| 11 | +public class BpmTaskSimpleRespVO { | |
| 12 | 12 | |
| 13 | 13 | @Schema(description = "任务定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "Activity_one") |
| 14 | - private String taskDefinitionKey; | |
| 14 | + private String definitionKey; | |
| 15 | 15 | |
| 16 | 16 | @Schema(description = "任务名词", requiredMode = Schema.RequiredMode.REQUIRED, example = "经理审批") |
| 17 | 17 | private String name; | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
| ... | ... | @@ -6,7 +6,7 @@ import cn.iocoder.yudao.framework.common.util.date.DateUtils; |
| 6 | 6 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 7 | 7 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskDonePageItemRespVO; |
| 8 | 8 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; |
| 9 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRollbackRespVO; | |
| 9 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskSimpleRespVO; | |
| 10 | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskTodoPageItemRespVO; |
| 11 | 11 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 12 | 12 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; |
| ... | ... | @@ -141,9 +141,9 @@ public interface BpmTaskConvert { |
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | @Mapping(source = "taskDefinitionKey", target = "id") |
| 144 | - default List<BpmTaskRollbackRespVO> convertList(List<FlowElement> elementList) { | |
| 145 | - return CollectionUtils.convertList(elementList, element -> new BpmTaskRollbackRespVO() | |
| 144 | + default List<BpmTaskSimpleRespVO> convertList(List<FlowElement> elementList) { | |
| 145 | + return CollectionUtils.convertList(elementList, element -> new BpmTaskSimpleRespVO() | |
| 146 | 146 | .setName(element.getName()) |
| 147 | - .setTaskDefinitionKey(element.getId())); | |
| 147 | + .setDefinitionKey(element.getId())); | |
| 148 | 148 | } |
| 149 | 149 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
| ... | ... | @@ -22,7 +22,6 @@ public interface BpmTaskService { |
| 22 | 22 | * |
| 23 | 23 | * @param userId 用户编号 |
| 24 | 24 | * @param pageReqVO 分页请求 |
| 25 | - * | |
| 26 | 25 | * @return 流程任务分页 |
| 27 | 26 | */ |
| 28 | 27 | PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageReqVO); |
| ... | ... | @@ -32,7 +31,6 @@ public interface BpmTaskService { |
| 32 | 31 | * |
| 33 | 32 | * @param userId 用户编号 |
| 34 | 33 | * @param pageReqVO 分页请求 |
| 35 | - * | |
| 36 | 34 | * @return 流程任务分页 |
| 37 | 35 | */ |
| 38 | 36 | PageResult<BpmTaskDonePageItemRespVO> getDoneTaskPage(Long userId, BpmTaskDonePageReqVO pageReqVO); |
| ... | ... | @@ -41,19 +39,17 @@ public interface BpmTaskService { |
| 41 | 39 | * 获得流程任务 Map |
| 42 | 40 | * |
| 43 | 41 | * @param processInstanceIds 流程实例的编号数组 |
| 44 | - * | |
| 45 | 42 | * @return 流程任务 Map |
| 46 | 43 | */ |
| 47 | 44 | default Map<String, List<Task>> getTaskMapByProcessInstanceIds(List<String> processInstanceIds) { |
| 48 | 45 | return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds), |
| 49 | - Task::getProcessInstanceId); | |
| 46 | + Task::getProcessInstanceId); | |
| 50 | 47 | } |
| 51 | 48 | |
| 52 | 49 | /** |
| 53 | 50 | * 获得流程任务列表 |
| 54 | 51 | * |
| 55 | 52 | * @param processInstanceIds 流程实例的编号数组 |
| 56 | - * | |
| 57 | 53 | * @return 流程任务列表 |
| 58 | 54 | */ |
| 59 | 55 | List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds); |
| ... | ... | @@ -62,7 +58,6 @@ public interface BpmTaskService { |
| 62 | 58 | * 获得指令流程实例的流程任务列表,包括所有状态的 |
| 63 | 59 | * |
| 64 | 60 | * @param processInstanceId 流程实例的编号 |
| 65 | - * | |
| 66 | 61 | * @return 流程任务列表 |
| 67 | 62 | */ |
| 68 | 63 | List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId); |
| ... | ... | @@ -128,16 +123,18 @@ public interface BpmTaskService { |
| 128 | 123 | void updateTaskExtAssign(Task task); |
| 129 | 124 | |
| 130 | 125 | /** |
| 131 | - * 获取当前人物的可回退的流程集合 | |
| 126 | + * 获取当前任务的可回退的流程集合 | |
| 127 | + * | |
| 132 | 128 | * @param taskId 当前的任务ID |
| 133 | 129 | * @return 可以回退的节点列表 |
| 134 | 130 | */ |
| 135 | - List<BpmTaskRollbackRespVO> findReturnTaskList(String taskId); | |
| 131 | + List<BpmTaskSimpleRespVO> getReturnTaskList(String taskId); | |
| 136 | 132 | |
| 137 | 133 | /** |
| 138 | 134 | * 将任务回退到指定的 targetDefinitionKey 位置 |
| 135 | + * | |
| 139 | 136 | * @param reqVO 回退的任务key和当前所在的任务ID |
| 140 | 137 | */ |
| 141 | - void taskReturn(BpmTaskRollbackReqVO reqVO); | |
| 138 | + void returnTask(BpmTaskReturnReqVO reqVO); | |
| 142 | 139 | |
| 143 | 140 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.service.task; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | -import cn.hutool.core.collection.ListUtil; | |
| 5 | 4 | import cn.hutool.core.util.ArrayUtil; |
| 6 | 5 | import cn.hutool.core.util.StrUtil; |
| 7 | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| ... | ... | @@ -22,19 +21,13 @@ import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| 22 | 21 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 23 | 22 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 24 | 23 | import lombok.extern.slf4j.Slf4j; |
| 25 | -import org.flowable.bpmn.constants.BpmnXMLConstants; | |
| 26 | 24 | import org.flowable.bpmn.model.BpmnModel; |
| 27 | 25 | import org.flowable.bpmn.model.FlowElement; |
| 28 | 26 | import org.flowable.bpmn.model.UserTask; |
| 29 | -import org.flowable.common.engine.api.FlowableException; | |
| 30 | -import org.flowable.common.engine.api.FlowableObjectNotFoundException; | |
| 31 | 27 | import org.flowable.engine.HistoryService; |
| 32 | -import org.flowable.engine.RepositoryService; | |
| 33 | 28 | import org.flowable.engine.RuntimeService; |
| 34 | 29 | import org.flowable.engine.TaskService; |
| 35 | -import org.flowable.engine.history.HistoricActivityInstance; | |
| 36 | 30 | import org.flowable.engine.history.HistoricProcessInstance; |
| 37 | -import org.flowable.engine.repository.ProcessDefinition; | |
| 38 | 31 | import org.flowable.engine.runtime.ProcessInstance; |
| 39 | 32 | import org.flowable.task.api.Task; |
| 40 | 33 | import org.flowable.task.api.TaskQuery; |
| ... | ... | @@ -333,9 +326,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 333 | 326 | } |
| 334 | 327 | |
| 335 | 328 | @Override |
| 336 | - public List<BpmTaskRollbackRespVO> findReturnTaskList(String taskId) { | |
| 329 | + public List<BpmTaskSimpleRespVO> getReturnTaskList(String taskId) { | |
| 337 | 330 | // 当前任务 task |
| 338 | - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); | |
| 331 | + Task task = getTask(taskId); | |
| 332 | + if (null == task) { | |
| 333 | + throw exception(TASK_NOT_EXISTS); | |
| 334 | + } | |
| 339 | 335 | // 根据流程定义获取流程模型信息 |
| 340 | 336 | BpmnModel bpmnModel = bpmModelService.getBpmnModelByDefinitionId(task.getProcessDefinitionId()); |
| 341 | 337 | // 查询该任务的前置任务节点的key集合 |
| ... | ... | @@ -348,7 +344,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 348 | 344 | List<FlowElement> elementList = new ArrayList<>(); |
| 349 | 345 | for (String activityId : historyTaksDefinitionKeySet) { |
| 350 | 346 | FlowElement target = ModelUtils.getFlowElementById(bpmnModel, activityId); |
| 351 | - //不支持串行和子流程 | |
| 347 | + //非 串行和子流程则加入返回节点 elementList | |
| 352 | 348 | boolean isSequential = ModelUtils.isSequentialReachable(source, target, new HashSet<>()); |
| 353 | 349 | if (isSequential) { |
| 354 | 350 | elementList.add(target); |
| ... | ... | @@ -378,13 +374,13 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 378 | 374 | |
| 379 | 375 | @Transactional(rollbackFor = Exception.class) |
| 380 | 376 | @Override |
| 381 | - public void taskReturn(BpmTaskRollbackReqVO reqVO) { | |
| 377 | + public void returnTask(BpmTaskReturnReqVO reqVO) { | |
| 382 | 378 | // 当前任务 task |
| 383 | - Task task = validateRollback(reqVO.getId()); | |
| 379 | + Task task = validateReturnTask(reqVO.getId()); | |
| 384 | 380 | // 校验源头和目标节点的关系,并返回目标元素 |
| 385 | - FlowElement targetElement = validateRollbackProcessDefinition(task.getTaskDefinitionKey(), reqVO.getTargetDefinitionKey(), task.getProcessDefinitionId()); | |
| 381 | + FlowElement targetElement = validateReturnProcessDefinition(task.getTaskDefinitionKey(), reqVO.getTargetDefinitionKey(), task.getProcessDefinitionId()); | |
| 386 | 382 | //调用flowable框架的回退逻辑 |
| 387 | - this.handlerRollback(task, targetElement, reqVO); | |
| 383 | + this.handlerReturn(task, targetElement, reqVO); | |
| 388 | 384 | // 更新任务扩展表 |
| 389 | 385 | taskExtMapper.updateByTaskId( |
| 390 | 386 | new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.BACK.getResult()) |
| ... | ... | @@ -397,14 +393,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 397 | 393 | * @param taskId 当前任务ID |
| 398 | 394 | * @return |
| 399 | 395 | */ |
| 400 | - private Task validateRollback(String taskId) { | |
| 396 | + private Task validateReturnTask(String taskId) { | |
| 401 | 397 | // 当前任务 task |
| 402 | - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); | |
| 398 | + Task task = getTask(taskId); | |
| 403 | 399 | if (null == task) { |
| 404 | 400 | throw exception(TASK_NOT_EXISTS); |
| 405 | 401 | } |
| 406 | 402 | if (task.isSuspended()) { |
| 407 | - throw exception(TASK_IS_NOT_ACTIVITY); | |
| 403 | + throw exception(TASK_IS_PENDING); | |
| 408 | 404 | } |
| 409 | 405 | return task; |
| 410 | 406 | } |
| ... | ... | @@ -417,7 +413,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 417 | 413 | * @param processDefinitionId 当前流程定义ID |
| 418 | 414 | * @return 目标元素 |
| 419 | 415 | */ |
| 420 | - private FlowElement validateRollbackProcessDefinition(String sourceKey, String targetKey, String processDefinitionId) { | |
| 416 | + private FlowElement validateReturnProcessDefinition(String sourceKey, String targetKey, String processDefinitionId) { | |
| 421 | 417 | // 获取流程模型信息 |
| 422 | 418 | BpmnModel bpmnModel = bpmModelService.getBpmnModelByDefinitionId(processDefinitionId); |
| 423 | 419 | // 获取当前任务节点元素 |
| ... | ... | @@ -442,24 +438,24 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 442 | 438 | * @param targetElement 需要回退到的目标任务 |
| 443 | 439 | * @param reqVO 前端参数封装 |
| 444 | 440 | */ |
| 445 | - public void handlerRollback(Task task, FlowElement targetElement, BpmTaskRollbackReqVO reqVO) { | |
| 441 | + public void handlerReturn(Task task, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { | |
| 446 | 442 | // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务 |
| 447 | 443 | List<Task> runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); |
| 448 | 444 | List<String> runTaskKeyList = convertList(runTaskList, Task::getTaskDefinitionKey); |
| 449 | 445 | // 通过 targetElement 的出口连线,结合 runTaskList 比对,获取需要撤回的任务 key |
| 450 | - List<UserTask> rollbackUserTaskList = ModelUtils.iteratorFindChildUserTasks(targetElement, runTaskKeyList, null, null); | |
| 446 | + List<UserTask> returnUserTaskList = ModelUtils.iteratorFindChildUserTasks(targetElement, runTaskKeyList, null, null); | |
| 451 | 447 | // 需退回任务 key |
| 452 | - List<String> rollbackTaskDefinitionKeyList = convertList(rollbackUserTaskList, UserTask::getId); | |
| 448 | + List<String> returnTaskDefinitionKeyList = convertList(returnUserTaskList, UserTask::getId); | |
| 453 | 449 | |
| 454 | 450 | // 通过 key 和 runTaskList 中的key对比,拿到任务ID,设置设置回退意见 |
| 455 | 451 | List<String> currentTaskIds = new ArrayList<>(); |
| 456 | - rollbackTaskDefinitionKeyList.forEach(currentId -> runTaskList.forEach(runTask -> { | |
| 452 | + returnTaskDefinitionKeyList.forEach(currentId -> runTaskList.forEach(runTask -> { | |
| 457 | 453 | if (currentId.equals(runTask.getTaskDefinitionKey())) { |
| 458 | 454 | currentTaskIds.add(runTask.getId()); |
| 459 | 455 | } |
| 460 | 456 | })); |
| 461 | 457 | if (CollUtil.isEmpty(currentTaskIds)) { |
| 462 | - throw exception(TASK_ROLLBACK_FAIL); | |
| 458 | + throw exception(TASK_RETURN_FAIL); | |
| 463 | 459 | } |
| 464 | 460 | // 设置回退意见 |
| 465 | 461 | for (String currentTaskId : currentTaskIds) { |
| ... | ... | @@ -468,7 +464,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 468 | 464 | // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetKey 跳转到的节点(1) |
| 469 | 465 | runtimeService.createChangeActivityStateBuilder() |
| 470 | 466 | .processInstanceId(task.getProcessInstanceId()) |
| 471 | - .moveActivityIdsToSingleActivityId(rollbackTaskDefinitionKeyList, reqVO.getTargetDefinitionKey()) | |
| 467 | + .moveActivityIdsToSingleActivityId(returnTaskDefinitionKeyList, reqVO.getTargetDefinitionKey()) | |
| 472 | 468 | .changeState(); |
| 473 | 469 | } |
| 474 | 470 | ... | ... |