feat: 新增水温接口

This commit is contained in:
tangwei 2026-04-15 11:26:15 +08:00
parent b856b39d9d
commit 337da0c445
16 changed files with 974 additions and 0 deletions

View File

@ -0,0 +1,59 @@
package com.yfd.platform.common;
/**
* 通用常量
*
* @author zwl
* @date 2023/07/13
*/
public interface CommonConstant {
/**
* kendo 默认分组
*/
String DEFAULT = "default";
/**
* 计算标识
*/
String CALCULATE_FLAG = "calculateFlag";
/**
* 计算成功
*/
String CALCULATE_SUCCESS = "1";
/**
*
*/
String HOUR = "HOUR";
/**
*
*/
String DAY = "DAY";
/**
*
*/
String TEN = "TEN";
/**
*
*/
String MON = "MON";
/**
*
*/
String QUA = "QUA";
/**
*
*/
String YEAR = "YEAR";
}

View File

@ -0,0 +1,110 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.yfd.platform.common;
public interface CommonConstants {
String UTF_8 = "UTF-8";
String CONTENT_TYPE_NAME = "Content-type";
String CONTENT_TYPE = "application/json;charset=utf-8";
String TENANT_ID = "_TenantId";
String SYSTEM_ID = "_SysId";
String PROJECT_GROUP_ID = "_PgId";
String BELOND_PROJECT_ID = "_ProjectId";
String OLD_BELOND_PROJECT_ID = "_LoginProjectId";
String APPLICATION_ID = "_AppId";
String PLATFORM_ID = "_PlatformId";
String ISOLATE_LEVEL_CODE = "_IsolateLevelCode";
String ISOLATE_ID = "_IsolateId";
String TEMPLATE_ID = "_TemplateId";
String VERSION = "VERSION";
String DEFAULT_TENANT_ID = "00000000-0000-0000-0000-000000000000";
String DEFAULT_BELONG_PROJECT_ID = "00000000-0000-0000-0000-000000000000";
String DEFAULT_GUID = "00000000-0000-0000-0000-000000000000";
String STATUS_DEL = "1";
String STATUS_NORMAL = "0";
String DB_NOT_DELETED = "0";
String DB_IS_DELETED = "1";
String LOG_NORMAL_TYPE = "1";
String STATUS_LOCK = "9";
String MENU = "0";
Integer MENU_TREE_ROOT_ID = -1;
String UTF8 = "UTF-8";
String FRONT_END_PROJECT = "dec-ui";
String BACK_END_PROJECT = "dec";
String DEC_PUBLIC_PARAM_KEY = "DEC_PUBLIC_PARAM_KEY";
Integer SUCCESS = 0;
Integer FAIL = 1;
Integer YES = 1;
Integer NO = 0;
String BUCKET_NAME = "dec";
String DEFAULT_CROWN_CODE = "+86";
String DEFAULT_TIME_ZONE = "GMT+8";
public interface Symbol {
String SIGH = "!";
String AT = "@";
String WELL = "#";
String DOLLAR = "$";
String RMB = "";
String SPACE = " ";
String LB = System.getProperty("line.separator");
String PERCENTAGE = "%";
String AND = "&";
String STAR = "*";
String MIDDLE_LINE = "-";
String LOWER_LINE = "_";
String EQUAL = "=";
String PLUS = "+";
String COLON = ":";
String SEMICOLON = ";";
String COMMA = ",";
String POINT = ".";
String SLASH = "/";
String VERTICAL_BAR = "|";
String DOUBLE_SLASH = "//";
String BACKSLASH = "\\";
String QUESTION = "?";
String LEFT_BIG_BRACE = "{";
String RIGHT_BIG_BRACE = "}";
String LEFT_MIDDLE_BRACE = "[";
String RIGHT_MIDDLE_BRACE = "]";
String BACKQUOTE = "`";
}
public interface Digital {
int NEGATIVE_ONE = -1;
int ZERO = 0;
int ONE = 1;
int TWO = 2;
int FOUR = 4;
int EIGHT = 8;
int SIXTEEN = 16;
}
public interface Pattern {
String DATE = "yyyy-MM-dd";
String DATETIME = "yyyy-MM-dd HH:mm:ss";
String DATETIME_MM = "yyyy-MM-dd HH:mm";
String DATETIME_SSS = "yyyy-MM-dd HH:mm:ss.SSS";
String TIME = "HH:mm";
String TIME_SS = "HH:mm:ss";
String SYS_DATE = "yyyy/MM/dd";
String SYS_DATETIME = "yyyy/MM/dd HH:mm:ss";
String SYS_DATETIME_MM = "yyyy/MM/dd HH:mm";
String SYS_DATETIME_SSS = "yyyy/MM/dd HH:mm:ss.SSS";
String NONE_DATE = "yyyyMMdd";
String NONE_DATETIME = "yyyyMMddHHmmss";
String NONE_DATETIME_MM = "yyyyMMddHHmm";
String NONE_DATETIME_SSS = "yyyyMMddHHmmssSSS";
String CST_DATETIME = "EEE MMM dd HH:mm:ss 'CST' yyyy";
String NONE_DECIMAL = "0";
String ONE_DECIMAL = "0.0";
String TWO_DECIMAL = "0.00";
String TB_NONE_DECIMAL = "#,##0";
String TB_ONE_DECIMAL = "#,##0.0";
String TB_TWO_DECIMAL = "#,##0.00";
}
}

