根据4月8日的禅道问题做出修改

master
李一帆 2025-04-08 17:59:39 +08:00
parent 4ebd0f5f1c
commit efdd8ac871
6 changed files with 174 additions and 72 deletions

View File

@ -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) {
}
}

View File

@ -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 &gt; 0 then 1 else 0 end as calState,
case when s.des_flood_lev is not null and m.rz-s.des_flood_lev &gt; 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 &gt; 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 &gt; 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

View File

@ -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 &gt; #{stm}::timestamp and t1.tm &lt;= #{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 &gt; #{stm}::timestamp and t1.tm &lt;= #{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);

View File

@ -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;

View File

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

View File

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