Commit 6e5183580306c14acbda4d017633bf5c1a413396

Authored by YunaiV
1 parent 6d4dc2bd

feat(mes): update IPQC type to Integer and add source document fields in RQC

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/vo/MesQcIpqcPageReqVO.java
@@ -20,8 +20,8 @@ public class MesQcIpqcPageReqVO extends PageParam { @@ -20,8 +20,8 @@ public class MesQcIpqcPageReqVO extends PageParam {
20 @Schema(description = "检验单编号", example = "IPQC2025") 20 @Schema(description = "检验单编号", example = "IPQC2025")
21 private String code; 21 private String code;
22 22
23 - @Schema(description = "IPQC 检验类型", example = "IPQC")  
24 - private String type; 23 + @Schema(description = "IPQC 检验类型", example = "1")
  24 + private Integer type;
25 25
26 @Schema(description = "生产工单 ID", example = "10") 26 @Schema(description = "生产工单 ID", example = "10")
27 private Long workOrderId; 27 private Long workOrderId;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/vo/MesQcIpqcRespVO.java
@@ -25,9 +25,9 @@ public class MesQcIpqcRespVO { @@ -25,9 +25,9 @@ public class MesQcIpqcRespVO {
25 @ExcelProperty("检验单名称") 25 @ExcelProperty("检验单名称")
26 private String name; 26 private String name;
27 27
28 - @Schema(description = "IPQC 检验类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPQC") 28 + @Schema(description = "IPQC 检验类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
29 @ExcelProperty("检验类型") 29 @ExcelProperty("检验类型")
30 - private String type; 30 + private Integer type;
31 31
32 @Schema(description = "检验模板 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") 32 @Schema(description = "检验模板 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
33 private Long templateId; 33 private Long templateId;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/vo/MesQcIpqcSaveReqVO.java
@@ -23,9 +23,9 @@ public class MesQcIpqcSaveReqVO { @@ -23,9 +23,9 @@ public class MesQcIpqcSaveReqVO {
23 @NotEmpty(message = "检验单名称不能为空") 23 @NotEmpty(message = "检验单名称不能为空")
24 private String name; 24 private String name;
25 25
26 - @Schema(description = "IPQC 检验类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPQC")  
27 - @NotEmpty(message = "检验类型不能为空")  
28 - private String type; 26 + @Schema(description = "IPQC 检验类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  27 + @NotNull(message = "检验类型不能为空")
  28 + private Integer type;
29 29
30 @Schema(description = "检验模板 ID", example = "100") 30 @Schema(description = "检验模板 ID", example = "100")
31 private Long templateId; 31 private Long templateId;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/vo/MesQcRqcPageReqVO.java
@@ -20,6 +20,12 @@ public class MesQcRqcPageReqVO extends PageParam { @@ -20,6 +20,12 @@ public class MesQcRqcPageReqVO extends PageParam {
20 @Schema(description = "检验单编号", example = "RQC2025") 20 @Schema(description = "检验单编号", example = "RQC2025")
21 private String code; 21 private String code;
22 22
  23 + @Schema(description = "来源单据类型", example = "RTISSUE")
  24 + private String sourceDocType;
  25 +
  26 + @Schema(description = "来源单据编号", example = "RT2025")
  27 + private String sourceDocCode;
  28 +
23 @Schema(description = "产品物料 ID", example = "20") 29 @Schema(description = "产品物料 ID", example = "20")
24 private Long itemId; 30 private Long itemId;
25 31
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/ipqc/MesQcIpqcDO.java
@@ -41,13 +41,12 @@ public class MesQcIpqcDO extends BaseDO { @@ -41,13 +41,12 @@ public class MesQcIpqcDO extends BaseDO {
41 * 检验单名称 41 * 检验单名称
42 */ 42 */
43 private String name; 43 private String name;
44 - // TODO @AI:搞成 int 类型;  
45 /** 44 /**
46 * IPQC 检验类型 45 * IPQC 检验类型
47 * 46 *
48 * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_IPQC_TYPE} 47 * 字典 {@link cn.iocoder.yudao.module.mes.enums.DictTypeConstants#MES_IPQC_TYPE}
49 */ 48 */
50 - private String type; 49 + private Integer type;
51 /** 50 /**
52 * 检验模板 ID 51 * 检验模板 ID
53 * 52 *
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/rqc/MesQcRqcMapper.java
@@ -18,6 +18,8 @@ public interface MesQcRqcMapper extends BaseMapperX<MesQcRqcDO> { @@ -18,6 +18,8 @@ public interface MesQcRqcMapper extends BaseMapperX<MesQcRqcDO> {
18 default PageResult<MesQcRqcDO> selectPage(MesQcRqcPageReqVO reqVO) { 18 default PageResult<MesQcRqcDO> selectPage(MesQcRqcPageReqVO reqVO) {
19 return selectPage(reqVO, new LambdaQueryWrapperX<MesQcRqcDO>() 19 return selectPage(reqVO, new LambdaQueryWrapperX<MesQcRqcDO>()
20 .likeIfPresent(MesQcRqcDO::getCode, reqVO.getCode()) 20 .likeIfPresent(MesQcRqcDO::getCode, reqVO.getCode())
  21 + .eqIfPresent(MesQcRqcDO::getSourceDocType, reqVO.getSourceDocType())
  22 + .likeIfPresent(MesQcRqcDO::getSourceDocCode, reqVO.getSourceDocCode())
21 .eqIfPresent(MesQcRqcDO::getItemId, reqVO.getItemId()) 23 .eqIfPresent(MesQcRqcDO::getItemId, reqVO.getItemId())
22 .eqIfPresent(MesQcRqcDO::getRqcType, reqVO.getRqcType()) 24 .eqIfPresent(MesQcRqcDO::getRqcType, reqVO.getRqcType())
23 .eqIfPresent(MesQcRqcDO::getCheckResult, reqVO.getCheckResult()) 25 .eqIfPresent(MesQcRqcDO::getCheckResult, reqVO.getCheckResult())
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java
@@ -5,12 +5,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -5,12 +5,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcPageReqVO; 6 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcPageReqVO;
7 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO;
8 -import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;  
9 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; 8 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
10 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO;
11 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO; 10 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
12 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO; 11 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateDO;
13 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;  
14 import cn.iocoder.yudao.module.mes.dal.mysql.qc.ipqc.MesQcIpqcMapper; 12 import cn.iocoder.yudao.module.mes.dal.mysql.qc.ipqc.MesQcIpqcMapper;
15 import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum; 13 import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum;
16 import cn.iocoder.yudao.module.mes.enums.qc.MesQcIqcStatusEnum; 14 import cn.iocoder.yudao.module.mes.enums.qc.MesQcIqcStatusEnum;
@@ -64,40 +62,21 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService { @@ -64,40 +62,21 @@ public class MesQcIpqcServiceImpl implements MesQcIpqcService {
64 public Long createIpqc(MesQcIpqcSaveReqVO createReqVO) { 62 public Long createIpqc(MesQcIpqcSaveReqVO createReqVO) {
65 // 1.1 校验编号唯一 63 // 1.1 校验编号唯一
66 validateIpqcCodeUnique(null, createReqVO.getCode()); 64 validateIpqcCodeUnique(null, createReqVO.getCode());
67 -  
68 - // 1.2 从工单获取产品物料 ID  
69 - // TODO @AI:需要校验 workOrderService 存在;  
70 -// TODO createReqVO 里的 itemId 字段去掉;直接去下面的实体去 set;  
71 - MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(createReqVO.getWorkOrderId());  
72 - if (workOrder != null) {  
73 - createReqVO.setItemId(workOrder.getProductId());  
74 - }  
75 -  
76 - // 1.3 从工位获取工序 ID  
77 - // TODO @AI:需要校验 workstationService 存在;  
78 - // TODO @AI:processId 不存储,去读取好了;  
79 - MesMdWorkstationDO workstation = workstationService.getWorkstation(createReqVO.getWorkstationId());  
80 - if (workstation != null && workstation.getProcessId() != null) {  
81 - createReqVO.setProcessId(workstation.getProcessId());  
82 - }  
83 - 65 + // 1.2 校验工单存在
  66 + MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
  67 + // 1.3 校验工位存在
  68 + workstationService.validateWorkstationExists(createReqVO.getWorkstationId());
84 // 1.4 根据产品 + 检验类型自动匹配模板 69 // 1.4 根据产品 + 检验类型自动匹配模板
85 - // TODO @AI:直接调用 templateService 的校验方法;  
86 MesQcTemplateDO template = templateService.getTemplateByItemIdAndType( 70 MesQcTemplateDO template = templateService.getTemplateByItemIdAndType(
87 - createReqVO.getItemId(), MesQcTypeEnum.IPQC.getType()); 71 + workOrder.getProductId(), MesQcTypeEnum.IPQC.getType());
88 if (template == null) { 72 if (template == null) {
89 throw exception(QC_IPQC_NO_TEMPLATE); 73 throw exception(QC_IPQC_NO_TEMPLATE);
90 } 74 }
91 - createReqVO.setTemplateId(template.getId());  
92 -  
93 - // 1.5 从模板的产品关联中获取检测参数  
94 - MesQcTemplateItemDO templateItem = templateService.getTemplateItemByTemplateIdAndItemId(  
95 - template.getId(), createReqVO.getItemId());  
96 - // 模板产品关联可能为空(模板关联了其他产品但也可手动选择),此处不强制  
97 75
98 // 2. 插入主表 76 // 2. 插入主表
99 MesQcIpqcDO ipqc = BeanUtils.toBean(createReqVO, MesQcIpqcDO.class); 77 MesQcIpqcDO ipqc = BeanUtils.toBean(createReqVO, MesQcIpqcDO.class);
100 - ipqc.setStatus(MesQcIqcStatusEnum.PREPARE.getType()); 78 + ipqc.setItemId(workOrder.getProductId());
  79 + ipqc.setTemplateId(template.getId()).setStatus(MesQcIqcStatusEnum.PREPARE.getType());
101 ipqcMapper.insert(ipqc); 80 ipqcMapper.insert(ipqc);
102 81
103 // 3. 从模板指标自动生成检验行 82 // 3. 从模板指标自动生成检验行