View File

@ -0,0 +1,19 @@
package com.yfd.platform.common.entity.baseInterface;
import java.util.Date;
public interface ILogicalDeleteEntity<TKey> {
Boolean isDeleted();
Integer getIsDeleted();
void setIsDeleted(Integer isDeleted);
TKey getDeleteUser();
void setDeleteUser(TKey deleteUser);
Date getDeleteTime();
void setDeleteTime(Date deleteTime);
}

View File

@ -0,0 +1,13 @@
package com.yfd.platform.common.entity.baseInterface;
import java.util.Date;
public interface IModifyEntity<TKey> {
TKey getModifyUser();
void setModifyUser(TKey modifyUser);
Date getModifyTime();
void setModifyTime(Date modifyTime);
}

View File

@ -0,0 +1,13 @@
package com.yfd.platform.common.entity.baseInterface;
import java.util.Date;
public interface IRecordEntity<TKey> {
TKey getRecordUser();
void setRecordUser(TKey recordUser);
Date getRecordTime();
void setRecordTime(Date recordTime);
}

View File

@ -0,0 +1,73 @@
package com.yfd.platform.common.enums;
import com.yfd.platform.common.exception.IResultCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 通用结果码枚举
*/
@Getter
@AllArgsConstructor
public enum ResultCodeEnum implements IResultCode {
/**
* 成功
*/
SUCCESS(200, "success", "操作成功"),
/**
* 失败
*/
FAILED(500, "failed", "操作失败"),
/**
* 参数错误
*/
PARAM_ERROR(400, "param_error", "参数错误"),
/**
* 未授权
*/
UNAUTHORIZED(401, "unauthorized", "未授权"),
/**
* 禁止访问
*/
FORBIDDEN(403, "forbidden", "禁止访问"),
/**
* 资源不存在
*/
NOT_FOUND(404, "not_found", "资源不存在"),
/**
* 业务异常
*/
BIZ_ERROR(500, "biz_error", "业务异常"),
/**
* 系统异常
*/
SYSTEM_ERROR(500, "system_error", "系统异常"),
/**
* 服务不可用
*/
SERVICE_UNAVAILABLE(503, "service_unavailable", "服务不可用");
/**
* 错误码
*/
private final int code;
/**
* 错误key
*/
private final String errorKey;
/**
* 错误消息
*/
private final String message;
}

View File

