| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | |
| | | private MesMdUnitMeasureService unitMeasureService; |
| | | @Resource |
| | | private MesProRouteProcessService routeProcessService; |
| | | @Resource |
| | | private MesProWorkOrderProcessService workOrderProcessService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | |
| | |
| | | .remark("").build() |
| | | ); |
| | | // 输出 |
| | | ExcelUtils.write(response, "生产报工导入模板.xls", "生产报工列表", MesProFeedbackImportExcelVO.class, list); |
| | | ExcelUtils.writeTemplate(response, "生产报工导入模板.xls", "生产报工列表", MesProFeedbackImportExcelVO.class, list); |
| | | } |
| | | |
| | | @PostMapping("/import") |
| | |
| | | // 1.6 工序 |
| | | Map<Long, MesProProcessDO> processMap = processService.getProcessMap( |
| | | new ArrayList<>(convertSet(list, MesProFeedbackDO::getProcessId))); |
| | | // 1.7 工序的 checkFlag:批量查询后直接构建 routeId -> processId -> checkFlag 的双层 Map |
| | | // 1.7 工序的 checkFlag:工单工序快照优先,工艺路线兜底 |
| | | Set<Long> workOrderIds = convertSet(list, MesProFeedbackDO::getWorkOrderId); |
| | | Map<Long, Map<Long, Boolean>> workOrderProcessCheckFlagMap = new HashMap<>(); |
| | | if (CollUtil.isNotEmpty(workOrderIds)) { |
| | | List<MesProWorkOrderProcessDO> allWorkOrderProcesses = |
| | | workOrderProcessService.getWorkOrderProcessListByWorkOrderIds(workOrderIds); |
| | | for (MesProWorkOrderProcessDO wp : allWorkOrderProcesses) { |
| | | workOrderProcessCheckFlagMap |
| | | .computeIfAbsent(wp.getWorkOrderId(), k -> new HashMap<>()) |
| | | .put(wp.getProcessId(), Boolean.TRUE.equals(wp.getCheckFlag())); |
| | | } |
| | | } |
| | | List<MesProRouteProcessDO> allRouteProcesses = routeProcessService.getRouteProcessListByRouteIds(routeIds); |
| | | Map<Long, Map<Long, Boolean>> routeProcessCheckFlagMap = new HashMap<>(); |
| | | for (MesProRouteProcessDO rp : allRouteProcesses) { |
| | |
| | | // 工序 |
| | | findAndThen(processMap, vo.getProcessId(), process -> |
| | | vo.setProcessCode(process.getCode()).setProcessName(process.getName())); |
| | | // checkFlag |
| | | findAndThen(routeProcessCheckFlagMap, vo.getRouteId(), processCheckMap -> |
| | | findAndThen(processCheckMap, vo.getProcessId(), vo::setCheckFlag)); |
| | | // checkFlag:工单工序快照优先,工艺路线兜底 |
| | | Boolean checkFlag = null; |
| | | Map<Long, Boolean> workOrderCheckFlags = workOrderProcessCheckFlagMap.get(vo.getWorkOrderId()); |
| | | if (workOrderCheckFlags != null) { |
| | | checkFlag = workOrderCheckFlags.get(vo.getProcessId()); |
| | | } |
| | | if (checkFlag == null) { |
| | | Map<Long, Boolean> routeCheckFlags = routeProcessCheckFlagMap.get(vo.getRouteId()); |
| | | checkFlag = routeCheckFlags != null ? routeCheckFlags.get(vo.getProcessId()) : null; |
| | | } |
| | | if (checkFlag != null) { |
| | | vo.setCheckFlag(checkFlag); |
| | | } |
| | | // 工单 |
| | | findAndThen(workOrderMap, vo.getWorkOrderId(), wo -> |
| | | vo.setWorkOrderCode(wo.getCode()).setWorkOrderName(wo.getName())); |