根据4月8日的禅道问题做出修改
parent
4ebd0f5f1c
commit
efdd8ac871
|
|
@ -0,0 +1,32 @@
|
|||
package com.gunshi.project.xyt.entity.vo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author lyf
|
||||
* @since 2025-04-08
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@RequiredArgsConstructor(staticName = "of")
|
||||
public class RsvrComplexVo {
|
||||
@NonNull
|
||||
public BigDecimal rz;
|
||||
@NonNull
|
||||
public Date tm;
|
||||
public BigDecimal q;
|
||||
/**
|
||||
* spilled volume 溢洪量
|
||||
*/
|
||||
public BigDecimal sv;
|
||||
|
||||
public RsvrComplexVo(String rz, Date tm) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -26,18 +26,18 @@ import java.util.List;
|
|||
public interface AttResBaseMapper extends BaseMapper<AttResBase> {
|
||||
@Select("""
|
||||
<script>
|
||||
select t.stcd,t.stnm,COALESCE(t.clgtd,t.lgtd) lgtd,COALESCE(t.clttd,t.lttd) lttd,t.source,t.sttp,t.stlc,t.adcd,t.esstym,s.res_code,s.fl_low_lim_lev,
|
||||
select t.stcd,t.stnm,t.lgtd lgtd,t.lttd lttd,t.source,t.sttp,t.stlc,t.adcd,t.esstym,s.res_code,s.fl_low_lim_lev,
|
||||
s.tot_cap,s.ben_res_cap,s.norm_wat_lev,s.crest_elev,s.des_flood_lev,s.dead_lev,s.cal_flood_lev,s.wat_shed_area,s.dead_cap,sad.adnm,
|
||||
m.tm,m.rz,(m.rz-s.fl_low_lim_lev) as aFsltdz,sprr.tm as drpTm,sprr.h1,sprr.h3,sprr.h6,sprr.h12,sprr.h24,sprr.today,
|
||||
case when s.cal_flood_lev is not null and m.rz-s.cal_flood_lev > 0 then 1 else 0 end as calState,
|
||||
case when s.des_flood_lev is not null and m.rz-s.des_flood_lev > 0 then 1 else 0 end as desState,
|
||||
case when s.fl_low_lim_lev is not null and m.rz-s.fl_low_lim_lev > 0 then 1 else 0 end as flState
|
||||
from public.st_stbprp_b t
|
||||
left join public.att_res_base s on t.stcd = s.stcd
|
||||
left join public.att_res_base s on 1=1
|
||||
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'
|
||||
where t.sttp = 'RR' and s.res_code = '42112230001' and t.stcd='10196'
|
||||
order by aFsltdz desc nulls last
|
||||
</script>
|
||||
""")
|
||||
|
|
@ -45,7 +45,7 @@ public interface AttResBaseMapper extends BaseMapper<AttResBase> {
|
|||
|
||||
@Select("""
|
||||
<script>
|
||||
select t.stcd,t.stnm,COALESCE(t.clgtd,t.lgtd) lgtd,COALESCE(t.clttd,t.lttd) lttd,t.source,t.sttp,t.stlc,t.adcd,t.esstym,s.res_code,s.fl_low_lim_lev,
|
||||
select t.stcd,t.stnm,t.lgtd lgtd,t.lttd lttd,t.source,t.sttp,t.stlc,t.adcd,t.esstym,s.res_code,s.fl_low_lim_lev,
|
||||
s.tot_cap,s.ben_res_cap,s.norm_wat_lev,s.crest_elev,s.des_flood_lev,s.dead_lev,s.cal_flood_lev,s.wat_shed_area,s.dead_cap,sad.adnm,
|
||||
m.tm,m.rz,(m.rz-s.fl_low_lim_lev) as aFsltdz,sprr.tm as drpTm,sprr.h1,sprr.h3,sprr.h6,sprr.h12,sprr.h24,sprr.today,
|
||||
case when s.cal_flood_lev is not null and m.rz-s.cal_flood_lev > 0 then 1 else 0 end as calState,
|
||||
|
|
@ -57,7 +57,7 @@ public interface AttResBaseMapper extends BaseMapper<AttResBase> {
|
|||
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'
|
||||
order by aFsltdz desc nulls last
|
||||
order by _order asc nulls last
|
||||
</script>
|
||||
""")
|
||||
List<AttResBaseVo> queryListV2();
|
||||
|
|
@ -178,8 +178,8 @@ public interface AttResBaseMapper extends BaseMapper<AttResBase> {
|
|||
|
||||
@Select("""
|
||||
<script>
|
||||
select t.stcd,t.stnm,COALESCE(t.clgtd,t.lgtd) as lgtd,
|
||||
COALESCE(t.clttd,t.lttd) as lttd,t.sttp,t.adcd,t.rvnm,t.stlc,t.source,t.esstym,s.tm,s.z,s.q,sad.adnm,
|
||||
select t.stcd,t.stnm,t.lgtd as lgtd,
|
||||
t.lttd as lttd,t.sttp,t.adcd,t.rvnm,t.stlc,t.source,t.esstym,s.tm,s.z,s.q,sad.adnm,
|
||||
srb.wrz,srb.grz,srb.invrz,srb.invrztm
|
||||
from public.st_stbprp_b t
|
||||
left join public.st_river_r_real s on t.stcd = s.stcd
|
||||
|
|
|
|||
|
|
@ -17,38 +17,42 @@ import java.util.List;
|
|||
public interface RealRainMapper {
|
||||
@Select("""
|
||||
<script>
|
||||
with m1 as (select t1.stcd,
|
||||
t1.sttp,
|
||||
s1.adcd,
|
||||
t1.stlc,
|
||||
s1.adnm,
|
||||
t1.stnm,
|
||||
t3.res_code,
|
||||
t3.res_name,
|
||||
t1.lgtd,
|
||||
t1.lttd
|
||||
from st_stbprp_b t1
|
||||
left join att_res_base t3 on t3.stcd = t1.stcd
|
||||
left join st_addvcd_d s1 on s1.adcd = t1.adcd
|
||||
left join st_stbprp_b_elem s2 on s2.stcd = t1.stcd
|
||||
where s2.elem = 'drp' ),
|
||||
m2 as (select t1.stcd, sum(t1.drp) drp
|
||||
from public.st_pptn_r t1
|
||||
WHERE t1.tm > #{stm}::timestamp and t1.tm <= #{etm}::timestamp
|
||||
GROUP BY t1.stcd)
|
||||
select m1.stcd,
|
||||
m1.sttp,
|
||||
m1.stnm,
|
||||
m1.stlc,
|
||||
m2.drp,
|
||||
m1.adcd,
|
||||
m1.adnm,
|
||||
m1.res_code,
|
||||
m1.res_name,
|
||||
m1.lgtd,
|
||||
m1.lttd
|
||||
from m1
|
||||
left join m2 on m1.stcd = m2.stcd
|
||||
with m1 as (
|
||||
select t1.stcd,
|
||||
t1.sttp,
|
||||
s1.adcd,
|
||||
t1.stlc,
|
||||
s1.adnm,
|
||||
t1.stnm,
|
||||
t3.res_code,
|
||||
t3.res_name,
|
||||
t1.lgtd,
|
||||
t1.lttd
|
||||
from st_stbprp_b t1
|
||||
left join att_res_base t3 on t3.stcd = t1.stcd
|
||||
left join st_addvcd_d s1 on s1.adcd = t1.adcd
|
||||
left join st_stbprp_b_elem s2 on s2.stcd = t1.stcd
|
||||
where s2.elem = 'drp'
|
||||
),
|
||||
m2 as (
|
||||
select t1.stcd, sum(t1.drp) drp
|
||||
from public.st_pptn_r t1
|
||||
WHERE t1.tm > #{stm}::timestamp and t1.tm <= #{etm}::timestamp
|
||||
GROUP BY t1.stcd
|
||||
)
|
||||
select m1.stcd,
|
||||
m1.sttp,
|
||||
m1.stnm,
|
||||
m1.stlc,
|
||||
m2.drp,
|
||||
m1.adcd,
|
||||
m1.adnm,
|
||||
m1.res_code,
|
||||
m1.res_name,
|
||||
m1.lgtd,
|
||||
m1.lttd
|
||||
from m1
|
||||
left join m2 on m1.stcd = m2.stcd
|
||||
</script>
|
||||
""")
|
||||
List<RealRainListVo> getRealRainList(@Param("stm") String stm, @Param("etm") String etm);
|
||||
|
|
|
|||
|
|
@ -430,10 +430,10 @@ public class RainBasinDivisionService {
|
|||
map.put("maxDrp", maxDrp);
|
||||
map.put("maxDrpTime", maxDrpTime);
|
||||
|
||||
QueryWrapper<StStbprpB> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq(StStbprpB.COL_STCD,stcd);
|
||||
// QueryWrapper<StStbprpB> queryWrapper = new QueryWrapper<>();
|
||||
// queryWrapper.eq(StStbprpB.COL_STCD,stcd);
|
||||
|
||||
StStbprpB stStbprpB = stStbprpBAutoDao.getOne(queryWrapper);
|
||||
// StStbprpB stStbprpB = stStbprpBAutoDao.getOne(queryWrapper);
|
||||
StPptnRD stPptnRD = realRainMapper.getMaxOfYear(stcd,now.getYear() + 1900);
|
||||
if (stPptnRD == null){
|
||||
return map;
|
||||
|
|
|
|||
|
|
@ -229,35 +229,24 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB> {
|
|||
public StZqrlBCount24Vo count24(Serializable stcd) {
|
||||
StZqrlBCount24Vo vo = new StZqrlBCount24Vo();
|
||||
vo.setStcd(stcd.toString());
|
||||
String stcdstr = stcd.toString();
|
||||
|
||||
// LambdaQueryWrapper<StZqrlB> qw = new LambdaQueryWrapper();
|
||||
// qw.eq(StZqrlB::getStcd,stcdstr).orderByDesc(StZqrlB::getModitime).last(" limit 1");
|
||||
// StZqrlB bean = stZqrlBService.getOne(qw);
|
||||
// vo.setCurrWaterLevel(bean.getZ());
|
||||
// vo.setFlowNum(bean.getQ());
|
||||
// vo.setCreateTime(bean.getModitime());
|
||||
|
||||
//24小时溢洪量
|
||||
// 获取当前时间
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// 获取24小时前的时间
|
||||
LocalDateTime before24 = now.minusHours(24);
|
||||
List<StZqrlB> list = getList(stcdstr, before24, now);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
StRsvrR rsvrLatest = rsvrRService.lambdaQuery().eq(StRsvrR::getStcd, stcd).orderByDesc(StRsvrR::getTm).last("limit 1").one();
|
||||
if (rsvrLatest == null) {
|
||||
return vo;
|
||||
}
|
||||
StZqrlB stZqrlB = list.stream()
|
||||
.max(Comparator.comparing(StZqrlB::getModitimeAsLocalDateTime))
|
||||
.orElse(new StZqrlB());
|
||||
vo.setCurrWaterLevel(stZqrlB.getZ());
|
||||
vo.setFlowNum(stZqrlB.getQ());
|
||||
vo.setCreateTime(stZqrlB.getModitime());
|
||||
BigDecimal rzLatest = new BigDecimal(rsvrLatest.getRz());
|
||||
BigDecimal qLatest = stZqrlBService.getQFromZqrl(rzLatest);
|
||||
vo.setCurrWaterLevel(rzLatest);
|
||||
vo.setFlowNum(qLatest);
|
||||
vo.setCreateTime(rsvrLatest.getTm());
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LocalDateTime before24 = now.minusHours(24);
|
||||
List<StRsvrR> rsvrList = rsvrRService.lambdaQuery().ge(StRsvrR::getTm, before24).le(StRsvrR::getTm, now).orderByAsc(StRsvrR::getTm).list();
|
||||
List<RsvrComplexVo> rsvrComplexVos = stZqrlBService.calculateSpilledVolumeList(rsvrList);
|
||||
BigDecimal totalSv = rsvrComplexVos.stream().map(RsvrComplexVo::getSv).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
vo.setSum24(totalSv);
|
||||
|
||||
list = calculateQtotal(list);
|
||||
BigDecimal reduce = list.stream().map(StZqrlB::getQ).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
vo.setSum24(reduce);
|
||||
return vo;
|
||||
}
|
||||
|
||||
|
|
@ -288,9 +277,6 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB> {
|
|||
|
||||
private List<StZqrlB> getList(String stcd, LocalDateTime start, LocalDateTime end) {
|
||||
LambdaQueryWrapper<StZqrlB> qw = new LambdaQueryWrapper();
|
||||
qw.eq(StZqrlB::getStcd, stcd);
|
||||
qw.ge(StZqrlB::getModitime, start);
|
||||
qw.le(StZqrlB::getModitime, end);
|
||||
List<StZqrlB> list = stZqrlBService.list(qw);
|
||||
return list;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
package com.gunshi.project.xyt.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.gunshi.project.xyt.entity.vo.RsvrComplexVo;
|
||||
import com.gunshi.project.xyt.mapper.StZqrlBMapper;
|
||||
import com.gunshi.project.xyt.model.StRsvrR;
|
||||
import com.gunshi.project.xyt.model.StZqrlB;
|
||||
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.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 描述: 水位流量关系曲线表
|
||||
|
|
@ -17,8 +22,83 @@ import java.util.Date;
|
|||
@Service
|
||||
@Slf4j
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class StZqrlBService extends ServiceImpl<StZqrlBMapper, StZqrlB>
|
||||
{
|
||||
public class StZqrlBService extends ServiceImpl<StZqrlBMapper, StZqrlB> {
|
||||
|
||||
/**
|
||||
* 计算溢洪量
|
||||
* @param rz 计算溢洪的起始水位
|
||||
* @param seconds 溢洪时间,是两条水位数据的时间差,单位秒
|
||||
* @param zqrlList 水位流量关系曲线
|
||||
* @return 溢洪量
|
||||
* @author lyf
|
||||
*/
|
||||
public BigDecimal calculateSpilledVolume(BigDecimal rz, long seconds, List<StZqrlB> zqrlList) {
|
||||
return getQFromZqrl(rz, zqrlList).multiply(BigDecimal.valueOf(seconds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算溢洪量
|
||||
* @param rz 计算溢洪的起始水位
|
||||
* @param seconds 溢洪时间,是两条水位数据的时间差,单位秒
|
||||
* @return 溢洪量
|
||||
* @author lyf
|
||||
*/
|
||||
public BigDecimal calculateSpilledVolume(BigDecimal rz, long seconds) {
|
||||
return calculateSpilledVolume(rz, seconds, list());
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量计算溢洪量
|
||||
* @param rsvrList 要计算的水位数据
|
||||
* @param zqrlList 水位流量关系曲线
|
||||
* @return 计算后的水位数据(时间倒序),含每条水位对应的流量和与上一条水位对应的溢洪量
|
||||
*/
|
||||
public List<RsvrComplexVo> calculateSpilledVolumeList(List<StRsvrR> rsvrList, List<StZqrlB> zqrlList) {
|
||||
rsvrList.sort(Comparator.comparing(StRsvrR::getTm).reversed());
|
||||
List<RsvrComplexVo> ret = new ArrayList<>();
|
||||
for (int i = 0; i < rsvrList.size(); i++) {
|
||||
StRsvrR rsvr = rsvrList.get(i);
|
||||
BigDecimal rz = new BigDecimal(rsvr.getRz());
|
||||
Date tm = rsvr.getTm();
|
||||
RsvrComplexVo vo = RsvrComplexVo.of(rz, tm);
|
||||
|
||||
if (i == 0) {
|
||||
vo.setQ(getQFromZqrl(rz, zqrlList));
|
||||
vo.setSv(BigDecimal.ZERO);
|
||||
} else {
|
||||
StRsvrR rsvrPrev = rsvrList.get(i - 1);
|
||||
Date tmPrev = rsvrPrev.getTm();
|
||||
long seconds = tm.getTime() - tmPrev.getTime();
|
||||
vo.setQ(getQFromZqrl(rz, zqrlList));
|
||||
vo.setSv(calculateSpilledVolume(rz, seconds));
|
||||
}
|
||||
ret.add(vo);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量计算溢洪量
|
||||
* @param rsvrList 要计算的水位数据
|
||||
* @return 计算后的水位数据(时间倒序),含每条水位对应的流量和与上一条水位对应的溢洪量
|
||||
*/
|
||||
public List<RsvrComplexVo> calculateSpilledVolumeList(List<StRsvrR> rsvrList) {
|
||||
return calculateSpilledVolumeList(rsvrList, list());
|
||||
}
|
||||
|
||||
public BigDecimal getQFromZqrl(BigDecimal rz) {
|
||||
return getQFromZqrl(rz, list());
|
||||
}
|
||||
|
||||
public BigDecimal getQFromZqrl(BigDecimal rz, List<StZqrlB> zqrlList) {
|
||||
return toMap(zqrlList).getOrDefault(rz.setScale(3, RoundingMode.DOWN), BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
private Map<BigDecimal, BigDecimal> toMap(List<StZqrlB> zqrlList) {
|
||||
return zqrlList.stream()
|
||||
.map(item -> Map.entry(item.getZ().setScale(3, RoundingMode.DOWN), item.getQ()))
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue