update 优化任务办理人

This commit is contained in:
AprilWind 2024-11-07 12:31:44 +08:00
parent e46d26b54e
commit d4466cec38

View File

@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.dto.DeptDTO;
import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
import org.dromara.common.core.domain.model.TaskAssigneeBody;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.UserService;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.workflow.common.enums.TaskAssigneeEnum;
@ -48,41 +49,61 @@ public class WfTaskAssigneeServiceImpl implements HandlerSelectService {
*/
@Override
public HandlerSelectVo getHandlerSelect(HandlerQuery query) {
// 获取任务办理类型
TaskAssigneeEnum type = TaskAssigneeEnum.fromDesc(query.getHandlerType());
// 转换查询条件为 TaskAssigneeBody
TaskAssigneeBody taskQuery = BeanUtil.toBean(query, TaskAssigneeBody.class);
List<DeptDTO> depts = new ArrayList<>();
TaskAssigneeDTO dto = new TaskAssigneeDTO();
if (TaskAssigneeEnum.USER == type) {
// 处理用户相关的业务逻辑
dto = userService.selectUsersByUserList(taskQuery);
depts = userService.selectUsersByDeptList();
} else if (TaskAssigneeEnum.ROLE == type) {
// 处理角色相关的业务逻辑
dto = userService.selectUsersByRoleList(taskQuery);
} else if (TaskAssigneeEnum.DEPT == type) {
// 处理部门相关的业务逻辑
dto = userService.selectUsersByDeptList(taskQuery);
} else if (TaskAssigneeEnum.POST == type) {
// 处理岗位相关的业务逻辑
dto = userService.selectUsersByPostList(taskQuery);
depts = userService.selectUsersByDeptList();
}
// 业务系统机构转成组件内部左侧树列表能够显示的数据
TreeFunDto<DeptDTO> treeFunDto = new TreeFunDto<>(depts)
// 统一查询并构建业务数据
TaskAssigneeDTO dto = fetchTaskAssigneeData(type, taskQuery);
List<DeptDTO> depts = fetchDeptData(type);
return getHandlerSelectVo(buildHandlerData(dto, type), buildDeptTree(depts));
}
/**
* 根据任务办理类型查询对应的数据
*/
private TaskAssigneeDTO fetchTaskAssigneeData(TaskAssigneeEnum type, TaskAssigneeBody taskQuery) {
return switch (type) {
case USER -> userService.selectUsersByUserList(taskQuery);
case ROLE -> userService.selectUsersByRoleList(taskQuery);
case DEPT -> userService.selectUsersByDeptList(taskQuery);
case POST -> userService.selectUsersByPostList(taskQuery);
default -> throw new ServiceException("Unsupported handler type");
};
}
/**
* 根据任务办理类型获取部门数据
*/
private List<DeptDTO> fetchDeptData(TaskAssigneeEnum type) {
if (type == TaskAssigneeEnum.USER || type == TaskAssigneeEnum.POST) {
return userService.selectUsersByDeptList();
}
return new ArrayList<>();
}
/**
* 构建部门树状结构
*/
private TreeFunDto<DeptDTO> buildDeptTree(List<DeptDTO> depts) {
return new TreeFunDto<>(depts)
.setId(dept -> String.valueOf(dept.getDeptId()))
.setName(DeptDTO::getDeptName)
.setParentId(dept -> String.valueOf(dept.getParentId()));
}
// 业务系统数据转成组件内部能够显示的数据, total是业务数据总数用于分页显示
HandlerFunDto<TaskAssigneeDTO.TaskHandler> handlerFunDto = new HandlerFunDto<>(dto.getList(), dto.getTotal())
/**
* 构建任务办理人数据
*/
private HandlerFunDto<TaskAssigneeDTO.TaskHandler> buildHandlerData(TaskAssigneeDTO dto, TaskAssigneeEnum type) {
return new HandlerFunDto<>(dto.getList(), dto.getTotal())
.setStorageId(assignee -> type.getCode() + assignee.getStorageId())
.setHandlerCode(TaskAssigneeDTO.TaskHandler::getHandlerCode)
.setHandlerName(TaskAssigneeDTO.TaskHandler::getHandlerName)
.setGroupName(TaskAssigneeDTO.TaskHandler::getGroupName)
.setCreateTime(assignee -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, assignee.getCreateTime()));
return getHandlerSelectVo(handlerFunDto, treeFunDto);
}
}