update 优化任务操作,委派、转办、加签、减签、修改办理人等

This commit is contained in:
AprilWind 2024-12-04 16:20:58 +08:00
parent da4ae65432
commit f3091e8742
7 changed files with 143 additions and 259 deletions

View File

@ -5,8 +5,9 @@ import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
@ -162,71 +163,75 @@ public class FlwTaskController extends BaseController {
}
/**
* 委派任务
* 任务操作
*
* @param bo 参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/delegateTask")
public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody FlowDelegateBo bo) {
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(bo.getUserIdentifierList());
flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.DEPUTE.getStatus());
return toAjax(taskService.depute(bo.getTaskId(), flowParams));
}
/**
* 转办任务
*
* @param bo 参数
* @param bo 参数
* @param taskOperation 操作类型区分委派转办加签减签修改办理人
*/
@Log(title = "任务管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/transferTask")
public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody FlowTransferBo bo) {
@RepeatSubmit
@PostMapping("/{taskOperation}")
public R<Void> taskOperation(@Validated @RequestBody TaskOperationBo bo, @PathVariable String taskOperation) {
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(bo.getUserIdentifierList());
flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.TRANSFER.getStatus());
return toAjax(taskService.transfer(bo.getTaskId(), flowParams));
// 根据操作类型构建 FlowParams
switch (taskOperation) {
case "delegateTask", "transferTask", "addSignature" -> {
ValidatorUtils.validate(bo, AddGroup.class);
flowParams.addHandlers(bo.getUserIdentifiers());
}
case "reductionSignature" -> {
ValidatorUtils.validate(bo, EditGroup.class);
flowParams.reductionHandlers(bo.getAllUserIdentifiers());
}
case "updateAssignee" -> {
ValidatorUtils.validate(bo, AddGroup.class);
flowParams.addHandlers(bo.getUserIdentifiers());
flowParams.cooperateType(CooperateType.APPROVAL.getKey());
flowParams.ignore(false);
flowParams.message("修改任务办理人");
}
default -> {
return R.fail("Invalid operation type: " + taskOperation);
}
}
Long taskId = bo.getTaskId();
// 设置任务状态并执行对应的任务操作
switch (taskOperation) {
//委派任务
case "delegateTask" -> {
flowParams.hisStatus(TaskStatusEnum.DEPUTE.getStatus());
return toAjax(taskService.depute(taskId, flowParams));
}
//转办任务
case "transferTask" -> {
flowParams.hisStatus(TaskStatusEnum.TRANSFER.getStatus());
return toAjax(taskService.transfer(taskId, flowParams));
}
//加签增加办理人
case "addSignature" -> {
flowParams.hisStatus(TaskStatusEnum.SIGN.getStatus());
return toAjax(taskService.addSignature(taskId, flowParams));
}
//减签减少办理人
case "reductionSignature" -> {
flowParams.hisStatus(TaskStatusEnum.SIGN_OFF.getStatus());
return toAjax(taskService.reductionSignature(taskId, flowParams));
}
//修改办理人
case "updateAssignee" -> {
return toAjax(taskService.updateHandler(taskId, flowParams));
}
default -> {
return R.fail("Invalid operation type: " + taskOperation);
}
}
}
/**
* 加签
*
* @param bo 参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/addSignature")
public R<Void> addSignature(@Validated({AddGroup.class}) @RequestBody AddSignatureBo bo) {
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(bo.getUserIdentifierList());
flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.SIGN.getStatus());
return toAjax(taskService.addSignature(bo.getTaskId(), flowParams));
}
/**
* 减签
*
* @param bo 参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/reductionSignature")
public R<Void> reductionSignature(@Validated({AddGroup.class}) @RequestBody ReductionSignatureBo bo) {
FlowParams flowParams = new FlowParams();
flowParams.reductionHandlers(StreamUtils.toList(bo.getUserIds(),u->USER.getCode()+u));
flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.SIGN_OFF.getStatus());
return toAjax(taskService.reductionSignature(bo.getTaskId(), flowParams));
}
/**
* 修改任务办理人
* TODO 待删除的方法用上面那个修改任务办理人
*
* @param taskId 任务id
* @param userId 办理人id

View File

@ -1,54 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
/**
* 加签请求对象
*
* @author may
*/
@Data
public class AddSignatureBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 加签人id
*/
@NotNull(message = "加签id不能为空", groups = {AddGroup.class})
private List<String> userIds;
/**
* 任务id
*/
@NotNull(message = "任务id不能为空", groups = {AddGroup.class})
private Long taskId;
/**
* 意见
*/
private String message;
/**
* 获取包含用户标识符的列表
* <p>
* 该方法将用户代码 `USER.getCode()` 获取 `userIds` 列表中的每个用户ID拼接
* 然后返回一个新的列表其中每个元素都是用户代码与用户ID的拼接结果
*
* @return 返回一个列表其中每个元素是由用户代码和用户ID拼接而成的字符串
*/
public List<String> getUserIdentifierList() {
return StreamUtils.toList(userIds, userId -> USER.getCode() + userId);
}
}

