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; package com.yfd.platform.env.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.env.entity.vo.BatchDeleteAo; import com.yfd.platform.env.entity.vo.BatchDeleteAo;
import com.yfd.platform.env.entity.vo.WtrvInfo; import com.yfd.platform.env.entity.vo.WtrvInfo;
import com.yfd.platform.env.service.AlongDetailService; 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.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -60,12 +64,25 @@ public class SdAlongDetailController {
return ResponseResult.success(); return ResponseResult.success();
} }
// @PostMapping("/qgc/GetKendoListCust") @PostMapping("/qgc/GetKendoListCust")
// @Operation(summary = "环保部查询出入库水温、出入库流量、入库水温、天然水温、降雨、气温数据") @Operation(summary = "环保部查询出入库水温、出入库流量、入库水温、天然水温、降雨、气温数据")
// public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
// DataSourceResult result = alongDetailService.getQgcKendoListCust(dataSourceRequest); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
// return ResponseResult.successData(result); 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") @GetMapping("/qgc/stcdCheck")
@Operation(summary = "判断出库水温站、垂向水温站或者低温水减缓设施所属的电站是否有出库水温站、垂向水温站和低温水减缓设施") @Operation(summary = "判断出库水温站、垂向水温站或者低温水减缓设施所属的电站是否有出库水温站、垂向水温站和低温水减缓设施")

View File

@ -20,13 +20,20 @@ import java.util.Map;
@Mapper @Mapper
public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> { 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); 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 " + @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 " + "FROM SD_HYDROPW_R a " +
"INNER JOIN MS_STBPRP_T b ON a.STCD = b.RSTCD " + "WHERE a.IS_DELETED = 0 " +
"WHERE b.IS_DELETED = 0 AND a.IS_DELETED = 0 " + "AND a.STCD = (SELECT RSTCD FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0) " +
"AND b.STCD = #{stcd} AND a.TM BETWEEN #{startTime} AND #{endTime} " + "AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY a.TM") "GROUP BY a.TM")
List<Map<String, Object>> getHydropwDataList(@Param("stcd") String stcd, List<Map<String, Object>> getHydropwDataList(@Param("stcd") String stcd,
@Param("startTime") Date startTime, @Param("startTime") Date startTime,
@ -34,7 +41,7 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
//天然水温 //天然水温
@Select("<script>" + @Select("<script>" +
"SELECT STCD, WTTP, MNTH, WT FROM SD_WTNP_B " + "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 != \"\"'>" + "<if test='rstcd != null and rstcd != \"\"'>" +
"AND STCD = #{rstcd} " + "AND STCD = #{rstcd} " +
"</if>" + "</if>" +
@ -46,14 +53,14 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
//入库水温 //入库水温
@Select("<script>" + @Select("<script>" +
"SELECT 1 AS TYPE, AVG(b.WT) AS WT, b.TM " + "SELECT 1 AS TYPE, AVG(b.WT) AS WT, b.TM " +
"FROM MS_STBPRP_T a " + "FROM SD_PRWTRLTN_B rel " +
"INNER JOIN SD_WTRV_R b ON a.STCD = b.STCD " + "INNER JOIN SD_WTRV_R b ON b.STCD = rel.ENG_IWT_CODE " +
"WHERE a.STTP_CODE = 'WTRV' AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " + "WHERE rel.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"<if test='stcd != null and stcd != \"\"'>" + "<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>" +
"<if test='rstcd != null and rstcd != \"\"'>" + "<if test='rstcd != null and rstcd != \"\"'>" +
"AND a.ENG_IWT_CODE = #{rstcd} " + "AND rel.STCD = #{rstcd} " +
"</if>" + "</if>" +
"AND b.TM BETWEEN #{startTime} AND #{endTime} " + "AND b.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY b.TM" + "GROUP BY b.TM" +
@ -62,14 +69,14 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
//出库水温 //出库水温
@Select("<script>" + @Select("<script>" +
"SELECT 2 AS TYPE, AVG(b.WT) AS WT, b.TM " + "SELECT 2 AS TYPE, AVG(b.WT) AS WT, b.TM " +
"FROM MS_STBPRP_T a " + "FROM SD_PRWTRLTN_B rel " +
"INNER JOIN SD_WTRV_R b ON a.STCD = b.STCD " + "INNER JOIN SD_WTRV_R b ON b.STCD = rel.ENG_DWT_CODE " +
"WHERE a.STTP_CODE = 'WTRV' AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " + "WHERE rel.IS_DELETED = 0 AND b.IS_DELETED = 0 " +
"<if test='stcd != null and stcd != \"\"'>" + "<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>" +
"<if test='rstcd != null and rstcd != \"\"'>" + "<if test='rstcd != null and rstcd != \"\"'>" +
"AND a.ENG_DWT_CODE = #{rstcd} " + "AND rel.STCD = #{rstcd} " +
"</if>" + "</if>" +
"AND b.TM BETWEEN #{startTime} AND #{endTime} " + "AND b.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY b.TM" + "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 " + "INNER JOIN MS_STBPRP_T b ON a.STCD = b.STCD " +
"WHERE b.STTP_CODE = 'MM' " + "WHERE b.STTP_CODE = 'MM' " +
"AND a.IS_DELETED = 0 AND b.IS_DELETED = 0 " + "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} " + "AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY a.TM") "GROUP BY a.TM")
List<Map<String, Object>> getPptnDataList(@Param("stcd")String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime); 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 " + "FROM SD_TMP_R a " +
"INNER JOIN MS_STBPRP_T b ON a.STCD = b.STCD " + "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 " + "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} " + "AND a.TM BETWEEN #{startTime} AND #{endTime} " +
"GROUP BY a.TM") "GROUP BY a.TM")
List<Map<String, Object>> getTmpDataList(@Param("stcd")String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime); 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 " + "SELECT TM, WTHG, ROUND(AVG(VWT), 2) AS VWT " +
"FROM SD_WTVT_R " + "FROM SD_WTVT_R " +
"WHERE STCD IN (" + "WHERE STCD IN (" +
" SELECT STCD FROM MS_STBPRP_T " + " SELECT STCD FROM SD_WT_B_H " +
" WHERE RSTCD = #{rstcd} AND STTP_CODE = 'WTVT' AND IS_DELETED = 0" + " WHERE RSTCD = #{rstcd} AND STTP = 'WTVT' AND IS_DELETED = 0 AND MWAY = 2" +
") " + ") " +
"AND TO_CHAR(TM, 'mi') = 0 AND IS_DELETED = 0 " + "AND TO_CHAR(TM, 'mi') = 0 AND IS_DELETED = 0 " +
"AND TM BETWEEN #{startTime} AND #{endTime} " + "AND TM BETWEEN #{startTime} AND #{endTime} " +
@ -126,18 +133,19 @@ public interface AlongDetailMapper extends BaseMapper<SdAlongDetailVO> {
"GROUP BY a.STCD, a.STNM") "GROUP BY a.STCD, a.STNM")
WtrvInfo getWtrvInfoByStcd2(@Param("stcd") String stcd); WtrvInfo getWtrvInfoByStcd2(@Param("stcd") String stcd);
@Select("SELECT a.STCD AS rstcd, a.STNM AS ennm, " + @Select("SELECT eng.STCD AS rstcd, eng.ENNM AS ennm, " +
"REGEXP_REPLACE(LISTAGG(TO_CHAR(b.STCD), ',') WITHIN GROUP (ORDER BY b.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS stcd, " + "REGEXP_REPLACE(LISTAGG(DISTINCT TO_CHAR(wtrv.STCD), ',') WITHIN GROUP (ORDER BY wtrv.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(DISTINCT TO_CHAR(wtrv.STNM), ',') WITHIN GROUP (ORDER BY wtrv.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(DISTINCT TO_CHAR(vt.STCD), ',') WITHIN GROUP (ORDER BY vt.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStcd, " +
"REGEXP_REPLACE(LISTAGG(TO_CHAR(c.STNM), ',') WITHIN GROUP (ORDER BY c.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStnm " + "REGEXP_REPLACE(LISTAGG(DISTINCT TO_CHAR(vt.STNM), ',') WITHIN GROUP (ORDER BY vt.STCD), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS vtStnm " +
"FROM MS_STBPRP_T a " + "FROM SD_ENGINFO_B_H eng " +
"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 SD_PRWTRLTN_B rel ON rel.STCD = eng.STCD AND rel.IS_DELETED = 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 " + "LEFT JOIN SD_WT_B_H wtrv ON wtrv.RSTCD = eng.STCD AND wtrv.STCD IN (rel.ENG_IWT_CODE, rel.ENG_DWT_CODE) " +
"WHERE a.STTP_CODE = 'ENG' AND a.IS_DELETED = 0 " + " AND wtrv.STTP = 'WTRV' AND wtrv.IS_DELETED = 0 AND wtrv.MWAY = 2 " +
"AND b.STCD IS NOT NULL AND c.STCD IS NOT NULL AND b.ENG_DWT_CODE IS NOT NULL " + "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 " +
"AND (b.STCD = #{stcd} OR c.STCD = #{stcd} OR a.STCD = #{stcd}) " + "WHERE eng.USFL = 1 " +
"AND a.STCD = b.ENG_DWT_CODE " + "AND wtrv.STCD IS NOT NULL AND vt.STCD IS NOT NULL AND rel.ENG_DWT_CODE IS NOT NULL " +
"GROUP BY a.STCD, a.STNM") "AND (wtrv.STCD = #{stcd} OR vt.STCD = #{stcd} OR eng.STCD = #{stcd}) " +
"GROUP BY eng.STCD, eng.ENNM")
WtrvInfo getWtrvInfoByStcd3(@Param("stcd") String stcd); 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.*; import com.yfd.platform.common.*;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.env.entity.vo.*; import com.yfd.platform.env.entity.vo.*;
import com.yfd.platform.env.mapper.AlongDetailMapper; import com.yfd.platform.env.mapper.AlongDetailMapper;
import com.yfd.platform.env.mapper.SdWtrvdrtpSMapper; import com.yfd.platform.env.mapper.SdWtrvdrtpSMapper;
import com.yfd.platform.env.service.AlongDetailService; import com.yfd.platform.env.service.AlongDetailService;
import com.yfd.platform.utils.CollectionExtUtils; import com.yfd.platform.utils.CollectionExtUtils;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import com.yfd.platform.utils.SecurityUtils; import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
@ -33,6 +35,8 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
@Resource @Resource
private DynamicSQLMapper dynamicSQLMapper; private DynamicSQLMapper dynamicSQLMapper;
@Resource @Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Resource
private AlongDetailMapper alongDetailMapper; private AlongDetailMapper alongDetailMapper;
@Resource @Resource
@ -44,34 +48,71 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
@Override @Override
public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, GroupResult> filterResult, Page page) { public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map<String, GroupResult> filterResult, Page page) {
DataSourceResult dataSourceResult = new DataSourceResult(); 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" + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
"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" + String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
" FROM SD_WTRV_R r\n" + String tm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm");
//" 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' " + if (StrUtil.isBlank(tm)) {
" LEFT JOIN MS_STBPRP_T t2 ON r.STCD = t2.STCD \n" + throw new BizException("时间(tm)不能为空.");
" WHERE r.is_deleted=0 and t2.is_deleted=0 " + }
" order by r.tm DESC, r.stcd) t where 1=1 "); Date startTime = null;
Date endTime = null;
sql. append(" AND (TASK_ID IS NULL OR TASK_ID ='' OR TASK_STATUS ='Approved') "); String[] tmArr = tm.split(",");
if (ObjectUtil.isNotEmpty(filterResult.get(CommonConstant.DEFAULT))) { if (tmArr.length == 2) {
if (StrUtil.isNotBlank(filterResult.get(CommonConstant.DEFAULT).getGroupSql())) { Date first = DateUtil.parse(tmArr[0].trim());
sql.append(" and ").append(filterResult.get(CommonConstant.DEFAULT).getGroupSql()); 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())) { StringBuilder sql = new StringBuilder();
sql.append(" ").append(filterResult.get(CommonConstant.DEFAULT).getOrderBySql()); 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()) { Map<String, Object> map = new HashMap<>();
String key = (String) iterator.next(); map.put("startTime", startTime);
map.putAll(filterResult.get(key).getParamMap()); 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.setData(list);
dataSourceResult.setTotal(ObjectUtil.isNotEmpty(page) ? page.getTotal() : (long) list.size()); dataSourceResult.setTotal(ObjectUtil.isNotEmpty(currentPage) ? currentPage.getTotal() : (long) list.size());
return dataSourceResult; return dataSourceResult;
} }
@ -142,7 +183,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
@Override @Override
public DataSourceResult processQgcKendList(DataSourceResult dataSourceResult, WtrvInfo wtrvInfo) { public DataSourceResult processQgcKendList(DataSourceResult dataSourceResult, WtrvInfo wtrvInfo) {
DataSourceResult dr = new DataSourceResult(); 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()) { if (list == null || list.isEmpty()) {
dr.setData(new ArrayList<>()); dr.setData(new ArrayList<>());
@ -150,8 +191,8 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
return dr; return dr;
} }
Date startTime = (Date) list.get(0).get("tm"); Date startTime = list.get(0).getTm();
Date endTime = (Date) list.get(list.size() - 1).get("tm"); Date endTime = list.get(list.size() - 1).getTm();
if (startTime.compareTo(endTime) > 0) { if (startTime.compareTo(endTime) > 0) {
Date tmpDate = startTime; 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>> iwtDataVoList = new ArrayList<>();
List<Map<String, Object>> dwtDataVoList = new ArrayList<>(); List<Map<String, Object>> dwtDataVoList = new ArrayList<>();
List<Map<String, Object>> wtvtDataVoList = 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>> pptnDataVoList = new ArrayList<>();
List<Map<String, Object>> tmpDataVoList = new ArrayList<>(); List<Map<String, Object>> tmpDataVoList = new ArrayList<>();
List<Map<String, Object>> wtnpDataVoList; List<Map<String, Object>> wtnpDataVoList;
@ -187,9 +228,9 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
Map<Date, Map<String, Object>> dwtDataMap = dwtDataVoList.stream() Map<Date, Map<String, Object>> dwtDataMap = dwtDataVoList.stream()
.collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity())); .collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity()));
hydropwDataVoList.addAll(this.alongDetailMapper.getHydropwDataList(wtrvInfo.getStcd(), startTime, endTime)); // hydropwDataVoList.addAll(this.alongDetailMapper.getHydropwDataList(wtrvInfo.getStcd(), startTime, endTime));
Map<Date, Map<String, Object>> hydropwDataMap = hydropwDataVoList.stream() // Map<Date, Map<String, Object>> hydropwDataMap = hydropwDataVoList.stream()
.collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity())); // .collect(Collectors.toMap(it -> (Date) it.get("tm"), Function.identity()));
pptnDataVoList.addAll(this.alongDetailMapper.getPptnDataList(wtrvInfo.getStcd(), startTime, endTime)); pptnDataVoList.addAll(this.alongDetailMapper.getPptnDataList(wtrvInfo.getStcd(), startTime, endTime));
Map<Date, Map<String, Object>> pptnDataMap = pptnDataVoList.stream() 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<Map<String, Object>> qgcWtrvDataVoList = new ArrayList<>();
list.forEach(it -> { list.forEach(it -> {
Map<String, Object> vo = new HashMap<>(); Map<String, Object> vo = new HashMap<>();
vo.put("stcd", it.get("stcd")); vo.put("stcd", it.getStcd());
vo.put("stnm", it.get("stnm")); vo.put("stnm", it.getStnm());
vo.put("wt", it.get("wt")); vo.put("wt", it.getWt());
vo.put("tm", it.get("tm")); vo.put("tm", it.getTm());
vo.put("ennm", wtrvInfo.getEnnm()); vo.put("ennm", wtrvInfo.getEnnm());
vo.put("rstcd", wtrvInfo.getRstcd()); vo.put("rstcd", wtrvInfo.getRstcd());
vo.put("type", wtrvInfo.getType()); vo.put("type", wtrvInfo.getType());
vo.put("natureTmp", wtnpDataMap.get(it.get("mon"))); vo.put("natureTmp", wtnpDataMap.get(it.getMon()));
vo.put("hydropwDataVo", hydropwDataMap.get(it.get("tm"))); // vo.put("hydropwDataVo", hydropwDataMap.get(it.getTm()));
vo.put("pptnDataVo", pptnDataMap.get(it.get("tm"))); vo.put("pptnDataVo", pptnDataMap.get(it.getTm()));
vo.put("tmpDataVo", tmpDataMap.get(it.get("tm"))); vo.put("tmpDataVo", tmpDataMap.get(it.getTm()));
if (wtrvInfo.getType() == 1) { if (wtrvInfo.getType() == 1) {
Map<String, Object> iwtVo = new HashMap<>(); Map<String, Object> iwtVo = new HashMap<>();
iwtVo.put("tm", it.get("tm")); iwtVo.put("tm", it.getTm());
iwtVo.put("wt", it.get("wt")); iwtVo.put("wt", it.getWt());
vo.put("iwtDataVo", iwtVo); vo.put("iwtDataVo", iwtVo);
vo.put("dwtDataVo", dwtDataMap.get(it.get("tm"))); vo.put("dwtDataVo", dwtDataMap.get(it.getTm()));
} }
if (wtrvInfo.getType() == 2) { if (wtrvInfo.getType() == 2) {
Map<String, Object> dwtVo = new HashMap<>(); Map<String, Object> dwtVo = new HashMap<>();
dwtVo.put("tm", it.get("tm")); dwtVo.put("tm", it.getTm());
dwtVo.put("wt", it.get("wt")); dwtVo.put("wt", it.getWt());
vo.put("dwtDataVo", dwtVo); 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) { if (it.getWt() != null && wtvtDataVoMap != null) {
List<Map<String, Object>> vtList = wtvtDataVoMap.get(it.get("tm")); List<Map<String, Object>> vtList = wtvtDataVoMap.get(it.getTm());
if (vtList != null) { if (vtList != null) {
Map<BigDecimal, List<Map<String, Object>>> vtMap = vtList.stream() Map<BigDecimal, List<Map<String, Object>>> vtMap = vtList.stream()
.filter(tt -> tt.get("vwt") != null) .filter(tt -> tt.get("vwt") != null)
.collect(Collectors.groupingBy(tt -> (BigDecimal) tt.get("vwt"))); .collect(Collectors.groupingBy(tt -> (BigDecimal) tt.get("vwt")));
if (vtMap.containsKey(it.get("wt"))) { if (vtMap.containsKey(it.getWt())) {
vo.put("wtvtDataVo", vtMap.get(it.get("wt")).get(0)); vo.put("wtvtDataVo", vtMap.get(it.getWt()).get(0));
qgcWtrvDataVoList.add(vo); qgcWtrvDataVoList.add(vo);
return; return;
} }
@ -262,7 +303,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
BigDecimal[] lrValue = CollectionExtUtils.findNeighbors(sortVt, (BigDecimal) it.get("wt")); BigDecimal[] lrValue = CollectionExtUtils.findNeighbors(sortVt, it.getWt());
if (lrValue.length == 2) { if (lrValue.length == 2) {
leftVt = lrValue[0]; leftVt = lrValue[0];
rightVt = lrValue[1]; rightVt = lrValue[1];
@ -279,7 +320,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
} }
if (leftVt != null && rightVt != null) { 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")) BigDecimal wthg = ((rightVt.subtract(currentWt)).multiply((BigDecimal) leftVo.get("wthg"))
.add((currentWt.subtract(leftVt)).multiply((BigDecimal) rightVo.get("wthg")))) .add((currentWt.subtract(leftVt)).multiply((BigDecimal) rightVo.get("wthg"))))
.divide((rightVt.subtract(currentWt)).add(currentWt.subtract(leftVt)), RoundingMode.HALF_UP); .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) { String forceType) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String engStcd = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd")); String engStcd = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"));
String relationStcd = firstNotBlank( String engIwtCode = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engIwtCode"));
engStcd, String engDwtCode = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engDwtCode"));
normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engIwtCode")), if (StrUtil.isBlank(engIwtCode) && StrUtil.isNotBlank(engStcd)) {
normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "engDwtCode")) engIwtCode = engStcd;
); }
if (StrUtil.isBlank(engDwtCode) && StrUtil.isNotBlank(engStcd)) {
engDwtCode = engStcd;
}
String url = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "url")); String url = normalizeFilterValue(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "url"));
boolean isDetail = forceDetail != null ? forceDetail : "details".equals(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("SWS.WT AS wt, ")
.append("REL.ENG_IWT_CODE AS engIwtCode, ") .append("REL.ENG_IWT_CODE AS engIwtCode, ")
.append("REL.ENG_DWT_CODE AS engDwtCode ") .append("REL.ENG_DWT_CODE AS engDwtCode ")
.append("FROM (") .append("FROM SD_WT_B_H SWT ")
.append(" SELECT SPR.STCD, SPR.ENG_IWT_CODE, SPR.ENG_DWT_CODE ") .append("INNER JOIN ").append(tableName).append(" SWS ON SWS.STCD = SWT.STCD ")
.append(" FROM SD_PRWTRLTN_B SPR ") .append("INNER JOIN SD_WTENGRLTN_B REL ON REL.STCD = SWT.STCD ")
.append(" WHERE SPR.IS_DELETED = 0 "); .append("INNER JOIN SD_ENGINFO_B_H SEG ON SEG.STCD = SWT.RSTCD ")
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("WHERE SWS.IS_DELETED = 0 ") .append("WHERE SWS.IS_DELETED = 0 ")
.append("AND SWT.IS_DELETED = 0 ") .append("AND SWT.IS_DELETED = 0 ")
.append("AND REL.IS_DELETED = 0 ")
.append("AND SWT.USFL = 1 ") .append("AND SWT.USFL = 1 ")
.append("AND SWT.MWAY = 2 ") .append("AND SWT.MWAY = 2 ")
.append("AND SWT.STTP = 'WTRV' ") .append("AND SWT.STTP = 'WTRV' ")
.append("AND SEG.USFL = 1 "); .append("AND SEG.USFL = 1 ");
Map<String, Object> paramMap = new HashMap<>();
if (timeRange[0] != null && timeRange[1] != null) { if (timeRange[0] != null && timeRange[1] != null) {
paramMap.put("startTime", timeRange[0]); paramMap.put("startTime", timeRange[0]);
paramMap.put("endTime", timeRange[1]); paramMap.put("endTime", timeRange[1]);
@ -140,8 +136,19 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
} }
if (isDetail) { if (isDetail) {
appendDetailCondition(sql, forceType); appendDetailCondition(sql, paramMap, forceType, engIwtCode, engDwtCode);
} else { } 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.BASE_ID", "baseId", baseIdList);
appendInCondition(sql, paramMap, "SEG.RVCD", "rvcd", rvcdList); 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); List<SdRvwtSVO> resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdRvwtSVO.class);
if (!isDetail) { if (!isDetail) {
fillDwtp(resultList); fillDwtp(resultList, engIwtCode, engDwtCode);
} }
DataSourceResult<SdRvwtSVO> result = new DataSourceResult<>(); DataSourceResult<SdRvwtSVO> result = new DataSourceResult<>();
@ -160,23 +167,43 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
return result; 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)) { 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)) { } 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) { for (SdRvwtSVO vo : voList) {
if (StrUtil.isNotBlank(vo.getStcd()) if (StrUtil.isNotBlank(vo.getEngIwtCode())
&& StrUtil.isNotBlank(vo.getEngIwtCode()) && StrUtil.isNotBlank(engIwtCode)
&& vo.getStcd().equals(vo.getEngIwtCode())) { && vo.getEngIwtCode().contains(engIwtCode)) {
vo.setDwtp(SdRvwtSVO.DWTP_IWT); vo.setDwtp(SdRvwtSVO.DWTP_IWT);
} else if (StrUtil.isNotBlank(vo.getStcd()) } else if (StrUtil.isNotBlank(vo.getEngDwtCode())
&& StrUtil.isNotBlank(vo.getEngDwtCode()) && StrUtil.isNotBlank(engDwtCode)
&& vo.getStcd().equals(vo.getEngDwtCode())) { && vo.getEngDwtCode().contains(engDwtCode)) {
vo.setDwtp(SdRvwtSVO.DWTP_DWT); vo.setDwtp(SdRvwtSVO.DWTP_DWT);
} }
} }
@ -324,15 +351,4 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
return timeValue; return timeValue;
} }
private String firstNotBlank(String... values) {
if (values == null) {
return null;
}
for (String value : values) {
if (StrUtil.isNotBlank(value)) {
return value;
}
}
return null;
}
} }