@ -0,0 +1,55 @@
package com.yfd.platform.common.exception;
/**
* 业务异常类
*/
public class BizException extends DecException {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_ERR_CODE = "biz_error";
public BizException(String message) {
super(DEFAULT_ERR_CODE, message);
}
public BizException(String message, Object... parameters) {
super(DEFAULT_ERR_CODE, message, parameters);
}
public BizException(int errorCode, Object... parameters) {
super(errorCode, DEFAULT_ERR_CODE, parameters);
}
public BizException(int errorCode, String message) {
super(errorCode, DEFAULT_ERR_CODE, message);
}
public BizException(String errorKey, String message) {
super(errorKey, message);
}
public BizException(IResultCode resultCode) {
super(resultCode);
}
public BizException(IResultCode resultCode, Throwable cause) {
super(resultCode, cause);
}
public BizException(Throwable cause) {
super(cause);
}
public BizException(String message, Throwable cause) {
super(DEFAULT_ERR_CODE, message, cause);
}
public BizException(String errorKey, String message, Throwable cause) {
super(errorKey, message, cause);
}
public BizException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@ -0,0 +1,109 @@
package com.yfd.platform.common.exception;
import com.yfd.platform.common.CommonConstants;
import lombok.Getter;
/**
* 基础异常类
*/
@Getter
public class DecException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
private int errorCode;
/**
* 错误key
*/
private String errorKey;
/**
* 错误消息
*/
private String message;
public DecException(String errorKey, String message) {
super(message);
this.errorKey = errorKey;
this.message = message;
this.errorCode = CommonConstants.FAIL;
}
public DecException(String errorKey, String message, Object... parameters) {
super(formatMessage(message, parameters));
this.errorKey = errorKey;
this.message = formatMessage(message, parameters);
this.errorCode = CommonConstants.FAIL;
}
public DecException(int errorCode, String errorKey, Object... parameters) {
super(errorKey);
this.errorCode = errorCode;
this.errorKey = errorKey;
this.message = formatMessage(errorKey, parameters);
}
public DecException(int errorCode, String errorKey, String message) {
super(message);
this.errorCode = errorCode;
this.errorKey = errorKey;
this.message = message;
}
public DecException(IResultCode resultCode) {
super(resultCode.getMessage());
this.errorCode = resultCode.getCode();
this.errorKey = resultCode.getErrorKey();
this.message = resultCode.getMessage();
}
public DecException(IResultCode resultCode, Throwable cause) {
super(resultCode.getMessage(), cause);
this.errorCode = resultCode.getCode();
this.errorKey = resultCode.getErrorKey();
this.message = resultCode.getMessage();
}
public DecException(Throwable cause) {
super(cause);
this.errorCode = 500;
this.errorKey = "system_error";
this.message = cause.getMessage();
}
public DecException(String errorKey, String message, Throwable cause) {
super(message, cause);
this.errorKey = errorKey;
this.message = message;
this.errorCode = 500;
}
public DecException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
this.errorKey = "system_error";
this.message = message;
this.errorCode = 500;
}
/**
* 格式化消息
* @param message 消息模板
* @param parameters 参数
* @return 格式化后的消息
*/
private static String formatMessage(String message, Object... parameters) {
if (parameters == null || parameters.length == 0) {
return message;
}
String result = message;
for (Object param : parameters) {
result = result.replaceFirst("\\{\\}", String.valueOf(param != null ? param : "null"));
}
return result;
}
}

View File

@ -0,0 +1,16 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.yfd.platform.common.exception;
import java.io.Serializable;
public interface IResultCode extends Serializable {
String getMessage();
int getCode();
String getErrorKey();
}

View File

@ -54,6 +54,8 @@ public class SecurityConfig {
.requestMatchers("/user/login").anonymous()
.requestMatchers("/user/code").permitAll()
.requestMatchers("/eng/**").permitAll()
.requestMatchers("/env/**").permitAll()
.requestMatchers("/sw/**").permitAll()
.requestMatchers(HttpMethod.GET, "/").permitAll()
.requestMatchers(HttpMethod.GET,
"/*.html",

View File

@ -0,0 +1,51 @@
package com.yfd.platform.env.controller;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.env.service.AlongListService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 沿程水温变化一级折线图
*
* @author lyl
* @date 2023/04/18 19:22
*/
@RestController
@RequestMapping("/sw/alongList")
@Tag(name = "沿程水温变化一级折线图")
@Validated
public class SdAlongListController{
@Resource
private AlongListService alongListService;
@PostMapping({"/limit"})
@Operation(summary = "获取流域沿程水温限值")
public ResponseResult getWtLimit(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(alongListService.getWtLimit(dataSourceRequest));
}
@PostMapping({"/default/rvcd"})
@Operation(summary = "获取沿程水温变化默认有数据的河流")
public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(alongListService.getDefaultRvcd(dataSourceRequest));
}
@PostMapping({"/qgc/GetKendoListCust"})
@Operation(summary = "按时间范围查询沿程水温站最新数据时间的数据")
public ResponseResult getALongKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(this.alongListService.getALongKendoListCust(dataSourceRequest));
}
}

