Commit 9d57d6c721e473d41e3b2808dacc40b88f89cd18

Authored by YunaiV
1 parent 68cbb1ac

review(mes):qc-template 的代码实现,功能测试

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateService.java
@@ -2,14 +2,15 @@ package cn.iocoder.yudao.module.mes.service.qc; @@ -2,14 +2,15 @@ package cn.iocoder.yudao.module.mes.service.qc;
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.MesQcTemplatePageReqVO; 4 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplatePageReqVO;
  5 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateRespVO;
5 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; 6 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
6 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; 7 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.MesQcTemplateIndicatorRespVO;
7 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.indicator.MesQcTemplateIndicatorSaveReqVO;
8 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.MesQcTemplateItemPageReqVO;
  11 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemRespVO;
9 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; 12 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
10 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO; 13 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
11 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;  
12 -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;  
13 import jakarta.validation.Valid; 14 import jakarta.validation.Valid;
14 15
15 import java.util.Collection; 16 import java.util.Collection;
@@ -53,9 +54,9 @@ public interface MesQcTemplateService { @@ -53,9 +54,9 @@ public interface MesQcTemplateService {
53 * 获得质检方案 54 * 获得质检方案
54 * 55 *
55 * @param id 编号 56 * @param id 编号
56 - * @return 质检方案 57 + * @return 质检方案 RespVO(含 types List、enableFlag Boolean)
57 */ 58 */
58 - MesQcTemplateDO getTemplate(Long id); 59 + MesQcTemplateRespVO getTemplate(Long id);
59 60
60 /** 61 /**
61 * 获得质检方案分页 62 * 获得质检方案分页
@@ -63,12 +64,12 @@ public interface MesQcTemplateService { @@ -63,12 +64,12 @@ public interface MesQcTemplateService {
63 * @param pageReqVO 分页查询 64 * @param pageReqVO 分页查询
64 * @return 质检方案分页 65 * @return 质检方案分页
65 */ 66 */
66 - PageResult<MesQcTemplateDO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO); 67 + PageResult<MesQcTemplateRespVO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO);
67 68
68 /** 69 /**
69 * 获得质检方案列表(用于下拉选择) 70 * 获得质检方案列表(用于下拉选择)
70 * 71 *
71 - * @return 质检方案列表 72 + * @return 质检方案列表(DO,简单列表场景)
72 */ 73 */
73 List<MesQcTemplateDO> getTemplateList(); 74 List<MesQcTemplateDO> getTemplateList();
74 75
@@ -118,17 +119,17 @@ public interface MesQcTemplateService { @@ -118,17 +119,17 @@ public interface MesQcTemplateService {
118 * 获得检测指标项 119 * 获得检测指标项
119 * 120 *
120 * @param id 编号 121 * @param id 编号
121 - * @return 检测指标项 122 + * @return 检测指标项(含 JOIN 的指标信息)
122 */ 123 */
123 - MesQcTemplateIndicatorDO getTemplateIndicator(Long id); 124 + MesQcTemplateIndicatorRespVO getTemplateIndicator(Long id);
124 125
125 /** 126 /**
126 * 获得检测指标项分页 127 * 获得检测指标项分页
127 * 128 *
128 * @param pageReqVO 分页查询 129 * @param pageReqVO 分页查询
129 - * @return 检测指标项分页 130 + * @return 检测指标项分页(含 JOIN 的指标信息)
130 */ 131 */
131 - PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO); 132 + PageResult<MesQcTemplateIndicatorRespVO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO);
132 133
133 // ========== 质检方案-产品关联 ========== 134 // ========== 质检方案-产品关联 ==========
134 135
@@ -158,16 +159,16 @@ public interface MesQcTemplateService { @@ -158,16 +159,16 @@ public interface MesQcTemplateService {
158 * 获得产品关联 159 * 获得产品关联
159 * 160 *
160 * @param id 编号 161 * @param id 编号
161 - * @return 产品关联 162 + * @return 产品关联(含 JOIN 的物料信息)
162 */ 163 */
163 - MesQcTemplateItemDO getTemplateItem(Long id); 164 + MesQcTemplateItemRespVO getTemplateItem(Long id);
164 165
165 /** 166 /**
166 * 获得产品关联分页 167 * 获得产品关联分页
167 * 168 *
168 * @param pageReqVO 分页查询 169 * @param pageReqVO 分页查询
169 - * @return 产品关联分页 170 + * @return 产品关联分页(含 JOIN 的物料信息)
170 */ 171 */
171 - PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO); 172 + PageResult<MesQcTemplateItemRespVO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO);
172 173
173 } 174 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/MesQcTemplateServiceImpl.java
@@ -2,17 +2,27 @@ package cn.iocoder.yudao.module.mes.service.qc; @@ -2,17 +2,27 @@ package cn.iocoder.yudao.module.mes.service.qc;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.ObjUtil; 4 import cn.hutool.core.util.ObjUtil;
  5 +import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
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.MesQcTemplatePageReqVO;
  9 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateRespVO;
