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<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();
|
}
|
|
@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);
|
}
|
}
|
|
}
|