View File

@ -0,0 +1,54 @@
package com.yfd.platform.env.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldNameConstants;
import java.math.BigDecimal;
@Getter
@Setter
@FieldNameConstants
@Schema(description = "沿程水温变化一级折线图VO")
public class SdAlongVO {
@Schema(description = "站码")
private String stcd;
@Schema(description = "站名")
private String stnm;
@Schema(description = "电站编码")
private String rstcd;
@Schema(description = "水温")
private BigDecimal temperature;
@Schema(description = "类型1:电站 2:测站")
private String sttp;
@Schema(description = "时间")
private String tm;
@Schema(description = "最小时间")
private String minTm;
@Schema(description = "实测值水温")
private BigDecimal actualTemp;
@Schema(description = "去年同期水温")
private BigDecimal lastTemp;
@Schema(description = "天然水温")
private BigDecimal naturalTemp;
@Schema(description = "电站水温出库站")
private String engDwtCode;
@Schema(hidden = true)
public static final String TYPE_ENG = "1";
@Schema(hidden = true)
public static final String TYPE_ENV = "2";
}

View File

@ -0,0 +1,105 @@
package com.yfd.platform.env.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfd.platform.env.entity.vo.SdAlongVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.Date;
import java.util.List;
/**
* 沿程水温变化一级数据接口
*
* @author
* @since 2023-04-23 09:32:10
*/
@Mapper
public interface AlongListMapper extends BaseMapper<SdAlongVO> {
@Select("<script>" +
"select to_char(max(TM),'yyyy-MM-dd HH24:mi:ss') tm from SD_WTRV_R " +
"where STCD in " +
"(select STCD from V_MS_STBPRP_T a " +
"where STTP_CODE='WTRV' " +
"and ENG_DWT_CODE is not null " +
"and IS_DELETED=0 " +
"and RSTCDSTEPSORT is not null " +
"<if test='rvcd != null and rvcd != \"\"'>" +
"and HBRVCD=#{rvcd} " +
"</if>" +
")" +
"</script>")
String getAlongLatestTm(@Param("rvcd") String rvcd);
@Select("<script>" +
"SELECT SARC.stcd, " +
"SARC.rstcd, " +
"MAB.RVCD, " +
"MAB.ORDER_INDEX AS rvcdSort, " +
"SARC.sort, " +
"CASE WHEN SARC.STTP = 'ENG' THEN '1' WHEN SARC.STTP = 'WTRV' THEN '2' END AS sttp, " +
"SWR.WT AS temperature, " +
"SWR.TM, " +
"SWR.TM AS minTm, " +
"MST.STNM " +
"FROM MS_ALONG_B MAB " +
"INNER JOIN MS_ALONGDET_B SARC ON MAB.ID = SARC.ALONG_ID " +
"INNER JOIN MS_STBPRP_T MST ON MST.stcd = SARC.STCD " +
"LEFT JOIN (" +
"SELECT * FROM SD_WTRV_R where is_deleted=0 " +
"<if test='maxTime != null'>" +
"and TM = #{maxTime} " +
"</if>" +
"<if test='maxTime == null'>" +
"and TM is null " +
"</if>" +
") SWR ON SWR.STCD = SARC.STCD " +
"WHERE MAB.CODE = 'common' " +
"AND (SARC.STTP = 'ENG' OR SARC.STTP = 'WTRV') " +
"AND SARC.IS_DELETED = 0 " +
"AND MST.IS_DELETED = 0 " +
"AND MAB.IS_DELETED = 0 " +
"<if test='rvcd != null and rvcd != \"\"'>" +
"and MAB.rvcd=#{rvcd} " +
"</if>" +
"<if test='baseId != null and baseId != \"\"'>" +
"and MAB.RVCD in (select WBS_CODE from SD_WBS_B where WBS_TYPE='PSB_RVCD' and is_deleted=0 and OBJ_ID=#{baseId}) " +
"</if>" +
"order by MAB.order_index asc, SARC.sort asc" +
"</script>")
List<SdAlongVO> getAlongListData(@Param("rvcd") String rvcd,@Param("baseId") String baseId,@Param("maxTime") Date maxTime);
@Select("<script>" +
"select TM from (" +
"SELECT MST.STCD, SWR.TM " +
"FROM MS_ALONG_B MAB " +
"INNER JOIN MS_ALONGDET_B SARC ON MAB.ID = SARC.ALONG_ID " +
"INNER JOIN MS_STBPRP_T MST ON MST.stcd = SARC.STCD " +
"INNER JOIN (" +
"select * from SD_WTRV_R where is_deleted = 0 " +
"<if test='startTime != null and endTime != null'>" +
"and tm between #{startTime} and #{endTime} " +
"</if>" +
") SWR ON SWR.STCD = SARC.STCD " +
"WHERE MAB.CODE = 'common' " +
"and MST.IS_DELETED=0 " +
"AND SARC.STTP = 'WTRV' " +
"AND SARC.IS_DELETED = 0 " +
"AND MAB.IS_DELETED = 0 " +
"<if test='rvcd != null and rvcd != \"\"'>" +
"and MAB.rvcd=#{rvcd} " +
"</if>" +
"<if test='baseId != null and baseId != \"\"'>" +
"and MAB.RVCD in (select WBS_CODE from SD_WBS_B where WBS_TYPE='PSB_RVCD' and is_deleted=0 and OBJ_ID=#{baseId}) " +
"</if>" +
"order by MAB.order_index asc, SARC.SORT asc, SWR.TM desc" +
") where ROWNUM=1" +
"</script>")
Date getMaxTime(@Param("rvcd") String rvcd,@Param("baseId") String baseId,@Param("startTime") Date startTime,@Param("endTime") Date endTime);
// List<SdAlongVO> getAvgAlongListData(@Param("rvcd") String rvcd,@Param("baseId") String baseId,@Param("startTime") Date startTime,@Param("endTime") Date endTime);
}

