gaoluyang
3 天以前 6fa82a1ad7c3ae061ef499f0d0806a16846e122b
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/task/MesProTaskController.java
@@ -55,6 +55,8 @@
import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskPauseRecordRespVO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.hrm.api.employee.HrmEmployeeApi;
import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleRespDTO;
import java.io.IOException;
import java.math.BigDecimal;
@@ -79,8 +81,16 @@
    @Operation(summary = "获得各工作站未完成任务数量")
    public CommonResult<List<cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProWorkstationPendingCountVO>> getPendingWorkstationCounts() {
        Long userId = cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId();
        Long assigneeId = userId != null && !permissionApi.hasAnyRoles(userId,
                cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum.SUPER_ADMIN.getCode()) ? userId : null;
        // 报工人以「员工管理」中的员工为准:登录账号先映射到员工,再按员工编号过滤
        Long assigneeId = null;
        if (userId != null && !permissionApi.hasAnyRoles(userId,
                cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum.SUPER_ADMIN.getCode())) {
            HrmEmployeeSimpleRespDTO employee = hrmEmployeeApi.getEmployeeByUserId(userId);
            if (employee == null) {
                return success(Collections.emptyList());
            }
            assigneeId = employee.getId();
        }
        return success(pendingCountMapper.selectPendingCounts(assigneeId,
                cn.iocoder.yudao.module.mes.enums.pro.MesProTaskStatusEnum.PREPARE.getStatus(),
                cn.iocoder.yudao.module.mes.enums.pro.MesProTaskStatusEnum.PRODUCING.getStatus(),
@@ -129,6 +139,8 @@
    private MesProTaskPauseRecordMapper pauseRecordMapper;
    @Resource
    private AdminUserApi adminUserApi;
    @Resource
    private HrmEmployeeApi hrmEmployeeApi;
    @Resource
    private cn.iocoder.yudao.module.system.api.permission.PermissionApi permissionApi;
@@ -224,9 +236,13 @@
    @Operation(summary = "获得待报工台账分页", description = "已排产且仍有待报工数量的任务(状态=进行中)")
    public CommonResult<PageResult<MesProTaskRespVO>> getPendingFeedbackPage(@Valid MesProTaskPageReqVO pageReqVO) {
        Long loginUserId = cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId();
        // 如果当前登录人不是超级管理员,则仅查询分配给自己的生产工单
        // 如果当前登录人不是超级管理员,则仅查询分配给自己的生产工单(登录账号先映射到员工)
        if (loginUserId != null && !permissionApi.hasAnyRoles(loginUserId, cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum.SUPER_ADMIN.getCode())) {
            pageReqVO.setAssigneeUserId(loginUserId);
            HrmEmployeeSimpleRespDTO employee = hrmEmployeeApi.getEmployeeByUserId(loginUserId);
            if (employee == null) {
                return success(PageResult.empty());
            }
            pageReqVO.setAssigneeUserId(employee.getId());
        }
        PageResult<MesProTaskDO> pageResult = taskService.getPendingFeedbackPage(pageReqVO);
        List<MesProTaskRespVO> respVOList = buildTaskRespVOList(pageResult.getList());
@@ -397,7 +413,8 @@
        Set<Long> allAssigneeUserIds = new HashSet<>();
        assigneeMap.values().forEach(assignees -> 
            assignees.forEach(assignee -> allAssigneeUserIds.add(assignee.getUserId())));
        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(allAssigneeUserIds);
        // 报工人存的是员工编号,名称从「员工管理」取
        Map<Long, HrmEmployeeSimpleRespDTO> employeeMap = hrmEmployeeApi.getEmployeeMap(allAssigneeUserIds);
        // 拼接 VO
        return convertList(list, task -> {
@@ -436,10 +453,10 @@
                List<Long> assigneeUserIds = convertList(assignees, cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskAssigneeDO::getUserId);
                vo.setAssigneeUserIds(assigneeUserIds);
                List<String> assigneeUserNames = new ArrayList<>();
                for (Long userId : assigneeUserIds) {
                    AdminUserRespDTO user = userMap.get(userId);
                    if (user != null && user.getNickname() != null) {
                        assigneeUserNames.add(user.getNickname());
                for (Long employeeId : assigneeUserIds) {
                    HrmEmployeeSimpleRespDTO employee = employeeMap.get(employeeId);
                    if (employee != null && employee.getName() != null) {
                        assigneeUserNames.add(employee.getName());
                    }
                }
                vo.setAssigneeUserNames(assigneeUserNames);