feat: 完善UserTask审批签名

This commit is contained in:
Lesan 2025-01-09 13:49:11 +08:00
parent 267435c90f
commit 71b86e6207
7 changed files with 25 additions and 2 deletions

View File

@ -54,6 +54,7 @@ public interface ErrorCodeConstants {
ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人"); ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人");
ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在"); ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在");
ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1_009_006_003, "操作失败,原因:找不到任务的审批人!"); ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1_009_006_003, "操作失败,原因:找不到任务的审批人!");
ErrorCode TASK_SIGNATURE_NOT_EXISTS = new ErrorCode(1_009_005_015, "签名不能为空!");
// ========== 动态表单模块 1-009-010-000 ========== // ========== 动态表单模块 1-009-010-000 ==========
ErrorCode FORM_NOT_EXISTS = new ErrorCode(1_009_010_000, "动态表单不存在"); ErrorCode FORM_NOT_EXISTS = new ErrorCode(1_009_010_000, "动态表单不存在");

View File

@ -101,6 +101,9 @@ public class BpmApprovalDetailRespVO {
@Schema(description = "审批意见", example = "同意") @Schema(description = "审批意见", example = "同意")
private String reason; private String reason;
@Schema(description = "签名", example = "http://xxx")
private String sign;
} }
} }

View File

@ -18,6 +18,9 @@ public class BpmTaskApproveReqVO {
@NotEmpty(message = "审批意见不能为空") @NotEmpty(message = "审批意见不能为空")
private String reason; private String reason;
@Schema(description = "签名", example = "http://xxx")
private String sign;
@Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED)
private Map<String, Object> variables; private Map<String, Object> variables;

View File

@ -186,7 +186,8 @@ public interface BpmProcessInstanceConvert {
return null; return null;
} }
return BeanUtils.toBean(task, BpmApprovalDetailRespVO.ActivityNodeTask.class) return BeanUtils.toBean(task, BpmApprovalDetailRespVO.ActivityNodeTask.class)
.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); .setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task))
.setSign(FlowableUtils.getTaskSign(task));
} }
default Set<Long> parseUserIds(HistoricProcessInstance processInstance, default Set<Long> parseUserIds(HistoricProcessInstance processInstance,

View File

@ -59,4 +59,6 @@ public class BpmnVariableConstants {
*/ */
public static final String TASK_VARIABLE_REASON = "TASK_REASON"; public static final String TASK_VARIABLE_REASON = "TASK_REASON";
public static final String TASK_VARIABLE_SIGN = "TASK_SIGN";
} }

View File

@ -213,6 +213,10 @@ public class FlowableUtils {
return (String) task.getTaskLocalVariables().get(BpmnVariableConstants.TASK_VARIABLE_REASON); return (String) task.getTaskLocalVariables().get(BpmnVariableConstants.TASK_VARIABLE_REASON);
} }
public static String getTaskSign(TaskInfo task) {
return (String) task.getTaskLocalVariables().get(BpmnVariableConstants.TASK_VARIABLE_SIGN);
}
/** /**
* 获得任务的表单 * 获得任务的表单
* *

View File

@ -482,6 +482,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
if (instance == null) { if (instance == null) {
throw exception(PROCESS_INSTANCE_NOT_EXISTS); throw exception(PROCESS_INSTANCE_NOT_EXISTS);
} }
// 1.3 校验签名
BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(task.getProcessDefinitionId());
Boolean signEnable = parseSignEnable(bpmnModel, task.getTaskDefinitionKey());
if (signEnable && StrUtil.isEmpty(reqVO.getSign())) {
throw exception(TASK_SIGNATURE_NOT_EXISTS);
}
// 情况一被委派的任务不调用 complete 去完成任务 // 情况一被委派的任务不调用 complete 去完成任务
if (DelegationState.PENDING.equals(task.getDelegationState())) { if (DelegationState.PENDING.equals(task.getDelegationState())) {
@ -496,8 +502,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
} }
// 情况三审批普通的任务大多数情况下都是这样 // 情况三审批普通的任务大多数情况下都是这样
// 2.1 更新 task 状态原因 // 2.1 更新 task 状态原因签字
updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVE.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVE.getStatus(), reqVO.getReason());
if (signEnable) {
taskService.setVariableLocal(task.getId(), BpmnVariableConstants.TASK_VARIABLE_SIGN, reqVO.getSign());
}
// 2.2 添加评论 // 2.2 添加评论
taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(), taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(),
BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason())); BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason()));