diff --git a/module-common/src/main/java/com/gunshi/project/ss/common/mapper/JcskGnssRMapper.java b/module-common/src/main/java/com/gunshi/project/ss/common/mapper/JcskGnssRMapper.java index 9e2f376..b2d3c81 100644 --- a/module-common/src/main/java/com/gunshi/project/ss/common/mapper/JcskGnssRMapper.java +++ b/module-common/src/main/java/com/gunshi/project/ss/common/mapper/JcskGnssRMapper.java @@ -38,6 +38,8 @@ public interface JcskGnssRMapper extends BaseMapper { t1.cd, t1.ch, t1.cd_nm as cdnm, + t1.lgtd, + t1.lttd, t2.de, t2.dn, t2.du, diff --git a/module-common/src/main/java/com/gunshi/project/ss/common/model/StPptnRReal.java b/module-common/src/main/java/com/gunshi/project/ss/common/model/StPptnRReal.java index 0eb1bd2..86ab493 100644 --- a/module-common/src/main/java/com/gunshi/project/ss/common/model/StPptnRReal.java +++ b/module-common/src/main/java/com/gunshi/project/ss/common/model/StPptnRReal.java @@ -169,4 +169,11 @@ public class StPptnRReal implements Serializable { @TableField(exist = false) @Schema(description = "站点名称") private String stnm; + + + @TableField(exist = false) + private BigDecimal lgtd; + + @TableField(exist = false) + private BigDecimal lttd; } diff --git a/module-common/src/main/java/com/gunshi/project/ss/common/model/vo/JcskGnessListVo.java b/module-common/src/main/java/com/gunshi/project/ss/common/model/vo/JcskGnessListVo.java index 1a98d27..5fca51b 100644 --- a/module-common/src/main/java/com/gunshi/project/ss/common/model/vo/JcskGnessListVo.java +++ b/module-common/src/main/java/com/gunshi/project/ss/common/model/vo/JcskGnessListVo.java @@ -61,4 +61,8 @@ public class JcskGnessListVo { @JsonIgnore private String direction; + + private BigDecimal lgtd; + + private BigDecimal lttd; } diff --git a/src/main/java/com/gunshi/project/ss/controller/AttCctvBaseController.java b/src/main/java/com/gunshi/project/ss/controller/AttCctvBaseController.java index ae5d9cc..09d72b8 100644 --- a/src/main/java/com/gunshi/project/ss/controller/AttCctvBaseController.java +++ b/src/main/java/com/gunshi/project/ss/controller/AttCctvBaseController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.gunshi.core.result.R; +import com.gunshi.project.ss.common.model.StationNormalVo; import com.gunshi.project.ss.entity.so.AttCctvBasePage; import com.gunshi.project.ss.entity.vo.CctvControlVo; import com.gunshi.project.ss.model.AttCctvBase; @@ -108,12 +109,22 @@ public class AttCctvBaseController { public R> list() { List res = service.queryList(); //没时间只能默认为离线 - for (AttCctvBase re : res) { - re.setStatus(0); - } + handlerCCTVStauts(res); return R.ok(res); } + public void handlerCCTVStauts(List res ){ + for (AttCctvBase station : res) { + //建议自测的时候别用这个,如果无法访问那个ip的话,可能一个接口得调用十几分钟 + String preview = service.preview(station.getIndexCode()); + if(preview == null || com.ruoyi.common.utils.StringUtils.isBlank(preview) ||!preview.startsWith("ws")){ + station.setStatus(0); + }else{ + station.setStatus(1); + } + } + } + @Operation(summary = "分页") @PostMapping("/page") public R> page(@RequestBody @Validated AttCctvBasePage page) { diff --git a/src/main/java/com/gunshi/project/ss/controller/DeptempController.java b/src/main/java/com/gunshi/project/ss/controller/DeptempController.java index c735211..eb22230 100644 --- a/src/main/java/com/gunshi/project/ss/controller/DeptempController.java +++ b/src/main/java/com/gunshi/project/ss/controller/DeptempController.java @@ -2,12 +2,14 @@ package com.gunshi.project.ss.controller; import com.github.pagehelper.PageInfo; import com.gunshi.core.result.R; +import com.gunshi.project.ss.entity.vo.SysDeptTreeVo; import com.gunshi.project.ss.service.DeptempService; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.PageUtils; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -50,4 +52,12 @@ public class DeptempController { return rspData; } + + @Schema(description = "部门-员工树") + @GetMapping("/tree") + public R tree(){ + SysDeptTreeVo res = deptempService.tree(); + return R.ok(res); + } + } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/ss/controller/RainBasinDivisionController.java b/src/main/java/com/gunshi/project/ss/controller/RainBasinDivisionController.java index df0050e..bd2e4f9 100644 --- a/src/main/java/com/gunshi/project/ss/controller/RainBasinDivisionController.java +++ b/src/main/java/com/gunshi/project/ss/controller/RainBasinDivisionController.java @@ -55,6 +55,10 @@ public class RainBasinDivisionController { return R.ok(rainBasinDivisionService.queryStPptnDetailsByStcd(stcd)); } + @Get(path = "/rainBasinDivision/queryStPptnDetails/list",summary = "查看所有测站详细雨量情况") + public R> queryStPptnDetailsByList(){ + return R.ok(rainBasinDivisionService.queryStPptnDetailsByStcdList()); + } @Post(path = "/maxRain",summary = "根据测站编码查询时间段内最大小时雨量") public R maxRain(@RequestBody @Validated StPptnSo stPptnSo){ return R.ok(rainBasinDivisionService.maxRain(stPptnSo)); diff --git a/src/main/java/com/gunshi/project/ss/controller/RiverWaterController.java b/src/main/java/com/gunshi/project/ss/controller/RiverWaterController.java index 9218c24..5f46407 100644 --- a/src/main/java/com/gunshi/project/ss/controller/RiverWaterController.java +++ b/src/main/java/com/gunshi/project/ss/controller/RiverWaterController.java @@ -31,6 +31,7 @@ import java.util.List; @RestController @RequestMapping("/river/water") @Tag(name = "河道水情") +@Deprecated(since = "双石水库没有河道水位站") public class RiverWaterController { @Autowired diff --git a/src/main/java/com/gunshi/project/ss/controller/StationController.java b/src/main/java/com/gunshi/project/ss/controller/StationController.java index f0a49e5..5ff4160 100644 --- a/src/main/java/com/gunshi/project/ss/controller/StationController.java +++ b/src/main/java/com/gunshi/project/ss/controller/StationController.java @@ -76,6 +76,7 @@ public class StationController { @GetMapping("/syList") public R> syList(){ List tree = jcskSyBService.queryNormalList(); + handlerStatus(tree); return R.ok(tree); } @@ -83,6 +84,7 @@ public class StationController { @GetMapping("/gnssList") public R> gnssList(){ List tree = jcskGnssBService.queryNormalList(); + handlerStatus(tree); return R.ok(tree); } @@ -90,6 +92,7 @@ public class StationController { @GetMapping("/slList") public R> slList(){ List tree = jcskSlBService.queryNormalList(); + handlerStatus(tree); return R.ok(tree); } diff --git a/src/main/java/com/gunshi/project/ss/entity/es/EsObjectDocument.java b/src/main/java/com/gunshi/project/ss/entity/es/EsObjectDocument.java index 7d7a71e..99191f7 100644 --- a/src/main/java/com/gunshi/project/ss/entity/es/EsObjectDocument.java +++ b/src/main/java/com/gunshi/project/ss/entity/es/EsObjectDocument.java @@ -9,7 +9,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; import java.math.BigDecimal; @Data -//@Document(indexName="ss_object") +@Document(indexName="ss_object") public class EsObjectDocument { @Id // 必须添加这个注解 private String id; // 字段名可以是id或自定义 diff --git a/src/main/java/com/gunshi/project/ss/entity/vo/StFlowRListVo.java b/src/main/java/com/gunshi/project/ss/entity/vo/StFlowRListVo.java index 13bd193..b9a80a7 100644 --- a/src/main/java/com/gunshi/project/ss/entity/vo/StFlowRListVo.java +++ b/src/main/java/com/gunshi/project/ss/entity/vo/StFlowRListVo.java @@ -43,4 +43,10 @@ public class StFlowRListVo { @TableField(exist = false) private BigDecimal total24V; + + private BigDecimal lgtd; + + private BigDecimal lttd; + + private Integer status; } diff --git a/src/main/java/com/gunshi/project/ss/entity/vo/StPptnDetailsVo.java b/src/main/java/com/gunshi/project/ss/entity/vo/StPptnDetailsVo.java index 00a703a..08ca46c 100644 --- a/src/main/java/com/gunshi/project/ss/entity/vo/StPptnDetailsVo.java +++ b/src/main/java/com/gunshi/project/ss/entity/vo/StPptnDetailsVo.java @@ -43,4 +43,10 @@ public class StPptnDetailsVo extends StPptnRReal { @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") private Date maxDrpTime; + @Schema(description = "今日雨量") + private BigDecimal todayDrp; + + @Schema(description = "24h预测数据") + private BigDecimal force24hDrp; + } diff --git a/src/main/java/com/gunshi/project/ss/entity/vo/SysDeptTreeVo.java b/src/main/java/com/gunshi/project/ss/entity/vo/SysDeptTreeVo.java new file mode 100644 index 0000000..36cc39a --- /dev/null +++ b/src/main/java/com/gunshi/project/ss/entity/vo/SysDeptTreeVo.java @@ -0,0 +1,20 @@ +package com.gunshi.project.ss.entity.vo; + + +import com.ruoyi.common.core.domain.entity.SysUser; +import lombok.Data; + +import java.util.List; + +@Data +public class SysDeptTreeVo { + + + private Long deptId; + + private String deptName; + + List children; + + private List sysUsers; +} diff --git a/src/main/java/com/gunshi/project/ss/entity/vo/SysUserVo.java b/src/main/java/com/gunshi/project/ss/entity/vo/SysUserVo.java new file mode 100644 index 0000000..3760c77 --- /dev/null +++ b/src/main/java/com/gunshi/project/ss/entity/vo/SysUserVo.java @@ -0,0 +1,20 @@ +package com.gunshi.project.ss.entity.vo; + + +import com.ruoyi.common.annotation.Excel; + +public class SysUserVo { + + /** 用户ID */ + private Long userId; + + private Long deptId; + + /** 用户账号 */ + @Excel(name = "登录名称") + private String userName; + + /** 用户昵称 */ + @Excel(name = "用户名称") + private String nickName; +} diff --git a/src/main/java/com/gunshi/project/ss/mapper/RealRainMapper.java b/src/main/java/com/gunshi/project/ss/mapper/RealRainMapper.java index e2e2e62..2ca8666 100644 --- a/src/main/java/com/gunshi/project/ss/mapper/RealRainMapper.java +++ b/src/main/java/com/gunshi/project/ss/mapper/RealRainMapper.java @@ -118,8 +118,9 @@ public interface RealRainMapper { @Select(""" diff --git a/src/main/java/com/gunshi/project/ss/service/DeptempService.java b/src/main/java/com/gunshi/project/ss/service/DeptempService.java index fa6d760..ab84780 100644 --- a/src/main/java/com/gunshi/project/ss/service/DeptempService.java +++ b/src/main/java/com/gunshi/project/ss/service/DeptempService.java @@ -1,5 +1,6 @@ package com.gunshi.project.ss.service; +import com.gunshi.project.ss.entity.vo.SysDeptTreeVo; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.mapper.SysDeptMapper; @@ -8,7 +9,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 描述: APP版本记录 @@ -34,6 +37,54 @@ public class DeptempService{ return deptMapper.selectDeptList(dept); } + public SysDeptTreeVo tree() { + SysDept dept = new SysDept(); + dept.setDelFlag("0"); + List allDepts = selectDeptList(dept); + SysUser user = new SysUser(); + user.setDelFlag("0"); + List allUsers = selectUserList(user); + allUsers = allUsers.stream().filter(o -> o.getDeptId() != null).collect(Collectors.toList()); + SysDeptTreeVo root = getRoot(allDepts, allUsers); + return root; + } + + public SysDeptTreeVo getRoot(List allDepts,List allUsers){ + SysDeptTreeVo root = null; + for (SysDept allDept : allDepts) { + if(allDept.getParentId().toString().equals("0")){ + root = new SysDeptTreeVo(); + root.setDeptName(allDept.getDeptName()); + root.setDeptId(allDept.getDeptId()); + List children = getChildren(allDepts,allUsers, root.getDeptId()); + root.setChildren(children); + List users = getUsers(root.getDeptId(), allUsers); + root.setSysUsers(users); + break; + } + } + return root; + } + + public List getChildren(List allDepts,List allUsers,Long parentId){ + List children = new ArrayList<>(); + for (SysDept allDept : allDepts) { + if(allDept.getParentId().toString().equals(parentId.toString())){ + SysDeptTreeVo child = new SysDeptTreeVo(); + child.setDeptName(allDept.getDeptName()); + child.setDeptId(allDept.getDeptId()); + child.setChildren(getChildren(allDepts,allUsers,allDept.getDeptId())); + child.setSysUsers(getUsers(child.getDeptId(),allUsers)); + children.add(child); + } + } + return children; + } + + public List getUsers(Long deptId,List allUsers){ + List collect = allUsers.stream().filter(u -> u.getDeptId().equals(deptId)).collect(Collectors.toList()); + return collect; + } } diff --git a/src/main/java/com/gunshi/project/ss/service/RainBasinDivisionService.java b/src/main/java/com/gunshi/project/ss/service/RainBasinDivisionService.java index 6ae6c3d..dd60e71 100644 --- a/src/main/java/com/gunshi/project/ss/service/RainBasinDivisionService.java +++ b/src/main/java/com/gunshi/project/ss/service/RainBasinDivisionService.java @@ -2,9 +2,8 @@ package com.gunshi.project.ss.service; import cn.hutool.core.bean.BeanUtil; import com.gunshi.project.ss.entity.so.StPptnSo; -import com.gunshi.project.ss.entity.vo.CartogramVo; -import com.gunshi.project.ss.entity.vo.StPptnDetailsVo; -import com.gunshi.project.ss.entity.vo.StPptnVo; +import com.gunshi.project.ss.entity.so.WeatherSo; +import com.gunshi.project.ss.entity.vo.*; import com.gunshi.project.ss.mapper.RealRainMapper; import com.gunshi.project.ss.common.mapper.StPptnRMapper; import com.gunshi.project.ss.model.StPptnRD; @@ -240,21 +239,13 @@ public class RainBasinDivisionService { } Date date = new Date(); -// //48小时降雨量 -// BigDecimal h48 = stStbprpBMapper.queryStPptn48HByStcd(stcd); -// if (h48 == null) { -// stPptnDetailsVo.setH48(value0); -// } else { -// stPptnDetailsVo.setH48(h48); -// } -// // //今日雨量 -// BigDecimal todayDrp = queryTodayDrpByStcdAndTime(stcd, date); -// if (todayDrp == null) { -// stPptnDetailsVo.setTodayDrp(value0); -// } else { -// stPptnDetailsVo.setTodayDrp(todayDrp); -// } + BigDecimal todayDrp = queryTodayDrpByStcdAndTime(stcd, date); + if (todayDrp == null) { + stPptnDetailsVo.setTodayDrp(null); + } else { + stPptnDetailsVo.setTodayDrp(todayDrp); + } //昨日雨量 BigDecimal yesterdayDrp = queryYesterdayDrpByStcdAndTime(stcd, date); @@ -300,6 +291,196 @@ public class RainBasinDivisionService { return stPptnDetailsVo; } + @Autowired + private StStbprpBService stStbprpBService; + + @Autowired + private ForecastService forecastService; + + public List queryStPptnDetailsByStcdList() { + List stStatusVos = stStbprpBService.rainList(); + List res = new ArrayList<>(); + for (StStatusVo stStatusVo : stStatusVos) { + String stcd = stStatusVo.getStcd(); + StPptnRReal stPptnRReal = realRainMapper.queryPptnByStcd(stcd); + + StPptnDetailsVo stPptnDetailsVo = new StPptnDetailsVo(); + if (stPptnRReal != null){ + BeanUtil.copyProperties(stPptnRReal, stPptnDetailsVo); + Date tm = stPptnRReal.getTm(); + LocalDateTime nowTime = LocalDateTime.now(); + LocalDateTime latestTime = LocalDateTime.ofInstant(tm.toInstant(), ZoneId.systemDefault()); + + boolean isToday = latestTime.toLocalDate().equals(nowTime.toLocalDate()); + + if(!isToday){ + stPptnDetailsVo.setH1(null); + stPptnDetailsVo.setH3(null); + stPptnDetailsVo.setH6(null); + stPptnDetailsVo.setH12(null); + stPptnDetailsVo.setH24(null); + stPptnDetailsVo.setH48(null); + stPptnDetailsVo.setDrp(null); + stPptnDetailsVo.setToday(null); + } + }else { + stPptnDetailsVo.setStcd(stcd); + } + Date date = new Date(); + +// //今日雨量 + BigDecimal todayDrp = queryTodayDrpByStcdAndTime(stcd, date); + if (todayDrp == null) { + stPptnDetailsVo.setTodayDrp(null); + } else { + stPptnDetailsVo.setTodayDrp(todayDrp); + } + + //昨日雨量 + BigDecimal yesterdayDrp = queryYesterdayDrpByStcdAndTime(stcd, date); + if (yesterdayDrp == null) { + stPptnDetailsVo.setYesterdayDrp(null); + } else { + stPptnDetailsVo.setYesterdayDrp(yesterdayDrp); + } + + //本月降雨量 + BigDecimal monthDay = queryMonthDrpByStcdAndTime(stcd, date); + if (monthDay == null) { + stPptnDetailsVo.setMonthDrp(null); + } else { + stPptnDetailsVo.setMonthDrp(monthDay); + } + + //本年降雨量 + BigDecimal yearDrp = queryYearDrpByStcdAndTime(stcd, date); + if (yearDrp == null) { + stPptnDetailsVo.setYearDrp(null); + } else { + stPptnDetailsVo.setYearDrp(yearDrp); + } + + //本年天数 + Long yearDay = countYearDay(date); + stPptnDetailsVo.setYearDay(yearDay); + + Map map = queryYearDrpDayAndMaxDrpAndMaxDrpTimeByStcdAndTime(stcd, date); + + //本年降雨天数 + Long yearDrpDay = (Long) map.get("count"); + stPptnDetailsVo.setYearDrpDay(yearDrpDay); + + //本年最大日雨量 + BigDecimal maxDrp = (BigDecimal) map.get("maxDrp"); + stPptnDetailsVo.setMaxDrp(maxDrp); + + //本年最大日雨量时间 + Date maxDrpTime =(Date) map.get("maxDrpTime"); + stPptnDetailsVo.setMaxDrpTime(maxDrpTime); + + //降雨预测数据 + WeatherSo weatherSo = new WeatherSo(); + String tm; + LocalDateTime now = LocalDateTime.now(); + int hour = now.getHour(); + if(hour < 8){ + // 使用昨日20时的tm + LocalDateTime yesterday20 = now.minusDays(1).withHour(20).withMinute(0).withSecond(0); + tm = formatTm(yesterday20); + }else if(hour > 8 && hour < 20){ + // 使用今日08时的tm + LocalDateTime today08 = now.withHour(8).withMinute(0).withSecond(0); + tm = formatTm(today08); + }else{ + // 使用今日20时的tm + LocalDateTime today20 = now.withHour(20).withMinute(0).withSecond(0); + tm = formatTm(today20); + } + weatherSo.setTm(tm); + try { + List fore = forecastService.fore(weatherSo); + if(fore != null && !fore.isEmpty()){ + fore.stream().forEach(o ->{ + if(o.getStcd().equals(stcd)){ + Double h24 = o.getH24(); + stPptnDetailsVo.setForce24hDrp(h24 == null?null:new BigDecimal(h24.toString())); + } + }); + } + } catch (Exception e) { + //接口不知道是好的还是坏的,反正这个接口坏了别影响其它的接口 + e.printStackTrace(); + } + + res.add(stPptnDetailsVo); + } + + return res; + } + + /** + * 格式化时间为YYYYMMDDHH格式 + */ + private String formatTm(LocalDateTime dateTime) { + return String.format("%04d%02d%02d%02d", + dateTime.getYear(), + dateTime.getMonthValue(), + dateTime.getDayOfMonth(), + dateTime.getHour()); + } + + /** + * 根据测站编码和时间查看今日降雨量 + * + * @param stcd 测站编码 + * @param time 当前时间 + * @return 今日降雨量 + */ + private BigDecimal queryTodayDrpByStcdAndTime(String stcd, Date time) { + LocalDateTime now = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + LocalDateTime startTime; + LocalDateTime endTime; + + // 如果当前时间大于等于8:00,则从今日8:00开始计算 + if (now.getHour() >= 8) { + startTime = LocalDateTime.of( + now.getYear(), + now.getMonthValue(), + now.getDayOfMonth(), + 8, + 0, + 0 + ); + endTime = now; + } else { + // 如果当前时间小于8:00,则从昨日8:00开始计算到今日8:00 + // 因为今日8:00之前的降雨量实际上属于昨日的统计 + LocalDateTime yesterday = now.minusDays(1); + startTime = LocalDateTime.of( + yesterday.getYear(), + yesterday.getMonthValue(), + yesterday.getDayOfMonth(), + 8, + 0, + 0 + ); + endTime = LocalDateTime.of( + now.getYear(), + now.getMonthValue(), + now.getDayOfMonth(), + 8, + 0, + 0 + ); + } + + return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime( + stcd, + Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()) + ); + } + /** * 根据测站编码和时间查看昨日降雨量 * @@ -505,4 +686,6 @@ public class RainBasinDivisionService { public StPptnRReal queryStPptnRealByStcd(String stcd) { return realRainMapper.queryPptnByStcd(stcd); } + + } diff --git a/src/main/java/com/gunshi/project/ss/service/StFlowRService.java b/src/main/java/com/gunshi/project/ss/service/StFlowRService.java index fb867db..09cc402 100644 --- a/src/main/java/com/gunshi/project/ss/service/StFlowRService.java +++ b/src/main/java/com/gunshi/project/ss/service/StFlowRService.java @@ -72,7 +72,8 @@ public class StFlowRService extends ServiceImpl { StFlowRListVo stFlowR = new StFlowRListVo(); stFlowR.setStcd(flowStation.getStcd()); stFlowR.setStnm(flowStation.getStnm()); - + stFlowR.setLgtd(flowStation.getLgtd()); + stFlowR.setLttd(flowStation.getLttd()); // 获取24小时内的所有流量数据 List list = lambdaQuery() .eq(StFlowR::getStcd, flowStation.getStcd()) @@ -90,7 +91,14 @@ public class StFlowRService extends ServiceImpl { StFlowR latestData = list.get(list.size() - 1); stFlowR.setTm(latestData.getTm()); stFlowR.setQ(latestData.getQ()); - + //判断状态 + LocalDateTime tm = latestData.getTm(); + Duration between = Duration.between(tm, now); + if(between.toHours() > 24){ + stFlowR.setStatus(0); + }else{ + stFlowR.setStatus(1); + } // 计算统计值 calculateTotalVolume(list, stFlowR);