| | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | |
| | | if (itemId == null) { |
| | | MesProRouteProcessDO routeProcess = routeProcessService |
| | | .getRouteProcessByRouteIdAndProcessId(createReqVO.getRouteId(), createReqVO.getProcessId()); |
| | | if (routeProcess != null && routeProcess.getOutputItemId() != null) { |
| | | itemId = Long.valueOf(routeProcess.getOutputItemId().split(",")[0].trim()); |
| | | } else { |
| | | itemId = workOrder.getProductId(); |
| | | } |
| | | itemId = resolveTaskItemId(routeProcess, workOrder.getProductId()); |
| | | } |
| | | MesMdItemDO item = itemService.validateItemExists(itemId); |
| | | |
| | |
| | | return routeProcesses; |
| | | } |
| | | |
| | | /** |
| | | * 任务产出物料:优先取工序在当前产品下的产出(按归属过滤),没有产出时取工单成品 |
| | | */ |
| | | private Long resolveTaskItemId(MesProRouteProcessDO routeProcess, Long productId) { |
| | | if (routeProcess == null) { |
| | | return productId; |
| | | } |
| | | if (routeProcess.getId() != null) { |
| | | // 工艺路线模板:按产出归属过滤出当前产品的产出 |
| | | List<Long> outputIds = routeProcessService |
| | | .getOutputItemIdsByRouteProcessId(routeProcess.getId(), productId); |
| | | if (outputIds != null) { |
| | | // 有归属配置:该产品无产出时取工单成品;null 表示存量无归属数据,继续走聚合兜底 |
| | | return CollUtil.isNotEmpty(outputIds) ? outputIds.get(0) : productId; |
| | | } |
| | | } |
| | | // 工单工序快照 / 存量无归属数据:产出已按产品过滤,取第一个 |
| | | String outputItemId = routeProcess.getOutputItemId(); |
| | | if (outputItemId != null && !outputItemId.isBlank()) { |
| | | return Long.valueOf(outputItemId.split(",")[0].trim()); |
| | | } |
| | | return productId; |
| | | } |
| | | |
| | | @Override |
| | | public void deleteTask(Long id) { |
| | | // 1. 校验存在且非终态 |
| | |
| | | @Override |
| | | public PageResult<MesProTaskDO> getPendingFeedbackPage(MesProTaskPageReqVO pageReqVO) { |
| | | return taskMapper.selectPendingFeedbackPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public Map<Long, Long> getPendingFeedbackCountByWorkstation() { |
| | | List<Map<String, Object>> rows = taskMapper.selectPendingFeedbackCountByWorkstation(); |
| | | Map<Long, Long> result = new HashMap<>(rows.size()); |
| | | for (Map<String, Object> row : rows) { |
| | | Object workstationId = row.get("workstation_id"); |
| | | Object count = row.get("pending_count"); |
| | | if (workstationId instanceof Number && count instanceof Number) { |
| | | result.put(((Number) workstationId).longValue(), ((Number) count).longValue()); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | |
| | | List<Long> taskIds = new java.util.ArrayList<>(); |
| | | for (MesProRouteProcessDO rp : routeProcesses) { |
| | | cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO proc = procMap.get(rp.getProcessId()); |
| | | Long itemId = rp.getOutputItemId() != null ? Long.valueOf(rp.getOutputItemId().split(",")[0].trim()) : workOrder.getProductId(); |
| | | Long itemId = resolveTaskItemId(rp, workOrder.getProductId()); |
| | | cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO item = itemService.validateItemExists(itemId); |
| | | MesProTaskDO task = new MesProTaskDO() |
| | | .setWorkOrderId(workOrder.getId()) |