feat: 沿程生态流量变化(环保部小时数据)
This commit is contained in:
parent
ac21220e8f
commit
33e63d12a4
@ -51,6 +51,12 @@ public class EngEqDataController {
|
|||||||
return ResponseResult.successData(engEqDataService.getQgcDayKendoListCust(dataSourceRequest));
|
return ResponseResult.successData(engEqDataService.getQgcDayKendoListCust(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/engalong/statistics/qgcHourV/GetKendoListCust")
|
||||||
|
@Operation(summary = "沿程生态流量变化(环保部小时数据)")
|
||||||
|
public ResponseResult getQgcHourVAlongKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(engEqDataService.getQgcHourVAlongKendoListCust(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/interval/qgc/getQgcStaticData")
|
@PostMapping("/interval/qgc/getQgcStaticData")
|
||||||
@Operation(summary = "生态流量达标率区间范围统计(一级页面)")
|
@Operation(summary = "生态流量达标率区间范围统计(一级页面)")
|
||||||
public ResponseResult getQgcStaticData(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getQgcStaticData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
|||||||
@ -0,0 +1,51 @@
|
|||||||
|
package com.yfd.platform.qgc_eng.eq.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
|
||||||
|
@Schema(description = "沿程生态流量变化(环保部小时最新)")
|
||||||
|
public class EngQecAlongVo {
|
||||||
|
|
||||||
|
@Schema(description = "类型")
|
||||||
|
private String sttp;
|
||||||
|
|
||||||
|
@Schema(description = "站码")
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
@Schema(description = "流域编码")
|
||||||
|
private String rvcd;
|
||||||
|
|
||||||
|
@Schema(description = "站名")
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
@Schema(description = "入库流量")
|
||||||
|
private BigDecimal qi;
|
||||||
|
|
||||||
|
@Schema(description = "出库流量")
|
||||||
|
private BigDecimal qo;
|
||||||
|
|
||||||
|
@Schema(description = "生态流量")
|
||||||
|
private BigDecimal qec;
|
||||||
|
|
||||||
|
@Schema(description = "流域排序")
|
||||||
|
private Integer rvcdSort;
|
||||||
|
|
||||||
|
@Schema(description = "生态流量限值")
|
||||||
|
private BigDecimal qecLimit;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@Schema(description = "最新时间")
|
||||||
|
private Date tm;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@Schema(description = "结果集中的最小非空时间")
|
||||||
|
private Date minTm;
|
||||||
|
|
||||||
|
@Schema(description = "站点排序")
|
||||||
|
private Integer stcdSort;
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceResult;
|
|||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
|
||||||
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
|
||||||
@ -21,6 +22,8 @@ public interface EngEqDataService {
|
|||||||
|
|
||||||
DataSourceResult<EngEqDayIntervalVo> getQgcDayKendoListCust(DataSourceRequest dataSourceRequest);
|
DataSourceResult<EngEqDayIntervalVo> getQgcDayKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
DataSourceResult<EngQecAlongVo> getQgcHourVAlongKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type);
|
QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type);
|
||||||
|
|
||||||
DataSourceResult<WbsbVo> getWbsbList(DataSourceRequest dataSourceRequest);
|
DataSourceResult<WbsbVo> getWbsbList(DataSourceRequest dataSourceRequest);
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo;
|
|||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
|
||||||
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqStaticIntervalVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqStaticIntervalVo;
|
||||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
|
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
|
||||||
@ -34,6 +35,7 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Date;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -81,6 +83,52 @@ public class EngEqDataServiceImpl implements EngEqDataService {
|
|||||||
return queryDayIntervalGroupList(dataSourceRequest, loadOptions);
|
return queryDayIntervalGroupList(dataSourceRequest, loadOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult<EngQecAlongVo> getQgcHourVAlongKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
|
String[] tmRange = resolveAlongTmRange(dataSourceRequest, loadOptions);
|
||||||
|
if (tmRange == null) {
|
||||||
|
throw new IllegalArgumentException("请选择开始日期和结束日期");
|
||||||
|
}
|
||||||
|
String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
|
||||||
|
String rvcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("startTm", tmRange[0]);
|
||||||
|
paramMap.put("endTm", tmRange[1]);
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
paramMap.put("baseId", baseId);
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
paramMap.put("rvcd", rvcd);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<EngQecAlongVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
|
||||||
|
buildQgcHourVAlongSql(baseId, rvcd), paramMap, EngQecAlongVo.class);
|
||||||
|
|
||||||
|
DataSourceResult<EngQecAlongVo> result = new DataSourceResult<>();
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
if (CollUtil.isEmpty(list)) {
|
||||||
|
result.setTotal(0L);
|
||||||
|
result.setData(null);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Date first = list.stream()
|
||||||
|
.map(EngQecAlongVo::getTm)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
for (EngQecAlongVo item : list) {
|
||||||
|
item.setMinTm(first);
|
||||||
|
item.setTm(first);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.setTotal((long) list.size());
|
||||||
|
result.setData(list);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type) {
|
public QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type) {
|
||||||
List<EngEqStaticIntervalVo> intervalList = queryStaticIntervals(dataSourceRequest, type);
|
List<EngEqStaticIntervalVo> intervalList = queryStaticIntervals(dataSourceRequest, type);
|
||||||
@ -682,6 +730,51 @@ public class EngEqDataServiceImpl implements EngEqDataService {
|
|||||||
"GROUP BY dayRun.STCD";
|
"GROUP BY dayRun.STCD";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildQgcHourVAlongSql(String baseId, String rvcd) {
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT along.RVCD AS rvcd, det.STCD AS stcd, eng.ENNM AS stnm, det.STTP AS sttp, ")
|
||||||
|
.append("along.ORDER_INDEX AS rvcdSort, det.SORT AS stcdSort, ")
|
||||||
|
.append("met.QEC AS qec, met.QI AS qi, met.QO AS qo, met.TM AS tm, met.QEC_LIMIT AS qecLimit ")
|
||||||
|
.append("FROM MS_ALONG_B along ")
|
||||||
|
.append("INNER JOIN MS_ALONGDET_B det ON along.ID = det.ALONG_ID ")
|
||||||
|
.append("INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = det.STCD ")
|
||||||
|
.append("LEFT JOIN (")
|
||||||
|
.append(" SELECT qec.STCD, run.QI AS QI, qec.QEC AS QEC, run.QO AS QO, qec.TM AS TM, qec.QEC_LIMIT AS QEC_LIMIT ")
|
||||||
|
.append(" FROM SD_QEC_R qec ")
|
||||||
|
.append(" LEFT JOIN SD_HYDROPW_R run ON qec.STCD = run.STCD AND qec.TM = run.TM AND NVL(run.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" WHERE NVL(qec.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND qec.TM BETWEEN TO_DATE(#{map.startTm}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append(" AND TO_DATE(#{map.endTm}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append(" AND qec.TM = (")
|
||||||
|
.append(" SELECT MAX(qec2.TM) ")
|
||||||
|
.append(" FROM SD_QEC_R qec2 ")
|
||||||
|
.append(" WHERE qec2.STCD = qec.STCD ")
|
||||||
|
.append(" AND NVL(qec2.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND qec2.TM BETWEEN TO_DATE(#{map.startTm}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append(" AND TO_DATE(#{map.endTm}, 'YYYY-MM-DD HH24:MI:SS')")
|
||||||
|
.append(" )")
|
||||||
|
.append(") met ON met.STCD = det.STCD ")
|
||||||
|
.append("WHERE det.STTP = 'ENG' ")
|
||||||
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND NVL(eng.BLDSTT_CODE, 0) = 2 ")
|
||||||
|
.append(" AND along.CODE = 'common' ")
|
||||||
|
.append(" AND NVL(along.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND NVL(det.IS_DELETED, 0) = 0 ");
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
sql.append(" AND along.RVCD IN (")
|
||||||
|
.append("SELECT dic.HBRVCD FROM SD_HBRV_DIC dic ")
|
||||||
|
.append("WHERE dic.BASEID = #{map.baseId} ")
|
||||||
|
.append(" AND NVL(dic.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND NVL(dic.ENABLED, 1) = 1")
|
||||||
|
.append(") ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
sql.append(" AND along.RVCD = #{map.rvcd} ");
|
||||||
|
}
|
||||||
|
sql.append("ORDER BY along.ORDER_INDEX, det.SORT");
|
||||||
|
return sql.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private String buildHourIntervalViewSql(DataSourceRequest.FilterDescriptor filter,
|
private String buildHourIntervalViewSql(DataSourceRequest.FilterDescriptor filter,
|
||||||
Map<String, Object> paramMap,
|
Map<String, Object> paramMap,
|
||||||
int[] indexHolder) {
|
int[] indexHolder) {
|
||||||
@ -2861,6 +2954,52 @@ public class EngEqDataServiceImpl implements EngEqDataService {
|
|||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String[] resolveAlongTmRange(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) {
|
||||||
|
String tmValue = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm");
|
||||||
|
if (StrUtil.isNotBlank(tmValue) && tmValue.contains(",")) {
|
||||||
|
String[] arr = tmValue.split(",");
|
||||||
|
if (arr.length == 2 && StrUtil.isNotBlank(arr[0]) && StrUtil.isNotBlank(arr[1])) {
|
||||||
|
return new String[]{arr[0].trim(), arr[1].trim()};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String[] range = new String[2];
|
||||||
|
collectAlongTmRange(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), range);
|
||||||
|
if (StrUtil.isNotBlank(range[0]) && StrUtil.isNotBlank(range[1])) {
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void collectAlongTmRange(DataSourceRequest.FilterDescriptor filter, String[] range) {
|
||||||
|
if (filter == null || range == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
if (!"tm".equalsIgnoreCase(filter.getField()) || filter.getValue() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String value = String.valueOf(filter.getValue());
|
||||||
|
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
||||||
|
switch (operator) {
|
||||||
|
case "gt", "gte" -> range[0] = value;
|
||||||
|
case "lt", "lte" -> range[1] = value;
|
||||||
|
case "eq" -> {
|
||||||
|
range[0] = value;
|
||||||
|
range[1] = value;
|
||||||
|
}
|
||||||
|
default -> {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
collectAlongTmRange(child, range);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void collectFilterValues(DataSourceRequest.FilterDescriptor filter, String field, List<String> values) {
|
private void collectFilterValues(DataSourceRequest.FilterDescriptor filter, String field, List<String> values) {
|
||||||
if (filter == null) {
|
if (filter == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user