Commit 71b86e620783f1b618bd82c00d594506e7e43d93
1 parent
267435c9
feat: 完善UserTask审批签名
Showing
7 changed files
with
25 additions
and
2 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
| @@ -54,6 +54,7 @@ public interface ErrorCodeConstants { | @@ -54,6 +54,7 @@ public interface ErrorCodeConstants { | ||
| 54 | ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人"); | 54 | ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人"); |
| 55 | ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在"); | 55 | ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在"); |
| 56 | ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1_009_006_003, "操作失败,原因:找不到任务的审批人!"); | 56 | ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1_009_006_003, "操作失败,原因:找不到任务的审批人!"); |
| 57 | + ErrorCode TASK_SIGNATURE_NOT_EXISTS = new ErrorCode(1_009_005_015, "签名不能为空!"); | ||
| 57 | 58 | ||
| 58 | // ========== 动态表单模块 1-009-010-000 ========== | 59 | // ========== 动态表单模块 1-009-010-000 ========== |
| 59 | ErrorCode FORM_NOT_EXISTS = new ErrorCode(1_009_010_000, "动态表单不存在"); | 60 | ErrorCode FORM_NOT_EXISTS = new ErrorCode(1_009_010_000, "动态表单不存在"); |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmApprovalDetailRespVO.java
| @@ -101,6 +101,9 @@ public class BpmApprovalDetailRespVO { | @@ -101,6 +101,9 @@ public class BpmApprovalDetailRespVO { | ||
| 101 | @Schema(description = "审批意见", example = "同意") | 101 | @Schema(description = "审批意见", example = "同意") |
| 102 | private String reason; | 102 | private String reason; |
| 103 | 103 | ||
| 104 | + @Schema(description = "签名", example = "http://xxx") | ||
| 105 | + private String sign; | ||
| 106 | + | ||
| 104 | } | 107 | } |
| 105 | 108 | ||
| 106 | } | 109 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java
| @@ -18,6 +18,9 @@ public class BpmTaskApproveReqVO { | @@ -18,6 +18,9 @@ public class BpmTaskApproveReqVO { | ||
| 18 | @NotEmpty(message = "审批意见不能为空") | 18 | @NotEmpty(message = "审批意见不能为空") |
| 19 | private String reason; | 19 | private String reason; |
| 20 | 20 | ||
| 21 | + @Schema(description = "签名", example = "http://xxx") | ||
| 22 | + private String sign; | ||
| 23 | + | ||
| 21 | @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED) | 24 | @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED) |
| 22 | private Map<String, Object> variables; | 25 | private Map<String, Object> variables; |
| 23 | 26 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
| @@ -186,7 +186,8 @@ public interface BpmProcessInstanceConvert { | @@ -186,7 +186,8 @@ public interface BpmProcessInstanceConvert { | ||
| 186 | return null; | 186 | return null; |
| 187 | } | 187 | } |
| 188 | return BeanUtils.toBean(task, BpmApprovalDetailRespVO.ActivityNodeTask.class) | 188 | return BeanUtils.toBean(task, BpmApprovalDetailRespVO.ActivityNodeTask.class) |
| 189 | - .setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); | 189 | + .setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)) |
| 190 | + .setSign(FlowableUtils.getTaskSign(task)); | ||
| 190 | } | 191 | } |
| 191 | 192 | ||
| 192 | default Set<Long> parseUserIds(HistoricProcessInstance processInstance, | 193 | default Set<Long> parseUserIds(HistoricProcessInstance processInstance, |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java
| @@ -59,4 +59,6 @@ public class BpmnVariableConstants { | @@ -59,4 +59,6 @@ public class BpmnVariableConstants { | ||
| 59 | */ | 59 | */ |
| 60 | public static final String TASK_VARIABLE_REASON = "TASK_REASON"; | 60 | public static final String TASK_VARIABLE_REASON = "TASK_REASON"; |
| 61 | 61 | ||
| 62 | + public static final String TASK_VARIABLE_SIGN = "TASK_SIGN"; | ||
| 63 | + | ||
| 62 | } | 64 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java
| @@ -213,6 +213,10 @@ public class FlowableUtils { | @@ -213,6 +213,10 @@ public class FlowableUtils { | ||
| 213 | return (String) task.getTaskLocalVariables().get(BpmnVariableConstants.TASK_VARIABLE_REASON); | 213 | return (String) task.getTaskLocalVariables().get(BpmnVariableConstants.TASK_VARIABLE_REASON); |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | + public static String getTaskSign(TaskInfo task) { | ||
| 217 | + return (String) task.getTaskLocalVariables().get(BpmnVariableConstants.TASK_VARIABLE_SIGN); | ||
| 218 | + } | ||
| 219 | + | ||
| 216 | /** | 220 | /** |
| 217 | * 获得任务的表单 | 221 | * 获得任务的表单 |
| 218 | * | 222 | * |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -482,6 +482,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -482,6 +482,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 482 | if (instance == null) { | 482 | if (instance == null) { |
| 483 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); | 483 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); |
| 484 | } | 484 | } |
| 485 | + // 1.3 校验签名 | ||
| 486 | + BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(task.getProcessDefinitionId()); | ||
| 487 | + Boolean signEnable = parseSignEnable(bpmnModel, task.getTaskDefinitionKey()); | ||
| 488 | + if (signEnable && StrUtil.isEmpty(reqVO.getSign())) { | ||
| 489 | + throw exception(TASK_SIGNATURE_NOT_EXISTS); | ||
| 490 | + } | ||
| 485 | 491 | ||
| 486 | // 情况一:被委派的任务,不调用 complete 去完成任务 | 492 | // 情况一:被委派的任务,不调用 complete 去完成任务 |
| 487 | if (DelegationState.PENDING.equals(task.getDelegationState())) { | 493 | if (DelegationState.PENDING.equals(task.getDelegationState())) { |
| @@ -496,8 +502,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -496,8 +502,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 496 | } | 502 | } |
| 497 | 503 | ||
| 498 | // 情况三:审批普通的任务。大多数情况下,都是这样 | 504 | // 情况三:审批普通的任务。大多数情况下,都是这样 |
| 499 | - // 2.1 更新 task 状态、原因 | 505 | + // 2.1 更新 task 状态、原因、签字 |
| 500 | updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVE.getStatus(), reqVO.getReason()); | 506 | updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVE.getStatus(), reqVO.getReason()); |
| 507 | + if (signEnable) { | ||
| 508 | + taskService.setVariableLocal(task.getId(), BpmnVariableConstants.TASK_VARIABLE_SIGN, reqVO.getSign()); | ||
| 509 | + } | ||
| 501 | // 2.2 添加评论 | 510 | // 2.2 添加评论 |
| 502 | taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(), | 511 | taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(), |
| 503 | BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason())); | 512 | BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason())); |