Merge branch 'dev-tw'
This commit is contained in:
commit
84708a3679
@ -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}"})
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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定位转换
|
||||
*/
|
||||
|
||||
@ -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()));
|
||||
}
|
||||
}
|
||||
@ -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("删除失败");
|
||||
}
|
||||
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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]...}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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> {
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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";
|
||||
|
||||
@ -72,6 +72,9 @@ public class FpFpssrlQueryVo {
|
||||
@Schema(description = "游向")
|
||||
private String direction;
|
||||
|
||||
@Schema(description = "游向中文")
|
||||
private String directionName;
|
||||
|
||||
@Schema(description = "水温")
|
||||
private String temperature;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -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("账号审核未通过");
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user