Merge branch 'dev-tw'

This commit is contained in:
tangwei 2026-06-26 17:29:39 +08:00
commit 84708a3679
51 changed files with 5551 additions and 105 deletions

View File

@ -45,7 +45,8 @@ public interface MicroservicDynamicSQLMapper<T> {
default <R> List<R> getAllListWithResultType(String sql,
Map<String, Object> map,
Class<R> resultType) {
return convertList(getAllList(sql, map), resultType);
List<Map<String, Object>> allList = getAllList(sql, map);
return convertList(allList, resultType);
}
@Select({"select count(1) count from ${sql} and ${ew.sqlSegment}"})

View File

@ -61,19 +61,21 @@ public class SecurityConfig {
.requestMatchers("/tempFile/**").permitAll()
.requestMatchers("/system/user/auditUser").permitAll()
.requestMatchers("/register/accessToken").permitAll()
// .requestMatchers("/eng/**").permitAll()
// .requestMatchers("/eq/**").permitAll()
// .requestMatchers("/env/**").permitAll()
// .requestMatchers("/warn/**").permitAll()
// .requestMatchers("/wt/**").permitAll()
// .requestMatchers("/fb/**").permitAll()
// .requestMatchers("/zq/**").permitAll()
// .requestMatchers("/wq/**").permitAll()
// .requestMatchers("/vd/**").permitAll()
// .requestMatchers("/fp/**").permitAll()
// .requestMatchers("/fpr/**").permitAll()
// .requestMatchers("/fh/**").permitAll()
// .requestMatchers("/data/**").permitAll()
.requestMatchers("/eng/**").permitAll()
.requestMatchers("/eq/**").permitAll()
.requestMatchers("/env/**").permitAll()
.requestMatchers("/warn/**").permitAll()
.requestMatchers("/wt/**").permitAll()
.requestMatchers("/fb/**").permitAll()
.requestMatchers("/zq/**").permitAll()
.requestMatchers("/wq/**").permitAll()
.requestMatchers("/wte/**").permitAll()
.requestMatchers("/vd/**").permitAll()
.requestMatchers("/vap/**").permitAll()
.requestMatchers("/fp/**").permitAll()
.requestMatchers("/fpr/**").permitAll()
.requestMatchers("/fh/**").permitAll()
.requestMatchers("/data/**").permitAll()
.requestMatchers("/sms/**").permitAll()
.requestMatchers(HttpMethod.GET, "/").permitAll()
.requestMatchers(HttpMethod.GET,

View File

@ -143,6 +143,14 @@ public class SwaggerConfig {
.build();
}
@Bean
public GroupedOpenApi groupEnvWteApi() {
return GroupedOpenApi.builder()
.group("3.9 全过程-生态环保数据服务-生态调查(wte)")
.packagesToScan("com.yfd.platform.qgc_env.wte.controller")
.build();
}

View File

@ -13,7 +13,7 @@ public class Constant {
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String CODE_KEY = "code-key-";
public static final long CODE_EXPIRATION_TIME = 1000 * 60;
public static final long CODE_EXPIRATION_TIME = 1000 * 60 * 2;
/**
* 用于IP定位转换
*/

View File

@ -0,0 +1,27 @@
package com.yfd.platform.qgc_base.controller;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_base.domain.SdAddvcdDicDropdownRequest;
import com.yfd.platform.qgc_base.service.ISdAddvcdDicService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
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;
@RestController
@RequestMapping("/env/addvcd")
@Tag(name = "行政区管理")
public class SdAddvcdDicController {
@Resource
private ISdAddvcdDicService addvcdDicService;
@PostMapping("/selectForDropdown")
@Operation(summary = "根据级别和父级行政区编码查询行政区下拉")
public ResponseResult selectForDropdown(@RequestBody SdAddvcdDicDropdownRequest request) {
return ResponseResult.successData(addvcdDicService.selectForDropdown(request.getGrd(), request.getPaddvcd()));
}
}

View File

@ -1,6 +1,7 @@
package com.yfd.platform.qgc_base.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
@ -24,6 +25,9 @@ import jakarta.annotation.Resource;
@Tag(name = "电站管理")
public class SdEngInfoBHController {
@Resource
private ObjectMapper objectMapper;
@Resource
private ISdEngInfoBHService engInfoBHService;
@ -93,14 +97,15 @@ public class SdEngInfoBHController {
@PostMapping("/add")
@Operation(summary = "新增电站")
public ResponseResult add(@RequestBody SdEngInfoBHOperateRequest request) {
boolean result = engInfoBHService.addEngInfo(request.getEngInfo(), request.getSource());
SdEngInfoBH engInfo = request == null || request.getEngInfo() == null ? null : objectMapper.convertValue(request.getEngInfo(), SdEngInfoBH.class);
boolean result = engInfoBHService.addEngInfo(engInfo, request.getSource());
return result ? ResponseResult.success("新增成功") : ResponseResult.error("新增失败");
}
@Log(module = "电站管理", value = "修改电站")
@PostMapping("/update")
@Operation(summary = "修改电站")
public ResponseResult update(@RequestBody SdEngInfoBHOperateRequest request) {
public ResponseResult update(@RequestBody SdEngInfoBHOperateRequest request) throws Exception {
boolean result = engInfoBHService.updateEngInfo(request.getEngInfo(), request.getSource());
return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败");
}
@ -108,8 +113,9 @@ public class SdEngInfoBHController {
@Log(module = "电站管理", value = "删除电站")
@PostMapping("/delete")
@Operation(summary = "删除电站")
public ResponseResult delete(@RequestParam String stcd) {
boolean result = engInfoBHService.deleteEngInfo(stcd);
public ResponseResult delete(@RequestBody SdEngInfoBHOperateRequest request) {
boolean result = engInfoBHService.deleteEngInfo(request == null ? null : request.getIds(),
request == null ? null : request.getSource());
return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
}

View File

@ -38,4 +38,10 @@ public class SdEngMonitorController {
public ResponseResult getEiaapprovalKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engInfoBHService.getEiaapprovalKendoList(dataSourceRequest));
}
@PostMapping("/operat/GetKendoListCust")
@Operation(summary = "首页-环保设施运行状况")
public ResponseResult getOperatKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engInfoBHService.getOperatKendoList(dataSourceRequest));
}
}

View File

@ -0,0 +1,93 @@
package com.yfd.platform.qgc_base.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 行政区字典表
* </p>
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("SD_ADDVCD_DIC")
public class SdAddvcdDic implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 行政区编码
*/
@TableId(type = IdType.INPUT)
private String addvcd;
/**
* 行政区划名称
*/
private String addvnm;
/**
* 所属行政编码根节点为空
*/
private String paddvcd;
/**
* 树级别从1开始 1= 2= 3=
*/
private Integer grd;
/**
* 树全路径
*/
private String path;
/**
* 排序
*/
private Integer orderIndex;
/**
* 中心经度
*/
private Double lgtd;
/**
* 中心纬度
*/
private Double lttd;
/**
* 面积
*/
private Double area;
/**
* 周长
*/
private Double perimeter;
/**
* 所属国家
*/
private String country;
/**
* 简介
*/
private String introduce;
/**
* 介绍图片
*/
private String inffile;
/**
* 简称
*/
private String shortname;
}

View File

@ -0,0 +1,17 @@
package com.yfd.platform.qgc_base.domain;
import lombok.Data;
@Data
public class SdAddvcdDicDropdownRequest {
/**
* 树级别从1开始 1= 2= 3=
*/
private Integer grd;
/**
* 所属行政编码根节点为空
*/
private String paddvcd;
}

View File

@ -2,10 +2,15 @@ package com.yfd.platform.qgc_base.domain;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class SdEngInfoBHOperateRequest {
private SdEngInfoBH engInfo;
private Map<String, Object> engInfo;
private List<String> ids;
private String source;
}

View File

@ -228,7 +228,7 @@ public class SdFpssBH implements Serializable {
/**
* 鱼道或仿自然通道-流速单位m/s
*/
private String v;
private String flow;
/**
* 仿自然通道断面形状
@ -308,7 +308,7 @@ public class SdFpssBH implements Serializable {
/**
* 设计过鱼规模单位
*/
private Long sjgycnt;
private String sjgycnt;
/**
* 主要过鱼对象{[code:鱼编码1,name:鱼名称1数量],[code:鱼编码2,name:鱼名称2]...}

View File

@ -0,0 +1,32 @@
package com.yfd.platform.qgc_base.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
@Schema(description = "环保设施运行状况")
public class EngOperatVo implements Serializable {
private static final long serialVersionUID = 1L;
private String repCode;
private String sttpCode;
private String pcode;
private String pname;
private String stcd;
private String ennm;
private String stnm;
private String addvcdName;
private String rvcdName;
private String sttpName;
private String baseId;
private Integer dtin;
private Integer runState;
private Integer stdState;
private Integer runSstate;
private Integer bldsttCcode;
private Integer yr;
private Integer count;
}

View File

@ -21,6 +21,7 @@ public class EngVmsstbprptVo implements Serializable {
private String baseId;
private String baseName;
private String reachcdName;
private String reachcd;
private String hbrvcd;
private String hbrvcdName;
private String rvcd;
@ -28,7 +29,11 @@ public class EngVmsstbprptVo implements Serializable {
private String addvcdName;
private String hynm;
private String topHynm;
private String hycd;
private String topHycd;
private String stlc;
private Double lgtd;
private Double lttd;
private Date jcdt;
private Date piodt;
private Date aiodt;

View File

@ -0,0 +1,12 @@
package com.yfd.platform.qgc_base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfd.platform.qgc_base.domain.SdAddvcdDic;
/**
* <p>
* 行政区字典表 Mapper 接口
* </p>
*/
public interface SdAddvcdDicMapper extends BaseMapper<SdAddvcdDic> {
}

View File

@ -7,4 +7,6 @@ public interface IMsOperationLogService {
void recordEngAddLog(SdEngInfoBH engInfo, String source);
void recordEngUpdateLog(SdEngInfoBH before, SdEngInfoBH changeSet, String source);
void recordEngDeleteLog(SdEngInfoBH engInfo, String source);
}

View File

@ -0,0 +1,19 @@
package com.yfd.platform.qgc_base.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.qgc_base.domain.SdAddvcdDic;
import java.util.List;
/**
* <p>
* 行政区字典表 服务类
* </p>
*/
public interface ISdAddvcdDicService extends IService<SdAddvcdDic> {
/**
* 根据级别和父级行政区编码查询下拉数据
*/
List<SdAddvcdDic> selectForDropdown(Integer grd, String paddvcd);
}

View File

@ -8,10 +8,12 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest;
import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo;
import com.yfd.platform.qgc_base.domain.vo.EngOperatVo;
import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo;
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@ -62,11 +64,15 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
boolean updateEngInfo(SdEngInfoBH engInfo, String source);
boolean updateEngInfo(Map<String, Object> engInfoPatch, String source) throws Exception;
/**
* 删除电站
*/
boolean deleteEngInfo(String stcd);
boolean deleteEngInfo(List<String> ids, String source);
List<SdEngInfoBH> selectRegDropdown(SdEngInfoBHRequest sdEngInfoBHRequest);
EngBaseInfoVo getStInfoByStcd(String stcd);
@ -76,4 +82,6 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngVmsstbprptVo> getVmsstbprptKendoList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngOperatVo> getOperatKendoList(DataSourceRequest dataSourceRequest);
}

View File

@ -1,7 +1,5 @@
package com.yfd.platform.qgc_base.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
@ -20,9 +18,11 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Service
public class MsOperationLogServiceImpl implements IMsOperationLogService {
@ -33,22 +33,235 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
static {
ENG_FIELD_MEANING_MAP.put("STCD", "电站编码");
ENG_FIELD_MEANING_MAP.put("TM", "数据时间");
ENG_FIELD_MEANING_MAP.put("ENNM", "电站名称");
ENG_FIELD_MEANING_MAP.put("BASE_ID", "所属基地编码");
// ENG_FIELD_MEANING_MAP.put("BASE_NAME", "所属基地名称");
ENG_FIELD_MEANING_MAP.put("HBRVCD", "所属基地流域编码");
// ENG_FIELD_MEANING_MAP.put("HBRVCD_NAME", "所属基地流域名称");
ENG_FIELD_MEANING_MAP.put("RVCD", "所属流域编码");
// ENG_FIELD_MEANING_MAP.put("RVCD_NAME", "所属流域名称");
ENG_FIELD_MEANING_MAP.put("ADDVCD", "所属行政区编码");
// ENG_FIELD_MEANING_MAP.put("ADDVCD_NAME", "所属行政区名称");
ENG_FIELD_MEANING_MAP.put("COUNTRY", "所属国家编码");
// ENG_FIELD_MEANING_MAP.put("COUNTRY_NAME", "所属国家名称");
ENG_FIELD_MEANING_MAP.put("REACHCD", "所属河段编码");
// ENG_FIELD_MEANING_MAP.put("REACHCD_NAME", "所属河段名称");
ENG_FIELD_MEANING_MAP.put("HYCD", "所属公司编码");
// ENG_FIELD_MEANING_MAP.put("HYNM", "所属公司名称");
ENG_FIELD_MEANING_MAP.put("TOP_HYCD", "所属集团编码");
// ENG_FIELD_MEANING_MAP.put("TOP_HYNM", "所属集团名称");
ENG_FIELD_MEANING_MAP.put("BLPRD", "所属建设阶段");
ENG_FIELD_MEANING_MAP.put("BLDSTT", "建设状态");
ENG_FIELD_MEANING_MAP.put("BLDSTT_CODE", "建设状态分类");
ENG_FIELD_MEANING_MAP.put("ENGTP", "工程类别");
ENG_FIELD_MEANING_MAP.put("PRSC", "工程规模");
ENG_FIELD_MEANING_MAP.put("SCRSC", "工程规模(水库库容)");
ENG_FIELD_MEANING_MAP.put("PRGR", "工程等别");
ENG_FIELD_MEANING_MAP.put("FN", "主要功能");
ENG_FIELD_MEANING_MAP.put("BSSSIN", "地震基本烈度");
ENG_FIELD_MEANING_MAP.put("FRSSIN", "设防地震烈度");
ENG_FIELD_MEANING_MAP.put("ADJUST_ENG", "是否调节水库");
ENG_FIELD_MEANING_MAP.put("ISHVBRRG", "有无拦河坝");
ENG_FIELD_MEANING_MAP.put("DVTP", "开发方式");
ENG_FIELD_MEANING_MAP.put("CNTP", "建设类型");
ENG_FIELD_MEANING_MAP.put("DTIN", "数据是否接入");
ENG_FIELD_MEANING_MAP.put("DTIN_TM", "数据接入时间");
ENG_FIELD_MEANING_MAP.put("USFL", "是否启用");
ENG_FIELD_MEANING_MAP.put("MONTH_REPORT", "是否发布月报");
ENG_FIELD_MEANING_MAP.put("TB_WAY", "填报方式");
ENG_FIELD_MEANING_MAP.put("TB_FREQUENCY", "填报频率");
ENG_FIELD_MEANING_MAP.put("RGCP", "调节性能");
ENG_FIELD_MEANING_MAP.put("LGTD", "经度");
ENG_FIELD_MEANING_MAP.put("LTTD", "纬度");
ENG_FIELD_MEANING_MAP.put("ELEV", "高程");
ENG_FIELD_MEANING_MAP.put("STLC", "站址");
ENG_FIELD_MEANING_MAP.put("ORDER_INDEX", "排序");
ENG_FIELD_MEANING_MAP.put("STDSDT", "规划设计日期");
ENG_FIELD_MEANING_MAP.put("PSTSTDT", "计划开工日期");
ENG_FIELD_MEANING_MAP.put("PESSTDT", "计划完工日期");
ENG_FIELD_MEANING_MAP.put("SWDT", "开工日期");
ENG_FIELD_MEANING_MAP.put("JCDT", "建成日期");
ENG_FIELD_MEANING_MAP.put("WDDT", "退役/拆除日期");
ENG_FIELD_MEANING_MAP.put("JLDT", "截流日期");
ENG_FIELD_MEANING_MAP.put("INTRODUCE", "电站简介");
ENG_FIELD_MEANING_MAP.put("LOGO", "电站LOGO");
ENG_FIELD_MEANING_MAP.put("INFFILE", "介绍弹窗图片");
ENG_FIELD_MEANING_MAP.put("DMAT", "坝体材质");
ENG_FIELD_MEANING_MAP.put("DMTP", "坝体类型");
ENG_FIELD_MEANING_MAP.put("MNUN", "管理单位");
ENG_FIELD_MEANING_MAP.put("CMUN", "主管单位");
ENG_FIELD_MEANING_MAP.put("BLSYS", "归属部门");
ENG_FIELD_MEANING_MAP.put("ROLL", "绕经度方向旋转矩阵值");
ENG_FIELD_MEANING_MAP.put("PITCH", "绕纬度方向旋转矩阵值");
ENG_FIELD_MEANING_MAP.put("HEADING", "绕高程方向旋转矩阵值");
ENG_FIELD_MEANING_MAP.put("SCALE", "模型缩放比例");
ENG_FIELD_MEANING_MAP.put("IMPDSTRZ", "是否受下游顶托");
ENG_FIELD_MEANING_MAP.put("PROV", "工程概况");
ENG_FIELD_MEANING_MAP.put("ESTRYDIS", "河口距离");
ENG_FIELD_MEANING_MAP.put("THRSMDAYS", "三同时评价允许误差天数");
ENG_FIELD_MEANING_MAP.put("ZJXYDZ", "直接下游电站");
ENG_FIELD_MEANING_MAP.put("EDTUN", "编制单位");
ENG_FIELD_MEANING_MAP.put("EDTTM", "编制时间");
ENG_FIELD_MEANING_MAP.put("DSNSTT", "勘测设计情况");
ENG_FIELD_MEANING_MAP.put("YSDLEN", "引水道长");
ENG_FIELD_MEANING_MAP.put("DMRKTP", "坝基岩性");
ENG_FIELD_MEANING_MAP.put("HNTJZL", "混凝土浇筑量");
ENG_FIELD_MEANING_MAP.put("GNTP", "容量构成");
ENG_FIELD_MEANING_MAP.put("CNTRAR", "控制流域面积");
ENG_FIELD_MEANING_MAP.put("CNTRSC", "控制面积占全流域比例");
ENG_FIELD_MEANING_MAP.put("AVYRP", "多年平均降水量");
ENG_FIELD_MEANING_MAP.put("AVQ", "多年平均流量");
ENG_FIELD_MEANING_MAP.put("DSAVQ", "电站未建枯水期平均流量");
ENG_FIELD_MEANING_MAP.put("DSMXQ", "设计洪峰流量");
ENG_FIELD_MEANING_MAP.put("CHMXQ", "校核洪峰流量");
ENG_FIELD_MEANING_MAP.put("RVLEN", "河道长度");
ENG_FIELD_MEANING_MAP.put("RVGR", "河道比降");
ENG_FIELD_MEANING_MAP.put("AVW", "多年平均径流量");
ENG_FIELD_MEANING_MAP.put("AVYRQ", "多年平均年径流量");
ENG_FIELD_MEANING_MAP.put("AVSD", "多年平均输沙量");
ENG_FIELD_MEANING_MAP.put("AVS", "多年平均含沙量");
ENG_FIELD_MEANING_MAP.put("MYAVMNAT", "多年平均最低气温");
ENG_FIELD_MEANING_MAP.put("DSW1", "设计一日洪量");
ENG_FIELD_MEANING_MAP.put("DSW3", "设计三日洪量");
ENG_FIELD_MEANING_MAP.put("CHFLDR", "校核洪水历时");
ENG_FIELD_MEANING_MAP.put("CHFLW", "校核洪水总量");
ENG_FIELD_MEANING_MAP.put("CPSC", "库容系数");
ENG_FIELD_MEANING_MAP.put("NRZAR", "正常蓄水位时水库面积");
ENG_FIELD_MEANING_MAP.put("BCKLEN", "水库回水长度");
ENG_FIELD_MEANING_MAP.put("NRAVWT", "天然河流平均水温");
ENG_FIELD_MEANING_MAP.put("NRMXAVWT", "天然河流最高温月份多年平均水温");
ENG_FIELD_MEANING_MAP.put("NRMNAVWT", "天然河流最低温月份多年平均水温");
ENG_FIELD_MEANING_MAP.put("DNAVWT", "建成后坝下平均水温");
ENG_FIELD_MEANING_MAP.put("DNMXAVWT", "建成后坝下最高温月份多年平均水温");
ENG_FIELD_MEANING_MAP.put("DNMNAVWT", "建成后坝下最低温月份多年平均水温");
ENG_FIELD_MEANING_MAP.put("NRUPAR", "坝址以上流域面积");
ENG_FIELD_MEANING_MAP.put("NRAVZ", "坝址天然河流平均水位");
ENG_FIELD_MEANING_MAP.put("NRAVH", "坝址天然河流平均水深");
ENG_FIELD_MEANING_MAP.put("DSNFQFRQ", "设计入库洪水流量");
ENG_FIELD_MEANING_MAP.put("CKFQFQR", "校核入库洪水流量");
ENG_FIELD_MEANING_MAP.put("OBMXW3", "实测最大洪量(三天)");
ENG_FIELD_MEANING_MAP.put("FDCZ", "水库淹没城镇");
ENG_FIELD_MEANING_MAP.put("FDQT", "淹没其它设施");
ENG_FIELD_MEANING_MAP.put("DSTCRVR", "距河源距离");
ENG_FIELD_MEANING_MAP.put("CKW3", "校核洪量(三天)");
ENG_FIELD_MEANING_MAP.put("FSLTDZ", "防洪限制水位");
ENG_FIELD_MEANING_MAP.put("RSTP", "资源类别");
ENG_FIELD_MEANING_MAP.put("ADJCPS", "调节库容单独");
ENG_FIELD_MEANING_MAP.put("ADJCPM", "调节库容联合");
ENG_FIELD_MEANING_MAP.put("YRGEB", "已正建规模装机容量");
ENG_FIELD_MEANING_MAP.put("TTPWRB", "已正建规模年发电量");
ENG_FIELD_MEANING_MAP.put("DMCREL", "坝顶高程");
ENG_FIELD_MEANING_MAP.put("WSC", "水量利用系数");
ENG_FIELD_MEANING_MAP.put("MXDMHG", "最大坝高");
ENG_FIELD_MEANING_MAP.put("MXDMHGL", "最大坝高(左)");
ENG_FIELD_MEANING_MAP.put("MXDMHGR", "最大坝高(右)");
ENG_FIELD_MEANING_MAP.put("WVTPEL", "防浪墙顶高程");
}
private static final Map<String, String> ENG_CODE_NAME_FIELD_MAP = new LinkedHashMap<>();
private static final Set<String> ENG_NAME_COLUMNS = new HashSet<>();
private static final Map<String, Map<String, String>> ENG_DICT_VALUE_NAME_MAP = new LinkedHashMap<>();
static {
ENG_CODE_NAME_FIELD_MAP.put("BASE_ID", "BASE_NAME");
ENG_CODE_NAME_FIELD_MAP.put("HBRVCD", "HBRVCD_NAME");
ENG_CODE_NAME_FIELD_MAP.put("RVCD", "RVCD_NAME");
ENG_CODE_NAME_FIELD_MAP.put("ADDVCD", "ADDVCD_NAME");
ENG_CODE_NAME_FIELD_MAP.put("COUNTRY", "COUNTRY_NAME");
ENG_CODE_NAME_FIELD_MAP.put("HYCD", "HYNM");
ENG_CODE_NAME_FIELD_MAP.put("TOP_HYCD", "TOP_HYNM");
ENG_CODE_NAME_FIELD_MAP.put("REACHCD", "REACHCD_NAME");
ENG_NAME_COLUMNS.addAll(ENG_CODE_NAME_FIELD_MAP.values());
ENG_DICT_VALUE_NAME_MAP.put("USFL", buildValueNameMap("0", "禁用", "1", "启用"));
ENG_DICT_VALUE_NAME_MAP.put("DTIN", buildValueNameMap("0", "", "1", ""));
ENG_DICT_VALUE_NAME_MAP.put("MONTH_REPORT", buildValueNameMap("0", "", "1", ""));
ENG_DICT_VALUE_NAME_MAP.put("BLPRD", buildValueNameMap(
"1001000", "规划",
"1002000", "预可研",
"1003000", "环评",
"1004000", "可研",
"1005000", "在建",
"1006000", "招标设计",
"1007000", "施工详图",
"1009000", "建设",
"1010000", "蓄水阶段环保验收",
"1011000", "竣工",
"1012000", "竣工环保验收",
"1013000", "环境影响后评价"
));
ENG_DICT_VALUE_NAME_MAP.put("BLDSTT", buildValueNameMap(
"1", "已建成未验收",
"2", "在建",
"3", "可研",
"4", "规划",
"5", "预可研",
"6", "已核准",
"7", "招标设计",
"8", "施工详图",
"9", "其他",
"10", "已建成已验收",
"11", "已开展后评价",
"31", "项目建议书",
"32", "可研",
"33", "已审批",
"34", "初步设计",
"35", "技施设计",
"36", "在建",
"37", "已建成未验收",
"38", "已建成已验收",
"39", "已开展后评价",
"40", "其他",
"61", "规划",
"62", "项目建议书",
"63", "预可研",
"64", "可研",
"65", "已核准",
"66", "初步设计",
"67", "招标设计",
"68", "技施设计",
"69", "施工详图",
"70", "在建",
"71", "已建成未验收",
"72", "已建成已验收",
"73", "已开展后评价",
"74", "其他",
"91", "拆除"
));
ENG_DICT_VALUE_NAME_MAP.put("BLDSTT_CODE", buildValueNameMap(
"0", "未建/规划",
"1", "在建",
"2", "已建"
));
ENG_DICT_VALUE_NAME_MAP.put("ENGTP", buildValueNameMap("1", "水电站", "2", "水利工程", "3", "航电枢纽"));
ENG_DICT_VALUE_NAME_MAP.put("PRSC", buildValueNameMap("1", "大型1", "2", "大型2", "3", "中型", "4", "小型"));
ENG_DICT_VALUE_NAME_MAP.put("SCRSC", buildValueNameMap("1", "大型1", "2", "大型2", "3", "中型", "4", "小型1", "5", "小型2"));
ENG_DICT_VALUE_NAME_MAP.put("PRGR", buildValueNameMap("1", "", "2", "", "3", "", "4", "", "5", ""));
ENG_DICT_VALUE_NAME_MAP.put("FN", buildValueNameMap(
"1", "发电", "2", "防洪", "3", "灌溉", "4", "供水", "5", "航运",
"6", "旅游", "7", "环境", "8", "养殖", "9", "其他"
));
ENG_DICT_VALUE_NAME_MAP.put("BSSSIN", buildValueNameMap("5", "<Ⅵ", "6", "", "7", "", "8", "", "9", "≥Ⅸ"));
ENG_DICT_VALUE_NAME_MAP.put("FRSSIN", buildValueNameMap("0", "未设防", "6", "", "7", "", "8", "", "9", "≥Ⅸ"));
ENG_DICT_VALUE_NAME_MAP.put("ADJUST_ENG", buildValueNameMap("0", "", "1", ""));
ENG_DICT_VALUE_NAME_MAP.put("ISHVBRRG", buildValueNameMap("0", "", "1", ""));
ENG_DICT_VALUE_NAME_MAP.put("RGCP", buildValueNameMap(
"1", "多年调节", "2", "年调节", "3", "不完全年调节", "4", "径流式(无调节)",
"5", "季调节", "6", "月调节", "7", "周调节", "8", "日调节", "9", "其他"
));
ENG_DICT_VALUE_NAME_MAP.put("DMAT", buildValueNameMap("0", "混凝土坝", "1", "土坝"));
ENG_DICT_VALUE_NAME_MAP.put("DMTP", buildValueNameMap(
"0", "混合型", "1", "重力坝", "2", "拱坝", "3", "土石坝", "4", "支墩坝",
"5", "混凝土闸坝", "6", "混凝土面板堆石坝", "7", "预应力坝",
"8", "复合土工膜面板堆石坝", "9", "碾压混凝土重力坝", "10", "混凝土重力坝"
));
ENG_DICT_VALUE_NAME_MAP.put("DVTP", buildValueNameMap("1", "堤坝式", "2", "引水式", "3", "混合式"));
ENG_DICT_VALUE_NAME_MAP.put("CNTP", buildValueNameMap("1", "新建", "2", "改建", "3", "扩建", "4", "加固"));
ENG_DICT_VALUE_NAME_MAP.put("BLSYS", buildValueNameMap("1", "水利", "2", "能源", "3", "交通", "4", "农业", "5", "建设", "9", "其他"));
ENG_DICT_VALUE_NAME_MAP.put("IMPDSTRZ", buildValueNameMap("0", "", "1", ""));
}
@Resource
@ -66,45 +279,101 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
msOperationLogMapper.insert(mainLog);
List<MsOperationLogDetail> details = new ArrayList<>();
Set<String> processedColumns = new HashSet<>();
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
if (shouldSkipField(field)) {
continue;
}
field.setAccessible(true);
String columnName = resolveColumnName(field);
if (ENG_NAME_COLUMNS.contains(columnName) || processedColumns.contains(columnName)) {
continue;
}
Object newValue = getFieldValue(field, engInfo);
if (newValue == null) {
continue;
}
details.add(buildDetail(mainLog.getId(), engInfo.getStcd(), resolveColumnName(field),
null, newValue, "新增字段值"));
String nameColumn = ENG_CODE_NAME_FIELD_MAP.get(columnName);
Object newNameValue = StrUtil.isBlank(nameColumn) ? newValue : getColumnValue(engInfo, nameColumn);
details.add(buildDetail(mainLog.getId(), engInfo.getStcd(), columnName,
null, null, newValue, newNameValue, "新增字段值"));
processedColumns.add(columnName);
if (StrUtil.isNotBlank(nameColumn)) {
processedColumns.add(nameColumn);
}
}
batchInsertDetails(details);
}
@Override
public void recordEngUpdateLog(SdEngInfoBH before, SdEngInfoBH changeSet, String source) {
if (before == null || changeSet == null) {
public void recordEngUpdateLog(SdEngInfoBH before, SdEngInfoBH after, String source) {
if (before == null || after == null) {
return;
}
SdEngInfoBH after = BeanUtil.copyProperties(before, SdEngInfoBH.class);
BeanUtil.copyProperties(changeSet, after, CopyOptions.create().ignoreNullValue());
MsOperationLog mainLog = buildMainLog("修改电站", source);
msOperationLogMapper.insert(mainLog);
List<MsOperationLogDetail> details = new ArrayList<>();
Set<String> processedColumns = new HashSet<>();
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
if (shouldSkipField(field)) {
continue;
}
field.setAccessible(true);
Object oldValue = getFieldValue(field, before);
Object newValue = getFieldValue(field, after);
if (equalsValue(oldValue, newValue)) {
String columnName = resolveColumnName(field);
if (ENG_NAME_COLUMNS.contains(columnName) || processedColumns.contains(columnName)) {
continue;
}
details.add(buildDetail(mainLog.getId(), after.getStcd(), resolveColumnName(field),
oldValue, newValue, "修改字段值"));
Object oldValue = getFieldValue(field, before);
Object newValue = getFieldValue(field, after);
String nameColumn = ENG_CODE_NAME_FIELD_MAP.get(columnName);
Object oldNameValue = resolveNameValue(columnName, nameColumn, oldValue, before);
Object newNameValue = resolveNameValue(columnName, nameColumn, newValue, after);
if (equalsValue(oldValue, newValue) && equalsValue(oldNameValue, newNameValue)) {
continue;
}
details.add(buildDetail(mainLog.getId(), after.getStcd(), columnName,
oldValue, oldNameValue, newValue, newNameValue, "修改字段值"));
processedColumns.add(columnName);
if (StrUtil.isNotBlank(nameColumn)) {
processedColumns.add(nameColumn);
}
}
batchInsertDetails(details);
}
@Override
public void recordEngDeleteLog(SdEngInfoBH engInfo, String source) {
if (engInfo == null) {
return;
}
MsOperationLog mainLog = buildMainLog("删除电站", source);
msOperationLogMapper.insert(mainLog);
List<MsOperationLogDetail> details = new ArrayList<>();
Set<String> processedColumns = new HashSet<>();
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
if (shouldSkipField(field)) {
continue;
}
field.setAccessible(true);
String columnName = resolveColumnName(field);
if (ENG_NAME_COLUMNS.contains(columnName) || processedColumns.contains(columnName)) {
continue;
}
Object oldValue = getFieldValue(field, engInfo);
if (oldValue == null) {
continue;
}
String nameColumn = ENG_CODE_NAME_FIELD_MAP.get(columnName);
Object oldNameValue = resolveNameValue(columnName, nameColumn, oldValue, engInfo);
details.add(buildDetail(mainLog.getId(), engInfo.getStcd(), columnName,
oldValue, oldNameValue, null, null, "删除字段值"));
processedColumns.add(columnName);
if (StrUtil.isNotBlank(nameColumn)) {
processedColumns.add(nameColumn);
}
}
batchInsertDetails(details);
}
@ -121,8 +390,10 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
private MsOperationLogDetail buildDetail(String mainId,
String stationCode,
String fieldCode,
Object oldValue,
Object newValue,
Object oldValueCode,
Object oldValueName,
Object newValueCode,
Object newValueName,
String remark) {
MsOperationLogDetail detail = new MsOperationLogDetail();
detail.setMainId(mainId);
@ -130,10 +401,10 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
detail.setStationCode(stationCode);
detail.setFieldCode(fieldCode);
detail.setFieldMeaning(ENG_FIELD_MEANING_MAP.getOrDefault(fieldCode, fieldCode));
detail.setOldValueCode(formatValue(oldValue));
detail.setOldValueName(formatValue(oldValue));
detail.setNewValueCode(formatValue(newValue));
detail.setNewValueName(formatValue(newValue));
detail.setOldValueCode(formatValue(oldValueCode));
detail.setOldValueName(formatValue(oldValueName));
detail.setNewValueCode(formatValue(newValueCode));
detail.setNewValueName(formatValue(newValueName));
detail.setRemark(remark);
return detail;
}
@ -173,6 +444,64 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
}
}
private Object getColumnValue(Object target, String columnName) {
if (target == null || StrUtil.isBlank(columnName)) {
return null;
}
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
if (shouldSkipField(field)) {
continue;
}
field.setAccessible(true);
if (StrUtil.equals(resolveColumnName(field), columnName)) {
return getFieldValue(field, target);
}
}
return null;
}
private Object resolveNameValue(String fieldCode, String nameColumn, Object rawValue, SdEngInfoBH target) {
if (StrUtil.isNotBlank(nameColumn)) {
return getColumnValue(target, nameColumn);
}
return resolveDictName(fieldCode, rawValue);
}
private Object resolveDictName(String fieldCode, Object rawValue) {
String text = formatValue(rawValue);
if (StrUtil.isBlank(text)) {
return rawValue;
}
Map<String, String> dictMap = ENG_DICT_VALUE_NAME_MAP.get(fieldCode);
if (dictMap == null || dictMap.isEmpty()) {
return rawValue;
}
if (!text.contains(",") && !text.contains(";")) {
return dictMap.getOrDefault(text, rawValue == null ? null : text);
}
String[] parts = text.split("[,;]");
List<String> names = new ArrayList<>();
for (String part : parts) {
String code = StrUtil.trim(part);
if (StrUtil.isBlank(code)) {
continue;
}
names.add(dictMap.getOrDefault(code, code));
}
return names.isEmpty() ? rawValue : String.join(",", names);
}
private static Map<String, String> buildValueNameMap(String... keyValues) {
Map<String, String> valueMap = new LinkedHashMap<>();
if (keyValues == null) {
return valueMap;
}
for (int i = 0; i + 1 < keyValues.length; i += 2) {
valueMap.put(keyValues[i], keyValues[i + 1]);
}
return valueMap;
}
private boolean equalsValue(Object oldValue, Object newValue) {
return StrUtil.equals(formatValue(oldValue), formatValue(newValue));
}

View File

@ -0,0 +1,28 @@
package com.yfd.platform.qgc_base.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.qgc_base.domain.SdAddvcdDic;
import com.yfd.platform.qgc_base.mapper.SdAddvcdDicMapper;
import com.yfd.platform.qgc_base.service.ISdAddvcdDicService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
/**
* <p>
* 行政区字典表 服务实现类
* </p>
*/
@Service
public class SdAddvcdDicServiceImpl extends ServiceImpl<SdAddvcdDicMapper, SdAddvcdDic> implements ISdAddvcdDicService {
@Override
public List<SdAddvcdDic> selectForDropdown(Integer grd, String paddvcd) {
return this.lambdaQuery()
.eq(grd != null, SdAddvcdDic::getGrd, grd)
.eq(StringUtils.hasText(paddvcd), SdAddvcdDic::getPaddvcd, paddvcd)
.orderByAsc(SdAddvcdDic::getOrderIndex)
.list();
}
}

View File

@ -4,9 +4,15 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
@ -20,6 +26,7 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest;
import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo;
import com.yfd.platform.qgc_base.domain.vo.EngOperatVo;
import com.yfd.platform.qgc_base.domain.vo.EngStBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo;
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
@ -33,8 +40,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@ -51,6 +60,19 @@ import java.util.stream.Collectors;
@Service
public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEngInfoBH> implements ISdEngInfoBHService {
private static final Map<String, String> ENG_CODE_NAME_FIELD_MAP = new LinkedHashMap<>();
static {
ENG_CODE_NAME_FIELD_MAP.put("baseId", "baseName");
ENG_CODE_NAME_FIELD_MAP.put("hbrvcd", "hbrvcdName");
ENG_CODE_NAME_FIELD_MAP.put("rvcd", "rvcdName");
ENG_CODE_NAME_FIELD_MAP.put("addvcd", "addvcdName");
ENG_CODE_NAME_FIELD_MAP.put("country", "countryName");
ENG_CODE_NAME_FIELD_MAP.put("hycd", "hynm");
ENG_CODE_NAME_FIELD_MAP.put("topHycd", "topHynm");
ENG_CODE_NAME_FIELD_MAP.put("reachcd", "reachcdName");
}
@Resource
private SdEngInfoBHMapper engInfoBHMapper;
@ -63,6 +85,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
@Resource
private IMsOperationLogService msOperationLogService;
@Resource
private ObjectMapper objectMapper;
@Override
public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) {
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
@ -203,6 +228,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
@Override
@Transactional(rollbackFor = Exception.class)
public boolean addEngInfo(SdEngInfoBH engInfo, String source) {
fillRelatedNameFields(engInfo);
boolean result = this.save(engInfo);
if (result) {
msOperationLogService.recordEngAddLog(engInfo, source);
@ -219,17 +245,301 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
@Transactional(rollbackFor = Exception.class)
public boolean updateEngInfo(SdEngInfoBH engInfo, String source) {
SdEngInfoBH before = engInfo == null ? null : this.getById(engInfo.getStcd());
boolean result = this.updateById(engInfo);
SdEngInfoBH after = before == null ? engInfo : BeanUtil.copyProperties(before, SdEngInfoBH.class);
if (after != null) {
BeanUtil.copyProperties(engInfo, after, CopyOptions.create().ignoreNullValue());
fillRelatedNameFields(after);
}
boolean result = this.updateById(after);
if (result && before != null) {
msOperationLogService.recordEngUpdateLog(before, engInfo, source);
msOperationLogService.recordEngUpdateLog(before, after, source);
}
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateEngInfo(Map<String, Object> engInfoPatch, String source) throws JsonMappingException {
Map<String, Object> filteredPatch = filterEngInfoPatchFields(engInfoPatch);
if (filteredPatch.isEmpty()) {
return false;
}
String stcd = toTextValue(filteredPatch.get("stcd"));
if (!StringUtils.hasText(stcd)) {
return false;
}
SdEngInfoBH before = this.getById(stcd);
if (before == null) {
return false;
}
SdEngInfoBH after = BeanUtil.copyProperties(before, SdEngInfoBH.class);
objectMapper.updateValue(after, filteredPatch);
fillRelatedNameFields(after);
boolean result = updateEngInfoByPatch(stcd, after, filteredPatch);
if (result) {
msOperationLogService.recordEngUpdateLog(before, after, source);
}
return result;
}
private boolean updateEngInfoByPatch(String stcd, SdEngInfoBH after, Map<String, Object> engInfoPatch) {
UpdateWrapper<SdEngInfoBH> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("STCD", stcd);
boolean hasUpdateField = false;
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
field.setAccessible(true);
String fieldName = field.getName();
if ("serialVersionUID".equals(fieldName) || "stcd".equals(fieldName)) {
continue;
}
boolean explicitPatched = engInfoPatch.containsKey(fieldName);
boolean linkedNamePatched = isLinkedNameFieldPatched(fieldName, engInfoPatch);
if (!explicitPatched && !linkedNamePatched) {
continue;
}
String resolveColumnName = resolveColumnName(field);
Object fieldValue = getFieldValue(field, after);
if (fieldValue == null) {
updateWrapper.setSql(resolveColumnName + " = NULL");
} else {
updateWrapper.set(resolveColumnName, fieldValue);
}
hasUpdateField = true;
}
if (!hasUpdateField) {
return true;
}
return this.update(null, updateWrapper);
}
private void fillRelatedNameFields(SdEngInfoBH engInfo) {
if (engInfo == null) {
return;
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("baseId", engInfo.getBaseId());
paramMap.put("hbrvcd", engInfo.getHbrvcd());
paramMap.put("rvcd", engInfo.getRvcd());
paramMap.put("addvcd", engInfo.getAddvcd());
paramMap.put("country", engInfo.getCountry());
paramMap.put("hycd", engInfo.getHycd());
paramMap.put("topHycd", engInfo.getTopHycd());
paramMap.put("reachcd", engInfo.getReachcd());
Map<String, Object> row = microservicDynamicSQLMapper.getOneBySql(buildEngRelatedNameSql(paramMap), paramMap);
engInfo.setBaseName(resolveRelatedName(engInfo.getBaseId(), row, "BASENAME"));
engInfo.setHbrvcdName(resolveRelatedName(engInfo.getHbrvcd(), row, "HBRVNM"));
engInfo.setRvcdName(resolveRelatedName(engInfo.getRvcd(), row, "RVNM"));
engInfo.setAddvcdName(resolveRelatedName(engInfo.getAddvcd(), row, "ADDVNM"));
engInfo.setCountryName(resolveRelatedName(engInfo.getCountry(), row, "COUNTRY_NAME"));
engInfo.setHynm(resolveRelatedName(engInfo.getHycd(), row, "HYNM"));
engInfo.setTopHynm(resolveRelatedName(engInfo.getTopHycd(), row, "TOP_HYNM"));
engInfo.setReachcdName(resolveRelatedName(engInfo.getReachcd(), row, "REACHCD_NAME"));
}
private String buildEngRelatedNameSql(Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(buildScalarNameSelect(
StringUtils.hasText((String) paramMap.get("baseId")),
"(SELECT hb.BASENAME FROM SD_HYDROBASE hb WHERE hb.BASEID = #{map.baseId} AND NVL(hb.IS_DELETED, 0) = 0 AND ROWNUM = 1)",
"BASENAME"
));
sql.append(", ");
sql.append(buildHbrvNameSelect(paramMap));
sql.append(", ");
sql.append(buildScalarNameSelect(
StringUtils.hasText((String) paramMap.get("rvcd")),
"(SELECT rv.RVNM FROM SD_RVCD_DIC rv WHERE rv.RVCD = #{map.rvcd} AND ROWNUM = 1)",
"RVNM"
));
sql.append(", ");
sql.append(buildScalarNameSelect(
StringUtils.hasText((String) paramMap.get("addvcd")),
"(SELECT addv.ADDVNM FROM SD_ADDVCD_DIC addv WHERE addv.ADDVCD = #{map.addvcd} AND ROWNUM = 1)",
"ADDVNM"
));
sql.append(", ");
sql.append(buildScalarNameSelect(
StringUtils.hasText((String) paramMap.get("country")),
"(SELECT country.COUNTRY_NAME FROM SD_COUNTRY_B country WHERE country.COUNTRY_ID = #{map.country} " +
"AND NVL(country.ENABLED, 1) = 1 AND ROWNUM = 1)",
"COUNTRY_NAME"
));
sql.append(", ");
sql.append(buildScalarNameSelect(
StringUtils.hasText((String) paramMap.get("hycd")),
"(SELECT hy.HYNM FROM SD_HYCD_DIC hy WHERE hy.HYCD = #{map.hycd} " +
"AND NVL(hy.IS_DELETED, 0) = 0 AND NVL(hy.ENABLED, 1) = 1 AND ROWNUM = 1)",
"HYNM"
));
sql.append(", ");
sql.append(buildScalarNameSelect(
StringUtils.hasText((String) paramMap.get("topHycd")),
"(SELECT hy.HYNM FROM SD_HYCD_DIC hy WHERE hy.HYCD = #{map.topHycd} " +
"AND NVL(hy.IS_DELETED, 0) = 0 AND NVL(hy.ENABLED, 1) = 1 AND ROWNUM = 1)",
"TOP_HYNM"
));
sql.append(", ");
sql.append(buildReachcdNameSelect(paramMap));
sql.append(" FROM DUAL");
return sql.toString();
}
private String buildHbrvNameSelect(Map<String, Object> paramMap) {
if (!StringUtils.hasText((String) paramMap.get("hbrvcd"))) {
return "NULL AS HBRVNM";
}
StringBuilder sql = new StringBuilder("(SELECT hbrv.HBRVNM FROM SD_HBRV_DIC hbrv WHERE hbrv.HBRVCD = #{map.hbrvcd} ");
if (StringUtils.hasText((String) paramMap.get("baseId"))) {
sql.append("AND hbrv.BASEID = #{map.baseId} ");
}
sql.append("AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 AND ROWNUM = 1) AS HBRVNM");
return sql.toString();
}
private String buildScalarNameSelect(boolean hasText, String querySql, String alias) {
if (!hasText) {
return "NULL AS " + alias;
}
return querySql + " AS " + alias;
}
private String buildReachcdNameSelect(Map<String, Object> paramMap) {
if (!StringUtils.hasText((String) paramMap.get("reachcd"))) {
return "NULL AS REACHCD_NAME";
}
return "(SELECT LISTAGG(pathNode.RVNM, '-') WITHIN GROUP (ORDER BY pathNode.LVL DESC) " +
"FROM ( " +
" SELECT rv.RVNM, LEVEL AS LVL " +
" FROM SD_RVCD_DIC rv " +
" START WITH rv.RVCD = #{map.reachcd} " +
" CONNECT BY PRIOR rv.PRVCD = rv.RVCD " +
") pathNode) AS REACHCD_NAME";
}
private String resolveRelatedName(String code, Map<String, Object> row, String column) {
if (code == null) {
return null;
}
if (code.isBlank()) {
return "";
}
if (row == null) {
return null;
}
Object value = row.get(column);
if (value == null) {
value = row.get(column.toLowerCase());
}
return value == null ? null : String.valueOf(value);
}
private Map<String, Object> filterEngInfoPatchFields(Map<String, Object> engInfoPatch) {
Map<String, Object> filteredPatch = new LinkedHashMap<>();
if (engInfoPatch == null || engInfoPatch.isEmpty()) {
return filteredPatch;
}
Set<String> validFieldNames = new HashSet<>();
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
if ("serialVersionUID".equals(field.getName())) {
continue;
}
validFieldNames.add(field.getName());
}
for (Map.Entry<String, Object> entry : engInfoPatch.entrySet()) {
if (validFieldNames.contains(entry.getKey())) {
filteredPatch.put(entry.getKey(), entry.getValue());
}
}
return filteredPatch;
}
private boolean isLinkedNameFieldPatched(String fieldName, Map<String, Object> engInfoPatch) {
for (Map.Entry<String, String> entry : ENG_CODE_NAME_FIELD_MAP.entrySet()) {
if (entry.getValue().equals(fieldName) && engInfoPatch.containsKey(entry.getKey())) {
return true;
}
}
return false;
}
private String resolveColumnName(Field field) {
TableId tableId = field.getAnnotation(TableId.class);
if (tableId != null) {
return camelToUpperUnderline(field.getName());
}
TableField tableField = field.getAnnotation(TableField.class);
if (tableField != null && StrUtil.isNotBlank(tableField.value())) {
return tableField.value();
}
return camelToUpperUnderline(field.getName());
}
private Object getFieldValue(Field field, Object target) {
try {
return field.get(target);
} catch (IllegalAccessException e) {
return null;
}
}
private String toTextValue(Object value) {
if (value == null) {
return null;
}
String text = String.valueOf(value);
return text.isBlank() ? null : text;
}
private String camelToUpperUnderline(String text) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
if (Character.isUpperCase(ch) && i > 0) {
builder.append('_');
}
builder.append(Character.toUpperCase(ch));
}
return builder.toString();
}
@Override
public boolean deleteEngInfo(String stcd) {
return this.update( new LambdaUpdateWrapper<SdEngInfoBH>().eq(SdEngInfoBH::getStcd, stcd).set(SdEngInfoBH::getIsDeleted, 1));
// return this.removeById(stcd);
if (StrUtil.isBlank(stcd)) {
return false;
}
return deleteEngInfo(java.util.Collections.singletonList(stcd), null);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deleteEngInfo(List<String> ids, String source) {
List<String> stcdList = ids == null ? new ArrayList<>() : ids.stream()
.filter(StrUtil::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (CollUtil.isEmpty(stcdList)) {
return false;
}
List<SdEngInfoBH> beforeList = this.lambdaQuery()
.in(SdEngInfoBH::getStcd, stcdList)
.eq(SdEngInfoBH::getIsDeleted, 0)
.list();
if (CollUtil.isEmpty(beforeList)) {
return false;
}
boolean result = this.update(new LambdaUpdateWrapper<SdEngInfoBH>()
.in(SdEngInfoBH::getStcd, stcdList)
.eq(SdEngInfoBH::getIsDeleted, 0)
.set(SdEngInfoBH::getIsDeleted, 1)
.set(SdEngInfoBH::getDeleteUser, SecurityUtils.getCurrentUsername())
.set(SdEngInfoBH::getDeleteTime, new Date()));
if (result) {
for (SdEngInfoBH before : beforeList) {
msOperationLogService.recordEngDeleteLog(before, source);
}
}
return result;
}
@Override
@ -382,6 +692,132 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return result;
}
@Override
public DataSourceResult<EngOperatVo> getOperatKendoList(DataSourceRequest dataSourceRequest) {
DataSourceResult<EngOperatVo> result = new DataSourceResult<>();
result.setAggregates(new HashMap<>());
if (dataSourceRequest == null) {
result.setData(new ArrayList<>());
result.setTotal(0L);
return result;
}
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest.getGroup())) {
return queryOperatSummaryList(dataSourceRequest, loadOptions);
}
return queryOperatGroupList(dataSourceRequest, loadOptions);
}
private DataSourceResult<EngOperatVo> queryOperatSummaryList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildOperatSummarySelectSql(dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildOperatCategorySql())
.append(") cat ")
.append("LEFT JOIN (SELECT * FROM (")
.append(buildOperatBaseViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildOperatBaseFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StringUtils.hasText(filterSql)) {
sql.append(" AND ").append(filterSql);
}
sql.append(") src ON cat.repCode = src.repCode ")
.append("GROUP BY cat.repCode, cat.sttpName, cat.orderIndex ")
.append(buildOperatSummaryOrderBySql(dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngOperatVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
page, sql.toString(), paramMap, EngOperatVo.class);
DataSourceResult<EngOperatVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page == null ? list.size() : page.getTotal());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngOperatVo> queryOperatGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
List<String> selectItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || !StringUtils.hasText(descriptor.getField())) {
continue;
}
String column = mapOperatGroupColumn(descriptor.getField());
if (!StringUtils.hasText(column)) {
continue;
}
selectItems.add(column + " AS " + descriptor.getField().toUpperCase());
selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase());
if (CollUtil.isNotEmpty(descriptor.getAggregates())) {
for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) {
String aggregateColumn = mapOperatGroupColumn(aggregate.getField());
if (!StringUtils.hasText(aggregateColumn) || !StringUtils.hasText(aggregate.getAggregate())) {
continue;
}
String aggregateSql = buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField());
if (StringUtils.hasText(aggregateSql)) {
selectItems.add(aggregateSql);
}
}
}
}
if (selectItems.isEmpty()) {
selectItems.add("t.STCD AS STCD");
selectItems.add("COUNT(*) AS COUNT_STCD");
}
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(String.join(", ", selectItems))
.append(" FROM (")
.append(buildOperatStateViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
if (!containsOperatYearFilter(dataSourceRequest.getFilter())) {
sql.append(" AND t.yr = ").append(new Date().getYear() + 1900);
}
String filterSql = buildOperatGroupFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StringUtils.hasText(filterSql)) {
sql.append(" AND ").append(filterSql);
}
List<String> groupByColumns = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || !StringUtils.hasText(descriptor.getField())) {
continue;
}
String column = mapOperatGroupColumn(descriptor.getField());
if (StringUtils.hasText(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns));
}
sql.append(buildOperatGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngOperatVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngOperatVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngOperatVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal(0L);
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest) {
DataSourceResult<EngEiaapprovalVo> result = new DataSourceResult<>();
@ -531,6 +967,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
"'电站' AS sttpName, " +
"eng.STCD AS stcd, " +
"eng.ENNM AS stnm, " +
"eng.LGTD AS lgtd, " +
"eng.LTTD AS lttd, " +
"eng.REACHCD AS reachcd, " +
"eng.REACHCD_NAME AS reachcdName, " +
"eng.ENNM AS ennm, " +
"eng.BASE_ID AS baseId, " +
@ -542,6 +981,8 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
"addv.ADDVNM AS addvcdName, " +
"hy.HYNM AS hynm, " +
"topHy.HYNM AS topHynm, " +
"hy.HYCD AS hycd, " +
"topHy.HYCD AS topHycd, " +
"eng.STLC AS stlc, " +
"eng.JCDT AS jcdt, " +
"eng.PIODT AS piodt, " +
@ -622,7 +1063,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
"CAST(NULL AS NUMBER) AS gncnt, " +
"eng.GNTP AS gntp, " +
"CAST(NULL AS NUMBER) AS grntpwr, " +
"eng.TTPWRB AS yrge, " +
"pwr.YRGE AS yrge, " +
"CAST(NULL AS NUMBER) AS ushr, " +
"CAST(NULL AS NUMBER) AS k, " +
"eng.DMTP AS dmtp, " +
@ -639,6 +1080,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
" WHEN '3' THEN '混合式' " +
" ELSE NULL END AS dvtpName, " +
"eng.DTIN AS dtin, " +
"eng.DTIN_ENV AS dtinEnv, " +
"CASE NVL(eng.DTIN, 0) " +
" WHEN 0 THEN '否' " +
" WHEN 1 THEN '是' " +
@ -655,6 +1097,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
"LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " +
"LEFT JOIN SD_HYCD_DIC hy ON hy.HYCD = eng.HYCD AND NVL(hy.IS_DELETED, 0) = 0 AND NVL(hy.ENABLED, 1) = 1 " +
"LEFT JOIN SD_HYCD_DIC topHy ON topHy.HYCD = eng.TOP_HYCD AND NVL(topHy.IS_DELETED, 0) = 0 AND NVL(topHy.ENABLED, 1) = 1 " +
"LEFT JOIN SD_PWR_B_H pwr ON pwr.STCD = eng.STCD AND NVL(pwr.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN ( " +
" SELECT det.SORT, cfg.RVCD, det.STCD " +
@ -699,15 +1142,20 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
columns.put("stnm", "t.stnm AS stnm");
columns.put("ennm", "t.ennm AS ennm");
columns.put("baseId", "t.baseId AS baseId");
columns.put("reachcd", "t.reachcd AS reachcd");
columns.put("reachcdName", "t.reachcdName AS reachcdName");
columns.put("baseName", "t.baseName AS baseName");
columns.put("hbrvcd", "t.hbrvcd AS hbrvcd");
columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName");
columns.put("rvcd", "t.rvcd AS rvcd");
columns.put("lgtd", "t.lgtd AS lgtd");
columns.put(" lttd", "t. lttd AS lttd");
columns.put("rvcdName", "t.rvcdName AS rvcdName");
columns.put("addvcdName", "t.addvcdName AS addvcdName");
columns.put("hynm", "t.hynm AS hynm");
columns.put("topHynm", "t.topHynm AS topHynm");
columns.put("hycd", "t.hycd AS hycd");
columns.put("topHycd", "t.topHycd AS topHycd");
columns.put("stlc", "t.stlc AS stlc");
columns.put("jcdt", "t.jcdt AS jcdt");
columns.put("piodt", "t.piodt AS piodt");
@ -969,6 +1417,410 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return orderItems.isEmpty() ? "" : " ORDER BY " + String.join(", ", orderItems);
}
private String buildOperatCategorySql() {
return "SELECT STTP_CODE AS repCode, STTP_NAME AS sttpName, ORDER_INDEX AS orderIndex " +
"FROM SD_STTP_B WHERE NVL(IS_DELETED, 0) = 0 " +
"AND STTP_CODE IN ('FP', 'DW', 'VP', 'FB', 'VA', 'FH', 'EQ')";
}
private String buildOperatBaseViewSql() {
return buildOperatBaseSelectSql("vp.STCD", "vp.STNM", "vp.STTP", "vp.DTIN", "vp.BLDSTT_CODE",
"NVL(vp.BASE_ID, eng.BASE_ID)", "NVL(vp.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "vp.RSTCD", "eng.ENNM", "SD_VP_B_H vp",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = vp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(vp.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("fb.STCD", "fb.STNM", "fb.STTP", "fb.DTIN", "fb.BLDSTT_CODE",
"NVL(fb.BASE_ID, eng.BASE_ID)", "NVL(fb.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "fb.RSTCD", "eng.ENNM", "SD_FBRD_B_H fb",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
" 1=1 "
// "NVL(fb.IS_DELETED, 0) = 0"
) +
" UNION ALL " +
buildOperatBaseSelectSql("va.STCD", "va.STNM", "va.STTP", "va.DTIN", "va.BLDSTT_CODE",
"NVL(va.BASE_ID, eng.BASE_ID)", "NVL(va.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "va.RSTCD", "eng.ENNM", "SD_VA_B_H va",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = va.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(va.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("fh.STCD", "fh.STNM", "'FH'", "fh.DTIN", "NULL",
"NVL(fh.BASE_ID, eng.BASE_ID)", "NVL(fh.HBRVCD, eng.HBRVCD)", "NVL(fh.RVCD, eng.RVCD)",
"NVL(eng.RVCD_NAME, NULL)", "eng.ADDVCD_NAME", "fh.RSTCD", "eng.ENNM", "SD_FHBT_B_H fh",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fh.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(fh.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("dw.STCD", "dw.STNM", "dw.STTP", "dw.DTIN", "dw.BLDSTT_CODE",
"eng.BASE_ID", "eng.HBRVCD", "eng.RVCD", "eng.RVCD_NAME", "eng.ADDVCD_NAME", "dw.RSTCD",
"eng.ENNM", "SD_DFLTKW_B_H dw",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = dw.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(dw.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("fp.STCD", "fp.STNM", "fp.STTP", "fp.DTIN", "fp.BLDSTT_CODE",
"eng.BASE_ID", "eng.HBRVCD", "eng.RVCD", "eng.RVCD_NAME", "eng.ADDVCD_NAME", "fp.RSTCD",
"eng.ENNM", "SD_FPSS_B_H fp",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"1 = 1") +
" UNION ALL " +
buildOperatBaseSelectSql("eq.STCD", "eq.STNM", "eq.STTP", "eq.DTIN", "eq.BLDSTT_CODE",
"NVL(eq.BASE_ID, eng.BASE_ID)", "NVL(eq.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "eq.RSTCD", "eng.ENNM", "SD_EQ_B_H eq",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = eq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(eq.IS_DELETED, 0) = 0");
}
private String buildOperatBaseSelectSql(String stcdExpr,
String stnmExpr,
String sttpExpr,
String dtinExpr,
String bldsttExpr,
String baseIdExpr,
String hbrvcdExpr,
String rvcdExpr,
String rvcdNameExpr,
String addvcdNameExpr,
String rstcdExpr,
String ennmExpr,
String fromSql,
String joinSql,
String whereSql) {
return "SELECT " +
stcdExpr + " AS stcd, " +
stnmExpr + " AS stnm, " +
sttpExpr + " AS sttpCode, " +
"CASE WHEN INSTR(" + sttpExpr + ", '_') > 0 THEN SUBSTR(" + sttpExpr + ", 1, INSTR(" + sttpExpr + ", '_') - 1) ELSE " + sttpExpr + " END AS repCode, " +
dtinExpr + " AS dtin, " +
bldsttExpr + " AS bldsttCcode, " +
baseIdExpr + " AS baseId, " +
hbrvcdExpr + " AS hbrvcd, " +
rvcdExpr + " AS rvcd, " +
rvcdNameExpr + " AS rvcdName, " +
addvcdNameExpr + " AS addvcdName, " +
rstcdExpr + " AS rstcd, " +
ennmExpr + " AS ennm " +
"FROM " + fromSql + " " +
joinSql + " WHERE " + whereSql;
}
private String buildOperatStateViewSql() {
return "SELECT " +
"src.repCode AS repCode, " +
"src.sttpCode AS sttpCode, " +
"src.repCode AS pcode, " +
"parent.STTP_NAME AS pname, " +
"child.STTP_NAME AS sttpName, " +
"src.stcd AS stcd, " +
"src.ennm AS ennm, " +
"src.stnm AS stnm, " +
"src.addvcdName AS addvcdName, " +
"src.rvcdName AS rvcdName, " +
"src.baseId AS baseId, " +
"src.dtin AS dtin, " +
"src.bldsttCcode AS bldsttCcode, " +
"state.RUN_STATE AS runState, " +
"state.STD_STATE AS stdState, " +
"state.STD_SSTATE AS runSstate, " +
"state.YR AS yr " +
"FROM (" + buildOperatBaseViewSql() + ") src " +
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = src.sttpCode AND NVL(child.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B parent ON parent.STTP_CODE = src.repCode AND NVL(parent.IS_DELETED, 0) = 0 " +
"INNER JOIN MS_STSTATE_T state ON state.STCD = src.stcd AND NVL(state.IS_DELETED, 0) = 0";
}
private String buildOperatSummarySelectSql(List<String> selectFields) {
Map<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("repCode", "cat.repCode AS repCode");
columnMap.put("sttpName", "cat.sttpName AS sttpName");
columnMap.put("count", "COUNT(src.repCode) AS count");
List<String> items = new ArrayList<>();
if (CollUtil.isNotEmpty(selectFields)) {
for (String field : selectFields) {
String column = columnMap.get(field);
if (StringUtils.hasText(column)) {
items.add(column);
}
}
}
if (items.isEmpty()) {
items.addAll(columnMap.values());
}
return String.join(", ", items);
}
private String buildOperatSummaryOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY cat.orderIndex ASC NULLS LAST, cat.repCode ASC";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
if (sortDescriptor == null || !StringUtils.hasText(sortDescriptor.getField())) {
continue;
}
String column = mapOperatSummaryColumn(sortDescriptor.getField());
if (!StringUtils.hasText(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + dir);
}
if (orderItems.isEmpty()) {
return " ORDER BY cat.orderIndex ASC NULLS LAST, cat.repCode ASC";
}
return " ORDER BY " + String.join(", ", orderItems);
}
private String buildOperatBaseFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StringUtils.hasText(filter.getField())) {
String column = mapOperatBaseColumn(filter.getField());
return buildOperatCondition(column, filter, paramMap, indexHolder, false, "operatBase");
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> childConditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildOperatBaseFilterCondition(child, paramMap, indexHolder);
if (StringUtils.hasText(childSql)) {
childConditions.add("(" + childSql + ")");
}
}
if (childConditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, childConditions);
}
private String buildOperatGroupFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StringUtils.hasText(filter.getField())) {
String field = filter.getField();
String column = mapOperatGroupColumn(field);
boolean dateField = false;
return buildOperatCondition(column, filter, paramMap, indexHolder, dateField, "operatGroup");
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> childConditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildOperatGroupFilterCondition(child, paramMap, indexHolder);
if (StringUtils.hasText(childSql)) {
childConditions.add("(" + childSql + ")");
}
}
if (childConditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, childConditions);
}
private String buildOperatCondition(String column,
DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder,
boolean dateField,
String keyPrefix) {
if (!StringUtils.hasText(column) || filter == null) {
return "";
}
String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase();
Object value = filter.getValue();
if ("isnull".equals(operator)) {
return column + " IS NULL";
}
if ("isnotnull".equals(operator)) {
return column + " IS NOT NULL";
}
if ("isempty".equals(operator)) {
return "(" + column + " IS NULL OR " + column + " = '')";
}
if ("isnotempty".equals(operator)) {
return "(" + column + " IS NOT NULL AND " + column + " <> '')";
}
if ("in".equals(operator) || "ni".equals(operator)) {
List<Object> values = normalizeFilterValues(value);
if (values.isEmpty()) {
return "";
}
List<String> placeholders = new ArrayList<>();
for (Object item : values) {
String key = keyPrefix + indexHolder[0]++;
paramMap.put(key, item);
placeholders.add("#{map." + key + "}");
}
return column + ("ni".equals(operator) ? " NOT IN (" : " IN (") + String.join(", ", placeholders) + ")";
}
if (value == null) {
return "";
}
String key = keyPrefix + indexHolder[0]++;
String expr = buildOperatValueExpr(key, dateField, value);
return switch (operator) {
case "eq" -> {
paramMap.put(key, value);
yield column + " = " + expr;
}
case "neq" -> {
paramMap.put(key, value);
yield column + " <> " + expr;
}
case "contains" -> {
paramMap.put(key, "%" + value + "%");
yield column + " LIKE #{map." + key + "}";
}
case "doesnotcontain" -> {
paramMap.put(key, "%" + value + "%");
yield column + " NOT LIKE #{map." + key + "}";
}
case "startswith" -> {
paramMap.put(key, value + "%");
yield column + " LIKE #{map." + key + "}";
}
case "endswith" -> {
paramMap.put(key, "%" + value);
yield column + " LIKE #{map." + key + "}";
}
case "gt" -> {
paramMap.put(key, value);
yield column + " > " + expr;
}
case "gte" -> {
paramMap.put(key, value);
yield column + " >= " + expr;
}
case "lt" -> {
paramMap.put(key, value);
yield column + " < " + expr;
}
case "lte" -> {
paramMap.put(key, value);
yield column + " <= " + expr;
}
default -> "";
};
}
private String buildOperatValueExpr(String paramKey, boolean dateField, Object value) {
if (!dateField || value == null) {
return "#{map." + paramKey + "}";
}
String text = String.valueOf(value).trim();
if (text.length() <= 10) {
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')";
}
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')";
}
private String mapOperatSummaryColumn(String field) {
if (!StringUtils.hasText(field)) {
return null;
}
return switch (field) {
case "repCode" -> "cat.repCode";
case "sttpName" -> "cat.sttpName";
case "count" -> "COUNT(src.repCode)";
default -> null;
};
}
private String mapOperatBaseColumn(String field) {
if (!StringUtils.hasText(field)) {
return null;
}
return switch (field) {
case "repCode" -> "t.repCode";
case "sttpCode" -> "t.sttpCode";
case "stcd" -> "t.stcd";
case "stnm" -> "t.stnm";
case "rstcd" -> "t.rstcd";
case "ennm" -> "t.ennm";
case "baseId", "baseid" -> "t.baseId";
case "hbrvcd" -> "t.hbrvcd";
case "rvcdName" -> "t.rvcdName";
case "addvcdName" -> "t.addvcdName";
case "dtin" -> "t.dtin";
case "bldsttCcode" -> "t.bldsttCcode";
default -> null;
};
}
private String mapOperatGroupColumn(String field) {
if (!StringUtils.hasText(field)) {
return null;
}
return switch (field) {
case "repCode" -> "t.repCode";
case "sttpCode" -> "t.sttpCode";
case "pcode" -> "t.pcode";
case "pname" -> "t.pname";
case "sttpName" -> "t.sttpName";
case "stcd" -> "t.stcd";
case "ennm" -> "t.ennm";
case "stnm" -> "t.stnm";
case "addvcdName" -> "t.addvcdName";
case "rvcdName" -> "t.rvcdName";
case "baseId", "baseid" -> "t.baseId";
case "dtin" -> "t.dtin";
case "runState" -> "t.runState";
case "stdState" -> "t.stdState";
case "runSstate" -> "t.runSstate";
case "bldsttCcode" -> "t.bldsttCcode";
case "yr" -> "t.yr";
default -> null;
};
}
private String buildOperatGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
if (CollUtil.isEmpty(groups)) {
return "";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || !StringUtils.hasText(descriptor.getField())) {
continue;
}
String column = mapOperatGroupColumn(descriptor.getField());
if (!StringUtils.hasText(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + dir);
}
if (orderItems.isEmpty()) {
return "";
}
return " ORDER BY " + String.join(", ", orderItems);
}
private boolean containsOperatYearFilter(DataSourceRequest.FilterDescriptor filter) {
if (filter == null) {
return false;
}
if ("yr".equalsIgnoreCase(filter.getField())) {
return true;
}
if (CollUtil.isEmpty(filter.getFilters())) {
return false;
}
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
if (containsOperatYearFilter(child)) {
return true;
}
}
return false;
}
private String buildAggregateSql(String aggregate, String column, String field) {
String upperField = field == null ? "" : field.toUpperCase();
return switch (aggregate.toLowerCase()) {
@ -987,10 +1839,12 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
}
return switch (field) {
case "id" -> "t.id";
case "sttp" -> "t.sttp";
case "sttpCode" -> "t.sttpCode";
case "sttpName" -> "t.sttpName";
case "stcd" -> "t.stcd";
case "stnm", "ennm" -> "t.stnm";
case "dtinEnv" -> "t.dtinEnv";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
case "hbrvcd" -> "t.hbrvcd";

View File

@ -72,6 +72,9 @@ public class FpFpssrlQueryVo {
@Schema(description = "游向")
private String direction;
@Schema(description = "游向中文")
private String directionName;
@Schema(description = "水温")
private String temperature;

View File

@ -199,8 +199,11 @@ public class FpVmsstbprptVo implements Serializable {
@Schema(description = "升鱼机集鱼槽水深")
private String syjwdp;
// @Schema(description = "设计过鱼规模")
// private Integer sjgycnt;
@Schema(description = "设计过鱼规模")
private Integer sjgycnt;
private String sjgycnt;
@Schema(description = "主要过鱼对象描述")
private String zygydxms;

View File

@ -337,7 +337,7 @@ public class FpBuildServiceImpl implements FpBuildService {
.append("fp.YDCSPD AS ydcspd, ")
.append("fp.YDCSCNT AS ydcscnt, ")
.append("fp.YDXXCCNT AS ydxxccnt, ")
.append("fp.V AS v, ")
.append("fp.FLOW AS flow, ")
.append("fp.FZRDMXZ AS fzrdmxz, ")
.append("fp.FZRTDSZ AS fzrtdsz, ")
.append("fp.FZRYXWDP AS fzryxwdp, ")
@ -858,7 +858,7 @@ public class FpBuildServiceImpl implements FpBuildService {
columnMap.put("ydcspd", "fp.YDCSPD");
columnMap.put("ydcscnt", "fp.YDCSCNT");
columnMap.put("ydxxccnt", "fp.YDXXCCNT");
columnMap.put("v", "fp.V");
columnMap.put("flow", "fp.flow");
columnMap.put("fzrdmxz", "fp.FZRDMXZ");
columnMap.put("fzrtdsz", "fp.FZRTDSZ");
columnMap.put("fzryxwdp", "fp.FZRYXWDP");

View File

@ -1635,6 +1635,7 @@ public class FpRunServiceImpl implements FpRunService {
selectMap.put("width", "t.width AS width");
selectMap.put("fishspeed", "t.fishspeed AS fishspeed");
selectMap.put("direction", "t.direction AS direction");
selectMap.put("directionName", "CASE t.direction WHEN '0' THEN '上行' WHEN '1' THEN '下行' WHEN '2' THEN '上行折返' WHEN '3' THEN '下行折返' END AS directionName");
selectMap.put("temperature", "t.temperature AS temperature");
selectMap.put("speed", "t.speed AS speed");
selectMap.put("channelno", "t.channelno AS channelno");

View File

@ -1738,7 +1738,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
columnMap.put("runState", "vp.RUN_STATE");
columnMap.put("runStateName", "CASE NVL(vp.RUN_STATE, -1) WHEN 1 THEN '运行' WHEN 0 THEN '未运行' ELSE NULL END");
columnMap.put("baseStepSort", "hb.ORDER_INDEX");
columnMap.put("rvcdStepSort", "hbrv.ORDER_INDEX");
// columnMap.put("rvcdStepSort", "hbrv.ORDER_INDEX");
columnMap.put("rstcdStepSort", "eng.ORDER_INDEX");
columnMap.put("siteStepSort", "vp.ORDER_INDEX");
return columnMap.get(field);

View File

@ -1179,27 +1179,34 @@ public class VdMonitorServiceImpl implements VdMonitorService {
private List<Object> normalizeValues(Object value) {
List<Object> values = new ArrayList<>();
appendNormalizedValues(values, value);
return values;
}
private void appendNormalizedValues(List<Object> values, Object value) {
if (value == null) {
return;
}
if (value instanceof List<?> list) {
for (Object item : list) {
if (item != null) {
values.add(item);
appendNormalizedValues(values, item);
}
}
return values;
return;
}
if (value instanceof Object[] array) {
for (Object item : array) {
if (item != null) {
values.add(item);
appendNormalizedValues(values, item);
}
return;
}
return values;
if (value instanceof String text) {
if (StrUtil.isNotBlank(text)) {
values.add(text);
}
return;
}
if (value != null) {
values.add(value);
}
return values;
}
private String mapVdTreeColumn(String field) {
if (StrUtil.isBlank(field)) {

View File

@ -51,9 +51,15 @@ public class StcdWarnStateVo {
@Schema(description = "基础排序")
private Integer baseStepSort;
@Schema(description = "流域排序")
private Integer rvcdStepSort;
@Schema(description = "电站排序")
private Integer rstcdStepSort;
@Schema(description = "站点排序")
private Integer siteStepSort;
@Schema(description = "数据接入类型")
private Integer dtinType;
}

View File

@ -325,7 +325,9 @@ public class WarnDataServiceImpl implements WarnDataService {
.append("r.rvcd AS rvcd, ")
.append("r.warnState AS warnState, ")
.append("r.baseStepSort AS baseStepSort, ")
.append("r.rvcdStepSort AS rvcdStepSort, ")
.append("r.rstcdStepSort AS rstcdStepSort, ")
.append("r.siteStepSort AS siteStepSort, ")
.append("r.dtinType AS dtinType ")
.append("FROM (")
.append(buildWarnStcdDetailSql(warnType))
@ -369,18 +371,16 @@ public class WarnDataServiceImpl implements WarnDataService {
String normalizedWarnStateExpr = "CASE " +
"WHEN eng.WARN_STATE = '0' OR eng.WARN_STATE IS NULL OR eng.WARN_STATE = '' THEN '00' " +
"ELSE eng.WARN_STATE END";
String nonEngWarnStateExpr = "CASE state.STD_SSTATE " +
"WHEN 2 THEN 0 " +
"WHEN 3 THEN 2 " +
"ELSE state.STD_SSTATE END";
String wqWarnStateExpr = "TO_NUMBER(NULLIF(wq.WARN_STATE, ''))";
String wtWarnStateExpr = "TO_NUMBER(NULLIF(wt.WARN_STATE, ''))";
List<String> parts = new ArrayList<>();
if ("QEC".equalsIgnoreCase(warnType)) {
parts.add(buildWarnStcdEngSql(normalizedWarnStateExpr, warnType));
} else {
parts.add(buildWarnStcdEngSql(normalizedWarnStateExpr, warnType));
parts.add(buildWarnStcdWqSql(nonEngWarnStateExpr));
parts.add(buildWarnStcdWtSql(nonEngWarnStateExpr));
parts.add(buildWarnStcdWqSql(wqWarnStateExpr));
parts.add(buildWarnStcdWtSql(wtWarnStateExpr));
}
return String.join(" UNION ALL ", parts);
}
@ -409,11 +409,14 @@ public class WarnDataServiceImpl implements WarnDataService {
.append("eng.HBRVCD AS rvcd, ")
.append(warnStateExpr).append(" AS warnState, ")
.append("hb.ORDER_INDEX AS baseStepSort, ")
.append("along.ORDER_INDEX AS rvcdStepSort, ")
.append("eng.ORDER_INDEX AS rstcdStepSort, ")
.append("eng.ORDER_INDEX AS siteStepSort, ")
.append("CAST(NULL AS NUMBER) AS dtinType ")
.append("FROM SD_ENGINFO_B_H eng ")
.append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = 'ENG' AND NVL(sttp.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ")
.append("WHERE NVL(eng.IS_DELETED, 0) = 0 ");
if ("QEC".equalsIgnoreCase(warnType)) {
sql.append("AND NVL(eng.BLDSTT_CODE, -1) = 2 ")
@ -439,12 +442,15 @@ public class WarnDataServiceImpl implements WarnDataService {
"eng.HBRVCD AS rvcd, " +
warnStateExpr + " AS warnState, " +
"hb.ORDER_INDEX AS baseStepSort, " +
"along.ORDER_INDEX AS rvcdStepSort, " +
"eng.ORDER_INDEX AS rstcdStepSort, " +
"siteAlong.SORT AS siteStepSort, " +
"wq.DTIN_TYPE AS dtinType " +
"FROM SD_WQ_B_H wq " +
"LEFT JOIN (" + buildWarnStcdLatestStateSql() + ") state ON state.STCD = wq.STCD AND state.STTP_CODE = wq.STTP " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONGDET_B siteAlong ON siteAlong.ALONG_ID = along.ID AND siteAlong.STCD = wq.STCD AND NVL(siteAlong.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wq.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " +
"WHERE NVL(wq.IS_DELETED, 0) = 0 " +
"AND NVL(wq.USFL, 0) = 1 " +
@ -465,30 +471,21 @@ public class WarnDataServiceImpl implements WarnDataService {
"eng.HBRVCD AS rvcd, " +
warnStateExpr + " AS warnState, " +
"hb.ORDER_INDEX AS baseStepSort, " +
"along.ORDER_INDEX AS rvcdStepSort, " +
"eng.ORDER_INDEX AS rstcdStepSort, " +
"siteAlong.SORT AS siteStepSort, " +
"wt.DTIN_TYPE AS dtinType " +
"FROM SD_WT_B_H wt " +
"LEFT JOIN (" + buildWarnStcdLatestStateSql() + ") state ON state.STCD = wt.STCD AND state.STTP_CODE = wt.STTP " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN MS_ALONGDET_B siteAlong ON siteAlong.ALONG_ID = along.ID AND siteAlong.STCD = wt.STCD AND NVL(siteAlong.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " +
"WHERE NVL(wt.IS_DELETED, 0) = 0 " +
"AND NVL(wt.USFL, 0) = 1 " +
"AND wt.STTP = 'WTRV' ";
}
private String buildWarnStcdLatestStateSql() {
return "SELECT s.STCD, s.STTP_CODE, s.STD_SSTATE " +
"FROM MS_STSTATE_T s " +
"INNER JOIN (" +
"SELECT STCD, MAX(YR) AS MAX_YR " +
"FROM MS_STSTATE_T " +
"WHERE NVL(IS_DELETED, 0) = 0 " +
"GROUP BY STCD" +
") mx ON mx.STCD = s.STCD AND mx.MAX_YR = s.YR " +
"WHERE NVL(s.IS_DELETED, 0) = 0";
}
private String buildWarnStcdFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
@ -595,6 +592,10 @@ public class WarnDataServiceImpl implements WarnDataService {
case "baseName" -> "r.baseName";
case "rvcd" -> "r.rvcd";
case "warnState" -> "r.warnState";
case "baseStepSort" -> "r.baseStepSort";
case "rvcdStepSort" -> "r.rvcdStepSort";
case "rstcdStepSort" -> "r.rstcdStepSort";
case "siteStepSort" -> "r.siteStepSort";
case "dtinType" -> "r.dtinType";
default -> null;
};

View File

@ -9,6 +9,7 @@ import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.service.*;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import io.swagger.v3.oas.annotations.Operation;
@ -17,6 +18,7 @@ import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@ -197,6 +199,25 @@ public class SdWTMonitorController {
return ResponseResult.successData(sdWtMonitorService.getMsstbprptList(dataSourceRequest));
}
@PostMapping("/msstbprpt/eng/GetKendoList")
@Operation(summary = "根据条件查询电站页水温基础站点列表")
public ResponseResult getMsstbprptEngList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(sdWtMonitorService.getMsstbprptEngList(dataSourceRequest));
}
@PostMapping("/wtrvAmend/dayAmend/GetKendoListCust")
@Operation(summary = "水温日数据统计修正结果数据")
public ResponseResult getWtrvAmendDayList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(sdWtMonitorService.getWtrvAmendDayList(dataSourceRequest));
}
@PostMapping("/wtrvAmend/dayAmend/saveAmendData")
@Operation(summary = "保存修正后的河道水温日数据")
public ResponseResult saveWtrvAmendData(@RequestBody List<WtrvAmendSaveVo> amendDataList) {
sdWtMonitorService.saveWtrvAmendData(amendDataList);
return ResponseResult.success();
}
@GetMapping("/msstbprpt/getStcdInfo")
@Operation(summary = "根据站码查询单条水温基础数据")
public ResponseResult getStcdInfo(@RequestParam String stcd) {

View File

@ -74,6 +74,15 @@ public class SdWtBaseInfoVO implements Serializable {
@Schema(description = "所属电站编码")
private String rstcd;
@Schema(description = "设备类型")
private Integer wtDeviceType;
@Schema(description = "接入类型")
private Integer dtinType;
@Schema(description = "监测方式")
private Integer mway;
@Schema(description = "所属测站编码")
private String stCode;

View File

@ -0,0 +1,38 @@
package com.yfd.platform.qgc_env.wt.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 WtrvAmendResultVo {
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date dt;
@Schema(description = "温度")
private BigDecimal wt;
@Schema(description = "站点名称")
private String stnm;
@Schema(description = "电站编码")
private String rstcd;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
}

View File

@ -0,0 +1,20 @@
package com.yfd.platform.qgc_env.wt.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Schema(description = "河道水温日修正保存入参")
public class WtrvAmendSaveVo {
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "日期,支持 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss")
private String dt;
@Schema(description = "修正后水温")
private BigDecimal wt;
}

View File

@ -10,7 +10,9 @@ import com.yfd.platform.qgc_env.wt.entity.vo.SdYearDetailVO;
import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo;
import java.util.List;
@ -22,6 +24,12 @@ public interface SdWtMonitorService {
DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult getMsstbprptEngList(DataSourceRequest dataSourceRequest);
DataSourceResult<WtrvAmendResultVo> getWtrvAmendDayList(DataSourceRequest dataSourceRequest);
void saveWtrvAmendData(List<WtrvAmendSaveVo> amendDataList);
WtBaseInfoVo getStcdInfo(String stcd);
DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest);

View File

@ -1,5 +1,6 @@
package com.yfd.platform.qgc_env.wt.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.*;
@ -16,13 +17,17 @@ import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtFishVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtTreeStcdVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo;
import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper;
import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
@ -46,6 +51,9 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
@Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Resource
private JdbcTemplate jdbcTemplate;
@Override
public DataSourceResult getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -856,14 +864,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(selectSql).append(" ")
.append("FROM SD_WT_B_H wt ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTRV_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) rvRecent ON rvRecent.STCD = wt.STCD ")
.append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTVT_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) vtRecent ON vtRecent.STCD = wt.STCD ")
.append("WHERE NVL(wt.IS_DELETED, 0) = 0 AND NVL(wt.DTIN_TYPE, 0) = 0 ");
.append(buildWtMsstbprptFromSql());
Map<String, Object> paramMap = new HashMap<>();
appendWtMsstbprptFilters(sql, paramMap, dataSourceRequest == null ? null : dataSourceRequest.getFilter());
@ -880,6 +881,74 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
return result;
}
@Override
public DataSourceResult getMsstbprptEngList(DataSourceRequest dataSourceRequest) {
List<String> selectFields = dataSourceRequest == null ? null : dataSourceRequest.getSelect();
String selectSql = buildWtMsstbprptEngSelectSql(selectFields);
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(selectSql).append(" ")
.append(buildWtMsstbprptFromSql());
Map<String, Object> paramMap = new HashMap<>();
appendWtMsstbprptFilters(sql, paramMap, dataSourceRequest == null ? null : dataSourceRequest.getFilter());
sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
Page<?> page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<SdWtBaseInfoVO> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdWtBaseInfoVO.class);
DataSourceResult<SdWtBaseInfoVO> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<WtrvAmendResultVo> getWtrvAmendDayList(DataSourceRequest dataSourceRequest) {
List<String> selectFields = dataSourceRequest == null ? null : dataSourceRequest.getSelect();
String selectSql = buildWtrvAmendSelectSql(selectFields);
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(selectSql).append(" FROM (")
.append(buildWtrvAmendMergedSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildWtrvAmendFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql);
}
sql.append(buildWtrvAmendOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
Page<?> page = loadOptions == null ? null
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<WtrvAmendResultVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page,
sql.toString(), paramMap, WtrvAmendResultVo.class);
DataSourceResult<WtrvAmendResultVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveWtrvAmendData(List<WtrvAmendSaveVo> amendDataList) {
if (amendDataList == null || amendDataList.isEmpty()) {
throw new BizException("数据不能为空");
}
int batchSize = 500;
for (int i = 0; i < amendDataList.size(); i += batchSize) {
List<WtrvAmendSaveVo> subList = amendDataList.subList(i, Math.min(i + batchSize, amendDataList.size()));
mergeWtrvAmendDataBatch(subList, i);
}
}
@Override
public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) {
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
@ -1802,6 +1871,300 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
return " ORDER BY " + String.join(", ", orderColumns);
}
private String buildWtrvAmendMergedSql() {
return "SELECT " +
"dayData.STCD AS stcd, " +
"dayData.DT AS dt, " +
"NVL(amendData.WT, dayData.WT) AS wt, " +
"wt.STNM AS stnm, " +
"wt.RSTCD AS rstcd, " +
"eng.ENNM AS ennm, " +
"eng.BASE_ID AS baseId, " +
"hb.BASENAME AS baseName " +
"FROM SD_WTRVDAY_S dayData " +
"INNER JOIN SD_WT_B_H wt ON dayData.STCD = wt.STCD " +
" AND wt.STTP = 'WTRV' " +
" AND NVL(wt.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_WTRVAMEND_S amendData ON amendData.STCD = dayData.STCD " +
" AND amendData.DT = dayData.DT " +
" AND NVL(amendData.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD " +
" AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID " +
" AND NVL(hb.IS_DELETED, 0) = 0 " +
"WHERE NVL(dayData.IS_DELETED, 0) = 0 " +
"UNION ALL " +
"SELECT " +
"amendData.STCD AS stcd, " +
"amendData.DT AS dt, " +
"amendData.WT AS wt, " +
"wt.STNM AS stnm, " +
"wt.RSTCD AS rstcd, " +
"eng.ENNM AS ennm, " +
"eng.BASE_ID AS baseId, " +
"hb.BASENAME AS baseName " +
"FROM SD_WTRVAMEND_S amendData " +
"INNER JOIN SD_WT_B_H wt ON amendData.STCD = wt.STCD " +
" AND wt.STTP = 'WTRV' " +
" AND NVL(wt.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD " +
" AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID " +
" AND NVL(hb.IS_DELETED, 0) = 0 " +
"WHERE NVL(amendData.IS_DELETED, 0) = 0 " +
"AND NOT EXISTS ( " +
" SELECT 1 FROM SD_WTRVDAY_S dayData " +
" WHERE dayData.STCD = amendData.STCD " +
" AND dayData.DT = amendData.DT " +
" AND NVL(dayData.IS_DELETED, 0) = 0 " +
")";
}
private String buildWtrvAmendSelectSql(List<String> selectFields) {
Map<String, String> columnMap = buildWtrvAmendColumnMap();
List<String> actualColumns = new ArrayList<>();
if (selectFields != null && !selectFields.isEmpty()) {
for (String field : selectFields) {
String column = columnMap.get(field);
if (StrUtil.isNotBlank(column)) {
actualColumns.add(column);
}
}
}
if (actualColumns.isEmpty()) {
actualColumns.addAll(columnMap.values());
}
return String.join(", ", actualColumns);
}
private Map<String, String> buildWtrvAmendColumnMap() {
Map<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("stcd", "t.stcd AS stcd");
columnMap.put("dt", "t.dt AS dt");
columnMap.put("wt", "t.wt AS wt");
columnMap.put("stnm", "t.stnm AS stnm");
columnMap.put("rstcd", "t.rstcd AS rstcd");
columnMap.put("ennm", "t.ennm AS ennm");
columnMap.put("baseId", "t.baseId AS baseId");
columnMap.put("baseName", "t.baseName AS baseName");
return columnMap;
}
private String buildWtrvAmendFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (filter.getFilters() != null && !filter.getFilters().isEmpty()) {
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String condition = buildWtrvAmendFilterCondition(child, paramMap, indexHolder);
if (StrUtil.isNotBlank(condition)) {
conditions.add("(" + condition + ")");
}
}
if (conditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, conditions);
}
return buildWtrvAmendLeafCondition(filter, paramMap, indexHolder);
}
private String buildWtrvAmendLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapWtrvAmendColumn(filter == null ? null : filter.getField());
if (StrUtil.isBlank(column) || StrUtil.isBlank(filter.getOperator())) {
return "";
}
String operator = filter.getOperator().toLowerCase();
Object rawValue = filter.getValue();
if ("isnull".equals(operator)) {
return column + " IS NULL";
}
if ("isnotnull".equals(operator)) {
return column + " IS NOT NULL";
}
if ("isempty".equals(operator)) {
return "(" + column + " IS NULL OR " + column + " = '')";
}
if ("isnotempty".equals(operator)) {
return "(" + column + " IS NOT NULL AND " + column + " <> '')";
}
if (rawValue == null) {
return "";
}
String paramKey = "wtrvAmendP" + indexHolder[0]++;
boolean dateField = isWtrvAmendDateField(filter);
if ("in".equals(operator) || "ni".equals(operator)) {
List<?> values = normalizeToList(rawValue);
if (values.isEmpty()) {
return "";
}
List<String> placeholders = new ArrayList<>();
int itemIndex = 0;
for (Object value : values) {
String itemKey = paramKey + "_" + itemIndex++;
paramMap.put(itemKey, String.valueOf(value).trim());
placeholders.add(buildWtrvAmendValueExpr(itemKey, dateField, value));
}
return column + ("ni".equals(operator) ? " NOT IN (" : " IN (") + String.join(", ", placeholders) + ")";
}
String text = String.valueOf(rawValue).trim();
paramMap.put(paramKey, text);
String valueExpr = buildWtrvAmendValueExpr(paramKey, dateField, rawValue);
return switch (operator) {
case "eq" -> column + " = " + valueExpr;
case "neq" -> column + " <> " + valueExpr;
case "gt" -> column + " > " + valueExpr;
case "gte" -> column + " >= " + valueExpr;
case "lt" -> column + " < " + valueExpr;
case "lte" -> column + " <= " + valueExpr;
case "contains" -> {
paramMap.put(paramKey, "%" + text + "%");
yield column + " LIKE #{map." + paramKey + "}";
}
case "doesnotcontain" -> {
paramMap.put(paramKey, "%" + text + "%");
yield column + " NOT LIKE #{map." + paramKey + "}";
}
case "startswith" -> {
paramMap.put(paramKey, text + "%");
yield column + " LIKE #{map." + paramKey + "}";
}
case "endswith" -> {
paramMap.put(paramKey, "%" + text);
yield column + " LIKE #{map." + paramKey + "}";
}
default -> "";
};
}
private String mapWtrvAmendColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "stcd" -> "t.stcd";
case "dt" -> "t.dt";
case "wt" -> "t.wt";
case "stnm" -> "t.stnm";
case "rstcd" -> "t.rstcd";
case "ennm" -> "t.ennm";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
default -> null;
};
}
private String buildWtrvAmendOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
List<String> orderColumns = new ArrayList<>();
if (sortList != null) {
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
String column = mapWtrvAmendColumn(sortDescriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
orderColumns.add(column + " " + dir + ("t.dt".equals(column) || "t.wt".equals(column) ? " NULLS LAST" : ""));
}
}
if (orderColumns.isEmpty()) {
return " ORDER BY t.dt DESC, t.stcd ASC";
}
return " ORDER BY " + String.join(", ", orderColumns);
}
private boolean isWtrvAmendDateField(DataSourceRequest.FilterDescriptor filter) {
if (filter == null || StrUtil.isBlank(filter.getField())) {
return false;
}
if ("dt".equalsIgnoreCase(filter.getField())) {
return true;
}
return "date".equalsIgnoreCase(filter.getDataType());
}
private String buildWtrvAmendValueExpr(String paramKey, boolean dateField, Object value) {
if (!dateField || value == null) {
return "#{map." + paramKey + "}";
}
String text = String.valueOf(value).trim();
if (text.length() <= 10) {
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')";
}
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')";
}
private List<?> normalizeToList(Object value) {
if (value == null) {
return Collections.emptyList();
}
if (value instanceof List<?> list) {
return list.stream().filter(Objects::nonNull).collect(Collectors.toList());
}
return Collections.singletonList(value);
}
private void mergeWtrvAmendDataBatch(List<WtrvAmendSaveVo> amendDataList, int startIndex) {
StringBuilder sql = new StringBuilder("MERGE INTO SD_WTRVAMEND_S target USING (");
List<Object> params = new ArrayList<>();
for (int i = 0; i < amendDataList.size(); i++) {
WtrvAmendSaveVo item = amendDataList.get(i);
int rowNo = startIndex + i + 1;
String stcd = item == null ? null : StrUtil.trimToNull(item.getStcd());
if (StrUtil.isBlank(stcd)) {
throw new BizException("" + rowNo + "条数据站点编码不能为空");
}
String dt = normalizeWtrvAmendDate(item.getDt());
if (StrUtil.isBlank(dt)) {
throw new BizException("" + rowNo + "条数据日期格式不正确");
}
if (i > 0) {
sql.append(" UNION ALL ");
}
sql.append("SELECT ? AS STCD, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AS DT, ? AS WT FROM DUAL");
params.add(stcd);
params.add(dt);
params.add(item.getWt());
}
sql.append(") source ON (target.STCD = source.STCD AND target.DT = source.DT) ")
.append("WHEN MATCHED THEN UPDATE SET ")
.append("target.WT = source.WT, ")
.append("target.IS_DELETED = 0, ")
.append("target.DELETE_USER = NULL, ")
.append("target.DELETE_TIME = NULL, ")
.append("target.MODIFY_TIME = SYSDATE ")
.append("WHEN NOT MATCHED THEN INSERT (ID, STCD, DT, WT, RECORD_TIME, IS_DELETED) ")
.append("VALUES (SYS_GUID(), source.STCD, source.DT, source.WT, SYSDATE, 0)");
jdbcTemplate.update(sql.toString(), params.toArray());
}
private String normalizeWtrvAmendDate(String value) {
if (StrUtil.isBlank(value)) {
return null;
}
String text = value.trim().replace('T', ' ');
try {
if (text.length() <= 10) {
return DateUtil.formatDateTime(DateUtil.parse(text.substring(0, 10), "yyyy-MM-dd").toJdkDate());
}
if (text.length() >= 19) {
return DateUtil.formatDateTime(DateUtil.parse(text.substring(0, 19), "yyyy-MM-dd HH:mm:ss").toJdkDate());
}
return DateUtil.formatDateTime(DateUtil.parse(text, "yyyy-MM-dd HH:mm").toJdkDate());
} catch (Exception ex) {
try {
return DateUtil.formatDateTime(DateUtil.parse(value.trim()).toJdkDate());
} catch (Exception ignore) {
return null;
}
}
}
private String buildSttpInfoFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
@ -1980,6 +2343,16 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
orderColumns.add("NVL(dtin, -1) " + dir + " NULLS LAST");
} else if ("dtinName".equals(field)) {
orderColumns.add("CASE WHEN NVL(dtin, 0) = 1 THEN '已接入' ELSE '未接入' END " + dir + " NULLS LAST");
} else if ("wtDeviceType".equals(field)) {
orderColumns.add("NVL(wtDeviceType, -1) " + dir + " NULLS LAST");
} else if ("dtinType".equals(field)) {
orderColumns.add("NVL(dtinType, -1) " + dir + " NULLS LAST");
} else if ("mway".equals(field)) {
orderColumns.add("NVL(mway, -1) " + dir + " NULLS LAST");
} else if ("lgtd".equals(field)) {
orderColumns.add("lgtd " + dir + " NULLS LAST");
} else if ("lttd".equals(field)) {
orderColumns.add("lttd " + dir + " NULLS LAST");
}
}
}
@ -1991,6 +2364,54 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
}
private String buildWtMsstbprptSelectSql(List<String> selectFields) {
Map<String, String> columnMap = buildWtMsstbprptColumnMap();
List<String> actualColumns = new ArrayList<>();
if (selectFields != null && !selectFields.isEmpty()) {
for (String field : selectFields) {
String column = columnMap.get(field);
if (StrUtil.isNotBlank(column)) {
actualColumns.add(column);
}
}
}
if (actualColumns.isEmpty()) {
actualColumns.addAll(columnMap.values());
}
return String.join(", ", actualColumns);
}
private String buildWtMsstbprptEngSelectSql(List<String> selectFields) {
Map<String, String> columnMap = buildWtMsstbprptColumnMap();
List<String> actualColumns = new ArrayList<>();
if (selectFields == null || selectFields.isEmpty()) {
actualColumns.add(columnMap.get("stcd"));
actualColumns.add(columnMap.get("stnm"));
actualColumns.add(columnMap.get("wtDeviceType"));
actualColumns.add(columnMap.get("dtinType"));
actualColumns.add(columnMap.get("mway"));
actualColumns.add(columnMap.get("lgtd"));
actualColumns.add(columnMap.get("lttd"));
actualColumns.add(columnMap.get("baseId"));
actualColumns.add(columnMap.get("baseName"));
} else {
for (String field : selectFields) {
String column = columnMap.get(field);
if (StrUtil.isNotBlank(column)) {
actualColumns.add(column);
}
}
}
ensureWtMsstbprptColumn(actualColumns, columnMap, "stcd");
ensureWtMsstbprptColumn(actualColumns, columnMap, "stnm");
ensureWtMsstbprptColumn(actualColumns, columnMap, "lgtd");
ensureWtMsstbprptColumn(actualColumns, columnMap, "lttd");
ensureWtMsstbprptColumn(actualColumns, columnMap, "baseId");
ensureWtMsstbprptColumn(actualColumns, columnMap, "baseName");
return String.join(", ", actualColumns);
}
private Map<String, String> buildWtMsstbprptColumnMap() {
Map<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("baseName", "hb.BASENAME AS baseName");
columnMap.put("baseId", "hb.BASEID AS baseId");
@ -2009,31 +2430,43 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
columnMap.put("stcd", "wt.STCD AS stcd");
columnMap.put("fhstcd", "wt.FHSTCD AS fhstcd");
columnMap.put("rstcd", "wt.RSTCD AS rstcd");
// columnMap.put("bldsttCcodeName", "CASE WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName");
columnMap.put("bldsttCcodeName",
"CASE WHEN wt.BLDSTT_CODE = 0 THEN '未建/规划' " +
"WHEN wt.BLDSTT_CODE = 1 THEN '在建' " +
"WHEN wt.BLDSTT_CODE = 2 THEN '已建' " +
"ELSE '未知' END");
"ELSE '未知' END AS bldsttCcodeName");
columnMap.put("bldsttCcode", "wt.BLDSTT_CODE AS bldsttCcode");
columnMap.put("stCode", "NULL AS stCode");
columnMap.put("stName", "NULL AS stName");
columnMap.put("dvtp", "eng.DVTP AS dvtp");
columnMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd");
columnMap.put("lgtd", "wt.LGTD AS lgtd");
columnMap.put("lttd", "wt.LTTD AS lttd");
columnMap.put("wtDeviceType", "wt.WT_DEVICE_TYPE AS wtDeviceType");
columnMap.put("dtinType", "wt.DTIN_TYPE AS dtinType");
columnMap.put("mway", "wt.MWAY AS mway");
return columnMap;
}
List<String> actualColumns = new ArrayList<>();
if (selectFields != null && !selectFields.isEmpty()) {
for (String field : selectFields) {
private void ensureWtMsstbprptColumn(List<String> actualColumns, Map<String, String> columnMap, String field) {
String column = columnMap.get(field);
if (StrUtil.isNotBlank(column)) {
if (StrUtil.isBlank(column)) {
return;
}
if (!actualColumns.contains(column)) {
actualColumns.add(column);
}
}
}
if (actualColumns.isEmpty()) {
actualColumns.addAll(columnMap.values());
}
return String.join(", ", actualColumns);
private String buildWtMsstbprptFromSql() {
return "FROM SD_WT_B_H wt " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 " +
"LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTRV_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) rvRecent ON rvRecent.STCD = wt.STCD " +
"LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTVT_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) vtRecent ON vtRecent.STCD = wt.STCD " +
"WHERE NVL(wt.IS_DELETED, 0) = 0 AND NVL(wt.DTIN_TYPE, 0) = 0 ";
}
private void appendWtMsstbprptFilters(StringBuilder sql,
@ -2061,6 +2494,8 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.RSTCD", operator, value);
} else if ("baseId".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "eng.BASE_ID", operator, value);
} else if ("sttpFullPath".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "sttp.FULL_PATH", operator, value);
} else if ("mway".equals(field)) {
appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.MWAY", operator, value);
} else if ("dtin".equals(field)) {

View File

@ -0,0 +1,95 @@
package com.yfd.platform.qgc_env.wte.controller;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_env.wte.service.WeFishService;
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;
@RestController
@RequestMapping("/wte")
@Tag(name = "生态调查模块")
@Validated
public class WeFishController {
@Resource
private WeFishService weFishService;
@PostMapping("/we/fisht/qgc/GetKendoListCust")
@Operation(summary = "全过程沿程鱼类变化情况")
public ResponseResult getQgcWeFishTKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishTKendoListCust(dataSourceRequest));
}
@PostMapping("/we/fishList/GetKendoListCust")
@Operation(summary = "环保部-水生生态调查-水生生态一级页面列表")
public ResponseResult getQgcWeFishList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishList(dataSourceRequest));
}
@PostMapping("/msstbprpt/GetKendoList")
@Operation(summary = "水生生态AI监测装置基础信息查询")
public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getMsstbprptList(dataSourceRequest));
}
@PostMapping("/vmsstbprpt/GetKendoList")
@Operation(summary = "水生生态站点基础统计查询")
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getVmsstbprptList(dataSourceRequest));
}
@PostMapping("/wva/year/GetKendoListCust")
@Operation(summary = "野生动物监测默认有数据的年份和月份")
public ResponseResult getWvaDefaultYearList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getWvaDefaultYearList(dataSourceRequest));
}
@PostMapping("/wva/GetKendoListCust")
@Operation(summary = "野生动物监测情况")
public ResponseResult getWvaList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getWvaList(dataSourceRequest));
}
@PostMapping("/we/fisht/year/qgc/GetKendoListCust")
@Operation(summary = "全过程沿程鱼类变化情况有数据的流域和年份")
public ResponseResult getQgcFishStaticsYearList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcFishStaticsYearList(dataSourceRequest));
}
@PostMapping("/we/fisht/statics/GetKendoListCust")
@Operation(summary = "水生生态调查概况")
public ResponseResult getQgcWeFishStatics(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishStatics(dataSourceRequest));
}
@PostMapping("/we/fisht/stat/qgc/GetKendoListCust")
@Operation(summary = "环保部-沿程鱼类变化情况柱状图")
public ResponseResult getQgcWeFishStatList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishStatList(dataSourceRequest));
}
@PostMapping("/we/fishList/stat/qgc/GetKendoListCust")
@Operation(summary = "环保部-水生生态调查-水生生态面板")
public ResponseResult getQgcFishListStat(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcFishListStat(dataSourceRequest));
}
@PostMapping("/we/fishPoint/qgc/GetKendoListCust")
@Operation(summary = "环保部-水生生态调查-鱼类分布锚点")
public ResponseResult getQgcWeFishPoint(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishPoint(dataSourceRequest));
}
@PostMapping("/te/tet/spec/GetKendoListCust")
@Operation(summary = "重点陆生动物二级页面")
public ResponseResult getTeSpecialAnimalList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getTeSpecialAnimalList(dataSourceRequest));
}
}

View File

@ -0,0 +1,50 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Schema(description = "环保部-水生生态调查-水生生态一级页面列表")
public class WeFishListQgcVo {
@Schema(description = "鱼类编码")
private String id;
@Schema(description = "鱼类名称")
private String name;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "河流编码")
private String rvcd;
@Schema(description = "河流名称")
private String rvcdName;
@Schema(description = "流域编码")
private String hbrvcd;
@Schema(description = "流域名称")
private String hbrvcdName;
@Schema(description = "电站编码")
private String rstcd;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "时间")
private String tm;
@Schema(description = "年份")
private Integer yr;
@Schema(description = "鱼类数量")
private Long fcnt;
}

View File

@ -0,0 +1,52 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@Accessors(chain = true)
@Schema(description = "环保部-水生生态调查-水生生态面板")
public class WeFishListStatQgcVo {
@Schema(description = "鱼类编码")
private String id;
@Schema(description = "鱼类名称")
private String name;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "河流编码")
private String rvcd;
@Schema(description = "河流名称")
private String rvcdName;
@Schema(description = "流域编码")
private String hbrvcd;
@Schema(description = "流域名称")
private String hbrvcdName;
@Schema(description = "电站编码")
private String rstcd;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "时间")
private Date tm;
@Schema(description = "年份")
private Integer yr;
@Schema(description = "鱼类数量")
private Long fcnt;
}

View File

@ -0,0 +1,64 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@Accessors(chain = true)
@Schema(description = "环保部-水生生态调查-鱼类分布锚点")
public class WeFishPointQgcVo {
@Schema(description = "站点类型")
private String sttp;
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "经度")
private BigDecimal lgtd;
@Schema(description = "纬度")
private BigDecimal lttd;
@Schema(description = "高程")
private BigDecimal dtmel;
@Schema(description = "描点状态")
private String anchoPointState;
@Schema(description = "锚点类型")
private String sttpMap;
@Schema(description = "弹框站点名称")
private String titleName;
@Schema(description = "地图避让")
private Integer distance;
@Schema(description = "流域编码")
private String rvcd;
@Schema(description = "行政编码")
private String addvcd;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "关联电站编码")
private String rstcds;
@Schema(description = "设施类型")
private String sttpCode;
@Schema(description = "断面名称")
private String stnm;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "调查鱼类列表")
private String ftp;
}

View File

@ -0,0 +1,26 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Map;
@Data
@Schema(description = "全过程沿程鱼类变化情况柱状图")
public class WeFishStatQgcVo {
@Schema(description = "电站编码")
private String stcd;
@Schema(description = "电站名称")
private String stnm;
@Schema(description = "鱼类类型总数")
private Long total;
@Schema(description = "鱼类类型明细key 为鱼类类型value 为鱼种类数量")
private Map<String, Long> detail;
@Schema(description = "排序")
private Integer sort;
}

