package com.gunshi.project.hsz.service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.hsz.mapper.StZvarlBMapper; import com.gunshi.project.hsz.model.StZvarlB; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 描述: 库( 湖)容曲线表 * author: xusan * date: 2024-07-08 17:30:38 */ @Service @Slf4j @Transactional(rollbackFor = Exception.class) public class StZvarlBService extends ServiceImpl { /** * 根据水位查表得库容 * * @param rz 水位 * @return 查表库容 * @author lyf */ public BigDecimal getWFromZvarl(BigDecimal rz) { return getWFromZvarl(rz, BigDecimal.ZERO, list()); } /** * 根据水位查表得库容 * * @param rz 水位 * @param defaultValue 查不到时默认值 * @return 查表库容 * @author lyf */ public BigDecimal getWFromZvarl(BigDecimal rz, BigDecimal defaultValue) { return getWFromZvarl(rz, defaultValue, list()); } /** * 根据水位查表得库容 * * @param rz 水位 * @param defaultValue 查不到时默认值 * @param zvarlList 水位库容关系曲线 * @return 查表库容 * @author lyf */ public BigDecimal getWFromZvarl(BigDecimal rz, BigDecimal defaultValue, List zvarlList) { return toMap(zvarlList).getOrDefault(rz.setScale(3, RoundingMode.DOWN), defaultValue); } /** * 将水位库容曲线列表转为字典,水位作为键,注意BigDecimal做键的时候要匹配值和精度 * * @param zvarlList 水位库容曲线列表 * @return 水位库容曲线字典 * @author lyf */ private Map toMap(List zvarlList) { return zvarlList.stream() .map(item -> Map.entry(item.getRz().setScale(3, RoundingMode.DOWN), item.getW())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } }