fix: 优化出入库水温查询逻辑

This commit is contained in:
tangwei 2026-05-19 09:44:19 +08:00
parent 219323e0fc
commit cb59b3835e
4 changed files with 212 additions and 130 deletions

View File

@ -1,12 +1,16 @@
package com.yfd.platform.env.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.env.entity.vo.BatchDeleteAo;
import com.yfd.platform.env.entity.vo.WtrvInfo;
import com.yfd.platform.env.service.AlongDetailService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
@ -60,12 +64,25 @@ public class SdAlongDetailController {
return ResponseResult.success();
}
// @PostMapping("/qgc/GetKendoListCust")
// @Operation(summary = "环保部查询出入库水温、出入库流量、入库水温、天然水温、降雨、气温数据")
// public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
// DataSourceResult result = alongDetailService.getQgcKendoListCust(dataSourceRequest);
// return ResponseResult.successData(result);
// }
@PostMapping("/qgc/GetKendoListCust")
@Operation(summary = "环保部查询出入库水温、出入库流量、入库水温、天然水温、降雨、气温数据")
public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
if (StrUtil.isBlank(stcd)) {
throw new BizException("站点编码不能为空.");
}
WtrvInfo wtrvInfo = alongDetailService.getWtrvInfoByStcd(stcd);
if (wtrvInfo == null) {
throw new BizException("获取站点信息失败,请检查是否站点存在.");
}
DataSourceResult result = alongDetailService.processKendoList(dataSourceRequest, null, new Page<>());
if (wtrvInfo.getType() == 3 || result == null || result.getData() == null || result.getTotal() == 0) {
return ResponseResult.successData(result);
}
DataSourceResult qgcResult = alongDetailService.processQgcKendList(result, wtrvInfo);
return ResponseResult.successData(qgcResult);
}
@GetMapping("/qgc/stcdCheck")
@Operation(summary = "判断出库水温站、垂向水温站或者低温水减缓设施所属的电站是否有出库水温站、垂向水温站和低温水减缓设施")

View File