View File

@ -0,0 +1,134 @@
package com.yfd.platform.qgc_env.wte.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 WeFishTQgcVo {
@Schema(description = "断面编码")
private String stcd;
@Schema(description = "断面名称")
private String stnm;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "流域编码")
private String rvcd;
@Schema(description = "流域名称")
private String rvcdName;
@Schema(description = "行政区编码")
private String addvcd;
@Schema(description = "行政区名称")
private String addvcdName;
@Schema(description = "河段编码")
private String hbrvcd;
@Schema(description = "河段名称")
private String hbrvcdName;
@Schema(description = "调查批次")
private String dcpc;
@Schema(description = "调查时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date tm;
@Schema(description = "调查报告")
private String werFid;
@Schema(description = "调查主表ID")
private String werId;
@Schema(description = "渔获物种类编码")
private String ftp;
@Schema(description = "鱼类规格(cm)")
private String fsz;
@Schema(description = "渔获物数量(尾)")
private Long fcnt;
@Schema(description = "渔获物重量(kg)")
private BigDecimal fwgh;
@Schema(description = "性腺发育期")
private String st;
@Schema(description = "早期资源量和种类")
private String ps;
@Schema(description = "平均重量")
private BigDecimal avgFwgt;
@Schema(description = "平均体长")
private BigDecimal avgFsz;
@Schema(description = "附件ID")
private String fid;
@Schema(description = "现场影像ID")
private String fileId;
@Schema(description = "鱼类ID")
private String id;
@Schema(description = "渔获物种类")
private String name;
@Schema(description = "别名")
private String alias;
@Schema(description = "")
private String genus;
@Schema(description = "")
private String family;
@Schema(description = "")
private String species;
@Schema(description = "鱼类分类")
private String type;
@Schema(description = "鱼类分类名称")
private String typeName;
@Schema(description = "稀有程度")
private String rare;
@Schema(description = "鱼类来源")
private String specOrigin;
@Schema(description = "鱼类来源名称")
private String specOriginName;
@Schema(description = "保护类型")
private String ptype;
@Schema(description = "保护类型名称")
private String ptypeName;
@Schema(description = "年份")
private String yr;
@Schema(description = "鱼类类型")
private Integer ty;
@Schema(description = "鱼类类型名称")
private String tyName;
}

View File

@ -0,0 +1,38 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Schema(description = "水生生态AI监测装置基础信息查询")
public class WeMsstbprptVo {
@Schema(description = "主键")
private String id;
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "所属电站编码")
private String rstcd;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "站点名称")
private String stnm;
@Schema(description = "站类编码")
private String sttpCode;
@Schema(description = "排序")
private Integer orderIndex;
@Schema(description = "经度")
private BigDecimal lgtd;
@Schema(description = "纬度")
private BigDecimal lttd;
}

View File

@ -0,0 +1,15 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "沿程鱼类有数据流域年份")
public class WeRvcdYearVo {
@Schema(description = "河段编码")
private String hbrvcd;
@Schema(description = "年份")
private String yr;
}

View File

@ -0,0 +1,23 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Schema(description = "水生生态调查概况")
public class WeStaticsVo {
@Schema(description = "调查批次数量")
private Long dcpcCount;
@Schema(description = "调查断面数量")
private Long stcdCount;
@Schema(description = "调查鱼类数量")
private Long ftpCount;
@Schema(description = "调查鱼类总数")
private Long fcntSum;
}

View File

@ -0,0 +1,32 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Schema(description = "重点陆生动物二级页面")
public class WeTeSpecialAnimalVo {
@Schema(description = "动物主键")
private String id;
@Schema(description = "动物名称")
private String name;
@Schema(description = "动物英文名称")
private String nameEn;
@Schema(description = "保护级别编码")
private String protectlvl;
@Schema(description = "保护级别名称")
private String protectlvlName;
@Schema(description = "LOGO")
private String logo;
@Schema(description = "介绍")
private String introduce;
}