View File

@ -0,0 +1,21 @@
package com.yfd.platform.env.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
/**
* 沿程水温变化一级折线图服务
*
* @author
* @since 2023-04-23 09:32:10
*/
public interface AlongListService {
Map<String,Object> getWtLimit(DataSourceRequest dataSourceRequest);
DataSourceResult getDefaultRvcd(@RequestBody DataSourceRequest dataSourceRequest);
DataSourceResult getALongKendoListCust(DataSourceRequest dataSourceRequest);
}

View File

@ -0,0 +1,147 @@
package com.yfd.platform.env.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.DynamicSQLMapper;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.env.entity.vo.SdAlongVO;
import com.yfd.platform.env.mapper.AlongListMapper;
import com.yfd.platform.env.service.AlongListService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import com.yfd.platform.utils.QueryWrapperUtil;
import com.yfd.platform.utils.SqlUtil;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* 沿程水温一级数据接口服务
*
* @author
* @since 2023-04-23 09:32:10
*/
@Service
public class AlongListServiceImpl extends ServiceImpl<AlongListMapper, SdAlongVO> implements AlongListService {
@Resource
private DynamicSQLMapper dynamicSQLMapper;
@Resource
private AlongListMapper alongListMapper;
@Override
public Map<String,Object> getWtLimit(DataSourceRequest dataSourceRequest) {
String sql = "SELECT\n" +
"\tt2.MIN_VAL AS min,\n" +
"\tt2.MAX_VAL AS max\n" +
"FROM\n" +
"\tMS_WARN_RULE_B t1\n" +
"INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON\n" +
"\tt1.ID = t2.RULE_ID\n" +
"WHERE\n" +
"\tt1.RULE_TYPE = 'WTMN'";
List<Map<String,Object>> resultList = dynamicSQLMapper.getAllList(sql, null);
if(!CollectionUtils.isEmpty(resultList)){
return resultList.get(0);
}
return null;
}
@Override
public DataSourceResult getDefaultRvcd(DataSourceRequest dataSourceRequest) {
DataSourceResult<Map<String, String>> dataSourceResult = new DataSourceResult<>();
String sqlTemplate ="\tSELECT RVCD FROM " +
"\t( SELECT RVCD,SORT FROM " +
"\t(select MAB.RVCD,SAB.STCD,CASE WHEN MAB.RVCD #{rvcd} THEN 0 ELSE 1 END AS SORT from MS_ALONG_B MAB inner join MS_ALONGDET_B SAB on SAB.ALONG_ID = MAB.ID WHERE SAB.IS_DELETED =0 AND MAB.IS_DELETED =0 AND SAB.STTP IN ('WTRV', 'ENG') and MAB.CODE='common') t1 " +
"\tINNER JOIN " +
"\t(SELECT WBS_CODE FROM SD_WBS_B WHERE wbs_type = 'PSB_RVCD' #{full_path} AND WBS_NAME IS NOT NULL) t2 " +
"\tON t1.RVCD = t2.WBS_CODE " +
"\tINNER JOIN " +
"\t(SELECT STCD FROM SD_WTRV_R WHERE TM >= #{tm} AND TM <= #{tm_1} AND WT IS NOT NULL ) t3 " +
"\tON t1.STCD = t3.STCD ORDER BY SORT ASC " +
"\t) WHERE ROWNUM = 1 ";
Map<String,Object> sqlWhereMap = new HashMap<>();
SqlUtil.getWhereCondition(dataSourceRequest,sqlWhereMap);
Object full_path = sqlWhereMap.get("full_path");
if(full_path !=null){
String fullPathStr = full_path.toString();
if(fullPathStr.startsWith("'") && fullPathStr.endsWith("'")){
fullPathStr = fullPathStr.substring(1,fullPathStr.length()-1);
}
sqlWhereMap.put("full_path","AND OBJ_ID = '"+fullPathStr+"'");
}else{
sqlWhereMap.put("full_path"," ");
}
Object rvcd = sqlWhereMap.get("rvcd");
if(rvcd == null || StringUtils.isBlank(rvcd.toString())){
sqlWhereMap.put("rvcd"," IS NOT NULL ");
}else{
sqlWhereMap.put("rvcd"," = "+rvcd);
}
String sql = SqlUtil.getSqlByTemplate(sqlTemplate, sqlWhereMap);
List<Map<String, String>> list = dynamicSQLMapper.pageAllList(null, sql, null);
dataSourceResult.setData(list);
dataSourceResult.setTotal(list.size());
return dataSourceResult;
}
@Override
public DataSourceResult getALongKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceResult dataSourceResult = new DataSourceResult<>();
DataSourceLoadOptionsBase loadOptionsBase = dataSourceRequest.toDevRequest();
String rvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptionsBase, "rvcd");
String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptionsBase,"baseId");
String tm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptionsBase,"tm");
if(StrUtil.isBlank(tm)){
throw new BizException("时间(tm)不能为空.");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = null;
Date endTime = null;
if(StrUtil.isNotBlank(tm)){
String[] ll=tm.split(",");
if(ll.length==2){
try{
Date st = sdf.parse(ll[0]);
Date et = sdf.parse(ll[1]);
if(st.after(et)){
startTime= et;
endTime=st;
}else {
startTime =st;endTime=et;
}
}catch (Exception ex){
log.error("日期格式错误! {}",ex);
}
}
}
Date maxTm = this.alongListMapper.getMaxTime(rvcd,baseId,startTime,endTime);
String maxTmStr;
if(maxTm!=null){
maxTmStr = sdf.format(maxTm);
} else {
maxTmStr = null;
}
List<SdAlongVO> alongVOList = this.alongListMapper.getAlongListData(rvcd,baseId,maxTm);
//过滤掉无水温测站关联的电站
Set<String> rstcdSet = alongVOList.stream().filter(sdAlongVO -> SdAlongVO.TYPE_ENV.equals(sdAlongVO.getSttp())).map(SdAlongVO::getRstcd).collect(Collectors.toSet());
alongVOList =alongVOList.stream().filter(sdAlongVO -> SdAlongVO.TYPE_ENV.equals(sdAlongVO.getSttp()) || rstcdSet.contains(sdAlongVO.getStcd())).collect(Collectors.toList());
alongVOList.forEach(it->{
it.setMinTm(maxTmStr);
it.setTm(maxTmStr);
});
dataSourceResult.setTotal(alongVOList.size());
dataSourceResult.setData(alongVOList);
return dataSourceResult;
}
}

