feat: 沿程生态流量变化(环保部小时数据)
This commit is contained in:
parent
ac21220e8f
commit
33e63d12a4
@ -51,6 +51,12 @@ public class EngEqDataController {
|
||||
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")
|
||||
@Operation(summary = "生态流量达标率区间范围统计(一级页面)")
|
||||
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.EngEqHourIntervalVo;
|
||||
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.EngEqVmsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
|
||||
@ -21,6 +22,8 @@ public interface EngEqDataService {
|
||||
|
||||
DataSourceResult<EngEqDayIntervalVo> getQgcDayKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngQecAlongVo> getQgcHourVAlongKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type);
|
||||
|
||||
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.EngEqHourIntervalVo;
|
||||
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.EngEqStaticIntervalVo;
|
||||
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.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Date;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
@ -81,6 +83,52 @@ public class EngEqDataServiceImpl implements EngEqDataService {
|
||||
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
|
||||
public QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type) {
|
||||
List<EngEqStaticIntervalVo> intervalList = queryStaticIntervals(dataSourceRequest, type);
|
||||
@ -682,6 +730,51 @@ public class EngEqDataServiceImpl implements EngEqDataService {
|
||||
"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,
|
||||
Map<String, Object> paramMap,
|
||||
int[] indexHolder) {
|
||||
@ -2861,6 +2954,52 @@ public class EngEqDataServiceImpl implements EngEqDataService {
|
||||
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) {
|
||||
if (filter == null) {
|
||||
return;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user