View File

@ -0,0 +1,47 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Schema(description = "水生生态站点基础统计查询")
public class WeVmsstbprptVo {
@Schema(description = "主键")
private String id;
@Schema(description = "站类编码")
private String sttpCode;
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "站点名称")
private String stnm;
@Schema(description = "所属电站编码")
private String rstcd;
@Schema(description = "所属电站名称")
private String ennm;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "流域编码")
private String hbrvcd;
@Schema(description = "河流编码")
private String rvcd;
@Schema(description = "排序")
private Integer orderIndex;
@Schema(description = "经度")
private BigDecimal lgtd;
@Schema(description = "纬度")
private BigDecimal lttd;
}

View File

@ -0,0 +1,58 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@Schema(description = "野生动物监测情况")
public class WeWvaQgcVo {
@Schema(description = "主键")
private String id;
@Schema(description = "野生动物监测站编码")
private String stcd;
@Schema(description = "野生动物监测站名称")
private String stnm;
@Schema(description = "站类编码")
private String sttpCode;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "时间")
private Date tm;
@Schema(description = "显示名称")
private String flnm;
@Schema(description = "图片路径")
private String imgPath;
@Schema(description = "视频路径")
private String flpth;
@Schema(description = "附件ID")
private String fid;
@Schema(description = "备注")
private String description;
@Schema(description = "所属电站编码")
private String rstcd;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "流域编码")
private String hbrvcd;
@Schema(description = "河流编码")
private String rvcd;
@Schema(description = "排序")
private Integer orderIndex;
}