8 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO; 10 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
9 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO; 11 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorPageReqVO;
  12 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorRespVO;
10 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO; 13 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
11 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO; 14 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemPageReqVO;
  15 +import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemRespVO;
12 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; 16 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
  17 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
  18 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
  19 +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcIndicatorDO;
13 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO; 20 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
14 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO; 21 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
15 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO; 22 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO;
  23 +import cn.iocoder.yudao.module.mes.dal.mysql.md.item.MesMdItemMapper;
  24 +import cn.iocoder.yudao.module.mes.dal.mysql.md.unitmeasure.MesMdUnitMeasureMapper;
  25 +import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcIndicatorMapper;
16 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateIndicatorMapper; 26 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateIndicatorMapper;
17 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateItemMapper; 27 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateItemMapper;
18 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateMapper; 28 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateMapper;
@@ -21,14 +31,15 @@ import org.springframework.stereotype.Service; @@ -21,14 +31,15 @@ import org.springframework.stereotype.Service;
21 import org.springframework.transaction.annotation.Transactional; 31 import org.springframework.transaction.annotation.Transactional;
22 import org.springframework.validation.annotation.Validated; 32 import org.springframework.validation.annotation.Validated;
23 33
  34 +import java.util.Arrays;
24 import java.util.Collection; 35 import java.util.Collection;
25 import java.util.Collections; 36 import java.util.Collections;
26 import java.util.List; 37 import java.util.List;
  38 +import java.util.stream.Collectors;
