diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcRespVO.java index 83111d9..9f5e7d4 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcRespVO.java @@ -33,8 +33,8 @@ public class MesQcOqcRespVO { @Schema(description = "来源单据 ID", example = "200") private Long sourceDocId; - @Schema(description = "来源单据类型", example = "SALES") - private String sourceDocType; + @Schema(description = "来源单据类型", example = "118") + private Integer sourceDocType; @Schema(description = "来源单据编号", example = "SO20250101001") private String sourceDocCode; @@ -88,15 +88,15 @@ public class MesQcOqcRespVO { @Schema(description = "本次检测数量", example = "10") @ExcelProperty("检测数量") - private Integer checkQuantity; + private BigDecimal checkQuantity; @Schema(description = "合格品数量", example = "9") @ExcelProperty("合格品数量") - private Integer qualifiedQuantity; + private BigDecimal qualifiedQuantity; @Schema(description = "不合格品数量", example = "1") @ExcelProperty("不合格品数量") - private Integer unqualifiedQuantity; + private BigDecimal unqualifiedQuantity; // ========== 缺陷统计 ========== diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java index 168df21..6c1b048 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/vo/MesQcOqcSaveReqVO.java @@ -29,8 +29,8 @@ public class MesQcOqcSaveReqVO { @Schema(description = "来源单据 ID", example = "200") private Long sourceDocId; - @Schema(description = "来源单据类型", example = "SALES") - private String sourceDocType; + @Schema(description = "来源单据类型", example = "118") + private Integer sourceDocType; @Schema(description = "来源单据编号", example = "SO20250101001") private String sourceDocCode; @@ -62,18 +62,18 @@ public class MesQcOqcSaveReqVO { @Schema(description = "本次检测数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") @NotNull(message = "本次检测数量不能为空") - @Min(value = 1, message = "本次检测数量必须大于 0") - private Integer checkQuantity; + @DecimalMin(value = "0", message = "本次检测数量不能小于 0") + private BigDecimal checkQuantity; @Schema(description = "合格品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "9") @NotNull(message = "合格品数量不能为空") - @Min(value = 0, message = "合格品数量不能小于 0") - private Integer qualifiedQuantity; + @DecimalMin(value = "0", message = "合格品数量不能小于 0") + private BigDecimal qualifiedQuantity; @Schema(description = "不合格品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "不合格品数量不能为空") - @Min(value = 0, message = "不合格品数量不能小于 0") - private Integer unqualifiedQuantity; + @DecimalMin(value = "0", message = "不合格品数量不能小于 0") + private BigDecimal unqualifiedQuantity; // ========== 检验 ========== @@ -101,7 +101,7 @@ public class MesQcOqcSaveReqVO { if (ObjUtil.hasNull(checkQuantity, qualifiedQuantity, unqualifiedQuantity)) { return true; // @NotNull 会处理 null } - return checkQuantity.equals(qualifiedQuantity + unqualifiedQuantity); + return checkQuantity.compareTo(qualifiedQuantity.add(unqualifiedQuantity)) == 0; } } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcRespVO.java index ef727e5..8fb6899 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcRespVO.java @@ -33,8 +33,8 @@ public class MesQcRqcRespVO { @Schema(description = "来源单据 ID", example = "200") private Long sourceDocId; - @Schema(description = "来源单据类型", example = "RTISSUE") - private String sourceDocType; + @Schema(description = "来源单据类型", example = "116") + private Integer sourceDocType; @Schema(description = "来源单据行 ID", example = "300") private Long sourceLineId; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcSaveReqVO.java index d875b39..3b9fbf1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcSaveReqVO.java @@ -35,8 +35,8 @@ public class MesQcRqcSaveReqVO { @Schema(description = "来源单据 ID", example = "200") private Long sourceDocId; - @Schema(description = "来源单据类型", example = "RTISSUE") - private String sourceDocType; + @Schema(description = "来源单据类型", example = "116") + private Integer sourceDocType; @Schema(description = "来源单据行 ID", example = "300") private Long sourceLineId; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchGenerateReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchGenerateReqVO.java index 072050f..68af018 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchGenerateReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchGenerateReqVO.java @@ -78,6 +78,6 @@ public class MesWmBatchGenerateReqVO { /** * 质量状态 */ - private String qualityStatus; + private Integer qualityStatus; } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchRespVO.java index a0602b5..3e92f1b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/vo/MesWmBatchRespVO.java @@ -88,7 +88,7 @@ public class MesWmBatchRespVO { private String lotNumber; @Schema(description = "质量状态", example = "1") - private String qualityStatus; + private Integer qualityStatus; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineRespVO.java index 4a0199d..8f76c45 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineRespVO.java @@ -46,7 +46,7 @@ public class MesWmReturnSalesLineRespVO { private String batchCode; @Schema(description = "质量状态", example = "合格") - private String qualityStatus; + private Integer qualityStatus; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineSaveReqVO.java index dbe4507..d8d4cef 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnsales/vo/line/MesWmReturnSalesLineSaveReqVO.java @@ -36,7 +36,7 @@ public class MesWmReturnSalesLineSaveReqVO { private Long batchId; @Schema(description = "质量状态", example = "合格") - private String qualityStatus; + private Integer qualityStatus; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/oqc/MesQcOqcDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/oqc/MesQcOqcDO.java index cf29309..174d647 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/oqc/MesQcOqcDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/oqc/MesQcOqcDO.java @@ -47,7 +47,7 @@ public class MesQcOqcDO extends BaseDO { */ private Long templateId; - // ========== 来源单据(TODO @芋艿:WM 模块迁移后接入) ========== + // ========== 来源单据 ========== /** * 来源单据 ID @@ -55,8 +55,10 @@ public class MesQcOqcDO extends BaseDO { private Long sourceDocId; /** * 来源单据类型 + * + * 关联 {@link cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants} */ - private String sourceDocType; + private Integer sourceDocType; /** * 来源单据编号 */ @@ -97,15 +99,15 @@ public class MesQcOqcDO extends BaseDO { /** * 本次检测数量 */ - private Integer checkQuantity; + private BigDecimal checkQuantity; /** * 合格品数量 */ - private Integer qualifiedQuantity; + private BigDecimal qualifiedQuantity; /** * 不合格品数量 */ - private Integer unqualifiedQuantity; + private BigDecimal unqualifiedQuantity; // ========== 缺陷统计 ========== diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/rqc/MesQcRqcDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/rqc/MesQcRqcDO.java index d078aa5..e3f97ea 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/rqc/MesQcRqcDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/rqc/MesQcRqcDO.java @@ -47,7 +47,7 @@ public class MesQcRqcDO extends BaseDO { */ private Long templateId; - // ========== 来源单据(TODO @芋艿:WM 模块迁移后接入) ========== + // ========== 来源单据 ========== /** * 来源单据 ID @@ -55,8 +55,10 @@ public class MesQcRqcDO extends BaseDO { private Long sourceDocId; /** * 来源单据类型 + * + * 关联 {@link cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants} */ - private String sourceDocType; + private Integer sourceDocType; /** * 来源单据行 ID */ diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/batch/MesWmBatchDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/batch/MesWmBatchDO.java index 9fe973d..2617596 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/batch/MesWmBatchDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/batch/MesWmBatchDO.java @@ -113,7 +113,7 @@ public class MesWmBatchDO extends BaseDO { /** * 质量状态 */ - private String qualityStatus; + private Integer qualityStatus; /** * 备注 */ diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesLineDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesLineDO.java index 4738ee0..b0aaa26 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesLineDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesLineDO.java @@ -68,7 +68,7 @@ public class MesWmProductSalesLineDO extends BaseDO { * * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum} */ - private String qualityStatus; + private Integer qualityStatus; /** * 备注 */ diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnsales/MesWmReturnSalesLineDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnsales/MesWmReturnSalesLineDO.java index d9a060d..325cbe4 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnsales/MesWmReturnSalesLineDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnsales/MesWmReturnSalesLineDO.java @@ -54,7 +54,7 @@ public class MesWmReturnSalesLineDO extends BaseDO { * * 枚举 {@link cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum} */ - private String qualityStatus; + private Integer qualityStatus; /** * 备注 */ 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 a144abe..5f8ee2c 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 @@ -312,6 +312,7 @@ public interface ErrorCodeConstants { ErrorCode QC_OQC_NOT_PREPARE = new ErrorCode(1_040_607_002, "只有草稿状态的检验单才可操作"); ErrorCode QC_OQC_QUANTITY_MISMATCH = new ErrorCode(1_040_607_004, "合格品与不合格品数量之和须等于检测数量"); ErrorCode QC_OQC_NO_TEMPLATE = new ErrorCode(1_040_607_005, "当前产品未配置 OQC 检测模板"); + ErrorCode QC_OQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_607_006, "完成检验单前,检测结果必须填写"); // ========== MES 质量管理-出货检验行(1-040-607-100) ========== ErrorCode QC_OQC_LINE_NOT_EXISTS = new ErrorCode(1_040_607_100, "出货检验行不存在"); @@ -321,6 +322,7 @@ public interface ErrorCodeConstants { ErrorCode QC_RQC_NOT_PREPARE = new ErrorCode(1_040_608_002, "只有草稿状态的检验单才可操作"); ErrorCode QC_RQC_QUANTITY_MISMATCH = new ErrorCode(1_040_608_004, "合格品与不合格品数量之和须等于检测数量"); ErrorCode QC_RQC_NO_TEMPLATE = new ErrorCode(1_040_608_005, "当前产品未配置 RQC 检测模板"); + ErrorCode QC_RQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_608_006, "完成检验单前,检测结果必须填写"); // ========== MES 质量管理-退货检验行(1-040-608-100) ========== ErrorCode QC_RQC_LINE_NOT_EXISTS = new ErrorCode(1_040_608_100, "退货检验行不存在"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java index 6e68f08..c8ad1e0 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java @@ -36,7 +36,7 @@ public enum MesWmArrivalNoticeStatusEnum implements ArrayValuable { * * 对应方法: * 1. 不需要检验时:{@link MesWmArrivalNoticeService#submitArrivalNotice(Long)} - * 2. 或检验完成时:{@link MesWmArrivalNoticeService#approveArrivalNoticeWhenIqcComplete(Long, Long, Long, BigDecimal)} + * 2. 或检验完成时:{@link MesWmArrivalNoticeService#updateArrivalNoticeWhenIqcFinish(Long, Long, Long, BigDecimal)} */ PENDING_RECEIPT(MesOrderStatusConstants.APPROVED, "待入库"), /** diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackService.java index 5e6e988..2729b10 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackService.java @@ -102,8 +102,8 @@ public interface MesProFeedbackService { * @param materialScrapQty 料废数量 * @param otherScrapQty 其他废品数量 */ - void completeFeedbackFromIpqc(Long feedbackId, BigDecimal qualifiedQty, BigDecimal unqualifiedQty, - BigDecimal laborScrapQty, BigDecimal materialScrapQty, BigDecimal otherScrapQty); + void updateProFeedbackWhenIpqcFinish(Long feedbackId, BigDecimal qualifiedQty, BigDecimal unqualifiedQty, + BigDecimal laborScrapQty, BigDecimal materialScrapQty, BigDecimal otherScrapQty); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java index 88b7cd7..b631427 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java @@ -285,8 +285,8 @@ public class MesProFeedbackServiceImpl implements MesProFeedbackService { @Override @Transactional(rollbackFor = Exception.class) - public void completeFeedbackFromIpqc(Long feedbackId, BigDecimal qualifiedQty, BigDecimal unqualifiedQty, - BigDecimal laborScrapQty, BigDecimal materialScrapQty, BigDecimal otherScrapQty) { + public void updateProFeedbackWhenIpqcFinish(Long feedbackId, BigDecimal qualifiedQty, BigDecimal unqualifiedQty, + BigDecimal laborScrapQty, BigDecimal materialScrapQty, BigDecimal otherScrapQty) { // 1. 校验报工单存在且为待检验状态 MesProFeedbackDO feedback = validateFeedbackExists(feedbackId); if (ObjUtil.notEqual(feedback.getStatus(), MesProFeedbackStatusEnum.UNCHECK.getStatus())) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java index a97d8a6..19cd602 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java @@ -155,7 +155,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { } if (Objects.equals(ipqc.getSourceDocType(), MesBizTypeConstants.PRO_FEEDBACK)) { - feedbackService.completeFeedbackFromIpqc(ipqc.getSourceDocId(), + feedbackService.updateProFeedbackWhenIpqcFinish(ipqc.getSourceDocId(), ObjectUtil.defaultIfNull(ipqc.getQualifiedQuantity(), BigDecimal.ZERO), ObjectUtil.defaultIfNull(ipqc.getUnqualifiedQuantity(), BigDecimal.ZERO), ObjectUtil.defaultIfNull(ipqc.getLaborScrapQuantity(), BigDecimal.ZERO), diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcServiceImpl.java index b629c79..bf8dc71 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcServiceImpl.java @@ -148,10 +148,10 @@ public class MesQcIqcServiceImpl implements MesQcIqcService { // 根据不同的来源单据类型,回写不同的单据 if (Objects.equals(iqc.getSourceDocType(), MesBizTypeConstants.WM_ARRIVAL_NOTICE)) { - arrivalNoticeService.approveArrivalNoticeWhenIqcComplete(iqc.getSourceDocId(), iqc.getSourceLineId(), + arrivalNoticeService.updateArrivalNoticeWhenIqcFinish(iqc.getSourceDocId(), iqc.getSourceLineId(), iqc.getId(), iqc.getQualifiedQuantity()); } else if (Objects.equals(iqc.getSourceDocType(), MesBizTypeConstants.WM_OUTSOURCE_RECPT)) { - outsourceReceiptService.approveOutsourceReceiptWhenIqcComplete(iqc.getSourceDocId(), iqc.getSourceLineId(), + outsourceReceiptService.updateOutsourceReceiptWhenIqcFinish(iqc.getSourceDocId(), iqc.getSourceLineId(), iqc.getId(), iqc.getQualifiedQuantity(), iqc.getUnqualifiedQuantity()); } else { throw new IllegalArgumentException( diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java index 35ec8c5..19994e3 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java @@ -12,10 +12,12 @@ import cn.iocoder.yudao.module.mes.dal.mysql.qc.oqc.MesQcOqcMapper; import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum; import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum; import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; +import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; 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.qc.defectrecord.MesQcDefectRecordService; import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; +import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; @@ -56,6 +58,10 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { @Lazy private MesMdItemService itemService; @Resource + @Lazy + private MesWmProductSalesLineService productSalesLineService; + + @Resource private AdminUserApi adminUserApi; @Override @@ -100,16 +106,47 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { } @Override + @Transactional(rollbackFor = Exception.class) public void finishOqc(Long id) { - // 1. 校验存在 + 草稿状态 - validateOqcStatusPrepare(id); + // 1.1 校验存在 + 草稿状态 + MesQcOqcDO oqc = validateOqcStatusPrepare(id); + // 1.2 校验检测结论必填 + if (oqc.getCheckResult() == null) { + throw exception(QC_OQC_CHECK_RESULT_EMPTY); + } // 2. 更新状态为已完成 MesQcOqcDO updateObj = new MesQcOqcDO() .setId(id).setStatus(MesQcStatusEnum.FINISHED.getStatus()); oqcMapper.updateById(updateObj); - // TODO @芋艿:WM 模块迁移后,更新销售出库单行的检验结果 + // 3. 回写来源单据 + writeBackSourceDoc(oqc); + } + + /** + * 回写来源单据(OQC 完成后) + * + *

当来源为销售出库单时,回写行的 oqcId 和 qualityStatus + * + * @param oqc 出货检验单 + */ + private void writeBackSourceDoc(MesQcOqcDO oqc) { + if (oqc.getSourceDocType() == null) { + return; + } + if (oqc.getSourceLineId() == null) { + throw new IllegalArgumentException( + "OQC 单[" + oqc.getId() + "] sourceDocType 非空但 sourceLineId 为空"); + } + + if (Objects.equals(oqc.getSourceDocType(), MesBizTypeConstants.WM_PRODUCT_SALES)) { + // 回写销售出库单行的 oqcId + qualityStatus + productSalesLineService.updateProductSalesLineWhenOqcFinish(oqc.getSourceLineId(), oqc.getId(), oqc.getCheckResult()); + } else { + throw new IllegalArgumentException( + "OQC 单[" + oqc.getId() + "] sourceDocType=" + oqc.getSourceDocType() + " 无法识别,无法回写来源单据"); + } } @Override @@ -190,8 +227,8 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { BigDecimal criticalRate = BigDecimal.ZERO; BigDecimal majorRate = BigDecimal.ZERO; BigDecimal minorRate = BigDecimal.ZERO; - if (oqc.getCheckQuantity() != null && oqc.getCheckQuantity() > 0) { - BigDecimal checkQty = BigDecimal.valueOf(oqc.getCheckQuantity()); + if (oqc.getCheckQuantity() != null && oqc.getCheckQuantity().compareTo(BigDecimal.ZERO) > 0) { + BigDecimal checkQty = oqc.getCheckQuantity(); criticalRate = BigDecimal.valueOf(totalCritical).multiply(BigDecimal.valueOf(100)) .divide(checkQty, 2, RoundingMode.HALF_UP); majorRate = BigDecimal.valueOf(totalMajor).multiply(BigDecimal.valueOf(100)) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java index 0557b88..cfed9b2 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java @@ -12,9 +12,12 @@ import cn.iocoder.yudao.module.mes.dal.mysql.qc.rqc.MesQcRqcMapper; import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum; import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum; import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; +import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; +import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService; +import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesLineService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; @@ -51,6 +54,12 @@ public class MesQcRqcServiceImpl implements MesQcRqcService { @Resource @Lazy private MesQcDefectRecordService defectRecordService; + @Resource + @Lazy + private MesWmReturnIssueLineService returnIssueLineService; + @Resource + @Lazy + private MesWmReturnSalesLineService returnSalesLineService; @Resource private AdminUserApi adminUserApi; @@ -95,10 +104,15 @@ public class MesQcRqcServiceImpl implements MesQcRqcService { } @Override + @Transactional(rollbackFor = Exception.class) public void finishRqc(Long id) { // 1.1 校验存在 + 草稿状态 MesQcRqcDO rqc = validateRqcStatusPrepare(id); - // 1.2 校验合格品 + 不合格品 = 检测数量 + // 1.2 校验检测结论必填 + if (rqc.getCheckResult() == null) { + throw exception(QC_RQC_CHECK_RESULT_EMPTY); + } + // 1.3 校验合格品 + 不合格品 = 检测数量 if (rqc.getCheckQuantity() != null && rqc.getCheckQuantity().compareTo(BigDecimal.ZERO) > 0) { BigDecimal qualified = rqc.getQualifiedQuantity() != null ? rqc.getQualifiedQuantity() : BigDecimal.ZERO; BigDecimal unqualified = rqc.getUnqualifiedQuantity() != null ? rqc.getUnqualifiedQuantity() : BigDecimal.ZERO; @@ -111,7 +125,40 @@ public class MesQcRqcServiceImpl implements MesQcRqcService { MesQcRqcDO updateObj = new MesQcRqcDO().setId(id).setStatus(MesQcStatusEnum.FINISHED.getStatus()); rqcMapper.updateById(updateObj); - // TODO @芋艿:WM 模块迁移后,更新来源退料/退货单行的质量状态 + // 3. 回写来源单据 + writeBackSourceDoc(rqc); + } + + /** + * 回写来源单据(RQC 完成后) + * + *

根据 sourceDocType 分发: + *

+ * + * @param rqc 退货检验单 + */ + private void writeBackSourceDoc(MesQcRqcDO rqc) { + if (rqc.getSourceDocType() == null) { + return; + } + if (rqc.getSourceLineId() == null) { + throw new IllegalArgumentException( + "RQC 单[" + rqc.getId() + "] sourceDocType 非空但 sourceLineId 为空"); + } + + if (Objects.equals(rqc.getSourceDocType(), MesBizTypeConstants.WM_RETURN_ISSUE)) { + // 回写生产退料单行的 qualityStatus + returnIssueLineService.updateReturnIssueLineWhenRqcFinish(rqc.getSourceLineId(), rqc.getCheckResult()); + } else if (Objects.equals(rqc.getSourceDocType(), MesBizTypeConstants.WM_RETURN_SALES)) { + // 回写销售退货单行的 qualityStatus + returnSalesLineService.updateReturnSalesLineWhenRqcFinish(rqc.getSourceLineId(), rqc.getCheckResult()); + } else { + throw new IllegalArgumentException( + "RQC 单[" + rqc.getId() + "] sourceDocType=" + rqc.getSourceDocType() + " 无法识别,无法回写来源单据"); + } } @Override diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineService.java index 7ba1b3a..eecdc8d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineService.java @@ -74,7 +74,7 @@ public interface MesWmArrivalNoticeLineService { * @param iqcId IQC 检验单编号 * @param qualifiedQuantity 合格数量 */ - void updateByIqcComplete(Long lineId, Long iqcId, BigDecimal qualifiedQuantity); + void updateArrivalNoticeLineWhenIqcFinish(Long lineId, Long iqcId, BigDecimal qualifiedQuantity); /** * 校验到货通知单行存在 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineServiceImpl.java index f0021b4..e1d71a1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeLineServiceImpl.java @@ -63,7 +63,7 @@ public class MesWmArrivalNoticeLineServiceImpl implements MesWmArrivalNoticeLine /** * 初始化合格品数量: * 1. 如果不需要 IQC 检验,则合格品数量直接 = 接收数量; - * 2. 否则,合格品数量由对应的 IQC 检验单负责更新(见 {@link #updateByIqcComplete}) + * 2. 否则,合格品数量由对应的 IQC 检验单负责更新(见 {@link #updateArrivalNoticeLineWhenIqcFinish}) */ private void initQualifiedQuantityIfNoIqc(MesWmArrivalNoticeLineDO line) { if (BooleanUtil.isFalse(line.getIqcCheckFlag())) { @@ -100,7 +100,7 @@ public class MesWmArrivalNoticeLineServiceImpl implements MesWmArrivalNoticeLine } @Override - public void updateByIqcComplete(Long lineId, Long iqcId, BigDecimal qualifiedQuantity) { + public void updateArrivalNoticeLineWhenIqcFinish(Long lineId, Long iqcId, BigDecimal qualifiedQuantity) { // 校验行存在 validateArrivalNoticeLineExists(lineId); // 更新 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java index 37976ee..823e1c4 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java @@ -71,7 +71,7 @@ public interface MesWmArrivalNoticeService { * @param iqcId IQC 检验单编号 * @param qualifiedQuantity 合格数量 */ - void approveArrivalNoticeWhenIqcComplete(Long id, Long lineId, Long iqcId, BigDecimal qualifiedQuantity); + void updateArrivalNoticeWhenIqcFinish(Long id, Long lineId, Long iqcId, BigDecimal qualifiedQuantity); /** * 完成到货通知单(待入库 → 已完成),内部调用 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java index d9033a9..55b1f0b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java @@ -96,24 +96,23 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService throw exception(WM_ARRIVAL_NOTICE_NO_LINE); } - // 2. 检查所有行的 iqcCheckFlag:如果没有需要检验的行,则直接审批通过 + // 2. 检查所有行的 iqcCheckFlag:如果有需要检验的行,进入待质检状态 boolean needCheck = CollectionUtils.anyMatch(lines, line -> Boolean.TRUE.equals(line.getIqcCheckFlag())); - // TODO @AI:if return;并且不要取反; - if (!needCheck) { - // 不需要检验,直接进入待入库 - arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO() - .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus())); - } else { + if (needCheck) { // 需要检验,进入待质检 arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO() .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus())); + return; } + // 不需要检验,直接进入待入库 + arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO() + .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus())); } @Override @Transactional(rollbackFor = Exception.class) - public void approveArrivalNoticeWhenIqcComplete(Long id, Long lineId, Long iqcId, BigDecimal qualifiedQuantity) { + public void updateArrivalNoticeWhenIqcFinish(Long id, Long lineId, Long iqcId, BigDecimal qualifiedQuantity) { // 1.1 校验到货通知单存在 MesWmArrivalNoticeDO notice = validateArrivalNoticeExists(id); // 1.2 校验状态为待质检 @@ -122,14 +121,14 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService } // 2. 更新到货通知单行:绑定 iqcId + 合格数量 - arrivalNoticeLineService.updateByIqcComplete(lineId, iqcId, qualifiedQuantity); + arrivalNoticeLineService.updateArrivalNoticeLineWhenIqcFinish(lineId, iqcId, qualifiedQuantity); // 3.1 判断是否所有需检行都已完成 List lines = arrivalNoticeLineService.getArrivalNoticeLineListByNoticeId(id); boolean hasUnchecked = CollectionUtils.anyMatch(lines, line -> Boolean.TRUE.equals(line.getIqcCheckFlag()) && line.getIqcId() == null); if (hasUnchecked) { - log.info("[updateWhenIqcComplete][到货通知单({}) 还有未完成检验的行,暂不更新状态]", id); + log.info("[updateArrivalNoticeWhenIqcFinish][到货通知单({}) 还有未完成检验的行,暂不更新状态]", id); return; } // 3.2 所有行检验完成,更新主表状态 PENDING_QC → PENDING_RECEIPT diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptService.java index cd00de8..01b9399 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptService.java @@ -88,8 +88,8 @@ public interface MesWmOutsourceReceiptService { * @param qualifiedQuantity 合格品数量 * @param unqualifiedQuantity 不合格品数量 */ - void approveOutsourceReceiptWhenIqcComplete(Long receiptId, Long lineId, Long iqcId, - BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity); + void updateOutsourceReceiptWhenIqcFinish(Long receiptId, Long lineId, Long iqcId, + BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity); /** * 校验外协入库单和行存在 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptServiceImpl.java index 6b9f58e..ffd8b50 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptServiceImpl.java @@ -209,8 +209,8 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe @Override @Transactional(rollbackFor = Exception.class) - public void approveOutsourceReceiptWhenIqcComplete(Long receiptId, Long lineId, Long iqcId, - BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity) { + public void updateOutsourceReceiptWhenIqcFinish(Long receiptId, Long lineId, Long iqcId, + BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity) { // 1.1 校验入库单存在 MesWmOutsourceReceiptDO receipt = validateOutsourceReceiptExists(receiptId); // 1.2 校验状态为待检验 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java index f19ebad..e038c10 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.service.wm.productsales; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLinePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO; @@ -65,7 +66,15 @@ public interface MesWmProductSalesLineService { * @param pageReqVO 分页查询 * @return 销售出库单行分页 */ - cn.iocoder.yudao.framework.common.pojo.PageResult getProductSalesLinePage( - MesWmProductSalesLinePageReqVO pageReqVO); + PageResult getProductSalesLinePage(MesWmProductSalesLinePageReqVO pageReqVO); + + /** + * OQC 检验完成后,更新销售出库单行的 OQC 质检状态 + * + * @param id 行 ID + * @param oqcId 质检单 ID + * @param checkResult 检验结果 + */ + void updateProductSalesLineWhenOqcFinish(Long id, Long oqcId, Integer checkResult); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java index 0fec492..53f8358 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java @@ -5,15 +5,16 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesW import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper; +import cn.iocoder.yudao.module.mes.enums.qc.MesQcCheckResultEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import jakarta.annotation.Resource; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import java.math.BigDecimal; import java.util.List; +import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_PRODUCT_SALES_LINE_NOT_EXISTS; @@ -29,14 +30,8 @@ public class MesWmProductSalesLineServiceImpl implements MesWmProductSalesLineSe @Resource private MesWmProductSalesLineMapper productSalesLineMapper; - - @Resource - @Lazy - private MesWmProductSalesService productSalesService; - @Resource private MesWmProductSalesDetailService productSalesDetailService; - @Resource private MesMdItemService itemService; @@ -104,4 +99,12 @@ public class MesWmProductSalesLineServiceImpl implements MesWmProductSalesLineSe return line; } + @Override + public void updateProductSalesLineWhenOqcFinish(Long id, Long oqcId, Integer checkResult) { + Integer qualityStatus = Objects.equals(checkResult, MesQcCheckResultEnum.PASS.getType()) + ? MesWmQualityStatusEnum.PASS.getStatus() : MesWmQualityStatusEnum.FAIL.getStatus(); + productSalesLineMapper.updateById(new MesWmProductSalesLineDO() + .setId(id).setOqcId(oqcId).setQualityStatus(qualityStatus)); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineService.java index 00ed111..fb70546 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineService.java @@ -82,4 +82,12 @@ public interface MesWmReturnIssueLineService { */ void updateReturnIssueQualityStatusByIssueId(Long issueId, Integer issueType); + /** + * RQC 检验完成后,更新生产退料单行的质量状态 + * + * @param id 行 ID + * @param checkResult 检验结果 + */ + void updateReturnIssueLineWhenRqcFinish(Long id, Integer checkResult); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineServiceImpl.java index e9fcc87..335c93b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueLineServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.line.MesWm import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueLineMapper; +import cn.iocoder.yudao.module.mes.enums.qc.MesQcCheckResultEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueTypeEnum; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; @@ -17,6 +18,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.List; +import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_ISSUE_LINE_NOT_EXISTS; @@ -134,4 +136,11 @@ public class MesWmReturnIssueLineServiceImpl implements MesWmReturnIssueLineServ return MesWmQualityStatusEnum.FAIL.getStatus(); // 不合格 } + @Override + public void updateReturnIssueLineWhenRqcFinish(Long id, Integer checkResult) { + Integer qualityStatus = Objects.equals(checkResult, MesQcCheckResultEnum.PASS.getType()) + ? MesWmQualityStatusEnum.PASS.getStatus() : MesWmQualityStatusEnum.FAIL.getStatus(); + issueLineMapper.updateById(new MesWmReturnIssueLineDO().setId(id).setQualityStatus(qualityStatus)); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineService.java index e3bd28f..376e454 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineService.java @@ -82,6 +82,14 @@ public interface MesWmReturnSalesLineService { * @param returnId 退货单ID * @param qualityStatus 质量状态 */ - void updateQualityStatusByReturnId(Long returnId, String qualityStatus); + void updateQualityStatusByReturnId(Long returnId, Integer qualityStatus); + + /** + * RQC 检验完成后,更新销售退货单行的质量状态 + * + * @param id 行 ID + * @param checkResult 检验结果 + */ + void updateReturnSalesLineWhenRqcFinish(Long id, Integer checkResult); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java index d06f85e..a6478b5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java @@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWm import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLineMapper; +import cn.iocoder.yudao.module.mes.enums.qc.MesQcCheckResultEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; @@ -14,6 +16,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.List; +import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.MD_ITEM_BATCH_REQUIRED; @@ -102,7 +105,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ } @Override - public void updateQualityStatusByReturnId(Long returnId, String qualityStatus) { + public void updateQualityStatusByReturnId(Long returnId, Integer qualityStatus) { List lines = returnSalesLineMapper.selectListByReturnId(returnId); for (MesWmReturnSalesLineDO line : lines) { returnSalesLineMapper.updateById(new MesWmReturnSalesLineDO() @@ -125,4 +128,12 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ } } + @Override + public void updateReturnSalesLineWhenRqcFinish(Long id, Integer checkResult) { + Integer qualityStatus = Objects.equals(checkResult, MesQcCheckResultEnum.PASS.getType()) + ? MesWmQualityStatusEnum.PASS.getStatus() + : MesWmQualityStatusEnum.FAIL.getStatus(); + returnSalesLineMapper.updateById(new MesWmReturnSalesLineDO().setId(id).setQualityStatus(qualityStatus)); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java index 069d13b..8b941c9 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java @@ -124,7 +124,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { // DONE @AI:全部的行设置为待检验状态 returnSalesLineService.updateQualityStatusByReturnId(id, - String.valueOf(MesWmQualityStatusEnum.PENDING.getStatus())); + MesWmQualityStatusEnum.PENDING.getStatus()); } @Override 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 9fbf5b3..5535990 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 @@ -3,11 +3,12 @@