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,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()));