27 39
28 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 40 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
29 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; 41 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
30 42
31 -// TODO @AI:类似别的模块,service 拆分为多个;  
32 /** 43 /**
33 * MES 质检方案 Service 实现类 44 * MES 质检方案 Service 实现类
34 * 45 *
@@ -44,6 +55,12 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -44,6 +55,12 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
44 private MesQcTemplateIndicatorMapper templateIndicatorMapper; 55 private MesQcTemplateIndicatorMapper templateIndicatorMapper;
45 @Resource 56 @Resource
46 private MesQcTemplateItemMapper templateItemMapper; 57 private MesQcTemplateItemMapper templateItemMapper;
  58 + @Resource
  59 + private MesQcIndicatorMapper indicatorMapper;
  60 + @Resource
  61 + private MesMdItemMapper mdItemMapper;
  62 + @Resource
  63 + private MesMdUnitMeasureMapper unitMeasureMapper;
47 64
48 // ========== 质检方案主表 ========== 65 // ========== 质检方案主表 ==========
49 66
@@ -54,6 +71,8 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -54,6 +71,8 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
54 71
55 // 插入 72 // 插入
56 MesQcTemplateDO template = BeanUtils.toBean(createReqVO, MesQcTemplateDO.class); 73 MesQcTemplateDO template = BeanUtils.toBean(createReqVO, MesQcTemplateDO.class);
  74 + template.setTypes(convertTypesToString(createReqVO.getTypes()));
  75 + template.setEnableFlag(Boolean.TRUE.equals(createReqVO.getEnableFlag()) ? "Y" : "N");
57 templateMapper.insert(template); 76 templateMapper.insert(template);
58 return template.getId(); 77 return template.getId();
59 } 78 }
@@ -67,6 +86,8 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -67,6 +86,8 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
67 86
68 // 更新 87 // 更新
69 MesQcTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateDO.class); 88 MesQcTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MesQcTemplateDO.class);
  89 + updateObj.setTypes(convertTypesToString(updateReqVO.getTypes()));
  90 + updateObj.setEnableFlag(Boolean.TRUE.equals(updateReqVO.getEnableFlag()) ? "Y" : "N");
70 templateMapper.updateById(updateObj); 91 templateMapper.updateById(updateObj);
71 } 92 }
72 93
@@ -101,13 +122,21 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -101,13 +122,21 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
101 } 122 }
102 123
103 @Override 124 @Override
104 - public MesQcTemplateDO getTemplate(Long id) {  
105 - return templateMapper.selectById(id); 125 + public MesQcTemplateRespVO getTemplate(Long id) {
  126 + MesQcTemplateDO do0 = templateMapper.selectById(id);
  127 + if (do0 == null) {
  128 + return null;
  129 + }
  130 + return convertTemplateRespVO(do0);
106 } 131 }
107 132
108 @Override 133 @Override
109 - public PageResult<MesQcTemplateDO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO) {  
110 - return templateMapper.selectPage(pageReqVO); 134 + public PageResult<MesQcTemplateRespVO> getTemplatePage(MesQcTemplatePageReqVO pageReqVO) {
  135 + PageResult<MesQcTemplateDO> pageResult = templateMapper.selectPage(pageReqVO);
  136 + return new PageResult<>(
  137 + pageResult.getList().stream().map(this::convertTemplateRespVO).collect(Collectors.toList()),
  138 + pageResult.getTotal()
  139 + );
111 } 140 }
112 141
113 @Override 142 @Override
@@ -123,6 +152,40 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -123,6 +152,40 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
123 return templateMapper.selectByIds(ids); 152 return templateMapper.selectByIds(ids);
124 } 153 }
125 154
  155 + /**
  156 + * DO → RespVO:转换 types(String → List<Integer>)和 enableFlag(Y/N → Boolean)
  157 + */
  158 + private MesQcTemplateRespVO convertTemplateRespVO(MesQcTemplateDO do0) {
  159 + MesQcTemplateRespVO vo = BeanUtils.toBean(do0, MesQcTemplateRespVO.class);
  160 + vo.setTypes(convertTypesToList(do0.getTypes()));
  161 + vo.setEnableFlag("Y".equals(do0.getEnableFlag()));
  162 + return vo;
  163 + }
  164 +
  165 + /**
  166 + * List<Integer> → 逗号分隔字符串(如 [1,3] → "1,3")
  167 + */
  168 + private String convertTypesToString(List<Integer> types) {
  169 + if (CollUtil.isEmpty(types)) {
  170 + return null;
  171 + }
  172 + return types.stream().map(String::valueOf).collect(Collectors.joining(","));
  173 + }
  174 +
  175 + /**
  176 + * 逗号分隔字符串 → List<Integer>(如 "1,3" → [1,3])
  177 + */
  178 + private List<Integer> convertTypesToList(String types) {
  179 + if (StrUtil.isBlank(types)) {
  180 + return Collections.emptyList();
  181 + }
  182 + return Arrays.stream(types.split(","))
  183 + .map(String::trim)
  184 + .filter(StrUtil::isNotBlank)
  185 + .map(Integer::parseInt)
  186 + .collect(Collectors.toList());
  187 + }
  188 +
