gunshi-project-ss/src/main/java/com/gunshi/project/hsz/controller/ReservoirWaterController.java

162 lines
6.5 KiB
Java

package com.gunshi.project.hsz.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gunshi.core.annotation.Get;
import com.gunshi.core.annotation.Post;
import com.gunshi.core.result.R;
import com.gunshi.project.hsz.common.model.StPptnR;
import com.gunshi.project.hsz.common.model.StRsvrR;
import com.gunshi.project.hsz.common.model.StStbprpB;
import com.gunshi.project.hsz.entity.so.DataQueryCommonSo;
import com.gunshi.project.hsz.entity.so.PicQuerySo;
import com.gunshi.project.hsz.entity.so.ReservoirWaterCommonSo;
import com.gunshi.project.hsz.entity.vo.*;
import com.gunshi.project.hsz.model.*;
import com.gunshi.project.hsz.service.*;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;
/**
* Description:
* Created by wanyan on 2024/2/20
*
* @author wanyan
* @version 1.0
*/
@RestController
@RequestMapping("/reservoir/water")
@Tag(name = "水库水情")
public class ReservoirWaterController {
@Autowired
private ReservoirWaterService reservoirWaterService;
@Autowired
private RealRainService realRainService;
@Autowired
private StWaterRRealService stWaterRRealService;
@Autowired
private ResMonthEcoFlowService resMonthEcoFlowService;
@Autowired
private StRsvrRService stRsvrRService;
@Autowired
private StPptnRService stPptnRService;
@Autowired
private RiverWaterService riverWaterService;
@Post(path = "/rz", summary = "水库水位")
public R<StRsvrVo> rz(@RequestBody ReservoirWaterCommonSo reservoirWaterCommonSo) {
return R.ok(reservoirWaterService.rz(reservoirWaterCommonSo));
}
@Post(path = "/list", summary = "水库水情列表")
public R<List<AttResBaseVo>> list() {
return R.ok(reservoirWaterService.list());
}
@Post(path = "/listV2", summary = "水库水情列表")
public R<List<AttResBaseVo>> listV2() {
return R.ok(reservoirWaterService.listV2());
}
@Get(path = "/image/channel", summary = "图像监测视角下拉")
public R<List<StStbprpB>> channel(@Schema(name = "resCode") @RequestParam("resCode") String resCode) {
return R.ok(reservoirWaterService.channel(resCode));
}
@Post(path = "/image/info", summary = "图片信息")
public R<Page<StImgR>> imageInfo(@RequestBody @Validated PicQuerySo picQuerySo) {
return R.ok(reservoirWaterService.imageInfo(picQuerySo));
}
@Post(path = "/real/img", summary = "水库实时图像")
public R<List<StImgRReal>> realImg(@RequestBody ReservoirWaterCommonSo reservoirWaterCommonSo) {
return R.ok(reservoirWaterService.realImg(reservoirWaterCommonSo));
}
@Post(path = "/monitor/data", summary = "监测数据")
public R<List<AttResMonitorVo>> monitorData(@RequestBody @Validated DataQueryCommonSo dataQueryCommonSo) {
return R.ok(reservoirWaterService.monitorData(dataQueryCommonSo));
}
@Post(path = "/data", summary = "闸阀总览-库容曲线")
public R<List<AttResMonitorVo>> data(@RequestBody @Validated DataQueryCommonSo dataQueryCommonSo) {
dataQueryCommonSo.setStcd("232");//黑石咀水库
return R.ok(reservoirWaterService.data(dataQueryCommonSo));
}
@Post(path = "/waterInfo", summary = "闸阀总览-库容曲线")
public R<AttResMonitorVo> waterInfo(@RequestBody DataQueryCommonSo dataQueryCommonSo) {
AttResMonitorVo attResMonitorVo = new AttResMonitorVo();
LambdaQueryWrapper<StRsvrR> qw = new LambdaQueryWrapper<>();
qw.eq(StRsvrR::getStcd,dataQueryCommonSo.getStcd()).orderByDesc(StRsvrR::getTm).last(" limit 1");
List<StRsvrR> list1 = stRsvrRService.list(qw);
if(CollectionUtils.isNotEmpty(list1)){
attResMonitorVo.setRz(new BigDecimal(list1.get(0).getRz()));
attResMonitorVo.setTm(list1.get(0).getTm());
}
LambdaQueryWrapper<StPptnR> qw2= new LambdaQueryWrapper<>();
qw2.eq(StPptnR::getStcd,dataQueryCommonSo.getStcd()).orderByDesc(StPptnR::getTm).last(" limit 1");
List<StPptnR> list3 = stPptnRService.list(qw2);
if(CollectionUtils.isNotEmpty(list3)){
attResMonitorVo.setTodayRainNum(new BigDecimal(list3.get(0).getDrp()));
attResMonitorVo.setTodayRainNumTm(list3.get(0).getTm());
}
List<StWaterRReal> list2 = stWaterRRealService.listRelated();
if(CollectionUtils.isNotEmpty(list2)){
// 获取当月核定流量
ResMonthEcoFlow resMonthEcoFlow = resMonthEcoFlowService.getOne(new QueryWrapper<ResMonthEcoFlow>().eq("month", Calendar.getInstance().get(Calendar.MONTH) + 1));
if(ObjectUtils.isNotEmpty(resMonthEcoFlow)){
for(StWaterRReal real : list2){
real.setResMonthEcoFlow(resMonthEcoFlow);
}
}
StWaterRReal stWaterRReal = list2.stream().max((o1, o2) -> o1.getTm().compareTo(o2.getTm())).orElse(new StWaterRReal());
attResMonitorVo.setOutPowerNum(stWaterRReal.getQ());
attResMonitorVo.setOutPowerNumTm(stWaterRReal.getTm());
}
return R.ok(attResMonitorVo);
}
@Post(path = "/data/page", summary = "分页库容曲线")
public R<Page<AttResMonitorVo>> dataPage(@RequestBody @Validated PicQuerySo picQuerySo) {
return R.ok(reservoirWaterService.dataPage(picQuerySo));
}
@Get(path = "/detail", summary = "监测详细数据(下方表格)")
public R<AttRvMonitorDetailVo> detail(@Schema(name = "stcd") @RequestParam("stcd") String stcd) {
AttRvMonitorDetailVo detail;
List<String> riverStcd = riverWaterService.getRiverStcd();
if(riverStcd.contains(stcd)){
detail = riverWaterService.detail(stcd);
}else{
detail = reservoirWaterService.detail(stcd);
}
return R.ok(detail);
}
}