View File

@ -0,0 +1,127 @@
package com.yfd.platform.utils;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.yfd.platform.common.DataSourceRequest;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class SqlUtil {
public static StringBuilder getWhereCondition(DataSourceRequest dataSourceRequest, Map<String, Object> sqlWhereMap) {
StringBuilder sb = new StringBuilder();
DataSourceRequest.FilterDescriptor filterDescriptor = dataSourceRequest.getFilter();
String logic = filterDescriptor.getLogic();
for (DataSourceRequest.FilterDescriptor filter : filterDescriptor.getFilters()) {
StringBuilder keyStr = new StringBuilder();
String field = filter.getField();
field = StrUtil.toUnderlineCase(field);
Object value = filter.getValue();
String operator = filter.getOperator();
String dataType = filter.getDataType();
if (StringUtils.isBlank(dataType)) {
dataType = "string";
}
//value值不为空并且operator不是isnull和isnotnull,则忽略
if ((value == null || StringUtils.isBlank(value.toString())) && !("isnull").equals(operator) && !("isnotnull").equals(operator)) {
continue;
}
keyStr.append(String.format(" %s %s", logic, field));
if ("date".equals(dataType)) {
if (String.valueOf(value).length() == 10) {
value = value + " 00:00:00";
}
value = "TO_DATE('" + value + "'," + "'YYYY-MM-DD HH24:MI:SS'" + ")";
}
if ("string".equals(dataType)) {
value = "'" + value + "'";
}
switch (filter.getOperator()) {
case "eq":
operator = "=";
break;
case "ne":
operator = "!=";
break;
case "isnull":
operator = "is null";
break;
case "isnotnull":
operator = "is not null";
break;
case "lt":
operator = "<";
break;
case "lte":
operator = "<=";
break;
case "ge":
operator = ">";
break;
case "gte":
operator = ">=";
break;
case "contains":
operator = "like";
value = "'%" + filter.getValue() + "%'";
break;
case "in":
operator = "in";
value = "(" + getInCondition(filter.getValue().toString()) + ")";
default:
}
keyStr.append(String.format(" %s ", operator));
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append(keyStr).append(value);
if ("or".equalsIgnoreCase(filterDescriptor.getLogic())) {
sb.append(String.format("%s%s%s", " or (", sqlBuffer, ")"));
} else {
sb.append(sqlBuffer);
if (sqlWhereMap != null) {
if (sqlWhereMap.containsKey(field)) {
field = field + "_1";
}
sqlWhereMap.put(field, value);
}
}
}
return sb;
}
private static String getInCondition(String value) {
if (value.startsWith("[") && value.endsWith("]")) {
value = value.substring(1, value.length() - 1);
}
List<String> valueList = Arrays.asList(value.split(","));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < valueList.size(); i++) {
sb.append("'").append(valueList.get(i).trim()).append("'");
if (i != valueList.size() - 1) {
sb.append(",");
}
}
return sb.toString();
}
public static String getSqlByTemplate(String sqlTemplate, Map<String, Object> paramMap) {
if (StringUtils.isBlank(sqlTemplate) || MapUtil.isEmpty(paramMap)) {
return sqlTemplate;
}
for(String key : paramMap.keySet()){
String value = paramMap.get(key).toString();
String replcaeKey = "#{"+key+"}";
sqlTemplate = sqlTemplate.replace(replcaeKey,value);
}
return sqlTemplate;
}
public static String getDateFormat(String date){
return " TO_DATE('"+date+"','YYYY-MM-DD HH24:MI:SS') ";
}
}