From 87733eb3623593da247c051593d64b8ff9e1d3a4 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 06 十一月 2026 19:00:39 +0800
Subject: [PATCH] feat(crm,mes): 扩展客户字段与重构批次号生成逻辑
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedIndicatorRangeService.java | 126 +++++++++++++++++++++++++++++++++--------
1 files changed, 101 insertions(+), 25 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedIndicatorRangeService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedIndicatorRangeService.java
index 0318ac7..80fe407 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedIndicatorRangeService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/MesQcSeedIndicatorRangeService.java
@@ -1,45 +1,121 @@
package cn.iocoder.yudao.module.mes.service.qc.seedquality;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.mes.controller.admin.qc.seedquality.vo.MesQcSeedIndicatorRangeSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.seedquality.MesQcSeedIndicatorRangeDO;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.seedquality.MesQcSeedIndicatorRangeMapper;
+import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Set;
-import java.math.BigDecimal;
-import java.util.stream.Collectors;
+import java.util.Map;
@Service
public class MesQcSeedIndicatorRangeService {
- private static final Set<String> CODES = Set.of("purity", "cleanliness", "germination_rate", "moisture");
- @Resource private MesQcSeedIndicatorRangeMapper mapper;
- public List<MesQcSeedIndicatorRangeDO> getRanges() {
- return mapper.selectList().stream().filter(item -> CODES.contains(item.getIndicatorCode())).toList();
+ @Resource
+ private MesQcSeedIndicatorRangeMapper mapper;
+ @Resource
+ private MesMdmItemService mdmItemService;
+
+ /** 閰嶇疆椤垫煡璇細itemId 涓虹┖琛ㄧず閫氱敤榛樿椤� */
+ public List<MesQcSeedIndicatorRangeDO> getRanges(Long itemId, String keyword, Integer status) {
+ return mapper.selectListByItemId(itemId, keyword, status);
+ }
+
+ /**
+ * 鐢熸晥鎸囨爣锛氫骇鍝佷笓灞為厤缃紭鍏堬紝鏈厤缃椂鍥為��閫氱敤榛樿椤广��
+ */
+ public List<MesQcSeedIndicatorRangeDO> getEffectiveRanges(Long itemId) {
+ List<MesQcSeedIndicatorRangeDO> productRanges = itemId == null ? List.of() : mapper.selectEnabledByItemId(itemId);
+ return productRanges.isEmpty() ? mapper.selectEnabledDefaults() : productRanges;
+ }
+
+ public Map<String, MesQcSeedIndicatorRangeDO> getEffectiveMap(Long itemId) {
+ Map<String, MesQcSeedIndicatorRangeDO> result = new LinkedHashMap<>();
+ for (MesQcSeedIndicatorRangeDO range : getEffectiveRanges(itemId)) {
+ result.put(range.getIndicatorCode(), range);
+ }
+ return result;
}
@Transactional(rollbackFor = Exception.class)
- public void saveRanges(MesQcSeedIndicatorRangeSaveReqVO request) {
- List<MesQcSeedIndicatorRangeSaveReqVO.Item> items = request.getRanges();
- if (items == null || items.size() != CODES.size() || items.stream().anyMatch(item -> item == null || item.getIndicatorCode() == null
- || item.getMinValue() == null || item.getMaxValue() == null)
- || !items.stream().map(MesQcSeedIndicatorRangeSaveReqVO.Item::getIndicatorCode)
- .collect(Collectors.toSet()).equals(CODES))
- throw new IllegalArgumentException("蹇呴』瀹屾暣閰嶇疆绾害銆佸噣搴︺�佸彂鑺界巼銆佹按鍒嗗洓椤规寚鏍�");
- for (MesQcSeedIndicatorRangeSaveReqVO.Item item : items) {
- if (item.getMinValue().compareTo(BigDecimal.ZERO) < 0 || item.getMaxValue().compareTo(new BigDecimal("100")) > 0
- || item.getMinValue().compareTo(item.getMaxValue()) > 0)
- throw new IllegalArgumentException("鎸囨爣鍚堟牸鑼冨洿蹇呴』澶勪簬 0鈥�100 涓斾笅闄愪笉澶т簬涓婇檺锛�" + item.getIndicatorCode());
- MesQcSeedIndicatorRangeDO row = new MesQcSeedIndicatorRangeDO();
- row.setIndicatorCode(item.getIndicatorCode());
- row.setMinValue(item.getMinValue());
- row.setMaxValue(item.getMaxValue());
- if (mapper.selectById(item.getIndicatorCode()) == null) mapper.insert(row);
- else mapper.updateById(row);
- }
+ public Long create(MesQcSeedIndicatorRangeSaveReqVO reqVO) {
+ validateProduct(reqVO.getItemId());
+ validateRange(reqVO);
+ if (mapper.selectByItemIdAndCode(reqVO.getItemId(), reqVO.getIndicatorCode()) != null)
+ throw new IllegalArgumentException("璇ヤ骇鍝佸凡瀛樺湪鐩稿悓缂栫爜鐨勮川妫�椤癸細" + reqVO.getIndicatorCode());
+ MesQcSeedIndicatorRangeDO row = buildRow(reqVO);
+ mapper.insert(row);
+ return row.getId();
}
+ @Transactional(rollbackFor = Exception.class)
+ public void update(Long id, MesQcSeedIndicatorRangeSaveReqVO reqVO) {
+ MesQcSeedIndicatorRangeDO existing = mapper.selectById(id);
+ if (existing == null) throw new IllegalArgumentException("璐ㄦ椤逛笉瀛樺湪鎴栧凡鍒犻櫎");
+ validateProduct(reqVO.getItemId());
+ validateRange(reqVO);
+ MesQcSeedIndicatorRangeDO sameCode = mapper.selectByItemIdAndCode(reqVO.getItemId(), reqVO.getIndicatorCode());
+ if (sameCode != null && !sameCode.getId().equals(id))
+ throw new IllegalArgumentException("璇ヤ骇鍝佸凡瀛樺湪鐩稿悓缂栫爜鐨勮川妫�椤癸細" + reqVO.getIndicatorCode());
+ MesQcSeedIndicatorRangeDO update = buildRow(reqVO);
+ update.setId(id);
+ mapper.updateById(update);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void delete(Long id) {
+ MesQcSeedIndicatorRangeDO existing = mapper.selectById(id);
+ if (existing == null) throw new IllegalArgumentException("璐ㄦ椤逛笉瀛樺湪鎴栧凡鍒犻櫎");
+ mapper.deleteById(id);
+ }
+
+ /** 灏嗛�氱敤榛樿椤瑰鍒跺埌鎸囧畾浜у搧锛屽凡瀛樺湪鐨勭紪鐮佽烦杩� */
+ @Transactional(rollbackFor = Exception.class)
+ public int copyDefaults(Long itemId) {
+ validateProduct(itemId);
+ int copied = 0;
+ for (MesQcSeedIndicatorRangeDO source : mapper.selectEnabledDefaults()) {
+ if (mapper.selectByItemIdAndCode(itemId, source.getIndicatorCode()) != null) continue;
+ MesQcSeedIndicatorRangeDO row = new MesQcSeedIndicatorRangeDO();
+ row.setItemId(itemId);
+ row.setIndicatorCode(source.getIndicatorCode());
+ row.setIndicatorName(source.getIndicatorName());
+ row.setUnit(source.getUnit());
+ row.setMinValue(source.getMinValue());
+ row.setMaxValue(source.getMaxValue());
+ row.setSort(source.getSort());
+ row.setStatus(0);
+ mapper.insert(row);
+ copied++;
+ }
+ return copied;
+ }
+
+ private void validateProduct(Long itemId) {
+ if (itemId == null) throw new IllegalArgumentException("璇峰厛閫夋嫨浜у搧");
+ if (mdmItemService.getItem(itemId) == null) throw new IllegalArgumentException("浜у搧涓嶅瓨鍦紝璇烽噸鏂伴�夋嫨");
+ }
+
+ private void validateRange(MesQcSeedIndicatorRangeSaveReqVO reqVO) {
+ if (reqVO.getMinValue().compareTo(reqVO.getMaxValue()) > 0)
+ throw new IllegalArgumentException("鍚堟牸涓嬮檺涓嶈兘澶т簬涓婇檺锛�" + reqVO.getIndicatorName());
+ }
+
+ private MesQcSeedIndicatorRangeDO buildRow(MesQcSeedIndicatorRangeSaveReqVO reqVO) {
+ MesQcSeedIndicatorRangeDO row = new MesQcSeedIndicatorRangeDO();
+ row.setItemId(reqVO.getItemId());
+ row.setIndicatorCode(reqVO.getIndicatorCode().trim());
+ row.setIndicatorName(reqVO.getIndicatorName().trim());
+ row.setUnit(StrUtil.blankToDefault(reqVO.getUnit(), "%"));
+ row.setMinValue(reqVO.getMinValue());
+ row.setMaxValue(reqVO.getMaxValue());
+ row.setSort(reqVO.getSort() == null ? 0 : reqVO.getSort());
+ row.setStatus(reqVO.getStatus() == null ? 0 : reqVO.getStatus());
+ return row;
+ }
}
--
Gitblit v1.9.3