首页-预警查询

master
wany 2024-07-18 10:24:37 +08:00
parent 45cdc1d20a
commit 271b236a6f
6 changed files with 136 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package com.gunshi.project.xyt.controller;
import com.gunshi.core.result.R; import com.gunshi.core.result.R;
import com.gunshi.db.dto.DateTimeRangeSo; import com.gunshi.db.dto.DateTimeRangeSo;
import com.gunshi.project.xyt.entity.vo.HomeWarnVo;
import com.gunshi.project.xyt.model.StQxWarnR; import com.gunshi.project.xyt.model.StQxWarnR;
import com.gunshi.project.xyt.service.StQxWarnRService; import com.gunshi.project.xyt.service.StQxWarnRService;
import com.gunshi.project.xyt.validate.markers.Insert; import com.gunshi.project.xyt.validate.markers.Insert;
@ -62,4 +63,10 @@ public class StQxWarnRController {
return R.ok(service.page(null,null)); return R.ok(service.page(null,null));
} }
@Operation(summary = "首页-告警")
@PostMapping("/home/warn")
public R<HomeWarnVo> homeWarn(@RequestBody DateTimeRangeSo dateTimeRangeSo) {
return R.ok(service.homeWarn(dateTimeRangeSo));
}
} }

View File

@ -0,0 +1,36 @@
package com.gunshi.project.xyt.entity.vo;
import com.gunshi.project.xyt.model.StQxWarnR;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* Description:
* Created by wanyan on 2024/7/17
*
* @author wanyan
* @version 1.0
*/
@Data
public class HomeWarnVo {
@Schema(description = "水位告警")
private String rzWarn;
@Schema(description="气象告警")
private List<StQxWarnR> qxWarn;
@Schema(description="位移告警")
private List<OsmoticWarnVo> shiftWarn;
@Schema(description="渗压告警")
private List<OsmoticWarnVo> pressWarn;
@Schema(description="渗流告警")
private List<OsmoticWarnVo> flowWarn;
@Schema(description="AI告警个数")
private Long aiWarnCount;
}

View File

@ -1,8 +1,14 @@
package com.gunshi.project.xyt.mapper; package com.gunshi.project.xyt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gunshi.db.dto.DateTimeRangeSo;
import com.gunshi.project.xyt.entity.vo.OsmoticWarnVo;
import com.gunshi.project.xyt.model.StQxWarnR; import com.gunshi.project.xyt.model.StQxWarnR;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* : * :
@ -12,4 +18,16 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface StQxWarnRMapper extends BaseMapper<StQxWarnR> { public interface StQxWarnRMapper extends BaseMapper<StQxWarnR> {
@Select("""
<script>
select t.*,s.*
from public.osmotic_warn_r t
left join public.osmotic_warn_rule s
on t.rule_id = s.id
where t.tm <![CDATA[>=]]> #{obj.start}
and t.tm <![CDATA[<=]]> #{obj.end}
order by t.tm,t.station_code desc
</script>
""")
List<OsmoticWarnVo> queryOsmoticWarn(@Param("obj") DateTimeRangeSo dateTimeRangeSo);
} }

View File

@ -68,4 +68,12 @@ public interface StStbprpBMapper extends BaseMapper<StStbprpB> {
""") """)
List<StStatusVo> rzList(); List<StStatusVo> rzList();
@Select("""
<script>
SELECT st.stcd,st.stnm,r.tm FROM st_stbprp_b st
LEFT JOIN st_img_r_real r ON st.stcd = r.stcd
WHERE st.stcd in (select distinct(stcd) from st_stbprp_b_elem where elem ='img')
</script>
""")
List<StStatusVo> imgList();
} }

View File

