diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/RsvrComplexVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/RsvrComplexVo.java index 2b6594b..8b09039 100644 --- a/src/main/java/com/gunshi/project/xyt/entity/vo/RsvrComplexVo.java +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/RsvrComplexVo.java @@ -20,13 +20,16 @@ public class RsvrComplexVo { public BigDecimal rz; @NonNull public Date tm; + /** + * 水位查表流量 + */ public BigDecimal q; /** - * spilled volume 溢洪量 + * spilled volume 溢洪量,根据流量和时间乘算 */ public BigDecimal sv; - - public RsvrComplexVo(String rz, Date tm) { - - } + /** + * 水位查表库容 + */ + public BigDecimal w; } diff --git a/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java index f87eaf3..7a8f4a9 100644 --- a/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java +++ b/src/main/java/com/gunshi/project/xyt/mapper/AttResBaseMapper.java @@ -37,7 +37,7 @@ public interface AttResBaseMapper extends BaseMapper { left join public.st_addvcd_d sad on t.adcd = sad.adcd left join public.st_rsvr_r_real m on t.stcd = m.stcd left join public.st_pptn_r_real sprr on t.stcd = sprr.stcd - where t.sttp = 'RR' and s.res_code = '42112230001' and t.stcd='10196' + where t.sttp = 'RR' and s.res_code = '42112230001' and t.stcd='61610700' order by aFsltdz desc nulls last """) diff --git a/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java b/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java index 17f46d9..e1bf734 100644 --- a/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java +++ b/src/main/java/com/gunshi/project/xyt/service/ReservoirWaterService.java @@ -17,6 +17,7 @@ import com.gunshi.project.xyt.util.DateUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -46,6 +47,9 @@ public class ReservoirWaterService { @Resource private RainBasinDivisionService rainBasinDivisionService; + @Autowired + private StZvarlBService stZvarlBService; + public List list() { List attResBaseVos = attResBaseMapper.queryList(); if(CollectionUtils.isEmpty(attResBaseVos)){ @@ -103,39 +107,26 @@ public class ReservoirWaterService { public List listV2() { - List attResBaseVos = attResBaseMapper.queryListV2(); - if(CollectionUtils.isEmpty(attResBaseVos)){ - return attResBaseVos; + List voList = attResBaseMapper.queryListV2(); + if(CollectionUtils.isEmpty(voList)){ + return voList; } - attResBaseVos.stream().map(o->{ - if(o.getCalState() == 1){ - o.setDesState(0); - o.setFlState(0); - }else if(o.getCalState() == 0 && o.getDesState() ==1){ - o.setFlState(0); + + List zvarlList = stZvarlBService.list(); + voList.forEach(vo -> { + if(vo.getCalState() == 1){ + vo.setDesState(0); + vo.setFlState(0); + }else if(vo.getCalState() == 0 && vo.getDesState() ==1){ + vo.setFlState(0); } - return o; - }).collect(Collectors.toList()); - //查询所有测站的库容曲线 - List zvarlList = queryZval(attResBaseVos.stream().map(AttResBaseVo::getStcd).collect(Collectors.toList())); - Map> zvalMap = zvarlList.stream().collect(Collectors.groupingBy(StZvarlB::getStcd)); - for(AttResBaseVo vo : attResBaseVos){ - String stcd = vo.getStcd(); + BigDecimal rz = vo.getRz(); - //计算当前库容 - List zvarlBS = zvalMap.get(stcd); - if(rz != null && CollectionUtils.isNotEmpty(zvarlBS)){ - BigDecimal maxRz = zvarlBS.stream().max(Comparator.comparing(StZvarlB::getRz)).get().getRz(); - BigDecimal minRz = zvarlBS.stream().min(Comparator.comparing(StZvarlB::getRz)).get().getRz(); - if(rz.compareTo(minRz) < 0 || rz.compareTo(maxRz) > 0){ - continue; - } - Map stZvalMap = zvarlBS.stream().collect(Collectors.toMap(StZvarlB::getRz, StZvarlB::getW)); - List list = zvarlBS.stream().map(StZvarlB::getRz).sorted().collect(Collectors.toList()); - vo.setNowCap(DataHandleUtil.calcData(rz,stZvalMap,list)); - } - } - return attResBaseVos; + BigDecimal w = stZvarlBService.getWFromZvarl(rz, null, zvarlList); + vo.setNowCap(w); + }); + + return voList; } private List queryZval(List stcdList) { diff --git a/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java b/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java index d621f88..900e03a 100644 --- a/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java +++ b/src/main/java/com/gunshi/project/xyt/service/StStbprpBService.java @@ -140,6 +140,7 @@ public class StStbprpBService extends ServiceImpl { */ List rsvrList = rsvrRService.lambdaQuery() + .eq(StRsvrR::getStcd, obj.getStcd()) .between(StRsvrR::getTm, obj.getDateSo().getStart(), obj.getDateSo().getEnd()) .orderBy(true, true, StRsvrR::getTm) .list(); diff --git a/src/main/java/com/gunshi/project/xyt/service/StZqrlBService.java b/src/main/java/com/gunshi/project/xyt/service/StZqrlBService.java index ff36ff7..07090f0 100644 --- a/src/main/java/com/gunshi/project/xyt/service/StZqrlBService.java +++ b/src/main/java/com/gunshi/project/xyt/service/StZqrlBService.java @@ -26,6 +26,7 @@ public class StZqrlBService extends ServiceImpl { /** * 计算溢洪量 + * * @param rz 计算溢洪的起始水位 * @param seconds 溢洪时间,是两条水位数据的时间差,单位秒 * @param zqrlList 水位流量关系曲线 @@ -38,8 +39,9 @@ public class StZqrlBService extends ServiceImpl { /** * 计算溢洪量 - * @param rz 计算溢洪的起始水位 - * @param seconds 溢洪时间,是两条水位数据的时间差,单位秒 + * + * @param rz 计算溢洪的起始水位 + * @param seconds 溢洪时间,是两条水位数据的时间差,单位秒 * @return 溢洪量 * @author lyf */ @@ -49,9 +51,11 @@ public class StZqrlBService extends ServiceImpl { /** * 批量计算溢洪量 + * * @param rsvrList 要计算的水位数据 * @param zqrlList 水位流量关系曲线 * @return 计算后的水位数据(时间倒序),含每条水位对应的流量和与上一条水位对应的溢洪量 + * @author lyf */ public List calculateSpilledVolumeList(List rsvrList, List zqrlList) { rsvrList.sort(Comparator.comparing(StRsvrR::getTm).reversed()); @@ -79,21 +83,45 @@ public class StZqrlBService extends ServiceImpl { /** * 批量计算溢洪量 + * * @param rsvrList 要计算的水位数据 * @return 计算后的水位数据(时间倒序),含每条水位对应的流量和与上一条水位对应的溢洪量 + * @author lyf */ public List calculateSpilledVolumeList(List rsvrList) { return calculateSpilledVolumeList(rsvrList, list()); } + /** + * 根据水位查表得流量 + * + * @param rz 水位 + * @return 查表流量 + * @author lyf + */ public BigDecimal getQFromZqrl(BigDecimal rz) { return getQFromZqrl(rz, list()); } + /** + * 根据水位查表得流量 + * + * @param rz 水位 + * @param zqrlList 水位流量关系曲线 + * @return 查表流量 + * @author lyf + */ public BigDecimal getQFromZqrl(BigDecimal rz, List zqrlList) { return toMap(zqrlList).getOrDefault(rz.setScale(3, RoundingMode.DOWN), BigDecimal.ZERO); } + /** + * 将水位流量曲线列表转为字典,水位作为键,注意BigDecimal做键的时候要匹配值和精度 + * + * @param zqrlList 水位流量曲线列表 + * @return 水位流量曲线字典 + * @author lyf + */ private Map toMap(List zqrlList) { return zqrlList.stream() .map(item -> Map.entry(item.getZ().setScale(3, RoundingMode.DOWN), item.getQ())) diff --git a/src/main/java/com/gunshi/project/xyt/service/StZvarlBService.java b/src/main/java/com/gunshi/project/xyt/service/StZvarlBService.java index 0882cc3..307ef40 100644 --- a/src/main/java/com/gunshi/project/xyt/service/StZvarlBService.java +++ b/src/main/java/com/gunshi/project/xyt/service/StZvarlBService.java @@ -7,7 +7,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 描述: 库( 湖)容曲线表 @@ -17,8 +21,56 @@ import java.util.Date; @Service @Slf4j @Transactional(rollbackFor = Exception.class) -public class StZvarlBService extends ServiceImpl -{ +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)); + } }