@ -20,13 +20,20 @@ import java.util.Map;
@Mapper
public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
@Select("SELECT wt.STCD AS stcd, wt.STNM AS stnm, wt.RSTCD AS rstcd, eng.ENNM AS ennm, " +
"CASE WHEN wt.STCD = rel.ENG_IWT_CODE THEN 1 WHEN wt.STCD = rel.ENG_DWT_CODE THEN 2 ELSE 3 END AS type, " +
"wt.STTP AS sttpCode " +
"FROM SD_WT_B_H wt " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD " +
"LEFT JOIN SD_PRWTRLTN_B rel ON rel.STCD = wt.RSTCD AND rel.IS_DELETED = 0 " +
"WHERE wt.IS_DELETED = 0 AND wt.STTP = 'WTRV' AND wt.STCD = #{stcd}")
WtrvInfo getWtrvInfoByStcd(@Param("stcd") String stcd);
//电站数据
@Select("SELECT AVG(a.QI) AS qi, AVG(a.QO) AS qo, a.tm, AVG(a.RZ) AS rz, AVG(a.DZ) AS dz " +
"FROM SD_HYDROPW_R a " +
"INNER JOIN MS_STBPRP_T b ON a.STCD = b.RSTCD " +
"WHERE b.IS_DELETED = 0 AND a.IS_DELETED = 0 " +
"AND b.STCD = #{stcd} AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"WHERE a.IS_DELETED = 0 " +
"AND a.STCD = (SELECT RSTCD FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0) " +
"AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY a.TM")
List<Map<String, Object>> getHydropwDataList(@Param("stcd") String stcd,
@Param("startTime") Date startTime,
@ -34,7 +41,7 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
//天然水温
@Select("<script>" +
"SELECT STCD, WTTP, MNTH, WT FROM SD_WTNP_B " +
"WHERE WTTP = 1 " +
"WHERE WTTP = 1 AND IS_DELETED = 0 " +
"<if test='rstcd != null and rstcd != \"\"'>" +
"AND STCD = #{rstcd} " +
"</if>" +
@ -46,14 +53,14 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
//入库水温
@Select("<script>" +
"SELECT 1 AS TYPE, AVG(b.WT) AS WT, b.TM " +
"FROM MS_STBPRP_T a " +
"INNER JOIN SD_WTRV_R b ON a.STCD = b.STCD " +
"WHERE a.STTP_CODE = 'WTRV' AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"FROM SD_PRWTRLTN_B rel " +
"INNER JOIN SD_WTRV_R b ON b.STCD = rel.ENG_IWT_CODE " +
"WHERE rel.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"<if test='stcd != null and stcd != \"\"'>" +
"AND a.ENG_IWT_CODE = (SELECT RSTCD FROM MS_STBPRP_T WHERE STCD = #{stcd}) " +
"AND rel.STCD = (SELECT RSTCD FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0) " +
"</if>" +
"<if test='rstcd != null and rstcd != \"\"'>" +
"AND a.ENG_IWT_CODE = #{rstcd} " +
"AND rel.STCD = #{rstcd} " +
"</if>" +
"AND b.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY b.TM" +
@ -62,14 +69,14 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
//出库水温
@Select("<script>" +
"SELECT 2 AS TYPE, AVG(b.WT) AS WT, b.TM " +
"FROM MS_STBPRP_T a " +
"INNER JOIN SD_WTRV_R b ON a.STCD = b.STCD " +
"WHERE a.STTP_CODE = 'WTRV' AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"FROM SD_PRWTRLTN_B rel " +
"INNER JOIN SD_WTRV_R b ON b.STCD = rel.ENG_DWT_CODE " +
"WHERE rel.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"<if test='stcd != null and stcd != \"\"'>" +
"AND a.ENG_DWT_CODE = (SELECT RSTCD FROM MS_STBPRP_T WHERE STCD = #{stcd}) " +
"AND rel.STCD = (SELECT RSTCD FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0) " +
"</if>" +
"<if test='rstcd != null and rstcd != \"\"'>" +
"AND a.ENG_DWT_CODE = #{rstcd} " +
"AND rel.STCD = #{rstcd} " +
"</if>" +
"AND b.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY b.TM" +
@ -81,7 +88,7 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
"INNER JOIN MS_STBPRP_T b ON a.STCD = b.STCD " +
"WHERE b.STTP_CODE = 'MM' " +
"AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"AND b.RSTCD = (SELECT RSTCD FROM MS_STBPRP_T WHERE STCD = #{stcd}) " +
"AND b.RSTCD = (SELECT RSTCD FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0) " +
"AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY a.TM")
List<Map<String, Object>> getPptnDataList(@Param("stcd")String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
@ -90,7 +97,7 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
"FROM SD_TMP_R a " +
"INNER JOIN MS_STBPRP_T b ON a.STCD = b.STCD " +
"WHERE b.STTP_CODE = 'MM' AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"AND b.RSTCD = (SELECT RSTCD FROM MS_STBPRP_T WHERE STCD = #{stcd}) " +
"AND b.RSTCD = (SELECT RSTCD FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0) " +
"AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY a.TM")
List<Map<String, Object>> getTmpDataList(@Param("stcd")String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
@ -99,8 +106,8 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
"SELECT TM, WTHG, ROUND(AVG(VWT), 2) AS VWT " +
"FROM SD_WTVT_R " +
"WHERE STCD IN (" +
" SELECT STCD FROM MS_STBPRP_T " +
" WHERE RSTCD = #{rstcd} AND STTP_CODE = 'WTVT' AND IS_DELETED = 0" +
" SELECT STCD FROM SD_WT_B_H " +
" WHERE RSTCD = #{rstcd} AND STTP = 'WTVT' AND IS_DELETED = 0 AND MWAY = 2" +
") " +
"AND TO_CHAR(TM, 'mi') = 0 AND IS_DELETED = 0 " +
"AND TM BETWEEN #{startTime} AND #{endTime} " +
@ -126,18 +133,19 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
"GROUP BY a.STCD, a.STNM")
WtrvInfo getWtrvInfoByStcd2(@Param("stcd") String stcd);
@Select("SELECT a.STCD AS rstcd, a.STNM AS ennm, " +
"REGEXP_REPLACE(LISTAGG(TO_CHAR(b.STCD), ',') WITHIN GROUP (ORDER BY b.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS stcd, " +
"REGEXP_REPLACE(LISTAGG(TO_CHAR(b.STNM), ',') WITHIN GROUP (ORDER BY b.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS stnm, " +
"REGEXP_REPLACE(LISTAGG(TO_CHAR(c.STCD), ',') WITHIN GROUP (ORDER BY c.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStcd, " +
"REGEXP_REPLACE(LISTAGG(TO_CHAR(c.STNM), ',') WITHIN GROUP (ORDER BY c.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStnm " +
"FROM MS_STBPRP_T a " +
"LEFT JOIN MS_STBPRP_T b ON a.STCD = b.RSTCD AND b.STTP_CODE = 'WTRV' AND b.IS_DELETED = 0 AND b.MWAY = 2 AND b.DTIN_TYPE = 0 " +
"LEFT JOIN MS_STBPRP_T c ON a.STCD = c.RSTCD AND c.STTP_CODE = 'WTVT' AND c.IS_DELETED = 0 AND c.MWAY = 2 " +
"WHERE a.STTP_CODE = 'ENG' AND a.IS_DELETED = 0 " +
"AND b.STCD IS NOT NULL AND c.STCD IS NOT NULL AND b.ENG_DWT_CODE IS NOT NULL " +
"AND (b.STCD = #{stcd} OR c.STCD = #{stcd} OR a.STCD = #{stcd}) " +
"AND a.STCD = b.ENG_DWT_CODE " +
"GROUP BY a.STCD, a.STNM")
@Select("SELECT eng.STCD AS rstcd, eng.ENNM AS ennm, " +
"REGEXP_REPLACE(LISTAGG(DISTINCT TO_CHAR(wtrv.STCD), ',') WITHIN GROUP (ORDER BY wtrv.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS stcd, " +
"REGEXP_REPLACE(LISTAGG(DISTINCT TO_CHAR(wtrv.STNM), ',') WITHIN GROUP (ORDER BY wtrv.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS stnm, " +
"REGEXP_REPLACE(LISTAGG(DISTINCT TO_CHAR(vt.STCD), ',') WITHIN GROUP (ORDER BY vt.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStcd, " +
"REGEXP_REPLACE(LISTAGG(DISTINCT TO_CHAR(vt.STNM), ',') WITHIN GROUP (ORDER BY vt.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStnm " +
"FROM SD_ENGINFO_B_H eng " +
"LEFT JOIN SD_PRWTRLTN_B rel ON rel.STCD = eng.STCD AND rel.IS_DELETED = 0 " +
"LEFT JOIN SD_WT_B_H wtrv ON wtrv.RSTCD = eng.STCD AND wtrv.STCD IN (rel.ENG_IWT_CODE, rel.ENG_DWT_CODE) " +
" AND wtrv.STTP = 'WTRV' AND wtrv.IS_DELETED = 0 AND wtrv.MWAY = 2 " +
"LEFT JOIN SD_WT_B_H vt ON vt.RSTCD = eng.STCD AND vt.STTP = 'WTVT' AND vt.IS_DELETED = 0 AND vt.MWAY = 2 " +
"WHERE eng.USFL = 1 " +
"AND wtrv.STCD IS NOT NULL AND vt.STCD IS NOT NULL AND rel.ENG_DWT_CODE IS NOT NULL " +
"AND (wtrv.STCD = #{stcd} OR vt.STCD = #{stcd} OR eng.STCD = #{stcd}) " +
"GROUP BY eng.STCD, eng.ENNM")
WtrvInfo getWtrvInfoByStcd3(@Param("stcd") String stcd);
}

View File

@ -7,11 +7,13 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.*;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.env.entity.vo.*;
import com.yfd.platform.env.mapper.AlongDetailMapper;
import com.yfd.platform.env.mapper.SdWtrvdrtpSMapper;
import com.yfd.platform.env.service.AlongDetailService;
import com.yfd.platform.utils.CollectionExtUtils;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
@ -33,6 +35,8 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
@Resource
private DynamicSQLMapper dynamicSQLMapper;
@Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Resource
private AlongDetailMapper alongDetailMapper;
@Resource
@ -44,34 +48,71 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
@Override
public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, GroupResult> filterResult, Page page) {
DataSourceResult dataSourceResult = new DataSourceResult();
StringBuilder sql = new StringBuilder("SELECT t.tm,t.mon, t.stcd, t.wt, t.stnm, t.basename,t.mway,t.rstcd\n" +
"FROM (SELECT DISTINCT r.tm,to_char(r.tm,'MM') mon, r.stcd, r.WT,r.TASK_ID,r.TASK_STATUS ,t2.stnm,t2.BASE_Id AS baseId, t2.BASE_NAME baseName,t2.MWAY AS mway, t2.rstcd\n" +
" FROM SD_WTRV_R r\n" +
//" inner join MS_ALONGDET_B b on r.stcd=b.stcd and b.is_deleted=0 inner join MS_ALONG_B a on a.ID=b.ALONG_ID and a.code='common' " +
" LEFT JOIN MS_STBPRP_T t2 ON r.STCD = t2.STCD \n" +
" WHERE r.is_deleted=0 and t2.is_deleted=0 " +
" order by r.tm DESC, r.stcd) t where 1=1 ");
sql. append(" AND (TASK_ID IS NULL OR TASK_ID ='' OR TASK_STATUS ='Approved') ");
if (ObjectUtil.isNotEmpty(filterResult.get(CommonConstant.DEFAULT))) {
if (StrUtil.isNotBlank(filterResult.get(CommonConstant.DEFAULT).getGroupSql())) {
sql.append(" and ").append(filterResult.get(CommonConstant.DEFAULT).getGroupSql());
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
String tm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm");
if (StrUtil.isBlank(tm)) {
throw new BizException("时间(tm)不能为空.");
}
Date startTime = null;
Date endTime = null;
String[] tmArr = tm.split(",");
if (tmArr.length == 2) {
Date first = DateUtil.parse(tmArr[0].trim());
Date second = DateUtil.parse(tmArr[1].trim());
if (first.after(second)) {
startTime = second;
endTime = first;
} else {
startTime = first;
endTime = second;
}
}
if (StrUtil.isNotBlank(filterResult.get(CommonConstant.DEFAULT).getOrderBySql())) {
sql.append(" ").append(filterResult.get(CommonConstant.DEFAULT).getOrderBySql());
StringBuilder sql = new StringBuilder();
sql.append("SELECT t.tm, t.mon, t.stcd, t.wt, t.stnm, t.baseName ")
.append("FROM (")
.append(" SELECT DISTINCT r.tm, TO_NUMBER(TO_CHAR(r.tm,'MM')) mon, r.stcd, r.wt, ")
.append(" wt.stnm, hb.basename AS baseName, wt.mway, wt.rstcd ")
.append(" FROM SD_WTRV_R r ")
.append(" LEFT JOIN SD_WT_B_H wt ON r.STCD = wt.STCD ")
.append(" LEFT JOIN SD_ENGINFO_B_H eng ON wt.RSTCD = eng.STCD ")
.append(" LEFT JOIN SD_HYDROBASE hb ON eng.BASE_ID = hb.BASEID ")
.append(" WHERE r.IS_DELETED = 0 ")
.append(" AND wt.IS_DELETED = 0 ")
.append(" AND wt.STTP = 'WTRV' ")
.append(" AND r.TM BETWEEN #{map.startTime} AND #{map.endTime} ");
if (StrUtil.isNotBlank(stcd)) {
sql.append(" AND r.STCD = #{map.stcd} ");
}
sql.append(") t WHERE 1=1 ");
if (dataSourceRequest.getSort() != null && !dataSourceRequest.getSort().isEmpty()) {
DataSourceRequest.SortDescriptor sortDescriptor = dataSourceRequest.getSort().get(0);
String orderField = "tm";
if ("stcd".equalsIgnoreCase(sortDescriptor.getField())) {
orderField = "stcd";
} else if ("stnm".equalsIgnoreCase(sortDescriptor.getField())) {
orderField = "stnm";
} else if ("wt".equalsIgnoreCase(sortDescriptor.getField())) {
orderField = "wt";
}
String orderDir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
sql.append(" ORDER BY t.").append(orderField).append(" ").append(orderDir);
} else {
sql.append(" ORDER BY t.tm ASC ");
}
Map<String, Object> map = new HashMap();
Iterator iterator = filterResult.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
map.putAll(filterResult.get(key).getParamMap());
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
if (StrUtil.isNotBlank(stcd)) {
map.put("stcd", stcd);
}
List<SdAlongDetailVO> list = this.dynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), map, SdAlongDetailVO.class);
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page currentPage = pageInfo.getHasPageInfo() ? pageInfo.getPage() : page;
List<SdAlongDetailVO> list = this.microservicDynamicSQLMapper.pageAllListWithResultType(currentPage, sql.toString(), map, SdAlongDetailVO.class);
dataSourceResult.setData(list);
dataSourceResult.setTotal(ObjectUtil.isNotEmpty(page) ? page.getTotal() : (long) list.size());
dataSourceResult.setTotal(ObjectUtil.isNotEmpty(currentPage) ? currentPage.getTotal() : (long) list.size());
return dataSourceResult;
}
@ -142,7 +183,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
@Override
public DataSourceResult processQgcKendList(DataSourceResult dataSourceResult, WtrvInfo wtrvInfo) {
DataSourceResult dr = new DataSourceResult();
List<Map<String, Object>> list = (List<Map<String, Object>>) dataSourceResult.getData();
List<SdAlongDetailVO> list = (List<SdAlongDetailVO>) dataSourceResult.getData();
if (list == null || list.isEmpty()) {
dr.setData(new ArrayList<>());
@ -150,8 +191,8 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
return dr;
}
Date startTime = (Date) list.get(0).get("tm");
Date endTime = (Date) list.get(list.size() - 1).get("tm");
Date startTime = list.get(0).getTm();
Date endTime = list.get(list.size() - 1).getTm();
if (startTime.compareTo(endTime) > 0) {
Date tmpDate = startTime;
@ -162,7 +203,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
List<Map<String, Object>> iwtDataVoList = new ArrayList<>();
List<Map<String, Object>> dwtDataVoList = new ArrayList<>();
List<Map<String, Object>> wtvtDataVoList = new ArrayList<>();
List<Map<String, Object>> hydropwDataVoList = new ArrayList<>();
// List<Map<String, Object>> hydropwDataVoList = new ArrayList<>();
List<Map<String, Object>> pptnDataVoList = new ArrayList<>();
List<Map<String, Object>> tmpDataVoList = new ArrayList<>();
List<Map<String, Object>> wtnpDataVoList;
@ -187,9 +228,9 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
Map<Date, Map<String, Object>> dwtDataMap = dwtDataVoList.stream()
.collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity()));
hydropwDataVoList.addAll(this.alongDetailMapper.getHydropwDataList(wtrvInfo.getStcd(), startTime, endTime));
Map<Date, Map<String, Object>> hydropwDataMap = hydropwDataVoList.stream()
.collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity()));
// hydropwDataVoList.addAll(this.alongDetailMapper.getHydropwDataList(wtrvInfo.getStcd(), startTime, endTime));
// Map<Date, Map<String, Object>> hydropwDataMap = hydropwDataVoList.stream()
// .collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity()));
pptnDataVoList.addAll(this.alongDetailMapper.getPptnDataList(wtrvInfo.getStcd(), startTime, endTime));
Map<Date, Map<String, Object>> pptnDataMap = pptnDataVoList.stream()
@ -213,42 +254,42 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
List<Map<String, Object>> qgcWtrvDataVoList = new ArrayList<>();
list.forEach(it -> {
Map<String, Object> vo = new HashMap<>();
vo.put("stcd", it.get("stcd"));
vo.put("stnm", it.get("stnm"));
vo.put("wt", it.get("wt"));
vo.put("tm", it.get("tm"));
vo.put("stcd", it.getStcd());
vo.put("stnm", it.getStnm());
vo.put("wt", it.getWt());
vo.put("tm", it.getTm());
vo.put("ennm", wtrvInfo.getEnnm());
vo.put("rstcd", wtrvInfo.getRstcd());
vo.put("type", wtrvInfo.getType());
vo.put("natureTmp", wtnpDataMap.get(it.get("mon")));
vo.put("hydropwDataVo", hydropwDataMap.get(it.get("tm")));
vo.put("pptnDataVo", pptnDataMap.get(it.get("tm")));
vo.put("tmpDataVo", tmpDataMap.get(it.get("tm")));
vo.put("natureTmp", wtnpDataMap.get(it.getMon()));
// vo.put("hydropwDataVo", hydropwDataMap.get(it.getTm()));
vo.put("pptnDataVo", pptnDataMap.get(it.getTm()));
vo.put("tmpDataVo", tmpDataMap.get(it.getTm()));
if (wtrvInfo.getType() == 1) {
Map<String, Object> iwtVo = new HashMap<>();
iwtVo.put("tm", it.get("tm"));
iwtVo.put("wt", it.get("wt"));
iwtVo.put("tm", it.getTm());
iwtVo.put("wt", it.getWt());
vo.put("iwtDataVo", iwtVo);
vo.put("dwtDataVo", dwtDataMap.get(it.get("tm")));
vo.put("dwtDataVo", dwtDataMap.get(it.getTm()));
}
if (wtrvInfo.getType() == 2) {
Map<String, Object> dwtVo = new HashMap<>();
dwtVo.put("tm", it.get("tm"));
dwtVo.put("wt", it.get("wt"));
dwtVo.put("tm", it.getTm());
dwtVo.put("wt", it.getWt());
vo.put("dwtDataVo", dwtVo);
vo.put("iwtDataVo", iwtDataMap.get(it.get("tm")));
vo.put("iwtDataVo", iwtDataMap.get(it.getTm()));
if (it.get("wt") != null && wtvtDataVoMap != null) {
List<Map<String, Object>> vtList = wtvtDataVoMap.get(it.get("tm"));
if (it.getWt() != null && wtvtDataVoMap != null) {
List<Map<String, Object>> vtList = wtvtDataVoMap.get(it.getTm());
if (vtList != null) {
Map<BigDecimal, List<Map<String, Object>>> vtMap = vtList.stream()
.filter(tt -> tt.get("vwt") != null)
.collect(Collectors.groupingBy(tt -> (BigDecimal) tt.get("vwt")));
if (vtMap.containsKey(it.get("wt"))) {
vo.put("wtvtDataVo", vtMap.get(it.get("wt")).get(0));
if (vtMap.containsKey(it.getWt())) {
vo.put("wtvtDataVo", vtMap.get(it.getWt()).get(0));
qgcWtrvDataVoList.add(vo);
return;
}
@ -262,7 +303,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
.sorted()
.collect(Collectors.toList());
BigDecimal[] lrValue = CollectionExtUtils.findNeighbors(sortVt, (BigDecimal) it.get("wt"));
BigDecimal[] lrValue = CollectionExtUtils.findNeighbors(sortVt, it.getWt());
if (lrValue.length == 2) {
leftVt = lrValue[0];
rightVt = lrValue[1];
@ -279,7 +320,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
}
if (leftVt != null && rightVt != null) {
BigDecimal currentWt = (BigDecimal) it.get("wt");
BigDecimal currentWt = it.getWt();
BigDecimal wthg = ((rightVt.subtract(currentWt)).multiply((BigDecimal) leftVo.get("wthg"))
.add((currentWt.subtract(leftVt)).multiply((BigDecimal) rightVo.get("wthg"))))
.divide((rightVt.subtract(currentWt)).add(currentWt.subtract(leftVt)), RoundingMode.HALF_UP);

View File

@ -90,11 +90,14 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
String forceType) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String engStcd = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"));
String relationStcd = firstNotBlank(
engStcd,
normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engIwtCode")),
normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engDwtCode"))
);
String engIwtCode = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engIwtCode"));
String engDwtCode = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engDwtCode"));
if (StrUtil.isBlank(engIwtCode) && StrUtil.isNotBlank(engStcd)) {
engIwtCode = engStcd;
}
if (StrUtil.isBlank(engDwtCode) && StrUtil.isNotBlank(engStcd)) {
engDwtCode = engStcd;
}
String url = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "url"));
boolean isDetail = forceDetail != null ? forceDetail : "details".equals(url);
@ -112,26 +115,19 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
.append("SWS.WT AS wt, ")
.append("REL.ENG_IWT_CODE AS engIwtCode, ")
.append("REL.ENG_DWT_CODE AS engDwtCode ")
.append("FROM (")
.append(" SELECT SPR.STCD, SPR.ENG_IWT_CODE, SPR.ENG_DWT_CODE ")
.append(" FROM SD_PRWTRLTN_B SPR ")
.append(" WHERE SPR.IS_DELETED = 0 ");
Map<String, Object> paramMap = new HashMap<>();
if (StrUtil.isNotBlank(relationStcd)) {
paramMap.put("relationStcd", relationStcd);
sql.append(" AND SPR.STCD = #{map.relationStcd} ");
}
sql.append(") REL ")
.append("INNER JOIN SD_ENGINFO_B_H SEG ON SEG.STCD = REL.STCD ")
.append("INNER JOIN ").append(tableName).append(" SWS ON SWS.STCD IN (REL.ENG_IWT_CODE, REL.ENG_DWT_CODE) ")
.append("INNER JOIN SD_WT_B_H SWT ON SWT.STCD = SWS.STCD ")
.append("FROM SD_WT_B_H SWT ")
.append("INNER JOIN ").append(tableName).append(" SWS ON SWS.STCD = SWT.STCD ")
.append("INNER JOIN SD_WTENGRLTN_B REL ON REL.STCD = SWT.STCD ")
.append("INNER JOIN SD_ENGINFO_B_H SEG ON SEG.STCD = SWT.RSTCD ")
.append("WHERE SWS.IS_DELETED = 0 ")
.append("AND SWT.IS_DELETED = 0 ")
.append("AND REL.IS_DELETED = 0 ")
.append("AND SWT.USFL = 1 ")
.append("AND SWT.MWAY = 2 ")
.append("AND SWT.STTP = 'WTRV' ")
.append("AND SEG.USFL = 1 ");
Map<String, Object> paramMap = new HashMap<>();
if (timeRange[0] != null && timeRange[1] != null) {
paramMap.put("startTime", timeRange[0]);
paramMap.put("endTime", timeRange[1]);
@ -140,8 +136,19 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
}
if (isDetail) {
appendDetailCondition(sql, forceType);
appendDetailCondition(sql, paramMap, forceType, engIwtCode, engDwtCode);
} else {
if (StrUtil.isNotBlank(engIwtCode) && StrUtil.isNotBlank(engDwtCode)) {
paramMap.put("engIwtCode", engIwtCode);
paramMap.put("engDwtCode", engDwtCode);
sql.append("AND ((REL.ENG_IWT_CODE = #{map.engIwtCode}) OR (REL.ENG_DWT_CODE = #{map.engDwtCode})) ");
} else if (StrUtil.isNotBlank(engIwtCode)) {
paramMap.put("engIwtCode", engIwtCode);
sql.append("AND REL.ENG_IWT_CODE = #{map.engIwtCode} ");
} else if (StrUtil.isNotBlank(engDwtCode)) {
paramMap.put("engDwtCode", engDwtCode);
sql.append("AND REL.ENG_DWT_CODE = #{map.engDwtCode} ");
}
appendInCondition(sql, paramMap, "SEG.BASE_ID", "baseId", baseIdList);
appendInCondition(sql, paramMap, "SEG.RVCD", "rvcd", rvcdList);
}
@ -151,7 +158,7 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
List<SdRvwtSVO> resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdRvwtSVO.class);
if (!isDetail) {
fillDwtp(resultList);
fillDwtp(resultList, engIwtCode, engDwtCode);
}
DataSourceResult<SdRvwtSVO> result = new DataSourceResult<>();
@ -160,23 +167,43 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
return result;
}
private void appendDetailCondition(StringBuilder sql, String forceType) {
private void appendDetailCondition(StringBuilder sql,
Map<String, Object> paramMap,
String forceType,
String engIwtCode,
String engDwtCode) {
if (TYPE_IWT.equals(forceType)) {
sql.append("AND SWT.STCD = REL.ENG_IWT_CODE ");
sql.append("AND SWT.WT_TYPE = 'IWT' ");
if (StrUtil.isNotBlank(engIwtCode)) {
paramMap.put("detailEngIwtCode", engIwtCode);
sql.append("AND REL.ENG_IWT_CODE = #{map.detailEngIwtCode} ");
}
} else if (TYPE_DWT.equals(forceType)) {
sql.append("AND SWT.STCD = REL.ENG_DWT_CODE ");
sql.append("AND SWT.WT_TYPE = 'DWT' ");
if (StrUtil.isNotBlank(engDwtCode)) {
paramMap.put("detailEngDwtCode", engDwtCode);
sql.append("AND REL.ENG_DWT_CODE = #{map.detailEngDwtCode} ");
}
} else if (StrUtil.isNotBlank(engDwtCode)) {
paramMap.put("detailEngDwtCode", engDwtCode);
sql.append("AND SWT.WT_TYPE = 'DWT' ")
.append("AND REL.ENG_DWT_CODE = #{map.detailEngDwtCode} ");
} else if (StrUtil.isNotBlank(engIwtCode)) {
paramMap.put("detailEngIwtCode", engIwtCode);
sql.append("AND SWT.WT_TYPE = 'IWT' ")
.append("AND REL.ENG_IWT_CODE = #{map.detailEngIwtCode} ");
}
}
private void fillDwtp(List<SdRvwtSVO> voList) {
private void fillDwtp(List<SdRvwtSVO> voList, String engIwtCode, String engDwtCode) {
for (SdRvwtSVO vo : voList) {
if (StrUtil.isNotBlank(vo.getStcd())
&& StrUtil.isNotBlank(vo.getEngIwtCode())
&& vo.getStcd().equals(vo.getEngIwtCode())) {
if (StrUtil.isNotBlank(vo.getEngIwtCode())
&& StrUtil.isNotBlank(engIwtCode)
&& vo.getEngIwtCode().contains(engIwtCode)) {
vo.setDwtp(SdRvwtSVO.DWTP_IWT);
} else if (StrUtil.isNotBlank(vo.getStcd())
&& StrUtil.isNotBlank(vo.getEngDwtCode())
&& vo.getStcd().equals(vo.getEngDwtCode())) {
} else if (StrUtil.isNotBlank(vo.getEngDwtCode())
&& StrUtil.isNotBlank(engDwtCode)
&& vo.getEngDwtCode().contains(engDwtCode)) {
vo.setDwtp(SdRvwtSVO.DWTP_DWT);
}
}
@ -324,15 +351,4 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
return timeValue;
}
private String firstNotBlank(String... values) {
if (values == null) {
return null;
}
for (String value : values) {
if (StrUtil.isNotBlank(value)) {
return value;
}
}
return null;
}
}