Commit 8843b7828a59cb048af2733fa04eb2c617ebb74e

Authored by YunaiV
1 parent 2676319a

✨ feat(qc): 重构质检方案服务,拆分为指标项和产品关联服务

将质检方案的服务逻辑拆分为两个独立的服务:MesQcTemplateIndicatorService 和 MesQcTemplateItemService,以提高代码的可维护性和可扩展性。更新相关控制器和实现类,确保功能正常。

BREAKING CHANGE: 质检方案的相关接口已更改,需更新调用方代码
Showing 17 changed files with 251 additions and 197 deletions
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; @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO;
13 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; 13 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
14 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService; 14 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
15 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 15 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateIndicatorService;
16 import io.swagger.v3.oas.annotations.Operation; 16 import io.swagger.v3.oas.annotations.Operation;
17 import io.swagger.v3.oas.annotations.Parameter; 17 import io.swagger.v3.oas.annotations.Parameter;
18 import io.swagger.v3.oas.annotations.tags.Tag; 18 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -37,7 +37,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -37,7 +37,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
37 public class MesQcTemplateIndicatorController { 37 public class MesQcTemplateIndicatorController {
38 38
39 @Resource 39 @Resource
40 - private MesQcTemplateDetailService templateDetailService; 40 + private MesQcTemplateIndicatorService templateIndicatorService;
41 @Resource 41 @Resource
42 private MesQcIndicatorService indicatorService; 42 private MesQcIndicatorService indicatorService;
43 @Resource 43 @Resource
@@ -47,14 +47,14 @@ public class MesQcTemplateIndicatorController { @@ -47,14 +47,14 @@ public class MesQcTemplateIndicatorController {
47 @Operation(summary = "创建质检方案-检测指标项") 47 @Operation(summary = "创建质检方案-检测指标项")
48 @PreAuthorize("@ss.hasPermission('mes:qc-template:create')") 48 @PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
49 public CommonResult<Long> createTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO createReqVO) { 49 public CommonResult<Long> createTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO createReqVO) {
50 - return success(templateDetailService.createTemplateIndicator(createReqVO)); 50 + return success(templateIndicatorService.createTemplateIndicator(createReqVO));
51 } 51 }
52 52
53 @PutMapping("/update") 53 @PutMapping("/update")
54 @Operation(summary = "更新质检方案-检测指标项") 54 @Operation(summary = "更新质检方案-检测指标项")
55 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") 55 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
56 public CommonResult<Boolean> updateTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO updateReqVO) { 56 public CommonResult<Boolean> updateTemplateIndicator(@Valid @RequestBody MesQcTemplateIndicatorSaveReqVO updateReqVO) {
57 - templateDetailService.updateTemplateIndicator(updateReqVO); 57 + templateIndicatorService.updateTemplateIndicator(updateReqVO);
58 return success(true); 58 return success(true);
59 } 59 }
60 60
@@ -63,7 +63,7 @@ public class MesQcTemplateIndicatorController { @@ -63,7 +63,7 @@ public class MesQcTemplateIndicatorController {
63 @Parameter(name = "id", description = "编号", required = true) 63 @Parameter(name = "id", description = "编号", required = true)
64 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") 64 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
65 public CommonResult<Boolean> deleteTemplateIndicator(@RequestParam("id") Long id) { 65 public CommonResult<Boolean> deleteTemplateIndicator(@RequestParam("id") Long id) {
66 - templateDetailService.deleteTemplateIndicator(id); 66 + templateIndicatorService.deleteTemplateIndicator(id);
67 return success(true); 67 return success(true);
68 } 68 }
69 69
@@ -72,7 +72,7 @@ public class MesQcTemplateIndicatorController { @@ -72,7 +72,7 @@ public class MesQcTemplateIndicatorController {
72 @Parameter(name = "id", description = "编号", required = true, example = "1024") 72 @Parameter(name = "id", description = "编号", required = true, example = "1024")
73 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") 73 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
74 public CommonResult<MesQcTemplateIndicatorRespVO> getTemplateIndicator(@RequestParam("id") Long id) { 74 public CommonResult<MesQcTemplateIndicatorRespVO> getTemplateIndicator(@RequestParam("id") Long id) {
75 - MesQcTemplateIndicatorDO indicator = templateDetailService.getTemplateIndicator(id); 75 + MesQcTemplateIndicatorDO indicator = templateIndicatorService.getTemplateIndicator(id);
76 return success(buildIndicatorRespVOList(Collections.singletonList(indicator)).get(0)); 76 return success(buildIndicatorRespVOList(Collections.singletonList(indicator)).get(0));
77 } 77 }
78 78
@@ -81,7 +81,7 @@ public class MesQcTemplateIndicatorController { @@ -81,7 +81,7 @@ public class MesQcTemplateIndicatorController {
81 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") 81 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
82 public CommonResult<PageResult<MesQcTemplateIndicatorRespVO>> getTemplateIndicatorPage( 82 public CommonResult<PageResult<MesQcTemplateIndicatorRespVO>> getTemplateIndicatorPage(
83 @Valid MesQcTemplateIndicatorPageReqVO pageReqVO) { 83 @Valid MesQcTemplateIndicatorPageReqVO pageReqVO) {
84 - PageResult<MesQcTemplateIndicatorDO> pageResult = templateDetailService.getTemplateIndicatorPage(pageReqVO); 84 + PageResult<MesQcTemplateIndicatorDO> pageResult = templateIndicatorService.getTemplateIndicatorPage(pageReqVO);
85 return success(new PageResult<>(buildIndicatorRespVOList(pageResult.getList()), pageResult.getTotal())); 85 return success(new PageResult<>(buildIndicatorRespVOList(pageResult.getList()), pageResult.getTotal()));
86 } 86 }
87 87
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 @@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasur
11 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; 11 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;
12 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 12 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
13 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; 13 import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
14 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 14 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
15 import io.swagger.v3.oas.annotations.Operation; 15 import io.swagger.v3.oas.annotations.Operation;
16 import io.swagger.v3.oas.annotations.Parameter; 16 import io.swagger.v3.oas.annotations.Parameter;
17 import io.swagger.v3.oas.annotations.tags.Tag; 17 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -36,7 +36,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -36,7 +36,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
36 public class MesQcTemplateItemController { 36 public class MesQcTemplateItemController {
37 37
38 @Resource 38 @Resource
39 - private MesQcTemplateDetailService templateDetailService; 39 + private MesQcTemplateItemService templateItemService;
40 @Resource 40 @Resource
41 private MesMdItemService mdItemService; 41 private MesMdItemService mdItemService;
42 @Resource 42 @Resource
@@ -46,14 +46,14 @@ public class MesQcTemplateItemController { @@ -46,14 +46,14 @@ public class MesQcTemplateItemController {
46 @Operation(summary = "创建质检方案-产品关联") 46 @Operation(summary = "创建质检方案-产品关联")
47 @PreAuthorize("@ss.hasPermission('mes:qc-template:create')") 47 @PreAuthorize("@ss.hasPermission('mes:qc-template:create')")
48 public CommonResult<Long> createTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO createReqVO) { 48 public CommonResult<Long> createTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO createReqVO) {
49 - return success(templateDetailService.createTemplateItem(createReqVO)); 49 + return success(templateItemService.createTemplateItem(createReqVO));
50 } 50 }
51 51
52 @PutMapping("/update") 52 @PutMapping("/update")
53 @Operation(summary = "更新质检方案-产品关联") 53 @Operation(summary = "更新质检方案-产品关联")
54 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") 54 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
55 public CommonResult<Boolean> updateTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO updateReqVO) { 55 public CommonResult<Boolean> updateTemplateItem(@Valid @RequestBody MesQcTemplateItemSaveReqVO updateReqVO) {
56 - templateDetailService.updateTemplateItem(updateReqVO); 56 + templateItemService.updateTemplateItem(updateReqVO);
57 return success(true); 57 return success(true);
58 } 58 }
59 59
@@ -62,7 +62,7 @@ public class MesQcTemplateItemController { @@ -62,7 +62,7 @@ public class MesQcTemplateItemController {
62 @Parameter(name = "id", description = "编号", required = true) 62 @Parameter(name = "id", description = "编号", required = true)
63 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')") 63 @PreAuthorize("@ss.hasPermission('mes:qc-template:update')")
64 public CommonResult<Boolean> deleteTemplateItem(@RequestParam("id") Long id) { 64 public CommonResult<Boolean> deleteTemplateItem(@RequestParam("id") Long id) {
65 - templateDetailService.deleteTemplateItem(id); 65 + templateItemService.deleteTemplateItem(id);
66 return success(true); 66 return success(true);
67 } 67 }
68 68
@@ -71,7 +71,7 @@ public class MesQcTemplateItemController { @@ -71,7 +71,7 @@ public class MesQcTemplateItemController {
71 @Parameter(name = "id", description = "编号", required = true, example = "1024") 71 @Parameter(name = "id", description = "编号", required = true, example = "1024")
72 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") 72 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
73 public CommonResult<MesQcTemplateItemRespVO> getTemplateItem(@RequestParam("id") Long id) { 73 public CommonResult<MesQcTemplateItemRespVO> getTemplateItem(@RequestParam("id") Long id) {
74 - MesQcTemplateItemDO item = templateDetailService.getTemplateItem(id); 74 + MesQcTemplateItemDO item = templateItemService.getTemplateItem(id);
75 return success(buildItemRespVOList(Collections.singletonList(item)).get(0)); 75 return success(buildItemRespVOList(Collections.singletonList(item)).get(0));
76 } 76 }
77 77
@@ -80,7 +80,7 @@ public class MesQcTemplateItemController { @@ -80,7 +80,7 @@ public class MesQcTemplateItemController {
80 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") 80 @PreAuthorize("@ss.hasPermission('mes:qc-template:query')")
81 public CommonResult<PageResult<MesQcTemplateItemRespVO>> getTemplateItemPage( 81 public CommonResult<PageResult<MesQcTemplateItemRespVO>> getTemplateItemPage(
82 @Valid MesQcTemplateItemPageReqVO pageReqVO) { 82 @Valid MesQcTemplateItemPageReqVO pageReqVO) {
83 - PageResult<MesQcTemplateItemDO> pageResult = templateDetailService.getTemplateItemPage(pageReqVO); 83 + PageResult<MesQcTemplateItemDO> pageResult = templateItemService.getTemplateItemPage(pageReqVO);
84 return success(new PageResult<>(buildItemRespVOList(pageResult.getList()), pageResult.getTotal())); 84 return success(new PageResult<>(buildItemRespVOList(pageResult.getList()), pageResult.getTotal()));
85 } 85 }
86 86
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/template/MesQcTemplateIndicatorMapper.java
@@ -9,7 +9,6 @@ import org.apache.ibatis.annotations.Mapper; @@ -9,7 +9,6 @@ import org.apache.ibatis.annotations.Mapper;
9 9
10 import java.util.List; 10 import java.util.List;
11 11
12 -// TODO @AI:MesQcTemplateIndicatorService 独立一个;然后非 MesQcTemplateIndicatorService 调用 mapper 的地方,都替换下;  
13 /** 12 /**
14 * MES 质检方案-检测指标项 Mapper 13 * MES 质检方案-检测指标项 Mapper
15 * 14 *
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java
@@ -25,7 +25,7 @@ import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService; @@ -25,7 +25,7 @@ import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService;
25 import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductService; 25 import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductService;
26 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; 26 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
27 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 27 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
28 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 28 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
29 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 29 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
30 import jakarta.annotation.Resource; 30 import jakarta.annotation.Resource;
31 import org.springframework.context.annotation.Lazy; 31 import org.springframework.context.annotation.Lazy;
@@ -55,7 +55,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { @@ -55,7 +55,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService {
55 private MesQcIpqcMapper ipqcMapper; 55 private MesQcIpqcMapper ipqcMapper;
56 56
57 @Resource 57 @Resource
58 - private MesQcTemplateDetailService templateDetailService; 58 + private MesQcTemplateItemService templateItemService;
59 @Resource 59 @Resource
60 private MesQcIpqcLineService ipqcLineService; 60 private MesQcIpqcLineService ipqcLineService;
61 @Resource 61 @Resource
@@ -91,7 +91,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { @@ -91,7 +91,7 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService {
91 // 1.2 校验工单存在 91 // 1.2 校验工单存在
92 MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId()); 92 MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
93 // 1.3 根据产品 + 检验类型自动匹配模板 93 // 1.3 根据产品 + 检验类型自动匹配模板
94 - MesQcTemplateItemDO templateItem = templateDetailService.getRequiredTemplateByItemIdAndType( 94 + MesQcTemplateItemDO templateItem = templateItemService.getRequiredTemplateByItemIdAndType(
95 workOrder.getProductId(), MesQcTypeEnum.IPQC.getType()); 95 workOrder.getProductId(), MesQcTypeEnum.IPQC.getType());
96 Long templateId = templateItem.getTemplateId(); 96 Long templateId = templateItem.getTemplateId();
97 // 1.4 获取来源单据编号 97 // 1.4 获取来源单据编号
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcServiceImpl.java
@@ -18,7 +18,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; @@ -18,7 +18,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
18 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 18 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
19 import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService; 19 import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService;
20 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 20 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
21 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 21 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
22 import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; 22 import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService;
23 import cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt.MesWmOutsourceReceiptService; 23 import cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt.MesWmOutsourceReceiptService;
24 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 24 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -49,7 +49,7 @@ public class MesQcIqcServiceImpl implements MesQcIqcService { @@ -49,7 +49,7 @@ public class MesQcIqcServiceImpl implements MesQcIqcService {
49 private MesQcIqcMapper iqcMapper; 49 private MesQcIqcMapper iqcMapper;
50 50
51 @Resource 51 @Resource
52 - private MesQcTemplateDetailService templateDetailService; 52 + private MesQcTemplateItemService templateItemService;
53 @Resource 53 @Resource
54 private MesQcIqcLineService iqcLineService; 54 private MesQcIqcLineService iqcLineService;
55 @Resource 55 @Resource
@@ -75,7 +75,7 @@ public class MesQcIqcServiceImpl implements MesQcIqcService { @@ -75,7 +75,7 @@ public class MesQcIqcServiceImpl implements MesQcIqcService {
75 String sourceDocCode = validateAndGetSourceDocCode( 75 String sourceDocCode = validateAndGetSourceDocCode(
76 createReqVO.getSourceDocType(), createReqVO.getSourceDocId(), createReqVO.getSourceLineId()); 76 createReqVO.getSourceDocType(), createReqVO.getSourceDocId(), createReqVO.getSourceLineId());
77 // 1.3 通过 itemId + IQC 类型自动查找模板 77 // 1.3 通过 itemId + IQC 类型自动查找模板
78 - MesQcTemplateItemDO templateItem = templateDetailService.getRequiredTemplateByItemIdAndType( 78 + MesQcTemplateItemDO templateItem = templateItemService.getRequiredTemplateByItemIdAndType(
79 createReqVO.getItemId(), MesQcTypeEnum.IQC.getType()); 79 createReqVO.getItemId(), MesQcTypeEnum.IQC.getType());
80 Long templateId = templateItem.getTemplateId(); 80 Long templateId = templateItem.getTemplateId();
81 81
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImpl.java
@@ -16,7 +16,7 @@ import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; @@ -16,7 +16,7 @@ import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
16 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; 16 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService;
17 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 17 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
18 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 18 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
19 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 19 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
20 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService; 20 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService;
21 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesService; 21 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesService;
22 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO; 22 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
@@ -48,7 +48,7 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { @@ -48,7 +48,7 @@ public class MesQcOqcServiceImpl implements MesQcOqcService {
48 @Resource 48 @Resource
49 private MesQcOqcMapper oqcMapper; 49 private MesQcOqcMapper oqcMapper;
50 @Resource 50 @Resource
51 - private MesQcTemplateDetailService templateDetailService; 51 + private MesQcTemplateItemService templateItemService;
52 @Resource 52 @Resource
53 private MesQcOqcLineService oqcLineService; 53 private MesQcOqcLineService oqcLineService;
54 @Resource 54 @Resource
@@ -79,7 +79,7 @@ public class MesQcOqcServiceImpl implements MesQcOqcService { @@ -79,7 +79,7 @@ public class MesQcOqcServiceImpl implements MesQcOqcService {
79 String sourceDocCode = validateAndGetSourceDocCode( 79 String sourceDocCode = validateAndGetSourceDocCode(
80 createReqVO.getSourceDocType(), createReqVO.getSourceLineId()); 80 createReqVO.getSourceDocType(), createReqVO.getSourceLineId());
81 // 1.3 根据产品 + 检验类型自动匹配模板 81 // 1.3 根据产品 + 检验类型自动匹配模板
82 - MesQcTemplateItemDO templateItem = templateDetailService.getRequiredTemplateByItemIdAndType( 82 + MesQcTemplateItemDO templateItem = templateItemService.getRequiredTemplateByItemIdAndType(
83 createReqVO.getItemId(), MesQcTypeEnum.OQC.getType()); 83 createReqVO.getItemId(), MesQcTypeEnum.OQC.getType());
84 Long templateId = templateItem.getTemplateId(); 84 Long templateId = templateItem.getTemplateId();
85 85
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java
@@ -17,7 +17,7 @@ import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; @@ -17,7 +17,7 @@ import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
17 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 17 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
18 import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueService; 18 import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueService;
19 import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService; 19 import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesService;
20 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 20 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
21 import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService; 21 import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService;
22 import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesLineService; 22 import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesLineService;
23 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 23 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -47,7 +47,7 @@ public class MesQcRqcServiceImpl implements MesQcRqcService { @@ -47,7 +47,7 @@ public class MesQcRqcServiceImpl implements MesQcRqcService {
47 @Resource 47 @Resource
48 private MesQcRqcMapper rqcMapper; 48 private MesQcRqcMapper rqcMapper;
49 @Resource 49 @Resource
50 - private MesQcTemplateDetailService templateDetailService; 50 + private MesQcTemplateItemService templateItemService;
51 @Resource 51 @Resource
52 private MesQcRqcLineService rqcLineService; 52 private MesQcRqcLineService rqcLineService;
53 @Resource 53 @Resource
@@ -78,7 +78,7 @@ public class MesQcRqcServiceImpl implements MesQcRqcService { @@ -78,7 +78,7 @@ public class MesQcRqcServiceImpl implements MesQcRqcService {
78 // 1.1 校验数据 78 // 1.1 校验数据
79 validateRqcSaveData(createReqVO); 79 validateRqcSaveData(createReqVO);
80 // 1.2 根据物料 + 检验类型自动匹配模板 80 // 1.2 根据物料 + 检验类型自动匹配模板
81 - MesQcTemplateItemDO templateItem = templateDetailService.getRequiredTemplateByItemIdAndType( 81 + MesQcTemplateItemDO templateItem = templateItemService.getRequiredTemplateByItemIdAndType(
82 createReqVO.getItemId(), createReqVO.getType()); 82 createReqVO.getItemId(), createReqVO.getType());
83 Long templateId = templateItem.getTemplateId(); 83 Long templateId = templateItem.getTemplateId();
84 // 1.3 获取来源单据编号 84 // 1.3 获取来源单据编号
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateIndicatorService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.qc.template;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +/**
  10 + * MES 质检方案-检测指标项 Service 接口
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +public interface MesQcTemplateIndicatorService {
  15 +
  16 + /**
  17 + * 创建检测指标项
  18 + *
  19 + * @param createReqVO 创建信息
  20 + * @return 编号
  21 + */
  22 + Long createTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO createReqVO);
  23 +
  24 + /**
  25 + * 更新检测指标项
  26 + *
  27 + * @param updateReqVO 更新信息
  28 + */
  29 + void updateTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO updateReqVO);
  30 +
  31 + /**
  32 + * 删除检测指标项
  33 + *
  34 + * @param id 编号
  35 + */
  36 + void deleteTemplateIndicator(Long id);
  37 +
  38 + /**
  39 + * 获得检测指标项
  40 + *
  41 + * @param id 编号
  42 + * @return 检测指标项
  43 + */
  44 + MesQcTemplateIndicatorDO getTemplateIndicator(Long id);
  45 +
  46 + /**
  47 + * 获得检测指标项分页
  48 + *
  49 + * @param pageReqVO 分页查询
  50 + * @return 检测指标项分页
  51 + */
  52 + PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO);
  53 +
  54 + /**
  55 + * 根据方案编号删除所有检测指标项
  56 + *
  57 + * @param templateId 质检方案编号
  58 + */
  59 + void deleteTemplateIndicatorByTemplateId(Long templateId);
  60 +
  61 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailServiceImpl.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateIndicatorServiceImpl.java
1 package cn.iocoder.yudao.module.mes.service.qc.template; 1 package cn.iocoder.yudao.module.mes.service.qc.template;
2 2
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.util.ObjUtil;  
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; 5 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
8 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; 6 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
9 -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;  
10 -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;  
11 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO;  
12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO; 7 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO;
13 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;  
14 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.indicator.MesQcIndicatorMapper;  
15 import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateIndicatorMapper; 8 import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateIndicatorMapper;
16 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateItemMapper;  
17 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateMapper;  
18 import jakarta.annotation.Resource; 9 import jakarta.annotation.Resource;
19 import org.springframework.context.annotation.Lazy; 10 import org.springframework.context.annotation.Lazy;
20 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
21 import org.springframework.validation.annotation.Validated; 12 import org.springframework.validation.annotation.Validated;
22 13
23 -import java.util.List;  
24 -import java.util.Objects;  
25 -  
26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 14 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
27 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;  
28 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst;  
29 -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 15 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.QC_TEMPLATE_INDICATOR_NOT_EXISTS;
30 16
31 /** 17 /**
32 - * MES 质检方案明细 Service 实现类  
33 - *  
34 - * 专注于质检方案的检测指标项和产品关联的 CRUD,以及复杂查询逻辑 18 + * MES 质检方案-检测指标项 Service 实现类
35 * 19 *
36 * @author 芋道源码 20 * @author 芋道源码
37 */ 21 */
38 @Service 22 @Service
39 @Validated 23 @Validated
40 -public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailService { 24 +public class MesQcTemplateIndicatorServiceImpl implements MesQcTemplateIndicatorService {
41 25
42 @Resource 26 @Resource
43 - private MesQcTemplateMapper templateMapper;  
44 - @Resource  
45 private MesQcTemplateIndicatorMapper templateIndicatorMapper; 27 private MesQcTemplateIndicatorMapper templateIndicatorMapper;
46 - @Resource  
47 - private MesQcTemplateItemMapper templateItemMapper;  
48 - @Resource  
49 - private MesQcIndicatorMapper indicatorMapper;  
50 28
51 @Resource 29 @Resource
52 @Lazy 30 @Lazy
53 private MesQcTemplateService templateService; 31 private MesQcTemplateService templateService;
54 32
55 - // ========== 质检方案-检测指标项 ==========  
56 -  
57 @Override 33 @Override
58 public Long createTemplateIndicator(MesQcTemplateIndicatorSaveReqVO createReqVO) { 34 public Long createTemplateIndicator(MesQcTemplateIndicatorSaveReqVO createReqVO) {
59 // 校验方案存在 35 // 校验方案存在
60 templateService.validateTemplateExists(createReqVO.getTemplateId()); 36 templateService.validateTemplateExists(createReqVO.getTemplateId());
  37 +
61 // 插入 38 // 插入
62 MesQcTemplateIndicatorDO indicator = BeanUtils.toBean(createReqVO, MesQcTemplateIndicatorDO.class); 39 MesQcTemplateIndicatorDO indicator = BeanUtils.toBean(createReqVO, MesQcTemplateIndicatorDO.class);
63 templateIndicatorMapper.insert(indicator); 40 templateIndicatorMapper.insert(indicator);
@@ -68,6 +45,7 @@ public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailServic @@ -68,6 +45,7 @@ public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailServic
68 public void updateTemplateIndicator(MesQcTemplateIndicatorSaveReqVO updateReqVO) { 45 public void updateTemplateIndicator(MesQcTemplateIndicatorSaveReqVO updateReqVO) {
69 // 校验存在 46 // 校验存在
70 validateTemplateIndicatorExists(updateReqVO.getId()); 47 validateTemplateIndicatorExists(updateReqVO.getId());
  48 +
71 // 更新 49 // 更新
72 MesQcTemplateIndicatorDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateIndicatorDO.class); 50 MesQcTemplateIndicatorDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateIndicatorDO.class);
73 templateIndicatorMapper.updateById(updateObj); 51 templateIndicatorMapper.updateById(updateObj);
@@ -97,85 +75,9 @@ public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailServic @@ -97,85 +75,9 @@ public class MesQcTemplateDetailServiceImpl implements MesQcTemplateDetailServic
97 return templateIndicatorMapper.selectPage(pageReqVO); 75 return templateIndicatorMapper.selectPage(pageReqVO);
98 } 76 }
99 77
100 - // ========== 质检方案-产品关联 ==========  
101 -  
102 @Override 78 @Override
103 - public Long createTemplateItem(MesQcTemplateItemSaveReqVO createReqVO) {  
104 - // 校验方案存在  
105 - templateService.validateTemplateExists(createReqVO.getTemplateId());  
106 - // 校验产品在此方案中唯一  
107 - validateTemplateItemNotDuplicate(null, createReqVO.getTemplateId(), createReqVO.getItemId());  
108 - // 插入  
109 - MesQcTemplateItemDO item = BeanUtils.toBean(createReqVO, MesQcTemplateItemDO.class);  
110 - templateItemMapper.insert(item);  
111 - return item.getId();  
112 - }  
113 -  
114 - @Override  
115 - public void updateTemplateItem(MesQcTemplateItemSaveReqVO updateReqVO) {  
116 - // 校验存在  
117 - validateTemplateItemExists(updateReqVO.getId());  
118 - // 校验产品在此方案中唯一  
119 - validateTemplateItemNotDuplicate(updateReqVO.getId(), updateReqVO.getTemplateId(), updateReqVO.getItemId());  
120 - // 更新  
121 - MesQcTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateItemDO.class);  
122 - templateItemMapper.updateById(updateObj);  
123 - }  
124 -  
125 - @Override  
126 - public void deleteTemplateItem(Long id) {  
127 - // 校验存在  
128 - validateTemplateItemExists(id);  
129 - // 删除  
130 - templateItemMapper.deleteById(id);  
131 - }  
132 -  
133 - private void validateTemplateItemExists(Long id) {  
134 - if (templateItemMapper.selectById(id) == null) {  
135 - throw exception(QC_TEMPLATE_ITEM_NOT_EXISTS);  
136 - }  
137 - }  
138 -  
139 - private void validateTemplateItemNotDuplicate(Long id, Long templateId, Long itemId) {  
140 - MesQcTemplateItemDO existing = templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId);  
141 - if (existing == null) {  
142 - return;  
143 - }  
144 - if (ObjUtil.notEqual(existing.getId(), id)) {  
145 - throw exception(QC_TEMPLATE_ITEM_DUPLICATE);  
146 - }  
147 - }  
148 -  
149 - @Override  
150 - public MesQcTemplateItemDO getTemplateItem(Long id) {  
151 - return templateItemMapper.selectById(id);  
152 - }  
153 -  
154 - @Override  
155 - public PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {  
156 - return templateItemMapper.selectPage(pageReqVO);  
157 - }  
158 -  
159 - // ========== 复杂查询 ==========  
160 -  
161 - @Override  
162 - public MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long itemId, Integer qcType) {  
163 - // 1. 查出 itemId 关联的所有 templateId  
164 - List<MesQcTemplateItemDO> templateItems = templateItemMapper.selectListByItemId(itemId);  
165 - if (CollUtil.isEmpty(templateItems)) {  
166 - throw exception(QC_NO_TEMPLATE);  
167 - }  
168 - // 2. 筛选 types 包含 qcType 的模板  
169 - List<MesQcTemplateDO> templates = templateMapper.selectByIds(  
170 - convertSet(templateItems, MesQcTemplateItemDO::getTemplateId));  
171 - MesQcTemplateDO matchedTemplate = findFirst(templates,  
172 - t -> CollUtil.contains(t.getTypes(), qcType));  
173 - if (matchedTemplate == null) {  
174 - throw exception(QC_NO_TEMPLATE);  
175 - }  
176 - // 3. 返回对应的 templateItem  
177 - return findFirst(templateItems,  
178 - item -> Objects.equals(item.getTemplateId(), matchedTemplate.getId())); 79 + public void deleteTemplateIndicatorByTemplateId(Long templateId) {
  80 + templateIndicatorMapper.deleteByTemplateId(templateId);
179 } 81 }
180 82
181 } 83 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateDetailService.java renamed to yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemService.java
1 package cn.iocoder.yudao.module.mes.service.qc.template; 1 package cn.iocoder.yudao.module.mes.service.qc.template;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;  
5 -import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;  
6 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; 4 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
7 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; 5 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
8 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateIndicatorDO;  
9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO; 6 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;
10 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; 7 import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
11 import jakarta.validation.Valid; 8 import jakarta.validation.Valid;
12 9
13 -// TODO @AI:还是按照表,拆分。一个 MesQcTemplateIndicatorDO、MesQcTemplateItemDO;(涉及大规模重构,暂不处理)  
14 /** 10 /**
15 - * MES 质检方案明细 Service 接口  
16 - *  
17 - * 专注于质检方案的检测指标项和产品关联的 CRUD,以及复杂查询逻辑 11 + * MES 质检方案-产品关联 Service 接口
18 * 12 *
19 * @author 芋道源码 13 * @author 芋道源码
20 */ 14 */
21 -public interface MesQcTemplateDetailService {  
22 -  
23 - /**  
24 - * 创建检测指标项  
25 - *  
26 - * @param createReqVO 创建信息  
27 - * @return 编号  
28 - */  
29 - Long createTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO createReqVO);  
30 -  
31 - /**  
32 - * 更新检测指标项  
33 - *  
34 - * @param updateReqVO 更新信息  
35 - */  
36 - void updateTemplateIndicator(@Valid MesQcTemplateIndicatorSaveReqVO updateReqVO);  
37 -  
38 - /**  
39 - * 删除检测指标项  
40 - *  
41 - * @param id 编号  
42 - */  
43 - void deleteTemplateIndicator(Long id);  
44 -  
45 - /**  
46 - * 获得检测指标项  
47 - *  
48 - * @param id 编号  
49 - * @return 检测指标项  
50 - */  
51 - MesQcTemplateIndicatorDO getTemplateIndicator(Long id);  
52 -  
53 - /**  
54 - * 获得检测指标项分页  
55 - *  
56 - * @param pageReqVO 分页查询  
57 - * @return 检测指标项分页  
58 - */  
59 - PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO);  
60 -  
61 - // ========== 质检方案-产品关联 ========== 15 +public interface MesQcTemplateItemService {
62 16
63 /** 17 /**
64 * 创建产品关联 18 * 创建产品关联
@@ -99,6 +53,13 @@ public interface MesQcTemplateDetailService { @@ -99,6 +53,13 @@ public interface MesQcTemplateDetailService {
99 PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO); 53 PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO);
100 54
101 /** 55 /**
  56 + * 根据方案编号删除所有产品关联
  57 + *
  58 + * @param templateId 质检方案编号
  59 + */
  60 + void deleteTemplateItemByTemplateId(Long templateId);
  61 +
  62 + /**
102 * 根据产品物料 ID 和 QC 类型查找检验模板的产品关联(必须存在,否则抛异常) 63 * 根据产品物料 ID 和 QC 类型查找检验模板的产品关联(必须存在,否则抛异常)
103 * 64 *
104 * @param itemId 产品物料 ID 65 * @param itemId 产品物料 ID
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mes.service.qc.template;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjUtil;
  5 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
  10 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;
  12 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateItemMapper;
  13 +import jakarta.annotation.Resource;
  14 +import org.springframework.context.annotation.Lazy;
  15 +import org.springframework.stereotype.Service;
  16 +import org.springframework.validation.annotation.Validated;
  17 +
  18 +import java.util.List;
  19 +import java.util.Objects;
  20 +
  21 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  22 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  23 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst;
  24 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
  25 +
  26 +/**
  27 + * MES 质检方案-产品关联 Service 实现类
  28 + *
  29 + * @author 芋道源码
  30 + */
  31 +@Service
  32 +@Validated
  33 +public class MesQcTemplateItemServiceImpl implements MesQcTemplateItemService {
  34 +
  35 + @Resource
  36 + private MesQcTemplateItemMapper templateItemMapper;
  37 +
  38 + @Resource
  39 + @Lazy
  40 + private MesQcTemplateService templateService;
  41 +
  42 + @Override
  43 + public Long createTemplateItem(MesQcTemplateItemSaveReqVO createReqVO) {
  44 + // 校验保存参数
  45 + validateTemplateItemSaveData(createReqVO);
  46 +
  47 + // 插入
  48 + MesQcTemplateItemDO item = BeanUtils.toBean(createReqVO, MesQcTemplateItemDO.class);
  49 + templateItemMapper.insert(item);
  50 + return item.getId();
  51 + }
  52 +
  53 + @Override
  54 + public void updateTemplateItem(MesQcTemplateItemSaveReqVO updateReqVO) {
  55 + // 校验保存参数
  56 + validateTemplateItemSaveData(updateReqVO);
  57 +
  58 + // 更新
  59 + MesQcTemplateItemDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateItemDO.class);
  60 + templateItemMapper.updateById(updateObj);
  61 + }
  62 +
  63 + private void validateTemplateItemSaveData(MesQcTemplateItemSaveReqVO saveReqVO) {
  64 + if (saveReqVO.getId() != null) {
  65 + // 校验存在
  66 + validateTemplateItemExists(saveReqVO.getId());
  67 + }
  68 + // 校验方案存在
  69 + templateService.validateTemplateExists(saveReqVO.getTemplateId());
  70 + // 校验产品在此方案中唯一
  71 + validateTemplateItemNotDuplicate(saveReqVO.getId(), saveReqVO.getTemplateId(), saveReqVO.getItemId());
  72 + }
  73 +
  74 + @Override
  75 + public void deleteTemplateItem(Long id) {
  76 + // 校验存在
  77 + validateTemplateItemExists(id);
  78 + // 删除
  79 + templateItemMapper.deleteById(id);
  80 + }
  81 +
  82 + private void validateTemplateItemExists(Long id) {
  83 + if (templateItemMapper.selectById(id) == null) {
  84 + throw exception(QC_TEMPLATE_ITEM_NOT_EXISTS);
  85 + }
  86 + }
  87 +
  88 + private void validateTemplateItemNotDuplicate(Long id, Long templateId, Long itemId) {
  89 + MesQcTemplateItemDO existing = templateItemMapper.selectByTemplateIdAndItemId(templateId, itemId);
  90 + if (existing == null) {
  91 + return;
  92 + }
  93 + if (ObjUtil.notEqual(existing.getId(), id)) {
  94 + throw exception(QC_TEMPLATE_ITEM_DUPLICATE);
  95 + }
  96 + }
  97 +
  98 + @Override
  99 + public MesQcTemplateItemDO getTemplateItem(Long id) {
  100 + return templateItemMapper.selectById(id);
  101 + }
  102 +
  103 + @Override
  104 + public PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {
  105 + return templateItemMapper.selectPage(pageReqVO);
  106 + }
  107 +
  108 + @Override
  109 + public void deleteTemplateItemByTemplateId(Long templateId) {
  110 + templateItemMapper.deleteByTemplateId(templateId);
  111 + }
  112 +
  113 + @Override
  114 + public MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long itemId, Integer qcType) {
  115 + // 1. 查出 itemId 关联的所有 templateItem
  116 + List<MesQcTemplateItemDO> templateItems = templateItemMapper.selectListByItemId(itemId);
  117 + if (CollUtil.isEmpty(templateItems)) {
  118 + throw exception(QC_NO_TEMPLATE);
  119 + }
  120 + // 2. 筛选 types 包含 qcType 且状态为开启的模板
  121 + List<MesQcTemplateDO> templates = templateService.getTemplateList(
  122 + convertSet(templateItems, MesQcTemplateItemDO::getTemplateId));
  123 + MesQcTemplateDO matchedTemplate = findFirst(templates,
  124 + t -> CommonStatusEnum.isEnable(t.getStatus()) && CollUtil.contains(t.getTypes(), qcType));
  125 + if (matchedTemplate == null) {
  126 + throw exception(QC_NO_TEMPLATE);
  127 + }
  128 + // 3. 返回对应的 templateItem
  129 + return findFirst(templateItems,
  130 + item -> Objects.equals(item.getTemplateId(), matchedTemplate.getId()));
  131 + }
  132 +
  133 +}
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateService.java
@@ -12,7 +12,6 @@ import java.util.Map; @@ -12,7 +12,6 @@ import java.util.Map;
12 12
13 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; 13 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
14 14
15 -// DONE @AI:已拆分成 2 个 service;MesQcTemplateService 专注于质检方案主表的 CRUD;MesQcTemplateDetailService 专注于质检方案的检测指标项和产品关联的 CRUD,以及复杂查询逻辑。  
16 /** 15 /**
17 * MES 质检方案 Service 接口 16 * MES 质检方案 Service 接口
18 * 17 *
@@ -20,8 +19,6 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. @@ -20,8 +19,6 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
20 */ 19 */
21 public interface MesQcTemplateService { 20 public interface MesQcTemplateService {
22 21
23 - // ========== 质检方案主表 ==========  
24 -  
25 /** 22 /**
26 * 创建质检方案 23 * 创建质检方案
27 * 24 *
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateServiceImpl.java
@@ -7,10 +7,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -7,10 +7,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
8 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; 8 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO;
10 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateIndicatorMapper;  
11 -import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateItemMapper;  
12 import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateMapper; 10 import cn.iocoder.yudao.module.mes.dal.mysql.qc.template.MesQcTemplateMapper;
13 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
  12 +import org.springframework.context.annotation.Lazy;
14 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
15 import org.springframework.transaction.annotation.Transactional; 14 import org.springframework.transaction.annotation.Transactional;
16 import org.springframework.validation.annotation.Validated; 15 import org.springframework.validation.annotation.Validated;
@@ -34,9 +33,11 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -34,9 +33,11 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
34 @Resource 33 @Resource
35 private MesQcTemplateMapper templateMapper; 34 private MesQcTemplateMapper templateMapper;
36 @Resource 35 @Resource
37 - private MesQcTemplateIndicatorMapper templateIndicatorMapper; 36 + @Lazy
  37 + private MesQcTemplateIndicatorService templateIndicatorService;
38 @Resource 38 @Resource
39 - private MesQcTemplateItemMapper templateItemMapper; 39 + @Lazy
  40 + private MesQcTemplateItemService templateItemService;
40 41
41 @Override 42 @Override
42 public Long createTemplate(MesQcTemplateSaveReqVO createReqVO) { 43 public Long createTemplate(MesQcTemplateSaveReqVO createReqVO) {
@@ -70,9 +71,9 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -70,9 +71,9 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
70 // 删除主表 71 // 删除主表
71 templateMapper.deleteById(id); 72 templateMapper.deleteById(id);
72 // 级联删除检测指标项 73 // 级联删除检测指标项
73 - templateIndicatorMapper.deleteByTemplateId(id); 74 + templateIndicatorService.deleteTemplateIndicatorByTemplateId(id);
74 // 级联删除产品关联 75 // 级联删除产品关联
75 - templateItemMapper.deleteByTemplateId(id); 76 + templateItemService.deleteTemplateItemByTemplateId(id);
76 } 77 }
77 78
78 @Override 79 @Override
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImplTest.java
@@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationServic @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationServic
10 import cn.iocoder.yudao.module.mes.service.pro.feedback.MesProFeedbackService; 10 import cn.iocoder.yudao.module.mes.service.pro.feedback.MesProFeedbackService;
11 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; 11 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
12 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 12 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
13 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 13 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
15 import jakarta.annotation.Resource; 15 import jakarta.annotation.Resource;
16 import org.junit.jupiter.api.Test; 16 import org.junit.jupiter.api.Test;
@@ -39,7 +39,7 @@ public class MesQcIpqcServiceImplTest extends BaseDbUnitTest { @@ -39,7 +39,7 @@ public class MesQcIpqcServiceImplTest extends BaseDbUnitTest {
39 private MesQcIpqcMapper ipqcMapper; 39 private MesQcIpqcMapper ipqcMapper;
40 40
41 @MockitoBean 41 @MockitoBean
42 - private MesQcTemplateDetailService templateDetailService; 42 + private MesQcTemplateItemService templateItemService;
43 @MockitoBean 43 @MockitoBean
44 private MesQcIpqcLineService ipqcLineService; 44 private MesQcIpqcLineService ipqcLineService;
45 @MockitoBean 45 @MockitoBean
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/iqc/MesQcIqcServiceImplTest.java
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum; @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
8 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 8 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
9 import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService; 9 import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService;
10 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 10 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
11 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 11 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
12 import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; 12 import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService;
13 import cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt.MesWmOutsourceReceiptService; 13 import cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt.MesWmOutsourceReceiptService;
14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -52,7 +52,7 @@ public class MesQcIqcServiceImplTest extends BaseDbUnitTest { @@ -52,7 +52,7 @@ public class MesQcIqcServiceImplTest extends BaseDbUnitTest {
52 @MockitoBean 52 @MockitoBean
53 private MesMdItemService itemService; 53 private MesMdItemService itemService;
54 @MockitoBean 54 @MockitoBean
55 - private MesQcTemplateDetailService templateDetailService; 55 + private MesQcTemplateItemService templateItemService;
56 @MockitoBean 56 @MockitoBean
57 private AdminUserApi adminUserApi; 57 private AdminUserApi adminUserApi;
58 58
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcServiceImplTest.java
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum; @@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
8 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; 8 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService;
9 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 9 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
10 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 10 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
11 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 11 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
12 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService; 12 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService;
13 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesService; 13 import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesService;
14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -50,7 +50,7 @@ public class MesQcOqcServiceImplTest extends BaseDbUnitTest { @@ -50,7 +50,7 @@ public class MesQcOqcServiceImplTest extends BaseDbUnitTest {
50 @MockitoBean 50 @MockitoBean
51 private MesMdItemService itemService; 51 private MesMdItemService itemService;
52 @MockitoBean 52 @MockitoBean
53 - private MesQcTemplateDetailService templateDetailService; 53 + private MesQcTemplateItemService templateItemService;
54 @MockitoBean 54 @MockitoBean
55 private MesQcDefectRecordService defectRecordService; 55 private MesQcDefectRecordService defectRecordService;
56 @MockitoBean 56 @MockitoBean
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImplTest.java
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
7 import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum; 7 import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
8 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 8 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
9 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService; 9 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
10 -import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateDetailService; 10 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
11 import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService; 11 import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService;
12 import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesLineService; 12 import cn.iocoder.yudao.module.mes.service.wm.returnsales.MesWmReturnSalesLineService;
13 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 13 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -51,7 +51,7 @@ public class MesQcRqcServiceImplTest extends BaseDbUnitTest { @@ -51,7 +51,7 @@ public class MesQcRqcServiceImplTest extends BaseDbUnitTest {
51 @MockitoBean 51 @MockitoBean
52 private MesMdItemService itemService; 52 private MesMdItemService itemService;
53 @MockitoBean 53 @MockitoBean
54 - private MesQcTemplateDetailService templateDetailService; 54 + private MesQcTemplateItemService templateItemService;
55 @MockitoBean 55 @MockitoBean
56 private MesQcDefectRecordService defectRecordService; 56 private MesQcDefectRecordService defectRecordService;
57 @MockitoBean 57 @MockitoBean