Commit 71b86e620783f1b618bd82c00d594506e7e43d93

Authored by Lesan
1 parent 267435c9

feat: 完善UserTask审批签名

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 54 ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人");
55 55 ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在");
56 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 59 // ========== 动态表单模块 1-009-010-000 ==========
59 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 101 @Schema(description = "审批意见", example = "同意")
102 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 18 @NotEmpty(message = "审批意见不能为空")
19 19 private String reason;
20 20  
  21 + @Schema(description = "签名", example = "http://xxx")
  22 + private String sign;
  23 +
21 24 @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED)
22 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 186 return null;
187 187 }
188 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 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 59 */
60 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 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 482 if (instance == null) {
483 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 492 // 情况一:被委派的任务,不调用 complete 去完成任务
487 493 if (DelegationState.PENDING.equals(task.getDelegationState())) {
... ... @@ -496,8 +502,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
496 502 }
497 503  
498 504 // 情况三:审批普通的任务。大多数情况下,都是这样
499   - // 2.1 更新 task 状态、原因
  505 + // 2.1 更新 task 状态、原因、签字
500 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 510 // 2.2 添加评论
502 511 taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(),
503 512 BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason()));
... ...