View File

@ -0,0 +1,12 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "野生动物监测默认有数据的年月")
public class WeWvaYearQgcVo {
@Schema(description = "年月格式yyyy-MM")
private String ym;
}

View File

@ -0,0 +1,45 @@
package com.yfd.platform.qgc_env.wte.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeMsstbprptVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishTQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeStaticsVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeTeSpecialAnimalVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeVmsstbprptVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeWvaQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeWvaYearQgcVo;
import java.util.List;
import java.util.Map;
public interface WeFishService {
DataSourceResult<WeFishTQgcVo> getQgcWeFishTKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishListQgcVo> getQgcWeFishList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeWvaQgcVo> getWvaList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeWvaYearQgcVo> getWvaDefaultYearList(DataSourceRequest dataSourceRequest);
DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeStaticsVo> getQgcWeFishStatics(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishListStatQgcVo> getQgcFishListStat(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishPointQgcVo> getQgcWeFishPoint(DataSourceRequest dataSourceRequest);
DataSourceResult<WeTeSpecialAnimalVo> getTeSpecialAnimalList(DataSourceRequest dataSourceRequest);
}

View File

@ -68,7 +68,7 @@ public class LoginController {
@PostMapping("/login")
@Operation(summary = "登录用户")
@ResponseBody
public ResponseResult login(SysUser user) throws Exception {
public ResponseResult login(SysUser user, @RequestHeader(value = "Tenant_id", required = false) String tenantId) throws Exception {
// 密码解密
String password = RsaUtils.decryptByPrivateKey(privateKey,
user.getPassword());
@ -100,6 +100,10 @@ public class LoginController {
Integer status = loginUser.getUser().getStatus();
String regStatus = loginUser.getUser().getRegStatus();
if (StrUtil.isNotBlank(tenantId)&&!tenantId.equals(loginUser.getUser().getTenantId())) {
return ResponseResult.error("账号不存在或密码错误");
}
if (StrUtil.isNotBlank(regStatus)&&"REJECTED".equals(regStatus)) {
return ResponseResult.error("账号审核未通过");
}

View File

@ -76,7 +76,7 @@
ON sud.ORG_ID = rr.ROOT_RVCD
JOIN SD_ENGINFO_B_H e
ON e.REACHCD = rr.DESC_RVCD
AND e.USFL = 1
-- AND e.USFL = 1
JOIN river_display r
ON e.REACHCD = r.RVCD
WHERE su.STATUS = 1
@ -98,7 +98,7 @@
AND sud.ORG_TYPE = 'STATION'
JOIN SD_ENGINFO_B_H e
ON sud.ORG_ID = e.STCD
AND e.USFL = 1
-- AND e.USFL = 1
JOIN river_display r
ON e.REACHCD = r.RVCD
WHERE su.STATUS = 1