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 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 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 6 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
6 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 9 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
8 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 12 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO;
10 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 14 import jakarta.validation.Valid;
14 15  
15 16 import java.util.Collection;
... ... @@ -53,9 +54,9 @@ public interface MesQcTemplateService {
53 54 * 获得质检方案
54 55 *
55 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 64 * @param pageReqVO 分页查询
64 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 74 List<MesQcTemplateDO> getTemplateList();
74 75  
... ... @@ -118,17 +119,17 @@ public interface MesQcTemplateService {
118 119 * 获得检测指标项
119 120 *
120 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 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 159 * 获得产品关联
159 160 *
160 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 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 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.ObjUtil;
  5 +import cn.hutool.core.util.StrUtil;
5 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 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 10 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.MesQcTemplateSaveReqVO;
9 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 13 import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.indicator.MesQcTemplateIndicatorSaveReqVO;
11 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 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 20 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO;
14 21 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO;
15 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 26 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateIndicatorMapper;
17 27 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateItemMapper;
18 28 import cn.iocoder.yudao.module.mes.dal.mysql.qc.MesQcTemplateMapper;
... ... @@ -21,14 +31,15 @@ import org.springframework.stereotype.Service;
21 31 import org.springframework.transaction.annotation.Transactional;
22 32 import org.springframework.validation.annotation.Validated;
23 33  
  34 +import java.util.Arrays;
24 35 import java.util.Collection;
25 36 import java.util.Collections;
26 37 import java.util.List;
  38 +import java.util.stream.Collectors;
27 39  
28 40 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
29 41 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
30 42  
31   -// TODO @AI:类似别的模块,service 拆分为多个;
32 43 /**
33 44 * MES 质检方案 Service 实现类
34 45 *
... ... @@ -44,6 +55,12 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
44 55 private MesQcTemplateIndicatorMapper templateIndicatorMapper;
45 56 @Resource
46 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 71  
55 72 // 插入
56 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 76 templateMapper.insert(template);
58 77 return template.getId();
59 78 }
... ... @@ -67,6 +86,8 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
67 86  
68 87 // 更新
69 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 91 templateMapper.updateById(updateObj);
71 92 }
72 93  
... ... @@ -101,13 +122,21 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
101 122 }
102 123  
103 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 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 142 @Override
... ... @@ -123,6 +152,40 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
123 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 191 @Override
... ... @@ -161,13 +224,38 @@ public class MesQcTemplateServiceImpl implements MesQcTemplateService {
161 224 }
162 225  
163 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 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 310 }
223 311  
224 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 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 }
... ...