126 // ========== 质检方案-检测指标项 ========== 189 // ========== 质检方案-检测指标项 ==========
127 190
128 @Override 191 @Override
@@ -161,13 +224,38 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -161,13 +224,38 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
161 } 224 }
162 225
163 @Override 226 @Override
164 - public MesQcTemplateIndicatorDO getTemplateIndicator(Long id) {  
165 - return templateIndicatorMapper.selectById(id); 227 + public MesQcTemplateIndicatorRespVO getTemplateIndicator(Long id) {
  228 + MesQcTemplateIndicatorDO do0 = templateIndicatorMapper.selectById(id);
  229 + if (do0 == null) {
  230 + return null;
  231 + }
  232 + return convertIndicatorRespVO(do0);
166 } 233 }
167 234
168 @Override 235 @Override
169 - public PageResult<MesQcTemplateIndicatorDO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) {  
170 - return templateIndicatorMapper.selectPage(pageReqVO); 236 + public PageResult<MesQcTemplateIndicatorRespVO> getTemplateIndicatorPage(MesQcTemplateIndicatorPageReqVO pageReqVO) {
  237 + PageResult<MesQcTemplateIndicatorDO> pageResult = templateIndicatorMapper.selectPage(pageReqVO);
  238 + return new PageResult<>(
  239 + pageResult.getList().stream().map(this::convertIndicatorRespVO).collect(Collectors.toList()),
  240 + pageResult.getTotal()
  241 + );
  242 + }
  243 +
  244 + /**
  245 + * DO → RespVO:JOIN mes_qc_indicator 补充检测项信息
  246 + */
  247 + private MesQcTemplateIndicatorRespVO convertIndicatorRespVO(MesQcTemplateIndicatorDO do0) {
  248 + MesQcTemplateIndicatorRespVO vo = BeanUtils.toBean(do0, MesQcTemplateIndicatorRespVO.class);
  249 + if (do0.getIndicatorId() != null) {
  250 + MesQcIndicatorDO indicator = indicatorMapper.selectById(do0.getIndicatorId());
  251 + if (indicator != null) {
  252 + vo.setIndicatorCode(indicator.getCode());
  253 + vo.setIndicatorName(indicator.getName());
  254 + vo.setIndicatorType(indicator.getType());
  255 + vo.setIndicatorTool(indicator.getTool());
  256 + }
  257 + }
  258 + return vo;
171 } 259 }
172 260
173 // ========== 质检方案-产品关联 ========== 261 // ========== 质检方案-产品关联 ==========
@@ -222,13 +310,44 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService { @@ -222,13 +310,44 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
222 } 310 }
223 311
224 @Override 312 @Override
225 - public MesQcTemplateItemDO getTemplateItem(Long id) {  
226 - return templateItemMapper.selectById(id); 313 + public MesQcTemplateItemRespVO getTemplateItem(Long id) {
  314 + MesQcTemplateItemDO do0 = templateItemMapper.selectById(id);
  315 + if (do0 == null) {
  316 + return null;
  317 + }
  318 + return convertItemRespVO(do0);
227 } 319 }
228 320
229 @Override 321 @Override
230 - public PageResult<MesQcTemplateItemDO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {  
231 - return templateItemMapper.selectPage(pageReqVO); 322 + public PageResult<MesQcTemplateItemRespVO> getTemplateItemPage(MesQcTemplateItemPageReqVO pageReqVO) {
  323 + PageResult<MesQcTemplateItemDO> pageResult = templateItemMapper.selectPage(pageReqVO);
  324 + return new PageResult<>(
  325 + pageResult.getList().stream().map(this::convertItemRespVO).collect(Collectors.toList()),
  326 + pageResult.getTotal()
  327 + );
  328 + }
  329 +
  330 + /**
  331 + * DO → RespVO:JOIN mes_md_item 补充物料信息,JOIN mes_md_unit_measure 补充单位名称
  332 + */
  333 + private MesQcTemplateItemRespVO convertItemRespVO(MesQcTemplateItemDO do0) {
  334 + MesQcTemplateItemRespVO vo = BeanUtils.toBean(do0, MesQcTemplateItemRespVO.class);
  335 + if (do0.getItemId() != null) {
  336 + MesMdItemDO item = mdItemMapper.selectById(do0.getItemId());
  337 + if (item != null) {
  338 + vo.setItemCode(item.getCode());
  339 + vo.setItemName(item.getName());
  340 + vo.setSpecification(item.getSpecification());
  341 + // 查询计量单位名称
  342 + if (item.getUnitMeasureId() != null) {
  343 + MesMdUnitMeasureDO unit = unitMeasureMapper.selectById(item.getUnitMeasureId());
  344 + if (unit != null) {
  345 + vo.setUnitMeasureName(unit.getName());
  346 + }
  347 + }
  348 + }
  349 + }
  350 + return vo;
232 } 351 }
233 352
234 } 353 }