package cn.iocoder.yudao.module.mes.service.qc.seedquality; 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 jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Set; import java.math.BigDecimal; import java.util.stream.Collectors; @Service public class MesQcSeedIndicatorRangeService { private static final Set CODES = Set.of("purity", "cleanliness", "germination_rate", "moisture"); @Resource private MesQcSeedIndicatorRangeMapper mapper; public List getRanges() { return mapper.selectList().stream().filter(item -> CODES.contains(item.getIndicatorCode())).toList(); } @Transactional(rollbackFor = Exception.class) public void saveRanges(MesQcSeedIndicatorRangeSaveReqVO request) { List 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); } } }