典型年降雨资料下拉查询;预计可供水时间计算
parent
cc7765d782
commit
b8a50368e4
|
|
@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述: 闸阀开关表
|
* 描述: 闸阀开关表
|
||||||
* author: xusan
|
* author: xusan
|
||||||
|
|
@ -86,4 +88,10 @@ public class GateValveRealController {
|
||||||
public void logExport(@RequestBody GateHisPageSo so, HttpServletResponse response) {
|
public void logExport(@RequestBody GateHisPageSo so, HttpServletResponse response) {
|
||||||
service.logExport(so,response);
|
service.logExport(so,response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "预计可供水时间")
|
||||||
|
@GetMapping("/supply/time")
|
||||||
|
public R<Map<BigDecimal, String>> supplyTime(@RequestParam(value = "year",required = false) @Parameter(description = "年份") Integer year,@RequestParam(value = "month",required = false) @Parameter(description = "月份") Integer month) {
|
||||||
|
return R.ok(service.supplyTime(year,month));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.gunshi.core.result.R;
|
import com.gunshi.core.result.R;
|
||||||
import com.gunshi.project.xyt.entity.so.TyYearRainfallPageSo;
|
import com.gunshi.project.xyt.entity.so.TyYearRainfallPageSo;
|
||||||
import com.gunshi.project.xyt.entity.vo.TyYearRainfallVo;
|
import com.gunshi.project.xyt.entity.vo.TyYearRainfallVo;
|
||||||
import com.gunshi.project.xyt.model.TyYearRainfall;
|
|
||||||
import com.gunshi.project.xyt.service.TyYearRainfallService;
|
import com.gunshi.project.xyt.service.TyYearRainfallService;
|
||||||
import com.gunshi.project.xyt.validate.markers.Insert;
|
import com.gunshi.project.xyt.validate.markers.Insert;
|
||||||
import com.gunshi.project.xyt.validate.markers.Update;
|
import com.gunshi.project.xyt.validate.markers.Update;
|
||||||
|
|
@ -50,8 +49,8 @@ public class TyYearRainfallController {
|
||||||
|
|
||||||
@Operation(summary = "列表")
|
@Operation(summary = "列表")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
public R<List<TyYearRainfall>> list() {
|
public R<List<TyYearRainfallVo>> list() {
|
||||||
return R.ok(service.lambdaQuery().list());
|
return R.ok(service.queryList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "分页")
|
@Operation(summary = "分页")
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import jakarta.validation.constraints.Size;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -53,7 +54,7 @@ public class StWaterRReal implements Serializable {
|
||||||
@TableField(value="q")
|
@TableField(value="q")
|
||||||
@Schema(description="流量")
|
@Schema(description="流量")
|
||||||
// @Size(max = 0,message = "流量最大长度要小于 0")
|
// @Size(max = 0,message = "流量最大长度要小于 0")
|
||||||
private String q;
|
private BigDecimal q;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 水量
|
* 水量
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,21 @@
|
||||||
package com.gunshi.project.xyt.service;
|
package com.gunshi.project.xyt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.gunshi.project.xyt.entity.so.GateHisPageSo;
|
import com.gunshi.project.xyt.entity.so.GateHisPageSo;
|
||||||
|
import com.gunshi.project.xyt.entity.vo.AttResBaseVo;
|
||||||
import com.gunshi.project.xyt.entity.vo.GateStautsVo;
|
import com.gunshi.project.xyt.entity.vo.GateStautsVo;
|
||||||
import com.gunshi.project.xyt.entity.vo.GateValveOplogVo;
|
import com.gunshi.project.xyt.entity.vo.GateValveOplogVo;
|
||||||
import com.gunshi.project.xyt.mapper.GateValveRMapper;
|
|
||||||
import com.gunshi.project.xyt.mapper.GateValveRealMapper;
|
import com.gunshi.project.xyt.mapper.GateValveRealMapper;
|
||||||
import com.gunshi.project.xyt.model.GateValveKey;
|
import com.gunshi.project.xyt.mapper.StWaterRRealMapper;
|
||||||
import com.gunshi.project.xyt.model.GateValveKeyAutoDao;
|
import com.gunshi.project.xyt.mapper.TyYearRainfallMapper;
|
||||||
import com.gunshi.project.xyt.model.GateValveOplog;
|
import com.gunshi.project.xyt.model.*;
|
||||||
import com.gunshi.project.xyt.model.GateValveReal;
|
import com.gunshi.project.xyt.util.DataHandleUtil;
|
||||||
import com.gunshi.project.xyt.util.DateUtil;
|
import com.gunshi.project.xyt.util.DateUtil;
|
||||||
import com.gunshi.project.xyt.util.ExcelUtil;
|
import com.gunshi.project.xyt.util.ExcelUtil;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
|
@ -22,8 +25,9 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.math.RoundingMode;
|
||||||
import java.util.List;
|
import java.time.LocalDate;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述: 闸阀开关表
|
* 描述: 闸阀开关表
|
||||||
|
|
@ -39,10 +43,16 @@ public class GateValveRealService extends ServiceImpl<GateValveRealMapper, GateV
|
||||||
private GateValveKeyAutoDao gateValveKeyAutoDao;
|
private GateValveKeyAutoDao gateValveKeyAutoDao;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private com.gunshi.project.xyt.model.GateValveOplogAutoDao gateValveOplogAutoDao;
|
private GateValveOplogAutoDao gateValveOplogAutoDao;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private GateValveRMapper gateValveRMapper;
|
private ReservoirWaterService reservoirWaterService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StWaterRRealMapper stWaterRRealMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TyYearRainfallMapper tyYearRainfallMapper;
|
||||||
|
|
||||||
public List<GateStautsVo> gateStatusList() {
|
public List<GateStautsVo> gateStatusList() {
|
||||||
List<GateStautsVo> list = baseMapper.gateStatusList();
|
List<GateStautsVo> list = baseMapper.gateStatusList();
|
||||||
|
|
@ -101,6 +111,65 @@ public class GateValveRealService extends ServiceImpl<GateValveRealMapper, GateV
|
||||||
List<GateValveOplogVo> logList = baseMapper.logList(so);
|
List<GateValveOplogVo> logList = baseMapper.logList(so);
|
||||||
ExcelUtil.exportExcel(logList,"闸阀操作日志",GateValveOplogVo.class,response,"闸阀操作日志");
|
ExcelUtil.exportExcel(logList,"闸阀操作日志",GateValveOplogVo.class,response,"闸阀操作日志");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<BigDecimal, String> supplyTime(Integer year, Integer month) {
|
||||||
|
Map<BigDecimal, String> map = new HashMap<>();
|
||||||
|
/**
|
||||||
|
* 可供水量= 实时库容 - 死库容
|
||||||
|
* 小时水量= (输水管流量 + 放水管流量)*3600
|
||||||
|
* 可供水小时数 = 可供水量 / 小时水量
|
||||||
|
* 可供水天数 = 可供水小时数换算为天数
|
||||||
|
*/
|
||||||
|
List<AttResBaseVo> list = reservoirWaterService.list();
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
AttResBaseVo attResBaseVo = list.get(0);
|
||||||
|
BigDecimal nowCap = attResBaseVo.getNowCap() == null ? new BigDecimal(0) : attResBaseVo.getNowCap();
|
||||||
|
BigDecimal deadCap = attResBaseVo.getDeadCap();
|
||||||
|
|
||||||
|
BigDecimal supplyV = nowCap.subtract(deadCap);
|
||||||
|
if(year != null){
|
||||||
|
//计算预测来水量
|
||||||
|
BigDecimal predictV = calcPredictV(year,month,attResBaseVo.getWatShedArea());
|
||||||
|
supplyV = supplyV.add(predictV);
|
||||||
|
}
|
||||||
|
List<StWaterRReal> water = stWaterRRealMapper.listRelated();
|
||||||
|
//小时水量
|
||||||
|
BigDecimal hourQ = water.stream().map(StWaterRReal::getQ).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(3600));
|
||||||
|
BigDecimal day = supplyV.multiply(new BigDecimal(10000)).divide(hourQ.multiply(new BigDecimal(24)),1, RoundingMode.HALF_UP);
|
||||||
|
long l = DataHandleUtil.BigDecimalIntegerPart(day);
|
||||||
|
String date = DateUtil.getPlusDate(new Date(), l);
|
||||||
|
map.put(day,date);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal calcPredictV(Integer year, Integer month,BigDecimal watShedArea) {
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
Integer nowMonth = now.getMonthValue();
|
||||||
|
|
||||||
|
LambdaQueryWrapper<TyYearRainfall> queryWrapper = Wrappers.lambdaQuery();
|
||||||
|
queryWrapper.eq(TyYearRainfall::getYear,year)
|
||||||
|
.eq(TyYearRainfall::getType,2)
|
||||||
|
.ge(TyYearRainfall::getMonth,nowMonth)
|
||||||
|
.le(TyYearRainfall::getMonth,month);
|
||||||
|
List<TyYearRainfall> list = tyYearRainfallMapper.selectList(queryWrapper);
|
||||||
|
|
||||||
|
//和当前月份相同的降雨量
|
||||||
|
Optional<TyYearRainfall> first = list.stream().filter(o -> nowMonth == o.getMonth()).findFirst();
|
||||||
|
BigDecimal drp = first.isPresent() ? first.get().getDrp() : new BigDecimal(0);
|
||||||
|
int dayOfMonth = now.getDayOfMonth();
|
||||||
|
int total = now.lengthOfMonth();
|
||||||
|
BigDecimal nowMonthDrp = new BigDecimal((total - dayOfMonth + 1)).multiply(drp).divide(new BigDecimal(total), 2, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
|
//当前月到预测月份的降雨量
|
||||||
|
BigDecimal value = list.stream().filter(o -> nowMonth != o.getMonth()).map(TyYearRainfall::getDrp).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
//预测来水量 = 月降雨量和 * 水库坝址控制流域面积
|
||||||
|
BigDecimal sum = nowMonthDrp.add(value);
|
||||||
|
return sum.multiply(watShedArea);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import com.gunshi.project.xyt.entity.so.TyYearRainfallPageSo;
|
||||||
import com.gunshi.project.xyt.entity.vo.TyYearRainfallVo;
|
import com.gunshi.project.xyt.entity.vo.TyYearRainfallVo;
|
||||||
import com.gunshi.project.xyt.mapper.TyYearRainfallMapper;
|
import com.gunshi.project.xyt.mapper.TyYearRainfallMapper;
|
||||||
import com.gunshi.project.xyt.model.TyYearRainfall;
|
import com.gunshi.project.xyt.model.TyYearRainfall;
|
||||||
|
import com.gunshi.project.xyt.util.MyBeanUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -71,7 +72,12 @@ public class TyYearRainfallService extends ServiceImpl<TyYearRainfallMapper, TyY
|
||||||
|
|
||||||
private void fillList(Page<TyYearRainfallVo> ret) {
|
private void fillList(Page<TyYearRainfallVo> ret) {
|
||||||
if (ret.getRecords() != null) {
|
if (ret.getRecords() != null) {
|
||||||
for (TyYearRainfallVo record : ret.getRecords()) {
|
queryChild(ret.getRecords());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void queryChild(List<TyYearRainfallVo> records) {
|
||||||
|
for (TyYearRainfallVo record : records) {
|
||||||
LambdaQueryWrapper<TyYearRainfall> queryWrapper = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<TyYearRainfall> queryWrapper = Wrappers.lambdaQuery();
|
||||||
queryWrapper.eq(TyYearRainfall::getYear,record.getYear())
|
queryWrapper.eq(TyYearRainfall::getYear,record.getYear())
|
||||||
.eq(TyYearRainfall::getType,2)
|
.eq(TyYearRainfall::getType,2)
|
||||||
|
|
@ -79,7 +85,6 @@ public class TyYearRainfallService extends ServiceImpl<TyYearRainfallMapper, TyY
|
||||||
record.setList(this.list(queryWrapper));
|
record.setList(this.list(queryWrapper));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public boolean updateData(TyYearRainfallVo dto) {
|
public boolean updateData(TyYearRainfallVo dto) {
|
||||||
checkParam(dto);
|
checkParam(dto);
|
||||||
|
|
@ -109,6 +114,15 @@ public class TyYearRainfallService extends ServiceImpl<TyYearRainfallMapper, TyY
|
||||||
deleteMonthData(tyYearRainfall.getYear());
|
deleteMonthData(tyYearRainfall.getYear());
|
||||||
return this.removeById(id);
|
return this.removeById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<TyYearRainfallVo> queryList() {
|
||||||
|
LambdaQueryWrapper<TyYearRainfall> queryWrapper = Wrappers.lambdaQuery();
|
||||||
|
queryWrapper.eq(TyYearRainfall::getType,1);
|
||||||
|
List<TyYearRainfall> list = this.list(queryWrapper);
|
||||||
|
List<TyYearRainfallVo> resList = MyBeanUtil.collectionCopy(list,TyYearRainfallVo.class);
|
||||||
|
queryChild(resList);
|
||||||
|
return resList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,16 @@ import java.util.Map;
|
||||||
|
|
||||||
public class DataHandleUtil {
|
public class DataHandleUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断BigDecimal的小数部分是否为0
|
||||||
|
* @param bigDecimal
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static long BigDecimalIntegerPart(BigDecimal bigDecimal) {
|
||||||
|
BigDecimal integerPart = bigDecimal.setScale(0, RoundingMode.UP);
|
||||||
|
return integerPart.longValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static BigDecimal calcData(BigDecimal rz, Map<BigDecimal, BigDecimal> map,List<BigDecimal> list) {
|
public static BigDecimal calcData(BigDecimal rz, Map<BigDecimal, BigDecimal> map,List<BigDecimal> list) {
|
||||||
//库容曲线中最近的一组水位
|
//库容曲线中最近的一组水位
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.gunshi.project.xyt.util;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
@ -24,6 +25,8 @@ public class DateUtil {
|
||||||
|
|
||||||
private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
private static DateTimeFormatter ymdformat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
|
||||||
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd日HH时");
|
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd日HH时");
|
||||||
|
|
||||||
private static DateTimeFormatter ym = DateTimeFormatter.ofPattern("YYYYMM");
|
private static DateTimeFormatter ym = DateTimeFormatter.ofPattern("YYYYMM");
|
||||||
|
|
@ -116,10 +119,11 @@ public class DateUtil {
|
||||||
return minusTime.format(formatter);
|
return minusTime.format(formatter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPlusTime(String str,long hour){
|
public static String getPlusDate(Date date,long day){
|
||||||
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
|
String str = convertDateToString(date);
|
||||||
LocalDateTime minusTime = dateTime.plusHours(hour);
|
LocalDate localDate = LocalDate.parse(str, ymdformat);
|
||||||
return minusTime.format(formatter);
|
LocalDate plusDay = localDate.plusDays(day);
|
||||||
|
return plusDay.format(ymdformat);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getTodayEight(){
|
public static String getTodayEight(){
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue