diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/MesQcPendingInspectController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/MesQcPendingInspectController.java index 14c1b20..038a25b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/MesQcPendingInspectController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/MesQcPendingInspectController.java @@ -5,12 +5,18 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.mes.controller.admin.qc.pendinginspect.vo.MesQcPendingInspectPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.pendinginspect.vo.MesQcPendingInspectRespVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; +import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; 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.vendor.MesMdVendorService; +import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; +import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; import cn.iocoder.yudao.module.mes.service.qc.pendinginspect.MesQcPendingInspectService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -42,6 +48,12 @@ public class MesQcPendingInspectController { private MesMdUnitMeasureService unitMeasureService; @Resource private MesMdVendorService vendorService; + @Resource + private MesMdClientService clientService; + @Resource + private MesMdWorkstationService workstationService; + @Resource + private MesProTaskService taskService; @GetMapping("/page") @Operation(summary = "获得待检任务分页") @@ -49,7 +61,7 @@ public class MesQcPendingInspectController { public CommonResult> getPendingInspectPage( @Valid MesQcPendingInspectPageReqVO pageReqVO) { PageResult pageResult = pendingInspectService.getPendingInspectPage(pageReqVO); - // 拼接 VO:物料、供应商、计量单位 + // 拼接 VO:物料、供应商、客户、工作站、任务等 buildPendingInspectRespVOList(pageResult.getList()); return success(pageResult); } @@ -66,9 +78,18 @@ public class MesQcPendingInspectController { // 批量查询计量单位(通过物料的 unitMeasureId) Map unitMeasureMap = unitMeasureService.getUnitMeasureMap( convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); - // 批量查询供应商 + // 批量查询供应商(IQC 场景) Map vendorMap = vendorService.getVendorMap( convertSet(list, MesQcPendingInspectRespVO::getVendorId)); + // 批量查询客户(OQC/RQC 场景) + Map clientMap = clientService.getClientMap( + convertSet(list, MesQcPendingInspectRespVO::getClientId)); + // 批量查询工作站(IPQC/RQC 场景) + Map workstationMap = workstationService.getWorkstationMap( + convertSet(list, MesQcPendingInspectRespVO::getWorkstationId)); + // 批量查询任务(IPQC 场景) + Map taskMap = taskService.getTaskMap( + convertSet(list, MesQcPendingInspectRespVO::getTaskId)); // 拼装 list.forEach(vo -> { findAndThen(itemMap, vo.getItemId(), item -> { @@ -76,8 +97,11 @@ public class MesQcPendingInspectController { findAndThen(unitMeasureMap, item.getUnitMeasureId(), unit -> vo.setUnitName(unit.getName())); }); - findAndThen(vendorMap, vo.getVendorId(), - vendor -> vo.setVendorName(vendor.getName())); + findAndThen(vendorMap, vo.getVendorId(), vendor -> vo.setVendorName(vendor.getName())); + findAndThen(clientMap, vo.getClientId(), client -> vo.setClientName(client.getName())); + findAndThen(workstationMap, vo.getWorkstationId(), + workstation -> vo.setWorkstationName(workstation.getName())); + findAndThen(taskMap, vo.getTaskId(), task -> vo.setTaskCode(task.getCode())); }); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/vo/MesQcPendingInspectRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/vo/MesQcPendingInspectRespVO.java index 27f21c6..6e7f5c9 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/vo/MesQcPendingInspectRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/pendinginspect/vo/MesQcPendingInspectRespVO.java @@ -55,9 +55,34 @@ public class MesQcPendingInspectRespVO { @Schema(description = "供应商名称", example = "供应商A") private String vendorName; + // ========== 工单/工作站/任务(IPQC/RQC 场景) ========== + + @Schema(description = "生产工单 ID", example = "10") + private Long workOrderId; + + @Schema(description = "工作站 ID", example = "20") + private Long workstationId; + + @Schema(description = "工作站名称", example = "工作站A") + private String workstationName; + + @Schema(description = "生产任务 ID", example = "30") + private Long taskId; + + @Schema(description = "生产任务编码", example = "TASK2025001") + private String taskCode; + + // ========== 客户(OQC/RQC 场景) ========== + + @Schema(description = "客户 ID", example = "40") + private Long clientId; + + @Schema(description = "客户名称", example = "客户A") + private String clientName; + // ========== 时间 ========== @Schema(description = "记录时间") private LocalDateTime recordTime; -} +} \ No newline at end of file diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 5f8ee2c..f9c9d8e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -282,7 +282,7 @@ public interface ErrorCodeConstants { ErrorCode QC_IQC_CODE_DUPLICATE = new ErrorCode(1_040_603_001, "来料检验单编号已存在"); ErrorCode QC_IQC_NOT_PREPARE = new ErrorCode(1_040_603_002, "只有草稿状态的检验单才可操作"); ErrorCode QC_IQC_QUANTITY_MISMATCH = new ErrorCode(1_040_603_004, "合格品与不合格品数量之和须等于检测数量"); - ErrorCode QC_IQC_NO_TEMPLATE = new ErrorCode(1_040_603_005, "当前产品未配置 IQC 检测模板"); + ErrorCode QC_NO_TEMPLATE = new ErrorCode(1_040_603_005, "当前产品未配置检测模板"); ErrorCode QC_IQC_SOURCE_DOC_PARAMS_MISSING = new ErrorCode(1_040_603_006, "来源单据类型非空时,来源单据 ID 和来源单据行 ID 不能为空"); ErrorCode QC_IQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_603_007, "完成检验单前,检测结果必须填写"); // ========== MES 质量管理-来料检验行(1-040-603-100) ========== diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java index f232e24..5ba21c0 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java @@ -163,6 +163,9 @@ public class MesProTaskServiceImpl implements MesProTaskService { @Override public List getTaskList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } return taskMapper.selectByIds(ids); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailServiceImpl.java index 721240d..256375b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailServiceImpl.java @@ -163,7 +163,7 @@ public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailServic // 1. 查出 itemId 关联的所有 templateId List templateItems = templateItemMapper.selectListByItemId(itemId); if (CollUtil.isEmpty(templateItems)) { - throw exception(QC_IQC_NO_TEMPLATE); + throw exception(QC_NO_TEMPLATE); } // 2. 筛选 types 包含 qcType 的模板 List templates = templateMapper.selectByIds( @@ -171,7 +171,7 @@ public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailServic MesQcTemplateDO matchedTemplate = findFirst(templates, t -> CollUtil.contains(t.getTypes(), qcType)); if (matchedTemplate == null) { - throw exception(QC_IQC_NO_TEMPLATE); + throw exception(QC_NO_TEMPLATE); } // 3. 返回对应的 templateItem return findFirst(templateItems, diff --git a/yudao-module-mes/src/main/resources/mapper/qc/pendinginspect/MesQcPendingInspectMapper.xml b/yudao-module-mes/src/main/resources/mapper/qc/pendinginspect/MesQcPendingInspectMapper.xml index 5535990..ec6c509 100644 --- a/yudao-module-mes/src/main/resources/mapper/qc/pendinginspect/MesQcPendingInspectMapper.xml +++ b/yudao-module-mes/src/main/resources/mapper/qc/pendinginspect/MesQcPendingInspectMapper.xml @@ -9,6 +9,7 @@ 3. 生产报工(IPQC):状态=待检验(3) 4. 销售出库单(OQC):行的 oqc_check=1 且 oqc_id IS NULL 5. 生产退料单(RQC):状态=待检验(5),行的 qc_flag=1 且 quality_status=0(待检) + 6. 销售退货单(RQC):状态=待执行(10),行的 quality_status=0(待检) -->