View File

@ -1,54 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
/**
* 委派任务请求对象
*
* @author may
*/
@Data
public class FlowDelegateBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 委派人id
*/
@NotNull(message = "委派人id不能为空", groups = {AddGroup.class})
private String userId;
/**
* 任务id
*/
@NotNull(message = "任务id不能为空", groups = {AddGroup.class})
private Long taskId;
/**
* 意见
*/
private String message;
/**
* 获取包含用户标识符的列表
* <p>
* 该方法将用户的代码 `USER.getCode()` 获取与当前用户的 ID`userId`进行拼接
* 然后返回一个包含该拼接结果的单一元素列表
*
* @return 返回一个列表列表中包含一个字符串元素该元素是由用户代码和用户ID拼接而成
*/
public List<String> getUserIdentifierList() {
return Collections.singletonList(USER.getCode() + userId);
}
}

View File

@ -1,54 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
/**
* 终转办务请求对象
*
* @author may
*/
@Data
public class FlowTransferBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 转办人id
*/
@NotNull(message = "转办人id不能为空", groups = {AddGroup.class})
private String userId;
/**
* 任务id
*/
@NotNull(message = "任务id不能为空", groups = {AddGroup.class})
private Long taskId;
/**
* 意见
*/
private String message;
/**
* 获取包含用户标识符的列表
* <p>
* 该方法将用户的代码 `USER.getCode()` 获取与当前用户的 ID`userId`进行拼接
* 然后返回一个包含该拼接结果的单一元素列表
*
* @return 返回一个列表列表中包含一个字符串元素该元素是由用户代码和用户ID拼接而成
*/
public List<String> getUserIdentifierList() {
return Collections.singletonList(USER.getCode() + userId);
}
}

View File

@ -1,38 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 减签请求对象
*
* @author may
*/
@Data
public class ReductionSignatureBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 减签人id
*/
@NotNull(message = "减签id不能为空", groups = {AddGroup.class})
private List<String> userIds;
/**
* 任务id
*/
@NotNull(message = "任务id不能为空", groups = {AddGroup.class})
private Long taskId;
/**
* 意见
*/
private String message;
}

View File

@ -0,0 +1,80 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
/**
* 任务操作业务对象用于描述任务委派转办加签等操作的必要参数
* 包含了用户ID任务ID任务相关的消息以及加签/减签的用户ID
*
* @author AprilWind
*/
@Data
public class TaskOperationBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 委派/转办人的用户ID必填准对委派/转办人/修改办理人操作
*/
@NotNull(message = "委派/转办人id不能为空", groups = {AddGroup.class})
private String userId;
/**
* 加签/减签人的用户ID列表必填针对加签/减签操作
*/
@NotNull(message = "加签/减签id不能为空", groups = {EditGroup.class})
private List<String> userIds;
/**
* 任务ID必填
*/
@NotNull(message = "任务id不能为空")
private Long taskId;
/**
* 意见或备注信息可选
*/
private String message;
/**
* 获取委派或转办的用户标识符列表
* <p>
* 该方法将用户的代码 `USER.getCode()` 获取与当前用户的 ID`userId`进行拼接返回一个包含拼接结果的单一元素列表
*
* @return 返回一个包含用户标识符的单一元素列表
*/
public List<String> getUserIdentifiers() {
return Optional.ofNullable(userId)
.map(id -> Collections.singletonList(USER.getCode() + id))
.orElse(Collections.emptyList());
}
/**
* 获取加签或减签的用户标识符列表
* <p>
* 该方法将用户代码 `USER.getCode()` 获取 `userIds` 列表中的每个用户ID拼接
* 返回一个新的列表每个元素都是用户代码与用户ID的拼接结果
*
* @return 返回一个包含所有用户标识符的列表
*/
public List<String> getAllUserIdentifiers() {
return Optional.ofNullable(userIds)
.filter(ids -> !ids.isEmpty())
.map(ids -> StreamUtils.toList(ids, id -> USER.getCode() + id))
.orElse(Collections.emptyList());
}
}

View File

@ -50,5 +50,4 @@ public class WfCategoryBo extends BaseEntity {
*/
private Long sortNum;
}