@ -1,13 +1,23 @@
package com.gunshi.project.xyt.service; package com.gunshi.project.xyt.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gunshi.db.dto.DateTimeRangeSo;
import com.gunshi.project.xyt.entity.vo.AttResBaseVo;
import com.gunshi.project.xyt.entity.vo.HomeWarnVo;
import com.gunshi.project.xyt.entity.vo.OsmoticWarnVo;
import com.gunshi.project.xyt.mapper.AttResBaseMapper;
import com.gunshi.project.xyt.mapper.StQxWarnRMapper; import com.gunshi.project.xyt.mapper.StQxWarnRMapper;
import com.gunshi.project.xyt.model.StImgWarnR;
import com.gunshi.project.xyt.model.StQxWarnR; import com.gunshi.project.xyt.model.StQxWarnR;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; 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.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* : * :
@ -20,6 +30,57 @@ import java.util.Date;
public class StQxWarnRService extends ServiceImpl<StQxWarnRMapper, StQxWarnR> public class StQxWarnRService extends ServiceImpl<StQxWarnRMapper, StQxWarnR>
{ {
@Resource
private StImgWarnRService imgWarnRService;
@Resource
private AttResBaseMapper attResBaseMapper;
public HomeWarnVo homeWarn(DateTimeRangeSo dateTimeRangeSo) {
HomeWarnVo vo = new HomeWarnVo();
List<AttResBaseVo> attResBaseVos = attResBaseMapper.queryList();
AttResBaseVo attResBaseVo = attResBaseVos.get(0);
Date tm = attResBaseVo.getTm();
//水位的最新采集时间不在24小时内
if(tm.before(dateTimeRangeSo.getStart())){
vo.setRzWarn("-");
}else{
BigDecimal rz = attResBaseVo.getRz();
if(attResBaseVo.getCalState() == 1){
BigDecimal aboveCal = rz.subtract(attResBaseVo.getCalFloodLev());
vo.setRzWarn("超校核("+aboveCal+")");
attResBaseVo.setDesState(0);
attResBaseVo.setFlState(0);
}else if(attResBaseVo.getDesState() == 1){
BigDecimal aboveDes = rz.subtract(attResBaseVo.getDesFloodLev());
vo.setRzWarn("超设计("+aboveDes+")");
attResBaseVo.setFlState(0);
}else if(attResBaseVo.getFlState() == 1){
vo.setRzWarn("超汛限("+attResBaseVo.getAFsltdz()+")");
}else if(rz.compareTo(attResBaseVo.getDeadLev()) < 0){
BigDecimal aboveDead = rz.subtract(attResBaseVo.getDeadLev());
vo.setRzWarn("低水位("+aboveDead+")");
}else {
vo.setRzWarn("正常("+attResBaseVo.getAFsltdz()+")");
}
}
List<StQxWarnR> qxWarn = this.lambdaQuery()
.ge(StQxWarnR::getTm, dateTimeRangeSo.getStart()).lt(StQxWarnR::getTm, dateTimeRangeSo.getEnd()).list();
vo.setQxWarn(qxWarn);
List<OsmoticWarnVo> warnVos = baseMapper.queryOsmoticWarn(dateTimeRangeSo);
vo.setPressWarn(warnVos.stream().filter(o->o.getType() == 1).collect(Collectors.toList()));
vo.setFlowWarn(warnVos.stream().filter(o->o.getType() == 2).collect(Collectors.toList()));
vo.setShiftWarn(warnVos.stream().filter(o->o.getType() == 3).collect(Collectors.toList()));
Long aiWarnCount = imgWarnRService.lambdaQuery()
.ge(StImgWarnR::getTm, dateTimeRangeSo.getStart()).lt(StImgWarnR::getTm, dateTimeRangeSo.getEnd()).count();
vo.setAiWarnCount(aiWarnCount);
return vo;
}
} }

View File

@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -56,7 +57,10 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB>
List<StStatusVo> rainList = baseMapper.realRainList(); List<StStatusVo> rainList = baseMapper.realRainList();
//水位站 //水位站
List<StStatusVo> rzList = baseMapper.rzList(); List<StStatusVo> rzList = baseMapper.rzList();
//图像站
List<StStatusVo> imgList = baseMapper.imgList();
rainList.addAll(rzList); rainList.addAll(rzList);
rainList.addAll(imgList);
rainList.stream().collect(Collectors.toMap(obj->obj.getStcd(),obj-> obj,(obj1,obj2)-> rainList.stream().collect(Collectors.toMap(obj->obj.getStcd(),obj-> obj,(obj1,obj2)->
DateUtil.convertStringToDate(obj1.getTm()).after(DateUtil.convertStringToDate(obj2.getTm())) ? obj1 : obj2 DateUtil.convertStringToDate(obj1.getTm()).after(DateUtil.convertStringToDate(obj2.getTm())) ? obj1 : obj2
)).values().stream().collect(Collectors.toList()); )).values().stream().collect(Collectors.toList());
@ -101,8 +105,8 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB>
onLineList.add(vo); onLineList.add(vo);
} }
} }
res.setOnline(onLineList); res.setOnline(onLineList.stream().sorted(Comparator.comparing(StStatusVo::getTm).reversed()).collect(Collectors.toList()));
res.setOffLine(offLineList); res.setOffLine(offLineList.stream().sorted(Comparator.comparing(StStatusVo::getTm).reversed()).collect(Collectors.toList()));
return res; return res;
} }
} }