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