Merge branch 'dev-tw'
This commit is contained in:
commit
b03837f201
@ -64,12 +64,14 @@ public class SecurityConfig {
|
||||
// .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("/sms/**").permitAll()
|
||||
|
||||
@ -64,14 +64,14 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvWTApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.1 全过程-生态环保数据服务-水温监测")
|
||||
.group("3.1 全过程-生态环保数据服务-水温监测(wt)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.wt.controller")
|
||||
.build();
|
||||
}
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvWQApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.2 全过程-生态环保数据服务-水质监测")
|
||||
.group("3.2 全过程-生态环保数据服务-水质监测(wq)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.wq.controller")
|
||||
.build();
|
||||
}
|
||||
@ -79,7 +79,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFPApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.3 全过程-生态环保数据服务-过鱼设施")
|
||||
.group("3.3 全过程-生态环保数据服务-过鱼设施(fp)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fp.controller")
|
||||
.build();
|
||||
}
|
||||
@ -87,7 +87,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvVDApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.3.1 全过程-生态环保数据服务-过鱼设施-过鱼监测(VD视频模块)")
|
||||
.group("3.3.1 全过程-生态环保数据服务-过鱼设施-过鱼监测(vd视频模块)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.vd.controller")
|
||||
.build();
|
||||
}
|
||||
@ -97,7 +97,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFHApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.4 全过程-生态环保数据服务-栖息地")
|
||||
.group("3.4 全过程-生态环保数据服务-栖息地(fh)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fh.controller")
|
||||
.build();
|
||||
}
|
||||
@ -105,7 +105,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvZQApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.4.1 全过程-生态环保数据服务-栖息地-水文模块")
|
||||
.group("3.4.1 全过程-生态环保数据服务-栖息地-水文模块(zq)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.zq.controller")
|
||||
.build();
|
||||
}
|
||||
@ -114,7 +114,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvVapApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.5 全过程-生态环保数据服务-珍稀动植物")
|
||||
.group("3.5 全过程-生态环保数据服务-珍稀动植物(vap)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.vap.controller")
|
||||
.build();
|
||||
}
|
||||
@ -122,7 +122,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFprApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.6 全过程-生态环保数据服务-鱼类调查")
|
||||
.group("3.6 全过程-生态环保数据服务-鱼类调查(fpr)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fpr.controller")
|
||||
.build();
|
||||
}
|
||||
@ -130,11 +130,21 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFbApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.7 全过程-生态环保数据服务-增殖放流")
|
||||
.group("3.7 全过程-生态环保数据服务-增殖放流(fb)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fb.controller")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvWarnApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.8 全过程-生态环保数据服务-智能告警(warn)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.warn.controller")
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -150,7 +160,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEngEqApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("4.1. 全过程-常规水电数据服务-生态流量")
|
||||
.group("4.1. 全过程-常规水电数据服务-生态流量(eq)")
|
||||
.packagesToScan("com.yfd.platform.qgc_eng.eq.controller")
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import com.yfd.platform.annotation.Log;
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
|
||||
import com.yfd.platform.qgc_base.domain.SdEngInfoBHOperateRequest;
|
||||
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest;
|
||||
import com.yfd.platform.qgc_base.service.ISdEngInfoBHService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -91,16 +92,16 @@ public class SdEngInfoBHController {
|
||||
@Log(module = "电站管理", value = "新增电站")
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增电站")
|
||||
public ResponseResult add(@RequestBody SdEngInfoBH engInfo) {
|
||||
boolean result = engInfoBHService.addEngInfo(engInfo);
|
||||
public ResponseResult add(@RequestBody SdEngInfoBHOperateRequest request) {
|
||||
boolean result = engInfoBHService.addEngInfo(request.getEngInfo(), request.getSource());
|
||||
return result ? ResponseResult.success("新增成功") : ResponseResult.error("新增失败");
|
||||
}
|
||||
|
||||
@Log(module = "电站管理", value = "修改电站")
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改电站")
|
||||
public ResponseResult update(@RequestBody SdEngInfoBH engInfo) {
|
||||
boolean result = engInfoBHService.updateEngInfo(engInfo);
|
||||
public ResponseResult update(@RequestBody SdEngInfoBHOperateRequest request) {
|
||||
boolean result = engInfoBHService.updateEngInfo(request.getEngInfo(), request.getSource());
|
||||
return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败");
|
||||
}
|
||||
|
||||
@ -111,4 +112,5 @@ public class SdEngInfoBHController {
|
||||
boolean result = engInfoBHService.deleteEngInfo(stcd);
|
||||
return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -27,6 +27,12 @@ public class SdEngMonitorController {
|
||||
return ResponseResult.successData(engInfoBHService.getStInfoByStcd(stcd));
|
||||
}
|
||||
|
||||
@GetMapping("/msstbprpt/getStcdInfo")
|
||||
@Operation(summary = "根据站码查询电站详情兼容结构")
|
||||
public ResponseResult getStcdInfo(@RequestParam String stcd) {
|
||||
return ResponseResult.successData(engInfoBHService.getStcdInfo(stcd));
|
||||
}
|
||||
|
||||
@PostMapping("/eiaapproval/GetKendoList")
|
||||
@Operation(summary = "查询生态环保批复文件列表")
|
||||
public ResponseResult getEiaapprovalKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
|
||||
@ -111,6 +111,15 @@ public class SdRvcdDicController {
|
||||
return ResponseResult.successData(rvcdDicService.selectForDropdown(rvnm, rvcd));
|
||||
}
|
||||
|
||||
@GetMapping("/selectRvcdDropdown")
|
||||
@Operation(summary = "流域下拉框列表查询")
|
||||
public ResponseResult selectRvcdDropdown(
|
||||
@RequestParam(required = false) String rvnm,
|
||||
@RequestParam(required = false) String baseId
|
||||
) {
|
||||
return ResponseResult.successData(rvcdDicService.selectRvcdDropdown(rvnm,baseId));
|
||||
}
|
||||
|
||||
@GetMapping("/regDropdown")
|
||||
@Operation(summary = "下拉框列表查询(注册)")
|
||||
public ResponseResult regDropdown(
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package com.yfd.platform.qgc_base.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("MS_OPERATION_LOG")
|
||||
public class MsOperationLog implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
|
||||
@TableField("OPERATOR")
|
||||
private String operator;
|
||||
|
||||
@TableField("OPERATE_TIME")
|
||||
private Date operateTime;
|
||||
|
||||
@TableField("SOURCE")
|
||||
private String source;
|
||||
|
||||
@TableField("REMARK")
|
||||
private String remark;
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package com.yfd.platform.qgc_base.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@TableName("MS_OPERATION_LOG_DETAIL")
|
||||
public class MsOperationLogDetail implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
|
||||
@TableField("MAIN_ID")
|
||||
private String mainId;
|
||||
|
||||
@TableField("FIELD_CODE")
|
||||
private String fieldCode;
|
||||
|
||||
@TableField("TABLE_NAME")
|
||||
private String tableName;
|
||||
|
||||
@TableField("FIELD_MEANING")
|
||||
private String fieldMeaning;
|
||||
|
||||
@TableField("STATION_CODE")
|
||||
private String stationCode;
|
||||
|
||||
@TableField("OLD_VALUE_CODE")
|
||||
private String oldValueCode;
|
||||
|
||||
@TableField("OLD_VALUE_NAME")
|
||||
private String oldValueName;
|
||||
|
||||
@TableField("NEW_VALUE_CODE")
|
||||
private String newValueCode;
|
||||
|
||||
@TableField("NEW_VALUE_NAME")
|
||||
private String newValueName;
|
||||
|
||||
@TableField("REMARK")
|
||||
private String remark;
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package com.yfd.platform.qgc_base.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SdEngInfoBHOperateRequest {
|
||||
|
||||
private SdEngInfoBH engInfo;
|
||||
|
||||
private String source;
|
||||
}
|
||||
@ -13,8 +13,10 @@ public class SdEngInfoBHRequest {
|
||||
private String baseId;
|
||||
private String hbrvcd;
|
||||
private String rvcd;
|
||||
private String reachcd;
|
||||
private List<String> basIds;
|
||||
private List<String> hbrvcds;
|
||||
private List<String> rvcds;
|
||||
// private List<String> rvcds;
|
||||
private String ennm;
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package com.yfd.platform.qgc_base.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "电站单站基础信息")
|
||||
public class EngStBaseInfoVo {
|
||||
|
||||
@Schema(description = "站点编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "站点名称")
|
||||
private String stnm;
|
||||
|
||||
@Schema(description = "站类编码")
|
||||
private String sttpCode;
|
||||
|
||||
@Schema(description = "站类名称")
|
||||
private String sttpName;
|
||||
|
||||
@Schema(description = "站类全路径")
|
||||
private String sttpFullPath;
|
||||
|
||||
@Schema(description = "站类层级")
|
||||
private Integer sttpTreeLevel;
|
||||
|
||||
@Schema(description = "关联站点编码")
|
||||
private String stCode;
|
||||
|
||||
@Schema(description = "关联站点名称")
|
||||
private String stName;
|
||||
|
||||
@Schema(description = "所属基地编码")
|
||||
private String baseId;
|
||||
|
||||
@Schema(description = "所属基地名称")
|
||||
private String baseName;
|
||||
|
||||
@Schema(description = "所属基地流域编码")
|
||||
private String hbrvcd;
|
||||
|
||||
@Schema(description = "所属基地流域名称")
|
||||
private String hbrvcdName;
|
||||
|
||||
@Schema(description = "所属流域编码")
|
||||
private String rvcd;
|
||||
|
||||
@Schema(description = "所属流域名称")
|
||||
private String rvcdName;
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.yfd.platform.qgc_base.domain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
@Schema(description = "电站详情返回")
|
||||
public class EngStInfoResultVo {
|
||||
|
||||
@Schema(description = "主信息兼容对象")
|
||||
private Map<String, Object> msStbprpT = new LinkedHashMap<>();
|
||||
|
||||
@Schema(description = "测值列表")
|
||||
private List<Object> stcdValVoList = new ArrayList<>();
|
||||
|
||||
@Schema(description = "关联列表")
|
||||
private List<Object> relList = new ArrayList<>();
|
||||
|
||||
@Schema(description = "站点基础信息")
|
||||
private EngStBaseInfoVo stBaseInfo;
|
||||
}
|
||||
@ -20,6 +20,7 @@ public class EngVmsstbprptVo implements Serializable {
|
||||
private String ennm;
|
||||
private String baseId;
|
||||
private String baseName;
|
||||
private String reachcdName;
|
||||
private String hbrvcd;
|
||||
private String hbrvcdName;
|
||||
private String rvcd;
|
||||
@ -33,6 +34,7 @@ public class EngVmsstbprptVo implements Serializable {
|
||||
private Date aiodt;
|
||||
private String bldstt;
|
||||
private Integer bldsttCcode;
|
||||
private String bldsttCcodeName;
|
||||
private Double nrupar;
|
||||
private Double dstcrvr;
|
||||
private Double avyrp;
|
||||
@ -79,6 +81,7 @@ public class EngVmsstbprptVo implements Serializable {
|
||||
private Double ddcp;
|
||||
private Double cpsc;
|
||||
private String rgcp;
|
||||
private String rgcpName;
|
||||
private Double dsflzmxq;
|
||||
private Double dsflzxyz;
|
||||
private Double ckflzmxq;
|
||||
@ -102,7 +105,9 @@ public class EngVmsstbprptVo implements Serializable {
|
||||
private Double unyge;
|
||||
private Double gap;
|
||||
private String dvtp;
|
||||
private String dvtpName;
|
||||
private Integer dtin;
|
||||
private String dtinName;
|
||||
private Integer baseStepSort;
|
||||
private Integer rvcdStepSort;
|
||||
private Integer rstcdStepSort;
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
package com.yfd.platform.qgc_base.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.yfd.platform.qgc_base.domain.MsOperationLogDetail;
|
||||
|
||||
public interface MsOperationLogDetailMapper extends BaseMapper<MsOperationLogDetail> {
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
package com.yfd.platform.qgc_base.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.yfd.platform.qgc_base.domain.MsOperationLog;
|
||||
|
||||
public interface MsOperationLogMapper extends BaseMapper<MsOperationLog> {
|
||||
}
|
||||
@ -32,4 +32,6 @@ public interface SdRvcdDicMapper extends BaseMapper<SdRvcdDic> {
|
||||
* 注册场景下拉框查询,仅返回能被电站表 RVCD 命中的流域
|
||||
*/
|
||||
List<SdRvcdDic> selectRegDropdownWithEng(@Param("rvnm") String rvnm, @Param("rvcd") String rvcd);
|
||||
|
||||
List<SdRvcdDic> selectRvcdDropdown(@Param("rvnm") String rvnm,@Param("baseId") String baseId);
|
||||
}
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
package com.yfd.platform.qgc_base.service;
|
||||
|
||||
import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
|
||||
|
||||
public interface IMsOperationLogService {
|
||||
|
||||
void recordEngAddLog(SdEngInfoBH engInfo, String source);
|
||||
|
||||
void recordEngUpdateLog(SdEngInfoBH before, SdEngInfoBH changeSet, String source);
|
||||
}
|
||||
@ -8,6 +8,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.EngStInfoResultVo;
|
||||
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
|
||||
|
||||
import java.util.List;
|
||||
@ -52,11 +53,15 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
|
||||
*/
|
||||
boolean addEngInfo(SdEngInfoBH engInfo);
|
||||
|
||||
boolean addEngInfo(SdEngInfoBH engInfo, String source);
|
||||
|
||||
/**
|
||||
* 修改电站
|
||||
*/
|
||||
boolean updateEngInfo(SdEngInfoBH engInfo);
|
||||
|
||||
boolean updateEngInfo(SdEngInfoBH engInfo, String source);
|
||||
|
||||
/**
|
||||
* 删除电站
|
||||
*/
|
||||
@ -66,6 +71,8 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
|
||||
|
||||
EngBaseInfoVo getStInfoByStcd(String stcd);
|
||||
|
||||
EngStInfoResultVo getStcdInfo(String stcd);
|
||||
|
||||
DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngVmsstbprptVo> getVmsstbprptKendoList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
@ -55,5 +55,7 @@ public interface ISdRvcdDicService extends IService<SdRvcdDic> {
|
||||
|
||||
List<SdRvcdDic> selectForDropdown(String rvnm, String rvcd);
|
||||
|
||||
List<SdRvcdDic> selectRvcdDropdown(String rvnm,String baseId);
|
||||
|
||||
List<SdRvcdDic> regDropdown(String rvnm, String rvcd);
|
||||
}
|
||||
|
||||
@ -0,0 +1,213 @@
|
||||
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;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.yfd.platform.qgc_base.domain.MsOperationLog;
|
||||
import com.yfd.platform.qgc_base.domain.MsOperationLogDetail;
|
||||
import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
|
||||
import com.yfd.platform.qgc_base.mapper.MsOperationLogDetailMapper;
|
||||
import com.yfd.platform.qgc_base.mapper.MsOperationLogMapper;
|
||||
import com.yfd.platform.qgc_base.service.IMsOperationLogService;
|
||||
import com.yfd.platform.utils.SecurityUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class MsOperationLogServiceImpl implements IMsOperationLogService {
|
||||
|
||||
private static final String ENG_TABLE_NAME = "SD_ENGINFO_B_H";
|
||||
|
||||
private static final Map<String, String> ENG_FIELD_MEANING_MAP = new LinkedHashMap<>();
|
||||
|
||||
static {
|
||||
ENG_FIELD_MEANING_MAP.put("STCD", "电站编码");
|
||||
ENG_FIELD_MEANING_MAP.put("ENNM", "电站名称");
|
||||
ENG_FIELD_MEANING_MAP.put("BASE_ID", "所属基地编码");
|
||||
ENG_FIELD_MEANING_MAP.put("HBRVCD", "所属基地流域编码");
|
||||
ENG_FIELD_MEANING_MAP.put("RVCD", "所属流域编码");
|
||||
ENG_FIELD_MEANING_MAP.put("ADDVCD", "所属行政区编码");
|
||||
ENG_FIELD_MEANING_MAP.put("HYCD", "所属公司编码");
|
||||
ENG_FIELD_MEANING_MAP.put("BLPRD", "所属建设阶段");
|
||||
ENG_FIELD_MEANING_MAP.put("BLDSTT", "建设状态");
|
||||
ENG_FIELD_MEANING_MAP.put("BLDSTT_CODE", "建设状态分类");
|
||||
ENG_FIELD_MEANING_MAP.put("DVTP", "开发方式");
|
||||
ENG_FIELD_MEANING_MAP.put("DTIN", "数据是否接入");
|
||||
ENG_FIELD_MEANING_MAP.put("RGCP", "调节性能");
|
||||
ENG_FIELD_MEANING_MAP.put("LGTD", "经度");
|
||||
ENG_FIELD_MEANING_MAP.put("LTTD", "纬度");
|
||||
ENG_FIELD_MEANING_MAP.put("STLC", "站址");
|
||||
ENG_FIELD_MEANING_MAP.put("ORDER_INDEX", "排序");
|
||||
}
|
||||
|
||||
@Resource
|
||||
private MsOperationLogMapper msOperationLogMapper;
|
||||
|
||||
@Resource
|
||||
private MsOperationLogDetailMapper msOperationLogDetailMapper;
|
||||
|
||||
@Override
|
||||
public void recordEngAddLog(SdEngInfoBH engInfo, String source) {
|
||||
if (engInfo == null) {
|
||||
return;
|
||||
}
|
||||
MsOperationLog mainLog = buildMainLog("新增电站", source);
|
||||
msOperationLogMapper.insert(mainLog);
|
||||
|
||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||
for (Field field : SdEngInfoBH.class.getDeclaredFields()) {
|
||||
if (shouldSkipField(field)) {
|
||||
continue;
|
||||
}
|
||||
field.setAccessible(true);
|
||||
Object newValue = getFieldValue(field, engInfo);
|
||||
if (newValue == null) {
|
||||
continue;
|
||||
}
|
||||
details.add(buildDetail(mainLog.getId(), engInfo.getStcd(), resolveColumnName(field),
|
||||
null, newValue, "新增字段值"));
|
||||
}
|
||||
batchInsertDetails(details);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void recordEngUpdateLog(SdEngInfoBH before, SdEngInfoBH changeSet, String source) {
|
||||
if (before == null || changeSet == 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<>();
|
||||
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)) {
|
||||
continue;
|
||||
}
|
||||
details.add(buildDetail(mainLog.getId(), after.getStcd(), resolveColumnName(field),
|
||||
oldValue, newValue, "修改字段值"));
|
||||
}
|
||||
batchInsertDetails(details);
|
||||
}
|
||||
|
||||
private MsOperationLog buildMainLog(String remark, String source) {
|
||||
MsOperationLog log = new MsOperationLog();
|
||||
log.setOperator(resolveOperator());
|
||||
log.setOperateTime(new Date());
|
||||
log.setSource(StrUtil.trimToNull(source));
|
||||
log.setRemark(remark);
|
||||
return log;
|
||||
}
|
||||
|
||||
private MsOperationLogDetail buildDetail(String mainId,
|
||||
String stationCode,
|
||||
String fieldCode,
|
||||
Object oldValue,
|
||||
Object newValue,
|
||||
String remark) {
|
||||
MsOperationLogDetail detail = new MsOperationLogDetail();
|
||||
detail.setMainId(mainId);
|
||||
detail.setTableName(ENG_TABLE_NAME);
|
||||
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.setRemark(remark);
|
||||
return detail;
|
||||
}
|
||||
|
||||
private void batchInsertDetails(List<MsOperationLogDetail> details) {
|
||||
msOperationLogDetailMapper.insert(details);
|
||||
}
|
||||
|
||||
private boolean shouldSkipField(Field field) {
|
||||
if (Modifier.isStatic(field.getModifiers())) {
|
||||
return true;
|
||||
}
|
||||
TableField tableField = field.getAnnotation(TableField.class);
|
||||
if (tableField != null && !tableField.exist()) {
|
||||
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 boolean equalsValue(Object oldValue, Object newValue) {
|
||||
return StrUtil.equals(formatValue(oldValue), formatValue(newValue));
|
||||
}
|
||||
|
||||
private String formatValue(Object value) {
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
if (value instanceof Date date) {
|
||||
return DateUtil.formatDateTime(date);
|
||||
}
|
||||
return String.valueOf(value);
|
||||
}
|
||||
|
||||
private String resolveOperator() {
|
||||
try {
|
||||
return SecurityUtils.getCurrentUsername();
|
||||
} catch (Exception ignored) {
|
||||
try {
|
||||
return SecurityUtils.getUserId();
|
||||
} catch (Exception ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||
@ -19,13 +20,17 @@ 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.EngStBaseInfoVo;
|
||||
import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo;
|
||||
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
|
||||
import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper;
|
||||
import com.yfd.platform.qgc_base.service.IMsOperationLogService;
|
||||
import com.yfd.platform.qgc_base.service.ISdEngInfoBHService;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
import com.yfd.platform.utils.SecurityUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -55,6 +60,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
@Resource
|
||||
private SysUserDataScopeMapper sysUserDataScopeMapper;
|
||||
|
||||
@Resource
|
||||
private IMsOperationLogService msOperationLogService;
|
||||
|
||||
@Override
|
||||
public Page<SdEngInfoBH> queryPageList(Page<SdEngInfoBH> page, String ennm, String rvcd, String baseId, String hycd) {
|
||||
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
|
||||
@ -94,17 +102,20 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
String hbrvcd = sdEngInfoBHRequest.getHbrvcd();
|
||||
String ennm = sdEngInfoBHRequest.getEnnm();
|
||||
String rvcd = sdEngInfoBHRequest.getRvcd();
|
||||
String reachcd = sdEngInfoBHRequest.getReachcd();
|
||||
List<String> rvcds = sdEngInfoBHRequest.getRvcds();
|
||||
List<String> hbrvcds = sdEngInfoBHRequest.getHbrvcds();
|
||||
LambdaQueryWrapper<SdEngInfoBH> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
|
||||
.eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd)
|
||||
.eq(StrUtil.isNotBlank(reachcd), SdEngInfoBH::getRvcd, reachcd)
|
||||
.eq(StrUtil.isNotBlank(rvcd), SdEngInfoBH::getReachcd, rvcd)
|
||||
.eq(StrUtil.isNotBlank(rvcd), SdEngInfoBH::getReachcd, rvcd)
|
||||
.in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getReachcd, rvcds)
|
||||
.in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds)
|
||||
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)
|
||||
.select(SdEngInfoBH::getStcd, SdEngInfoBH::getEnnm, SdEngInfoBH::getBaseId)
|
||||
.orderByAsc(SdEngInfoBH::getOrderIndex);
|
||||
.select(SdEngInfoBH::getStcd, SdEngInfoBH::getEnnm, SdEngInfoBH::getReachcdName, SdEngInfoBH::getYrgeb, SdEngInfoBH::getBaseId)
|
||||
.orderByAsc(SdEngInfoBH::getBaseId,SdEngInfoBH::getOrderIndex);
|
||||
|
||||
if("admin".equals(SecurityUtils.getCurrentUsername())){
|
||||
return this.list(wrapper);
|
||||
@ -186,17 +197,39 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
|
||||
@Override
|
||||
public boolean addEngInfo(SdEngInfoBH engInfo) {
|
||||
return this.save(engInfo);
|
||||
return addEngInfo(engInfo, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean addEngInfo(SdEngInfoBH engInfo, String source) {
|
||||
boolean result = this.save(engInfo);
|
||||
if (result) {
|
||||
msOperationLogService.recordEngAddLog(engInfo, source);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateEngInfo(SdEngInfoBH engInfo) {
|
||||
return this.updateById(engInfo);
|
||||
return updateEngInfo(engInfo, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@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);
|
||||
if (result && before != null) {
|
||||
msOperationLogService.recordEngUpdateLog(before, engInfo, source);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteEngInfo(String stcd) {
|
||||
return this.removeById(stcd);
|
||||
return this.update( new LambdaUpdateWrapper<SdEngInfoBH>().eq(SdEngInfoBH::getStcd, stcd).set(SdEngInfoBH::getIsDeleted, 1));
|
||||
// return this.removeById(stcd);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -369,12 +402,13 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
// }
|
||||
// }
|
||||
|
||||
Page<?> page = null;
|
||||
if (dataSourceRequest.getTake() > 0) {
|
||||
page = new Page<>(dataSourceRequest.getSkip() / dataSourceRequest.getTake() + 1,
|
||||
dataSourceRequest.getTake());
|
||||
}
|
||||
|
||||
// Page<?> page = null;
|
||||
// if (dataSourceRequest.getTake() > 0) {
|
||||
// page = new Page<>(dataSourceRequest.getSkip() / dataSourceRequest.getTake() + 1,
|
||||
// dataSourceRequest.getTake());
|
||||
// }
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
StringBuilder sql = new StringBuilder(buildEiaapprovalBaseSql());
|
||||
@ -462,6 +496,34 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EngStInfoResultVo getStcdInfo(String stcd) {
|
||||
EngBaseInfoVo baseInfo = getStInfoByStcd(stcd);
|
||||
if (baseInfo == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
EngStBaseInfoVo stBaseInfo = new EngStBaseInfoVo();
|
||||
stBaseInfo.setStcd(baseInfo.getStcd());
|
||||
stBaseInfo.setStnm(baseInfo.getStnm());
|
||||
stBaseInfo.setSttpCode(baseInfo.getSttpCode());
|
||||
stBaseInfo.setSttpName(baseInfo.getSttpName());
|
||||
stBaseInfo.setSttpFullPath(baseInfo.getSttpFullPath());
|
||||
stBaseInfo.setSttpTreeLevel(baseInfo.getSttpTreeLevel());
|
||||
stBaseInfo.setStCode(null);
|
||||
stBaseInfo.setStName(null);
|
||||
stBaseInfo.setBaseId(baseInfo.getBaseId());
|
||||
stBaseInfo.setBaseName(baseInfo.getBaseName());
|
||||
stBaseInfo.setHbrvcd(baseInfo.getHbrvcd());
|
||||
stBaseInfo.setHbrvcdName(baseInfo.getHbrvcdName());
|
||||
stBaseInfo.setRvcd(baseInfo.getRvcd());
|
||||
stBaseInfo.setRvcdName(baseInfo.getRvcdName());
|
||||
|
||||
EngStInfoResultVo result = new EngStInfoResultVo();
|
||||
result.setStBaseInfo(stBaseInfo);
|
||||
return result;
|
||||
}
|
||||
|
||||
private String buildVmsstbprptViewSql() {
|
||||
return "SELECT " +
|
||||
"eng.STCD AS id, " +
|
||||
@ -469,6 +531,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
"'电站' AS sttpName, " +
|
||||
"eng.STCD AS stcd, " +
|
||||
"eng.ENNM AS stnm, " +
|
||||
"eng.REACHCD_NAME AS reachcdName, " +
|
||||
"eng.ENNM AS ennm, " +
|
||||
"eng.BASE_ID AS baseId, " +
|
||||
"hb.BASENAME AS baseName, " +
|
||||
@ -485,6 +548,11 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
"eng.AIODT AS aiodt, " +
|
||||
"eng.BLDSTT AS bldstt, " +
|
||||
"eng.BLDSTT_CODE AS bldsttCcode, " +
|
||||
"CASE " +
|
||||
" WHEN eng.BLDSTT_CODE = 0 OR eng.BLDSTT_CODE IS NULL THEN '未建/规划' " +
|
||||
" WHEN eng.BLDSTT_CODE = 1 THEN '在建' " +
|
||||
" WHEN eng.BLDSTT_CODE = 2 THEN '已建' " +
|
||||
" ELSE NULL END AS bldsttCcodeName, " +
|
||||
"eng.NRUPAR AS nrupar, " +
|
||||
"eng.DSTCRVR AS dstcrvr, " +
|
||||
"eng.AVYRP AS avyrp, " +
|
||||
@ -531,6 +599,17 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
"CAST(NULL AS NUMBER) AS ddcp, " +
|
||||
"eng.CPSC AS cpsc, " +
|
||||
"eng.RGCP AS rgcp, " +
|
||||
"CASE eng.RGCP " +
|
||||
" WHEN '1' THEN '多年调节' " +
|
||||
" WHEN '2' THEN '年调节' " +
|
||||
" WHEN '3' THEN '不完全年调节' " +
|
||||
" WHEN '4' THEN '径流式(无调节)' " +
|
||||
" WHEN '5' THEN '季调节' " +
|
||||
" WHEN '6' THEN '月调节' " +
|
||||
" WHEN '7' THEN '周调节' " +
|
||||
" WHEN '8' THEN '日调节' " +
|
||||
" WHEN '9' THEN '其他' " +
|
||||
" ELSE NULL END AS rgcpName, " +
|
||||
"eng.DSMXQ AS dsflzmxq, " +
|
||||
"CAST(NULL AS NUMBER) AS dsflzxyz, " +
|
||||
"eng.CHMXQ AS ckflzmxq, " +
|
||||
@ -554,7 +633,16 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
"CAST(NULL AS NUMBER) AS unyge, " +
|
||||
"eng.GAP AS gap, " +
|
||||
"eng.DVTP AS dvtp, " +
|
||||
"CASE eng.DVTP " +
|
||||
" WHEN '1' THEN '堤坝式' " +
|
||||
" WHEN '2' THEN '引水式' " +
|
||||
" WHEN '3' THEN '混合式' " +
|
||||
" ELSE NULL END AS dvtpName, " +
|
||||
"eng.DTIN AS dtin, " +
|
||||
"CASE NVL(eng.DTIN, 0) " +
|
||||
" WHEN 0 THEN '否' " +
|
||||
" WHEN 1 THEN '是' " +
|
||||
" ELSE NULL END AS dtinName, " +
|
||||
"NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
|
||||
"NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " +
|
||||
"NVL(rstSort.SORT, 999999) AS rstcdStepSort, " +
|
||||
@ -611,6 +699,7 @@ 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("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");
|
||||
@ -625,6 +714,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
columns.put("aiodt", "t.aiodt AS aiodt");
|
||||
columns.put("bldstt", "t.bldstt AS bldstt");
|
||||
columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode");
|
||||
columns.put("bldsttCcodeName", "t.bldsttCcodeName AS bldsttCcodeName");
|
||||
columns.put("nrupar", "t.nrupar AS nrupar");
|
||||
columns.put("dstcrvr", "t.dstcrvr AS dstcrvr");
|
||||
columns.put("avyrp", "t.avyrp AS avyrp");
|
||||
@ -671,6 +761,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
columns.put("ddcp", "t.ddcp AS ddcp");
|
||||
columns.put("cpsc", "t.cpsc AS cpsc");
|
||||
columns.put("rgcp", "t.rgcp AS rgcp");
|
||||
columns.put("rgcpName", "t.rgcpName AS rgcpName");
|
||||
columns.put("dsflzmxq", "t.dsflzmxq AS dsflzmxq");
|
||||
columns.put("dsflzxyz", "t.dsflzxyz AS dsflzxyz");
|
||||
columns.put("ckflzmxq", "t.ckflzmxq AS ckflzmxq");
|
||||
@ -694,7 +785,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
||||
columns.put("unyge", "t.unyge AS unyge");
|
||||
columns.put("gap", "t.gap AS gap");
|
||||
columns.put("dvtp", "t.dvtp AS dvtp");
|
||||
columns.put("dvtpName", "t.dvtpName AS dvtpName");
|
||||
columns.put("dtin", "t.dtin AS dtin");
|
||||
columns.put("dtinName", "t.dtinName AS dtinName");
|
||||
columns.put("baseStepSort", "t.baseStepSort AS baseStepSort");
|
||||
columns.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort");
|
||||
columns.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort");
|
||||
|
||||
@ -149,6 +149,12 @@ public class SdRvcdDicServiceImpl extends ServiceImpl<SdRvcdDicMapper, SdRvcdDic
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SdRvcdDic> selectRvcdDropdown(String rvnm,String baseId) {
|
||||
List<SdRvcdDic> dropdownList = this.baseMapper.selectRvcdDropdown(rvnm,baseId);
|
||||
return dropdownList;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Set<String> getUserAuthorizedStationCodes() {
|
||||
|
||||
@ -4,8 +4,12 @@ import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseMsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseVmsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitQueryVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
|
||||
@ -22,6 +26,8 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/eq")
|
||||
@Tag(name = "电站实时数据查询")
|
||||
@ -69,6 +75,20 @@ public class EngEqDataController {
|
||||
return ResponseResult.successData(result);
|
||||
}
|
||||
|
||||
@PostMapping("/base/msstbprpt/GetKendoList")
|
||||
@Operation(summary = "生态流量泄放设施基础信息查询")
|
||||
public ResponseResult getBaseMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
DataSourceResult<EngEqBaseMsstbprptVo> result = engEqDataService.getBaseMsstbprptList(dataSourceRequest);
|
||||
return ResponseResult.successData(result);
|
||||
}
|
||||
|
||||
@PostMapping("/base/vmsstbprpt/GetKendoList")
|
||||
@Operation(summary = "生态流量泄放设施统计查询")
|
||||
public ResponseResult getBaseVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
DataSourceResult<EngEqBaseVmsstbprptVo> result = engEqDataService.getBaseVmsstbprptList(dataSourceRequest);
|
||||
return ResponseResult.successData(result);
|
||||
}
|
||||
|
||||
@PostMapping("/interval/qgc/hour/GetKendoListCust")
|
||||
@Operation(summary = "生态流量达标率小时统计(二级页面)")
|
||||
public ResponseResult getQgcHourKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
@ -87,6 +107,13 @@ public class EngEqDataController {
|
||||
return ResponseResult.successData(engEqDataService.getQgcHourVAlongKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/engalong/statistics/qgc/getEngLimit")
|
||||
@Operation(summary = "沿程生态流量限值变化曲线")
|
||||
public ResponseResult getQgcEngLimit(@RequestBody EngEqLimitQueryVo queryVo) {
|
||||
List<EngEqLimitVo> result = engEqDataService.getQgcEngLimit(queryVo);
|
||||
return ResponseResult.successData(result);
|
||||
}
|
||||
|
||||
@PostMapping("/fid/GetKendoListCust")
|
||||
@Operation(summary = "查询电站相关鱼类附件编码")
|
||||
public ResponseResult getFidKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
package com.yfd.platform.qgc_eng.eq.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Schema(description = "生态流量泄放设施基础信息查询")
|
||||
public class EngEqBaseMsstbprptVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "设施编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "设施名称")
|
||||
private String stnm;
|
||||
|
||||
@Schema(description = "设施类型编码")
|
||||
private String sttpCode;
|
||||
|
||||
@Schema(description = "设施类型名称")
|
||||
private String sttpName;
|
||||
|
||||
@Schema(description = "所属电站编码")
|
||||
private String rstcd;
|
||||
|
||||
@Schema(description = "所属电站名称")
|
||||
private String rstcdName;
|
||||
|
||||
@Schema(description = "基地编码")
|
||||
private String baseId;
|
||||
|
||||
@Schema(description = "基地名称")
|
||||
private String baseName;
|
||||
|
||||
@Schema(description = "基地流域编码")
|
||||
private String hbrvcd;
|
||||
|
||||
@Schema(description = "基地流域名称")
|
||||
private String hbrvcdName;
|
||||
|
||||
@Schema(description = "设施位置")
|
||||
private String stlc;
|
||||
|
||||
@Schema(description = "经度")
|
||||
private Double lgtd;
|
||||
|
||||
@Schema(description = "纬度")
|
||||
private Double lttd;
|
||||
|
||||
@Schema(description = "高程")
|
||||
private Double elev;
|
||||
|
||||
@Schema(description = "建设状态分类编码")
|
||||
private Integer bldsttCode;
|
||||
|
||||
@Schema(description = "建设状态分类名称")
|
||||
private String bldsttCodeName;
|
||||
|
||||
@Schema(description = "数据接入状态")
|
||||
private Integer dtin;
|
||||
|
||||
@Schema(description = "数据接入状态中文")
|
||||
private String dtinName;
|
||||
|
||||
@Schema(description = "数据接入时间")
|
||||
private Date dtinTm;
|
||||
|
||||
@Schema(description = "数据时间")
|
||||
private Date tm;
|
||||
|
||||
@Schema(description = "排序")
|
||||
private Integer orderIndex;
|
||||
}
|
||||
@ -0,0 +1,64 @@
|
||||
package com.yfd.platform.qgc_eng.eq.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Schema(description = "生态流量泄放设施统计查询")
|
||||
public class EngEqBaseVmsstbprptVo extends EngEqMsstbprptVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "所属电站编码")
|
||||
private String rstcd;
|
||||
|
||||
@Schema(description = "所属电站名称")
|
||||
private String rstcdName;
|
||||
|
||||
@Schema(description = "基地排序")
|
||||
private Integer baseStepSort;
|
||||
|
||||
@Schema(description = "流域排序")
|
||||
private Integer rvcdStepSort;
|
||||
|
||||
@Schema(description = "所属电站排序")
|
||||
private Integer rstcdStepSort;
|
||||
|
||||
@Schema(description = "设施排序")
|
||||
private Integer siteStepSort;
|
||||
|
||||
@Schema(description = "死水位时保证流量")
|
||||
private Double ddzgq;
|
||||
|
||||
@Schema(description = "最大泄放流量")
|
||||
private String flkq;
|
||||
|
||||
@Schema(description = "孔口尺寸")
|
||||
private String flksz;
|
||||
|
||||
@Schema(description = "结构形式")
|
||||
private String frntwlltyp;
|
||||
|
||||
@Schema(description = "进水口底版高程")
|
||||
private Double jskgc;
|
||||
|
||||
@Schema(description = "出水口底版高程")
|
||||
private Double outflrelev;
|
||||
|
||||
@Schema(description = "基荷发电工况")
|
||||
private Double jhfdgk;
|
||||
|
||||
@Schema(description = "发电流量")
|
||||
private Double fdll;
|
||||
|
||||
@Schema(description = "生态机组额定流量")
|
||||
private Double stjzysq;
|
||||
|
||||
@Schema(description = "装机容量")
|
||||
private Double ttpwr;
|
||||
|
||||
@Schema(description = "所属建设阶段名称")
|
||||
private String blprdName;
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.yfd.platform.qgc_eng.eq.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 EngEqLimitQueryVo {
|
||||
|
||||
@Schema(description = "查询日期,支持 yyyy-MM-dd、yyyy-MM-dd HH:mm、yyyy-MM-dd HH:mm:ss")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "基地编码")
|
||||
private String baseId;
|
||||
|
||||
@Schema(description = "流域编码")
|
||||
private String rvcd;
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.yfd.platform.qgc_eng.eq.entity.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(description = "沿程生态流量限值")
|
||||
public class EngEqLimitVo {
|
||||
|
||||
@Schema(description = "电站编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "电站名称")
|
||||
private String stnm;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Schema(description = "查询日期")
|
||||
private Date date;
|
||||
|
||||
@Schema(description = "生态流量限值")
|
||||
private BigDecimal qecLimit;
|
||||
}
|
||||
@ -2,11 +2,15 @@ package com.yfd.platform.qgc_eng.eq.service;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseMsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseVmsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayDataVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitQueryVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo;
|
||||
@ -16,6 +20,8 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo;
|
||||
import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface EngEqDataService {
|
||||
|
||||
DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
@ -28,12 +34,18 @@ public interface EngEqDataService {
|
||||
|
||||
DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngEqBaseMsstbprptVo> getBaseMsstbprptList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngEqBaseVmsstbprptVo> getBaseVmsstbprptList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngEqHourIntervalVo> getQgcHourKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngEqDayIntervalVo> getQgcDayKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<EngQecAlongVo> getQgcHourVAlongKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
List<EngEqLimitVo> getQgcEngLimit(EngEqLimitQueryVo queryVo);
|
||||
|
||||
DataSourceResult<String> getFidKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
EngEqRuleVo getEngLimit(DataSourceRequest dataSourceRequest);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,35 +0,0 @@
|
||||
package com.yfd.platform.qgc_env.fb.controller;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_env.fb.service.FbStationService;
|
||||
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("/fb/bsmfr")
|
||||
@Tag(name = "亲鱼选配与培育-亲鱼信息")
|
||||
@Validated
|
||||
public class FbBsmfrController {
|
||||
|
||||
@Resource
|
||||
private FbStationService fbStationService;
|
||||
|
||||
@PostMapping("/qgc/GetKendoListCust")
|
||||
@Operation(summary = "(全过程)增殖站二级页面: 亲鱼选配与培育->亲鱼信息")
|
||||
public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getQgcBsmfRKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/fish/GetKendoListCust")
|
||||
@Operation(summary = "(全过程)增殖站二级页面: 过程图-亲鱼")
|
||||
public ResponseResult getFishKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getBsmfRFishKendoListCust(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
package com.yfd.platform.qgc_env.fb.controller;
|
||||
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_env.fb.service.FbStationService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/fb/fbrdmr")
|
||||
@Tag(name = "鱼类增殖站年度鱼类标记数据")
|
||||
@Validated
|
||||
public class FbFbrdmrController {
|
||||
|
||||
@Resource
|
||||
private FbStationService fbStationService;
|
||||
|
||||
@GetMapping("/getFbRelatedYrByStcd")
|
||||
@Operation(summary = "根据增殖站编码查询相关业务年份")
|
||||
public ResponseResult getFbRelatedYrByStcd(@Parameter(description = "增殖站编码")
|
||||
@RequestParam("stcd") String stcd) {
|
||||
return ResponseResult.successData(fbStationService.getFbRelatedYrByStcd(stcd));
|
||||
}
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package com.yfd.platform.qgc_env.fb.controller;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_env.fb.service.FbStationService;
|
||||
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("/fb/msfbrdm")
|
||||
@Tag(name = "鱼类增殖站增殖情况")
|
||||
@Validated
|
||||
public class FbMsfbrdmController {
|
||||
|
||||
@Resource
|
||||
private FbStationService fbStationService;
|
||||
|
||||
@PostMapping("/fbFlData/GetKendoListCust")
|
||||
@Operation(summary = "增殖站增殖情况(app)")
|
||||
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getFbFlDataKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/qgc/GetKendoListCust")
|
||||
@Operation(summary = "(全过程)增殖站二级页面: 增殖放流情况")
|
||||
public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getQgcMsfbrdmKendoListCust(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
package com.yfd.platform.qgc_env.fb.controller;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_env.fb.service.FbStationService;
|
||||
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("/fb/base/researchb")
|
||||
@Tag(name = "鱼类增殖站科研情况")
|
||||
@Validated
|
||||
public class FbResearchbController {
|
||||
|
||||
@Resource
|
||||
private FbStationService fbStationService;
|
||||
|
||||
@PostMapping("/GetKendoList")
|
||||
@Operation(summary = "鱼类增殖站科研情况列表")
|
||||
public ResponseResult getKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getResearchKendoList(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
@ -16,47 +16,120 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/fb/station")
|
||||
@Tag(name = "鱼类增殖站概况")
|
||||
@RequestMapping("/fb")
|
||||
@Tag(name = "鱼类增殖站模块")
|
||||
@Validated
|
||||
public class FbStationController {
|
||||
|
||||
@Resource
|
||||
private FbStationService fbStationService;
|
||||
|
||||
@PostMapping("/qgcoverview/getOverviewSecond")
|
||||
@PostMapping("/station/qgcoverview/getOverviewSecond")
|
||||
@Operation(summary = "全流域增殖站概况二级页面")
|
||||
public ResponseResult getQgcOverviewSecond(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getQgcOverviewSecond(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/overview/getOverviewSecond")
|
||||
@PostMapping("/station/overview/getOverviewSecond")
|
||||
@Operation(summary = "增殖站概况二级页面")
|
||||
public ResponseResult getOverviewSecond(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getOverviewSecond(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/overview/GetKendoListCust")
|
||||
@PostMapping("/station/overview/GetKendoListCust")
|
||||
@Operation(summary = "全流域增殖站概况")
|
||||
public ResponseResult getOverviewKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getOverviewKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/qgc/getFbStaticsData")
|
||||
@PostMapping("/station/qgc/getFbStaticsData")
|
||||
@Operation(summary = "增殖站放流数据统计")
|
||||
public ResponseResult getQgcFbStaticsData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getQgcFbStaticsData(dataSourceRequest));
|
||||
}
|
||||
|
||||
@GetMapping("/msstbprpt/getStInfoByStcd")
|
||||
@GetMapping("/station/msstbprpt/getStInfoByStcd")
|
||||
@Operation(summary = "增殖站单站基础信息")
|
||||
public ResponseResult getStInfoByStcd(@Parameter(description = "站点编码") @RequestParam("stcd") String stcd) {
|
||||
return ResponseResult.successData(fbStationService.getStInfoByStcd(stcd));
|
||||
}
|
||||
|
||||
@GetMapping("/rpimnr/qgc/year/GetYearRpStatistics")
|
||||
@GetMapping("/station/rpimnr/qgc/year/GetYearRpStatistics")
|
||||
@Operation(summary = "全过程放流统计总数,根据基地流域分组")
|
||||
public ResponseResult getYearRpStatistics(@Parameter(description = "年份") @RequestParam("year") String year) {
|
||||
return ResponseResult.successData(fbStationService.getYearRpStatistics(year));
|
||||
}
|
||||
|
||||
@PostMapping("/bsmfr/qgc/GetKendoListCust")
|
||||
@Operation(summary = "(全过程)增殖站二级页面: 亲鱼选配与培育->亲鱼信息")
|
||||
public ResponseResult getBsmfrQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getQgcBsmfRKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/bsmfr/fish/GetKendoListCust")
|
||||
@Operation(summary = "(全过程)增殖站二级页面: 过程图-亲鱼")
|
||||
public ResponseResult getBsmfrFishKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getBsmfRFishKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@GetMapping("/fbrdmr/getFbRelatedYrByStcd")
|
||||
@Operation(summary = "根据增殖站编码查询相关业务年份")
|
||||
public ResponseResult getFbRelatedYrByStcd(@Parameter(description = "增殖站编码")
|
||||
@RequestParam("stcd") String stcd) {
|
||||
return ResponseResult.successData(fbStationService.getFbRelatedYrByStcd(stcd));
|
||||
}
|
||||
|
||||
@PostMapping("/msfbrdm/fbFlData/GetKendoListCust")
|
||||
@Operation(summary = "增殖站增殖情况(app)")
|
||||
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getFbFlDataKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/fishCount/GetKendoListCust")
|
||||
@Operation(summary = "增殖站鱼数量完成情况统计")
|
||||
public ResponseResult getFishCountKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getFishCountKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/fishrun/qgc/GetKendoListCust")
|
||||
@Operation(summary = "全过程鱼类放鱼数据")
|
||||
public ResponseResult getFishRunQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getFishRunQgcKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/fishType/GetKendoListCust")
|
||||
@Operation(summary = "增殖站鱼种完成情况统计")
|
||||
public ResponseResult getFishTypeKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getFishTypeKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/fishType/getStcdList")
|
||||
@Operation(summary = "增殖放流完成情况获取有数据的测站下拉")
|
||||
public ResponseResult getFishTypeStcdList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getFishTypeStcdList(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/msfbrdm/GetKendoListCust")
|
||||
@Operation(summary = "鱼类增殖站运行情况统计列表")
|
||||
public ResponseResult getMsfbrdmKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getMsfbrdmKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/msfbrdm/qgc/GetKendoListCust")
|
||||
@Operation(summary = "(全过程)增殖站二级页面: 增殖放流情况")
|
||||
public ResponseResult getMsfbrdmQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getQgcMsfbrdmKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/msstbprpt/GetKendoList")
|
||||
@Operation(summary = "鱼类增殖站基础信息列表")
|
||||
public ResponseResult getMsstbprptKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getMsstbprptList(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/base/researchb/GetKendoList")
|
||||
@Operation(summary = "鱼类增殖站科研情况列表")
|
||||
public ResponseResult getResearchKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fbStationService.getResearchKendoList(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package com.yfd.platform.qgc_env.fb.entity.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class FbFishCountFinishVo {
|
||||
|
||||
private String stcd;
|
||||
|
||||
private BigDecimal finished;
|
||||
|
||||
private BigDecimal unfinished;
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package com.yfd.platform.qgc_env.fb.entity.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class FbFishRunQgcVo {
|
||||
|
||||
private String stcd;
|
||||
|
||||
private String stnm;
|
||||
|
||||
private String ftp;
|
||||
|
||||
private String ftpName;
|
||||
|
||||
private String baseId;
|
||||
|
||||
private String baseName;
|
||||
|
||||
private String flyr;
|
||||
|
||||
private Long fcnt;
|
||||
|
||||
private Long totalFcnt;
|
||||
|
||||
private String fid;
|
||||
|
||||
private String release;
|
||||
|
||||
private Integer baseStepSort;
|
||||
|
||||
private Integer siteStepSort;
|
||||
|
||||
private Integer rvcdStepSort;
|
||||
|
||||
private Integer rstcdStepSort;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.yfd.platform.qgc_env.fb.entity.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class FbFishTypeFinishVo {
|
||||
|
||||
private String stcd;
|
||||
|
||||
private Integer finished;
|
||||
|
||||
private Integer unfinished;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package com.yfd.platform.qgc_env.fb.entity.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class FbFishTypeStcdVo {
|
||||
|
||||
private String stcd;
|
||||
|
||||
private String stnm;
|
||||
|
||||
private BigDecimal lgtd;
|
||||
|
||||
private BigDecimal lttd;
|
||||
|
||||
private String baseId;
|
||||
}
|
||||
@ -5,6 +5,10 @@ import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRQgcVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFishCountFinishVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFishRunQgcVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFishTypeStcdVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFishTypeFinishVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbMsfbrdmQgcVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbResearchVo;
|
||||
@ -14,6 +18,7 @@ import com.yfd.platform.qgc_env.fb.entity.vo.YearRpStatisticsVo;
|
||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbStationOverviewSecondVo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface FbStationService {
|
||||
|
||||
@ -21,8 +26,20 @@ public interface FbStationService {
|
||||
|
||||
DataSourceResult<FbStationOverviewSecondVo> getOverviewKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<Map<String, Object>> getMsstbprptList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbFlDataVo> getFbFlDataKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbFishCountFinishVo> getFishCountKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbFishRunQgcVo> getFishRunQgcKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbFishTypeFinishVo> getFishTypeKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbFishTypeStcdVo> getFishTypeStcdList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbMsfbrdmQgcVo> getMsfbrdmKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbMsfbrdmQgcVo> getQgcMsfbrdmKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<FbBsmfRQgcVo> getQgcBsmfRKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -96,10 +96,14 @@ public class FhHabitatServiceImpl implements FhHabitatService {
|
||||
}
|
||||
|
||||
sql.append(buildOrderBySql(dataSourceRequest.getSort()));
|
||||
Page<?> page = null;
|
||||
if (QgcQueryWrapperUtil.getPageInfo(loadOptions).getHasPageInfo()) {
|
||||
page = QgcQueryWrapperUtil.getPageInfo(loadOptions).getPage();
|
||||
}
|
||||
// Page<?> page = null;
|
||||
// if (QgcQueryWrapperUtil.getPageInfo(loadOptions).getHasPageInfo()) {
|
||||
// page = QgcQueryWrapperUtil.getPageInfo(loadOptions).getPage();
|
||||
// }
|
||||
|
||||
// DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||
|
||||
|
||||
List<HabitatVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, HabitatVo.class);
|
||||
DataSourceResult<HabitatVo> result = new DataSourceResult<>();
|
||||
|
||||
@ -45,4 +45,5 @@ public class FprZyFishDicVo {
|
||||
private String spawnMonth;
|
||||
private String orders;
|
||||
private String vlsr;
|
||||
private java.util.Date vlsrTm;
|
||||
}
|
||||
|
||||
@ -250,87 +250,33 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
new int[]{0}
|
||||
);
|
||||
|
||||
String baseSql = StrUtil.isBlank(rvcd) ? buildZyFishDicSummarySql() : buildZyFishDicBaseSql();
|
||||
StringBuilder sql = new StringBuilder("SELECT * FROM (")
|
||||
.append(buildZyFishDicBaseSql())
|
||||
.append(baseSql)
|
||||
.append(") t WHERE 1 = 1 ");
|
||||
if (StrUtil.isNotBlank(filterSql)) {
|
||||
sql.append(" AND ").append(filterSql).append(" ");
|
||||
}
|
||||
// 增加排序
|
||||
if(dataSourceRequest.getSort() !=null && !dataSourceRequest.getSort().isEmpty()){
|
||||
List<DataSourceRequest.SortDescriptor> sortDescriptors = dataSourceRequest.getSort();
|
||||
StringBuilder orderSql = new StringBuilder();
|
||||
orderSql.append(" order by ");
|
||||
for (DataSourceRequest.SortDescriptor sort:sortDescriptors){
|
||||
orderSql.append(sort.getField()).append(" ").append(sort.getDir()).append(",");
|
||||
}
|
||||
sql.append(orderSql, 0, orderSql.length()-1);
|
||||
// String[] beans = SpringContextHolder.getApplicationContext().getBeanDefinitionNames();
|
||||
sql.append(" nulls last ");
|
||||
}else{
|
||||
sql.append(" order by rvcd nulls last ");
|
||||
}
|
||||
List<FprZyFishDicVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
|
||||
sql.append(buildZyFishDicOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||
List<FprZyFishDicVo> resultList = microservicDynamicSQLMapper.pageAllListWithResultType(
|
||||
page,
|
||||
sql.toString(),
|
||||
paramMap,
|
||||
FprZyFishDicVo.class
|
||||
);
|
||||
List<Map<String, Object>> rvcdRows = microservicDynamicSQLMapper.getAllList(
|
||||
"SELECT RVCD AS rvcd, RVNM AS rvcdName FROM SD_RVCD_DIC",
|
||||
null
|
||||
);
|
||||
Map<String, String> rvcdNameMap = new HashMap<>();
|
||||
for (Map<String, Object> row : rvcdRows) {
|
||||
Object rvcdKey = row.get("RVCD");
|
||||
Object rvcdName = row.get("RVCDNAME");
|
||||
if (rvcdKey != null && rvcdName != null) {
|
||||
rvcdNameMap.put(String.valueOf(rvcdKey), String.valueOf(rvcdName));
|
||||
}
|
||||
}
|
||||
|
||||
List<FprZyFishDicVo> resultList;
|
||||
Map<String, List<String>> rvcdMap = new HashMap<>();
|
||||
if (StrUtil.isBlank(rvcd)) {
|
||||
rvcdMap = list.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
item -> StrUtil.blankToDefault(item.getZyFishId(), item.getId()),
|
||||
LinkedHashMap::new,
|
||||
Collectors.mapping(FprZyFishDicVo::getRvcd, Collectors.toList())
|
||||
));
|
||||
LinkedHashMap<String, FprZyFishDicVo> distinctMap = new LinkedHashMap<>();
|
||||
for (FprZyFishDicVo item : list) {
|
||||
distinctMap.putIfAbsent(StrUtil.blankToDefault(item.getZyFishId(), item.getId()), item);
|
||||
}
|
||||
resultList = new ArrayList<>(distinctMap.values());
|
||||
} else {
|
||||
resultList = new ArrayList<>(list);
|
||||
}
|
||||
|
||||
int startIndex = loadOptions == null || loadOptions.getSkip() == null ? 0 : Math.max(loadOptions.getSkip(), 0);
|
||||
fillZyFishRvcdNames(resultList, rvcd);
|
||||
for (int i = 0; i < resultList.size(); i++) {
|
||||
FprZyFishDicVo item = resultList.get(i);
|
||||
item.setIndex(i + 1);
|
||||
item.setIndex(startIndex + i + 1);
|
||||
item.setSpawnMonth(formatSpawnMonth(item.getSpawnMonth()));
|
||||
if (StrUtil.isBlank(rvcd)) {
|
||||
List<String> rvcdList = rvcdMap.getOrDefault(
|
||||
StrUtil.blankToDefault(item.getZyFishId(), item.getId()),
|
||||
new ArrayList<>()
|
||||
).stream().filter(StrUtil::isNotBlank).distinct().toList();
|
||||
List<String> rvcdNames = new ArrayList<>();
|
||||
for (String rvcdItem : rvcdList) {
|
||||
String rvcdName = rvcdNameMap.get(rvcdItem);
|
||||
if (StrUtil.isNotBlank(rvcdName)) {
|
||||
rvcdNames.add(rvcdName);
|
||||
}
|
||||
}
|
||||
item.setRvcdName(String.join(",", rvcdNames));
|
||||
} else {
|
||||
item.setRvcdName(rvcdNameMap.get(item.getRvcd()));
|
||||
}
|
||||
}
|
||||
|
||||
DataSourceResult<FprZyFishDicVo> result = new DataSourceResult<>();
|
||||
result.setTotal((long) resultList.size());
|
||||
result.setData(paginateZyFishDicList(resultList, loadOptions));
|
||||
result.setTotal(page != null ? page.getTotal() : resultList.size());
|
||||
result.setData(resultList);
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
@ -390,7 +336,7 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
"NVL(alongBase.ORDER_INDEX, 999999) AS rvcdStepSort, " +
|
||||
"NVL(engSort.SORT, 999999) AS rstcdStepSort, " +
|
||||
"NVL(siteSort.SORT, NVL(src.ORDER_INDEX, 999999)) AS siteStepSort " +
|
||||
"FROM SD_FPRD_B_H src " +
|
||||
"FROM SD_AIMONITOR_B_H src " +
|
||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = src.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = src.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
|
||||
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = src.HBRVCD " +
|
||||
@ -426,13 +372,13 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
private String buildFprdRunDataInfoSql(FprdRunDataAo ao) {
|
||||
StringBuilder sql = new StringBuilder("SELECT ")
|
||||
.append("NVL((SELECT COUNT(1) ")
|
||||
.append(" FROM SD_FPRD_B_H baseCnt ")
|
||||
.append(" FROM SD_AIMONITOR_B_H baseCnt ")
|
||||
.append(" WHERE NVL(baseCnt.IS_DELETED, 0) = 0 ")
|
||||
.append(" AND baseCnt.STTP = 'FPRD' ")
|
||||
.append(" AND baseCnt.BASE_ID = #{map.baseId}), 0) AS fprdCount, ")
|
||||
.append("NVL((SELECT COUNT(DISTINCT fish.NAME) ")
|
||||
.append(" FROM SD_FPRD_R run ")
|
||||
.append(" INNER JOIN SD_FPRD_B_H base ON base.STCD = run.STCD ")
|
||||
.append(" INNER JOIN SD_AIMONITOR_B_H base ON base.STCD = run.STCD ")
|
||||
.append(" AND NVL(base.IS_DELETED, 0) = 0 ")
|
||||
.append(" AND base.STTP = 'FPRD' ")
|
||||
.append(" INNER JOIN SD_FPRDFISH_R fish ON fish.FPRDR_ID = run.ID ")
|
||||
@ -446,7 +392,7 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
sql.append("), 0) AS ftpCount, ")
|
||||
.append("NVL((SELECT COUNT(1) ")
|
||||
.append(" FROM SD_FPRD_R run ")
|
||||
.append(" INNER JOIN SD_FPRD_B_H base ON base.STCD = run.STCD ")
|
||||
.append(" INNER JOIN SD_AIMONITOR_B_H base ON base.STCD = run.STCD ")
|
||||
.append(" AND NVL(base.IS_DELETED, 0) = 0 ")
|
||||
.append(" AND base.STTP = 'FPRD' ")
|
||||
.append(" INNER JOIN SD_FPRDFISH_R fish ON fish.FPRDR_ID = run.ID ")
|
||||
@ -469,7 +415,7 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
.append("TO_NUMBER(TO_CHAR(run.TM, 'MM')) AS month, ")
|
||||
.append("TO_NUMBER(TO_CHAR(run.TM, 'YYYY')) AS year ")
|
||||
.append("FROM SD_FPRD_R run ")
|
||||
.append("INNER JOIN SD_FPRD_B_H base ON base.STCD = run.STCD ")
|
||||
.append("INNER JOIN SD_AIMONITOR_B_H base ON base.STCD = run.STCD ")
|
||||
.append(" AND NVL(base.IS_DELETED, 0) = 0 ")
|
||||
.append(" AND base.STTP = 'FPRD' ")
|
||||
.append("INNER JOIN SD_FPRDFISH_R fish ON fish.FPRDR_ID = run.ID ")
|
||||
@ -496,7 +442,7 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
"fish.FSZ AS fsz, " +
|
||||
"fish.WEIGHT AS weight " +
|
||||
"FROM SD_FPRD_R run " +
|
||||
"INNER JOIN SD_FPRD_B_H base ON run.STCD = base.STCD " +
|
||||
"INNER JOIN SD_AIMONITOR_B_H base ON run.STCD = base.STCD " +
|
||||
" AND base.STTP = 'FPRD' " +
|
||||
" AND NVL(base.IS_DELETED, 0) = 0 " +
|
||||
"INNER JOIN SD_FPRDFISH_R fish ON run.ID = fish.FPRDR_ID " +
|
||||
@ -739,6 +685,7 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
"NVL(src.IS_DELETED, 0) AS isDeleted, " +
|
||||
"CASE WHEN rel.ZY_FISH_ID IS NULL THEN src.ID ELSE rel.ZY_FISH_ID END AS zyFishId, " +
|
||||
"CASE WHEN rel.RVCD IS NULL THEN 'null' ELSE rel.RVCD END AS rvcd, " +
|
||||
"rv.RVNM AS rvcdName, " +
|
||||
"src.NAME AS name, " +
|
||||
"src.TYPE AS type, " +
|
||||
"src.FAMILY AS family, " +
|
||||
@ -769,15 +716,108 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
"src.LOGO AS logo, " +
|
||||
"src.INFFILE AS inffile, " +
|
||||
"src.ORDERS, \n" +
|
||||
"src.VLSR, \n"+
|
||||
"src.VLSR AS vlsr, \n" +
|
||||
"src.VLSR_TM AS vlsrTm, \n" +
|
||||
"src.SPAWN_MONTH AS spawnMonth " +
|
||||
"FROM SD_FISHDICTORY_B src " +
|
||||
"LEFT JOIN SD_FISHDICTORY_RLTN_B rel ON src.ID = rel.ZY_FISH_ID " +
|
||||
" AND rel.RVCD <> 'ZY' " +
|
||||
" AND NVL(rel.IS_DELETED, 0) = 0 " +
|
||||
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = rel.RVCD " +
|
||||
"WHERE NVL(src.IS_DELETED, 0) = 0 ";
|
||||
}
|
||||
|
||||
private String buildZyFishDicSummarySql() {
|
||||
return "SELECT " +
|
||||
"src.ID AS id, " +
|
||||
"NVL(src.IS_DELETED, 0) AS isDeleted, " +
|
||||
"src.ID AS zyFishId, " +
|
||||
"NVL(relAgg.rvcd, 'null') AS rvcd, " +
|
||||
"NVL(relAgg.rvcdName, '') AS rvcdName, " +
|
||||
"src.NAME AS name, " +
|
||||
"src.TYPE AS type, " +
|
||||
"src.FAMILY AS family, " +
|
||||
"src.GENUS AS genus, " +
|
||||
"src.SPECIES AS species, " +
|
||||
"src.NAME_EN AS nameEn, " +
|
||||
"src.ALIAS AS alias, " +
|
||||
"src.FSZ AS fsz, " +
|
||||
"src.SHAPEDESC AS shapedesc, " +
|
||||
"src.HABITATION AS habitation, " +
|
||||
"src.HABIT_MIGRAT AS habitMigrat, " +
|
||||
"src.FEEDING_HABIT AS feedingHabit, " +
|
||||
"src.FOOD AS food, " +
|
||||
"src.TIME_FEED AS timeFeed, " +
|
||||
"src.ORIGN_DATE AS orignDate, " +
|
||||
"CAST(NULL AS VARCHAR2(255)) AS filterContent, " +
|
||||
"src.PRETEMP AS pretemp, " +
|
||||
"src.FLOW_RATE AS flowRate, " +
|
||||
"src.DEPTH AS depth, " +
|
||||
"src.WQTQ AS wqtq, " +
|
||||
"src.SPAWN_CHARACT AS spawnCharact, " +
|
||||
"src.BOTM_MATER AS botmMater, " +
|
||||
"src.PTYPE AS ptype, " +
|
||||
"CASE src.PTYPE WHEN 1 THEN '濒危' WHEN 2 THEN '极危' WHEN 3 THEN '近危' WHEN 4 THEN '易危' WHEN 5 THEN '重点保护' WHEN 6 THEN '无危' WHEN 7 THEN '国家二级' WHEN 8 THEN '市二级保护' ELSE '未知' END AS ptypeName, " +
|
||||
"src.SPEC_ORIGIN AS specOrigin, " +
|
||||
"CASE WHEN src.SPEC_ORIGIN = 1 THEN '本土物种' WHEN src.SPEC_ORIGIN = 2 THEN '外来物种' ELSE NULL END AS specOriginName, " +
|
||||
"src.DESCRIPTION AS description, " +
|
||||
"src.LOGO AS logo, " +
|
||||
"src.INFFILE AS inffile, " +
|
||||
"src.ORDERS, " +
|
||||
"src.VLSR AS vlsr, " +
|
||||
"src.VLSR_TM AS vlsrTm, " +
|
||||
"src.SPAWN_MONTH AS spawnMonth " +
|
||||
"FROM SD_FISHDICTORY_B src " +
|
||||
"LEFT JOIN ( " +
|
||||
" SELECT relBase.ZY_FISH_ID AS zyFishId, " +
|
||||
" MIN(relBase.RVCD) AS rvcd, " +
|
||||
" LISTAGG(relBase.RVNM, ',') WITHIN GROUP (ORDER BY relBase.RVNM) AS rvcdName " +
|
||||
" FROM ( " +
|
||||
" SELECT DISTINCT rel.ZY_FISH_ID, rel.RVCD, rv.RVNM " +
|
||||
" FROM SD_FISHDICTORY_RLTN_B rel " +
|
||||
" LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = rel.RVCD " +
|
||||
" WHERE rel.RVCD <> 'ZY' " +
|
||||
" AND NVL(rel.IS_DELETED, 0) = 0 " +
|
||||
" AND rv.RVNM IS NOT NULL " +
|
||||
" ) relBase " +
|
||||
" GROUP BY relBase.ZY_FISH_ID " +
|
||||
") relAgg ON relAgg.zyFishId = src.ID " +
|
||||
"WHERE NVL(src.IS_DELETED, 0) = 0 ";
|
||||
}
|
||||
|
||||
private void fillZyFishRvcdNames(List<FprZyFishDicVo> list, String rvcdFilter) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
if (StrUtil.isNotBlank(rvcdFilter)) {
|
||||
for (FprZyFishDicVo item : list) {
|
||||
if (item != null && StrUtil.isBlank(item.getRvcdName()) && StrUtil.isNotBlank(item.getRvcd()) && !"null".equalsIgnoreCase(item.getRvcd())) {
|
||||
item.setRvcdName(querySingleRvcdName(item.getRvcd()));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (FprZyFishDicVo item : list) {
|
||||
if (item != null && item.getRvcdName() == null) {
|
||||
item.setRvcdName("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String querySingleRvcdName(String rvcd) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("rvcd", rvcd);
|
||||
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(
|
||||
"SELECT RVNM AS rvcdName FROM SD_RVCD_DIC WHERE RVCD = #{map.rvcd} AND ROWNUM = 1",
|
||||
paramMap
|
||||
);
|
||||
if (CollUtil.isEmpty(rows)) {
|
||||
return null;
|
||||
}
|
||||
Object value = rows.get(0).get("RVCDNAME");
|
||||
return value == null ? null : String.valueOf(value);
|
||||
}
|
||||
|
||||
private String buildMsstbprptDetailSelectSql(List<String> selectFields) {
|
||||
LinkedHashMap<String, String> columnMap = buildMsstbprptSelectColumnMap();
|
||||
if (CollUtil.isEmpty(selectFields)) {
|
||||
@ -1384,6 +1424,7 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
case "isDeleted" -> "t.isDeleted";
|
||||
case "zyFishId" -> "t.zyFishId";
|
||||
case "rvcd" -> "t.rvcd";
|
||||
case "rvcdName" -> "t.rvcdName";
|
||||
case "name" -> "t.name";
|
||||
case "type" -> "t.type";
|
||||
case "family" -> "t.family";
|
||||
@ -1412,26 +1453,33 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
||||
case "logo" -> "t.logo";
|
||||
case "inffile" -> "t.inffile";
|
||||
case "spawnMonth" -> "t.spawnMonth";
|
||||
case "orders" -> "t.orders";
|
||||
case "vlsr" -> "t.vlsr";
|
||||
case "vlsrTm" -> "t.vlsrTm";
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
private List<FprZyFishDicVo> paginateZyFishDicList(List<FprZyFishDicVo> resultList, DataSourceLoadOptionsBase loadOptions) {
|
||||
if (CollUtil.isEmpty(resultList) || loadOptions == null || loadOptions.getTake() == null || loadOptions.getTake() <= 0) {
|
||||
return resultList;
|
||||
private String buildZyFishDicOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
|
||||
List<String> orderItems = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(sorts)) {
|
||||
for (DataSourceRequest.SortDescriptor sort : sorts) {
|
||||
if (sort == null || StrUtil.isBlank(sort.getField())) {
|
||||
continue;
|
||||
}
|
||||
String column = mapZyFishDicColumn(sort.getField());
|
||||
if (StrUtil.isBlank(column)) {
|
||||
continue;
|
||||
}
|
||||
String direction = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir())
|
||||
? "DESC" : "ASC";
|
||||
orderItems.add(column + " " + direction + " NULLS LAST");
|
||||
}
|
||||
}
|
||||
int page = loadOptions.getSkip() == null ? 1 : loadOptions.getSkip(); // 页码从1开始,缺省为1
|
||||
// 如果页码 ≤ 0,强制设为1(避免负值)
|
||||
if (page < 1) {
|
||||
page = 1;
|
||||
if (orderItems.isEmpty()) {
|
||||
return " ORDER BY t.rvcd ASC NULLS LAST, t.name ASC";
|
||||
}
|
||||
int size = loadOptions.getTake();
|
||||
int start = (page - 1) * size;
|
||||
int end = Math.min(start + size, resultList.size());
|
||||
if (start >= resultList.size()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return new ArrayList<>(resultList.subList(start, end));
|
||||
return " ORDER BY " + String.join(", ", orderItems);
|
||||
}
|
||||
|
||||
private String formatSpawnMonth(String input) {
|
||||
|
||||
@ -47,6 +47,24 @@ public class VdMonitorController {
|
||||
return ResponseResult.successData(vdMonitorService.getKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/tree/GetKendoListCust")
|
||||
@Operation(summary = "视频站树级结构查询")
|
||||
public ResponseResult getVdTreeKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(vdMonitorService.getVdTreeKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/tree/GetKendoListCustSt")
|
||||
@Operation(summary = "视频站树级结构查询-站点维度")
|
||||
public ResponseResult getVdTreeKendoListCustSt(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(vdMonitorService.getVdTreeKendoListCustSt(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/vdpoint/GetKendoListCust")
|
||||
@Operation(summary = "视频站锚点接口")
|
||||
public ResponseResult getVdPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(vdMonitorService.getVdPointKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/runData/GetKendoListCust")
|
||||
@Operation(summary = "查询视频监控运行数据")
|
||||
public ResponseResult getRunDataKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
|
||||
@ -0,0 +1,86 @@
|
||||
package com.yfd.platform.qgc_env.vd.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@Schema(description = "视频站锚点信息")
|
||||
public class VdPointVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@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 rvnm;
|
||||
|
||||
@Schema(description = "电站名称")
|
||||
private String ennm;
|
||||
|
||||
@Schema(description = "栖息地编码")
|
||||
private String fhstcd;
|
||||
|
||||
@Schema(description = "栖息地名称")
|
||||
private String fhstnm;
|
||||
|
||||
@Schema(description = "站类名称")
|
||||
private String sttpName;
|
||||
|
||||
@Schema(description = "站址")
|
||||
private String stlc;
|
||||
|
||||
@Schema(description = "播放方式")
|
||||
private String playWay;
|
||||
|
||||
@Schema(description = "站点排序")
|
||||
private Integer siteStepSort;
|
||||
|
||||
@Schema(description = "基地流域编码")
|
||||
private String hbrvcd;
|
||||
}
|
||||
@ -0,0 +1,71 @@
|
||||
package com.yfd.platform.qgc_env.vd.entity.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Schema(description = "视频站树节点")
|
||||
public class VdTreeNodeVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "节点ID")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "节点名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "节点类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "节点类型名称")
|
||||
private String typeName;
|
||||
|
||||
@Schema(description = "排序值")
|
||||
private Integer sort;
|
||||
|
||||
@Schema(description = "父节点ID")
|
||||
private String parentId;
|
||||
|
||||
@Schema(description = "父节点名称")
|
||||
private String parentName;
|
||||
|
||||
@Schema(description = "是否有子节点")
|
||||
private Integer hasChildren;
|
||||
|
||||
@Schema(description = "播放地址")
|
||||
private String url;
|
||||
|
||||
@Schema(description = "播放方式")
|
||||
private String playWay;
|
||||
|
||||
@Schema(description = "设备序列号")
|
||||
private String deviceSerial;
|
||||
|
||||
@Schema(description = "接入方式")
|
||||
private String accessWay;
|
||||
|
||||
@Schema(description = "流协议")
|
||||
private String protocol;
|
||||
|
||||
@Schema(description = "清晰度")
|
||||
private String quality;
|
||||
|
||||
@Schema(description = "控制方式")
|
||||
private String controlMode;
|
||||
|
||||
@Schema(description = "设备状态")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "状态时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date statusTm;
|
||||
|
||||
@Schema(description = "子节点")
|
||||
private List<VdTreeNodeVo> children;
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package com.yfd.platform.qgc_env.vd.entity.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class VdTreeRowVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String stcd;
|
||||
private String stCode;
|
||||
private String stName;
|
||||
private String stnm;
|
||||
private String sttpCode;
|
||||
private String sttpName;
|
||||
private String sttpFullPath;
|
||||
private String rstcd;
|
||||
private String ennm;
|
||||
private String baseId;
|
||||
private String baseName;
|
||||
private String url;
|
||||
private String playWay;
|
||||
private Integer baseSort;
|
||||
private Integer rstcdStepSort;
|
||||
private Integer siteStepSort;
|
||||
private String deviceSerial;
|
||||
private String accessWay;
|
||||
private String protocol;
|
||||
private String quality;
|
||||
private String controlMode;
|
||||
private Integer status;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date statusTm;
|
||||
}
|
||||
@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.vd.service;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdTreeNodeVo;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdRunDataVo;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo;
|
||||
|
||||
@ -13,5 +14,11 @@ public interface VdMonitorService {
|
||||
|
||||
DataSourceResult<VdRunDataVo> getKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<VdTreeNodeVo> getVdTreeKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<VdTreeNodeVo> getVdTreeKendoListCustSt(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<?> getVdPointKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<VdRunDataVo> getRunDataKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
|
||||
@ -9,7 +9,10 @@ import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.common.GroupHelper;
|
||||
import com.yfd.platform.common.GroupingInfo;
|
||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdPointVo;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdRunDataVo;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdTreeNodeVo;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdTreeRowVo;
|
||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo;
|
||||
import com.yfd.platform.qgc_env.vd.service.VdMonitorService;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
@ -18,6 +21,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@ -118,6 +122,113 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
return queryLatestRunDataGroupList(dataSourceRequest, loadOptions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSourceResult<VdTreeNodeVo> getVdTreeKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
String filterSql = buildVdTreeFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ")
|
||||
.append("t.stcd AS stcd, ")
|
||||
.append("t.stCode AS stCode, ")
|
||||
.append("t.stName AS stName, ")
|
||||
.append("t.stnm AS stnm, ")
|
||||
.append("t.sttpCode AS sttpCode, ")
|
||||
.append("t.sttpName AS sttpName, ")
|
||||
.append("t.sttpFullPath AS sttpFullPath, ")
|
||||
.append("t.rstcd AS rstcd, ")
|
||||
.append("t.ennm AS ennm, ")
|
||||
.append("t.baseId AS baseId, ")
|
||||
.append("t.baseName AS baseName, ")
|
||||
.append("t.url AS url, ")
|
||||
.append("t.playWay AS playWay, ")
|
||||
.append("t.baseSort AS baseSort, ")
|
||||
.append("t.rstcdStepSort AS rstcdStepSort, ")
|
||||
.append("t.siteStepSort AS siteStepSort, ")
|
||||
.append("t.deviceSerial AS deviceSerial, ")
|
||||
.append("t.accessWay AS accessWay, ")
|
||||
.append("t.protocol AS protocol, ")
|
||||
.append("t.quality AS quality, ")
|
||||
.append("t.controlMode AS controlMode, ")
|
||||
.append("t.status AS status, ")
|
||||
.append("t.statusTm AS statusTm ")
|
||||
.append("FROM (")
|
||||
.append(buildVdTreeCoreSql())
|
||||
.append(") t WHERE 1 = 1 AND t.sttpCode != 'VD_FPRD'");
|
||||
if (StrUtil.isNotBlank(filterSql)) {
|
||||
sql.append(" AND ").append(filterSql).append(" ");
|
||||
}
|
||||
sql.append(" ORDER BY t.baseSort ASC NULLS LAST, t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC");
|
||||
|
||||
List<VdTreeRowVo> rows = microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, VdTreeRowVo.class);
|
||||
boolean baseScoped = containsNonBlankFilterValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "baseId");
|
||||
|
||||
DataSourceResult<VdTreeNodeVo> result = new DataSourceResult<>();
|
||||
List<VdTreeNodeVo> treeData = buildVdTreeNodes(rows, baseScoped);
|
||||
result.setData(treeData);
|
||||
result.setTotal((long) treeData.size());
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSourceResult<VdTreeNodeVo> getVdTreeKendoListCustSt(DataSourceRequest dataSourceRequest) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
String filterSql = buildVdTreeFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ")
|
||||
.append("t.stcd AS stcd, ")
|
||||
.append("t.stCode AS stCode, ")
|
||||
.append("t.stName AS stName, ")
|
||||
.append("t.stnm AS stnm, ")
|
||||
.append("t.sttpCode AS sttpCode, ")
|
||||
.append("t.sttpName AS sttpName, ")
|
||||
.append("t.sttpFullPath AS sttpFullPath, ")
|
||||
.append("t.rstcd AS rstcd, ")
|
||||
.append("t.ennm AS ennm, ")
|
||||
.append("t.baseId AS baseId, ")
|
||||
.append("t.baseName AS baseName, ")
|
||||
.append("t.url AS url, ")
|
||||
.append("t.playWay AS playWay, ")
|
||||
.append("t.baseSort AS baseSort, ")
|
||||
.append("t.rstcdStepSort AS rstcdStepSort, ")
|
||||
.append("t.siteStepSort AS siteStepSort, ")
|
||||
.append("t.deviceSerial AS deviceSerial, ")
|
||||
.append("t.accessWay AS accessWay, ")
|
||||
.append("t.protocol AS protocol, ")
|
||||
.append("t.quality AS quality, ")
|
||||
.append("t.controlMode AS controlMode, ")
|
||||
.append("t.status AS status, ")
|
||||
.append("t.statusTm AS statusTm ")
|
||||
.append("FROM (")
|
||||
.append(buildVdTreeCoreSql())
|
||||
.append(") t WHERE 1 = 1 ");
|
||||
if (StrUtil.isNotBlank(filterSql)) {
|
||||
sql.append(" AND ").append(filterSql).append(" ");
|
||||
}
|
||||
sql.append(" ORDER BY t.baseSort ASC NULLS LAST, t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC");
|
||||
|
||||
List<VdTreeRowVo> rows = microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, VdTreeRowVo.class);
|
||||
boolean baseScoped = containsNonBlankFilterValue(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "baseId");
|
||||
|
||||
DataSourceResult<VdTreeNodeVo> result = new DataSourceResult<>();
|
||||
List<VdTreeNodeVo> treeData = buildVdTreeNodesByStation(rows, baseScoped);
|
||||
result.setData(treeData);
|
||||
result.setTotal((long) treeData.size());
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSourceResult<?> getVdPointKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||
if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
|
||||
return getKendoListCust(dataSourceRequest);
|
||||
}
|
||||
return queryVdPointDetailList(dataSourceRequest, loadOptions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSourceResult<VdRunDataVo> getRunDataKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||
@ -131,9 +242,30 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
GroupingInfo[] groups,
|
||||
String filterSql,
|
||||
Map<String, Object> paramMap) {
|
||||
List<DataSourceRequest.GroupDescriptor> groupDescriptors = dataSourceRequest == null ? null : dataSourceRequest.getGroup();
|
||||
List<String> selectItems = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(groupDescriptors)) {
|
||||
for (DataSourceRequest.GroupDescriptor descriptor : groupDescriptors) {
|
||||
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
|
||||
continue;
|
||||
}
|
||||
String column = mapColumn(descriptor.getField());
|
||||
if (StrUtil.isBlank(column)) {
|
||||
continue;
|
||||
}
|
||||
selectItems.add(column + " AS " + descriptor.getField());
|
||||
selectItems.add("COUNT(1) AS count_" + descriptor.getField());
|
||||
}
|
||||
}
|
||||
if (selectItems.isEmpty()) {
|
||||
selectItems.add("t.sttpCode AS sttpCode");
|
||||
selectItems.add("COUNT(1) AS count_sttpCode");
|
||||
}
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT t.sttpCode AS sttpCode, COUNT(1) AS count_sttpCode ")
|
||||
.append("FROM (")
|
||||
sql.append("SELECT ")
|
||||
.append(String.join(", ", selectItems))
|
||||
.append(" FROM (")
|
||||
.append(buildVmsstbprptViewSql())
|
||||
.append(") t ")
|
||||
.append("WHERE 1 = 1 ");
|
||||
@ -141,8 +273,24 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
sql.append(" AND ").append(filterSql).append(" ");
|
||||
}
|
||||
|
||||
sql.append(" GROUP BY t.sttpCode ");
|
||||
sql.append(buildOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getGroup()));
|
||||
List<String> groupByColumns = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(groupDescriptors)) {
|
||||
for (DataSourceRequest.GroupDescriptor descriptor : groupDescriptors) {
|
||||
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
|
||||
continue;
|
||||
}
|
||||
String column = mapColumn(descriptor.getField());
|
||||
if (StrUtil.isNotBlank(column)) {
|
||||
groupByColumns.add(column);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!groupByColumns.isEmpty()) {
|
||||
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns));
|
||||
} else {
|
||||
sql.append(" GROUP BY t.sttpCode ");
|
||||
}
|
||||
sql.append(buildOrderBySql(groupDescriptors));
|
||||
|
||||
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
|
||||
DataSourceResult<VdVmsstbprptVo> result = new DataSourceResult<>();
|
||||
@ -294,6 +442,32 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
return queryRunDataGroupList(dataSourceRequest, loadOptions, buildLatestRunDataCoreSql());
|
||||
}
|
||||
|
||||
private DataSourceResult<VdPointVo> queryVdPointDetailList(DataSourceRequest dataSourceRequest,
|
||||
DataSourceLoadOptionsBase loadOptions) {
|
||||
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ")
|
||||
.append(buildVdPointSelectSql())
|
||||
.append("FROM (")
|
||||
.append(buildVdPointCoreSql())
|
||||
.append(") t WHERE 1 = 1 ");
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
String filterSql = buildFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||
if (StrUtil.isNotBlank(filterSql)) {
|
||||
sql.append(" AND ").append(filterSql).append(" ");
|
||||
}
|
||||
sql.append(buildVdPointOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||
|
||||
List<VdPointVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
|
||||
page, sql.toString(), paramMap, VdPointVo.class);
|
||||
DataSourceResult<VdPointVo> result = new DataSourceResult<>();
|
||||
result.setData(list);
|
||||
result.setTotal(page != null ? page.getTotal() : list.size());
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
|
||||
private DataSourceResult<VdRunDataVo> queryRunDataGroupList(DataSourceRequest dataSourceRequest,
|
||||
DataSourceLoadOptionsBase loadOptions,
|
||||
String coreSql) {
|
||||
@ -418,12 +592,57 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 ";
|
||||
}
|
||||
|
||||
private String buildVdTreeCoreSql() {
|
||||
return "SELECT " +
|
||||
"base.STCD AS stcd, " +
|
||||
"base.STNM AS stnm, " +
|
||||
"base.CSTCD AS stCode, " +
|
||||
"cst.STNM AS stName, " +
|
||||
"base.STTP AS sttpCode, " +
|
||||
"sttp.STTP_NAME AS sttpName, " +
|
||||
"sttp.FULL_PATH AS sttpFullPath, " +
|
||||
"base.RSTCD AS rstcd, " +
|
||||
"eng.ENNM AS ennm, " +
|
||||
"NVL(eng.BASE_ID, base.BASE_ID) AS baseId, " +
|
||||
"hb.BASENAME AS baseName, " +
|
||||
"base.URL AS url, " +
|
||||
"CASE WHEN base.URL IS NULL THEN NULL WHEN INSTR(base.URL, 'm3u8') > 0 THEN '1' ELSE '0' END AS playWay, " +
|
||||
"NVL(hb.ORDER_INDEX, 999999) AS baseSort, " +
|
||||
"NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " +
|
||||
"NVL(base.ORDER_INDEX, 999999) AS siteStepSort, " +
|
||||
"base.DEVICE_SERIAL AS deviceSerial, " +
|
||||
"base.ACCESS_WAY AS accessWay, " +
|
||||
"base.PROTOCOL AS protocol, " +
|
||||
"base.QUALITY AS quality, " +
|
||||
"base.CONTROL_MODE AS controlMode, " +
|
||||
"status.STATUS AS status, " +
|
||||
"status.TM AS statusTm " +
|
||||
"FROM (" + buildVdDeviceBaseSql() + ") base " +
|
||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = base.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " +
|
||||
" AND NVL(hb.IS_DELETED, 0) = 0 AND NVL(hb.ENABLED, 1) = 1 " +
|
||||
"LEFT JOIN (" + buildStationBaseSql() + ") cst ON cst.STCD = base.CSTCD " +
|
||||
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = base.STTP " +
|
||||
" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " +
|
||||
"LEFT JOIN ( " +
|
||||
"SELECT detail.STCD, detail.TM, detail.STATUS " +
|
||||
"FROM MS_SBGZSTAT_B detail " +
|
||||
"INNER JOIN ( " +
|
||||
"SELECT STCD, MAX(TM) AS MAX_TM FROM MS_SBGZSTAT_B " +
|
||||
"WHERE NVL(IS_DELETED, 0) = 0 GROUP BY STCD " +
|
||||
") latest ON detail.STCD = latest.STCD AND detail.TM = latest.MAX_TM " +
|
||||
"WHERE NVL(detail.IS_DELETED, 0) = 0 " +
|
||||
") status ON status.STCD = base.STCD " +
|
||||
"WHERE base.STTP LIKE 'VD_%' ";
|
||||
}
|
||||
|
||||
private String buildVdDeviceBaseSql() {
|
||||
return "SELECT vd.STCD, vd.STNM, vd.MNTP, vd.STTP, vd.LGTD, vd.LTTD, vd.ELEV, vd.STLC, " +
|
||||
" vd.JCDT, vd.WDDT, vd.BLDSTT_CODE, vd.USFL, vd.DTIN, vd.STINDX, vd.RSTCD, vd.BASE_ID, " +
|
||||
" vd.HBRVCD, vd.RVCD, vd.ADDVCD, vd.CSTCD, vd.FHSTCD, CAST(NULL AS VARCHAR2(3000)) AS INTRODUCE, " +
|
||||
" CAST(NULL AS VARCHAR2(255)) AS LOGO, CAST(NULL AS VARCHAR2(1000)) AS INFFILE, " +
|
||||
" vd.DTFRQCY, vd.REMARK, vd.VLSR, vd.VLSR_TM, vd.URL AS URL, CAST(NULL AS NUMBER(8,0)) AS ORDER_INDEX, " +
|
||||
" vd.DTFRQCY, vd.REMARK, vd.VLSR, vd.VLSR_TM, vd.URL AS URL, vd.DEVICE_SERIAL, vd.ACCESS_WAY, " +
|
||||
" vd.PROTOCOL, vd.QUALITY, vd.CONTROL_MODE, CAST(NULL AS NUMBER(8,0)) AS ORDER_INDEX, " +
|
||||
" 'SD_VDINFO_B' AS SOURCE_TABLE " +
|
||||
"FROM SD_VDINFO_B vd WHERE 1=1 " +
|
||||
// " AND vd.STTP = 'VD_FP' "+
|
||||
@ -431,11 +650,59 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
"SELECT sonar.STCD, sonar.STNM, sonar.MNTP, sonar.STTP, sonar.LGTD, sonar.LTTD, sonar.ELEV, sonar.STLC, " +
|
||||
" sonar.JCDT, sonar.WDDT, sonar.BLDSTT_CODE, sonar.USFL, sonar.DTIN, sonar.STINDX, sonar.RSTCD, sonar.BASE_ID, " +
|
||||
" sonar.HBRVCD, sonar.RVCD, sonar.ADDVCD, CAST(NULL AS VARCHAR2(36)) AS CSTCD, CAST(NULL AS VARCHAR2(36)) AS FHSTCD, " +
|
||||
" sonar.INTRODUCE, sonar.LOGO, sonar.INFFILE, sonar.DTFRQCY, sonar.REMARK, sonar.VLSR, sonar.VLSR_TM, CAST(NULL AS VARCHAR2(512)) AS URL, sonar.ORDER_INDEX, " +
|
||||
" sonar.INTRODUCE, sonar.LOGO, sonar.INFFILE, sonar.DTFRQCY, sonar.REMARK, sonar.VLSR, sonar.VLSR_TM, CAST(NULL AS VARCHAR2(512)) AS URL, " +
|
||||
" CAST(NULL AS VARCHAR2(255)) AS DEVICE_SERIAL, CAST(NULL AS VARCHAR2(10)) AS ACCESS_WAY, " +
|
||||
" CAST(NULL AS VARCHAR2(50)) AS PROTOCOL, CAST(NULL AS VARCHAR2(50)) AS QUALITY, CAST(NULL AS VARCHAR2(2048)) AS CONTROL_MODE, sonar.ORDER_INDEX, " +
|
||||
" 'SD_SONAR_B_H' AS SOURCE_TABLE " +
|
||||
"FROM SD_SONAR_B_H sonar WHERE NVL(sonar.IS_DELETED, 0) = 0 AND sonar.STTP IN ('VD_WVD', 'VD_SN') ";
|
||||
}
|
||||
|
||||
private String buildVdPointCoreSql() {
|
||||
return "SELECT " +
|
||||
"src.STTP AS sttp, " +
|
||||
"src.STCD AS stcd, " +
|
||||
"src.LGTD AS lgtd, " +
|
||||
"src.LTTD AS lttd, " +
|
||||
"CAST(NULL AS NUMBER(10, 6)) AS dtmel, " +
|
||||
"CASE " +
|
||||
" WHEN NVL(eng.HBRVCD, src.HBRVCD) = 'SJLY126' THEN CASE src.STTP " +
|
||||
" WHEN 'VD_FBFM' THEN 'fbfm_spjk' " +
|
||||
" WHEN 'VD_EQS' THEN 'eqs_spjk' " +
|
||||
" WHEN 'VD_FB' THEN 'fb_spjk' " +
|
||||
" WHEN 'VD_FP' THEN 'fp_spjk' " +
|
||||
" WHEN 'VD_FH' THEN 'fh_spjk' " +
|
||||
" WHEN 'VD_VA' THEN 'va_spjk' " +
|
||||
" WHEN 'VD_VP' THEN 'vp_spjk' " +
|
||||
" WHEN 'VD_DW' THEN 'dw_spjk' " +
|
||||
" WHEN 'VD_WQ' THEN 'wq_spjk' " +
|
||||
" ELSE 'spjk' END " +
|
||||
" ELSE 'spjk' END AS anchoPointState, " +
|
||||
"'VD' AS sttpMap, " +
|
||||
"src.STNM AS titleName, " +
|
||||
"400000 AS distance, " +
|
||||
"NVL(eng.RVCD, src.RVCD) AS rvcd, " +
|
||||
"NVL(eng.ADDVCD, src.ADDVCD) AS addvcd, " +
|
||||
"NVL(eng.BASE_ID, src.BASE_ID) AS baseId, " +
|
||||
"src.RSTCD AS rstcds, " +
|
||||
"'VD' AS sttpCode, " +
|
||||
"src.STNM AS stnm, " +
|
||||
"rv.RVNM AS rvnm, " +
|
||||
"eng.ENNM AS ennm, " +
|
||||
"src.FHSTCD AS fhstcd, " +
|
||||
"fh.STNM AS fhstnm, " +
|
||||
"sttp.STTP_NAME AS sttpName, " +
|
||||
"src.STLC AS stlc, " +
|
||||
"CASE WHEN src.URL IS NULL THEN NULL WHEN INSTR(src.URL, 'm3u8') > 0 THEN '1' ELSE '0' END AS playWay, " +
|
||||
"src.ORDER_INDEX AS siteStepSort, " +
|
||||
"NVL(eng.HBRVCD, src.HBRVCD) AS hbrvcd " +
|
||||
"FROM (" + buildVdDeviceBaseSql() + ") src " +
|
||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = src.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||
"LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = src.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " +
|
||||
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = NVL(eng.RVCD, src.RVCD) " +
|
||||
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = src.STTP " +
|
||||
" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 ";
|
||||
}
|
||||
|
||||
private String buildRunDataCoreSql() {
|
||||
return "SELECT " +
|
||||
"run.ID AS id, " +
|
||||
@ -591,6 +858,33 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
return String.join(", ", actualColumns);
|
||||
}
|
||||
|
||||
private String buildVdPointSelectSql() {
|
||||
return "t.sttp AS sttp, " +
|
||||
"t.stcd AS stcd, " +
|
||||
"t.lgtd AS lgtd, " +
|
||||
"t.lttd AS lttd, " +
|
||||
"t.dtmel AS dtmel, " +
|
||||
"t.anchoPointState AS anchoPointState, " +
|
||||
"t.sttpMap AS sttpMap, " +
|
||||
"t.titleName AS titleName, " +
|
||||
"t.distance AS distance, " +
|
||||
"t.rvcd AS rvcd, " +
|
||||
"t.addvcd AS addvcd, " +
|
||||
"t.baseId AS baseId, " +
|
||||
"t.rstcds AS rstcds, " +
|
||||
"t.sttpCode AS sttpCode, " +
|
||||
"t.stnm AS stnm, " +
|
||||
"t.rvnm AS rvnm, " +
|
||||
"t.ennm AS ennm, " +
|
||||
"t.fhstcd AS fhstcd, " +
|
||||
"t.fhstnm AS fhstnm, " +
|
||||
"t.sttpName AS sttpName, " +
|
||||
"t.stlc AS stlc, " +
|
||||
"t.playWay AS playWay, " +
|
||||
"t.siteStepSort AS siteStepSort, " +
|
||||
"t.hbrvcd AS hbrvcd ";
|
||||
}
|
||||
|
||||
private String buildRunDataOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
||||
if (CollUtil.isEmpty(sortList)) {
|
||||
return " ORDER BY t.baseStepSort ASC, t.rvcdStepSort ASC, t.rstcdStepSort ASC, t.siteStepSort ASC, t.stcd ASC, t.tm DESC";
|
||||
@ -613,6 +907,28 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
return " ORDER BY " + String.join(", ", orderItems);
|
||||
}
|
||||
|
||||
private String buildVdPointOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
||||
if (CollUtil.isEmpty(sortList)) {
|
||||
return " ORDER BY t.siteStepSort ASC NULLS LAST, t.stcd ASC";
|
||||
}
|
||||
List<String> orderItems = new ArrayList<>();
|
||||
for (DataSourceRequest.SortDescriptor sort : sortList) {
|
||||
if (sort == null || StrUtil.isBlank(sort.getField())) {
|
||||
continue;
|
||||
}
|
||||
String column = mapColumn(sort.getField());
|
||||
if (StrUtil.isBlank(column)) {
|
||||
continue;
|
||||
}
|
||||
String direction = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC";
|
||||
orderItems.add(column + " " + direction + " NULLS LAST");
|
||||
}
|
||||
if (orderItems.isEmpty()) {
|
||||
return " ORDER BY t.siteStepSort ASC NULLS LAST, t.stcd ASC";
|
||||
}
|
||||
return " ORDER BY " + String.join(", ", orderItems);
|
||||
}
|
||||
|
||||
private String buildRunDataGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
|
||||
if (CollUtil.isEmpty(groups)) {
|
||||
return "";
|
||||
@ -641,6 +957,42 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
};
|
||||
}
|
||||
|
||||
private String buildVdTreeFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||
Map<String, Object> paramMap,
|
||||
int[] indexHolder) {
|
||||
if (filter == null) {
|
||||
return "";
|
||||
}
|
||||
if (StrUtil.isNotBlank(filter.getField())) {
|
||||
return buildVdTreeLeafCondition(filter, paramMap, indexHolder);
|
||||
}
|
||||
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||
return "";
|
||||
}
|
||||
List<String> conditions = new ArrayList<>();
|
||||
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||
String childSql = buildVdTreeFilterCondition(child, paramMap, indexHolder);
|
||||
if (StrUtil.isNotBlank(childSql)) {
|
||||
conditions.add("(" + childSql + ")");
|
||||
}
|
||||
}
|
||||
if (conditions.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
|
||||
return String.join(logic, conditions);
|
||||
}
|
||||
|
||||
private String buildVdTreeLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||
Map<String, Object> paramMap,
|
||||
int[] indexHolder) {
|
||||
String column = mapVdTreeColumn(filter.getField());
|
||||
if (StrUtil.isBlank(column)) {
|
||||
return "";
|
||||
}
|
||||
return buildSimpleCondition(column, "vdTreeParam", filter, paramMap, indexHolder, isVdTreeDateField(filter));
|
||||
}
|
||||
|
||||
private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||
Map<String, Object> paramMap,
|
||||
int[] indexHolder) {
|
||||
@ -804,6 +1156,16 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
return "date".equalsIgnoreCase(filter.getDataType());
|
||||
}
|
||||
|
||||
private boolean isVdTreeDateField(DataSourceRequest.FilterDescriptor filter) {
|
||||
if (filter == null || StrUtil.isBlank(filter.getField())) {
|
||||
return false;
|
||||
}
|
||||
if ("statusTm".equalsIgnoreCase(filter.getField())) {
|
||||
return true;
|
||||
}
|
||||
return "date".equalsIgnoreCase(filter.getDataType());
|
||||
}
|
||||
|
||||
private String buildValueExpr(String paramKey, boolean dateField, Object value) {
|
||||
if (!dateField || value == null) {
|
||||
return "#{map." + paramKey + "}";
|
||||
@ -839,11 +1201,41 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
return values;
|
||||
}
|
||||
|
||||
private String mapVdTreeColumn(String field) {
|
||||
if (StrUtil.isBlank(field)) {
|
||||
return null;
|
||||
}
|
||||
return switch (field) {
|
||||
case "stcd" -> "t.stcd";
|
||||
case "stCode" -> "t.stCode";
|
||||
case "stName" -> "t.stName";
|
||||
case "stnm" -> "t.stnm";
|
||||
case "sttpCode" -> "t.sttpCode";
|
||||
case "sttpName" -> "t.sttpName";
|
||||
case "sttpFullPath" -> "t.sttpFullPath";
|
||||
case "rstcd" -> "t.rstcd";
|
||||
case "ennm" -> "t.ennm";
|
||||
case "baseId" -> "t.baseId";
|
||||
case "baseName" -> "t.baseName";
|
||||
case "url" -> "t.url";
|
||||
case "playWay" -> "t.playWay";
|
||||
case "deviceSerial" -> "t.deviceSerial";
|
||||
case "accessWay" -> "t.accessWay";
|
||||
case "protocol" -> "t.protocol";
|
||||
case "quality" -> "t.quality";
|
||||
case "controlMode" -> "t.controlMode";
|
||||
case "status" -> "NVL(t.status, 0)";
|
||||
case "statusTm" -> "t.statusTm";
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
private String mapColumn(String field) {
|
||||
if (StrUtil.isBlank(field)) {
|
||||
return null;
|
||||
}
|
||||
return switch (field) {
|
||||
case "sttp" -> "t.sttp";
|
||||
case "sttpCode" -> "t.sttpCode";
|
||||
case "sttpName" -> "t.sttpName";
|
||||
case "sttpFullPath" -> "t.sttpFullPath";
|
||||
@ -878,11 +1270,15 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
case "vlsr" -> "t.vlsr";
|
||||
case "vlsrTm" -> "t.vlsrTm";
|
||||
case "rvcd" -> "t.rvcd";
|
||||
case "rvnm" -> "t.rvnm";
|
||||
case "addvcd" -> "t.addvcd";
|
||||
case "dtin" -> "t.dtin";
|
||||
case "usfl" -> "t.usfl";
|
||||
case "url" -> "t.url";
|
||||
case "playWay" -> "t.playWay";
|
||||
case "titleName" -> "t.titleName";
|
||||
case "rstcds" -> "t.rstcds";
|
||||
case "anchoPointState" -> "t.anchoPointState";
|
||||
case "sourceTable" -> "t.sourceTable";
|
||||
case "baseStepSort" -> "t.baseStepSort";
|
||||
case "rstcdStepSort" -> "t.rstcdStepSort";
|
||||
@ -971,4 +1367,265 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
||||
}
|
||||
return " ORDER BY " + String.join(", ", orderItems);
|
||||
}
|
||||
|
||||
private boolean containsNonBlankFilterValue(DataSourceRequest.FilterDescriptor filter, String fieldName) {
|
||||
if (filter == null || StrUtil.isBlank(fieldName)) {
|
||||
return false;
|
||||
}
|
||||
if (fieldName.equalsIgnoreCase(filter.getField())) {
|
||||
if (filter.getValue() instanceof List<?> list) {
|
||||
return CollUtil.isNotEmpty(list);
|
||||
}
|
||||
return StrUtil.isNotBlank(filter.getValue() == null ? null : String.valueOf(filter.getValue()));
|
||||
}
|
||||
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||
return false;
|
||||
}
|
||||
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||
if (containsNonBlankFilterValue(child, fieldName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> buildVdTreeNodes(List<VdTreeRowVo> rows, boolean baseScoped) {
|
||||
List<VdTreeNodeVo> stationNodes = buildStationTreeNodes(rows, baseScoped);
|
||||
if (baseScoped) {
|
||||
return sortTreeNodes(stationNodes);
|
||||
}
|
||||
|
||||
LinkedHashMap<String, VdTreeNodeVo> baseNodeMap = new LinkedHashMap<>();
|
||||
List<VdTreeNodeVo> topLevelWithoutBase = new ArrayList<>();
|
||||
for (VdTreeRowVo row : rows) {
|
||||
if (row == null) {
|
||||
continue;
|
||||
}
|
||||
if (StrUtil.isBlank(row.getBaseId())) {
|
||||
continue;
|
||||
}
|
||||
baseNodeMap.computeIfAbsent(row.getBaseId(), key -> {
|
||||
VdTreeNodeVo node = new VdTreeNodeVo();
|
||||
node.setId(key);
|
||||
node.setName(StrUtil.blankToDefault(row.getBaseName(), key));
|
||||
node.setType("PSB");
|
||||
node.setTypeName("基地");
|
||||
node.setSort(defaultSort(row.getBaseSort()));
|
||||
node.setHasChildren(1);
|
||||
node.setParentId(null);
|
||||
node.setParentName(null);
|
||||
return node;
|
||||
});
|
||||
}
|
||||
|
||||
Map<String, List<VdTreeNodeVo>> stationByBase = new LinkedHashMap<>();
|
||||
for (VdTreeNodeVo stationNode : stationNodes) {
|
||||
if (StrUtil.isBlank(stationNode.getParentId())) {
|
||||
topLevelWithoutBase.add(stationNode);
|
||||
continue;
|
||||
}
|
||||
stationByBase.computeIfAbsent(stationNode.getParentId(), key -> new ArrayList<>()).add(stationNode);
|
||||
}
|
||||
|
||||
List<VdTreeNodeVo> result = new ArrayList<>();
|
||||
for (Map.Entry<String, VdTreeNodeVo> entry : baseNodeMap.entrySet()) {
|
||||
VdTreeNodeVo baseNode = entry.getValue();
|
||||
baseNode.setChildren(sortTreeNodes(stationByBase.get(entry.getKey())));
|
||||
result.add(baseNode);
|
||||
}
|
||||
result.addAll(topLevelWithoutBase);
|
||||
return sortTreeNodes(result);
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> buildVdTreeNodesByStation(List<VdTreeRowVo> rows, boolean baseScoped) {
|
||||
List<VdTreeNodeVo> stationNodes = buildStationCodeTreeNodes(rows, baseScoped);
|
||||
if (baseScoped) {
|
||||
return sortTreeNodes(stationNodes);
|
||||
}
|
||||
|
||||
LinkedHashMap<String, VdTreeNodeVo> baseNodeMap = new LinkedHashMap<>();
|
||||
List<VdTreeNodeVo> topLevelWithoutBase = new ArrayList<>();
|
||||
for (VdTreeRowVo row : rows) {
|
||||
if (row == null || StrUtil.isBlank(row.getBaseId())) {
|
||||
continue;
|
||||
}
|
||||
baseNodeMap.computeIfAbsent(row.getBaseId(), key -> {
|
||||
VdTreeNodeVo node = new VdTreeNodeVo();
|
||||
node.setId(key);
|
||||
node.setName(StrUtil.blankToDefault(row.getBaseName(), key));
|
||||
node.setType("PSB");
|
||||
node.setTypeName("基地");
|
||||
node.setSort(defaultSort(row.getBaseSort()));
|
||||
node.setHasChildren(1);
|
||||
node.setParentId(null);
|
||||
node.setParentName(null);
|
||||
return node;
|
||||
});
|
||||
}
|
||||
|
||||
Map<String, List<VdTreeNodeVo>> stationByBase = new LinkedHashMap<>();
|
||||
for (VdTreeNodeVo stationNode : stationNodes) {
|
||||
if (StrUtil.isBlank(stationNode.getParentId())) {
|
||||
topLevelWithoutBase.add(stationNode);
|
||||
continue;
|
||||
}
|
||||
stationByBase.computeIfAbsent(stationNode.getParentId(), key -> new ArrayList<>()).add(stationNode);
|
||||
}
|
||||
|
||||
List<VdTreeNodeVo> result = new ArrayList<>();
|
||||
for (Map.Entry<String, VdTreeNodeVo> entry : baseNodeMap.entrySet()) {
|
||||
VdTreeNodeVo baseNode = entry.getValue();
|
||||
baseNode.setChildren(sortTreeNodes(stationByBase.get(entry.getKey())));
|
||||
result.add(baseNode);
|
||||
}
|
||||
result.addAll(topLevelWithoutBase);
|
||||
return sortTreeNodes(result);
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> buildStationTreeNodes(List<VdTreeRowVo> rows, boolean baseScoped) {
|
||||
LinkedHashMap<String, List<VdTreeRowVo>> stationRowMap = new LinkedHashMap<>();
|
||||
for (VdTreeRowVo row : rows) {
|
||||
if (row == null || StrUtil.isBlank(row.getRstcd())) {
|
||||
continue;
|
||||
}
|
||||
stationRowMap.computeIfAbsent(row.getRstcd(), key -> new ArrayList<>()).add(row);
|
||||
}
|
||||
|
||||
List<VdTreeNodeVo> stationNodes = new ArrayList<>();
|
||||
for (Map.Entry<String, List<VdTreeRowVo>> entry : stationRowMap.entrySet()) {
|
||||
List<VdTreeRowVo> stationRows = entry.getValue();
|
||||
if (CollUtil.isEmpty(stationRows)) {
|
||||
continue;
|
||||
}
|
||||
VdTreeRowVo sample = stationRows.get(0);
|
||||
VdTreeNodeVo stationNode = new VdTreeNodeVo();
|
||||
stationNode.setId(entry.getKey());
|
||||
stationNode.setName(StrUtil.blankToDefault(sample.getEnnm(), entry.getKey()));
|
||||
stationNode.setType("ENG");
|
||||
stationNode.setTypeName("电站");
|
||||
stationNode.setSort(defaultSort(sample.getRstcdStepSort()));
|
||||
stationNode.setHasChildren(1);
|
||||
if (baseScoped) {
|
||||
stationNode.setParentId(null);
|
||||
stationNode.setParentName(null);
|
||||
} else {
|
||||
stationNode.setParentId(sample.getBaseId());
|
||||
stationNode.setParentName(sample.getBaseName());
|
||||
}
|
||||
stationNode.setChildren(buildSiteTreeNodes(stationRows));
|
||||
stationNodes.add(stationNode);
|
||||
}
|
||||
return sortTreeNodes(stationNodes);
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> buildSiteTreeNodes(List<VdTreeRowVo> rows) {
|
||||
LinkedHashMap<String, VdTreeNodeVo> siteNodeMap = new LinkedHashMap<>();
|
||||
for (VdTreeRowVo row : rows) {
|
||||
if (row == null || StrUtil.isBlank(row.getStcd()) || siteNodeMap.containsKey(row.getStcd())) {
|
||||
continue;
|
||||
}
|
||||
VdTreeNodeVo node = new VdTreeNodeVo();
|
||||
node.setId(row.getStcd());
|
||||
node.setName(StrUtil.blankToDefault(row.getStnm(), row.getStcd()));
|
||||
node.setType(row.getSttpCode());
|
||||
node.setTypeName(row.getSttpName());
|
||||
node.setSort(defaultSort(row.getSiteStepSort()));
|
||||
node.setHasChildren(0);
|
||||
node.setParentId(row.getRstcd());
|
||||
node.setParentName(row.getEnnm());
|
||||
node.setUrl(row.getUrl());
|
||||
node.setPlayWay(row.getPlayWay());
|
||||
node.setDeviceSerial(row.getDeviceSerial());
|
||||
node.setAccessWay(row.getAccessWay());
|
||||
node.setProtocol(row.getProtocol());
|
||||
node.setQuality(row.getQuality());
|
||||
node.setControlMode(row.getControlMode());
|
||||
node.setStatus(row.getStatus());
|
||||
node.setStatusTm(row.getStatusTm());
|
||||
siteNodeMap.put(row.getStcd(), node);
|
||||
}
|
||||
return sortTreeNodes(new ArrayList<>(siteNodeMap.values()));
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> buildStationCodeTreeNodes(List<VdTreeRowVo> rows, boolean baseScoped) {
|
||||
LinkedHashMap<String, List<VdTreeRowVo>> stationRowMap = new LinkedHashMap<>();
|
||||
for (VdTreeRowVo row : rows) {
|
||||
if (row == null || StrUtil.isBlank(row.getStCode())) {
|
||||
continue;
|
||||
}
|
||||
stationRowMap.computeIfAbsent(row.getStCode(), key -> new ArrayList<>()).add(row);
|
||||
}
|
||||
|
||||
List<VdTreeNodeVo> stationNodes = new ArrayList<>();
|
||||
for (Map.Entry<String, List<VdTreeRowVo>> entry : stationRowMap.entrySet()) {
|
||||
List<VdTreeRowVo> stationRows = entry.getValue();
|
||||
if (CollUtil.isEmpty(stationRows)) {
|
||||
continue;
|
||||
}
|
||||
VdTreeRowVo sample = stationRows.get(0);
|
||||
VdTreeNodeVo stationNode = new VdTreeNodeVo();
|
||||
stationNode.setId(entry.getKey());
|
||||
stationNode.setName(StrUtil.blankToDefault(sample.getStName(), entry.getKey()));
|
||||
stationNode.setType("VD_FB");
|
||||
stationNode.setTypeName("鱼类增殖站");
|
||||
stationNode.setSort(defaultSort(sample.getRstcdStepSort()));
|
||||
stationNode.setHasChildren(1);
|
||||
if (baseScoped) {
|
||||
stationNode.setParentId(null);
|
||||
stationNode.setParentName(null);
|
||||
} else {
|
||||
stationNode.setParentId(sample.getBaseId());
|
||||
stationNode.setParentName(sample.getBaseName());
|
||||
}
|
||||
stationNode.setChildren(buildSiteTreeNodesByStation(stationRows));
|
||||
stationNodes.add(stationNode);
|
||||
}
|
||||
return sortTreeNodes(stationNodes);
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> buildSiteTreeNodesByStation(List<VdTreeRowVo> rows) {
|
||||
LinkedHashMap<String, VdTreeNodeVo> siteNodeMap = new LinkedHashMap<>();
|
||||
for (VdTreeRowVo row : rows) {
|
||||
if (row == null || StrUtil.isBlank(row.getStcd()) || siteNodeMap.containsKey(row.getStcd())) {
|
||||
continue;
|
||||
}
|
||||
VdTreeNodeVo node = new VdTreeNodeVo();
|
||||
node.setId(row.getStcd());
|
||||
node.setName(StrUtil.blankToDefault(row.getStnm(), row.getStcd()));
|
||||
node.setType(row.getSttpCode());
|
||||
node.setTypeName(row.getSttpName());
|
||||
node.setSort(defaultSort(row.getSiteStepSort()));
|
||||
node.setHasChildren(0);
|
||||
node.setParentId(row.getStCode());
|
||||
node.setParentName(row.getStName());
|
||||
node.setUrl(row.getUrl());
|
||||
node.setPlayWay(row.getPlayWay());
|
||||
node.setDeviceSerial(row.getDeviceSerial());
|
||||
node.setAccessWay(row.getAccessWay());
|
||||
node.setProtocol(row.getProtocol());
|
||||
node.setQuality(row.getQuality());
|
||||
node.setControlMode(row.getControlMode());
|
||||
node.setStatus(row.getStatus());
|
||||
node.setStatusTm(row.getStatusTm());
|
||||
siteNodeMap.put(row.getStcd(), node);
|
||||
}
|
||||
return sortTreeNodes(new ArrayList<>(siteNodeMap.values()));
|
||||
}
|
||||
|
||||
private List<VdTreeNodeVo> sortTreeNodes(List<VdTreeNodeVo> nodes) {
|
||||
if (CollUtil.isEmpty(nodes)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
nodes.sort(Comparator.comparing(VdMonitorServiceImpl::sortValue)
|
||||
.thenComparing(node -> StrUtil.blankToDefault(node.getId(), "")));
|
||||
return nodes;
|
||||
}
|
||||
|
||||
private static Integer sortValue(VdTreeNodeVo node) {
|
||||
return node == null ? 999999 : defaultSort(node.getSort());
|
||||
}
|
||||
|
||||
private static Integer defaultSort(Integer sort) {
|
||||
return sort == null ? 999999 : sort;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
package com.yfd.platform.qgc_env.warn.controller;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.qgc_env.warn.service.WarnDataService;
|
||||
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("/warn")
|
||||
@Tag(name = "告警状态模块")
|
||||
@Validated
|
||||
public class WarnDataController {
|
||||
|
||||
@Resource
|
||||
private WarnDataService warnDataService;
|
||||
|
||||
@PostMapping("/stcd/eng/GetKendoListCust")
|
||||
@Operation(summary = "电站水位、生态流量告警状态统计")
|
||||
public ResponseResult getEngWarnCount(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getEngWarnCount(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/qgcDmRun/GetKendoListCust")
|
||||
@Operation(summary = "全过程AI识别大坝运行")
|
||||
public ResponseResult getAiDmRunCount(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiDmRunCount(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/qgcProtect/GetKendoListCust")
|
||||
@Operation(summary = "全过程AI识别动植物保护")
|
||||
public ResponseResult getAiProtectCount(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiProtectCount(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/GetKendoListCust")
|
||||
@Operation(summary = "AI常规业务列表")
|
||||
public ResponseResult getAiComKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiComKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/qgc/aiRstcd/GetKendoListCust")
|
||||
@Operation(summary = "全过程AI识别有数据的电站下拉")
|
||||
public ResponseResult getAiRstcdListKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiRstcdListKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/qgc/aiPfwRecord/GetKendoListCust")
|
||||
@Operation(summary = "全过程AI识别监测日历表(漂浮物+清漂合并)")
|
||||
public ResponseResult getAiPfwRecordKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiPfwRecordKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/qgc/aiRecord/GetKendoListCust")
|
||||
@Operation(summary = "全过程AI识别监测日历表")
|
||||
public ResponseResult getAiRecordKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiRecordKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/alarmPoint/GetKendoListCust")
|
||||
@Operation(summary = "电站告警描点列表")
|
||||
public ResponseResult getAlarmPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAlarmPointKendoListCust(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/stcd/GetKendoListCust")
|
||||
@Operation(summary = "监测设备告警情况列表")
|
||||
public ResponseResult getWarnStcdKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getWarnStcdKendoListCust(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,71 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Schema(description = "AI常规业务列表")
|
||||
public class AiComListVo {
|
||||
|
||||
@Schema(description = "主键")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "类型编码")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "类型名称")
|
||||
private String typeName;
|
||||
|
||||
@Schema(description = "AI测站编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "AI测站名称")
|
||||
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 Date tm;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
private Date endTm;
|
||||
|
||||
@Schema(description = "AI识别值")
|
||||
private String aiVal;
|
||||
|
||||
@Schema(description = "附件ID")
|
||||
private String fid;
|
||||
|
||||
@Schema(description = "是否填报")
|
||||
private Integer isFsf;
|
||||
|
||||
@Schema(description = "是否大面积漂浮物")
|
||||
private Integer isBigDebrisArea;
|
||||
|
||||
@Schema(description = "是否已清漂")
|
||||
private Integer isClearDrift;
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private Date recordTime;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
private Date modifyTime;
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "全过程AI识别大坝运行")
|
||||
public class AiDmRunVo {
|
||||
|
||||
@Schema(description = "漂浮物监测次数")
|
||||
private Integer pfwCnt;
|
||||
|
||||
@Schema(description = "漂浮物清理次数")
|
||||
private Integer pfwqlCnt;
|
||||
|
||||
@Schema(description = "叠梁门运行次数")
|
||||
private Integer dlmCnt;
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "全过程AI识别动植物保护")
|
||||
public class AiProtectVo {
|
||||
|
||||
@Schema(description = "运鱼船进出港次数")
|
||||
private Integer fpYycCnt;
|
||||
|
||||
@Schema(description = "赶鱼栅运行次数")
|
||||
private Integer fpGysCnt;
|
||||
|
||||
@Schema(description = "升鱼机运行次数")
|
||||
private Integer fpSyjCnt;
|
||||
|
||||
@Schema(description = "AGV小车次数")
|
||||
private Integer fpAgvCnt;
|
||||
|
||||
@Schema(description = "运鱼车运行次数")
|
||||
private Integer fpYychCnt;
|
||||
|
||||
@Schema(description = "鱼道放流次数")
|
||||
private Integer fpYdhCnt;
|
||||
|
||||
@Schema(description = "植物园养护次数")
|
||||
private Integer vpYhCnt;
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(description = "全过程AI识别监测日历记录")
|
||||
public class AiRecordVo {
|
||||
|
||||
@Schema(description = "AI类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "日期")
|
||||
private String dt;
|
||||
|
||||
@Schema(description = "是否大面积漂浮物")
|
||||
private Integer isBigDebrisArea;
|
||||
|
||||
@Schema(description = "AI数据数")
|
||||
private Integer aiCnt;
|
||||
|
||||
@Schema(description = "统计数")
|
||||
private Integer cnt;
|
||||
|
||||
@Schema(description = "是否已清漂")
|
||||
private Integer isClearDrift;
|
||||
|
||||
@Schema(description = "漂浮物状态")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "漂浮物状态名称")
|
||||
private String statusName;
|
||||
|
||||
@Schema(description = "清漂状态")
|
||||
private Integer qpStatus;
|
||||
|
||||
@Schema(description = "清漂状态名称")
|
||||
private String qpStatusName;
|
||||
|
||||
@Schema(description = "附件ID")
|
||||
private String fid;
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "全过程AI识别电站下拉")
|
||||
public class AiRstcdVo {
|
||||
|
||||
@Schema(description = "电站编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "电站名称")
|
||||
private String stnm;
|
||||
}
|
||||
@ -0,0 +1,103 @@
|
||||
package com.yfd.platform.qgc_env.warn.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 AlarmPointVo {
|
||||
|
||||
@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 ennm;
|
||||
|
||||
@Schema(description = "流域名称")
|
||||
private String rvnm;
|
||||
|
||||
@Schema(description = "电站装机类型")
|
||||
private Integer endInstalledType;
|
||||
|
||||
@Schema(description = "生态流量告警数")
|
||||
private Integer stqCount;
|
||||
|
||||
@Schema(description = "水质告警数")
|
||||
private Integer wqCount;
|
||||
|
||||
@Schema(description = "水位告警数")
|
||||
private Integer zCount;
|
||||
|
||||
@Schema(description = "水温告警数")
|
||||
private Integer wtCount;
|
||||
|
||||
@Schema(description = "年份")
|
||||
private String yyyy;
|
||||
|
||||
@Schema(description = "告警区间范围")
|
||||
private String range;
|
||||
|
||||
@Schema(description = "装机容量")
|
||||
private BigDecimal ttpwr;
|
||||
|
||||
@Schema(description = "基地名称")
|
||||
private String baseName;
|
||||
|
||||
@Schema(description = "电站编码")
|
||||
private String rstcd;
|
||||
|
||||
@Schema(description = "流域沿程")
|
||||
private Integer rvcdStepSort;
|
||||
|
||||
@Schema(description = "电站沿程")
|
||||
private Integer rstcdStepSort;
|
||||
|
||||
@Schema(description = "站点沿程")
|
||||
private Integer siteStepSort;
|
||||
|
||||
@Schema(description = "电站图片")
|
||||
private String logo;
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@Schema(description = "电站告警状态统计")
|
||||
public class EngWarnCountVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "告警状态")
|
||||
private Integer warnState;
|
||||
|
||||
@Schema(description = "告警状态名称")
|
||||
private String warnStateName;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "告警类型")
|
||||
private String warnType;
|
||||
|
||||
@Schema(description = "告警类型名称")
|
||||
private String warnTypeName;
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Schema(description = "监测设备告警情况")
|
||||
public class StcdWarnStateVo {
|
||||
|
||||
@Schema(description = "测站编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "测站名称")
|
||||
private String stnm;
|
||||
|
||||
@Schema(description = "电站编码")
|
||||
private String rstcd;
|
||||
|
||||
@Schema(description = "电站名称")
|
||||
private String ennm;
|
||||
|
||||
@Schema(description = "监测方式")
|
||||
private Integer mway;
|
||||
|
||||
@Schema(description = "测站类型编码")
|
||||
private String sttpCode;
|
||||
|
||||
@Schema(description = "测站类型名称")
|
||||
private String sttpName;
|
||||
|
||||
@Schema(description = "基地编码")
|
||||
private String baseId;
|
||||
|
||||
@Schema(description = "基地名称")
|
||||
private String baseName;
|
||||
|
||||
@Schema(description = "流域编码")
|
||||
private String rvcd;
|
||||
|
||||
@Schema(description = "告警状态")
|
||||
private Integer warnState;
|
||||
|
||||
@Schema(description = "告警状态名称")
|
||||
private String warnstateName;
|
||||
|
||||
@Schema(description = "告警时间")
|
||||
private Date warnTm;
|
||||
|
||||
@Schema(description = "基础排序")
|
||||
private Integer baseStepSort;
|
||||
|
||||
@Schema(description = "电站排序")
|
||||
private Integer rstcdStepSort;
|
||||
|
||||
@Schema(description = "数据接入类型")
|
||||
private Integer dtinType;
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package com.yfd.platform.qgc_env.warn.service;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AlarmPointVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiRecordVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiProtectVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiDmRunVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiComListVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiRstcdVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.EngWarnCountVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.StcdWarnStateVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface WarnDataService {
|
||||
|
||||
DataSourceResult<EngWarnCountVo> getEngWarnCount(DataSourceRequest dataSourceRequest);
|
||||
|
||||
AiDmRunVo getAiDmRunCount(DataSourceRequest dataSourceRequest);
|
||||
|
||||
AiProtectVo getAiProtectCount(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<AiComListVo> getAiComKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<AiRstcdVo> getAiRstcdListKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
List<AiRecordVo> getAiPfwRecordKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
List<AiRecordVo> getAiRecordKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<AlarmPointVo> getAlarmPointKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<StcdWarnStateVo> getWarnStcdKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -3,15 +3,7 @@ package com.yfd.platform.qgc_env.wq.service.impl;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.yfd.platform.common.CommonConstant;
|
||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.common.Group;
|
||||
import com.yfd.platform.common.GroupHelper;
|
||||
import com.yfd.platform.common.GroupingInfo;
|
||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||
import com.yfd.platform.common.PageInfo;
|
||||
import com.yfd.platform.common.*;
|
||||
import com.yfd.platform.common.exception.BizException;
|
||||
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
|
||||
import com.yfd.platform.qgc_base.entity.vo.DataParam;
|
||||
@ -694,6 +686,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
baseSql.append("SELECT ")
|
||||
.append("NVL(t.IS_DELETED, 0) AS isDeleted, ")
|
||||
.append("t.STTP AS sttpCode, ")
|
||||
.append("t.WARN_STATE AS warnState, ")
|
||||
.append("t.MWAY AS mway, ")
|
||||
.append("t.DTIN_TYPE AS dtinType, ")
|
||||
.append("t.STCD AS stcd, ")
|
||||
@ -731,6 +724,8 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
DataSourceResult result = new DataSourceResult();
|
||||
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
|
||||
result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
|
||||
} else if (groupInfos != null && groupInfos.length == 1 && groupInfos[0] != null && StrUtil.isNotBlank(groupInfos[0].getSelector())) {
|
||||
result.setData(toMsstbprptLegacyGroups(rows, groupInfos[0].getSelector()));
|
||||
} else {
|
||||
result.setData(toLegacyGroupResult(new GroupHelper().group(rows, Arrays.asList(groupInfos)), 0));
|
||||
}
|
||||
@ -3181,14 +3176,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
return result;
|
||||
}
|
||||
String upperField = groupField == null ? "DTINTYPE" : groupField.toUpperCase();
|
||||
String countField = "COUNT_" + upperField;
|
||||
String aggregateKey = "count_" + groupField;
|
||||
for (Map<String, Object> row : rows) {
|
||||
Object key = row.get(upperField);
|
||||
if (key == null) {
|
||||
key = row.get(groupField);
|
||||
}
|
||||
String countField = row.containsKey("COUNT_STCD") ? "COUNT_STCD" : "COUNT_" + upperField;
|
||||
String aggregateKey = "COUNT_STCD".equals(countField) ? "count_stcd" : "count_" + groupField;
|
||||
Object countValue = row.get(countField);
|
||||
if (countValue == null) {
|
||||
countValue = row.get("count_stcd");
|
||||
}
|
||||
if (countValue == null) {
|
||||
countValue = row.get("count_" + upperField);
|
||||
}
|
||||
@ -3208,7 +3206,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
detail.put(upperField, key);
|
||||
detail.put(countField, count);
|
||||
item.put("items", List.of(detail));
|
||||
item.put("count", count);
|
||||
item.put("count", 0);
|
||||
item.put("summary", new Object[0]);
|
||||
|
||||
Map<String, Object> aggregates = new LinkedHashMap<>();
|
||||
@ -3224,27 +3222,52 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
return baseSql;
|
||||
}
|
||||
List<String> groupFields = new ArrayList<>();
|
||||
List<String> selectItems = new ArrayList<>();
|
||||
List<String> orderByItems = new ArrayList<>();
|
||||
for (GroupingInfo item : groupInfos) {
|
||||
if (item == null || StrUtil.isBlank(item.getSelector())) {
|
||||
continue;
|
||||
}
|
||||
groupFields.add(item.getSelector());
|
||||
String selector = item.getSelector();
|
||||
groupFields.add(selector);
|
||||
selectItems.add(selector + " AS " + selector.toUpperCase());
|
||||
String dir = Boolean.TRUE.equals(item.getDesc()) ? "DESC" : "ASC";
|
||||
orderByItems.add(item.getSelector() + " " + dir);
|
||||
orderByItems.add(selector + " " + dir);
|
||||
boolean hasCountStcd = false;
|
||||
if (CollUtil.isNotEmpty(item.getSummaryInfos())) {
|
||||
for (SummaryInfo summaryInfo : item.getSummaryInfos()) {
|
||||
if (summaryInfo == null || StrUtil.isBlank(summaryInfo.getSelector()) || StrUtil.isBlank(summaryInfo.getSummaryType())) {
|
||||
continue;
|
||||
}
|
||||
String summaryType = summaryInfo.getSummaryType().toUpperCase();
|
||||
String summarySelector = summaryInfo.getSelector().toUpperCase();
|
||||
if ("count".equalsIgnoreCase(summaryInfo.getSummaryType()) && "stcd".equalsIgnoreCase(summaryInfo.getSelector())) {
|
||||
hasCountStcd = true;
|
||||
}
|
||||
switch (summaryInfo.getSummaryType().toLowerCase()) {
|
||||
case "count" -> selectItems.add("COUNT(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector);
|
||||
case "sum" -> selectItems.add("SUM(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector);
|
||||
case "avg", "average" -> selectItems.add("AVG(" + summaryInfo.getSelector() + ") AS AVG_" + summarySelector);
|
||||
case "min" -> selectItems.add("MIN(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector);
|
||||
case "max" -> selectItems.add("MAX(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector);
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!hasCountStcd) {
|
||||
selectItems.add("COUNT(*) AS COUNT_STCD");
|
||||
}
|
||||
}
|
||||
if (groupFields.isEmpty()) {
|
||||
return baseSql;
|
||||
}
|
||||
StringBuilder sql = new StringBuilder("SELECT ");
|
||||
sql.append(String.join(", ", groupFields));
|
||||
for (String groupField : groupFields) {
|
||||
sql.append(", COUNT(*) AS count_").append(groupField).append(" ");
|
||||
}
|
||||
sql.append("FROM (").append(baseSql).append(") T ")
|
||||
.append("GROUP BY ").append(String.join(", ", groupFields)).append(" ");
|
||||
sql.append(String.join(", ", selectItems));
|
||||
sql.append(" FROM (").append(baseSql).append(") T ")
|
||||
.append(" GROUP BY ").append(String.join(", ", groupFields)).append(" ");
|
||||
if (!orderByItems.isEmpty()) {
|
||||
sql.append("ORDER BY ").append(String.join(", ", orderByItems));
|
||||
sql.append(" ORDER BY ").append(String.join(", ", orderByItems));
|
||||
}
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
@ -66,11 +66,11 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
||||
.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 ")
|
||||
.append(" AND hbrv.BASEID = eng.BASE_ID ")
|
||||
.append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ")
|
||||
.append(" AND NVL(hbrv.ENABLED, 1) = 1 ")
|
||||
.append(" AND hbrv.IS_DELETED = 0 ")
|
||||
.append(" AND hbrv.ENABLED = 1 ")
|
||||
.append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ")
|
||||
.append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ")
|
||||
.append("WHERE NVL(t.IS_DELETED, 0) = 0 ");
|
||||
.append("WHERE t.IS_DELETED = 0 ");
|
||||
if (onlyZq) {
|
||||
sql.append("AND t.STTP = 'ZQ' ");
|
||||
}
|
||||
@ -1844,7 +1844,7 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
||||
}
|
||||
return switch (field) {
|
||||
case "isDeleted" -> "NVL(t.IS_DELETED, 0)";
|
||||
case "sttpFullPath" -> null;
|
||||
case "sttpFullPath" -> "t.STTP";
|
||||
case "sttpCode" -> "t.STTP";
|
||||
case "mway" -> "t.MWAY";
|
||||
case "dtinType" -> "t.DTIN_TYPE";
|
||||
|
||||
@ -212,5 +212,30 @@
|
||||
</if>
|
||||
ORDER BY t.ORDER_PATH ASC, t.RVCD ASC
|
||||
</select>
|
||||
<select id="selectRvcdDropdown" resultType="com.yfd.platform.qgc_base.domain.SdRvcdDic">
|
||||
SELECT
|
||||
RVCD,
|
||||
RVNM,
|
||||
PRVCD,
|
||||
GRD,
|
||||
PATH,
|
||||
ORDER_INDEX,
|
||||
SHORTNAME,
|
||||
SHEPRANGE,
|
||||
BASEID
|
||||
|
||||
FROM SD_RVCD_DIC
|
||||
WHERE NVL(ENABLED, 1) = 1
|
||||
AND NVL(IS_DELETED, 0) = 0
|
||||
AND (PRVCD IS NULL OR PRVCD = '' OR PRVCD = '0')
|
||||
<if test="baseId != null and baseId != ''">
|
||||
AND BASEID = #{baseId}
|
||||
</if>
|
||||
|
||||
<if test="rvnm != null and rvnm != ''">
|
||||
AND RVNM LIKE '%' || #{rvnm} || '%'
|
||||
</if>
|
||||
ORDER BY ORDER_INDEX ASC, RVCD ASC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user