水资源调度-统计分析
parent
d3e6e81f65
commit
8036453c27
|
|
@ -0,0 +1,52 @@
|
|||
package com.gunshi.project.hsz.controller;
|
||||
|
||||
import com.gunshi.core.result.R;
|
||||
import com.gunshi.db.dto.DateRangeSo;
|
||||
import com.gunshi.db.dto.MonthRangeSo;
|
||||
import com.gunshi.project.hsz.entity.vo.WaterAnalysisVo;
|
||||
import com.gunshi.project.hsz.entity.vo.WaterCapacityAnalysisVo;
|
||||
import com.gunshi.project.hsz.model.WaterDispatch;
|
||||
import com.gunshi.project.hsz.model.XlPlan;
|
||||
import com.gunshi.project.hsz.service.WaterCountAnalysisService;
|
||||
import com.gunshi.project.hsz.service.XlPlanService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Tag(name = "水资源调度-统计分析")
|
||||
@RestController
|
||||
@RequestMapping(value="/wca")
|
||||
public class WaterCountAnalysisController {
|
||||
|
||||
|
||||
@Autowired
|
||||
private WaterCountAnalysisService waterCountAnalysisService;
|
||||
|
||||
|
||||
@Operation(summary = "供水分析")
|
||||
@GetMapping("/waterSupplyAnalysis")
|
||||
public R<List<WaterAnalysisVo>> waterSupplyAnalysis(@RequestParam("id") Serializable id) {
|
||||
|
||||
List<WaterAnalysisVo> res = waterCountAnalysisService.waterSupplyAnalysis(id);
|
||||
return R.ok(res);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "调度执行分析")
|
||||
@GetMapping("/waterDispatchAnalysis")
|
||||
public R<List<WaterDispatch>> waterDispatchAnalysis(@RequestParam("year") Serializable year) {
|
||||
List<WaterDispatch> res = waterCountAnalysisService.waterDispatchAnalysis(year);
|
||||
return R.ok(res);
|
||||
}
|
||||
|
||||
@Operation(summary = "水库蓄水量分析")
|
||||
@PostMapping("/waterCapacityAnalysis")
|
||||
public R<List<WaterCapacityAnalysisVo>> waterCapacityAnalysis(@RequestBody DateRangeSo dateRangeSo) {
|
||||
List<WaterCapacityAnalysisVo> res = waterCountAnalysisService.waterCapacityAnalysis(dateRangeSo);
|
||||
return R.ok(res);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.gunshi.project.hsz.entity.vo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class WaterAnalysisVo {
|
||||
|
||||
|
||||
@Schema(description = "用水类型 0灌溉 1生态")
|
||||
private Integer type;
|
||||
|
||||
@Schema(description = "计划供水量")
|
||||
private BigDecimal planSupply;
|
||||
|
||||
@Schema(description = "实际供水量")
|
||||
private BigDecimal realSupply;
|
||||
|
||||
@Schema(description = "偏差量")
|
||||
private BigDecimal gapSupply;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.gunshi.project.hsz.entity.vo;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class WaterCapacityAnalysisVo {
|
||||
|
||||
@Schema(description = "时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date tm;
|
||||
|
||||
@Schema(description = "蓄水量")
|
||||
private BigDecimal cap;
|
||||
|
||||
@Schema(description = "变化率")
|
||||
private BigDecimal rate;
|
||||
}
|
||||
|
|
@ -36,6 +36,10 @@ public class WaterDispatch {
|
|||
@Schema(description = "是否下发 0 是 1 否")
|
||||
private Integer isDistribute;
|
||||
|
||||
|
||||
@TableField("dis_year")
|
||||
private String disYear;
|
||||
|
||||
/**
|
||||
* 调度指令名称
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,125 @@
|
|||
package com.gunshi.project.hsz.service;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.gunshi.db.dto.DateRangeSo;
|
||||
import com.gunshi.project.hsz.entity.vo.WaterAnalysisVo;
|
||||
import com.gunshi.project.hsz.entity.vo.WaterCapacityAnalysisVo;
|
||||
import com.gunshi.project.hsz.model.StRsvrR;
|
||||
import com.gunshi.project.hsz.model.StZvarlB;
|
||||
import com.gunshi.project.hsz.model.WaterDispatch;
|
||||
import com.gunshi.project.hsz.model.XlPlan;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class WaterCountAnalysisService {
|
||||
|
||||
@Autowired
|
||||
private XlPlanService xlPlanService;//兴利计划
|
||||
|
||||
@Autowired
|
||||
private StWaterRReorganizeService stWaterRReorganizeService;//供水量整编
|
||||
|
||||
@Autowired
|
||||
private WaterDispatchService waterDispatchService;//水量调度
|
||||
|
||||
@Autowired
|
||||
private StZvarlBService stZvarlBService;//水位-库容
|
||||
|
||||
@Autowired
|
||||
private StRsvrRService stRsvrRService;
|
||||
|
||||
|
||||
public List<WaterAnalysisVo> waterSupplyAnalysis(Serializable id) {
|
||||
XlPlan byId = xlPlanService.getById(id);
|
||||
List<WaterAnalysisVo> res = new ArrayList<>();
|
||||
WaterAnalysisVo waterAnalysisGGVo = new WaterAnalysisVo();
|
||||
waterAnalysisGGVo.setType(0);
|
||||
WaterAnalysisVo waterAnalysisSTVo = new WaterAnalysisVo();
|
||||
waterAnalysisSTVo.setType(1);
|
||||
res.add(waterAnalysisGGVo);
|
||||
res.add(waterAnalysisSTVo);
|
||||
//判断该兴利计划是年度月度
|
||||
if(byId == null){
|
||||
throw new IllegalArgumentException("对不起,该计划不存在");
|
||||
}
|
||||
//如果是月度
|
||||
//计划灌溉供水量
|
||||
BigDecimal ggWater = byId.getGgWater();
|
||||
waterAnalysisGGVo.setPlanSupply(ggWater);
|
||||
//计划生态供水量
|
||||
BigDecimal stWater = byId.getStWater();
|
||||
waterAnalysisSTVo.setPlanSupply(stWater);
|
||||
Map<String,BigDecimal> map;
|
||||
if(byId.getPlanType().equals(byId.MONTH)){
|
||||
map = stWaterRReorganizeService.getWaterSupplyerYeaarOrMonth(byId.MONTH,byId.getPlanDate());
|
||||
}else{
|
||||
//年度
|
||||
map = stWaterRReorganizeService.getWaterSupplyerYeaarOrMonth(byId.YEAR,byId.getPlanDate());
|
||||
}
|
||||
waterAnalysisGGVo.setRealSupply(map.get("gg"));
|
||||
waterAnalysisGGVo.setGapSupply(waterAnalysisGGVo.getRealSupply().subtract(waterAnalysisGGVo.getPlanSupply()));
|
||||
waterAnalysisSTVo.setRealSupply(map.get("st"));
|
||||
waterAnalysisSTVo.setGapSupply(waterAnalysisSTVo.getRealSupply().subtract(waterAnalysisSTVo.getPlanSupply()));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<WaterDispatch> waterDispatchAnalysis(Serializable year) {
|
||||
List<WaterDispatch> list = waterDispatchService.listByYear(year.toString());
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<WaterCapacityAnalysisVo> waterCapacityAnalysis(DateRangeSo dateRangeSo){
|
||||
List<WaterCapacityAnalysisVo> res = new ArrayList<>();
|
||||
List<StZvarlB> stZvarlBList = stZvarlBService.list();//获取水位-蓄水量
|
||||
//查询时间段的
|
||||
LambdaQueryWrapper<StRsvrR> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.apply("date_part('hour',tm) = 8") // 获取每天早上八点的数据
|
||||
.ge(StRsvrR::getTm,dateRangeSo.getStart())
|
||||
.le(StRsvrR::getTm,dateRangeSo.getEnd());
|
||||
queryWrapper.orderByAsc(StRsvrR::getTm);//根据时间升序
|
||||
List<StRsvrR> stRsvrRS = stRsvrRService.getBaseMapper().selectList(queryWrapper);//获取水库的历史时间段的水位
|
||||
for (int i = 0; i < stRsvrRS.size(); i++) {
|
||||
WaterCapacityAnalysisVo vo = new WaterCapacityAnalysisVo();
|
||||
vo.setTm(stRsvrRS.get(i).getTm());
|
||||
String rz = stRsvrRS.get(i).getRz();//历史水位
|
||||
BigDecimal currentCap = BigDecimal.ZERO;
|
||||
if(rz != null){
|
||||
//TODO 这里需要根据公式进行计算
|
||||
currentCap = stZvarlBService.getWFromZvarl(new BigDecimal(rz).setScale(0,RoundingMode.DOWN),null,stZvarlBList);//获取库容
|
||||
vo.setCap(currentCap);
|
||||
}
|
||||
if(i > 0){
|
||||
//获取前一天的库容
|
||||
BigDecimal prevCap = res.get(i - 1).getCap();
|
||||
if (prevCap == null || BigDecimal.ZERO.compareTo(prevCap) == 0) {
|
||||
vo.setRate(BigDecimal.ZERO.setScale(2, RoundingMode.DOWN));
|
||||
} else {
|
||||
//计算变化率: (当天 - 上一天) / 上一天 * 100
|
||||
BigDecimal diff = currentCap.subtract(prevCap);
|
||||
BigDecimal rate = diff.divide(prevCap, 4, RoundingMode.HALF_UP)
|
||||
.multiply(new BigDecimal(100))
|
||||
.setScale(2, RoundingMode.DOWN);
|
||||
vo.setRate(rate);
|
||||
}
|
||||
}else{
|
||||
vo.setRate(new BigDecimal(0).setScale(2, RoundingMode.DOWN));
|
||||
}
|
||||
res.add(vo);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Service
|
||||
|
|
@ -66,4 +67,8 @@ public class WaterDispatchService extends ServiceImpl<WaterDispatchMapper, Water
|
|||
Page<WaterDispatch> waterDispatchPage = baseMapper.selectPage(pageSo.getPageSo().toPage(), queryWrapper);
|
||||
return waterDispatchPage;
|
||||
}
|
||||
|
||||
public List<WaterDispatch> listByYear(String year) {
|
||||
return this.lambdaQuery().eq(WaterDispatch::getDisYear, year).in(WaterDispatch::getExeStatus,0,2).list();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue