diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java index 65dfe27..ad23fbc 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java @@ -39,6 +39,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPOR import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - MES 来料检验单(IQC)") @RestController @@ -62,14 +63,14 @@ public class MesQcIqcController { @Operation(summary = "创建来料检验单") @PreAuthorize("@ss.hasPermission('mes:qc-iqc:create')") public CommonResult createIqc(@Valid @RequestBody MesQcIqcSaveReqVO createReqVO) { - return success(iqcService.createIqc(createReqVO)); + return success(iqcService.createIqc(createReqVO, getLoginUserId())); } @PutMapping("/update") @Operation(summary = "更新来料检验单") @PreAuthorize("@ss.hasPermission('mes:qc-iqc:update')") public CommonResult updateIqc(@Valid @RequestBody MesQcIqcSaveReqVO updateReqVO) { - iqcService.updateIqc(updateReqVO); + iqcService.updateIqc(updateReqVO, getLoginUserId()); return success(true); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcRespVO.java index 00559c5..fa094ac 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcRespVO.java @@ -72,12 +72,6 @@ public class MesQcIqcRespVO { // ========== 数量 ========== - @Schema(description = "最低检测数", example = "5") - private Integer minCheckQuantity; - - @Schema(description = "最大不合格数", example = "0") - private Integer maxUnqualifiedQuantity; - @Schema(description = "本次接收数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") @ExcelProperty("接收数量") private BigDecimal receivedQuantity; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcSaveReqVO.java index 4cca5b7..8a734fb 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/vo/MesQcIqcSaveReqVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.qc.iqc.vo; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -23,18 +24,14 @@ public class MesQcIqcSaveReqVO { @NotEmpty(message = "检验单名称不能为空") private String name; - @Schema(description = "检验模板 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - @NotNull(message = "检验模板不能为空") - private Long templateId; - // ========== 来源单据 ========== - @Schema(description = "来源单据 ID", example = "200") - private Long sourceDocId; - @Schema(description = "来源单据类型", example = "100") private Integer sourceDocType; + @Schema(description = "来源单据 ID", example = "200") + private Long sourceDocId; + @Schema(description = "来源单据行 ID", example = "300") private Long sourceLineId; @@ -55,23 +52,18 @@ public class MesQcIqcSaveReqVO { // ========== 数量 ========== - @Schema(description = "最低检测数", example = "5") - private Integer minCheckQuantity; - - @Schema(description = "最大不合格数", example = "0") - private Integer maxUnqualifiedQuantity; - @Schema(description = "本次接收数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") @NotNull(message = "本次接收数量不能为空") private BigDecimal receivedQuantity; - @Schema(description = "本次检测数量", example = "10") - private BigDecimal checkQuantity; - - @Schema(description = "合格品数量", example = "9") + @Schema(description = "合格品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "9") + @NotNull(message = "合格品数量不能为空") + @DecimalMin(value = "0", message = "合格品数量不能小于 0") private BigDecimal qualifiedQuantity; - @Schema(description = "不合格品数量", example = "1") + @Schema(description = "不合格品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "不合格品数量不能为空") + @DecimalMin(value = "0", message = "不合格品数量不能小于 0") private BigDecimal unqualifiedQuantity; // ========== 检验 ========== @@ -79,15 +71,14 @@ public class MesQcIqcSaveReqVO { @Schema(description = "检测结果", example = "1") private Integer checkResult; - @Schema(description = "来料日期") + @Schema(description = "来料日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "来料日期不能为空") private LocalDateTime receiveDate; - @Schema(description = "检测日期") + @Schema(description = "检测日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "检测日期不能为空") private LocalDateTime inspectDate; - @Schema(description = "检测人员用户 ID", example = "1") - private Long inspectorUserId; - @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateIndicatorController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateIndicatorController.java index a358734..4589156 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateIndicatorController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateIndicatorController.java @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO; import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService; -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateService; +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -37,7 +37,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; public class MesQcTemplateIndicatorController { @Resource - private MesQcTemplateService templateService; + private MesQcTemplateDetailService templateDetailService; @Resource private MesQcIndicatorService indicatorService; @Resource @@ -47,14 +47,14 @@ public class MesQcTemplateIndicatorController { @Operation(summary = "创建质检方案-检测指标项") @PreAuthorize("@ss.hasPermission('mes:qc-template:create')") public CommonResult createTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO createReqVO) { - return success(templateService.createTemplateIndicator(createReqVO)); + return success(templateDetailService.createTemplateIndicator(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新质检方案-检测指标项") @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") public CommonResult updateTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO updateReqVO) { - templateService.updateTemplateIndicator(updateReqVO); + templateDetailService.updateTemplateIndicator(updateReqVO); return success(true); } @@ -63,7 +63,7 @@ public class MesQcTemplateIndicatorController { @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") public CommonResult deleteTemplateIndicator(@RequestParam("id") Long id) { - templateService.deleteTemplateIndicator(id); + templateDetailService.deleteTemplateIndicator(id); return success(true); } @@ -72,7 +72,7 @@ public class MesQcTemplateIndicatorController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult getTemplateIndicator(@RequestParam("id") Long id) { - MesQcTemplateIndicatorDO indicator = templateService.getTemplateIndicator(id); + MesQcTemplateIndicatorDO indicator = templateDetailService.getTemplateIndicator(id); return success(buildIndicatorRespVOList(Collections.singletonList(indicator)).get(0)); } @@ -81,7 +81,7 @@ public class MesQcTemplateIndicatorController { @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult> getTemplateIndicatorPage( @Valid MesQcTemplateIndicatorPageReqVO pageReqVO) { - PageResult pageResult = templateService.getTemplateIndicatorPage(pageReqVO); + PageResult pageResult = templateDetailService.getTemplateIndicatorPage(pageReqVO); return success(new PageResult<>(buildIndicatorRespVOList(pageResult.getList()), pageResult.getTotal())); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateItemController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateItemController.java index d68ebf6..00b33be 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateItemController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateItemController.java @@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasur import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; 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.qc.template.MesQcTemplateService; +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -36,7 +36,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; public class MesQcTemplateItemController { @Resource - private MesQcTemplateService templateService; + private MesQcTemplateDetailService templateDetailService; @Resource private MesMdItemService mdItemService; @Resource @@ -46,14 +46,14 @@ public class MesQcTemplateItemController { @Operation(summary = "创建质检方案-产品关联") @PreAuthorize("@ss.hasPermission('mes:qc-template:create')") public CommonResult createTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO createReqVO) { - return success(templateService.createTemplateItem(createReqVO)); + return success(templateDetailService.createTemplateItem(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新质检方案-产品关联") @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") public CommonResult updateTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO updateReqVO) { - templateService.updateTemplateItem(updateReqVO); + templateDetailService.updateTemplateItem(updateReqVO); return success(true); } @@ -62,7 +62,7 @@ public class MesQcTemplateItemController { @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") public CommonResult deleteTemplateItem(@RequestParam("id") Long id) { - templateService.deleteTemplateItem(id); + templateDetailService.deleteTemplateItem(id); return success(true); } @@ -71,7 +71,7 @@ public class MesQcTemplateItemController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult getTemplateItem(@RequestParam("id") Long id) { - MesQcTemplateItemDO item = templateService.getTemplateItem(id); + MesQcTemplateItemDO item = templateDetailService.getTemplateItem(id); return success(buildItemRespVOList(Collections.singletonList(item)).get(0)); } @@ -80,7 +80,7 @@ public class MesQcTemplateItemController { @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult> getTemplateItemPage( @Valid MesQcTemplateItemPageReqVO pageReqVO) { - PageResult pageResult = templateService.getTemplateItemPage(pageReqVO); + PageResult pageResult = templateDetailService.getTemplateItemPage(pageReqVO); return success(new PageResult<>(buildItemRespVOList(pageResult.getList()), pageResult.getTotal())); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/iqc/MesQcIqcDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/iqc/MesQcIqcDO.java index 2ff9dda..518bdf4 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/iqc/MesQcIqcDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/iqc/MesQcIqcDO.java @@ -98,14 +98,6 @@ public class MesQcIqcDO extends BaseDO { // ========== 数量 ========== /** - * 最低检测数 - */ - private Integer minCheckQuantity; - /** - * 最大不合格数 - */ - private Integer maxUnqualifiedQuantity; - /** * 本次接收数量 */ private BigDecimal receivedQuantity; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordService.java index 32b61db..3d0acce 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordService.java @@ -49,6 +49,6 @@ public interface MesQcDefectRecordService { * @param qcType 检验类型 * @param qcId 检验单 ID */ - void deleteByQcTypeAndQcId(Integer qcType, Long qcId); + void deleteListByQcTypeAndQcId(Integer qcType, Long qcId); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordServiceImpl.java index 2deeeef..7095282 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/defectrecord/MesQcDefectRecordServiceImpl.java @@ -115,7 +115,7 @@ public class MesQcDefectRecordServiceImpl implements MesQcDefectRecordService { } @Override - public void deleteByQcTypeAndQcId(Integer qcType, Long qcId) { + public void deleteListByQcTypeAndQcId(Integer qcType, Long qcId) { defectRecordMapper.deleteByQcTypeAndQcId(qcType, qcId); } 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 b9459f5..e4109c4 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 @@ -16,7 +16,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateService; +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -44,7 +44,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { private MesQcIpqcMapper ipqcMapper; @Resource - private MesQcTemplateService templateService; + private MesQcTemplateDetailService templateDetailService; @Resource private MesQcIpqcLineService ipqcLineService; @Resource @@ -67,7 +67,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { // 1.3 校验工位存在 workstationService.validateWorkstationExists(createReqVO.getWorkstationId()); // 1.4 根据产品 + 检验类型自动匹配模板 - MesQcTemplateDO template = templateService.getTemplateByItemIdAndType( + MesQcTemplateDO template = templateDetailService.getTemplateByItemIdAndType( workOrder.getProductId(), MesQcTypeEnum.IPQC.getType()); if (template == null) { throw exception(QC_IPQC_NO_TEMPLATE); @@ -129,7 +129,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { // 2.2 级联删除行 ipqcLineService.deleteByIpqcId(id); // 2.3 级联删除缺陷记录 - defectRecordService.deleteByQcTypeAndQcId(MesQcTypeEnum.IPQC.getType(), id); + defectRecordService.deleteListByQcTypeAndQcId(MesQcTypeEnum.IPQC.getType(), id); } @Override diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineService.java index c1c5aa3..544d46b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineService.java @@ -68,6 +68,6 @@ public interface MesQcIqcLineService { * * @param iqcId 来料检验单 ID */ - void deleteByIqcId(Long iqcId); + void deleteListByIqcId(Long iqcId); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineServiceImpl.java index 597dbaa..3f40c26 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcLineServiceImpl.java @@ -106,7 +106,7 @@ public class MesQcIqcLineServiceImpl implements MesQcIqcLineService { } @Override - public void deleteByIqcId(Long iqcId) { + public void deleteListByIqcId(Long iqcId) { iqcLineMapper.deleteByIqcId(iqcId); } 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 08757a4..b95fd5d 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 @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum; import cn.iocoder.yudao.module.mes.enums.qc.MesQcOqcStatusEnum; import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; 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.qc.template.MesQcTemplateService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; @@ -44,6 +45,8 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { @Resource private MesQcTemplateService templateService; @Resource + private MesQcTemplateDetailService templateDetailService; + @Resource private MesQcOqcLineService oqcLineService; @Resource @Lazy @@ -63,7 +66,7 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { // 1.3 从模板的产品关联中获取检测参数 // TODO @芋艿:【暂时不用删除】到底 miniCheckQuantity 和 maxUnqualifiedQuantity 是否有必要存储? - MesQcTemplateItemDO templateItem = templateService.getTemplateItemByTemplateIdAndItemId( + MesQcTemplateItemDO templateItem = templateDetailService.getTemplateItemByTemplateIdAndItemId( templateId, createReqVO.getItemId()); if (templateItem != null) { if (createReqVO.getMinCheckQuantity() == null) { @@ -128,7 +131,7 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { // 2.2 级联删除行 oqcLineService.deleteByOqcId(id); // 2.3 级联删除缺陷记录 - defectRecordService.deleteByQcTypeAndQcId(MesQcTypeEnum.OQC.getType(), id); + defectRecordService.deleteListByQcTypeAndQcId(MesQcTypeEnum.OQC.getType(), id); } @Override 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 39b420e..4425b18 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 @@ -111,7 +111,7 @@ public class MesQcRqcServiceImpl implements MesQcRqcService { // 2.2 级联删除行 rqcLineService.deleteByRqcId(id); // 2.3 级联删除缺陷记录 - defectRecordService.deleteByQcTypeAndQcId(MesQcTypeEnum.RQC.getType(), id); + defectRecordService.deleteListByQcTypeAndQcId(MesQcTypeEnum.RQC.getType(), id); } @Override diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailService.java new file mode 100644 index 0000000..ed73fac --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailService.java @@ -0,0 +1,134 @@ +package cn.iocoder.yudao.module.mes.service.qc.template; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; +import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; +import jakarta.validation.Valid; + +// TODO @AI:还是按照表,拆分。而不是 detail; +/** + * MES 质检方案明细 Service 接口 + * + * 专注于质检方案的检测指标项和产品关联的 CRUD,以及复杂查询逻辑 + * + * @author 芋道源码 + */ +public interface MesQcTemplateDetailService { + + /** + * 创建检测指标项 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO createReqVO); + + /** + * 更新检测指标项 + * + * @param updateReqVO 更新信息 + */ + void updateTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO updateReqVO); + + /** + * 删除检测指标项 + * + * @param id 编号 + */ + void deleteTemplateIndicator(Long id); + + /** + * 获得检测指标项 + * + * @param id 编号 + * @return 检测指标项 + */ + MesQcTemplateIndicatorDO getTemplateIndicator(Long id); + + /** + * 获得检测指标项分页 + * + * @param pageReqVO 分页查询 + * @return 检测指标项分页 + */ + PageResult getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO); + + // ========== 质检方案-产品关联 ========== + + /** + * 创建产品关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTemplateItem(@Valid MesQcTemplateItemSaveReqVO createReqVO); + + /** + * 更新产品关联 + * + * @param updateReqVO 更新信息 + */ + void updateTemplateItem(@Valid MesQcTemplateItemSaveReqVO updateReqVO); + + /** + * 删除产品关联 + * + * @param id 编号 + */ + void deleteTemplateItem(Long id); + + /** + * 获得产品关联 + * + * @param id 编号 + * @return 产品关联 + */ + MesQcTemplateItemDO getTemplateItem(Long id); + + /** + * 获得产品关联分页 + * + * @param pageReqVO 分页查询 + * @return 产品关联分页 + */ + PageResult getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO); + + // ========== 复杂查询 ========== + + /** + * 根据方案 ID + 产品 ID 获取产品关联 + * + * @param templateId 方案 ID + * @param itemId 产品 ID + * @return 产品关联 + */ + MesQcTemplateItemDO getTemplateItemByTemplateIdAndItemId(Long templateId, Long itemId); + + // TODO @芋艿:【不要删除】后续这个方法,会慢慢被替代掉; + /** + * 根据产品物料 ID 和 QC 类型查找检验模板 + * + * 查找逻辑:在 template_item 中找到匹配 itemId 的模板,再校验该模板的 types 包含给定的 qcType + * + * @param itemId 产品物料 ID + * @param qcType 检测种类(枚举 {@link MesQcTypeEnum}) + * @return 匹配的检验模板(可能为 null) + */ + MesQcTemplateDO getTemplateByItemIdAndType(Long itemId, Integer qcType); + + /** + * 根据产品物料 ID 和 QC 类型查找检验模板的产品关联(必须存在,否则抛异常) + * + * @param itemId 产品物料 ID + * @param qcType 检测种类(枚举 {@link MesQcTypeEnum}) + * @return 匹配的产品关联 + */ + MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long itemId, Integer qcType); + +} 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 new file mode 100644 index 0000000..4a94bc7 --- /dev/null +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailServiceImpl.java @@ -0,0 +1,200 @@ +package cn.iocoder.yudao.module.mes.service.qc.template; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicator.MesQcIndicatorMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateIndicatorMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateItemMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateMapper; +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; +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.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * MES 质检方案明细 Service 实现类 + * + * 专注于质检方案的检测指标项和产品关联的 CRUD,以及复杂查询逻辑 + * + * @author 芋道源码 + */ +@Service +@Validated +public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailService { + + @Resource + private MesQcTemplateMapper templateMapper; + @Resource + private MesQcTemplateIndicatorMapper templateIndicatorMapper; + @Resource + private MesQcTemplateItemMapper templateItemMapper; + @Resource + private MesQcIndicatorMapper indicatorMapper; + + @Resource + @Lazy + private MesQcTemplateService templateService; + + // ========== 质检方案-检测指标项 ========== + + @Override + public Long createTemplateIndicator(MesQcTemplateIndicatorSaveReqVO createReqVO) { + // 校验方案存在 + templateService.validateTemplateExists(createReqVO.getTemplateId()); + // 插入 + MesQcTemplateIndicatorDO indicator = BeanUtils.toBean(createReqVO, MesQcTemplateIndicatorDO.class); + templateIndicatorMapper.insert(indicator); + return indicator.getId(); + } + + @Override + public void updateTemplateIndicator(MesQcTemplateIndicatorSaveReqVO updateReqVO) { + // 校验存在 + validateTemplateIndicatorExists(updateReqVO.getId()); + // 更新 + MesQcTemplateIndicatorDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateIndicatorDO.class); + templateIndicatorMapper.updateById(updateObj); + } + + @Override + public void deleteTemplateIndicator(Long id) { + // 校验存在 + validateTemplateIndicatorExists(id); + // 删除 + templateIndicatorMapper.deleteById(id); + } + + private void validateTemplateIndicatorExists(Long id) { + if (templateIndicatorMapper.selectById(id) == null) { + throw exception(QC_TEMPLATE_INDICATOR_NOT_EXISTS); + } + } + + @Override + public MesQcTemplateIndicatorDO getTemplateIndicator(Long id) { + return templateIndicatorMapper.selectById(id); + } + + @Override + public PageResult getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) { + return templateIndicatorMapper.selectPage(pageReqVO); + } + + // ========== 质检方案-产品关联 ========== + + @Override + public Long createTemplateItem(MesQcTemplateItemSaveReqVO createReqVO) { + // 校验方案存在 + templateService.validateTemplateExists(createReqVO.getTemplateId()); + // 校验产品在此方案中唯一 + validateTemplateItemNotDuplicate(null, createReqVO.getTemplateId(), createReqVO.getItemId()); + // 插入 + MesQcTemplateItemDO item = BeanUtils.toBean(createReqVO, MesQcTemplateItemDO.class); + templateItemMapper.insert(item); + return item.getId(); + } + + @Override + public void updateTemplateItem(MesQcTemplateItemSaveReqVO updateReqVO) { + // 校验存在 + validateTemplateItemExists(updateReqVO.getId()); + // 校验产品在此方案中唯一 + validateTemplateItemNotDuplicate(updateReqVO.getId(), updateReqVO.getTemplateId(), updateReqVO.getItemId()); + // 更新 + MesQcTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateItemDO.class); + templateItemMapper.updateById(updateObj); + } + + @Override + public void deleteTemplateItem(Long id) { + // 校验存在 + validateTemplateItemExists(id); + // 删除 + templateItemMapper.deleteById(id); + } + + private void validateTemplateItemExists(Long id) { + if (templateItemMapper.selectById(id) == null) { + throw exception(QC_TEMPLATE_ITEM_NOT_EXISTS); + } + } + + private void validateTemplateItemNotDuplicate(Long id, Long templateId, Long itemId) { + MesQcTemplateItemDO existing = templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId); + if (existing == null) { + return; + } + if (ObjUtil.notEqual(existing.getId(), id)) { + throw exception(QC_TEMPLATE_ITEM_DUPLICATE); + } + } + + @Override + public MesQcTemplateItemDO getTemplateItem(Long id) { + return templateItemMapper.selectById(id); + } + + @Override + public PageResult getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) { + return templateItemMapper.selectPage(pageReqVO); + } + + // ========== 复杂查询 ========== + + @Override + public MesQcTemplateItemDO getTemplateItemByTemplateIdAndItemId(Long templateId, Long itemId) { + return templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId); + } + + @Override + public MesQcTemplateDO getTemplateByItemIdAndType(Long itemId, Integer qcType) { + // 1.1 查出 itemId 关联的所有 templateId + List templateItems = templateItemMapper.selectListByItemId(itemId); + if (CollUtil.isEmpty(templateItems)) { + return null; + } + // 1.2 批量查模板,筛选 types 包含给定 qcType 的第一个 + List templates = templateMapper.selectByIds( + convertSet(templateItems, MesQcTemplateItemDO::getTemplateId)); + // 2. 筛选 types 包含给定 qcType 的第一个 + return findFirst(templates, template -> CollUtil.contains(template.getTypes(), qcType)); + } + + @Override + public MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long itemId, Integer qcType) { + // 1. 查出 itemId 关联的所有 templateId + List templateItems = templateItemMapper.selectListByItemId(itemId); + if (CollUtil.isEmpty(templateItems)) { + throw exception(QC_IQC_NO_TEMPLATE); + } + // 2. 筛选 types 包含 qcType 的模板 + List templates = templateMapper.selectByIds( + convertSet(templateItems, MesQcTemplateItemDO::getTemplateId)); + MesQcTemplateDO matchedTemplate = findFirst(templates, + t -> CollUtil.contains(t.getTypes(), qcType)); + if (matchedTemplate == null) { + throw exception(QC_IQC_NO_TEMPLATE); + } + // 3. 返回对应的 templateItem + return findFirst(templateItems, + item -> Objects.equals(item.getTemplateId(), matchedTemplate.getId())); + } + +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateService.java index ff04297..771131f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateService.java @@ -3,13 +3,7 @@ package cn.iocoder.yudao.module.mes.service.qc.template; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; import jakarta.validation.Valid; import java.util.Collection; @@ -18,6 +12,7 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +// DONE @AI:已拆分成 2 个 service;MesQcTemplateService 专注于质检方案主表的 CRUD;MesQcTemplateDetailService 专注于质检方案的检测指标项和产品关联的 CRUD,以及复杂查询逻辑。 /** * MES 质检方案 Service 接口 * @@ -98,104 +93,4 @@ public interface MesQcTemplateService { */ MesQcTemplateDO validateTemplateExists(Long id); - /** - * 根据方案 ID + 产品 ID 获取产品关联 - * - * @param templateId 方案 ID - * @param itemId 产品 ID - * @return 产品关联(可能为 null) - */ - MesQcTemplateItemDO getTemplateItemByTemplateIdAndItemId(Long templateId, Long itemId); - - /** - * 根据产品物料 ID 和 QC 类型查找检验模板 - * - * 查找逻辑:在 template_item 中找到匹配 itemId 的模板,再校验该模板的 types 包含给定的 qcType - * - * @param itemId 产品物料 ID - * @param qcType 检测种类(枚举 {@link cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum}) - * @return 匹配的检验模板(可能为 null) - */ - MesQcTemplateDO getTemplateByItemIdAndType(Long itemId, Integer qcType); - - // ========== 质检方案-检测指标项 ========== - - /** - * 创建检测指标项 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO createReqVO); - - /** - * 更新检测指标项 - * - * @param updateReqVO 更新信息 - */ - void updateTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO updateReqVO); - - /** - * 删除检测指标项 - * - * @param id 编号 - */ - void deleteTemplateIndicator(Long id); - - /** - * 获得检测指标项 - * - * @param id 编号 - * @return 检测指标项 - */ - MesQcTemplateIndicatorDO getTemplateIndicator(Long id); - - /** - * 获得检测指标项分页 - * - * @param pageReqVO 分页查询 - * @return 检测指标项分页 - */ - PageResult getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO); - - // ========== 质检方案-产品关联 ========== - - /** - * 创建产品关联 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createTemplateItem(@Valid MesQcTemplateItemSaveReqVO createReqVO); - - /** - * 更新产品关联 - * - * @param updateReqVO 更新信息 - */ - void updateTemplateItem(@Valid MesQcTemplateItemSaveReqVO updateReqVO); - - /** - * 删除产品关联 - * - * @param id 编号 - */ - void deleteTemplateItem(Long id); - - /** - * 获得产品关联 - * - * @param id 编号 - * @return 产品关联 - */ - MesQcTemplateItemDO getTemplateItem(Long id); - - /** - * 获得产品关联分页 - * - * @param pageReqVO 分页查询 - * @return 产品关联分页 - */ - PageResult getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO); - } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateServiceImpl.java index ed2fbd6..a8801a5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateServiceImpl.java @@ -6,14 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; -import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicator.MesQcIndicatorMapper; import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateIndicatorMapper; import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateItemMapper; import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateMapper; @@ -25,11 +18,8 @@ import org.springframework.validation.annotation.Validated; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -47,10 +37,6 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { private MesQcTemplateIndicatorMapper templateIndicatorMapper; @Resource private MesQcTemplateItemMapper templateItemMapper; - @Resource - private MesQcIndicatorMapper indicatorMapper; - - // ========== 质检方案主表 ========== @Override public Long createTemplate(MesQcTemplateSaveReqVO createReqVO) { @@ -69,6 +55,7 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { validateTemplateExists(updateReqVO.getId()); // 校验编码唯一 validateTemplateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); + // 更新 MesQcTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateDO.class); templateMapper.updateById(updateObj); @@ -79,6 +66,7 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { public void deleteTemplate(Long id) { // 校验存在 validateTemplateExists(id); + // 删除主表 templateMapper.deleteById(id); // 级联删除检测指标项 @@ -107,26 +95,6 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { } @Override - public MesQcTemplateItemDO getTemplateItemByTemplateIdAndItemId(Long templateId, Long itemId) { - return templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId); - } - - @Override - public MesQcTemplateDO getTemplateByItemIdAndType(Long itemId, Integer qcType) { - // 1.1 查出 itemId 关联的所有 templateId - List templateItems = templateItemMapper.selectListByItemId(itemId); - if (CollUtil.isEmpty(templateItems)) { - return null; - } - // 1.2 批量查模板,筛选 types 包含给定 qcType 的第一个 - List templates = templateMapper.selectByIds( - convertSet(templateItems, MesQcTemplateItemDO::getTemplateId)); - - // 2. 筛选 types 包含给定 qcType 的第一个 - return findFirst(templates, template -> CollUtil.contains(template.getTypes(), qcType)); - } - - @Override public MesQcTemplateDO getTemplate(Long id) { return templateMapper.selectById(id); } @@ -149,108 +117,5 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { return templateMapper.selectByIds(ids); } - // ========== 质检方案-检测指标项 ========== - - @Override - public Long createTemplateIndicator(MesQcTemplateIndicatorSaveReqVO createReqVO) { - // 校验方案存在 - validateTemplateExists(createReqVO.getTemplateId()); - // 插入 - MesQcTemplateIndicatorDO indicator = BeanUtils.toBean(createReqVO, MesQcTemplateIndicatorDO.class); - templateIndicatorMapper.insert(indicator); - return indicator.getId(); - } - - @Override - public void updateTemplateIndicator(MesQcTemplateIndicatorSaveReqVO updateReqVO) { - // 校验存在 - validateTemplateIndicatorExists(updateReqVO.getId()); - // 更新 - MesQcTemplateIndicatorDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateIndicatorDO.class); - templateIndicatorMapper.updateById(updateObj); - } - - @Override - public void deleteTemplateIndicator(Long id) { - // 校验存在 - validateTemplateIndicatorExists(id); - // 删除 - templateIndicatorMapper.deleteById(id); - } - - private void validateTemplateIndicatorExists(Long id) { - if (templateIndicatorMapper.selectById(id) == null) { - throw exception(QC_TEMPLATE_INDICATOR_NOT_EXISTS); - } - } - - @Override - public MesQcTemplateIndicatorDO getTemplateIndicator(Long id) { - return templateIndicatorMapper.selectById(id); - } - - @Override - public PageResult getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) { - return templateIndicatorMapper.selectPage(pageReqVO); - } - - // ========== 质检方案-产品关联 ========== - - @Override - public Long createTemplateItem(MesQcTemplateItemSaveReqVO createReqVO) { - // 校验方案存在 - validateTemplateExists(createReqVO.getTemplateId()); - // 校验产品在此方案中唯一 - validateTemplateItemNotDuplicate(null, createReqVO.getTemplateId(), createReqVO.getItemId()); - // 插入 - MesQcTemplateItemDO item = BeanUtils.toBean(createReqVO, MesQcTemplateItemDO.class); - templateItemMapper.insert(item); - return item.getId(); - } - - @Override - public void updateTemplateItem(MesQcTemplateItemSaveReqVO updateReqVO) { - // 校验存在 - validateTemplateItemExists(updateReqVO.getId()); - // 校验产品在此方案中唯一 - validateTemplateItemNotDuplicate(updateReqVO.getId(), updateReqVO.getTemplateId(), updateReqVO.getItemId()); - // 更新 - MesQcTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateItemDO.class); - templateItemMapper.updateById(updateObj); - } - - @Override - public void deleteTemplateItem(Long id) { - // 校验存在 - validateTemplateItemExists(id); - // 删除 - templateItemMapper.deleteById(id); - } - - private void validateTemplateItemExists(Long id) { - if (templateItemMapper.selectById(id) == null) { - throw exception(QC_TEMPLATE_ITEM_NOT_EXISTS); - } - } - - private void validateTemplateItemNotDuplicate(Long id, Long templateId, Long itemId) { - MesQcTemplateItemDO existing = templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId); - if (existing == null) { - return; - } - if (ObjUtil.notEqual(existing.getId(), id)) { - throw exception(QC_TEMPLATE_ITEM_DUPLICATE); - } - } - - @Override - public MesQcTemplateItemDO getTemplateItem(Long id) { - return templateItemMapper.selectById(id); - } - - @Override - public PageResult getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) { - return templateItemMapper.selectPage(pageReqVO); - } - } +