From 08d9a806d339f1461781afae69b0f5d7050a99cd Mon Sep 17 00:00:00 2001 From: wany <13995595726@qq.com> Date: Fri, 9 Aug 2024 11:25:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=9A=90=E6=82=A3=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=EF=BC=8C=E6=B8=97?= =?UTF-8?q?=E5=8E=8B=E7=9B=91=E6=B5=8B=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8A=A5=E9=94=99=EF=BC=9B=E6=B5=8B=E5=80=BC=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=A4=9A=E5=9B=BE=E5=8D=95=E8=A1=A8=E6=B5=8B=E7=82=B9=E6=97=A0?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E6=95=B0=E6=8D=AE=E6=97=B6=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=A9=BA=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xyt/mapper/OsmoticPressRMapper.java | 2 +- .../xyt/mapper/OsmoticWarnRMapper.java | 4 +- .../xyt/service/OsmoticPressRService.java | 2 + .../xyt/service/OsmoticWarnRService.java | 133 +++++++++++++++++- 4 files changed, 136 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gunshi/project/xyt/mapper/OsmoticPressRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/OsmoticPressRMapper.java index 3f7a35c..1ca315a 100644 --- a/src/main/java/com/gunshi/project/xyt/mapper/OsmoticPressRMapper.java +++ b/src/main/java/com/gunshi/project/xyt/mapper/OsmoticPressRMapper.java @@ -35,7 +35,7 @@ public interface OsmoticPressRMapper extends BaseMapper { t.station_code =#{obj.stationCode} - s.profile_code =#{obj.profileCode} + and s.profile_code =#{obj.profileCode} and t.tm =]]> #{obj.dateTimeRangeSo.start} diff --git a/src/main/java/com/gunshi/project/xyt/mapper/OsmoticWarnRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/OsmoticWarnRMapper.java index df583ca..3f0e12f 100644 --- a/src/main/java/com/gunshi/project/xyt/mapper/OsmoticWarnRMapper.java +++ b/src/main/java/com/gunshi/project/xyt/mapper/OsmoticWarnRMapper.java @@ -28,10 +28,10 @@ public interface OsmoticWarnRMapper extends BaseMapper { t.type = #{obj.type} - t.level = #{obj.level} + and t.level = #{obj.level} - t.station_code LIKE concat('%',#{obj.stationCode},'%') + and t.station_code like concat('%', #{obj.stationCode}::text, '%') and t.tm =]]> #{obj.dateTimeRangeSo.start} diff --git a/src/main/java/com/gunshi/project/xyt/service/OsmoticPressRService.java b/src/main/java/com/gunshi/project/xyt/service/OsmoticPressRService.java index 0f2c8cf..8bba790 100644 --- a/src/main/java/com/gunshi/project/xyt/service/OsmoticPressRService.java +++ b/src/main/java/com/gunshi/project/xyt/service/OsmoticPressRService.java @@ -100,6 +100,8 @@ public class OsmoticPressRService extends ServiceImpl()); } resList.add(vo); } diff --git a/src/main/java/com/gunshi/project/xyt/service/OsmoticWarnRService.java b/src/main/java/com/gunshi/project/xyt/service/OsmoticWarnRService.java index 8202880..d5f08b2 100644 --- a/src/main/java/com/gunshi/project/xyt/service/OsmoticWarnRService.java +++ b/src/main/java/com/gunshi/project/xyt/service/OsmoticWarnRService.java @@ -1,6 +1,8 @@ package com.gunshi.project.xyt.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -9,14 +11,20 @@ import com.gunshi.project.xyt.entity.so.WarnPageSo; import com.gunshi.project.xyt.entity.so.WarnSo; import com.gunshi.project.xyt.entity.vo.OsmoticWarnVo; import com.gunshi.project.xyt.mapper.OsmoticWarnRMapper; +import com.gunshi.project.xyt.mapper.OsmoticWarnRuleMapper; +import com.gunshi.project.xyt.model.OsmoticShiftR; import com.gunshi.project.xyt.model.OsmoticWarnR; +import com.gunshi.project.xyt.model.OsmoticWarnRule; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -30,10 +38,10 @@ import java.util.stream.Collectors; public class OsmoticWarnRService extends ServiceImpl { @Resource - private OsmoticWarnRMapper mapper; + private OsmoticWarnRuleMapper warnRuleMapper; public Page queryPage(WarnPageSo warnPageSo) { - return mapper.queryPage(warnPageSo.getPageSo().toPage(),warnPageSo); + return this.baseMapper.queryPage(warnPageSo.getPageSo().toPage(),warnPageSo); } public Map stat(WarnSo warnSo) { @@ -56,6 +64,127 @@ public class OsmoticWarnRService extends ServiceImpl list = this.list(wrapper); return list.stream().collect(Collectors.groupingBy(OsmoticWarnR::getLevel, Collectors.counting())); } + + /** + * 生成位移预警 + */ + public void saveShiftWarn(OsmoticShiftR shiftR){ + String stationCode = shiftR.getStationCode(); + Date tm = shiftR.getTm(); + BigDecimal x = shiftR.getX(); + savePressWarn(stationCode,x,tm,"x"); + BigDecimal y = shiftR.getY(); + savePressWarn(stationCode,y,tm,"y"); + BigDecimal h = shiftR.getH(); + savePressWarn(stationCode,h,tm,"h"); + } + + /** + * 生成渗压/渗流预警 + * @param + */ + public void savePressWarn(String stationCode,BigDecimal value,Date tm,String direction) { + //查询预警规则,每个测点至多只有2条预警规则 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OsmoticWarnRule::getStationCode,stationCode) + .eq(OsmoticWarnRule::getStatus,1); + if(StringUtils.isNotEmpty(direction)){ + queryWrapper.eq(OsmoticWarnRule::getDirection,direction); + } + List ruleList = warnRuleMapper.selectList(queryWrapper); + if(CollectionUtils.isNotEmpty(ruleList)){ + Boolean isRedWarn = false; + //先判断是否符合红色预警 + Optional red = ruleList.stream().filter(o -> o.getLevel() == 2).findFirst(); + if(red.isPresent()){ + OsmoticWarnRule redRule = red.get(); + isRedWarn = saveWarnData(redRule,value,tm); + if (isRedWarn){ + return; + } + //没有生成红色预警,再判断是否符合黄色预警 + Optional yellow = ruleList.stream().filter(o -> o.getLevel() == 1).findFirst(); + if(yellow.isPresent()){ + OsmoticWarnRule yellowRule = yellow.get(); + saveWarnData(yellowRule,value,tm); + } + }else { + OsmoticWarnRule yellowRule = ruleList.get(0); + saveWarnData(yellowRule,value,tm); + } + } + } + + private Boolean saveWarnData(OsmoticWarnRule rule,BigDecimal value,Date tm){ + String conditionOne = rule.getConditionOne(); + BigDecimal valueOne = rule.getValueOne(); + Integer condition = rule.getCondition(); + Boolean flagOne = getFlag(conditionOne,valueOne,value); + /** + * 没有第二条件时,条件1满足就生成预警 + * 有第二条件时,当为或时,条件1满足就生成预警,条件1不满足就判断条件2是否满足;当为且时,需条件1和条件2同时满足才生成预警 + */ + if(condition == null){ + if(flagOne){ + //生成预警 + return geneWarn(rule,value,tm); + } + }else{ + String conditionTwo = rule.getConditionTwo(); + BigDecimal valueTwo = rule.getValueTwo(); + Boolean flagTwo = getFlag(conditionTwo,valueTwo,value); + if(condition == 1){ + if(flagOne && flagTwo){ + //生成预警 + return geneWarn(rule,value,tm); + } + }else{ + if(flagOne || flagTwo){ + //生成预警 + return geneWarn(rule,value,tm); + } + } + } + return false; + } + + private Boolean geneWarn(OsmoticWarnRule rule,BigDecimal value,Date tm) { + OsmoticWarnR warnR = new OsmoticWarnR(); + warnR.setId(IdWorker.getId()); + warnR.setStationCode(rule.getStationCode()); + warnR.setRuleId(rule.getId()); + warnR.setValue(value); + warnR.setTm(tm); + warnR.setType(rule.getType()); + warnR.setLevel(rule.getLevel()); + this.baseMapper.insert(warnR); + return true; + } + + private Boolean getFlag(String condition,BigDecimal ruleValue,BigDecimal value){ + Boolean flag = false; + switch (condition) { + case ">" : + flag = value.compareTo(ruleValue) > 0; + break; + case ">=" : + flag = value.compareTo(ruleValue) >= 0; + break; + case "<" : + flag = value.compareTo(ruleValue) < 0; + break; + case "<=" : + flag = value.compareTo(ruleValue) <= 0; + break; + case "=" : + flag = value.compareTo(ruleValue) == 0; + break; + case "!=" : + flag = value.compareTo(ruleValue) != 0; + break; + } + return flag; + } }