diff --git a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java index 8188f10f..b4323148 100644 --- a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java @@ -58,9 +58,12 @@ public class SecurityConfig { .requestMatchers("/tempFile/**").permitAll() .requestMatchers("/system/user/auditUser").permitAll() .requestMatchers("/eng/**").permitAll() + .requestMatchers("/eq/**").permitAll() .requestMatchers("/env/**").permitAll() .requestMatchers("/wt/**").permitAll() + .requestMatchers("/zq/**").permitAll() .requestMatchers("/wq/**").permitAll() + .requestMatchers("/vd/**").permitAll() .requestMatchers("/fp/**").permitAll() .requestMatchers("/fh/**").permitAll() .requestMatchers("/data/**").permitAll() diff --git a/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java b/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java index 453c5b0e..9178996a 100644 --- a/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java @@ -49,15 +49,15 @@ public class SwaggerConfig { public GroupedOpenApi groupDataEnvApi() { return GroupedOpenApi.builder() .group("2. 过鱼数据模块") - .packagesToScan("com.yfd.platform.data.controller") + .packagesToScan("com.yfd.platform.qgc_data.controller") .build(); } @Bean - public GroupedOpenApi groupEnvApi() { + public GroupedOpenApi groupQgcBaseApi() { return GroupedOpenApi.builder() .group("3全过程-生态环保数据服务") - .packagesToScan("com.yfd.platform.env.controller") + .packagesToScan("com.yfd.platform.qgc_base.controller") .build(); } @@ -65,14 +65,14 @@ public class SwaggerConfig { public GroupedOpenApi groupEnvWTApi() { return GroupedOpenApi.builder() .group("3.1 全过程-生态环保数据服务-水温监测") - .packagesToScan("com.yfd.platform.env.wt.controller") + .packagesToScan("com.yfd.platform.qgc_env.wt.controller") .build(); } @Bean public GroupedOpenApi groupEnvWQApi() { return GroupedOpenApi.builder() .group("3.2 全过程-生态环保数据服务-水质监测") - .packagesToScan("com.yfd.platform.env.wq.controller") + .packagesToScan("com.yfd.platform.qgc_env.wq.controller") .build(); } @@ -80,7 +80,15 @@ public class SwaggerConfig { public GroupedOpenApi groupEnvFPApi() { return GroupedOpenApi.builder() .group("3.3 全过程-生态环保数据服务-过鱼设施") - .packagesToScan("com.yfd.platform.env.fp.controller") + .packagesToScan("com.yfd.platform.qgc_env.fp.controller") + .build(); + } + + @Bean + public GroupedOpenApi groupEnvVDApi() { + return GroupedOpenApi.builder() + .group("3.3.1 全过程-生态环保数据服务-过鱼设施-过鱼监测") + .packagesToScan("com.yfd.platform.qgc_env.vd.controller") .build(); } @@ -88,7 +96,15 @@ public class SwaggerConfig { public GroupedOpenApi groupEnvFHApi() { return GroupedOpenApi.builder() .group("3.4 全过程-生态环保数据服务-栖息地") - .packagesToScan("com.yfd.platform.env.fh.controller") + .packagesToScan("com.yfd.platform.qgc_env.fh.controller") + .build(); + } + + @Bean + public GroupedOpenApi groupEnvZQApi() { + return GroupedOpenApi.builder() + .group("3.4.1 全过程-生态环保数据服务-栖息地-水文模块") + .packagesToScan("com.yfd.platform.qgc_env.zq.controller") .build(); } @@ -99,7 +115,15 @@ public class SwaggerConfig { public GroupedOpenApi groupEngApi() { return GroupedOpenApi.builder() .group("4. 全过程-常规水电数据服务") - .packagesToScan("com.yfd.platform.eng.controller") + .packagesToScan("com.yfd.platform.qgc_eng.controller") + .build(); + } + + @Bean + public GroupedOpenApi groupEngEqApi() { + return GroupedOpenApi.builder() + .group("4.1. 全过程-常规水电数据服务-生态流量") + .packagesToScan("com.yfd.platform.qgc_eng.eq.controller") .build(); } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/controller/AlarmPointController.java b/backend/src/main/java/com/yfd/platform/eng/controller/AlarmPointController.java deleted file mode 100644 index 76ace5c0..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/controller/AlarmPointController.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.yfd.platform.eng.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.eng.entity.vo.AlarmStcdCountVo; -import com.yfd.platform.eng.service.AlarmPointService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -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; - -import jakarta.annotation.Resource; -import java.util.Map; - -/** - * 运行告警锚点控制器 - */ -@RestController -@RequestMapping("/eng/alarmPoint") -@Tag(name = "运行告警锚点控制器") -public class AlarmPointController { - - /** - * 服务对象 - */ - @Resource - private AlarmPointService alarmPointService; - - @PostMapping({"/GetKendoListCust"}) - @Operation(summary = "条件过滤数据列表定制") - public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = alarmPointService.processKendoList(dataSourceRequest, filterResult, page); - alarmPointService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - /** - * 获取警报统计数据 - * @param stcd 电站ID - * @return 响应结果 - */ - @PostMapping({"/getAlarmCount"}) - @Operation(summary = "获取警报统计数据") - public ResponseResult getAlarmCount(String stcd) { - AlarmStcdCountVo vo = alarmPointService.getAlarmCount(stcd); - return ResponseResult.successData(vo); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqController.java b/backend/src/main/java/com/yfd/platform/eng/controller/EngEqController.java deleted file mode 100644 index 7dda1323..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqController.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.yfd.platform.eng.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.common.GroupResult; -import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.eng.service.EngEqService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -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; - -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; - -import java.util.Map; - -/** - * 电站生态流量统计查询 - */ -@RestController -@RequestMapping("/eng/eq/") -@Tag(name = "电站生态流量统计查询") -public class EngEqController { - - /** - * 服务对象 - */ - @Resource - private EngEqService msEngEqService; - - @PostMapping({"/GetKendoListCust"}) - @Operation(summary = "条件过滤数据列表定制") - public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = msEngEqService.processKendoList(dataSourceRequest, filterResult, page); - msEngEqService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - /** - * 导出 - * @param dataSourceRequest 数据源请求 - * @param response 响应 - */ - @PostMapping({"/export"}) - @Operation(summary = "导出") - public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) { - // 实际应该实现导出逻辑 - } - - /** - * 月统计数据有数据的电站 - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping("/lastEngDataSite") - @Operation(summary = "查询指定时间有数据的站点") - public ResponseResult lastEngDataSite(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msEngEqService.lastEngDataSite(dataSourceRequest); - return ResponseResult.successData(result); - } - - @PostMapping("/default/stcd") - @Operation(summary = "获取生态流量默认有数据的电站") - public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msEngEqService.getDefaultStcd(dataSourceRequest); - return ResponseResult.successData(result); - } - - @PostMapping("/getSfdbInfo") - @Operation(summary = "获取不达标详情数据") - public ResponseResult getSfdbInfo(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msEngEqService.getSfdbInfo(dataSourceRequest); - return ResponseResult.successData(result); - } - - @PostMapping({"/qecSfdbCountByStcd"}) - @Operation(summary = "生态流量不达标测站数") - public ResponseResult qecSfdbCountByStcd(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msEngEqService.qecSfdbCountByStcd(dataSourceRequest); - return ResponseResult.successData(result); - } - - /** - * 生态流量达标率计算(基地维度、不达标原因维度) - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/qecRateCount"}) - @Operation(summary = "生态流量达标率计算(基地维度、不达标原因维度)") - public ResponseResult qecRateCount(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msEngEqService.qecRateCount(dataSourceRequest); - return ResponseResult.successData(result); - } - - /** - * 生态流量不达标数量计算(电站维度、不达标原因维度) - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/qecSfdbCount"}) - @Operation(summary = "生态流量不达标数量计算(电站维度、不达标原因维度)") - public ResponseResult qecSfdbCount(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msEngEqService.qecSfdbCount(dataSourceRequest); - return ResponseResult.successData(result); - } - - @PostMapping({"/group/GetKendoListCust"}) - public ResponseResult getGroupKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = msEngEqService.processKendoList(dataSourceRequest, filterResult, page); - msEngEqService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/eng/controller/EngEqDataController.java deleted file mode 100644 index 6b0f1a90..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqDataController.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.yfd.platform.eng.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.eng.service.EngEqDataService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; -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; - -import java.util.Map; - -/** - * 电站实时数据查询 - */ -@RestController -@RequestMapping("/eng/eq/data") -@Tag(name = "电站实时数据查询") -public class EngEqDataController { - - /** - * 服务对象 - */ - @Resource - private EngEqDataService engEqDataService; - - @PostMapping({"/GetKendoListCust"}) - @Operation(summary = "生态流量沿程变化-小时") - public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = engEqDataService.processKendoList(dataSourceRequest, filterResult, page); - engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - /** - * 导出 - * @param dataSourceRequest 数据源请求 - * @param response 响应 - */ - @PostMapping({"/export"}) - @Operation(summary = "导出") - public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) { - // 实际应该实现导出逻辑 - } - - @PostMapping({"/day/GetKendoListCust"}) - @Operation(summary = "查询生态流量 日 数据") - public ResponseResult getKendoDayListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - String groupBy = ""; // 实际应该根据业务需求处理分组 - DataSourceResult dataSourceResult = engEqDataService.processDayKendoList(dataSourceRequest, filterResult, page, groupBy); - engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - @PostMapping({"/drtp/GetKendoListCust"}) - @Operation(summary = "查询生态流量 周旬月季年 数据") - public ResponseResult getKendoDrtpListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - String groupBy = ""; // 实际应该根据业务需求处理分组 - DataSourceResult dataSourceResult = engEqDataService.processKendoDrtpList(dataSourceRequest, filterResult, page, groupBy); - engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - @PostMapping({"/fastSiteLastData/GetKendoListCust"}) - @Operation(summary = "查询沿程第一个电站的生态流量数据时间") - public ResponseResult getFastSiteLastData(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - String groupBy = ""; // 实际应该根据业务需求处理分组 - DataSourceResult dataSourceResult = engEqDataService.getFastSiteLastData(dataSourceRequest, filterResult, page, groupBy); - engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - /** - * 生态流量沿程变化(面板) - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/along/GetKendoListCust"}) - @Operation(summary = "查询生态流量(沿程数据)") - public ResponseResult getKendoAlongListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = engEqDataService.processKendoList(dataSourceRequest, filterResult, page); - engEqDataService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - @PostMapping({"/getEngLimit"}) - @Operation(summary = "根据时间范围查询电站生态流量限值及来源") - public ResponseResult getEngLimit(@RequestBody DataSourceRequest dataSourceRequest) { - Object result = engEqDataService.getEngLimit(dataSourceRequest); - return ResponseResult.successData(result); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqIntervalController.java b/backend/src/main/java/com/yfd/platform/eng/controller/EngEqIntervalController.java deleted file mode 100644 index c70a96d7..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqIntervalController.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.yfd.platform.eng.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.annotation.Log; -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.eng.domain.MsEngEq; -import com.yfd.platform.eng.service.EngEqIntervalService; -import com.yfd.platform.eng.service.EngEqService; -import com.yfd.platform.utils.KendoUtil; -import com.yfd.platform.utils.QgcQueryWrapperUtil; -import com.yfd.platform.utils.QueryWrapperUtil; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; -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; - -import java.util.Map; - -/** - * 生态流量区间统计控制器 - */ -@RestController -@RequestMapping("/eng/eq/interval") -@Tag(name = "电站生态流量区间统计查询") -public class EngEqIntervalController { - - /** - * 服务对象 - */ - @Resource - private EngEqIntervalService eqIntervalService; - - @Resource - private EngEqService engEqService; - - /** - * 生态流量达标情况 - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/GetKendoListCust"}) - @Operation(summary = "生态流量达标情况") - public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult result = eqIntervalService.processKendoList(dataSourceRequest, filterResult, page); - eqIntervalService.processKendoGetListLoadResult(dataSourceRequest, result); - return ResponseResult.successData(result); - } - - /** - * 导出 - * @param dataSourceRequest 数据源请求 - * @param response 响应 - */ - @PostMapping({"/export"}) - @Operation(summary = "导出") - @Log(module = "生态流量", value = "导出生态流量数据") - public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) { - // 实际应该实现导出逻辑 - } - - /** - * 生态流量达标率 小时统计(二级页面) - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/qgc/hour/GetKendoListCust"}) - @Operation(summary = "生态流量达标率 小时统计(二级页面)") - public ResponseResult getQgcHourKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - String kendoGroupCode = "EngEqHour"; -// Map filterResult = KendoUtil.getGroupResultMap(dataSourceRequest, null, EngEqIntervalController.class); -// String groupBy = KendoUtil.getGroupBy(dataSourceRequest); - Page page = KendoUtil.getPage(dataSourceRequest); - DataSourceResult result = eqIntervalService.getQgcHourKendoListCust(dataSourceRequest, null, page, null); -// eqIntervalService.processKendoGetListLoadResult(dataSourceRequest, result); - return ResponseResult.successData(result); - } - - /** - * 生态流量达标率 日统计(二级页面) - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/qgc/day/GetKendoListCust"}) - @Operation(summary = "生态流量达标率 日统计(二级页面)") - public ResponseResult getQgcDayKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - String groupBy = ""; // 实际应该根据业务需求处理分组 - DataSourceResult result = eqIntervalService.getQgcDayKendoListCust(dataSourceRequest, filterResult, page, groupBy); - eqIntervalService.processKendoGetListLoadResult(dataSourceRequest, result); - return ResponseResult.successData(result); - } - - /** - * 生态流量达标率 区间范围统计(一级页面) - * @param dataSourceRequest 数据源请求 - * @return 响应结果 - */ - @PostMapping({"/qgc/getQgcStaticData"}) - @Operation(summary = "生态流量达标率 区间范围统计(一级页面)") -// @Log(module = "生态流量", value = "生态流量达标率统计") - public ResponseResult getQgcStaticData(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceLoadOptionsBase loadOptionsBase = dataSourceRequest.toDevRequest(); - String type = QgcQueryWrapperUtil.getFilterFieldValue(loadOptionsBase, "type"); - ResponseResult r; - if("hour".equals(type)){ - r = this.getQgcHourKendoListCust(dataSourceRequest); - }else if("day".equals(type)){ - r = this.getQgcDayKendoListCust(dataSourceRequest); - }else{ - return ResponseResult.error("请选择生态流量达标率统计类型(小时还是天统计)"); - } - if(r != null && r.get("code").equals("0") && r.get("data") != null){ - DataSourceResult dataSourceResult = (DataSourceResult) r.get("data"); - if(dataSourceResult != null && dataSourceResult.getData() != null){ - Map staticData = eqIntervalService.getQgcQecStaticData(dataSourceResult.getData(), type); - return ResponseResult.successData(staticData); - } - } - return ResponseResult.success(); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqStatController.java b/backend/src/main/java/com/yfd/platform/eng/controller/EngEqStatController.java deleted file mode 100644 index d88865bd..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/controller/EngEqStatController.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.yfd.platform.eng.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.common.GroupResult; -import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.eng.service.EngEqService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; -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; - -import java.util.Map; - -/** - * 电站生态流量统计结果查询 - */ -@RestController -@RequestMapping("/eng/eq/stat") -@Tag(name = "电站生态流量统计结果查询") -public class EngEqStatController { - - /** - * 服务对象 - */ - @Resource - private EngEqService msEngEqService; - - @PostMapping({"/GetKendoListCust"}) - @Operation(summary = "条件过滤数据列表定制") - public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = msEngEqService.processKendoList(dataSourceRequest, filterResult, page); - msEngEqService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } - - /** - * 导出 - * @param dataSourceRequest 数据源请求 - * @param response 响应 - */ - @PostMapping({"/export"}) - @Operation(summary = "导出") - public void export(@RequestBody DataSourceRequest dataSourceRequest, HttpServletResponse response) { - // 实际应该实现导出逻辑 - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/controller/EngSpecialController.java b/backend/src/main/java/com/yfd/platform/eng/controller/EngSpecialController.java deleted file mode 100644 index 194bea98..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/controller/EngSpecialController.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.yfd.platform.eng.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.eng.entity.EqSpecial; -import com.yfd.platform.eng.service.EngSpecialService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Map; - -/** - * 电站专题-环保设施运行情况 - */ -@RestController -@RequestMapping("/eng/special") -@Tag(name = "电站专题-环保设施运行情况") -public class EngSpecialController { - - /** - * 服务对象 - */ - @Resource - private EngSpecialService engSpecialService; - - @PostMapping({"/GetKendoListCust"}) - @Operation(summary = "条件过滤数据列表定制") - public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - Page page = new Page<>(dataSourceRequest.getPage(), dataSourceRequest.getPageSize()); - Map filterResult = null; // 实际应该根据业务需求处理筛选 - DataSourceResult dataSourceResult = engSpecialService.processKendoList(dataSourceRequest, filterResult, page); - engSpecialService.processKendoGetListLoadResult(dataSourceRequest, dataSourceResult); - return ResponseResult.successData(dataSourceResult); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/domain/MsEngEq.java b/backend/src/main/java/com/yfd/platform/eng/domain/MsEngEq.java deleted file mode 100644 index 28c4018f..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/domain/MsEngEq.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.yfd.platform.eng.domain; - -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** - * 生态流量实体类 - */ -@Data -@TableName("ms_eng_eq") -public class MsEngEq implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - private String id; - - /** - * 电站ID - */ - private String stationId; - - /** - * 电站名称 - */ - private String stationName; - - /** - * 时间 - */ - private Date time; - - /** - * 生态流量值 - */ - private Double eqValue; - - /** - * 达标状态 - */ - private String status; - - /** - * 统计类型(hour/day) - */ - private String type; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/entity/EqSpecial.java b/backend/src/main/java/com/yfd/platform/eng/entity/EqSpecial.java deleted file mode 100644 index f8a116da..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/entity/EqSpecial.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.yfd.platform.eng.entity; - -import lombok.Data; - -/** - * 电站专题-环保设施运行情况 - */ -@Data -public class EqSpecial { - /** - * 主键 - */ - private String id; - - /** - * 电站ID - */ - private String stcd; - - /** - * 电站名称 - */ - private String stnm; - - /** - * 环保设施类型 - */ - private String eqType; - - /** - * 设施名称 - */ - private String eqName; - - /** - * 运行状态 - */ - private String status; - - /** - * 检查时间 - */ - private String checkTime; - - /** - * 检查人 - */ - private String checker; - - /** - * 备注 - */ - private String remark; -} diff --git a/backend/src/main/java/com/yfd/platform/eng/entity/vo/AlarmStcdCountVo.java b/backend/src/main/java/com/yfd/platform/eng/entity/vo/AlarmStcdCountVo.java deleted file mode 100644 index d06eebea..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/entity/vo/AlarmStcdCountVo.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.yfd.platform.eng.entity.vo; - -import lombok.Data; - -/** - * 警报锚点统计VO - */ -@Data -public class AlarmStcdCountVo { - /** - * 电站ID - */ - private String stcd; - - /** - * 电站名称 - */ - private String stnm; - - /** - * 警报数量 - */ - private Integer alarmCount; - - /** - * 未处理数量 - */ - private Integer unhandledCount; - - /** - * 处理中数量 - */ - private Integer handlingCount; - - /** - * 已处理数量 - */ - private Integer handledCount; -} diff --git a/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDataVo.java b/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDataVo.java deleted file mode 100644 index eea49d20..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDataVo.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.yfd.platform.eng.entity.vo; - -import lombok.Data; - -/** - * 生态流量小时数据VO - */ -@Data -public class EngEqDataVo { - /** - * 电站ID - */ - private String stcd; - - /** - * 电站名称 - */ - private String stnm; - - /** - * 时间 - */ - private String tm; - - /** - * 生态流量值 - */ - private Double eqValue; - - /** - * 状态 - */ - private String status; - - /** - * 不达标原因 - */ - private String reason; - - /** - * 限值 - */ - private Double limitValue; - - /** - * 限值来源 - */ - private String limitSource; - - /** - * 是否左边界 - */ - private Integer isLeft; -} diff --git a/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDayDataVo.java b/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDayDataVo.java deleted file mode 100644 index adf9671d..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDayDataVo.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.yfd.platform.eng.entity.vo; - -import lombok.Data; - -/** - * 生态流量日数据VO - */ -@Data -public class EngEqDayDataVo { - /** - * 电站ID - */ - private String stcd; - - /** - * 电站名称 - */ - private String stnm; - - /** - * 日期 - */ - private String tm; - - /** - * 日平均生态流量 - */ - private Double avgValue; - - /** - * 日最小生态流量 - */ - private Double minValue; - - /** - * 日最大生态流量 - */ - private Double maxValue; - - /** - * 状态 - */ - private String status; - - /** - * 不达标原因 - */ - private String reason; - - /** - * 限值 - */ - private Double limitValue; - - /** - * 限值来源 - */ - private String limitSource; -} diff --git a/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDrtpDataVo.java b/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDrtpDataVo.java deleted file mode 100644 index 4c108a1e..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/entity/vo/EngEqDrtpDataVo.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.yfd.platform.eng.entity.vo; - -import lombok.Data; - -/** - * 生态流量周旬月季年数据VO - */ -@Data -public class EngEqDrtpDataVo { - /** - * 电站ID - */ - private String stcd; - - /** - * 电站名称 - */ - private String stnm; - - /** - * 时间 - */ - private String tm; - - /** - * 平均生态流量 - */ - private Double avgValue; - - /** - * 最小生态流量 - */ - private Double minValue; - - /** - * 最大生态流量 - */ - private Double maxValue; - - /** - * 状态 - */ - private String status; - - /** - * 不达标原因 - */ - private String reason; - - /** - * 限值 - */ - private Double limitValue; - - /** - * 限值来源 - */ - private String limitSource; -} diff --git a/backend/src/main/java/com/yfd/platform/eng/mapper/EngEqMapper.java b/backend/src/main/java/com/yfd/platform/eng/mapper/EngEqMapper.java deleted file mode 100644 index 8c660c2a..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/mapper/EngEqMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.yfd.platform.eng.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.eng.domain.MsEngEq; -import org.apache.ibatis.annotations.Select; - -import java.util.Map; - -/** - * 生态流量Mapper - */ -public interface EngEqMapper extends BaseMapper { - - /** - * 根据条件查询生态流量数据 - * @param params 查询参数 - * @return 生态流量列表 - */ - @Select("select * from ms_eng_eq where 1=1") - Object queryList(Map params); -} diff --git a/backend/src/main/java/com/yfd/platform/eng/service/AlarmPointService.java b/backend/src/main/java/com/yfd/platform/eng/service/AlarmPointService.java deleted file mode 100644 index babe6ebc..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/AlarmPointService.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.yfd.platform.eng.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.eng.entity.vo.AlarmStcdCountVo; - -import java.util.Map; - -/** - * 警报锚点服务 - */ -public interface AlarmPointService { - - /** - * 处理kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @return 数据源结果 - */ - DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page); - - /** - * 处理kendo返回列表字典匹配 - * @param dataSourceRequest 数据源请求 - * @param dataSourceResult 数据源结果 - */ - void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult); - - /** - * 获取警报统计数据 - * @param stcd 电站ID - * @return 统计结果 - */ - AlarmStcdCountVo getAlarmCount(String stcd); -} diff --git a/backend/src/main/java/com/yfd/platform/eng/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/eng/service/EngEqDataService.java deleted file mode 100644 index 2fe57493..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/EngEqDataService.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.yfd.platform.eng.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; - -import java.util.Map; - -/** - * 生态流量数据服务 - */ -public interface EngEqDataService { - - /** - * 处理kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @return 数据源结果 - */ - DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page); - - /** - * 处理kendo返回列表字典匹配 - * @param dataSourceRequest 数据源请求 - * @param dataSourceResult 数据源结果 - */ - void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult); - - /** - * 处理分组条件SQL - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @return SQL条件 - */ - String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map filterResult); - - /** - * 处理日数据kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @param groupBy 分组 - * @return 数据源结果 - */ - DataSourceResult processDayKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy); - - /** - * 处理周旬月季年数据kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @param groupBy 分组 - * @return 数据源结果 - */ - DataSourceResult processKendoDrtpList(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy); - - /** - * 查询沿程第一个电站的生态流量数据时间 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @param groupBy 分组 - * @return 数据源结果 - */ - DataSourceResult getFastSiteLastData(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy); - - /** - * 根据时间范围查询电站生态流量限值及来源 - * @param dataSourceRequest 数据源请求 - * @return 生态流量限值VO - */ - Object getEngLimit(DataSourceRequest dataSourceRequest); -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/service/EngEqIntervalService.java b/backend/src/main/java/com/yfd/platform/eng/service/EngEqIntervalService.java deleted file mode 100644 index a4b224ed..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/EngEqIntervalService.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.yfd.platform.eng.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.common.GroupResult; -import com.yfd.platform.eng.domain.MsEngEq; - -import java.util.Map; - -/** - * 生态流量区间统计服务 - */ -public interface EngEqIntervalService { - - /** - * 处理kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @return 数据源结果 - */ - DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page); - - /** - * 处理kendo返回列表字典匹配 - * @param dataSourceRequest 数据源请求 - * @param dataSourceResult 数据源结果 - */ - void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult); - - /** - * 生态流量达标率 小时统计 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @param groupBy 分组 - * @return 数据源结果 - */ - DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy); - - /** - * 生态流量达标率 日统计 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @param groupBy 分组 - * @return 数据源结果 - */ - DataSourceResult getQgcDayKendoListCust(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy); - - /** - * 生态流量达标率 区间范围统计 - * @param dataList 数据列表 - * @param type 类型(hour/day) - * @return 统计结果 - */ - Map getQgcQecStaticData(Object dataList, String type); -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/service/EngEqService.java b/backend/src/main/java/com/yfd/platform/eng/service/EngEqService.java deleted file mode 100644 index 288aa9ee..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/EngEqService.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.yfd.platform.eng.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.common.GroupResult; -import com.yfd.platform.eng.domain.MsEngEq; - - -import java.util.Map; - -/** - * 生态流量服务 - */ -public interface EngEqService extends IService { - - /** - * 处理kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @return 数据源结果 - */ - DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page); - - /** - * 处理kendo返回列表字典匹配 - * @param dataSourceRequest 数据源请求 - * @param dataSourceResult 数据源结果 - */ - void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult); - - /** - * 处理分组条件SQL - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @return SQL条件 - */ - String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map filterResult); - - /** - * 月统计数据有数据的电站 - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 - */ - DataSourceResult lastEngDataSite(DataSourceRequest dataSourceRequest); - - /** - * 获取生态流量默认有数据的电站 - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 - */ - DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest); - - /** - * 获取不达标详情数据 - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 - */ - DataSourceResult getSfdbInfo(DataSourceRequest dataSourceRequest); - - /** - * 生态流量不达标测站数 - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 - */ - DataSourceResult qecSfdbCountByStcd(DataSourceRequest dataSourceRequest); - - /** - * 生态流量达标率计算(基地维度、不达标原因维度) - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 - */ - DataSourceResult qecRateCount(DataSourceRequest dataSourceRequest); - - /** - * 生态流量不达标数量计算(电站维度、不达标原因维度) - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 - */ - DataSourceResult qecSfdbCount(DataSourceRequest dataSourceRequest); -} diff --git a/backend/src/main/java/com/yfd/platform/eng/service/EngSpecialService.java b/backend/src/main/java/com/yfd/platform/eng/service/EngSpecialService.java deleted file mode 100644 index 0c3a884a..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/EngSpecialService.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.yfd.platform.eng.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.eng.entity.EqSpecial; - -import java.util.Map; - -/** - * 电站专题-环保设施运行情况服务 - */ -public interface EngSpecialService { - - /** - * 处理kendo列表 - * @param dataSourceRequest 数据源请求 - * @param filterResult 筛选结果 - * @param page 分页 - * @return 数据源结果 - */ - DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page); - - /** - * 处理kendo返回列表字典匹配 - * @param dataSourceRequest 数据源请求 - * @param dataSourceResult 数据源结果 - */ - void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult); -} diff --git a/backend/src/main/java/com/yfd/platform/eng/service/impl/AlarmPointServiceImpl.java b/backend/src/main/java/com/yfd/platform/eng/service/impl/AlarmPointServiceImpl.java deleted file mode 100644 index 225a0a57..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/impl/AlarmPointServiceImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.yfd.platform.eng.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.eng.entity.vo.AlarmStcdCountVo; -import com.yfd.platform.eng.service.AlarmPointService; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * 警报锚点服务实现 - */ -@Service -public class AlarmPointServiceImpl implements AlarmPointService { - - @Override - public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page) { - // 模拟数据,实际应该从数据库查询 - List dataList = new ArrayList<>(); - // 模拟添加一些数据 - AlarmStcdCountVo vo1 = new AlarmStcdCountVo(); - vo1.setStcd("ST001"); - vo1.setStnm("电站1"); - vo1.setAlarmCount(10); - vo1.setUnhandledCount(3); - vo1.setHandlingCount(2); - vo1.setHandledCount(5); - dataList.add(vo1); - - AlarmStcdCountVo vo2 = new AlarmStcdCountVo(); - vo2.setStcd("ST002"); - vo2.setStnm("电站2"); - vo2.setAlarmCount(8); - vo2.setUnhandledCount(2); - vo2.setHandlingCount(1); - vo2.setHandledCount(5); - dataList.add(vo2); - - DataSourceResult result = new DataSourceResult<>(); - result.setData(dataList); - result.setTotal(dataList.size()); - return result; - } - - @Override - public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) { - // 处理字典匹配,实际应该根据业务需求实现 - } - - @Override - public AlarmStcdCountVo getAlarmCount(String stcd) { - // 模拟数据,实际应该从数据库查询 - AlarmStcdCountVo vo = new AlarmStcdCountVo(); - vo.setStcd(stcd); - vo.setStnm("电站" + stcd); - vo.setAlarmCount(5); - vo.setUnhandledCount(1); - vo.setHandlingCount(1); - vo.setHandledCount(3); - return vo; - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqDataServiceImpl.java deleted file mode 100644 index 2fc6bc42..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqDataServiceImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.yfd.platform.eng.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.eng.service.EngEqDataService; - -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Map; - -/** - * 生态流量数据服务实现 - */ -@Service -public class EngEqDataServiceImpl implements EngEqDataService { - - @Override - public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) { - // 处理字典匹配,实际应该根据业务需求实现 - } - - @Override - public String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map filterResult) { - // 模拟SQL条件,实际应该根据业务需求实现 - return "1=1"; - } - - @Override - public DataSourceResult processDayKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult processKendoDrtpList(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult getFastSiteLastData(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public Object getEngLimit(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - return null; - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqIntervalServiceImpl.java b/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqIntervalServiceImpl.java deleted file mode 100644 index d851bc61..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqIntervalServiceImpl.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.yfd.platform.eng.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.*; -import com.yfd.platform.common.enums.QecIntervalEnum; -import com.yfd.platform.common.enums.ShowEnum; -import com.yfd.platform.eng.domain.MsEngEq; -import com.yfd.platform.eng.service.EngEqIntervalService; -import com.yfd.platform.utils.QueryWrapperUtil; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; - -import java.util.*; - -/** - * 生态流量区间统计服务实现 - */ -@Service -public class EngEqIntervalServiceImpl implements EngEqIntervalService { - @Resource - private DynamicSQLMapper dynamicSQLMapper; - @Override - public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page) { - // 模拟数据,实际应该从数据库查询 - List dataList = new ArrayList<>(); - DataSourceResult result = new DataSourceResult(); - result.setData(dataList); - result.setTotal(0L); - return result; - } - - @Override - public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) { - // 处理字典匹配,实际应该根据业务需求实现 - } - - @Override - public DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy) { - DataSourceResult dataSourceResult = new DataSourceResult<>(); - DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); - StringBuilder sql = new StringBuilder(); - - sql.append("select AVQ_POINT_STATE as avqPointState, ENNM as ennm, RZ as rz, HBRVCD_NAME as hbrvcdName, QEC_INTERVAL as qecInterval, LTTD as lttd, BASE_ID as baseId, ANCHO_POINT_STATE as anchoPointState, HBRVCD as hbrvcd, MWR_RATE as mwrRate, SITESTEPSORT as siteStepSort, AVQ_INTERVAL as avqInterval, TTPWR as ttpwr, QI as qi, LGTD as lgtd, STTP_CODE as sttpCode, QEC_RATE as qecRate, BASESTEPSORT as baseStepSort, BASE_NAME as baseName, AVQ as avq, QO as qo, MWR_POINT_STATE as mwrPointState, QO_SUM as qoSum, orderIndex as orderindex, DTIN_ENV as dtinEnv, RVCDSTEPSORT as rvcdStepSort, sttp as sttp, AVQ_RATE as avqRate, DTMEL as dtmel, STCD as stcd, RSTCDSTEPSORT as rstcdStepSort, ADDVCD_NAME as addvcdName, QI_SUM as qiSum, MWR_INTERVAL as mwrInterval, NORMZ as normz"); - sql.append(" FROM "); - sql.append("(select MSB.STCD,MSB.STNM as ENNM,MSB.BASESTEPSORT,MSB.SITESTEPSORT,MSB.RVCDSTEPSORT,MSB.RSTCDSTEPSORT ,MSB.BASE_NAME,MSB.BASE_ID,MSB.ORDER_INDEX orderIndex,MSB.HBRVCD ,MSB.HBRVCD_NAME,MSB.ADDVCD_NAME ,MSB.STTP_CODE,'ENG' as sttp,MSB.LGTD,MSB.LTTD,MSB.DTMEL ,MSB.TTPWR,MSB.NORMZ,MSB.DTIN_ENV,MSB.AVQ ,SQR.QEC_RATE,SQR.MWR_RATE,SQR.AVQ_RATE,SHR.QI,SHR.QO,SHR.RZ,SHR.QO_SUM,SHR.QI_SUM,(CASE WHEN SQR.STCD IS NULL and qecR.stcd is null THEN 'QEC_STLL_5_EMPTY' WHEN SQR.STCD IS NULL and qecR.stcd is not null THEN 'QEC_STLL_6_NOEQMN' WHEN SQR.STCD IS NOT NULL AND SQR.QR = -2 THEN 'QEC_STLL_6_NOEQMN' WHEN SQR.STCD IS NOT NULL AND SQR.QR = -1 THEN 'QEC_STLL_5_EMPTY' WHEN SQR.QEC_RATE >= 95 THEN 'QEC_STLL_1_DY95' WHEN SQR.QEC_RATE >= 90 AND 95 > SQR.QEC_RATE THEN 'QEC_STLL_2_90AND95' WHEN SQR.QEC_RATE >= 80 AND 90 > SQR.QEC_RATE THEN 'QEC_STLL_3_80AND90' WHEN 80 > SQR.QEC_RATE THEN 'QEC_STLL_4_XY80' END) AS QEC_INTERVAL ,(CASE WHEN SQR.STCD IS NULL and mwrR.stcd is null THEN 'QEC_STLL_5_EMPTY' WHEN SQR.STCD IS NULL and mwrR.stcd is not null THEN 'QEC_STLL_6_NOEQMN' WHEN SQR.STCD IS NOT NULL AND SQR.MQR = -2 THEN 'QEC_STLL_6_NOEQMN' WHEN SQR.STCD IS NOT NULL AND SQR.MQR = -1 THEN 'QEC_STLL_5_EMPTY' WHEN SQR.MWR_RATE >= 95 THEN 'QEC_STLL_1_DY95' WHEN SQR.MWR_RATE >= 90 AND 95 > SQR.MWR_RATE THEN 'QEC_STLL_2_90AND95' WHEN SQR.MWR_RATE >= 80 AND 90 > SQR.MWR_RATE THEN 'QEC_STLL_3_80AND90' WHEN 80 > SQR.MWR_RATE THEN 'QEC_STLL_4_XY80' END) AS MWR_INTERVAL ,(CASE WHEN MSB.AVQ is not null AND SQR.AVQ_RATE IS NULL THEN 'QEC_STLL_5_EMPTY' WHEN MSB.AVQ is null THEN 'QEC_STLL_6_NOEQMN' WHEN SQR.AVQ_RATE >= 95 THEN 'QEC_STLL_1_DY95' WHEN SQR.AVQ_RATE >= 90 AND 95 > SQR.AVQ_RATE THEN 'QEC_STLL_2_90AND95' WHEN SQR.AVQ_RATE >= 80 AND 90 > SQR.AVQ_RATE THEN 'QEC_STLL_3_80AND90' WHEN 80 > SQR.AVQ_RATE THEN 'QEC_STLL_4_XY80' END) AS AVQ_INTERVAL ,(case when SQR.QEC_RATE is null and MSB.PRSC = 1 then 'eef_1_none' when SQR.QEC_RATE >=95 and MSB.PRSC = 1 then 'eef_1_1' when SQR.QEC_RATE >=90 and 95 > SQR.QEC_RATE and MSB.PRSC = 1 then 'eef_1_2' when SQR.QEC_RATE >=80 and 90 > SQR.QEC_RATE and MSB.PRSC = 1 then 'eef_1_3' when 80 > SQR.QEC_RATE and MSB.PRSC = 1 then 'eef_1_4' when SQR.QEC_RATE is null and MSB.PRSC in (2,3) then 'eef_2_none' when SQR.QEC_RATE >=95 and MSB.PRSC in (2,3) then 'eef_2_1' when SQR.QEC_RATE >=90 and 95 > SQR.QEC_RATE and MSB.PRSC in (2,3) then 'eef_2_2' when SQR.QEC_RATE >=80 and 90 > SQR.QEC_RATE and MSB.PRSC in (2,3) then 'eef_2_3' when 80 > SQR.QEC_RATE and MSB.PRSC in (2,3) then 'eef_2_4' end) as ANCHO_POINT_STATE ,(case when SQR.MWR_RATE is null and MSB.PRSC = 1 then 'eef_1_none' when SQR.MWR_RATE >=95 and MSB.PRSC = 1 then 'eef_1_1' when SQR.MWR_RATE >=90 and 95 > SQR.MWR_RATE and MSB.PRSC = 1 then 'eef_1_2' when SQR.MWR_RATE >=80 and 90 > SQR.MWR_RATE and MSB.PRSC = 1 then 'eef_1_3' when 80 > SQR.MWR_RATE and MSB.PRSC = 1 then 'eef_1_4' when SQR.MWR_RATE is null and MSB.PRSC in (2,3) then 'eef_2_none' when SQR.MWR_RATE >=95 and MSB.PRSC in (2,3) then 'eef_2_1' when SQR.MWR_RATE >=90 and 95 > SQR.MWR_RATE and MSB.PRSC in (2,3) then 'eef_2_2' when SQR.MWR_RATE >=80 and 90 > SQR.MWR_RATE and MSB.PRSC in (2,3) then 'eef_2_3' when 80 > SQR.MWR_RATE and MSB.PRSC in (2,3) then 'eef_2_4' end) as MWR_POINT_STATE ,(case when SQR.AVQ_RATE is null and MSB.PRSC = 1 then 'eef_1_none' when SQR.AVQ_RATE >=95 and MSB.PRSC = 1 then 'eef_1_1' when SQR.AVQ_RATE >=90 and 95 > SQR.AVQ_RATE and MSB.PRSC = 1 then 'eef_1_2' when SQR.AVQ_RATE >=80 and 90 > SQR.AVQ_RATE and MSB.PRSC = 1 then 'eef_1_3' when 80 > SQR.AVQ_RATE and MSB.PRSC = 1 then 'eef_1_4' when SQR.AVQ_RATE is null and MSB.PRSC in (2,3) then 'eef_2_none' when SQR.AVQ_RATE >=95 and MSB.PRSC in (2,3) then 'eef_2_1' when SQR.AVQ_RATE >=90 and 95 > SQR.AVQ_RATE and MSB.PRSC in (2,3) then 'eef_2_2' when SQR.AVQ_RATE >=80 and 90 > SQR.AVQ_RATE and MSB.PRSC in (2,3) then 'eef_2_3' when 80 > SQR.AVQ_RATE and MSB.PRSC in (2,3) then 'eef_2_4' end) as AVQ_POINT_STATE from V_MS_STBPRP_T MSB left join (select STCD ,(case when sum(case when SFDB =1 or SFDB =0 then 1 else 0 end) =0 then null else (sum(case when SFDB =1 then 1 else 0 end)/sum(case when SFDB =1 or SFDB =0 then 1 else 0 end)) end)*100 QEC_RATE ,(case when sum(case when MWR_SFDB =1 or MWR_SFDB =0 then 1 else 0 end) =0 then null else (sum(case when MWR_SFDB =1 then 1 else 0 end)/sum(case when MWR_SFDB =1 or MWR_SFDB =0 then 1 else 0 end)) end)*100 MWR_RATE ,(case when sum(case when AVQ_SFDB =1 or AVQ_SFDB =0 then 1 else 0 end) =0 then null else (sum(case when AVQ_SFDB =1 then 1 else 0 end)/sum(case when AVQ_SFDB =1 or AVQ_SFDB =0 then 1 else 0 end)) end)*100 AVQ_RATE ,case when count(1)=sum(case when SFDB =2 then 1 else 0 end) then -1 when count(1)=sum(case when SFDB =3 then 1 else 0 end) then -2 WHEN sum(CASE WHEN SFDB = 2 THEN 1 ELSE 0 END) >0 and count(1) = sum(CASE WHEN SFDB = 2 THEN 1 ELSE 0 END)+sum(CASE WHEN SFDB = 3 THEN 1 ELSE 0 END)+sum(CASE WHEN SFDB is null THEN 1 ELSE 0 END) then -1 WHEN sum(CASE WHEN SFDB = 2 THEN 1 ELSE 0 END) =0 and count(1) = sum(CASE WHEN SFDB = 2 THEN 1 ELSE 0 END)+sum(CASE WHEN SFDB = 3 THEN 1 ELSE 0 END)+sum(CASE WHEN SFDB is null THEN 1 ELSE 0 END) then -2 end qr ,case when count(1)=sum(case when MWR_SFDB =2 then 1 else 0 end) then -1 when count(1)=sum(case when MWR_SFDB =3 then 1 else 0 end) then -2 WHEN sum(CASE WHEN MWR_SFDB = 2 THEN 1 ELSE 0 END) >0 and count(1) = sum(CASE WHEN MWR_SFDB = 2 THEN 1 ELSE 0 END)+sum(CASE WHEN MWR_SFDB = 3 THEN 1 ELSE 0 END)+sum(CASE WHEN MWR_SFDB is null THEN 1 ELSE 0 END) then -1 WHEN sum(CASE WHEN MWR_SFDB = 2 THEN 1 ELSE 0 END) =0 and count(1) = sum(CASE WHEN MWR_SFDB = 2 THEN 1 ELSE 0 END)+sum(CASE WHEN MWR_SFDB = 3 THEN 1 ELSE 0 END)+sum(CASE WHEN MWR_SFDB is null THEN 1 ELSE 0 END) then -2 end mqr ,case when count(1)=sum(case when AVQ_SFDB =2 then 1 else 0 end) then -1 when count(1)=sum(case when AVQ_SFDB =3 then 1 else 0 end) then -2 end aqr from SD_QEC_R where 1=1 "); - Map params = QueryWrapperUtil.buildSqlConditionsByField(loadOptions); - if(StrUtil.isNotBlank(params.get("TM"))){ - sql.append(" and ").append(params.get("TM")); - } - sql.append(" group by STCD) SQR on MSB.STCD=SQR.STCD left join (SELECT stcd, avg(QI) QI, avg(QO) QO, avg(qec) qec,avg(RZ) RZ,SUM(QI) QI_SUM,SUM(QO) QO_SUM from SD_HYDROPW_R where 1=1 "); - if(StrUtil.isNotBlank(params.get("TM"))){ - sql.append(" and ").append(params.get("TM")); - } - sql.append(" group by STCD) SHR on SHR.STCD = MSB.STCD left join (select STCD from MS_STBPRP_T where is_deleted=0 and sttp_code ='ENG' and stcd not in (select distinct A.STCD from MS_WARN_RULE_STBPRP_B a INNER JOIN MS_WARN_RULE_DETAIL_B b ON a.RULE_ID = b.RULE_ID and b.is_deleted=0 INNER JOIN MS_WARN_RULE_B c ON c.ID = b.RULE_ID where a.is_deleted=0 and b.is_deleted=0 and c.RULE_TYPE in('EQMN') and c.is_deleted=0)) qecR on qecR.STCD =MSB.STCD left join (select STCD from MS_STBPRP_T where is_deleted=0 and sttp_code ='ENG' and stcd not in (select distinct A.STCD from MS_WARN_RULE_STBPRP_B a INNER JOIN MS_WARN_RULE_DETAIL_B b ON a.RULE_ID = b.RULE_ID and b.is_deleted=0 INNER JOIN MS_WARN_RULE_B c ON c.ID = b.RULE_ID where a.is_deleted=0 and b.is_deleted=0 and c.RULE_TYPE in('EQMNMWR') and c.is_deleted=0)) mwrR on mwrR.STCD =MSB.STCD where MSB.STTP_CODE='ENG' and MSB.DTIN=1 and MSB.IS_DELETED = 0 and MSB.BLDSTT_CCODE = 2 and MSB.RUN_STATE=4 )"); - sql.append(" where 1=1 "); - -// sql.append(" and select AVQ_POINT_STATE as avqPointState, ENNM as ennm, RZ as rz, HBRVCD_NAME as hbrvcdName, QEC_INTERVAL as qecInterval, LTTD as lttd, BASE_ID as baseId, ANCHO_POINT_STATE as anchoPointState, HBRVCD as hbrvcd, MWR_RATE as mwrRate, SITESTEPSORT as siteStepSort, AVQ_INTERVAL as avqInterval, TTPWR as ttpwr, QI as qi, LGTD as lgtd, STTP_CODE as sttpCode, QEC_RATE as qecRate, BASESTEPSORT as baseStepSort, BASE_NAME as baseName, AVQ as avq, QO as qo, MWR_POINT_STATE as mwrPointState, QO_SUM as qoSum, orderIndex as orderindex, DTIN_ENV as dtinEnv, RVCDSTEPSORT as rvcdStepSort, sttp as sttp, AVQ_RATE as avqRate, DTMEL as dtmel, STCD as stcd, RSTCDSTEPSORT as rstcdStepSort, ADDVCD_NAME as addvcdName, QI_SUM as qiSum, MWR_INTERVAL as mwrInterval, NORMZ as normz"); - //非分组,求统计 - List groupFields = new ArrayList<>(); - if (CollUtil.isNotEmpty(dataSourceRequest.getAggregate()) && "average".equals(dataSourceRequest.getAggregate().get(0).getAggregate())){ - StringBuilder temp = new StringBuilder("select "); - for (DataSourceRequest.AggregateDescriptor item : dataSourceRequest.getAggregate()) - { - groupFields.add("avg(" + item.getField() + ") as "+item.getField()); - } - temp.append(StrUtil.join(",", groupFields)); - sql = temp.append(" from ( ").append(sql).append(" ) "); - } - if (CollUtil.isNotEmpty(dataSourceRequest.getAggregate()) && "average".equals(dataSourceRequest.getAggregate().get(0).getAggregate())){ - List> list = dynamicSQLMapper.pageAllList(page, sql.toString(), params); - dataSourceResult.setTotal(0); - for (Map objectMap : list) - { - for (DataSourceRequest.AggregateDescriptor item : dataSourceRequest.getAggregate()) - { - objectMap.put(item.getField(),objectMap.get(item.getField().toUpperCase())); - } - } - dataSourceResult.setData(list); - return dataSourceResult; - } - List> mapList =new ArrayList<>(); -// List> mapList = dynamicSQLMapper.pageAllList(page, sql.toString(), params); -// List msEngEqs = convertToMsEngEqList(mapList); - dataSourceResult.setData(mapList); - dataSourceResult.setTotal(ObjectUtil.isNotEmpty(page) ? page.getTotal() : (long) mapList.size()); - return dataSourceResult; - } - - @Override - public DataSourceResult getQgcDayKendoListCust(DataSourceRequest dataSourceRequest, Map filterResult, Page page, String groupBy) { - // 模拟数据,实际应该从数据库查询 - List dataList = new ArrayList<>(); - DataSourceResult result = new DataSourceResult(); - result.setData(dataList); - result.setTotal(0L); - return result; - } - - @Override - public Map getQgcQecStaticData(Object data, String type) { - List> newDataList = (List>)data; - - //生态达标率大于95%的电站数量(环保部) - Long qecCnt = newDataList.stream().filter(it->Objects.equals(it.get("QECINTERVAL"), QecIntervalEnum.QEC_STLL_1_DY95.getCode())).count(); - Long qecTcnt = newDataList.stream().filter(it->!Objects.equals(it.get("QECINTERVAL"), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())).count(); - - //生态达标率大于95%的电站数量(水利部) - Long mwrCnt = newDataList.stream().filter(it->Objects.equals(it.get("MWRINTERVAL"),QecIntervalEnum.QEC_STLL_1_DY95.getCode())).count(); - Long mwrTcnt = newDataList.stream().filter(it->!Objects.equals(it.get("MWRINTERVAL"), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())).count(); - - //生态达标率大于95%的电站数量(多年平均) - Long avqCnt = newDataList.stream().filter(it->Objects.equals(it.get("AVQINTERVAL"),QecIntervalEnum.QEC_STLL_1_DY95.getCode())).count(); - Long avqTcnt = newDataList.stream().filter(it->!Objects.equals(it.get("AVQINTERVAL"), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())).count(); - - //无生态流量要求的电站数据 - Long noCnt = newDataList.stream().filter(it-> - Objects.equals(it.get("QECINTERVAL"),QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()) - && - Objects.equals(it.get("MWRINTERVAL"),QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()) - && - Objects.equals(it.get("AVQINTERVAL"),QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()) - ).count(); - - Map result = new HashMap<>(); - result.put("engCnt", newDataList.size()); - - List> qgcQecVos = new ArrayList<>(); - - Map qvo = new HashMap<>(); - qvo.put("qecTCnt", Math.toIntExact(qecTcnt)); - qvo.put("qecCnt", Math.toIntExact(qecCnt)); - qvo.put("code", QecIntervalEnum.QEC_STLL_1_DY95.getCode()); - qvo.put("desc", ShowEnum.Q.getDesc()+"_"+QecIntervalEnum.QEC_STLL_1_DY95.getDesc()); - qvo.put("type", ShowEnum.Q.getCode()); - qgcQecVos.add(qvo); - - Map mwrVo = new HashMap<>(); - mwrVo.put("qecTCnt", Math.toIntExact(mwrTcnt)); - mwrVo.put("qecCnt", Math.toIntExact(mwrCnt)); - mwrVo.put("code", QecIntervalEnum.QEC_STLL_1_DY95.getCode()); - mwrVo.put("desc", ShowEnum.M.getDesc()+"_"+QecIntervalEnum.QEC_STLL_1_DY95.getDesc()); - mwrVo.put("type", ShowEnum.M.getCode()); - qgcQecVos.add(mwrVo); - - Map avqVo = new HashMap<>(); - avqVo.put("qecTCnt", Math.toIntExact(avqTcnt)); - avqVo.put("qecCnt", Math.toIntExact(avqCnt)); - avqVo.put("code", QecIntervalEnum.QEC_STLL_1_DY95.getCode()); - avqVo.put("desc", ShowEnum.A.getDesc()+"_"+QecIntervalEnum.QEC_STLL_1_DY95.getDesc()); - avqVo.put("type", ShowEnum.A.getCode()); - qgcQecVos.add(avqVo); - - Map noVo = new HashMap<>(); - noVo.put("qecTCnt", Math.toIntExact(noCnt)); - noVo.put("qecCnt", Math.toIntExact(noCnt)); - noVo.put("code", QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()); - noVo.put("desc", QecIntervalEnum.QEC_STLL_6_NOEQMN.getDesc()); - noVo.put("type", ShowEnum.N.getCode()); - qgcQecVos.add(noVo); - - result.put("list", qgcQecVos); - - return result; - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqServiceImpl.java b/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqServiceImpl.java deleted file mode 100644 index 516de82e..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngEqServiceImpl.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.yfd.platform.eng.service.impl; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.common.*; -import com.yfd.platform.eng.domain.MsEngEq; -import com.yfd.platform.eng.mapper.EngEqMapper; -import com.yfd.platform.eng.service.EngEqService; -import com.yfd.platform.utils.KendoUtil; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; - -import java.util.*; - -/** - * 生态流量服务实现 - */ -@Service -public class EngEqServiceImpl extends ServiceImpl implements EngEqService { - @Resource - MicroservicDynamicSQLMapper microservicDynamicSQLMapper; - @Override - public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page) { - - DataSourceResult dataSourceResult = new DataSourceResult<>(); - StringBuilder sql = new StringBuilder(); - String kendoGroupCode = "default"; - String kendoGroupCode2 = "TM"; - if (filterResult.get(kendoGroupCode) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode).getSelectSql())) { - sql.append(filterResult.get("default").getSelectSql()); - if (filterResult.get(kendoGroupCode2) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode2).getSelectSql())) { - sql.append(StrUtil.replace(filterResult.get(kendoGroupCode2).getSelectSql(),"select",",")); - } - sql.append(",MET1.QEC beforeQec FROM "); - sql.append(" MS_ENG_T MET left join MS_ENG_T MET1 on MET1.stcd=MET.stcd and MET1.TYPE=met.type and add_months(MET1.TM,12)=met.tm inner join V_MS_STBPRP_T MSB on MSB.STCD=MET.STCD where MSB.STTP_CODE = 'ENG' and MSB.BLDSTT_CCODE = 2 ");//去掉大中型电站过滤条件 - } - - if (filterResult.get(kendoGroupCode) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode).getGroupSql())) { - sql.append(" and ").append(filterResult.get(kendoGroupCode).getGroupSql()); - } - if (filterResult.get(kendoGroupCode2) != null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode2).getGroupSql())) { - sql.append(" and ").append(filterResult.get(kendoGroupCode2).getGroupSql()); - } - if (filterResult.get(kendoGroupCode2) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode2).getOrderBySql())) { - sql.append(" ").append(filterResult.get(kendoGroupCode2).getOrderBySql()); - } - //组装分组条件 - String groupBy = KendoUtil.getGroupBy(dataSourceRequest); - GroupingInfo[] group = dataSourceRequest.toDevRequest().getGroup(); - if (StrUtil.isNotBlank(groupBy)) { - StringBuilder temp = new StringBuilder("select "); - List groupFields = new ArrayList<>(); - for (GroupingInfo item : group) { - groupFields.add(item.getSelector()); - } - temp.append(StrUtil.join(",",groupFields)); - for (GroupingInfo item : group) { - groupFields.add(item.getSelector()); - temp.append(",").append("count(*) as count_").append(item.getSelector()); - } - sql = temp.append(" from ( ").append(sql).append(" ) ").append(groupBy); - } - - if (filterResult.get(kendoGroupCode) !=null && StrUtil.isNotBlank(filterResult.get(kendoGroupCode).getOrderBySql())) { - sql.append(" ").append(filterResult.get(kendoGroupCode).getOrderBySql()); - } - - //组装map参数 - Map map = new HashMap<>(); - for (String key : filterResult.keySet()) { - map.putAll(filterResult.get(key).getParamMap()); - } - - - if (StrUtil.isNotBlank(groupBy)) { - List> list = microservicDynamicSQLMapper.pageAllList(page, sql.toString(), map); - //是否扁平化分组 - if (null != dataSourceRequest.getGroupResultFlat() && dataSourceRequest.getGroupResultFlat()) { - dataSourceResult.setData((new GroupHelper()).faltGroup(list, Arrays.asList(group))); - } else { - dataSourceResult.setData((new GroupHelper()).group(list, Arrays.asList(group))); - } - dataSourceResult.setTotal(0); - return dataSourceResult; - } - List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), map,MsEngEq.class); - dataSourceResult.setData(list); - dataSourceResult.setTotal(ObjectUtil.isNotEmpty(page) ? page.getTotal() : (long) list.size()); - return dataSourceResult; - } - - @Override - public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) { - // 处理字典匹配,实际应该根据业务需求实现 - } - - @Override - public String processGroupConditionSql(DataSourceRequest dataSourceRequest, Map filterResult) { - // 模拟SQL条件,实际应该根据业务需求实现 - return "1=1"; - } - - @Override - public DataSourceResult lastEngDataSite(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult getSfdbInfo(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult qecSfdbCountByStcd(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult qecRateCount(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } - - @Override - public DataSourceResult qecSfdbCount(DataSourceRequest dataSourceRequest) { - // 模拟数据,实际应该从数据库查询 - DataSourceResult result = new DataSourceResult(); - result.setData(new ArrayList<>()); - result.setTotal(0L); - return result; - } -} diff --git a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngSpecialServiceImpl.java b/backend/src/main/java/com/yfd/platform/eng/service/impl/EngSpecialServiceImpl.java deleted file mode 100644 index 0854231c..00000000 --- a/backend/src/main/java/com/yfd/platform/eng/service/impl/EngSpecialServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.yfd.platform.eng.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.eng.entity.EqSpecial; -import com.yfd.platform.eng.service.EngSpecialService; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * 电站专题-环保设施运行情况服务实现 - */ -@Service -public class EngSpecialServiceImpl implements EngSpecialService { - - @Override - public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest, Map filterResult, Page page) { - // 模拟数据,实际应该从数据库查询 - List dataList = new ArrayList<>(); - // 模拟添加一些数据 - EqSpecial special1 = new EqSpecial(); - special1.setId("1"); - special1.setStcd("ST001"); - special1.setStnm("电站1"); - special1.setEqType("生态流量监测设施"); - special1.setEqName("流量监测仪"); - special1.setStatus("正常运行"); - special1.setCheckTime("2023-04-14"); - special1.setChecker("张三"); - special1.setRemark("无"); - dataList.add(special1); - - EqSpecial special2 = new EqSpecial(); - special2.setId("2"); - special2.setStcd("ST002"); - special2.setStnm("电站2"); - special2.setEqType("水质监测设施"); - special2.setEqName("水质分析仪"); - special2.setStatus("正常运行"); - special2.setCheckTime("2023-04-15"); - special2.setChecker("李四"); - special2.setRemark("无"); - dataList.add(special2); - - DataSourceResult result = new DataSourceResult<>(); - result.setData(dataList); - result.setTotal(dataList.size()); - return result; - } - - @Override - public void processKendoGetListLoadResult(DataSourceRequest dataSourceRequest, DataSourceResult dataSourceResult) { - // 处理字典匹配,实际应该根据业务需求实现 - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/env/fp/service/FpBuildService.java b/backend/src/main/java/com/yfd/platform/env/fp/service/FpBuildService.java deleted file mode 100644 index bf470bf0..00000000 --- a/backend/src/main/java/com/yfd/platform/env/fp/service/FpBuildService.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.yfd.platform.env.fp.service; - -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.fp.entity.vo.FpConstructionSituationVo; - -public interface FpBuildService { - - DataSourceResult processKendoList(DataSourceRequest dataSourceRequest); -} diff --git a/backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpBuildServiceImpl.java deleted file mode 100644 index c6dbadd1..00000000 --- a/backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpBuildServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.yfd.platform.env.fp.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.DataSourceLoadOptionsBase; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.common.MicroservicDynamicSQLMapper; -import com.yfd.platform.common.PageInfo; -import com.yfd.platform.env.fp.entity.vo.FpConstructionSituationVo; -import com.yfd.platform.env.fp.service.FpBuildService; -import com.yfd.platform.utils.QgcQueryWrapperUtil; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.List; - -@Service -public class FpBuildServiceImpl implements FpBuildService { - - @Resource - private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; - - @Override - public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest) { - DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); - PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions); - Page page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null; - - String sql = "SELECT t.STTP AS sttpCode, " + - " SUM(CASE WHEN t.DTIN = 1 THEN 1 ELSE 0 END) AS bonusing, " + - " SUM(CASE WHEN t.DTIN = 1 AND t.BLDSTT_CODE = 2 THEN 1 ELSE 0 END) AS builtConnected, " + - " SUM(CASE WHEN t.BLDSTT_CODE = 2 THEN 1 ELSE 0 END) AS built, " + - " SUM(CASE WHEN t.DTIN = 1 AND t.BLDSTT_CODE = 1 THEN 1 ELSE 0 END) AS buildingConnected, " + - " SUM(CASE WHEN t.BLDSTT_CODE = 1 THEN 1 ELSE 0 END) AS building, " + - " SUM(CASE WHEN NVL(t.BLDSTT_CODE, 0) = 0 THEN 1 ELSE 0 END) AS noBuilt " + - "FROM SD_FPSS_B_H t " + - "GROUP BY t.STTP " + - "ORDER BY t.STTP"; - - List list = microservicDynamicSQLMapper.pageAllListWithResultType( - page, - sql, - new HashMap<>(), - FpConstructionSituationVo.class - ); - - DataSourceResult result = new DataSourceResult<>(); - result.setData(list); - result.setTotal(page != null ? page.getTotal() : list.size()); - result.setAggregates(new HashMap<>()); - return result; - } -} diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java deleted file mode 100644 index 99f2ade4..00000000 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdEngInfoBHServiceImpl.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.yfd.platform.env.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdEngInfoBHRequest; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.service.ISdEngInfoBHService; -import com.yfd.platform.utils.SecurityUtils; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -/** - *

- * 水电水利工程基础信息表 服务实现类 - *

- */ -@Service -public class SdEngInfoBHServiceImpl extends ServiceImpl implements ISdEngInfoBHService { - - @Resource - private SdEngInfoBHMapper engInfoBHMapper; - - @Resource - private SysUserDataScopeMapper sysUserDataScopeMapper; - - @Override - public Page queryPageList(Page page, String ennm, String rvcd, String baseId, String hycd) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper .like(ennm != null && !ennm.isEmpty(), SdEngInfoBH::getEnnm, ennm) - .eq(rvcd != null && !rvcd.isEmpty(), SdEngInfoBH::getRvcd, rvcd) - .eq(baseId != null && !baseId.isEmpty(), SdEngInfoBH::getBaseId, baseId) - .eq(hycd != null && !hycd.isEmpty(), SdEngInfoBH::getHycd, hycd) - .orderByAsc(SdEngInfoBH::getOrderIndex); - - Set authorizedStations = getUserAuthorizedStationCodes(); - if (authorizedStations != null && !authorizedStations.isEmpty()) { - wrapper.in(SdEngInfoBH::getStcd, authorizedStations); - }else if (!"admin".equals(SecurityUtils.getCurrentUsername())){ - return page; - } - return this.page(page, wrapper); - } - - @Override - public List getByBaseId(String baseId) { - return engInfoBHMapper.selectByBaseId(baseId); - } - - @Override - public List getByHycd(String hycd) { - return engInfoBHMapper.selectByHycd(hycd); - } - - @Override - public List getByRvcd(String rvcd) { - return engInfoBHMapper.selectByRvcd(rvcd); - } - - @Override - public List selectForDropdown(SdEngInfoBHRequest sdEngInfoBHRequest) { - String baseId = sdEngInfoBHRequest.getBaseId(); - String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); - String ennm = sdEngInfoBHRequest.getEnnm(); - List rvcds = sdEngInfoBHRequest.getRvcds(); - List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) - .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) - .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, 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); - - if("admin".equals(SecurityUtils.getCurrentUsername())){ - return this.list(wrapper); - } - Set authorizedStations = getUserAuthorizedStationCodes(); - if (authorizedStations != null && !authorizedStations.isEmpty()) { - List list = this.list(wrapper); - return list.stream() - .filter(item -> authorizedStations.contains(item.getStcd())) - .collect(Collectors.toList()); - }else{ - return new ArrayList<>(); - } - } - @Override - public Set getUserAuthorizedStationCodes() { - String userId = SecurityUtils.getUserId(); - List sysUserDataScopes = sysUserDataScopeMapper.selectList( - new LambdaQueryWrapper() - .eq(SysUserDataScope::getUserId, userId) - .select(SysUserDataScope::getOrgId, SysUserDataScope::getOrgType) - ); - - if (sysUserDataScopes == null || sysUserDataScopes.isEmpty()) { - return new HashSet<>(); - } - - - Set stationCodes = new HashSet<>(); - Set basinCodes = new HashSet<>(); - - for (SysUserDataScope scope : sysUserDataScopes) { - String orgType = scope.getOrgType(); - String orgId = scope.getOrgId(); - - if ("STATION".equals(orgType)) { - SdEngInfoBH station = engInfoBHMapper.selectById(orgId); - if (station != null) { - if (station.getHbrvcd() != null) { - basinCodes.add(station.getHbrvcd()); - } - if (station.getStcd() != null) { - stationCodes.add(station.getStcd()); - } - - } - } else if ("HBRVCD".equals(orgType)) { - List stationList = engInfoBHMapper.selectByHbrvcd(orgId); - if (stationList != null) { - for (SdEngInfoBH station : stationList) { - if (station.getStcd() != null) { - stationCodes.add(station.getStcd()); - } - if (station.getEnnm() != null) { - basinCodes.add(station.getHbrvcd()); - } - } - } - - } - } - - if (!stationCodes.isEmpty()) { - return stationCodes; - } - - if (!basinCodes.isEmpty()) { - List engInfos = this.lambdaQuery() - .select(SdEngInfoBH::getStcd) - .in(SdEngInfoBH::getHbrvcd, basinCodes) - .list(); - return engInfos.stream() - .map(SdEngInfoBH::getStcd) - .collect(Collectors.toSet()); - } - - return stationCodes; - } - - @Override - public boolean addEngInfo(SdEngInfoBH engInfo) { - return this.save(engInfo); - } - - @Override - public boolean updateEngInfo(SdEngInfoBH engInfo) { - return this.updateById(engInfo); - } - - @Override - public boolean deleteEngInfo(String stcd) { - return this.removeById(stcd); - } - - @Override - public List selectRegDropdown(SdEngInfoBHRequest sdEngInfoBHRequest) { - String baseId = sdEngInfoBHRequest.getBaseId(); - String ennm = sdEngInfoBHRequest.getEnnm(); - String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); - List rvcds = sdEngInfoBHRequest.getRvcds(); - List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) - .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) - .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, 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); - - return this.list(wrapper); - } -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/env/controller/FpssRController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/FpssRController.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/controller/FpssRController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/FpssRController.java index a6310248..3c12a6bc 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/FpssRController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/FpssRController.java @@ -1,9 +1,9 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdFpssR; -import com.yfd.platform.env.service.ISdFpssRService; +import com.yfd.platform.qgc_base.domain.SdFpssR; +import com.yfd.platform.qgc_base.service.ISdFpssRService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdCountryBController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdCountryBController.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/env/controller/SdCountryBController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdCountryBController.java index aeb16b3f..442cfd0d 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdCountryBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdCountryBController.java @@ -1,15 +1,14 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdCountryB; -import com.yfd.platform.env.service.ISdCountryBService; +import com.yfd.platform.qgc_base.domain.SdCountryB; +import com.yfd.platform.qgc_base.service.ISdCountryBService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; -import java.util.List; /** *

diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdEngInfoBHController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/controller/SdEngInfoBHController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java index aa0f6255..feb06ac0 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdEngInfoBHController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java @@ -1,17 +1,16 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdEngInfoBHRequest; -import com.yfd.platform.env.service.ISdEngInfoBHService; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest; +import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; -import java.util.List; /** *

diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java new file mode 100644 index 00000000..1524a5a9 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java @@ -0,0 +1,35 @@ +package com.yfd.platform.qgc_base.controller; + +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/eng/base") +@Tag(name = "电站基础监测") +public class SdEngMonitorController { + + @Resource + private ISdEngInfoBHService engInfoBHService; + + @GetMapping("/msstbprpt/getStInfoByStcd") + @Operation(summary = "根据站码查询单条电站基础数据") + public ResponseResult getStInfoByStcd(@RequestParam String stcd) { + return ResponseResult.successData(engInfoBHService.getStInfoByStcd(stcd)); + } + + @PostMapping("/eiaapproval/GetKendoList") + @Operation(summary = "查询生态环保批复文件列表") + public ResponseResult getEiaapprovalKendoList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engInfoBHService.getEiaapprovalKendoList(dataSourceRequest)); + } +} diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdFishDictoryBController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/controller/SdFishDictoryBController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java index d7c6ee7f..0638da0f 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdFishDictoryBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFishDictoryBController.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -6,15 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdFishDictoryB; -import com.yfd.platform.env.service.ISdFishDictoryBService; +import com.yfd.platform.qgc_base.domain.SdFishDictoryB; +import com.yfd.platform.qgc_base.service.ISdFishDictoryBService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; -import java.util.Arrays; import java.util.List; /** diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java index f56fb92a..1f83d18c 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdFpssBHController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java @@ -1,17 +1,15 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdFpssBH; -import com.yfd.platform.env.service.ISdFpssBHService; +import com.yfd.platform.qgc_base.domain.SdFpssBH; +import com.yfd.platform.qgc_base.service.ISdFpssBHService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; -import java.util.List; - /** *

* 过鱼设施表 前端控制器 diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdHbrvDicController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHbrvDicController.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/controller/SdHbrvDicController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHbrvDicController.java index 5faa2c02..e52b8e93 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdHbrvDicController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHbrvDicController.java @@ -1,10 +1,10 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdHbrvDic; -import com.yfd.platform.env.service.ISdHbrvDicService; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.service.ISdHbrvDicService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdHycdDicController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHycdDicController.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/controller/SdHycdDicController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHycdDicController.java index cead7e6f..9075f0db 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdHycdDicController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHycdDicController.java @@ -1,10 +1,10 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdHycdDic; -import com.yfd.platform.env.service.ISdHycdDicService; +import com.yfd.platform.qgc_base.domain.SdHycdDic; +import com.yfd.platform.qgc_base.service.ISdHycdDicService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdHydrobaseController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHydrobaseController.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/controller/SdHydrobaseController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHydrobaseController.java index 9ef89dfb..0cf36e7a 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdHydrobaseController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdHydrobaseController.java @@ -1,11 +1,11 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdHydrobase; -import com.yfd.platform.env.service.ISdHydrobaseService; +import com.yfd.platform.qgc_base.domain.SdHydrobase; +import com.yfd.platform.qgc_base.service.ISdHydrobaseService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; diff --git a/backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdRvcdDicController.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/SdRvcdDicController.java index c4f08903..9a1c6bdc 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/SdRvcdDicController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdRvcdDicController.java @@ -1,11 +1,11 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.domain.SdRvcdDic; -import com.yfd.platform.env.service.ISdRvcdDicService; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.service.ISdRvcdDicService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/TreeStructureController.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java rename to backend/src/main/java/com/yfd/platform/qgc_base/controller/TreeStructureController.java index 1b39ca25..0b9d6ce8 100644 --- a/backend/src/main/java/com/yfd/platform/env/controller/TreeStructureController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/TreeStructureController.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.controller; +package com.yfd.platform.qgc_base.controller; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.service.ITreeStructureService; +import com.yfd.platform.qgc_base.service.ITreeStructureService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.GetMapping; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdCountryB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdCountryB.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/domain/SdCountryB.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdCountryB.java index ff739e46..62d1517c 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdCountryB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdCountryB.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdEngInfoBH.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/env/domain/SdEngInfoBH.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java index 4d258c45..f316193c 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdEngInfoBH.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdEngInfoBHRequest.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBHRequest.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/domain/SdEngInfoBHRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBHRequest.java index 89cf2343..5227bdb2 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdEngInfoBHRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBHRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdFishDictoryB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/env/domain/SdFishDictoryB.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java index d7b4f686..554ddf1e 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdFishDictoryB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFishDictoryB.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdFpssBH.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/env/domain/SdFpssBH.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java index 1e0c7335..a20947e9 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdFpssBH.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdFpssR.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssR.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/domain/SdFpssR.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssR.java index a6baecda..7688ff15 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdFpssR.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssR.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdHbrvDic.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/domain/SdHbrvDic.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java index 66a99ed9..94b45e33 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdHbrvDic.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdHycdDic.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHycdDic.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/domain/SdHycdDic.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHycdDic.java index aadce20f..4d8826ea 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdHycdDic.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHycdDic.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdHydrobase.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHydrobase.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/domain/SdHydrobase.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHydrobase.java index 92378d63..296090ae 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdHydrobase.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHydrobase.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdPraddRltnB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPraddRltnB.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/domain/SdPraddRltnB.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPraddRltnB.java index 67d546bd..9bd3732b 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdPraddRltnB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPraddRltnB.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdPrhbrltnB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPrhbrltnB.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/domain/SdPrhbrltnB.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPrhbrltnB.java index 747a21e7..625e6598 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdPrhbrltnB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPrhbrltnB.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdPrhyrltnB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPrhyrltnB.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/domain/SdPrhyrltnB.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPrhyrltnB.java index ef22ccf0..e6e410bd 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdPrhyrltnB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdPrhyrltnB.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdRvcdDic.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/SdRvcdDic.java index 9f3a9676..2b92f18d 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/SdRvcdDic.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdRvcdDic.java @@ -1,11 +1,10 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; -import java.util.Date; import java.util.List; /** diff --git a/backend/src/main/java/com/yfd/platform/env/domain/StationBasinInfo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/StationBasinInfo.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/domain/StationBasinInfo.java rename to backend/src/main/java/com/yfd/platform/qgc_base/domain/StationBasinInfo.java index 2e348b36..ac1f326c 100644 --- a/backend/src/main/java/com/yfd/platform/env/domain/StationBasinInfo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/StationBasinInfo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.domain; +package com.yfd.platform.qgc_base.domain; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngBaseInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngBaseInfoVo.java new file mode 100644 index 00000000..d2593c28 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngBaseInfoVo.java @@ -0,0 +1,103 @@ +package com.yfd.platform.qgc_base.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "电站基础详情") +public class EngBaseInfoVo extends SdEngInfoBH { + + @Schema(description = "主键ID") + private String id; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "站类主键") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "站类名称") + private String sttpName; + + @Schema(description = "站类全路径") + private String sttpFullPath; + + @Schema(description = "站类层级") + private Integer sttpTreeLevel; + + @Schema(description = "建设阶段编码") + private String blprdCode; + + @Schema(description = "建设阶段名称") + private String blprdName; + + @Schema(description = "建设阶段分类编码") + private String blprdCcode; + + @Schema(description = "建设阶段分类名称") + private String blprdCname; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "流域名称") + private String rvcdName; + + @Schema(description = "流域全路径") + private String rvcdFullPath; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "行政区全路径") + private String addvcdFullPath; + + @Schema(description = "国家名称") + private String countryName; + + @Schema(description = "公司名称") + private String hynm; + + @Schema(description = "集团名称") + private String topHynm; + + @Schema(description = "数据接入中文") + private String dtinName; + + @Schema(description = "建设状态名称") + private String bldsttName; + + @Schema(description = "建设状态分类编码") + private String bldsttCcode; + + @Schema(description = "建设状态分类名称") + private String bldsttCcodeName; + + @Schema(description = "开发方式名称") + private String dvtpName; + + @Schema(description = "调节性能名称") + private String rgcpName; + + @Schema(description = "工程类别名称") + private String engtpName; + + @Schema(description = "工程规模名称") + private String prscName; + + @Schema(description = "工程规模库容名称") + private String scrscName; + + @Schema(description = "工程等别名称") + private String prgrName; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngEiaapprovalVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngEiaapprovalVo.java new file mode 100644 index 00000000..21648517 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngEiaapprovalVo.java @@ -0,0 +1,125 @@ +package com.yfd.platform.qgc_base.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + +@Data +@Schema(description = "生态环保批复文件列表") +public class EngEiaapprovalVo { + + @Schema(description = "主键ID") + private String id; + + @Schema(description = "流域") + private String basin; + + @Schema(description = "河流") + private String river; + + @Schema(description = "电站") + private String hydropowerStation; + + @Schema(description = "电站建设状态中文") + private String bldsttCName; + + @Schema(description = "批复文号") + private String approvalFileNo; + + @Schema(description = "批复文件标题") + private String approvalFileTitle; + + @Schema(description = "文件名") + private String fileName; + + @Schema(description = "附件路径") + private String flpath; + + @Schema(description = "生态流量") + private String ecologicalFlow; + + @Schema(description = "水环境保护措施") + private String waterEnvProtection; + + @Schema(description = "低温水减缓措施") + private String coldWaterMitigation; + + @Schema(description = "栖息地保护") + private String habitatProtection; + + @Schema(description = "过鱼措施") + private String fishPassageMeasures; + + @Schema(description = "鱼类增殖放流") + private String fishStocking; + + @Schema(description = "陆生生态保护/水土保持措施") + private String terrestrialEcoSoilCons; + + @Schema(description = "珍稀植物保护措施") + private String rarePlantProtection; + + @Schema(description = "动物救助") + private String animalRescue; + + @Schema(description = "移民安置") + private String resettlementMeasures; + + @Schema(description = "施工期防治措施或其他环境保护措施") + private String constructionPollutionCtrl; + + @Schema(description = "地下水及地质环境保护措施") + private String groundwaterGeoProtect; + + @Schema(description = "风景名胜区保护措施") + private String scenicAreaProtection; + + @Schema(description = "环境监测要求") + private String envMonitoringRequire; + + @Schema(description = "基地编码") + private String baseid; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "环评表中的电站编码") + private String eiaStcd; + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "电站类型") + private String sttp; + + @Schema(description = "电站类型名称") + private String sttpName; + + @Schema(description = "电站建设状态代码") + private String bldsttCcode; + + @Schema(description = "电站建设状态") + private String bldstt; + + @Schema(description = "经度") + private String lgtd; + + @Schema(description = "纬度") + private String lttd; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; +} diff --git a/backend/src/main/java/com/yfd/platform/env/entity/vo/BatchDeleteAo.java b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/env/entity/vo/BatchDeleteAo.java rename to backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java index f4dfafbd..2fbb7069 100644 --- a/backend/src/main/java/com/yfd/platform/env/entity/vo/BatchDeleteAo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.entity.vo; +package com.yfd.platform.qgc_base.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/entity/vo/DataParam.java b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/DataParam.java similarity index 82% rename from backend/src/main/java/com/yfd/platform/env/entity/vo/DataParam.java rename to backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/DataParam.java index 88b5bacc..79e9498e 100644 --- a/backend/src/main/java/com/yfd/platform/env/entity/vo/DataParam.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/DataParam.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.entity.vo; +package com.yfd.platform.qgc_base.entity.vo; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/entity/vo/HydrobaseWbsVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/HydrobaseWbsVo.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/entity/vo/HydrobaseWbsVo.java rename to backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/HydrobaseWbsVo.java index f08f9206..47c6d19a 100644 --- a/backend/src/main/java/com/yfd/platform/env/entity/vo/HydrobaseWbsVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/HydrobaseWbsVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.entity.vo; +package com.yfd.platform.qgc_base.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdCountryBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdCountryBMapper.java similarity index 66% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdCountryBMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdCountryBMapper.java index 4a796ce0..bef73fbe 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdCountryBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdCountryBMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdCountryB; +import com.yfd.platform.qgc_base.domain.SdCountryB; /** *

diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdEngInfoBHMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdEngInfoBHMapper.java similarity index 87% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdEngInfoBHMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdEngInfoBHMapper.java index 45b9e695..2a4fa27c 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdEngInfoBHMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdEngInfoBHMapper.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.StationBasinInfo; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.StationBasinInfo; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdFishDictoryBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFishDictoryBMapper.java similarity index 65% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdFishDictoryBMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFishDictoryBMapper.java index 14e31ede..d38a17ea 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdFishDictoryBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFishDictoryBMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdFishDictoryB; +import com.yfd.platform.qgc_base.domain.SdFishDictoryB; import org.apache.ibatis.annotations.Mapper; @Mapper diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssBHMapper.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssBHMapper.java index 08c53fa4..86ac6ee7 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssBHMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssBHMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdFpssBH; +import com.yfd.platform.qgc_base.domain.SdFpssBH; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssRMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssRMapper.java similarity index 72% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdFpssRMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssRMapper.java index 9a32050b..82318c9a 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdFpssRMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssRMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdFpssR; +import com.yfd.platform.qgc_base.domain.SdFpssR; import org.apache.ibatis.annotations.Mapper; /** diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdHbrvDicMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java similarity index 87% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdHbrvDicMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java index 715e22a4..3dde38df 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdHbrvDicMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdHycdDicMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHycdDicMapper.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdHycdDicMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHycdDicMapper.java index 96e185bc..4475d944 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdHycdDicMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHycdDicMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdHycdDic; +import com.yfd.platform.qgc_base.domain.SdHycdDic; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdHydrobaseMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHydrobaseMapper.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdHydrobaseMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHydrobaseMapper.java index fe6efb11..d3046b2e 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdHydrobaseMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHydrobaseMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdHydrobase; +import com.yfd.platform.qgc_base.domain.SdHydrobase; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdPrhbrltnBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdPrhbrltnBMapper.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdPrhbrltnBMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdPrhbrltnBMapper.java index a1d1a84a..acefefa3 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdPrhbrltnBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdPrhbrltnBMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdPrhbrltnB; +import com.yfd.platform.qgc_base.domain.SdPrhbrltnB; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdPrhyrltnBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdPrhyrltnBMapper.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdPrhyrltnBMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdPrhyrltnBMapper.java index 398844b0..57b975cb 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdPrhyrltnBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdPrhyrltnBMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdPrhyrltnB; +import com.yfd.platform.qgc_base.domain.SdPrhyrltnB; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/mapper/SdRvcdDicMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdRvcdDicMapper.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/env/mapper/SdRvcdDicMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdRvcdDicMapper.java index e1abe3b2..00b83828 100644 --- a/backend/src/main/java/com/yfd/platform/env/mapper/SdRvcdDicMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdRvcdDicMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.mapper; +package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdCountryBService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdCountryBService.java similarity index 84% rename from backend/src/main/java/com/yfd/platform/env/service/ISdCountryBService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdCountryBService.java index 229299f9..89253992 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdCountryBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdCountryBService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdCountryB; +import com.yfd.platform.qgc_base.domain.SdCountryB; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdEngInfoBHService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java similarity index 71% rename from backend/src/main/java/com/yfd/platform/env/service/ISdEngInfoBHService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java index c99d88a8..5a14f586 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdEngInfoBHService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java @@ -1,9 +1,13 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdEngInfoBHRequest; +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; +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 java.util.List; import java.util.Set; @@ -58,4 +62,8 @@ public interface ISdEngInfoBHService extends IService { boolean deleteEngInfo(String stcd); List selectRegDropdown(SdEngInfoBHRequest sdEngInfoBHRequest); -} \ No newline at end of file + + EngBaseInfoVo getStInfoByStcd(String stcd); + + DataSourceResult getEiaapprovalKendoList(DataSourceRequest dataSourceRequest); +} diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdFishDictoryBService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFishDictoryBService.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/service/ISdFishDictoryBService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFishDictoryBService.java index 00809826..9352dada 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdFishDictoryBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFishDictoryBService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdFishDictoryB; +import com.yfd.platform.qgc_base.domain.SdFishDictoryB; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java index 7b37c276..42d1fee2 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdFpssBHService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdFpssBH; +import com.yfd.platform.qgc_base.domain.SdFpssBH; import java.util.List; import java.util.Set; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdFpssRService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssRService.java similarity index 81% rename from backend/src/main/java/com/yfd/platform/env/service/ISdFpssRService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssRService.java index eed22d38..1af560d0 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdFpssRService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssRService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdFpssR; +import com.yfd.platform.qgc_base.domain.SdFpssR; /** *

diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdHbrvDicService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/service/ISdHbrvDicService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java index 3f3cf23b..ea932c43 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdHbrvDicService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; import java.util.List; import java.util.Set; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdHycdDicService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHycdDicService.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/env/service/ISdHycdDicService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHycdDicService.java index 7bf15b86..ed680881 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdHycdDicService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHycdDicService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdHycdDic; +import com.yfd.platform.qgc_base.domain.SdHycdDic; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdHydrobaseService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHydrobaseService.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/service/ISdHydrobaseService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHydrobaseService.java index 9f16b1ab..2de91b30 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdHydrobaseService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHydrobaseService.java @@ -1,11 +1,11 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdHydrobase; -import com.yfd.platform.env.entity.vo.HydrobaseWbsVo; +import com.yfd.platform.qgc_base.domain.SdHydrobase; +import com.yfd.platform.qgc_base.entity.vo.HydrobaseWbsVo; import java.util.List; import java.util.Set; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdRvcdDicService.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ISdRvcdDicService.java index ea8da573..38e299f0 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ISdRvcdDicService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdRvcdDicService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.service; +package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.env.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ITreeStructureService.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/ITreeStructureService.java index 03342c9e..42f03aab 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/ITreeStructureService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ITreeStructureService.java @@ -1,6 +1,4 @@ -package com.yfd.platform.env.service; - -import com.yfd.platform.env.domain.SdEngInfoBH; +package com.yfd.platform.qgc_base.service; import java.util.List; import java.util.Map; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdCountryBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdCountryBServiceImpl.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdCountryBServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdCountryBServiceImpl.java index 94045aec..9b007704 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdCountryBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdCountryBServiceImpl.java @@ -1,10 +1,10 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.env.domain.SdCountryB; -import com.yfd.platform.env.mapper.SdCountryBMapper; -import com.yfd.platform.env.service.ISdCountryBService; +import com.yfd.platform.qgc_base.domain.SdCountryB; +import com.yfd.platform.qgc_base.mapper.SdCountryBMapper; +import com.yfd.platform.qgc_base.service.ISdCountryBService; import org.springframework.stereotype.Service; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java new file mode 100644 index 00000000..d1e63e39 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java @@ -0,0 +1,731 @@ +package com.yfd.platform.qgc_base.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +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.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; +import com.yfd.platform.utils.SecurityUtils; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + *

+ * 水电水利工程基础信息表 服务实现类 + *

+ */ +@Service +public class SdEngInfoBHServiceImpl extends ServiceImpl implements ISdEngInfoBHService { + + @Resource + private SdEngInfoBHMapper engInfoBHMapper; + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Resource + private SysUserDataScopeMapper sysUserDataScopeMapper; + + @Override + public Page queryPageList(Page page, String ennm, String rvcd, String baseId, String hycd) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper .like(ennm != null && !ennm.isEmpty(), SdEngInfoBH::getEnnm, ennm) + .eq(rvcd != null && !rvcd.isEmpty(), SdEngInfoBH::getRvcd, rvcd) + .eq(baseId != null && !baseId.isEmpty(), SdEngInfoBH::getBaseId, baseId) + .eq(hycd != null && !hycd.isEmpty(), SdEngInfoBH::getHycd, hycd) + .orderByAsc(SdEngInfoBH::getOrderIndex); + + Set authorizedStations = getUserAuthorizedStationCodes(); + if (authorizedStations != null && !authorizedStations.isEmpty()) { + wrapper.in(SdEngInfoBH::getStcd, authorizedStations); + }else if (!"admin".equals(SecurityUtils.getCurrentUsername())){ + return page; + } + return this.page(page, wrapper); + } + + @Override + public List getByBaseId(String baseId) { + return engInfoBHMapper.selectByBaseId(baseId); + } + + @Override + public List getByHycd(String hycd) { + return engInfoBHMapper.selectByHycd(hycd); + } + + @Override + public List getByRvcd(String rvcd) { + return engInfoBHMapper.selectByRvcd(rvcd); + } + + @Override + public List selectForDropdown(SdEngInfoBHRequest sdEngInfoBHRequest) { + String baseId = sdEngInfoBHRequest.getBaseId(); + String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); + String ennm = sdEngInfoBHRequest.getEnnm(); + List rvcds = sdEngInfoBHRequest.getRvcds(); + List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) + .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) + .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, 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); + + if("admin".equals(SecurityUtils.getCurrentUsername())){ + return this.list(wrapper); + } + Set authorizedStations = getUserAuthorizedStationCodes(); + if (authorizedStations != null && !authorizedStations.isEmpty()) { + List list = this.list(wrapper); + return list.stream() + .filter(item -> authorizedStations.contains(item.getStcd())) + .collect(Collectors.toList()); + }else{ + return new ArrayList<>(); + } + } + @Override + public Set getUserAuthorizedStationCodes() { + String userId = SecurityUtils.getUserId(); + List sysUserDataScopes = sysUserDataScopeMapper.selectList( + new LambdaQueryWrapper() + .eq(SysUserDataScope::getUserId, userId) + .select(SysUserDataScope::getOrgId, SysUserDataScope::getOrgType) + ); + + if (sysUserDataScopes == null || sysUserDataScopes.isEmpty()) { + return new HashSet<>(); + } + + + Set stationCodes = new HashSet<>(); + Set basinCodes = new HashSet<>(); + + for (SysUserDataScope scope : sysUserDataScopes) { + String orgType = scope.getOrgType(); + String orgId = scope.getOrgId(); + + if ("STATION".equals(orgType)) { + SdEngInfoBH station = engInfoBHMapper.selectById(orgId); + if (station != null) { + if (station.getHbrvcd() != null) { + basinCodes.add(station.getHbrvcd()); + } + if (station.getStcd() != null) { + stationCodes.add(station.getStcd()); + } + + } + } else if ("HBRVCD".equals(orgType)) { + List stationList = engInfoBHMapper.selectByHbrvcd(orgId); + if (stationList != null) { + for (SdEngInfoBH station : stationList) { + if (station.getStcd() != null) { + stationCodes.add(station.getStcd()); + } + if (station.getEnnm() != null) { + basinCodes.add(station.getHbrvcd()); + } + } + } + + } + } + + if (!stationCodes.isEmpty()) { + return stationCodes; + } + + if (!basinCodes.isEmpty()) { + List engInfos = this.lambdaQuery() + .select(SdEngInfoBH::getStcd) + .in(SdEngInfoBH::getHbrvcd, basinCodes) + .list(); + return engInfos.stream() + .map(SdEngInfoBH::getStcd) + .collect(Collectors.toSet()); + } + + return stationCodes; + } + + @Override + public boolean addEngInfo(SdEngInfoBH engInfo) { + return this.save(engInfo); + } + + @Override + public boolean updateEngInfo(SdEngInfoBH engInfo) { + return this.updateById(engInfo); + } + + @Override + public boolean deleteEngInfo(String stcd) { + return this.removeById(stcd); + } + + @Override + public List selectRegDropdown(SdEngInfoBHRequest sdEngInfoBHRequest) { + String baseId = sdEngInfoBHRequest.getBaseId(); + String ennm = sdEngInfoBHRequest.getEnnm(); + String hbrvcd = sdEngInfoBHRequest.getHbrvcd(); + List rvcds = sdEngInfoBHRequest.getRvcds(); + List hbrvcds = sdEngInfoBHRequest.getHbrvcds(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId) + .eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd) + .in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getRvcd, 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); + + return this.list(wrapper); + } + + @Override + public DataSourceResult getEiaapprovalKendoList(DataSourceRequest dataSourceRequest) { + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + result.setData(new ArrayList<>()); + result.setTotal(0L); + return result; + } + +// if (!"admin".equals(SecurityUtils.getCurrentUsername())) { +// Set authorizedStations = getUserAuthorizedStationCodes(); +// if (authorizedStations == null || authorizedStations.isEmpty()) { +// result.setData(new ArrayList<>()); +// result.setTotal(0L); +// return result; +// } +// } + + Page page = null; + if (dataSourceRequest.getTake() > 0) { + page = new Page<>(dataSourceRequest.getSkip() / dataSourceRequest.getTake() + 1, + dataSourceRequest.getTake()); + } + + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(buildEiaapprovalBaseSql()); + +// if (!"admin".equals(SecurityUtils.getCurrentUsername())) { +// appendAuthorizedStations(sql, paramMap, getUserAuthorizedStationCodes()); +// } + + String filterSql = buildEiaapprovalFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StringUtils.hasText(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + sql.append(buildEiaapprovalOrderBySql(dataSourceRequest.getSort())); + + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, EngEiaapprovalVo.class); + result.setData(list); + result.setTotal(page == null ? list.size() : page.getTotal()); + return result; + } + + @Override + public EngBaseInfoVo getStInfoByStcd(String stcd) { + SdEngInfoBH entity = this.getById(stcd); + if (entity == null) { + return null; + } + + EngBaseInfoVo vo = new EngBaseInfoVo(); + BeanUtil.copyProperties(entity, vo); + vo.setId(entity.getStcd()); + vo.setStnm(entity.getEnnm()); + + String sql = "SELECT " + + "sttp.ID AS sttp, " + + "sttp.STTP_CODE AS sttpCode, " + + "sttp.STTP_NAME AS sttpName, " + + "sttp.FULL_PATH AS sttpFullPath, " + + "sttp.TREE_LEVEL AS sttpTreeLevel, " + + "hb.BASENAME AS baseName, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "rv.RVNM AS rvcdName, " + + "rv.PATH AS rvcdFullPath, " + + "addv.ADDVNM AS addvcdName, " + + "addv.PATH AS addvcdFullPath, " + + "country.COUNTRY_NAME AS countryName, " + + "hy.HYNM AS hynm, " + + "topHy.HYNM AS topHynm " + + "FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = 'ENG' " + + " AND NVL(sttp.IS_DELETED, 0) = 0 " + + " AND NVL(sttp.ENABLE, 1) = 1 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN SD_COUNTRY_B country ON country.COUNTRY_ID = eng.COUNTRY AND NVL(country.ENABLED, 1) = 1 " + + "LEFT JOIN SD_HYCD_DIC hy ON hy.HYCD = eng.HYCD " + + "LEFT JOIN SD_HYCD_DIC topHy ON topHy.HYCD = eng.TOP_HYCD " + + "WHERE eng.STCD = #{map.stcd}"; + + EngBaseInfoVo extra = microservicDynamicSQLMapper.getOneBySqlWithResultType( + sql, java.util.Collections.singletonMap("stcd", stcd), EngBaseInfoVo.class); + if (extra != null) { + BeanUtil.copyProperties(extra, vo, CopyOptions.create().setIgnoreNullValue(true)); + } + + vo.setSttpCode("ENG"); + vo.setBlprdCode(entity.getBlprd() == null ? null : String.valueOf(entity.getBlprd())); + vo.setBlprdCcode(entity.getBlprd() == null ? null : String.valueOf(entity.getBlprd())); + vo.setBlprdName(resolveBlprdName(entity.getBlprd())); + vo.setBlprdCname(vo.getBlprdName()); + vo.setDtinName(resolveDtinName(entity.getDtin())); + vo.setBldsttName(resolveBldsttName(entity.getBldstt())); + vo.setBldsttCcode(entity.getBldsttCode() == null ? null : String.valueOf(entity.getBldsttCode())); + vo.setBldsttCcodeName(resolveBldsttCodeName(entity.getBldsttCode())); + vo.setDvtpName(resolveDvtpName(entity.getDvtp())); + vo.setRgcpName(resolveRgcpName(entity.getRgcp())); + vo.setEngtpName(resolveEngtpName(entity.getEngtp())); + vo.setPrscName(resolvePrscName(entity.getPrsc())); + vo.setScrscName(resolveScrscName(entity.getScrsc())); + vo.setPrgrName(resolvePrgrName(entity.getPrgr())); + return vo; + } + + private String buildEiaapprovalBaseSql() { + return "SELECT " + + "e.ID AS id, " + + "e.BASIN AS basin, " + + "e.RIVER AS river, " + + "e.ENNM AS hydropowerStation, " + + "e.APPROVAL_FILE_NO AS approvalFileNo, " + + "e.APPROVAL_FILE_TITLE AS approvalFileTitle, " + + "e.FILE_NAME AS fileName, " + + "e.FLPATH AS flpath, " + + "e.ECOLOGICAL_FLOW AS ecologicalFlow, " + + "e.WATER_ENV_PROTECTION AS waterEnvProtection, " + + "e.COLD_WATER_MITIGATION AS coldWaterMitigation, " + + "e.HABITAT_PROTECTION AS habitatProtection, " + + "e.FISH_PASSAGE_MEASURES AS fishPassageMeasures, " + + "e.FISH_STOCKING AS fishStocking, " + + "e.TERRESTRIAL_ECO_SOIL_CONS AS terrestrialEcoSoilCons, " + + "e.RARE_PLANT_PROTECTION AS rarePlantProtection, " + + "e.ANIMAL_RESCUE AS animalRescue, " + + "e.RESETTLEMENT_MEASURES AS resettlementMeasures, " + + "e.CONSTRUCTION_POLLUTION_CTRL AS constructionPollutionCtrl, " + + "e.GROUNDWATER_GEO_PROTECT AS groundwaterGeoProtect, " + + "e.SCENIC_AREA_PROTECTION AS scenicAreaProtection, " + + "e.ENV_MONITORING_REQUIRE AS envMonitoringRequire, " + + "e.BASEID AS baseid, " + + "e.HBRVCD AS hbrvcd, " + + "e.STCD AS eiaStcd, " + + "s.STCD AS stcd, " + + "s.ENNM AS stnm, " + + "sttp.ID AS sttp, " + + "sttp.STTP_NAME AS sttpName, " + + "TO_CHAR(s.BLDSTT_CODE) AS bldsttCcode, " + + "s.BLDSTT AS bldstt, " + + "TO_CHAR(s.LGTD) AS lgtd, " + + "TO_CHAR(s.LTTD) AS lttd, " + + "CASE " + + "WHEN s.BLDSTT_CODE = 0 OR s.BLDSTT_CODE IS NULL THEN '未建/规划' " + + "WHEN s.BLDSTT_CODE = 1 THEN '在建' " + + "WHEN s.BLDSTT_CODE = 2 THEN '已建' " + + "ELSE NULL END AS bldsttCName, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(rstSort.SORT, 999999) AS rstcdStepSort, " + + "NVL(siteSort.SORT, 999999) AS siteStepSort " + + "FROM MS_EIAAPPROVAL_B e " + + "LEFT JOIN SD_ENGINFO_B_H s ON e.STCD = s.STCD AND NVL(s.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = 'ENG' AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = s.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = s.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") rstSort ON rstSort.RVCD = s.HBRVCD AND rstSort.STCD = s.STCD " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") siteSort ON siteSort.RVCD = s.HBRVCD AND siteSort.STCD = s.STCD " + + "WHERE NVL(e.IS_DELETED, 0) = 0"; + } + + private void appendAuthorizedStations(StringBuilder sql, Map paramMap, Set authorizedStations) { + if (authorizedStations == null || authorizedStations.isEmpty()) { + return; + } + List placeholders = new ArrayList<>(); + int index = 0; + for (String stcd : authorizedStations) { + String key = "authStcd" + index++; + paramMap.put(key, stcd); + placeholders.add("#{map." + key + "}"); + } + sql.append(" AND e.STCD IN (").append(String.join(", ", placeholders)).append(")"); + } + + private String buildEiaapprovalFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StringUtils.hasText(filter.getField())) { + return buildEiaapprovalLeafCondition(filter, paramMap, indexHolder); + } + if (filter.getFilters() == null || filter.getFilters().isEmpty()) { + return ""; + } + List childConditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildEiaapprovalFilterCondition(child, paramMap, indexHolder); + if (StringUtils.hasText(childSql)) { + childConditions.add("(" + childSql + ")"); + } + } + if (childConditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return String.join(logic, childConditions); + } + + private String buildEiaapprovalLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapEiaapprovalColumn(filter.getField()); + if (!StringUtils.hasText(column)) { + return ""; + } + String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeFilterValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "eiaParam" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add("#{map." + key + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String key = "eiaParam" + indexHolder[0]++; + return switch (operator) { + case "eq" -> { + paramMap.put(key, value); + yield column + " = #{map." + key + "}"; + } + case "neq" -> { + paramMap.put(key, value); + yield column + " <> #{map." + key + "}"; + } + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> { + paramMap.put(key, value); + yield column + " > #{map." + key + "}"; + } + case "gte" -> { + paramMap.put(key, value); + yield column + " >= #{map." + key + "}"; + } + case "lt" -> { + paramMap.put(key, value); + yield column + " < #{map." + key + "}"; + } + case "lte" -> { + paramMap.put(key, value); + yield column + " <= #{map." + key + "}"; + } + default -> ""; + }; + } + + private List normalizeFilterValues(Object value) { + List values = new ArrayList<>(); + if (value instanceof List list) { + for (Object item : list) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value instanceof Object[] array) { + for (Object item : array) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value != null) { + values.add(value); + } + return values; + } + + private String mapEiaapprovalColumn(String field) { + if (!StringUtils.hasText(field)) { + return null; + } + return switch (field) { + case "stcd", "eiaStcd" -> "e.STCD"; + case "hydropowerStation" -> "e.ENNM"; + case "baseId", "baseid" -> "e.BASEID"; + case "hbrvcd" -> "e.HBRVCD"; + case "envMonitoringRequire" -> "e.ENV_MONITORING_REQUIRE"; + case "ecologicalFlow" -> "e.ECOLOGICAL_FLOW"; + case "approvalFileNo" -> "e.APPROVAL_FILE_NO"; + case "approvalFileTitle" -> "e.APPROVAL_FILE_TITLE"; + case "fishPassageMeasures" -> "e.FISH_PASSAGE_MEASURES"; + case "bldsttCcode" -> "s.BLDSTT_CODE"; + case "bldsttCName" -> "CASE WHEN s.BLDSTT_CODE = 0 OR s.BLDSTT_CODE IS NULL THEN '未建/规划' WHEN s.BLDSTT_CODE = 1 THEN '在建' WHEN s.BLDSTT_CODE = 2 THEN '已建' ELSE NULL END"; + case "basin" -> "e.BASIN"; + case "river" -> "e.RIVER"; + case "stnm" -> "s.ENNM"; + default -> null; + }; + } + + private String buildEiaapprovalOrderBySql(List sortList) { + if (sortList == null || sortList.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stnm ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || !StringUtils.hasText(sortDescriptor.getField())) { + continue; + } + String column = switch (sortDescriptor.getField()) { + case "baseStepSort" -> "baseStepSort"; + case "rvcdStepSort" -> "rvcdStepSort"; + case "rstcdStepSort" -> "rstcdStepSort"; + case "siteStepSort" -> "siteStepSort"; + case "stnm" -> "stnm"; + case "hydropowerStation" -> "e.HYDROPOWER_STATION"; + case "approvalFileNo" -> "e.APPROVAL_FILE_NO"; + case "recordTime" -> "e.RECORD_TIME"; + case "bldsttCcode" -> "s.BLDSTT_CODE"; + default -> null; + }; + if (!StringUtils.hasText(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + dir); + } + if (orderItems.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stnm ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } + + private String resolveBlprdName(Integer blprd) { + if (blprd == null) { + return null; + } + return switch (blprd) { + case 1001000 -> "规划"; + case 1002000 -> "预可研"; + case 1003000 -> "环评"; + case 1004000 -> "可研"; + case 1005000 -> "在建"; + case 1006000 -> "招标设计"; + case 1007000 -> "施工详图"; + case 1009000 -> "建设"; + case 1010000 -> "蓄水阶段环保验收"; + case 1011000 -> "竣工"; + case 1012000 -> "竣工环保验收"; + case 1013000 -> "环境影响后评价"; + default -> null; + }; + } + + private String resolveDtinName(Integer dtin) { + if (dtin == null) { + return null; + } + return dtin == 1 ? "已接入" : "未接入"; + } + + private String resolveBldsttName(String bldstt) { + if (!StringUtils.hasText(bldstt)) { + return null; + } + return switch (bldstt) { + case "1" -> "已建成未验收"; + case "2" -> "在建"; + case "3", "32", "64" -> "可研"; + case "4", "61" -> "规划"; + case "5", "63" -> "预可研"; + case "6", "65" -> "已核准"; + case "7", "67" -> "招标设计"; + case "8", "69" -> "施工详图"; + case "9", "40", "74" -> "其他"; + case "10" -> "已建成已验收"; + case "11" -> "已开展后评价"; + case "31", "62" -> "项目建议书"; + case "33" -> "已审批"; + case "34", "66" -> "初步设计"; + case "35" -> "技施设计"; + case "36", "70" -> "在建"; + case "37", "71" -> "已建成未验收"; + case "38", "72" -> "已建成已验收"; + case "39", "73" -> "已开展后评价"; + case "68" -> "技施设计"; + case "91" -> "拆除"; + default -> null; + }; + } + + private String resolveBldsttCodeName(Integer bldsttCode) { + if (bldsttCode == null) { + return null; + } + return switch (bldsttCode) { + case 0 -> "未建/规划"; + case 1 -> "在建"; + case 2 -> "已建"; + default -> null; + }; + } + + private String resolveDvtpName(String dvtp) { + if (!StringUtils.hasText(dvtp)) { + return null; + } + return switch (dvtp) { + case "1" -> "堤坝式"; + case "2" -> "引水式"; + case "3" -> "混合式"; + default -> null; + }; + } + + private String resolveRgcpName(String rgcp) { + if (!StringUtils.hasText(rgcp)) { + return null; + } + return switch (rgcp) { + case "1" -> "多年调节"; + case "2" -> "年调节"; + case "3" -> "不完全年调节"; + case "4" -> "径流式(无调节)"; + case "5" -> "季调节"; + case "6" -> "月调节"; + case "7" -> "周调节"; + case "8" -> "日调节"; + case "9" -> "其他"; + default -> null; + }; + } + + private String resolveEngtpName(Integer engtp) { + if (engtp == null) { + return null; + } + return switch (engtp) { + case 1 -> "水电站"; + case 2 -> "水利工程"; + case 3 -> "航电枢纽"; + default -> null; + }; + } + + private String resolvePrscName(Integer prsc) { + if (prsc == null) { + return null; + } + return switch (prsc) { + case 1 -> "大型1"; + case 2 -> "大型2"; + case 3 -> "中型"; + case 4 -> "小型"; + default -> null; + }; + } + + private String resolveScrscName(Integer scrsc) { + if (scrsc == null) { + return null; + } + return switch (scrsc) { + case 1 -> "大型1"; + case 2 -> "大型2"; + case 3 -> "中型"; + case 4 -> "小型1"; + case 5 -> "小型2"; + default -> null; + }; + } + + private String resolvePrgrName(String prgr) { + if (!StringUtils.hasText(prgr)) { + return null; + } + return switch (prgr) { + case "1" -> "Ⅰ"; + case "2" -> "Ⅱ"; + case "3" -> "Ⅲ"; + case "4" -> "Ⅳ"; + case "5" -> "Ⅴ"; + default -> null; + }; + } +} diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFishDictoryBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFishDictoryBServiceImpl.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdFishDictoryBServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFishDictoryBServiceImpl.java index 1519f3f1..5a635c3a 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFishDictoryBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFishDictoryBServiceImpl.java @@ -1,12 +1,12 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.env.domain.SdFishDictoryB; -import com.yfd.platform.env.mapper.SdFishDictoryBMapper; -import com.yfd.platform.env.service.ISdFishDictoryBService; +import com.yfd.platform.qgc_base.domain.SdFishDictoryB; +import com.yfd.platform.qgc_base.mapper.SdFishDictoryBMapper; +import com.yfd.platform.qgc_base.service.ISdFishDictoryBService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java index d620898f..101135f6 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java @@ -1,15 +1,15 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdFpssBH; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.mapper.SdFpssBHMapper; -import com.yfd.platform.env.service.ISdFpssBHService; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdFpssBH; +import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.mapper.SdFpssBHMapper; +import com.yfd.platform.qgc_base.service.ISdFpssBHService; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssRServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssRServiceImpl.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssRServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssRServiceImpl.java index 5483b26f..597aeb99 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdFpssRServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssRServiceImpl.java @@ -1,11 +1,11 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.env.domain.SdFpssR; -import com.yfd.platform.env.mapper.SdFpssRMapper; -import com.yfd.platform.env.service.ISdFpssRService; +import com.yfd.platform.qgc_base.domain.SdFpssR; +import com.yfd.platform.qgc_base.mapper.SdFpssRMapper; +import com.yfd.platform.qgc_base.service.ISdFpssRService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdHbrvDicServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdHbrvDicServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java index 90ea0e91..dde43f59 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdHbrvDicServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java @@ -1,16 +1,15 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdHbrvDic; -import com.yfd.platform.env.domain.SdHydrobase; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.mapper.SdHbrvDicMapper; -import com.yfd.platform.env.service.ISdHbrvDicService; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.mapper.SdHbrvDicMapper; +import com.yfd.platform.qgc_base.service.ISdHbrvDicService; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdHycdDicServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHycdDicServiceImpl.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdHycdDicServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHycdDicServiceImpl.java index a87c2efb..8d2fa828 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdHycdDicServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHycdDicServiceImpl.java @@ -1,10 +1,10 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.env.domain.SdHycdDic; -import com.yfd.platform.env.mapper.SdHycdDicMapper; -import com.yfd.platform.env.service.ISdHycdDicService; +import com.yfd.platform.qgc_base.domain.SdHycdDic; +import com.yfd.platform.qgc_base.mapper.SdHycdDicMapper; +import com.yfd.platform.qgc_base.service.ISdHycdDicService; import org.springframework.stereotype.Service; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdHydrobaseServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdHydrobaseServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java index 1cf1ec78..d73872c9 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdHydrobaseServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java @@ -1,18 +1,18 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdHydrobase; -import com.yfd.platform.env.entity.vo.HydrobaseWbsVo; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.mapper.SdHydrobaseMapper; -import com.yfd.platform.env.service.ISdHydrobaseService; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdHydrobase; +import com.yfd.platform.qgc_base.entity.vo.HydrobaseWbsVo; +import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.mapper.SdHydrobaseMapper; +import com.yfd.platform.qgc_base.service.ISdHydrobaseService; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.stream.Collectors; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java index 85f77a44..1b5bdc36 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/SdRvcdDicServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java @@ -1,10 +1,10 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.env.domain.SdRvcdDic; -import com.yfd.platform.env.mapper.SdRvcdDicMapper; -import com.yfd.platform.env.service.ISdRvcdDicService; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper; +import com.yfd.platform.qgc_base.service.ISdRvcdDicService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; diff --git a/backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java index 233835d5..0f627d39 100644 --- a/backend/src/main/java/com/yfd/platform/env/service/impl/TreeStructureServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/TreeStructureServiceImpl.java @@ -1,14 +1,12 @@ -package com.yfd.platform.env.service.impl; +package com.yfd.platform.qgc_base.service.impl; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdHydrobase; -import com.yfd.platform.env.domain.SdHbrvDic; -import com.yfd.platform.env.domain.SdHycdDic; -import com.yfd.platform.env.domain.SdPrhbrltnB; -import com.yfd.platform.env.domain.SdPrhyrltnB; -import com.yfd.platform.env.domain.SdRvcdDic; -import com.yfd.platform.env.mapper.*; -import com.yfd.platform.env.service.ITreeStructureService; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdHydrobase; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.domain.SdHycdDic; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.mapper.*; +import com.yfd.platform.qgc_base.service.ITreeStructureService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; diff --git a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalChangeLogController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalChangeLogController.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/data/controller/ApprovalChangeLogController.java rename to backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalChangeLogController.java index 49a2d2fe..01d4e545 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalChangeLogController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalChangeLogController.java @@ -1,12 +1,11 @@ -package com.yfd.platform.data.controller; +package com.yfd.platform.qgc_data.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.utils.UserNameFillHelper; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.ApprovalChangeLog; -import com.yfd.platform.data.domain.ApprovalLog; -import com.yfd.platform.data.service.IApprovalChangeLogService; +import com.yfd.platform.qgc_data.domain.ApprovalChangeLog; +import com.yfd.platform.qgc_data.service.IApprovalChangeLogService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalLogController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalLogController.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/data/controller/ApprovalLogController.java rename to backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalLogController.java index b3673615..e92fee25 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalLogController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalLogController.java @@ -1,11 +1,10 @@ -package com.yfd.platform.data.controller; +package com.yfd.platform.qgc_data.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.ApprovalLog; -import com.yfd.platform.data.domain.ApprovalMain; -import com.yfd.platform.data.service.IApprovalLogService; +import com.yfd.platform.qgc_data.domain.ApprovalLog; +import com.yfd.platform.qgc_data.service.IApprovalLogService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalMainController.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java rename to backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalMainController.java index c0db9867..2da41270 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/ApprovalMainController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ApprovalMainController.java @@ -1,11 +1,11 @@ -package com.yfd.platform.data.controller; +package com.yfd.platform.qgc_data.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.ApprovalMain; -import com.yfd.platform.data.service.IApprovalMainService; -import com.yfd.platform.data.service.IFishDraftDataService; +import com.yfd.platform.qgc_data.domain.ApprovalMain; +import com.yfd.platform.qgc_data.service.IApprovalMainService; +import com.yfd.platform.qgc_data.service.IFishDraftDataService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java rename to backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java index 5a84a7c3..6c3b3ce6 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.controller; +package com.yfd.platform.qgc_data.controller; import java.io.File; import java.io.FileInputStream; @@ -17,23 +17,21 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.*; -import com.yfd.platform.data.domain.vo.FishDraftDataVO; -import com.yfd.platform.data.domain.vo.FishStatisticsVO; -import com.yfd.platform.data.service.AttachmentUploadService; -import com.yfd.platform.data.service.IFishDraftDataService; -import com.yfd.platform.data.service.IFishImportService; -import com.yfd.platform.data.service.IFishStatisticsService; -import com.yfd.platform.data.service.IImportTaskService; -import com.yfd.platform.data.utils.ZipFileUtil; -import com.yfd.platform.utils.KendoUtil; +import com.yfd.platform.qgc_data.domain.*; +import com.yfd.platform.qgc_data.domain.vo.FishDraftDataVO; +import com.yfd.platform.qgc_data.domain.vo.FishStatisticsVO; +import com.yfd.platform.qgc_data.service.AttachmentUploadService; +import com.yfd.platform.qgc_data.service.IFishDraftDataService; +import com.yfd.platform.qgc_data.service.IFishImportService; +import com.yfd.platform.qgc_data.service.IFishStatisticsService; +import com.yfd.platform.qgc_data.service.IImportTaskService; +import com.yfd.platform.qgc_data.utils.ZipFileUtil; import com.yfd.platform.utils.MultipartStreamParser; import com.yfd.platform.utils.SecurityUtils; import io.swagger.v3.oas.annotations.Operation; @@ -49,7 +47,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; -import java.io.IOException; import java.util.*; /** @@ -937,7 +934,7 @@ public class FishDraftDataController { @Operation(summary = "清理临时文件") public ResponseResult cleanupTemp(@RequestParam String tempDir) { try { - com.yfd.platform.data.utils.ZipFileUtil.cleanupTempDir(tempDir); + com.yfd.platform.qgc_data.utils.ZipFileUtil.cleanupTempDir(tempDir); return ResponseResult.success("清理成功"); } catch (Exception e) { return ResponseResult.error("清理失败: " + e.getMessage()); diff --git a/backend/src/main/java/com/yfd/platform/data/controller/ImportTaskController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ImportTaskController.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/controller/ImportTaskController.java rename to backend/src/main/java/com/yfd/platform/qgc_data/controller/ImportTaskController.java index 3682d35c..2fb05ce1 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/ImportTaskController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/ImportTaskController.java @@ -1,12 +1,12 @@ -package com.yfd.platform.data.controller; +package com.yfd.platform.qgc_data.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.ImportTask; -import com.yfd.platform.data.domain.ImportTaskRequest; -import com.yfd.platform.data.service.IImportTaskService; +import com.yfd.platform.qgc_data.domain.ImportTask; +import com.yfd.platform.qgc_data.domain.ImportTaskRequest; +import com.yfd.platform.qgc_data.service.IImportTaskService; import com.yfd.platform.utils.KendoUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil; import io.swagger.v3.oas.annotations.Operation; diff --git a/backend/src/main/java/com/yfd/platform/data/controller/SysUserDataScopeController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/SysUserDataScopeController.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/data/controller/SysUserDataScopeController.java rename to backend/src/main/java/com/yfd/platform/qgc_data/controller/SysUserDataScopeController.java index 6858f423..4abf6143 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/SysUserDataScopeController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/SysUserDataScopeController.java @@ -1,12 +1,12 @@ -package com.yfd.platform.data.controller; +package com.yfd.platform.qgc_data.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.annotation.Log; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.domain.bo.EditUserDataScopeBo; -import com.yfd.platform.data.domain.vo.SysUserDataScopeVO; -import com.yfd.platform.data.service.ISysUserDataScopeService; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.domain.bo.EditUserDataScopeBo; +import com.yfd.platform.qgc_data.domain.vo.SysUserDataScopeVO; +import com.yfd.platform.qgc_data.service.ISysUserDataScopeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalChangeLog.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalChangeLog.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/domain/ApprovalChangeLog.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalChangeLog.java index 24673fdf..77b9cf70 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalChangeLog.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalChangeLog.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import com.yfd.platform.annotation.UserIdField; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalLog.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalLog.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/data/domain/ApprovalLog.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalLog.java index 84f46628..e4726478 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalLog.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalLog.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalMain.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalMain.java index 1e0a3c1d..495747fe 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ApprovalMain.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ApprovalMain.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/BatchApproveRequest.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchApproveRequest.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/data/domain/BatchApproveRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchApproveRequest.java index 66226b5a..64ada50f 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/BatchApproveRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchApproveRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchRejectRequest.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchRejectRequest.java index fd1deb94..1be41d6c 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/BatchRejectRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchRejectRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/BatchSaveDraftRequest.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchSaveDraftRequest.java similarity index 88% rename from backend/src/main/java/com/yfd/platform/data/domain/BatchSaveDraftRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchSaveDraftRequest.java index 93bb8b6c..3ff21c0e 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/BatchSaveDraftRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/BatchSaveDraftRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishDraftData.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/FishDraftData.java index da33082d..f3f02325 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/FishDraftData.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishDraftData.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/FishImportRequest.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportRequest.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/data/domain/FishImportRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportRequest.java index 894aea46..d78f07d2 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/FishImportRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/FishImportResult.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportResult.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/data/domain/FishImportResult.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportResult.java index 64641db8..c92aa246 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/FishImportResult.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportResult.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/FishImportRowRequest.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportRowRequest.java similarity index 74% rename from backend/src/main/java/com/yfd/platform/data/domain/FishImportRowRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportRowRequest.java index 3dedff7e..1801a10f 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/FishImportRowRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/FishImportRowRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ImportTask.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTask.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/data/domain/ImportTask.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTask.java index a1325568..1b1d3e2a 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ImportTask.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTask.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ImportTaskRequest.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTaskRequest.java similarity index 67% rename from backend/src/main/java/com/yfd/platform/data/domain/ImportTaskRequest.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTaskRequest.java index 0a2050e0..55080935 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ImportTaskRequest.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTaskRequest.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/ImportTaskRow.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTaskRow.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/domain/ImportTaskRow.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTaskRow.java index a43098a2..71527dc8 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/ImportTaskRow.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/ImportTaskRow.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/SysUserDataScope.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/SysUserDataScope.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/domain/SysUserDataScope.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/SysUserDataScope.java index beca8a94..e10f5c91 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/SysUserDataScope.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/SysUserDataScope.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain; +package com.yfd.platform.qgc_data.domain; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; @@ -6,7 +6,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; -import java.sql.Timestamp; import java.util.Date; /** diff --git a/backend/src/main/java/com/yfd/platform/data/domain/bo/EditUserDataScopeBo.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/bo/EditUserDataScopeBo.java similarity index 60% rename from backend/src/main/java/com/yfd/platform/data/domain/bo/EditUserDataScopeBo.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/bo/EditUserDataScopeBo.java index db27b4fa..cb1f04f3 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/bo/EditUserDataScopeBo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/bo/EditUserDataScopeBo.java @@ -1,6 +1,6 @@ -package com.yfd.platform.data.domain.bo; +package com.yfd.platform.qgc_data.domain.bo; -import com.yfd.platform.data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; import lombok.Data; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/FishDraftDataVO.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/FishDraftDataVO.java index 35fa6218..8f58d3ee 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/vo/FishDraftDataVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/FishDraftDataVO.java @@ -1,6 +1,5 @@ -package com.yfd.platform.data.domain.vo; +package com.yfd.platform.qgc_data.domain.vo; -import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.io.Serializable; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/vo/FishStatisticsVO.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/FishStatisticsVO.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/data/domain/vo/FishStatisticsVO.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/FishStatisticsVO.java index 369cbf9b..0bab5d16 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/vo/FishStatisticsVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/FishStatisticsVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain.vo; +package com.yfd.platform.qgc_data.domain.vo; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/data/domain/vo/SysUserDataScopeVO.java b/backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/SysUserDataScopeVO.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/data/domain/vo/SysUserDataScopeVO.java rename to backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/SysUserDataScopeVO.java index 7d792e83..89b560f7 100644 --- a/backend/src/main/java/com/yfd/platform/data/domain/vo/SysUserDataScopeVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/domain/vo/SysUserDataScopeVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.domain.vo; +package com.yfd.platform.qgc_data.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/ApprovalChangeLogMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalChangeLogMapper.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/data/mapper/ApprovalChangeLogMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalChangeLogMapper.java index 4019a25f..7e3be480 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/ApprovalChangeLogMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalChangeLogMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.data.domain.ApprovalChangeLog; +import com.yfd.platform.qgc_data.domain.ApprovalChangeLog; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/ApprovalLogMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalLogMapper.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/data/mapper/ApprovalLogMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalLogMapper.java index b522e066..dd6924ad 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/ApprovalLogMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalLogMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.data.domain.ApprovalLog; +import com.yfd.platform.qgc_data.domain.ApprovalLog; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/ApprovalMainMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalMainMapper.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/data/mapper/ApprovalMainMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalMainMapper.java index 77fe3bda..097f7184 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/ApprovalMainMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ApprovalMainMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.data.domain.ApprovalMain; +import com.yfd.platform.qgc_data.domain.ApprovalMain; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/FishDraftDataMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/data/mapper/FishDraftDataMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java index 6ebcbec4..baa8d260 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/FishDraftDataMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java @@ -1,9 +1,9 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.data.domain.FishDraftData; -import com.yfd.platform.data.domain.vo.FishDraftDataVO; +import com.yfd.platform.qgc_data.domain.FishDraftData; +import com.yfd.platform.qgc_data.domain.vo.FishDraftDataVO; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/FishStatisticsMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishStatisticsMapper.java similarity index 84% rename from backend/src/main/java/com/yfd/platform/data/mapper/FishStatisticsMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishStatisticsMapper.java index 47a44ece..f0df6603 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/FishStatisticsMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishStatisticsMapper.java @@ -1,6 +1,6 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; -import com.yfd.platform.data.domain.vo.FishStatisticsVO; +import com.yfd.platform.qgc_data.domain.vo.FishStatisticsVO; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/ImportTaskMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ImportTaskMapper.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/data/mapper/ImportTaskMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/ImportTaskMapper.java index a7d4edd0..d811e589 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/ImportTaskMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ImportTaskMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.data.domain.ImportTask; +import com.yfd.platform.qgc_data.domain.ImportTask; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/ImportTaskRowMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ImportTaskRowMapper.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/data/mapper/ImportTaskRowMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/ImportTaskRowMapper.java index a1e56dbd..1b3b565d 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/ImportTaskRowMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/ImportTaskRowMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.data.domain.ImportTaskRow; +import com.yfd.platform.qgc_data.domain.ImportTaskRow; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/mapper/SysUserDataScopeMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/SysUserDataScopeMapper.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/data/mapper/SysUserDataScopeMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_data/mapper/SysUserDataScopeMapper.java index e1e10f17..0f947e05 100644 --- a/backend/src/main/java/com/yfd/platform/data/mapper/SysUserDataScopeMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/SysUserDataScopeMapper.java @@ -1,12 +1,11 @@ -package com.yfd.platform.data.mapper; +package com.yfd.platform.qgc_data.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; import org.apache.ibatis.annotations.Param; import java.util.List; -import java.util.Map; /** *

diff --git a/backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/AttachmentUploadService.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/AttachmentUploadService.java index 2531588b..5f12b0d4 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/AttachmentUploadService.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; @@ -6,9 +6,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; import java.io.File; import java.io.IOException; import java.net.URI; @@ -16,8 +13,6 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.file.Files; -import java.security.SecureRandom; -import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/IApprovalChangeLogService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalChangeLogService.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/data/service/IApprovalChangeLogService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalChangeLogService.java index 92d7e2c6..9791db41 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IApprovalChangeLogService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalChangeLogService.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.data.domain.ApprovalChangeLog; +import com.yfd.platform.qgc_data.domain.ApprovalChangeLog; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/IApprovalLogService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalLogService.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/data/service/IApprovalLogService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalLogService.java index 575273ea..4ab5d419 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IApprovalLogService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalLogService.java @@ -1,7 +1,7 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.data.domain.ApprovalLog; +import com.yfd.platform.qgc_data.domain.ApprovalLog; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalMainService.java similarity index 88% rename from backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalMainService.java index 2c186516..06fb2045 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IApprovalMainService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IApprovalMainService.java @@ -1,9 +1,8 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.data.domain.ApprovalMain; -import org.springframework.web.bind.annotation.RequestParam; +import com.yfd.platform.qgc_data.domain.ApprovalMain; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java index 25041724..742d6c88 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IFishDraftDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java @@ -1,10 +1,10 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.data.domain.FishDraftData; -import com.yfd.platform.data.domain.vo.FishDraftDataVO; +import com.yfd.platform.qgc_data.domain.FishDraftData; +import com.yfd.platform.qgc_data.domain.vo.FishDraftDataVO; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishImportService.java similarity index 86% rename from backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IFishImportService.java index 4862f013..1aafd8a1 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishImportService.java @@ -1,15 +1,14 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; -import com.yfd.platform.data.domain.FishDraftData; -import com.yfd.platform.data.domain.FishImportRequest; -import com.yfd.platform.data.domain.FishImportResult; -import com.yfd.platform.data.utils.ZipFileUtil; +import com.yfd.platform.qgc_data.domain.FishDraftData; +import com.yfd.platform.qgc_data.domain.FishImportRequest; +import com.yfd.platform.qgc_data.domain.FishImportResult; +import com.yfd.platform.qgc_data.utils.ZipFileUtil; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.InputStream; import java.util.List; -import java.util.Map; /** *

diff --git a/backend/src/main/java/com/yfd/platform/data/service/IFishStatisticsService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishStatisticsService.java similarity index 69% rename from backend/src/main/java/com/yfd/platform/data/service/IFishStatisticsService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IFishStatisticsService.java index 514d485e..4a08e371 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IFishStatisticsService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishStatisticsService.java @@ -1,8 +1,8 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.data.domain.vo.FishStatisticsVO; +import com.yfd.platform.qgc_data.domain.vo.FishStatisticsVO; public interface IFishStatisticsService { diff --git a/backend/src/main/java/com/yfd/platform/data/service/IFishZipImportService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishZipImportService.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/data/service/IFishZipImportService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IFishZipImportService.java index a8534399..0f48a740 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IFishZipImportService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishZipImportService.java @@ -1,6 +1,6 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; -import com.yfd.platform.data.domain.FishImportResult; +import com.yfd.platform.qgc_data.domain.FishImportResult; import java.io.InputStream; diff --git a/backend/src/main/java/com/yfd/platform/data/service/IImportTaskService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IImportTaskService.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/data/service/IImportTaskService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/IImportTaskService.java index d0ca0b73..dd880fc7 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IImportTaskService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IImportTaskService.java @@ -1,10 +1,10 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.data.domain.FishImportResult; -import com.yfd.platform.data.domain.ImportTask; -import com.yfd.platform.data.domain.ImportTaskRow; +import com.yfd.platform.qgc_data.domain.FishImportResult; +import com.yfd.platform.qgc_data.domain.ImportTask; +import com.yfd.platform.qgc_data.domain.ImportTaskRow; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/ISysUserDataScopeService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/ISysUserDataScopeService.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/data/service/ISysUserDataScopeService.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/ISysUserDataScopeService.java index a4f75d35..9763c025 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/ISysUserDataScopeService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/ISysUserDataScopeService.java @@ -1,10 +1,10 @@ -package com.yfd.platform.data.service; +package com.yfd.platform.qgc_data.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.domain.bo.EditUserDataScopeBo; -import com.yfd.platform.data.domain.vo.SysUserDataScopeVO; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.domain.bo.EditUserDataScopeBo; +import com.yfd.platform.qgc_data.domain.vo.SysUserDataScopeVO; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalChangeLogServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalChangeLogServiceImpl.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalChangeLogServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalChangeLogServiceImpl.java index 0e4782a8..895cb7a1 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalChangeLogServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalChangeLogServiceImpl.java @@ -1,11 +1,9 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.ApprovalChangeLog; -import com.yfd.platform.data.mapper.ApprovalChangeLogMapper; -import com.yfd.platform.data.service.IApprovalChangeLogService; -import com.yfd.platform.system.domain.SysUser; +import com.yfd.platform.qgc_data.domain.ApprovalChangeLog; +import com.yfd.platform.qgc_data.mapper.ApprovalChangeLogMapper; +import com.yfd.platform.qgc_data.service.IApprovalChangeLogService; import com.yfd.platform.system.mapper.SysUserMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalLogServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalLogServiceImpl.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalLogServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalLogServiceImpl.java index cb491738..b3a577be 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalLogServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalLogServiceImpl.java @@ -1,10 +1,10 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.ApprovalLog; -import com.yfd.platform.data.mapper.ApprovalLogMapper; -import com.yfd.platform.data.service.IApprovalLogService; +import com.yfd.platform.qgc_data.domain.ApprovalLog; +import com.yfd.platform.qgc_data.mapper.ApprovalLogMapper; +import com.yfd.platform.qgc_data.service.IApprovalLogService; import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.mapper.SysUserMapper; import jakarta.annotation.Resource; diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalMainServiceImpl.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalMainServiceImpl.java index 27923ee2..caca4a50 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/ApprovalMainServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ApprovalMainServiceImpl.java @@ -1,15 +1,13 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.ApprovalMain; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.ApprovalMainMapper; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.data.service.IApprovalLogService; -import com.yfd.platform.data.service.IApprovalMainService; +import com.yfd.platform.qgc_data.domain.ApprovalMain; +import com.yfd.platform.qgc_data.mapper.ApprovalMainMapper; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_data.service.IApprovalLogService; +import com.yfd.platform.qgc_data.service.IApprovalMainService; import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.mapper.SysUserMapper; import jakarta.annotation.Resource; @@ -18,7 +16,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.*; -import java.util.stream.Collectors; /** *

diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java index 4fd0c39e..2d723be6 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -7,23 +7,23 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.data.domain.ApprovalMain; -import com.yfd.platform.data.domain.FishDraftData; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.domain.vo.FishDraftDataVO; -import com.yfd.platform.data.mapper.FishDraftDataMapper; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.data.service.IApprovalChangeLogService; -import com.yfd.platform.data.service.IApprovalLogService; -import com.yfd.platform.data.service.IApprovalMainService; -import com.yfd.platform.data.service.IFishDraftDataService; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdFpssR; -import com.yfd.platform.env.domain.SdHbrvDic; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.mapper.SdFpssRMapper; -import com.yfd.platform.env.mapper.SdHbrvDicMapper; -import com.yfd.platform.env.service.ISdFpssRService; +import com.yfd.platform.qgc_data.domain.ApprovalMain; +import com.yfd.platform.qgc_data.domain.FishDraftData; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.domain.vo.FishDraftDataVO; +import com.yfd.platform.qgc_data.mapper.FishDraftDataMapper; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_data.service.IApprovalChangeLogService; +import com.yfd.platform.qgc_data.service.IApprovalLogService; +import com.yfd.platform.qgc_data.service.IApprovalMainService; +import com.yfd.platform.qgc_data.service.IFishDraftDataService; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdFpssR; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.mapper.SdFpssRMapper; +import com.yfd.platform.qgc_base.mapper.SdHbrvDicMapper; +import com.yfd.platform.qgc_base.service.ISdFpssRService; import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.mapper.SysUserMapper; import com.yfd.platform.utils.KendoUtil; @@ -32,11 +32,8 @@ import com.yfd.platform.utils.SecurityUtils; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.executor.BatchResult; -import org.springframework.security.core.GrantedAuthority; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; import java.util.*; diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishImportServiceImpl.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishImportServiceImpl.java index 5d49a60f..6df1f3fd 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishImportServiceImpl.java @@ -1,23 +1,22 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.databind.exc.InvalidFormatException; -import com.yfd.platform.data.domain.FishDraftData; -import com.yfd.platform.data.domain.FishImportRequest; -import com.yfd.platform.data.domain.FishImportResult; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.data.service.AttachmentUploadService; -import com.yfd.platform.data.service.IFishDraftDataService; -import com.yfd.platform.data.service.IFishImportService; -import com.yfd.platform.data.utils.ZipFileUtil; -import com.yfd.platform.env.domain.*; -import com.yfd.platform.env.mapper.*; +import com.yfd.platform.qgc_data.domain.FishDraftData; +import com.yfd.platform.qgc_data.domain.FishImportRequest; +import com.yfd.platform.qgc_data.domain.FishImportResult; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_data.service.AttachmentUploadService; +import com.yfd.platform.qgc_data.service.IFishDraftDataService; +import com.yfd.platform.qgc_data.service.IFishImportService; +import com.yfd.platform.qgc_data.utils.ZipFileUtil; +import com.yfd.platform.qgc_base.domain.*; +import com.yfd.platform.qgc_base.mapper.*; import com.yfd.platform.system.service.ISysDictionaryItemsService; import com.yfd.platform.system.service.ISysDictionaryService; -import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.poi.EncryptedDocumentException; @@ -34,7 +33,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; -import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.*; diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishStatisticsServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishStatisticsServiceImpl.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/data/service/impl/FishStatisticsServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishStatisticsServiceImpl.java index 8e975ed9..87749f86 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishStatisticsServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishStatisticsServiceImpl.java @@ -1,13 +1,12 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.data.domain.vo.FishStatisticsVO; -import com.yfd.platform.data.mapper.FishStatisticsMapper; -import com.yfd.platform.data.service.IFishStatisticsService; -import com.yfd.platform.utils.KendoUtil; +import com.yfd.platform.qgc_data.domain.vo.FishStatisticsVO; +import com.yfd.platform.qgc_data.mapper.FishStatisticsMapper; +import com.yfd.platform.qgc_data.service.IFishStatisticsService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ImportTaskServiceImpl.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ImportTaskServiceImpl.java index 7b6e8e91..db0b1550 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/ImportTaskServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/ImportTaskServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; @@ -8,24 +8,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.yfd.platform.data.domain.FishDraftData; -import com.yfd.platform.data.domain.FishImportResult; -import com.yfd.platform.data.domain.ImportTask; -import com.yfd.platform.data.domain.ImportTaskRow; -import com.yfd.platform.data.mapper.ImportTaskMapper; -import com.yfd.platform.data.mapper.ImportTaskRowMapper; -import com.yfd.platform.data.service.AttachmentUploadService; -import com.yfd.platform.data.service.IImportTaskService; +import com.yfd.platform.qgc_data.domain.FishDraftData; +import com.yfd.platform.qgc_data.domain.FishImportResult; +import com.yfd.platform.qgc_data.domain.ImportTask; +import com.yfd.platform.qgc_data.domain.ImportTaskRow; +import com.yfd.platform.qgc_data.mapper.ImportTaskMapper; +import com.yfd.platform.qgc_data.mapper.ImportTaskRowMapper; +import com.yfd.platform.qgc_data.service.AttachmentUploadService; +import com.yfd.platform.qgc_data.service.IImportTaskService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; /** *

diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/SysUserDataScopeServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/data/service/impl/SysUserDataScopeServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java index a1e86244..1f106acb 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/SysUserDataScopeServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java @@ -1,25 +1,25 @@ -package com.yfd.platform.data.service.impl; +package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.domain.bo.EditUserDataScopeBo; -import com.yfd.platform.data.domain.vo.SysUserDataScopeVO; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.data.service.ISysUserDataScopeService; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdHbrvDic; -import com.yfd.platform.env.domain.SdHycdDic; -import com.yfd.platform.env.domain.SdHydrobase; -import com.yfd.platform.env.domain.SdRvcdDic; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.mapper.SdHbrvDicMapper; -import com.yfd.platform.env.mapper.SdHycdDicMapper; -import com.yfd.platform.env.mapper.SdHydrobaseMapper; -import com.yfd.platform.env.mapper.SdRvcdDicMapper; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.domain.bo.EditUserDataScopeBo; +import com.yfd.platform.qgc_data.domain.vo.SysUserDataScopeVO; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_data.service.ISysUserDataScopeService; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdHbrvDic; +import com.yfd.platform.qgc_base.domain.SdHycdDic; +import com.yfd.platform.qgc_base.domain.SdHydrobase; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.mapper.SdHbrvDicMapper; +import com.yfd.platform.qgc_base.mapper.SdHycdDicMapper; +import com.yfd.platform.qgc_base.mapper.SdHydrobaseMapper; +import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper; import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.mapper.SysUserMapper; import jakarta.annotation.Resource; diff --git a/backend/src/main/java/com/yfd/platform/data/utils/ZipFileUtil.java b/backend/src/main/java/com/yfd/platform/qgc_data/utils/ZipFileUtil.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/data/utils/ZipFileUtil.java rename to backend/src/main/java/com/yfd/platform/qgc_data/utils/ZipFileUtil.java index d183bca2..bcfd2ef3 100644 --- a/backend/src/main/java/com/yfd/platform/data/utils/ZipFileUtil.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/utils/ZipFileUtil.java @@ -1,4 +1,4 @@ -package com.yfd.platform.data.utils; +package com.yfd.platform.qgc_data.utils; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java new file mode 100644 index 00000000..644a77a7 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java @@ -0,0 +1,118 @@ +package com.yfd.platform.qgc_eng.eq.controller; + +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.EngEqIntervalVo; +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; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; +import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; +import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; +import com.yfd.platform.utils.QgcQueryWrapperUtil; +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("/eq") +@Tag(name = "电站实时数据查询") +@Validated +public class EngEqDataController { + + @Resource + private EngEqDataService engEqDataService; + + @PostMapping("/data/GetKendoListCust") + @Operation(summary = "生态流量沿程变化-小时") + public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getKendoListCust(dataSourceRequest)); + } + + @PostMapping("/interval/GetKendoListCust") + @Operation(summary = "生态流量达标情况") + public ResponseResult getIntervalKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getIntervalKendoListCust(dataSourceRequest)); + } + + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "电站基础信息查询") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + DataSourceResult result = engEqDataService.getMsstbprptList(dataSourceRequest); + return ResponseResult.successData(result); + } + + @PostMapping("/interval/qgc/hour/GetKendoListCust") + @Operation(summary = "生态流量达标率小时统计(二级页面)") + public ResponseResult getQgcHourKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getQgcHourKendoListCust(dataSourceRequest)); + } + + @PostMapping("/interval/qgc/day/GetKendoListCust") + @Operation(summary = "生态流量达标率日统计(二级页面)") + public ResponseResult getQgcDayKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getQgcDayKendoListCust(dataSourceRequest)); + } + + @PostMapping("/engalong/statistics/qgcHourV/GetKendoListCust") + @Operation(summary = "沿程生态流量变化(环保部小时数据)") + public ResponseResult getQgcHourVAlongKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getQgcHourVAlongKendoListCust(dataSourceRequest)); + } + + @PostMapping("/fid/GetKendoListCust") + @Operation(summary = "查询电站相关鱼类附件编码") + public ResponseResult getFidKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getFidKendoListCust(dataSourceRequest)); + } + + @PostMapping("/data/getEngLimit") + @Operation(summary = "根据时间范围查询电站生态流量限值及来源") + public ResponseResult getEngLimit(@RequestBody DataSourceRequest dataSourceRequest) { + EngEqRuleVo result = engEqDataService.getEngLimit(dataSourceRequest); + return result == null ? ResponseResult.success() : ResponseResult.successData(result); + } + + @PostMapping("/interval/qgc/getQgcStaticData") + @Operation(summary = "生态流量达标率区间范围统计(一级页面)") + public ResponseResult getQgcStaticData(@RequestBody DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + String type = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "type"); + if (!"hour".equals(type) && !"day".equals(type)) { + return ResponseResult.error("请选择生态流量达标率统计类型(小时还是天统计)"); + } + QgcQecStaticVo result = engEqDataService.getQgcStaticData(dataSourceRequest, type); + return result == null ? ResponseResult.success() : ResponseResult.successData(result); + } + + @PostMapping("/wbsb/GetKendoList") + @Operation(summary = "查询基地/基地流域树数据") + public ResponseResult getWbsbList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getWbsbList(dataSourceRequest)); + } + + @PostMapping("/vmsstbprpt/GetKendoList") + @Operation(summary = "电站统计查询") + public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getVmsstbprptList(dataSourceRequest)); + } + + @PostMapping("/evnmAutoMonitor/GetKendoListCust") + @Operation(summary = "生态流量监测数量统计") + public ResponseResult getEvnmAutoMonitorList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getEvnmAutoMonitorList(dataSourceRequest)); + } + + @PostMapping("/qecRateCount") + @Operation(summary = "生态流量达标率计算(基地维度、不达标原因维度)") + public ResponseResult getQecRateCount(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.qecRateCount(dataSourceRequest)); + } +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDataVo.java new file mode 100644 index 00000000..653e0a1c --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDataVo.java @@ -0,0 +1,129 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "生态流量小时数据") +public class EngEqDataVo { + + @Schema(description = "主键") + private String id; + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "电站名称") + private String ennm; + + @Schema(description = "数据时间") + private Date tm; + + @Schema(description = "入库流量") + private BigDecimal qi; + + @Schema(description = "出库流量") + private BigDecimal qo; + + @Schema(description = "生态流量限值(环保部)") + private BigDecimal qecLimit; + + @Schema(description = "生态流量") + private BigDecimal qec; + + @Schema(description = "生态流量限值(水利部)") + private BigDecimal mwrLimit; + + @Schema(description = "生态流量限值(多年平均)") + private BigDecimal avqLimit; + + @Schema(description = "生态流量系数(环保部)") + private BigDecimal qecC; + + @Schema(description = "生态流量系数(水利部)") + private BigDecimal mwrC; + + @Schema(description = "生态流量系数(多年平均)") + private BigDecimal avqC; + + @Schema(description = "生态流量是否达标(环保部)") + private Integer sfdb; + + @Schema(description = "生态流量是否达标(环保部)中文") + private String sfdbName; + + @Schema(description = "生态流量是否达标(水利部)") + private Integer mwrSfdb; + + @Schema(description = "生态流量是否达标(水利部)中文") + private String mwrSfdbName; + + @Schema(description = "生态流量是否达标(多年平均)") + private Integer avqSfdb; + + @Schema(description = "生态流量是否达标(多年平均)中文") + private String avqSfdbName; + + @Schema(description = "坝上水位") + private BigDecimal rz; + + @Schema(description = "坝下水位") + private BigDecimal dz; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "流域名称") + private String rvcdName; + + @Schema(description = "河段名称") + private String hbrvcdName; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "AI识别生态流量值") + private BigDecimal qecAi; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "河段编码") + private String hbrvcd; + + @Schema(description = "公司编码") + private String hycd; + + @Schema(description = "流域编码") + private String rvcd; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "环保部规则详情ID") + private String qecRuleDid; + + @Schema(description = "水利部规则详情ID") + private String qecMwrruleDid; + + @Schema(description = "去年同期生态流量") + private BigDecimal beforeQec; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDayIntervalVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDayIntervalVo.java new file mode 100644 index 00000000..a40b7442 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDayIntervalVo.java @@ -0,0 +1,140 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@Schema(description = "生态流量达标率日统计") +public class EngEqDayIntervalVo { + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "工程名称") + private String ennm; + + @Schema(description = "站类") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "装机容量") + private BigDecimal ttpwr; + + @Schema(description = "正常蓄水位") + private BigDecimal normz; + + @Schema(description = "多年平均流量") + private BigDecimal avq; + + @Schema(description = "是否接入") + private Integer dtin; + + @Schema(description = "环保数据接入状态") + private Integer dtinEnv; + + @Schema(description = "工程规模") + private Integer prsc; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "入库流量") + private BigDecimal qi; + + @Schema(description = "出库流量") + private BigDecimal qo; + + @Schema(description = "生态流量") + private BigDecimal qec; + + @Schema(description = "坝上水位") + private BigDecimal rz; + + @Schema(description = "生态流量达标率") + private BigDecimal qecRate; + + @Schema(description = "水利部生态流量达标率") + private BigDecimal mwrRate; + + @Schema(description = "多年平均生态流量达标率") + private BigDecimal avqRate; + + @Schema(description = "环保部区间") + private String qecInterval; + + @Schema(description = "水利部区间") + private String mwrInterval; + + @Schema(description = "多年平均区间") + private String avqInterval; + + @Schema(description = "环保部锚点状态") + private String anchoPointState; + + @Schema(description = "水利部锚点状态") + private String mwrPointState; + + @Schema(description = "多年平均锚点状态") + private String avqPointState; + + @Schema(description = "入库流量合计") + private BigDecimal qiSum; + + @Schema(description = "出库流量合计") + private BigDecimal qoSum; + + @Schema(description = "补水总量") + private BigDecimal fillWater; + + @Schema(description = "标题名称") + private String titleName; + + @Schema(description = "生态类型") + private String eqtp; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; + + @Schema(description = "最新时间的一条数据") + private LastTmEngEqDataVo lastTmEngEqDataVo; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqHourIntervalVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqHourIntervalVo.java new file mode 100644 index 00000000..1ab37f3e --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqHourIntervalVo.java @@ -0,0 +1,143 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@Schema(description = "生态流量达标率小时统计") +public class EngEqHourIntervalVo { + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "工程名称") + private String ennm; + + @Schema(description = "站类") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "装机容量") + private BigDecimal ttpwr; + + @Schema(description = "正常蓄水位") + private BigDecimal normz; + + @Schema(description = "多年平均流量") + private BigDecimal avq; + + @Schema(description = "是否接入") + private Integer dtin; + + @Schema(description = "环保数据接入状态") + private Integer dtinEnv; + + @Schema(description = "工程规模") + private Integer prsc; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "入库流量") + private BigDecimal qi; + + @Schema(description = "出库流量") + private BigDecimal qo; + + @Schema(description = "生态流量") + private BigDecimal qec; + + @Schema(description = "坝上水位") + private BigDecimal rz; + + @Schema(description = "生态流量达标率") + private BigDecimal qecRate; + + @Schema(description = "水利部生态流量达标率") + private BigDecimal mwrRate; + + @Schema(description = "多年平均生态流量达标率") + private BigDecimal avqRate; + + @Schema(description = "环保部区间") + private String qecInterval; + + @Schema(description = "水利部区间") + private String mwrInterval; + + @Schema(description = "多年平均区间") + private String avqInterval; + + @Schema(description = "环保部锚点状态") + private String anchoPointState; + + @Schema(description = "水利部锚点状态") + private String mwrPointState; + + @Schema(description = "多年平均锚点状态") + private String avqPointState; + + @Schema(description = "入库流量合计") + private BigDecimal qiSum; + + @Schema(description = "出库流量合计") + private BigDecimal qoSum; + + @Schema(description = "补水总量") + private BigDecimal fillWater; + + @Schema(description = "标题名称") + private String titleName; + + @Schema(description = "生态类型") + private String eqtp; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; + + /** + * 最新时间的一条数据 + */ + @Schema(description = "最新时间的一条数据") + private LastTmEngEqDataVo lastTmEngEqDataVo; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqIntervalVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqIntervalVo.java new file mode 100644 index 00000000..e988df2e --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqIntervalVo.java @@ -0,0 +1,125 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@Schema(description = "生态流量达标情况") +public class EngEqIntervalVo { + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "工程名称") + private String ennm; + + @Schema(description = "站类") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "是否接入") + private Integer dtin; + + @Schema(description = "环保数据接入状态") + private Integer dtinEnv; + + @Schema(description = "工程规模") + private Integer prsc; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "入库流量") + private BigDecimal qi; + + @Schema(description = "出库流量") + private BigDecimal qo; + + @Schema(description = "生态流量限值") + private BigDecimal qecLimit; + + @Schema(description = "生态流量") + private BigDecimal qec; + + @Schema(description = "坝上水位") + private BigDecimal rz; + + @Schema(description = "坝下水位") + private BigDecimal dz; + + @Schema(description = "生态流量达标率") + private BigDecimal qecRate; + + @Schema(description = "去年同期生态流量达标率") + private BigDecimal beforeQecRate; + + @Schema(description = "生态流量达标率区间") + private String qecInterval; + + @Schema(description = "锚点状态") + private String anchoPointState; + + @Schema(description = "环保部达标数") + private Integer qecSfdbHy; + + @Schema(description = "环保部不达标数") + private Integer qecSfdbHn; + + @Schema(description = "环保部统计数") + private Integer qecSfdbCount; + + @Schema(description = "环保部异常数") + private Integer qecSfdbHo; + + @Schema(description = "入库流量合计") + private BigDecimal qiSum; + + @Schema(description = "出库流量合计") + private BigDecimal qoSum; + + @Schema(description = "补水总量") + private BigDecimal fillWater; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqMsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqMsstbprptVo.java new file mode 100644 index 00000000..8bfe763f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqMsstbprptVo.java @@ -0,0 +1,72 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "电站基础信息查询") +public class EngEqMsstbprptVo extends SdEngInfoBH { + + @Schema(description = "主键ID") + private String id; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "电站高程") + private Double dtmel; + + @Schema(description = "站类主键") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "站类名称") + private String sttpName; + + @Schema(description = "站类全路径") + private String sttpFullPath; + + @Schema(description = "站类层级") + private Integer sttpTreeLevel; + + @Schema(description = "建设状态分类编码") + private String bldsttCcode; + + @Schema(description = "建设状态分类名称") + private String bldsttCcodeName; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "流域名称") + private String rvcdName; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "国家名称") + private String countryName; + + @Schema(description = "公司名称") + private String hynm; + + @Schema(description = "集团名称") + private String topHynm; + + @Schema(description = "数据接入中文") + private String dtinName; + + @Schema(description = "建设状态名称") + private String bldsttName; + + @Schema(description = "图片附件") + private String url; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqRateCountVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqRateCountVo.java new file mode 100644 index 00000000..22ba4b74 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqRateCountVo.java @@ -0,0 +1,50 @@ +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.math.BigDecimal; + +@Data +@Schema(description = "生态流量达标率统计") +public class EngEqRateCountVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "行政区编码") + private String addvcd; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "工程名称") + private String ennm; + + @Schema(description = "调节性能编码") + private String qecPerformance; + + @Schema(description = "调节性能名称") + private String qecPerformanceName; + + @Schema(description = "生态流量达标率") + private BigDecimal qecRate; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqRuleVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqRuleVo.java new file mode 100644 index 00000000..48c85326 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqRuleVo.java @@ -0,0 +1,35 @@ +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 EngEqRuleVo { + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "环保部生态流量限值") + private String eqmnStr; + + @Schema(description = "环保部生态流量限值来源") + private String vlsr; + + @Schema(description = "水利部生态流量限值") + private String eqmnmwrStr; + + @Schema(description = "水利部生态流量限值来源") + private String mwrVlsr; + + @Schema(description = "多年平均流量值") + private String avqStr; + + @Schema(description = "多年平均流量值来源") + private String avqVlsr; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqStaticIntervalVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqStaticIntervalVo.java new file mode 100644 index 00000000..8c66b62f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqStaticIntervalVo.java @@ -0,0 +1,21 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "生态流量区间统计中间结果") +public class EngEqStaticIntervalVo { + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "环保部区间") + private String qecInterval; + + @Schema(description = "水利部区间") + private String mwrInterval; + + @Schema(description = "多年平均区间") + private String avqInterval; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqVmsstbprptVo.java new file mode 100644 index 00000000..04a7d016 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqVmsstbprptVo.java @@ -0,0 +1,70 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "电站统计查询") +public class EngEqVmsstbprptVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "站类名称") + private String sttpName; + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "工程名称") + private String ennm; + + @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; + + @Schema(description = "工程规模") + private Integer prsc; + + @Schema(description = "建设状态") + private String bldstt; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "环保数据接入状态") + private Integer dtinEnv; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngFidVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngFidVo.java new file mode 100644 index 00000000..cc00fe03 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngFidVo.java @@ -0,0 +1,12 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "电站鱼类附件编码") +public class EngFidVo { + + @Schema(description = "附件编码串,多个逗号分隔") + private String fid; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngQecAlongVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngQecAlongVo.java new file mode 100644 index 00000000..36e3dae4 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngQecAlongVo.java @@ -0,0 +1,51 @@ +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 java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "沿程生态流量变化(环保部小时最新)") +public class EngQecAlongVo { + + @Schema(description = "类型") + private String sttp; + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "流域编码") + private String rvcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "入库流量") + private BigDecimal qi; + + @Schema(description = "出库流量") + private BigDecimal qo; + + @Schema(description = "生态流量") + private BigDecimal qec; + + @Schema(description = "流域排序") + private Integer rvcdSort; + + @Schema(description = "生态流量限值") + private BigDecimal qecLimit; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "最新时间") + private Date tm; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "结果集中的最小非空时间") + private Date minTm; + + @Schema(description = "站点排序") + private Integer stcdSort; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/LastTmEngEqDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/LastTmEngEqDataVo.java new file mode 100644 index 00000000..7711be27 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/LastTmEngEqDataVo.java @@ -0,0 +1,95 @@ +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 java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author phq + * @date 2023/5/13 14:25 + * 描述: + */ +@Data +@Schema(description = "最新电站工程数据") +public class LastTmEngEqDataVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "电站编码") + private String stcd; + + @Schema(description = "电站名称") + private String stnm; + + @Schema(description = "数据时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date tm; + + @Schema(description = "装机容量") + private BigDecimal ttpwr; + + @Schema(description = "生态流量限值") + private BigDecimal qecLimit; + + @Schema(description = "生态流量限值(水利部)") + private BigDecimal mwrLimit; + + @Schema(description = "生态流量限值(多年平均)") + private BigDecimal avqLimit; + + @Schema(description = "生态流量系数(环保部)") + private BigDecimal qecC; + + @Schema(description = "生态流量系数(水利部)") + private BigDecimal mwrC; + + @Schema(description = "生态流量系数(多年平均)") + private BigDecimal avqC; + + /* 以下字段暂未使用 + @Schema(description = "生态流量是否达标(环保部)") + private Integer qecSfdb; + + @Schema(description = "生态流量是否达标(水利部)") + private Integer mwrSfdb; + + @Schema(description = "生态流量是否达标(电站多年平均)") + private Integer avqSfdb; + */ + + @Schema(description = "正常蓄水位") + private BigDecimal normz; + + @Schema(description = "死水位") + private BigDecimal ddz; + + @Schema(description = "入库流量") + private BigDecimal qi; + + @Schema(description = "出库流量") + private BigDecimal qo; + + @Schema(description = "坝上水位") + private BigDecimal rz; + + @Schema(description = "坝下水位") + private BigDecimal dz; + + @Schema(description = "规则来源") + private String vlsr; + + @Schema(description = "规则来源时间") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date vlsrTm; + + @Schema(description = "规则来源(水利部)") + private String mwrVlsr; + + @Schema(description = "规则来源时间(水利部)") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date mwrVlsrTm; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/QgcQecStaticVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/QgcQecStaticVo.java new file mode 100644 index 00000000..971349d2 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/QgcQecStaticVo.java @@ -0,0 +1,19 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +@Schema(description = "生态流量达标率统计结果") +public class QgcQecStaticVo { + + @Schema(description = "参与统计电站总数") + private Integer engCnt; + + @Schema(description = "统计明细") + private List list; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/QgcQecVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/QgcQecVo.java new file mode 100644 index 00000000..0ef8d66b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/QgcQecVo.java @@ -0,0 +1,29 @@ +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 QgcQecVo { + + @Schema(description = "统计类型") + private Integer type; + + @Schema(description = "区间数量") + private Integer qecCnt; + + @Schema(description = "有要求的电站总数") + private Integer qecTCnt; + + @Schema(description = "区间编码") + private String code; + + @Schema(description = "区间描述") + private String desc; + + @Schema(description = "统计类型名称") + private String typeName; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/SdEqMonitorCountVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/SdEqMonitorCountVo.java new file mode 100644 index 00000000..7d600576 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/SdEqMonitorCountVo.java @@ -0,0 +1,31 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Schema(description = "生态流量监测数量统计") +public class SdEqMonitorCountVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "数量") + private Long cnt; + + @Schema(description = "排序号") + private Integer orderInx; + + @Schema(description = "排序号名称") + private String orderInxName; + + @Schema(description = "站类完整路径") + private String sttpFullPath; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "站类名称") + private String sttpName; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java new file mode 100644 index 00000000..a3bd3895 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java @@ -0,0 +1,60 @@ +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.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "基地/基地流域树节点") +public class WbsbVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private String id; + private String recordUser; + private Date recordTime; + private Date modifyTime; + private String displayRecordUser; + private String isolateType; + private String wbsType; + private String wbsCode; + private String wbsName; + private String wbsSname; + private String wbsNameEn; + private String wbsSnameEn; + private Integer enable; + private String description; + private String parentId; + private String parentCode; + private Integer treeLevel; + private Integer hasChildren; + private String objId; + private String topWbsType; + private String fullPath; + private Integer internal; + private BigDecimal lgtd; + private BigDecimal lttd; + private BigDecimal area; + private BigDecimal perimeter; + private String synopsis; + private String introduce; + private String logo; + private String inffile; + private Integer orderIndex; + private String filterContent; + private String departmentId; + private String systemId; + private String platformId; + private String reachWwqtg; + private BigDecimal maxElev; + private BigDecimal minElev; + private String datTp; + private String rvAg; + private Integer ifInnRv; + private String showControl; + private String stcd; + private String displayDepartment; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java new file mode 100644 index 00000000..03d06e3a --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java @@ -0,0 +1,44 @@ +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.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.EngEqMsstbprptVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo; +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; + +public interface EngEqDataService { + + DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getIntervalKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); + + DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getQgcDayKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getQgcHourVAlongKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getFidKendoListCust(DataSourceRequest dataSourceRequest); + + EngEqRuleVo getEngLimit(DataSourceRequest dataSourceRequest); + + QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type); + + DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest); + + DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); + + DataSourceResult getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest); + + DataSourceResult qecRateCount(DataSourceRequest dataSourceRequest); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java new file mode 100644 index 00000000..2a71ed11 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -0,0 +1,3840 @@ +package com.yfd.platform.qgc_eng.eq.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.DataSourceLoadOptionsBase; +import com.yfd.platform.common.DataSourceRequest; +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.common.enums.QecIntervalEnum; +import com.yfd.platform.common.enums.ShowEnum; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo; +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.EngEqMsstbprptVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqStaticIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; +import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; +import com.yfd.platform.utils.QgcQueryWrapperUtil; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Date; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Service +public class EngEqDataServiceImpl implements EngEqDataService { + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Override + public DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryDetailList(dataSourceRequest, loadOptions); + } + return queryGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getIntervalKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryIntervalDetailList(dataSourceRequest, loadOptions); + } + return queryIntervalGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryMsstbprptDetailList(dataSourceRequest, loadOptions); + } + return queryMsstbprptGroupList(dataSourceRequest, loadOptions); + } + + private DataSourceResult queryMsstbprptDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildMsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildMsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqMsstbprptVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryMsstbprptGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapMsstbprptColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildMsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsstbprptColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildMsstbprptGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildMsstbprptViewSql() { + return "SELECT " + + "eng.STCD AS id, " + + "eng.STCD AS stcd, " + + "eng.ENNM AS stnm, " + + "eng.ENNM AS ennm, " + + "'ENG' AS sttpCode, " + + "'电站' AS sttpName, " + + "eng.LGTD AS lgtd, " + + "eng.LTTD AS lttd, " + + "eng.ELEV AS elev, " + + "eng.ELEV AS dtmel, " + + "eng.STLC AS stlc, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "eng.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "eng.ADDVCD AS addvcd, " + + "addv.ADDVNM AS addvcdName, " + + "eng.COUNTRY AS country, " + + "country.COUNTRY_NAME AS countryName, " + + "eng.HYCD AS hycd, " + + "CAST(NULL AS VARCHAR2(200)) AS hynm, " + + "eng.TOP_HYCD AS topHycd, " + + "CAST(NULL AS VARCHAR2(200)) AS topHynm, " + + "eng.USFL AS usfl, " + + "eng.DTIN AS dtin, " + + "CASE NVL(eng.DTIN, 0) WHEN 1 THEN '是' WHEN 0 THEN '否' ELSE NULL END AS dtinName, " + + "eng.DTIN_TM AS dtinTm, " + + "eng.INTRODUCE AS introduce, " + + "eng.LOGO AS logo, " + + "eng.INFFILE AS inffile, " + + "eng.INFFILE AS url, " + + "eng.BLDSTT AS bldstt, " + + "CASE eng.BLDSTT_CODE WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' ELSE NULL END AS bldsttCcode, " + + "eng.BLDSTT_CODE AS bldsttCode, " + + "CASE eng.BLDSTT_CODE WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END AS bldsttCcodeName, " + + "eng.ORDER_INDEX AS orderIndex, " + + "eng.PRSC AS prsc, " + + "eng.ENGTP AS engtp, " + + "eng.SCRSC AS scrsc, " + + "eng.PRGR AS prgr, " + + "eng.TM AS tm " + + "FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN SD_COUNTRY_B country ON country.COUNTRY_ID = eng.COUNTRY AND NVL(country.ENABLED, 1) = 1 " + + "WHERE NVL(eng.IS_DELETED, 0) = 0"; + } + + private String buildMsstbprptDetailSelectSql(List selectFields) { + Map columns = msstbprptFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map msstbprptFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("id", "t.id AS id"); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("stnm", "t.stnm AS stnm"); + columns.put("ennm", "t.ennm AS ennm"); + columns.put("sttpCode", "t.sttpCode AS sttpCode"); + columns.put("sttpName", "t.sttpName AS sttpName"); + columns.put("lgtd", "t.lgtd AS lgtd"); + columns.put("lttd", "t.lttd AS lttd"); + columns.put("elev", "t.elev AS elev"); + columns.put("dtmel", "t.dtmel AS dtmel"); + columns.put("stlc", "t.stlc AS stlc"); + columns.put("baseId", "t.baseId AS baseId"); + columns.put("baseName", "t.baseName AS baseName"); + columns.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + columns.put("rvcd", "t.rvcd AS rvcd"); + columns.put("rvcdName", "t.rvcdName AS rvcdName"); + columns.put("addvcd", "t.addvcd AS addvcd"); + columns.put("addvcdName", "t.addvcdName AS addvcdName"); + columns.put("country", "t.country AS country"); + columns.put("countryName", "t.countryName AS countryName"); + columns.put("hycd", "t.hycd AS hycd"); + columns.put("hynm", "t.hynm AS hynm"); + columns.put("topHycd", "t.topHycd AS topHycd"); + columns.put("topHynm", "t.topHynm AS topHynm"); + columns.put("usfl", "t.usfl AS usfl"); + columns.put("dtin", "t.dtin AS dtin"); + columns.put("dtinName", "t.dtinName AS dtinName"); + columns.put("dtinTm", "t.dtinTm AS dtinTm"); + columns.put("introduce", "t.introduce AS introduce"); + columns.put("logo", "t.logo AS logo"); + columns.put("inffile", "t.inffile AS inffile"); + columns.put("url", "t.url AS url"); + columns.put("bldstt", "t.bldstt AS bldstt"); + columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + columns.put("bldsttCode", "t.bldsttCode AS bldsttCode"); + columns.put("bldsttCcodeName", "t.bldsttCcodeName AS bldsttCcodeName"); + columns.put("orderIndex", "t.orderIndex AS orderIndex"); + columns.put("prsc", "t.prsc AS prsc"); + columns.put("engtp", "t.engtp AS engtp"); + columns.put("scrsc", "t.scrsc AS scrsc"); + columns.put("prgr", "t.prgr AS prgr"); + columns.put("tm", "t.tm AS tm"); + return columns; + } + + @Override + public DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryHourIntervalDetailList(dataSourceRequest, loadOptions); + } + return queryHourIntervalGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getQgcDayKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryDayIntervalDetailList(dataSourceRequest, loadOptions); + } + return queryDayIntervalGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getQgcHourVAlongKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + String[] tmRange = resolveAlongTmRange(dataSourceRequest, loadOptions); + if (tmRange == null) { + throw new IllegalArgumentException("请选择开始日期和结束日期"); + } + String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"); + String rvcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd"); + + Map paramMap = new HashMap<>(); + paramMap.put("startTm", tmRange[0]); + paramMap.put("endTm", tmRange[1]); + if (StrUtil.isNotBlank(baseId)) { + paramMap.put("baseId", baseId); + } + if (StrUtil.isNotBlank(rvcd)) { + paramMap.put("rvcd", rvcd); + } + + List list = microservicDynamicSQLMapper.getAllListWithResultType( + buildQgcHourVAlongSql(baseId, rvcd), paramMap, EngQecAlongVo.class); + + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + if (CollUtil.isEmpty(list)) { + result.setTotal(0L); + result.setData(null); + return result; + } + + Date first = list.stream() + .map(EngQecAlongVo::getTm) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + for (EngQecAlongVo item : list) { + item.setMinTm(first); + item.setTm(first); + } + + result.setTotal((long) list.size()); + result.setData(list); + return result; + } + + @Override + public EngEqRuleVo getEngLimit(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + String stcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); + if (StrUtil.isBlank(stcd)) { + throw new IllegalArgumentException("电站编码不能为空."); + } + String[] timeRange = resolveEngLimitTimeRange(dataSourceRequest, loadOptions); + if (timeRange == null) { + throw new IllegalArgumentException("开始时间不能为空."); + } + + Map stationParamMap = new HashMap<>(); + stationParamMap.put("stcd", stcd); + List> stationList = microservicDynamicSQLMapper.pageAllList( + null, + "SELECT STCD, ENNM AS STNM, AVQ, AVQ_SRC FROM SD_ENGINFO_B_H " + + "WHERE STCD = #{map.stcd} AND NVL(IS_DELETED, 0) = 0", + stationParamMap + ); + + EngEqRuleVo vo = new EngEqRuleVo().setStcd(stcd); + if (CollUtil.isNotEmpty(stationList)) { + Map station = stationList.get(0); + vo.setStnm(asString(station.get("STNM"))); + BigDecimal avq = toBigDecimal(station.get("AVQ")); + if (avq != null) { + vo.setAvqStr("(多年平均)(m³/s):" + stripTrailingZeros(avq)); + } else { + vo.setAvqStr("(多年平均)(m³/s):无数据"); + } + String avqSrc = asString(station.get("AVQ_SRC")); + if (StrUtil.isNotBlank(avqSrc)) { + vo.setAvqVlsr(avqSrc); + } + } else { + vo.setAvqStr("(多年平均)(m³/s):无数据"); + } + + List> eqmnList = queryEngLimitRuleDetails(stcd, timeRange[0], timeRange[1], "EQMN"); + List> eqmnMwrList = queryEngLimitRuleDetails(stcd, timeRange[0], timeRange[1], "EQMNMWR"); + vo.setEqmnStr(buildEngLimitDisplay("(生态环境部)(m³/s):", eqmnList)); + vo.setEqmnmwrStr(buildEngLimitDisplay("(水利部)(m³/s):", eqmnMwrList)); + return vo; + } + + @Override + public DataSourceResult getFidKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + String stcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); + if (StrUtil.isBlank(stcd)) { + throw new IllegalArgumentException("stcd 参数不能为空"); + } + + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + List sourceList = microservicDynamicSQLMapper.getAllListWithResultType( + "SELECT FID AS fid " + + "FROM SD_ENGCONSTGENVF_B " + + "WHERE STCD = #{map.stcd} " + + " AND FID IS NOT NULL " + + " AND NVL(IS_DELETED, 0) = 0", + paramMap, + EngFidVo.class + ); + + List data = new ArrayList<>(); + if (CollUtil.isNotEmpty(sourceList)) { + data = sourceList.stream() + .map(EngFidVo::getFid) + .filter(StrUtil::isNotBlank) + .flatMap(fid -> Arrays.stream(fid.split(","))) + .map(String::trim) + .filter(StrUtil::isNotBlank) + .distinct() + .toList(); + } + + DataSourceResult result = new DataSourceResult<>(); + result.setData(data); + result.setTotal((long) data.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + @Override + public QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type) { + List intervalList = queryStaticIntervals(dataSourceRequest, type); + if (CollUtil.isEmpty(intervalList)) { + return null; + } + long qecCnt = intervalList.stream() + .filter(it -> Objects.equals(it.getQecInterval(), QecIntervalEnum.QEC_STLL_1_DY95.getCode())) + .count(); + long qecTCnt = intervalList.stream() + .filter(it -> !Objects.equals(it.getQecInterval(), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())) + .count(); + long mwrCnt = intervalList.stream() + .filter(it -> Objects.equals(it.getMwrInterval(), QecIntervalEnum.QEC_STLL_1_DY95.getCode())) + .count(); + long mwrTCnt = intervalList.stream() + .filter(it -> !Objects.equals(it.getMwrInterval(), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())) + .count(); + long avqCnt = intervalList.stream() + .filter(it -> Objects.equals(it.getAvqInterval(), QecIntervalEnum.QEC_STLL_1_DY95.getCode())) + .count(); + long avqTCnt = intervalList.stream() + .filter(it -> !Objects.equals(it.getAvqInterval(), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())) + .count(); + long noCnt = intervalList.stream() + .filter(it -> Objects.equals(it.getQecInterval(), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()) + && Objects.equals(it.getMwrInterval(), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()) + && Objects.equals(it.getAvqInterval(), QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode())) + .count(); + + List list = new ArrayList<>(); + list.add(new QgcQecVo() + .setType(ShowEnum.Q.getCode()) + .setTypeName(ShowEnum.Q.getDesc()) + .setQecCnt(Math.toIntExact(qecCnt)) + .setQecTCnt(Math.toIntExact(qecTCnt)) + .setCode(QecIntervalEnum.QEC_STLL_1_DY95.getCode()) + .setDesc(ShowEnum.Q.getDesc() + "_" + QecIntervalEnum.QEC_STLL_1_DY95.getDesc())); + list.add(new QgcQecVo() + .setType(ShowEnum.M.getCode()) + .setTypeName(ShowEnum.M.getDesc()) + .setQecCnt(Math.toIntExact(mwrCnt)) + .setQecTCnt(Math.toIntExact(mwrTCnt)) + .setCode(QecIntervalEnum.QEC_STLL_1_DY95.getCode()) + .setDesc(ShowEnum.M.getDesc() + "_" + QecIntervalEnum.QEC_STLL_1_DY95.getDesc())); + list.add(new QgcQecVo() + .setType(ShowEnum.A.getCode()) + .setTypeName(ShowEnum.A.getDesc()) + .setQecCnt(Math.toIntExact(avqCnt)) + .setQecTCnt(Math.toIntExact(avqTCnt)) + .setCode(QecIntervalEnum.QEC_STLL_1_DY95.getCode()) + .setDesc(ShowEnum.A.getDesc() + "_" + QecIntervalEnum.QEC_STLL_1_DY95.getDesc())); + list.add(new QgcQecVo() + .setType(ShowEnum.N.getCode()) + .setTypeName(ShowEnum.N.getDesc()) + .setQecCnt(Math.toIntExact(noCnt)) + .setQecTCnt(Math.toIntExact(noCnt)) + .setCode(QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode()) + .setDesc(QecIntervalEnum.QEC_STLL_6_NOEQMN.getDesc())); + + return new QgcQecStaticVo() + .setEngCnt(intervalList.size()) + .setList(list); + } + + @Override + public DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryWbsbDetailList(dataSourceRequest, loadOptions); + } + return queryWbsbGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryVmsstbprptDetailList(dataSourceRequest, loadOptions); + } + return queryVmsstbprptGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest) { + List showIds = findFilterValues(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "showIds"); + if (!showIds.isEmpty() && !showIds.contains("7")) { + DataSourceResult emptyResult = new DataSourceResult<>(); + emptyResult.setData(new ArrayList<>()); + emptyResult.setTotal(0L); + emptyResult.setAggregates(new HashMap<>()); + return emptyResult; + } + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"); + + StringBuilder sql = new StringBuilder(); + Map paramMap = new HashMap<>(); + sql.append("SELECT COUNT(1) AS cnt, 7 AS orderInx, '生态流量' AS orderInxName, ") + .append("'ENG' AS sttpFullPath, 'ENG' AS sttpCode, '生态流量' AS sttpName ") + .append("FROM SD_ENGINFO_B_H eng ") + .append("WHERE NVL(eng.IS_DELETED, 0) = 0 ") + .append("AND NVL(eng.DTIN, 0) = 1 ") + .append("AND NVL(eng.BLDSTT_CODE, 0) IN (1, 2) ") + .append("AND EXISTS (SELECT 1 FROM SD_QEC_R qec WHERE qec.STCD = eng.STCD AND NVL(qec.IS_DELETED, 0) = 0) "); + if (StrUtil.isNotBlank(baseId)) { + sql.append("AND eng.BASE_ID = #{map.baseId} "); + paramMap.put("baseId", baseId); + } + + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, SdEqMonitorCountVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(list == null ? 0 : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + @Override + public DataSourceResult qecRateCount(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"); + String tm = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm"); + String[] tmRange = resolveQecRateTimeRange(tm); + + List groups = dataSourceRequest == null ? null : dataSourceRequest.getGroup(); + List selectItems = new ArrayList<>(); + List groupItems = new ArrayList<>(); + if (CollUtil.isNotEmpty(groups)) { + for (DataSourceRequest.GroupDescriptor group : groups) { + if (group == null || StrUtil.isBlank(group.getField())) { + continue; + } + String selectSql = mapQecRateSelect(group.getField()); + String groupSql = mapQecRateGroup(group.getField()); + if (StrUtil.isNotBlank(selectSql) && StrUtil.isNotBlank(groupSql)) { + selectItems.add(selectSql); + groupItems.add(groupSql); + } + } + } + + StringBuilder sql = new StringBuilder(); + Map paramMap = new HashMap<>(); + paramMap.put("startTime", tmRange[0]); + paramMap.put("endTime", tmRange[1]); + if (StrUtil.isNotBlank(baseId)) { + paramMap.put("baseId", baseId); + } + + sql.append("SELECT "); + if (!selectItems.isEmpty()) { + sql.append(String.join(", ", selectItems)).append(", "); + } + sql.append(buildQecRateSql()).append(" AS qecRate ") + .append("FROM SD_ENGINFO_B_H eng ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 ") + .append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ") + .append("LEFT JOIN (") + .append(buildQecRateMetricSourceSql()) + .append(") met ON met.STCD = eng.STCD ") + .append("WHERE NVL(eng.IS_DELETED, 0) = 0 ") + .append(" AND NVL(eng.DTIN_ENV, 0) IN (1, 2) ") + .append(" AND NVL(eng.BLDSTT_CODE, 0) = 2 "); + if (StrUtil.isNotBlank(baseId)) { + sql.append(" AND eng.BASE_ID = #{map.baseId} "); + } + if (!groupItems.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupItems)).append(" "); + sql.append(buildQecRateOrderBy(groups)); + } + + List list = microservicDynamicSQLMapper.getAllListWithResultType( + sql.toString(), paramMap, EngEqRateCountVo.class); + fillQecRateCountNames(list); + list = completeQecPerformanceGroups(list, groups); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(list == null ? 0 : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryHourIntervalDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + String viewSql = buildHourIntervalViewSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildHourDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(viewSql) + .append(") t WHERE 1 = 1 "); + + String filterSql = buildHourFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getAggregate()) + && "average".equalsIgnoreCase(dataSourceRequest.getAggregate().get(0).getAggregate())) { + return buildHourIntervalAggregateResult(dataSourceRequest, sql.toString(), paramMap); + } + + sql.append(buildHourDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqHourIntervalVo.class); + postProcessHourIntervalList(list); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryHourIntervalGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + String viewSql = buildHourIntervalViewSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapHourColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapHourColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(viewSql) + .append(") t WHERE 1 = 1 "); + + String filterSql = buildHourFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapHourColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildHourGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult buildHourIntervalAggregateResult(DataSourceRequest dataSourceRequest, + String sourceSql, + Map paramMap) { + List aggregateItems = new ArrayList<>(); + for (DataSourceRequest.AggregateDescriptor item : dataSourceRequest.getAggregate()) { + if (item == null || !"average".equalsIgnoreCase(item.getAggregate())) { + continue; + } + String column = mapHourColumn(item.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + aggregateItems.add("AVG(" + column + ") AS " + item.getField()); + } + if (aggregateItems.isEmpty()) { + DataSourceResult emptyResult = new DataSourceResult<>(); + emptyResult.setData(new ArrayList<>()); + emptyResult.setTotal(0L); + emptyResult.setAggregates(new HashMap<>()); + return emptyResult; + } + + String sql = "SELECT " + String.join(", ", aggregateItems) + " FROM (" + sourceSql + ")"; + List> list = microservicDynamicSQLMapper.pageAllList(null, sql, paramMap); + DataSourceResult result = new DataSourceResult<>(); + result.setData((List) (List) list); + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private void postProcessHourIntervalList(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + for (EngEqHourIntervalVo item : list) { + if (item == null) { + continue; + } + if (item.getQiSum() != null && item.getQoSum() != null) { + item.setFillWater(item.getQoSum().subtract(item.getQiSum())); + } + item.setTitleName(item.getEnnm()); + item.setEqtp("QEC"); + } + } + + private DataSourceResult queryDayIntervalDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + String viewSql = buildDayIntervalViewSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildHourDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(viewSql) + .append(") t WHERE 1 = 1 "); + + String filterSql = buildHourFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getAggregate()) + && "average".equalsIgnoreCase(dataSourceRequest.getAggregate().get(0).getAggregate())) { + return buildDayIntervalAggregateResult(dataSourceRequest, sql.toString(), paramMap); + } + + sql.append(buildHourDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDayIntervalVo.class); + postProcessDayIntervalList(list); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryDayIntervalGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + String viewSql = buildDayIntervalViewSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapHourColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapHourColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(viewSql) + .append(") t WHERE 1 = 1 "); + + String filterSql = buildHourFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapHourColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildHourGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult buildDayIntervalAggregateResult(DataSourceRequest dataSourceRequest, + String sourceSql, + Map paramMap) { + List aggregateItems = new ArrayList<>(); + for (DataSourceRequest.AggregateDescriptor item : dataSourceRequest.getAggregate()) { + if (item == null || !"average".equalsIgnoreCase(item.getAggregate())) { + continue; + } + String column = mapHourColumn(item.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + aggregateItems.add("AVG(" + column + ") AS " + item.getField()); + } + if (aggregateItems.isEmpty()) { + DataSourceResult emptyResult = new DataSourceResult<>(); + emptyResult.setData(new ArrayList<>()); + emptyResult.setTotal(0L); + emptyResult.setAggregates(new HashMap<>()); + return emptyResult; + } + + String sql = "SELECT " + String.join(", ", aggregateItems) + " FROM (" + sourceSql + ")"; + List> list = microservicDynamicSQLMapper.pageAllList(null, sql, paramMap); + DataSourceResult result = new DataSourceResult<>(); + result.setData((List) (List) list); + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private void postProcessDayIntervalList(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + for (EngEqDayIntervalVo item : list) { + if (item == null) { + continue; + } + if (item.getQiSum() != null && item.getQoSum() != null) { + item.setFillWater(item.getQoSum().subtract(item.getQiSum())); + } + item.setTitleName(item.getEnnm()); + item.setEqtp("QEC"); + } + } + + private String buildDayIntervalViewSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + boolean hasDtinFilter = CollUtil.isNotEmpty(findFilterValues(filter, "dtin")); + return "SELECT " + + "eng.STCD AS stcd, " + + "eng.ENNM AS stnm, " + + "eng.ENNM AS ennm, " + + "'ENG' AS sttp, " + + "'ENG' AS sttpCode, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "addv.ADDVNM AS addvcdName, " + + "eng.LGTD AS lgtd, " + + "eng.LTTD AS lttd, " + + "eng.ELEV AS dtmel, " + + "CAST(NULL AS NUMBER(18,6)) AS ttpwr, " + + "CAST(NULL AS NUMBER(18,6)) AS normz, " + + "eng.AVQ AS avq, " + + "eng.DTIN AS dtin, " + + "eng.DTIN_ENV AS dtinEnv, " + + "eng.PRSC AS prsc, " + + "eng.BLDSTT_CODE AS bldsttCcode, " + + "runAgg.QI AS qi, " + + "runAgg.QO AS qo, " + + "runAgg.QEC AS qec, " + + "runAgg.RZ AS rz, " + + buildIntervalRateDisplaySql("met.QEC_RATE") + " AS qecRate, " + + buildIntervalRateDisplaySql("met.MWR_RATE") + " AS mwrRate, " + + buildIntervalRateDisplaySql("met.AVQ_RATE") + " AS avqRate, " + + buildStaticIntervalSql("met.STCD", "met.QEC_RATE", "met.QR", "qecNoRule.STCD", false) + " AS qecInterval, " + + buildStaticIntervalSql("met.STCD", "met.MWR_RATE", "met.MQR", "mwrNoRule.STCD", false) + " AS mwrInterval, " + + buildStaticIntervalSql("met.STCD", "met.AVQ_RATE", "met.AQR", "eng.AVQ", true) + " AS avqInterval, " + + buildHourPointStateSql("met.QEC_RATE") + " AS anchoPointState, " + + buildHourPointStateSql("met.MWR_RATE") + " AS mwrPointState, " + + buildHourPointStateSql("met.AVQ_RATE") + " AS avqPointState, " + + "runAgg.QI_SUM AS qiSum, " + + "runAgg.QO_SUM AS qoSum, " + + "CAST(NULL AS NUMBER(18,6)) AS fillWater, " + + "CAST(NULL AS VARCHAR2(255)) AS titleName, " + + "CAST(NULL AS VARCHAR2(20)) AS eqtp, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(rstSort.SORT, 999999) AS rstcdStepSort, " + + "NVL(siteSort.SORT, 999999) AS siteStepSort " + + "FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = eng.STCD " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " + + "LEFT JOIN (" + buildDayMetricSourceSql(filter, paramMap, indexHolder, 0) + ") met ON met.STCD = eng.STCD " + + "LEFT JOIN (" + buildDayRunSourceSql(filter, paramMap, indexHolder, 0) + ") runAgg ON runAgg.STCD = eng.STCD " + + "LEFT JOIN (" + buildStaticRuleSql("EQMN") + ") qecNoRule ON qecNoRule.STCD = eng.STCD " + + "LEFT JOIN (" + buildStaticRuleSql("EQMNMWR") + ") mwrNoRule ON mwrNoRule.STCD = eng.STCD " + + "WHERE NVL(eng.IS_DELETED, 0) = 0 " + + " AND NVL(eng.BLDSTT_CODE, 0) = 2 " + + (hasDtinFilter ? "" : " AND NVL(eng.DTIN, 0) = 1 ") + + " AND NVL(eng.RUN_STATE, 0) = 4"; + } + + private String buildDayMetricSourceSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + int yearOffset) { + return buildStaticAggregateSql("day", filter, paramMap, indexHolder, yearOffset); + } + + private String buildDayRunSourceSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + int yearOffset) { + String timeFilter = buildIntervalTmFilterCondition(filter, "run.TM", paramMap, indexHolder, yearOffset); + return "SELECT dayRun.STCD, " + + "AVG(dayRun.QI) AS QI, " + + "AVG(dayRun.QO) AS QO, " + + "AVG(dayRun.QEC) AS QEC, " + + "AVG(dayRun.RZ) AS RZ, " + + "SUM(dayRun.QI_SUM_DAY) AS QI_SUM, " + + "SUM(dayRun.QO_SUM_DAY) AS QO_SUM " + + "FROM (SELECT run.STCD, TRUNC(run.TM) AS DT, " + + "AVG(run.QI) AS QI, AVG(run.QO) AS QO, AVG(run.QEC) AS QEC, AVG(run.RZ) AS RZ, " + + "SUM(run.QI) AS QI_SUM_DAY, SUM(run.QO) AS QO_SUM_DAY " + + "FROM SD_HYDROPW_R run " + + "WHERE NVL(run.IS_DELETED, 0) = 0 " + + (StrUtil.isNotBlank(timeFilter) ? " AND " + timeFilter : "") + + " GROUP BY run.STCD, TRUNC(run.TM)) dayRun " + + "GROUP BY dayRun.STCD"; + } + + private String buildQgcHourVAlongSql(String baseId, String rvcd) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT along.RVCD AS rvcd, det.STCD AS stcd, eng.ENNM AS stnm, det.STTP AS sttp, ") + .append("along.ORDER_INDEX AS rvcdSort, det.SORT AS stcdSort, ") + .append("met.QEC AS qec, met.QI AS qi, met.QO AS qo, met.TM AS tm, met.QEC_LIMIT AS qecLimit ") + .append("FROM MS_ALONG_B along ") + .append("INNER JOIN MS_ALONGDET_B det ON along.ID = det.ALONG_ID ") + .append("INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = det.STCD ") + .append("LEFT JOIN (") + .append(" SELECT qec.STCD, run.QI AS QI, qec.QEC AS QEC, run.QO AS QO, qec.TM AS TM, qec.QEC_LIMIT AS QEC_LIMIT ") + .append(" FROM SD_QEC_R qec ") + .append(" LEFT JOIN SD_HYDROPW_R run ON qec.STCD = run.STCD AND qec.TM = run.TM AND NVL(run.IS_DELETED, 0) = 0 ") + .append(" WHERE NVL(qec.IS_DELETED, 0) = 0 ") + .append(" AND qec.TM BETWEEN TO_DATE(#{map.startTm}, 'YYYY-MM-DD HH24:MI:SS') ") + .append(" AND TO_DATE(#{map.endTm}, 'YYYY-MM-DD HH24:MI:SS') ") + .append(" AND qec.TM = (") + .append(" SELECT MAX(qec2.TM) ") + .append(" FROM SD_QEC_R qec2 ") + .append(" WHERE qec2.STCD = qec.STCD ") + .append(" AND NVL(qec2.IS_DELETED, 0) = 0 ") + .append(" AND qec2.TM BETWEEN TO_DATE(#{map.startTm}, 'YYYY-MM-DD HH24:MI:SS') ") + .append(" AND TO_DATE(#{map.endTm}, 'YYYY-MM-DD HH24:MI:SS')") + .append(" )") + .append(") met ON met.STCD = det.STCD ") + .append("WHERE det.STTP = 'ENG' ") + .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") + .append(" AND NVL(eng.BLDSTT_CODE, 0) = 2 ") + .append(" AND along.CODE = 'common' ") + .append(" AND NVL(along.IS_DELETED, 0) = 0 ") + .append(" AND NVL(det.IS_DELETED, 0) = 0 "); + if (StrUtil.isNotBlank(baseId)) { + sql.append(" AND along.RVCD IN (") + .append("SELECT dic.HBRVCD FROM SD_HBRV_DIC dic ") + .append("WHERE dic.BASEID = #{map.baseId} ") + .append(" AND NVL(dic.IS_DELETED, 0) = 0 ") + .append(" AND NVL(dic.ENABLED, 1) = 1") + .append(") "); + } + if (StrUtil.isNotBlank(rvcd)) { + sql.append(" AND along.RVCD = #{map.rvcd} "); + } + sql.append("ORDER BY along.ORDER_INDEX, det.SORT"); + return sql.toString(); + } + + private List> queryEngLimitRuleDetails(String stcd, + String startTime, + String endTime, + String ruleType) { + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + paramMap.put("startTime", startTime); + paramMap.put("endTime", endTime); + paramMap.put("ruleType", ruleType); + + String sql = "SELECT det.TM, det.BEGIN_TIME, det.END_TIME, det.MIN_VAL, det.VLSR, det.VLSR_TM " + + "FROM MS_WARN_RULE_DETAIL_B det " + + "INNER JOIN MS_WARN_RULE_STBPRP_B rel ON rel.RULE_ID = det.RULE_ID AND rel.STCD = #{map.stcd} " + + " AND NVL(rel.IS_DELETED, 0) = 0 " + + "INNER JOIN MS_WARN_RULE_B rule ON rule.ID = det.RULE_ID AND rule.RULE_TYPE = #{map.ruleType} " + + " AND NVL(rule.IS_DELETED, 0) = 0 " + + "INNER JOIN (SELECT TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') AS StartDate, " + + " TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') AS EndDate FROM DUAL) g ON g.EndDate >= det.TM " + + "INNER JOIN (SELECT EXTRACT(YEAR FROM x.StartDate) + LEVEL - 1 AS Year " + + " FROM (SELECT TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') AS StartDate, " + + " TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') AS EndDate FROM DUAL) x " + + " CONNECT BY EXTRACT(YEAR FROM x.StartDate) + LEVEL - 1 <= EXTRACT(YEAR FROM x.EndDate)) y ON " + + " (TO_DATE(TO_CHAR(y.Year) || LPAD(det.BEGIN_TIME, 4, '0'), 'YYYYMMDD') <= g.EndDate AND " + + " TO_DATE(TO_CHAR(y.Year) || LPAD(det.END_TIME, 4, '0'), 'YYYYMMDD') >= g.StartDate) " + + " AND TO_DATE(TO_CHAR(y.Year) || LPAD(det.END_TIME, 4, '0'), 'YYYYMMDD') >= det.TM " + + "WHERE NVL(det.IS_DELETED, 0) = 0 " + + " AND det.BEGIN_TIME IS NOT NULL " + + " AND det.END_TIME IS NOT NULL " + + " AND det.MIN_VAL IS NOT NULL " + + "GROUP BY det.TM, det.BEGIN_TIME, det.END_TIME, det.MIN_VAL, det.VLSR, det.VLSR_TM " + + "ORDER BY det.TM DESC, SUBSTR(det.BEGIN_TIME, 1, 2) ASC, SUBSTR(det.BEGIN_TIME, 3, 2) ASC, " + + " SUBSTR(det.END_TIME, 1, 2) ASC, SUBSTR(det.END_TIME, 3, 2) ASC"; + return microservicDynamicSQLMapper.pageAllList(null, sql, paramMap); + } + + private String buildEngLimitDisplay(String prefix, List> detailList) { + if (CollUtil.isEmpty(detailList)) { + return prefix + "无限值要求"; + } + List parts = new ArrayList<>(); + for (Map row : detailList) { + String beginTime = asString(row.get("BEGIN_TIME")); + String endTime = asString(row.get("END_TIME")); + BigDecimal minVal = toBigDecimal(row.get("MIN_VAL")); + if (StrUtil.length(beginTime) != 4 || StrUtil.length(endTime) != 4 || minVal == null) { + continue; + } + parts.add(String.format("%s月%s日~%s月%s日限值为:%s", + beginTime.substring(0, 2), + beginTime.substring(2, 4), + endTime.substring(0, 2), + endTime.substring(2, 4), + stripTrailingZeros(minVal))); + } + if (parts.isEmpty()) { + return prefix + "无限值要求"; + } + return prefix + String.join(";", parts); + } + + private String buildHourIntervalViewSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + boolean hasDtinFilter = CollUtil.isNotEmpty(findFilterValues(filter, "dtin")); + return "SELECT " + + "eng.STCD AS stcd, " + + "eng.ENNM AS stnm, " + + "eng.ENNM AS ennm, " + + "'ENG' AS sttp, " + + "'ENG' AS sttpCode, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "addv.ADDVNM AS addvcdName, " + + "eng.LGTD AS lgtd, " + + "eng.LTTD AS lttd, " + + "eng.ELEV AS dtmel, " + + "CAST(NULL AS NUMBER(18,6)) AS ttpwr, " + + "CAST(NULL AS NUMBER(18,6)) AS normz, " + + "eng.AVQ AS avq, " + + "eng.DTIN AS dtin, " + + "eng.DTIN_ENV AS dtinEnv, " + + "eng.PRSC AS prsc, " + + "eng.BLDSTT_CODE AS bldsttCcode, " + + "runAgg.QI AS qi, " + + "runAgg.QO AS qo, " + + "runAgg.QEC AS qec, " + + "runAgg.RZ AS rz, " + + buildIntervalRateDisplaySql("met.QEC_RATE") + " AS qecRate, " + + buildIntervalRateDisplaySql("met.MWR_RATE") + " AS mwrRate, " + + buildIntervalRateDisplaySql("met.AVQ_RATE") + " AS avqRate, " + + buildStaticIntervalSql("met.STCD", "met.QEC_RATE", "met.QR", "qecNoRule.STCD", false) + " AS qecInterval, " + + buildStaticIntervalSql("met.STCD", "met.MWR_RATE", "met.MQR", "mwrNoRule.STCD", false) + " AS mwrInterval, " + + buildStaticIntervalSql("met.STCD", "met.AVQ_RATE", "met.AQR", "eng.AVQ", true) + " AS avqInterval, " + + buildHourPointStateSql("met.QEC_RATE") + " AS anchoPointState, " + + buildHourPointStateSql("met.MWR_RATE") + " AS mwrPointState, " + + buildHourPointStateSql("met.AVQ_RATE") + " AS avqPointState, " + + "runAgg.QI_SUM AS qiSum, " + + "runAgg.QO_SUM AS qoSum, " + + "CAST(NULL AS NUMBER(18,6)) AS fillWater, " + + "CAST(NULL AS VARCHAR2(255)) AS titleName, " + + "CAST(NULL AS VARCHAR2(20)) AS eqtp, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(rstSort.SORT, 999999) AS rstcdStepSort, " + + "NVL(siteSort.SORT, 999999) AS siteStepSort " + + "FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = eng.STCD " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " + + "LEFT JOIN (" + buildHourMetricSourceSql(filter, paramMap, indexHolder, 0) + ") met ON met.STCD = eng.STCD " + + "LEFT JOIN (" + buildHourRunSourceSql(filter, paramMap, indexHolder, 0) + ") runAgg ON runAgg.STCD = eng.STCD " + + "LEFT JOIN (" + buildStaticRuleSql("EQMN") + ") qecNoRule ON qecNoRule.STCD = eng.STCD " + + "LEFT JOIN (" + buildStaticRuleSql("EQMNMWR") + ") mwrNoRule ON mwrNoRule.STCD = eng.STCD " + + "WHERE NVL(eng.IS_DELETED, 0) = 0 " + + " AND NVL(eng.BLDSTT_CODE, 0) = 2 " + + (hasDtinFilter ? "" : " AND NVL(eng.DTIN, 0) = 1 ") + + " AND NVL(eng.RUN_STATE, 0) = 4"; + } + + private String buildHourMetricSourceSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + int yearOffset) { + return buildStaticAggregateSql("hour", filter, paramMap, indexHolder, yearOffset); + } + + private String buildHourRunSourceSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + int yearOffset) { + String timeFilter = buildIntervalTmFilterCondition(filter, "run.TM", paramMap, indexHolder, yearOffset); + return "SELECT run.STCD, " + + "AVG(run.QI) AS QI, " + + "AVG(run.QO) AS QO, " + + "AVG(run.QEC) AS QEC, " + + "AVG(run.RZ) AS RZ, " + + "SUM(run.QI) AS QI_SUM, " + + "SUM(run.QO) AS QO_SUM " + + "FROM SD_HYDROPW_R run " + + "WHERE NVL(run.IS_DELETED, 0) = 0 " + + (StrUtil.isNotBlank(timeFilter) ? " AND " + timeFilter : "") + + " GROUP BY run.STCD"; + } + + private String buildHourPointStateSql(String rateColumn) { + return "CASE " + + "WHEN " + rateColumn + " IS NULL AND eng.PRSC = 1 THEN 'eef_1_none' " + + "WHEN " + rateColumn + " >= 95 AND eng.PRSC = 1 THEN 'eef_1_1' " + + "WHEN " + rateColumn + " >= 90 AND " + rateColumn + " < 95 AND eng.PRSC = 1 THEN 'eef_1_2' " + + "WHEN " + rateColumn + " >= 80 AND " + rateColumn + " < 90 AND eng.PRSC = 1 THEN 'eef_1_3' " + + "WHEN " + rateColumn + " < 80 AND eng.PRSC = 1 THEN 'eef_1_4' " + + "WHEN " + rateColumn + " IS NULL AND eng.PRSC IN (2, 3) THEN 'eef_2_none' " + + "WHEN " + rateColumn + " >= 95 AND eng.PRSC IN (2, 3) THEN 'eef_2_1' " + + "WHEN " + rateColumn + " >= 90 AND " + rateColumn + " < 95 AND eng.PRSC IN (2, 3) THEN 'eef_2_2' " + + "WHEN " + rateColumn + " >= 80 AND " + rateColumn + " < 90 AND eng.PRSC IN (2, 3) THEN 'eef_2_3' " + + "WHEN " + rateColumn + " < 80 AND eng.PRSC IN (2, 3) THEN 'eef_2_4' " + + "END"; + } + + private String buildHourDetailSelectSql(List selectFields) { + Map columns = hourFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map hourFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("stnm", "t.stnm AS stnm"); + columns.put("ennm", "t.ennm AS ennm"); + columns.put("sttp", "t.sttp AS sttp"); + columns.put("sttpCode", "t.sttpCode AS sttpCode"); + columns.put("baseId", "t.baseId AS baseId"); + columns.put("baseName", "t.baseName AS baseName"); + columns.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + columns.put("addvcdName", "t.addvcdName AS addvcdName"); + columns.put("lgtd", "t.lgtd AS lgtd"); + columns.put("lttd", "t.lttd AS lttd"); + columns.put("dtmel", "t.dtmel AS dtmel"); + columns.put("ttpwr", "t.ttpwr AS ttpwr"); + columns.put("normz", "t.normz AS normz"); + columns.put("avq", "t.avq AS avq"); + columns.put("dtin", "t.dtin AS dtin"); + columns.put("dtinEnv", "t.dtinEnv AS dtinEnv"); + columns.put("prsc", "t.prsc AS prsc"); + columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + columns.put("qi", "t.qi AS qi"); + columns.put("qo", "t.qo AS qo"); + columns.put("qec", "t.qec AS qec"); + columns.put("rz", "t.rz AS rz"); + columns.put("qecRate", "t.qecRate AS qecRate"); + columns.put("mwrRate", "t.mwrRate AS mwrRate"); + columns.put("avqRate", "t.avqRate AS avqRate"); + columns.put("qecInterval", "t.qecInterval AS qecInterval"); + columns.put("mwrInterval", "t.mwrInterval AS mwrInterval"); + columns.put("avqInterval", "t.avqInterval AS avqInterval"); + columns.put("anchoPointState", "t.anchoPointState AS anchoPointState"); + columns.put("mwrPointState", "t.mwrPointState AS mwrPointState"); + columns.put("avqPointState", "t.avqPointState AS avqPointState"); + columns.put("qiSum", "t.qiSum AS qiSum"); + columns.put("qoSum", "t.qoSum AS qoSum"); + columns.put("fillWater", "t.fillWater AS fillWater"); + columns.put("titleName", "t.titleName AS titleName"); + columns.put("eqtp", "t.eqtp AS eqtp"); + columns.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + columns.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort"); + columns.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + columns.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + return columns; + } + + private String buildHourFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + if ("tm".equalsIgnoreCase(filter.getField())) { + return ""; + } + return buildHourLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildHourFilterCondition(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 buildHourLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapHourColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, false); + } + + private String buildHourDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stcd ASC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapHourColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stcd ASC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildHourGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapHourColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String mapHourColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "stcd" -> "t.stcd"; + case "stnm", "ennm", "titleName" -> "t.ennm"; + case "sttp", "sttpCode" -> "t.sttpCode"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + case "addvcdName" -> "t.addvcdName"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + case "dtmel" -> "t.dtmel"; + case "ttpwr" -> "t.ttpwr"; + case "normz" -> "t.normz"; + case "avq" -> "t.avq"; + case "dtin" -> "t.dtin"; + case "dtinEnv" -> "t.dtinEnv"; + case "prsc" -> "t.prsc"; + case "bldsttCcode", "bldstt" -> "t.bldsttCcode"; + case "qi" -> "t.qi"; + case "qo" -> "t.qo"; + case "qec" -> "t.qec"; + case "rz" -> "t.rz"; + case "qecRate" -> "t.qecRate"; + case "mwrRate" -> "t.mwrRate"; + case "avqRate" -> "t.avqRate"; + case "qecInterval" -> "t.qecInterval"; + case "mwrInterval" -> "t.mwrInterval"; + case "avqInterval" -> "t.avqInterval"; + case "anchoPointState" -> "t.anchoPointState"; + case "mwrPointState" -> "t.mwrPointState"; + case "avqPointState" -> "t.avqPointState"; + case "qiSum" -> "t.qiSum"; + case "qoSum" -> "t.qoSum"; + case "fillWater" -> "(t.qoSum - t.qiSum)"; + case "eqtp" -> "t.eqtp"; + case "baseStepSort" -> "NVL(t.baseStepSort, 999999)"; + case "rvcdStepSort" -> "NVL(t.rvcdStepSort, 999999)"; + case "rstcdStepSort" -> "NVL(t.rstcdStepSort, 999999)"; + case "siteStepSort" -> "NVL(t.siteStepSort, 999999)"; + default -> null; + }; + } + + private DataSourceResult queryDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" ") + .append(buildFromSql()) + .append(" WHERE NVL(eng.IS_DELETED, 0) = 0 ") + .append(" AND NVL(sqr.IS_DELETED, 0) = 0 "); + + Map 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(buildDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDataVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryIntervalDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + String viewSql = buildIntervalViewSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildIntervalDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(viewSql) + .append(") t WHERE 1 = 1 "); + + String filterSql = buildIntervalFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getAggregate()) + && "average".equalsIgnoreCase(dataSourceRequest.getAggregate().get(0).getAggregate())) { + return buildIntervalAggregateResult(dataSourceRequest, sql.toString(), paramMap); + } + + sql.append(buildIntervalDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqIntervalVo.class); + postProcessIntervalList(list); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryIntervalGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + String viewSql = buildIntervalViewSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapIntervalColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapIntervalColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(viewSql) + .append(") t WHERE 1 = 1 "); + + String filterSql = buildIntervalFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapIntervalColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildIntervalGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult buildIntervalAggregateResult(DataSourceRequest dataSourceRequest, + String sourceSql, + Map paramMap) { + List aggregateItems = new ArrayList<>(); + for (DataSourceRequest.AggregateDescriptor item : dataSourceRequest.getAggregate()) { + if (item == null || !"average".equalsIgnoreCase(item.getAggregate())) { + continue; + } + String column = mapIntervalColumn(item.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + aggregateItems.add("AVG(" + column + ") AS " + item.getField()); + } + if (aggregateItems.isEmpty()) { + DataSourceResult emptyResult = new DataSourceResult<>(); + emptyResult.setData(new ArrayList<>()); + emptyResult.setTotal(0L); + emptyResult.setAggregates(new HashMap<>()); + return emptyResult; + } + + String sql = "SELECT " + String.join(", ", aggregateItems) + " FROM (" + sourceSql + ")"; + List> list = microservicDynamicSQLMapper.pageAllList(null, sql, paramMap); + DataSourceResult result = new DataSourceResult<>(); + result.setData((List) (List) list); + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private void postProcessIntervalList(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + for (EngEqIntervalVo item : list) { + if (item == null || item.getQiSum() == null || item.getQoSum() == null) { + continue; + } + item.setFillWater(item.getQoSum().subtract(item.getQiSum())); + } + } + + private String buildIntervalViewSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + boolean hasTmFilter = hasIntervalTmFilter(filter); + String beforeMetricSql = hasTmFilter + ? buildIntervalMetricSourceSql(filter, paramMap, indexHolder, -1) + : "SELECT CAST(NULL AS VARCHAR2(36)) AS STCD, CAST(NULL AS NUMBER(18,6)) AS QEC_RATE FROM DUAL"; + + return "SELECT " + + "eng.STCD AS stcd, " + + "eng.ENNM AS stnm, " + + "eng.ENNM AS ennm, " + + "'ENG' AS sttp, " + + "'ENG' AS sttpCode, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "addv.ADDVNM AS addvcdName, " + + "eng.LGTD AS lgtd, " + + "eng.LTTD AS lttd, " + + "eng.ELEV AS dtmel, " + + "eng.DTIN AS dtin, " + + "eng.DTIN_ENV AS dtinEnv, " + + "eng.PRSC AS prsc, " + + "eng.BLDSTT_CODE AS bldsttCcode, " + + "met.QI AS qi, " + + "met.QO AS qo, " + + "met.QEC_LIMIT AS qecLimit, " + + "met.QEC AS qec, " + + "met.RZ AS rz, " + + "met.DZ AS dz, " + + buildIntervalRateDisplaySql("met.QEC_RATE") + " AS qecRate, " + + buildIntervalRateDisplaySql("beforeMet.QEC_RATE") + " AS beforeQecRate, " + + buildIntervalQecIntervalSql() + " AS qecInterval, " + + buildIntervalAnchorPointStateSql() + " AS anchoPointState, " + + "met.QEC_SFDB_HY AS qecSfdbHy, " + + "met.QEC_SFDB_HN AS qecSfdbHn, " + + "met.QEC_SFDB_COUNT AS qecSfdbCount, " + + "met.QEC_SFDB_HO AS qecSfdbHo, " + + "met.QI_SUM AS qiSum, " + + "met.QO_SUM AS qoSum, " + + "CAST(NULL AS NUMBER(18,6)) AS fillWater, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(rstSort.SORT, 999999) AS rstcdStepSort, " + + "NVL(siteSort.SORT, 999999) AS siteStepSort " + + "FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = eng.STCD " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " + + "LEFT JOIN (" + buildIntervalMetricSourceSql(filter, paramMap, indexHolder, 0) + ") met ON met.STCD = eng.STCD " + + "LEFT JOIN (" + beforeMetricSql + ") beforeMet ON beforeMet.STCD = eng.STCD " + + "LEFT JOIN (" + buildIntervalNoRuleSql() + ") qecNoRule ON qecNoRule.STCD = eng.STCD " + + "WHERE NVL(eng.IS_DELETED, 0) = 0 AND NVL(eng.BLDSTT_CODE, 0) = 2"; + } + + private String buildIntervalMetricSourceSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + int yearOffset) { + String qecTimeFilter = buildIntervalTmFilterCondition(filter, "qec.DT", paramMap, indexHolder, yearOffset); + String runTimeFilter = buildIntervalTmFilterCondition(filter, "run.TM", paramMap, indexHolder, yearOffset); + return "SELECT qec.STCD, " + + "AVG(runAgg.QI) AS QI, " + + "AVG(runAgg.QO) AS QO, " + + "AVG(qec.QEC_LIMIT) AS QEC_LIMIT, " + + "AVG(qec.QEC) AS QEC, " + + "AVG(runAgg.RZ) AS RZ, " + + "AVG(runAgg.DZ) AS DZ, " + + buildIntervalQecRateSql("qec") + " AS QEC_RATE, " + + buildIntervalQrSql("qec") + " AS QR, " + + "SUM(CASE WHEN qec.SFDB = 1 THEN 1 ELSE 0 END) AS QEC_SFDB_HY, " + + "SUM(CASE WHEN qec.SFDB = 0 THEN 1 ELSE 0 END) AS QEC_SFDB_HN, " + + "SUM(CASE WHEN qec.SFDB IN (0, 1) THEN 1 ELSE 0 END) AS QEC_SFDB_COUNT, " + + "SUM(CASE WHEN qec.SFDB NOT IN (0, 1) OR qec.SFDB IS NULL THEN 1 ELSE 0 END) AS QEC_SFDB_HO, " + + "SUM(NVL(runAgg.QI_SUM_DAY, 0)) AS QI_SUM, " + + "SUM(NVL(runAgg.QO_SUM_DAY, 0)) AS QO_SUM " + + "FROM SD_QECDAY_S qec " + + "LEFT JOIN (SELECT run.STCD, TRUNC(run.TM) AS DT, AVG(run.QI) AS QI, AVG(run.QO) AS QO, AVG(run.RZ) AS RZ, AVG(run.DZ) AS DZ, " + + "SUM(run.QI) AS QI_SUM_DAY, SUM(run.QO) AS QO_SUM_DAY " + + "FROM SD_HYDROPW_R run WHERE NVL(run.IS_DELETED, 0) = 0 " + + (StrUtil.isNotBlank(runTimeFilter) ? " AND " + runTimeFilter : "") + + " GROUP BY run.STCD, TRUNC(run.TM)) runAgg ON runAgg.STCD = qec.STCD AND runAgg.DT = qec.DT " + + "WHERE NVL(qec.IS_DELETED, 0) = 0 " + + (StrUtil.isNotBlank(qecTimeFilter) ? " AND " + qecTimeFilter : "") + + " GROUP BY qec.STCD"; + } + + private String buildIntervalQecRateSql(String alias) { + return "CASE " + + "WHEN COUNT(*) = 0 THEN NULL " + + "WHEN SUM(CASE WHEN " + alias + ".QEC_LIMIT IS NULL AND " + alias + ".MWR_LIMIT IS NULL AND " + alias + ".AVQ_LIMIT IS NULL THEN 0 ELSE 1 END) = 0 THEN -1 " + + "WHEN SUM(CASE WHEN (" + alias + ".QEC_LIMIT IS NOT NULL OR " + alias + ".MWR_LIMIT IS NOT NULL OR " + alias + ".AVQ_LIMIT IS NOT NULL) AND " + alias + ".QEC IS NULL THEN 0 ELSE 1 END) = 0 THEN -2 " + + "WHEN SUM(CASE " + + "WHEN " + alias + ".SFDB IN (0, 1) THEN 1 " + + "WHEN " + alias + ".SFDB = 2 AND " + alias + ".MWR_SFDB IN (0, 1) THEN 1 " + + "WHEN " + alias + ".MWR_SFDB = 2 AND " + alias + ".AVQ_SFDB IN (0, 1) THEN 1 " + + "ELSE 0 END) = 0 THEN NULL " + + "ELSE ((SUM(CASE " + + "WHEN " + alias + ".SFDB = 1 THEN 1 " + + "WHEN " + alias + ".SFDB = 0 THEN 0 " + + "WHEN " + alias + ".SFDB = 2 AND " + alias + ".MWR_SFDB = 1 THEN 1 " + + "WHEN " + alias + ".SFDB = 2 AND " + alias + ".MWR_SFDB = 0 THEN 0 " + + "WHEN " + alias + ".MWR_SFDB = 2 AND " + alias + ".AVQ_SFDB = 1 THEN 1 " + + "WHEN " + alias + ".MWR_SFDB = 2 AND " + alias + ".AVQ_SFDB = 0 THEN 0 " + + "ELSE 0 END) / NULLIF(SUM(CASE " + + "WHEN " + alias + ".SFDB IN (0, 1) THEN 1 " + + "WHEN " + alias + ".SFDB = 2 AND " + alias + ".MWR_SFDB IN (0, 1) THEN 1 " + + "WHEN " + alias + ".MWR_SFDB = 2 AND " + alias + ".AVQ_SFDB IN (0, 1) THEN 1 " + + "ELSE 0 END), 0)) * 100) END"; + } + + private String buildIntervalQrSql(String alias) { + return "CASE " + + "WHEN COUNT(*) = SUM(CASE WHEN " + alias + ".SFDB = 2 THEN 1 ELSE 0 END) THEN -1 " + + "WHEN COUNT(*) = SUM(CASE WHEN " + alias + ".SFDB = 3 THEN 1 ELSE 0 END) THEN -2 " + + "WHEN SUM(CASE WHEN " + alias + ".SFDB = 2 THEN 1 ELSE 0 END) > 0 " + + " AND COUNT(*) = SUM(CASE WHEN " + alias + ".SFDB = 2 THEN 1 ELSE 0 END) " + + " + SUM(CASE WHEN " + alias + ".SFDB = 3 THEN 1 ELSE 0 END) " + + " + SUM(CASE WHEN " + alias + ".SFDB IS NULL THEN 1 ELSE 0 END) THEN -1 " + + "WHEN SUM(CASE WHEN " + alias + ".SFDB = 2 THEN 1 ELSE 0 END) = 0 " + + " AND COUNT(*) = SUM(CASE WHEN " + alias + ".SFDB = 2 THEN 1 ELSE 0 END) " + + " + SUM(CASE WHEN " + alias + ".SFDB = 3 THEN 1 ELSE 0 END) " + + " + SUM(CASE WHEN " + alias + ".SFDB IS NULL THEN 1 ELSE 0 END) THEN -2 " + + "END"; + } + + private String buildIntervalAnchorPointStateSql() { + return "CASE " + + "WHEN (met.QEC_RATE IS NULL OR met.QEC_RATE IN (-1, -2)) AND eng.PRSC = 1 THEN 'eef_1_none' " + + "WHEN met.QEC_RATE >= 95 AND eng.PRSC = 1 THEN 'eef_1_1' " + + "WHEN met.QEC_RATE >= 90 AND met.QEC_RATE < 95 AND eng.PRSC = 1 THEN 'eef_1_2' " + + "WHEN met.QEC_RATE >= 80 AND met.QEC_RATE < 90 AND eng.PRSC = 1 THEN 'eef_1_3' " + + "WHEN met.QEC_RATE < 80 AND eng.PRSC = 1 THEN 'eef_1_4' " + + "WHEN (met.QEC_RATE IS NULL OR met.QEC_RATE IN (-1, -2)) AND eng.PRSC IN (2, 3) THEN 'eef_2_none' " + + "WHEN met.QEC_RATE >= 95 AND eng.PRSC IN (2, 3) THEN 'eef_2_1' " + + "WHEN met.QEC_RATE >= 90 AND met.QEC_RATE < 95 AND eng.PRSC IN (2, 3) THEN 'eef_2_2' " + + "WHEN met.QEC_RATE >= 80 AND met.QEC_RATE < 90 AND eng.PRSC IN (2, 3) THEN 'eef_2_3' " + + "WHEN met.QEC_RATE < 80 AND eng.PRSC IN (2, 3) THEN 'eef_2_4' " + + "END"; + } + + private String buildIntervalRateDisplaySql(String column) { + return "CASE WHEN " + column + " IN (-1, -2) THEN NULL ELSE " + column + " END"; + } + + private String buildIntervalQecIntervalSql() { + return "CASE " + + "WHEN qecNoRule.STCD IS NOT NULL THEN '" + QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode() + "' " + + "WHEN met.QEC_RATE = -1 THEN '" + QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode() + "' " + + "WHEN met.QEC_RATE IS NULL OR met.QEC_RATE = -2 THEN '" + QecIntervalEnum.QEC_STLL_5_EMPTY.getCode() + "' " + + "WHEN met.QEC_RATE >= 95 THEN '" + QecIntervalEnum.QEC_STLL_1_DY95.getCode() + "' " + + "WHEN met.QEC_RATE >= 90 AND met.QEC_RATE < 95 THEN '" + QecIntervalEnum.QEC_STLL_2_90AND95.getCode() + "' " + + "WHEN met.QEC_RATE >= 80 AND met.QEC_RATE < 90 THEN '" + QecIntervalEnum.QEC_STLL_3_80AND90.getCode() + "' " + + "WHEN met.QEC_RATE < 80 THEN '" + QecIntervalEnum.QEC_STLL_4_XY80.getCode() + "' " + + "END"; + } + + private String buildIntervalNoRuleSql() { + return "SELECT engRule.STCD " + + "FROM SD_ENGINFO_B_H engRule " + + "WHERE NVL(engRule.IS_DELETED, 0) = 0 " + + " AND engRule.AVQ IS NULL " + + " AND NOT EXISTS ( " + + " SELECT 1 FROM MS_WARN_RULE_B rule " + + " INNER JOIN MS_WARN_RULE_DETAIL_B detail ON detail.RULE_ID = rule.ID AND NVL(detail.IS_DELETED, 0) = 0 " + + " WHERE NVL(rule.IS_DELETED, 0) = 0 " + + " AND rule.RULE_TYPE IN ('EQMN', 'EQMNMWR') " + + " AND rule.STCD = engRule.STCD " + + " )"; + } + + private String buildIntervalDetailSelectSql(List selectFields) { + Map columns = intervalFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map intervalFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("stnm", "t.stnm AS stnm"); + columns.put("ennm", "t.ennm AS ennm"); + columns.put("sttp", "t.sttp AS sttp"); + columns.put("sttpCode", "t.sttpCode AS sttpCode"); + columns.put("baseId", "t.baseId AS baseId"); + columns.put("baseName", "t.baseName AS baseName"); + columns.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + columns.put("addvcdName", "t.addvcdName AS addvcdName"); + columns.put("lgtd", "t.lgtd AS lgtd"); + columns.put("lttd", "t.lttd AS lttd"); + columns.put("dtmel", "t.dtmel AS dtmel"); + columns.put("dtin", "t.dtin AS dtin"); + columns.put("dtinEnv", "t.dtinEnv AS dtinEnv"); + columns.put("prsc", "t.prsc AS prsc"); + columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + columns.put("qi", "t.qi AS qi"); + columns.put("qo", "t.qo AS qo"); + columns.put("qecLimit", "t.qecLimit AS qecLimit"); + columns.put("qec", "t.qec AS qec"); + columns.put("rz", "t.rz AS rz"); + columns.put("dz", "t.dz AS dz"); + columns.put("qecRate", "t.qecRate AS qecRate"); + columns.put("beforeQecRate", "t.beforeQecRate AS beforeQecRate"); + columns.put("qecInterval", "t.qecInterval AS qecInterval"); + columns.put("anchoPointState", "t.anchoPointState AS anchoPointState"); + columns.put("qecSfdbHy", "t.qecSfdbHy AS qecSfdbHy"); + columns.put("qecSfdbHn", "t.qecSfdbHn AS qecSfdbHn"); + columns.put("qecSfdbCount", "t.qecSfdbCount AS qecSfdbCount"); + columns.put("qecSfdbHo", "t.qecSfdbHo AS qecSfdbHo"); + columns.put("qiSum", "t.qiSum AS qiSum"); + columns.put("qoSum", "t.qoSum AS qoSum"); + columns.put("fillWater", "t.fillWater AS fillWater"); + columns.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + columns.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort"); + columns.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + columns.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + return columns; + } + + private String buildIntervalFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + if ("tm".equalsIgnoreCase(filter.getField())) { + return ""; + } + return buildIntervalLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildIntervalFilterCondition(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 buildIntervalLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapIntervalColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, false); + } + + private String buildIntervalDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stcd ASC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapIntervalColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stcd ASC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildIntervalGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapIntervalColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private DataSourceResult queryVmsstbprptDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildVmsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildVmsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildVmsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqVmsstbprptVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryVmsstbprptGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapVmsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapVmsstbprptColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildVmsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapVmsstbprptColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildVmsstbprptGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryWbsbDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildWbsbDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildWbsbViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWbsbFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildWbsbDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WbsbVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildVmsstbprptViewSql() { + return "SELECT " + + "'ENG' AS sttpCode, " + + "'电站' AS sttpName, " + + "eng.STCD AS stcd, " + + "eng.ENNM AS stnm, " + + "eng.ENNM AS ennm, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "eng.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "eng.PRSC AS prsc, " + + "eng.BLDSTT AS bldstt, " + + "eng.BLDSTT_CODE AS bldsttCcode, " + + "eng.DTIN_ENV AS dtinEnv, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + + "NVL(eng.ORDER_INDEX, 999999) AS siteStepSort " + + "FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "WHERE NVL(eng.IS_DELETED, 0) = 0"; + } + + private String buildVmsstbprptDetailSelectSql(List selectFields) { + Map columns = vmsstbprptFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map vmsstbprptFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("sttpCode", "t.sttpCode AS sttpCode"); + columns.put("sttpName", "t.sttpName AS sttpName"); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("stnm", "t.stnm AS stnm"); + columns.put("ennm", "t.ennm AS ennm"); + columns.put("baseId", "t.baseId AS baseId"); + columns.put("baseName", "t.baseName AS baseName"); + columns.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + columns.put("rvcd", "t.rvcd AS rvcd"); + columns.put("rvcdName", "t.rvcdName AS rvcdName"); + columns.put("prsc", "t.prsc AS prsc"); + columns.put("bldstt", "t.bldstt AS bldstt"); + columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + columns.put("dtinEnv", "t.dtinEnv AS dtinEnv"); + columns.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + columns.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort"); + columns.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + columns.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + return columns; + } + + private String buildMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + String column = mapMsstbprptColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, isEqDateField(filter.getField())); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildMsstbprptFilterCondition(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 buildMsstbprptDetailOrderBySql(List sortList) { + List orders = new ArrayList<>(); + if (CollUtil.isNotEmpty(sortList)) { + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapMsstbprptColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + orders.add(column + ("desc".equalsIgnoreCase(sort.getDir()) ? " DESC" : " ASC")); + } + } + if (orders.isEmpty()) { + orders.add("NVL(t.orderIndex, 999999) ASC"); + orders.add("t.stnm ASC"); + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildMsstbprptGroupOrderBySql(List groups) { + List orders = new ArrayList<>(); + if (CollUtil.isNotEmpty(groups)) { + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + orders.add(column + ("desc".equalsIgnoreCase(descriptor.getDir()) ? " DESC" : " ASC")); + } + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildVmsstbprptLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildVmsstbprptFilterCondition(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 buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapVmsstbprptColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, false); + } + + private String buildVmsstbprptDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY NVL(t.baseStepSort, 999999) ASC, NVL(t.rvcdStepSort, 999999) ASC, " + + "NVL(t.rstcdStepSort, 999999) ASC, NVL(t.siteStepSort, 999999) ASC, t.stcd ASC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapVmsstbprptColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY NVL(t.baseStepSort, 999999) ASC, NVL(t.rvcdStepSort, 999999) ASC, " + + "NVL(t.rstcdStepSort, 999999) ASC, NVL(t.siteStepSort, 999999) ASC, t.stcd ASC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildVmsstbprptGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapVmsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private DataSourceResult queryWbsbGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapWbsbColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapWbsbColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.WBSCODE AS WBSCODE"); + selectItems.add("COUNT(*) AS COUNT_WBSCODE"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildWbsbViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWbsbFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapWbsbColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildWbsbGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private List queryStaticIntervals(DataSourceRequest dataSourceRequest, String type) { + StringBuilder sql = new StringBuilder(); + Map paramMap = new HashMap<>(); + int[] indexHolder = new int[]{0}; + boolean hasDtinFilter = CollUtil.isNotEmpty(findFilterValues(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "dtin")); + sql.append("SELECT ") + .append("eng.STCD AS stcd, ") + .append(buildStaticIntervalSql("agg.STCD", "agg.QEC_RATE", "agg.QR", "qecNoRule.STCD", false)) + .append(" AS qecInterval, ") + .append(buildStaticIntervalSql("agg.STCD", "agg.MWR_RATE", "agg.MQR", "mwrNoRule.STCD", false)) + .append(" AS mwrInterval, ") + .append(buildStaticIntervalSql("agg.STCD", "agg.AVQ_RATE", "agg.AQR", "eng.AVQ", true)) + .append(" AS avqInterval ") + .append("FROM SD_ENGINFO_B_H eng ") + .append("LEFT JOIN (") + .append(buildStaticAggregateSql(type, dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder)) + .append(") agg ON agg.STCD = eng.STCD ") + .append("LEFT JOIN (") + .append(buildStaticRuleSql("EQMN")) + .append(") qecNoRule ON qecNoRule.STCD = eng.STCD ") + .append("LEFT JOIN (") + .append(buildStaticRuleSql("EQMNMWR")) + .append(") mwrNoRule ON mwrNoRule.STCD = eng.STCD ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 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(eng.IS_DELETED, 0) = 0 ") + .append(" AND NVL(eng.BLDSTT_CODE, 0) = 2 "); + if (!hasDtinFilter) { + sql.append(" AND NVL(eng.DTIN, 0) = 1 "); + } + sql.append(" AND NVL(eng.RUN_STATE, 0) = 4 "); + + String stationFilter = buildStaticStationFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, indexHolder); + if (StrUtil.isNotBlank(stationFilter)) { + sql.append(" AND ").append(stationFilter).append(" "); + } + return microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, EngEqStaticIntervalVo.class); + } + + private DataSourceResult queryGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + + sql.append("SELECT "); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapEqColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapEqColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("eng.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + sql.append(String.join(", ", selectItems)).append(" "); + sql.append(buildFromSql()) + .append(" WHERE NVL(eng.IS_DELETED, 0) = 0 ") + .append(" AND NVL(sqr.IS_DELETED, 0) = 0 "); + + Map 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(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapEqColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult(); + if (dataSourceRequest.getGroupResultFlat() != null && dataSourceRequest.getGroupResultFlat()) { + result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData(new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildFromSql() { + return " FROM SD_ENGINFO_B_H eng " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") rstSort ON rstSort.RVCD = eng.HBRVCD " + + " AND rstSort.STCD = eng.STCD "+ + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " + + "INNER JOIN SD_QEC_R sqr ON sqr.STCD = eng.STCD " + + "LEFT JOIN SD_HYDROPW_R shr ON shr.STCD = sqr.STCD AND shr.TM = sqr.TM AND NVL(shr.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_QEC_R bsqr ON bsqr.STCD = sqr.STCD AND ADD_MONTHS(bsqr.TM, 12) = sqr.TM AND NVL(bsqr.IS_DELETED, 0) = 0 "; + } + + private String buildDetailSelectSql(List selectFields) { + Map columns = detailFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map detailFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("id", "sqr.ID AS id"); + columns.put("stcd", "eng.STCD AS stcd"); + columns.put("stnm", "eng.ENNM AS stnm"); + columns.put("ennm", "eng.ENNM AS ennm"); + columns.put("tm", "sqr.TM AS tm"); + columns.put("qi", "shr.QI AS qi"); + columns.put("qo", "shr.QO AS qo"); + columns.put("qecLimit", "sqr.QEC_LIMIT AS qecLimit"); + columns.put("qec", "sqr.QEC AS qec"); + columns.put("mwrLimit", "sqr.MWR_LIMIT AS mwrLimit"); + columns.put("avqLimit", "eng.AVQ AS avqLimit"); + columns.put("qecC", "sqr.QEC_C AS qecC"); + columns.put("mwrC", "sqr.MWR_C AS mwrC"); + columns.put("avqC", "sqr.AVQ_C AS avqC"); + columns.put("sfdb", "sqr.SFDB AS sfdb"); + columns.put("sfdbName", "CASE NVL(sqr.SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS sfdbName"); + columns.put("mwrSfdb", "sqr.MWR_SFDB AS mwrSfdb"); + columns.put("mwrSfdbName", "CASE NVL(sqr.MWR_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS mwrSfdbName"); + columns.put("avqSfdb", "sqr.AVQ_SFDB AS avqSfdb"); + columns.put("avqSfdbName", "CASE NVL(sqr.AVQ_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS avqSfdbName"); + columns.put("rz", "shr.RZ AS rz"); + columns.put("dz", "shr.DZ AS dz"); + columns.put("baseName", "hb.BASENAME AS baseName"); + columns.put("rvcdName", "rv.RVNM AS rvcdName"); + columns.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName"); + columns.put("addvcdName", "addv.ADDVNM AS addvcdName"); + columns.put("qecAi", "sqr.WATERFLOW AS qecAi"); + columns.put("baseId", "eng.BASE_ID AS baseId"); + columns.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); + columns.put("hycd", "eng.HYCD AS hycd"); + columns.put("rvcd", "eng.RVCD AS rvcd"); + columns.put("bldsttCcode", "eng.BLDSTT_CODE AS bldsttCcode"); + columns.put("qecRuleDid", "sqr.QEC_RULE_DID AS qecRuleDid"); + columns.put("qecMwrruleDid", "sqr.QEC_MWRRULE_DID AS qecMwrruleDid"); + columns.put("beforeQec", "bsqr.QEC AS beforeQec"); + columns.put("baseStepSort", "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort"); + columns.put("rvcdStepSort", "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort"); + columns.put("rstcdStepSort", "NVL(rstSort.SORT, 999999) AS rstcdStepSort"); + columns.put("siteStepSort", "NVL(siteSort.SORT, 999999) AS siteStepSort"); + return columns; + } + + private String buildDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, tm DESC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapOrderColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, tm DESC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapEqColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String buildAggregateSql(String aggregate, String column, String field) { + String normalized = aggregate == null ? "" : aggregate.toLowerCase(); + return switch (normalized) { + case "sum", "min", "max", "avg", "count" -> normalized.toUpperCase() + "(" + column + ") AS " + normalized + "_" + field; + default -> ""; + }; + } + + private String buildStaticAggregateSql(String type, + DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + return buildStaticAggregateSql(type, filter, paramMap, indexHolder, 0); + } + + private String buildStaticAggregateSql(String type, + DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + int yearOffset) { + String tableName = "day".equalsIgnoreCase(type) ? "SD_QECDAY_S" : "SD_QEC_R"; + String timeColumn = "day".equalsIgnoreCase(type) ? "data.DT" : "data.TM"; + String timeFilter = buildIntervalTmFilterCondition(filter, timeColumn, paramMap, indexHolder, yearOffset); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT data.STCD, ") + .append("(CASE WHEN SUM(CASE WHEN data.SFDB IN (0, 1) THEN 1 ELSE 0 END) = 0 THEN NULL ") + .append("ELSE (SUM(CASE WHEN data.SFDB = 1 THEN 1 ELSE 0 END) / SUM(CASE WHEN data.SFDB IN (0, 1) THEN 1 ELSE 0 END)) * 100 END) AS QEC_RATE, ") + .append("(CASE WHEN SUM(CASE WHEN data.MWR_SFDB IN (0, 1) THEN 1 ELSE 0 END) = 0 THEN NULL ") + .append("ELSE (SUM(CASE WHEN data.MWR_SFDB = 1 THEN 1 ELSE 0 END) / SUM(CASE WHEN data.MWR_SFDB IN (0, 1) THEN 1 ELSE 0 END)) * 100 END) AS MWR_RATE, ") + .append("(CASE WHEN SUM(CASE WHEN data.AVQ_SFDB IN (0, 1) THEN 1 ELSE 0 END) = 0 THEN NULL ") + .append("ELSE (SUM(CASE WHEN data.AVQ_SFDB = 1 THEN 1 ELSE 0 END) / SUM(CASE WHEN data.AVQ_SFDB IN (0, 1) THEN 1 ELSE 0 END)) * 100 END) AS AVQ_RATE, ") + .append("CASE ") + .append("WHEN COUNT(1) = SUM(CASE WHEN data.SFDB = 2 THEN 1 ELSE 0 END) THEN -1 ") + .append("WHEN COUNT(1) = SUM(CASE WHEN data.SFDB = 3 THEN 1 ELSE 0 END) THEN -2 ") + .append("WHEN SUM(CASE WHEN data.SFDB = 2 THEN 1 ELSE 0 END) > 0 ") + .append(" AND COUNT(1) = SUM(CASE WHEN data.SFDB = 2 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.SFDB = 3 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.SFDB IS NULL THEN 1 ELSE 0 END) THEN -1 ") + .append("WHEN SUM(CASE WHEN data.SFDB = 2 THEN 1 ELSE 0 END) = 0 ") + .append(" AND COUNT(1) = SUM(CASE WHEN data.SFDB = 2 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.SFDB = 3 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.SFDB IS NULL THEN 1 ELSE 0 END) THEN -2 ") + .append("END AS QR, ") + .append("CASE ") + .append("WHEN COUNT(1) = SUM(CASE WHEN data.MWR_SFDB = 2 THEN 1 ELSE 0 END) THEN -1 ") + .append("WHEN COUNT(1) = SUM(CASE WHEN data.MWR_SFDB = 3 THEN 1 ELSE 0 END) THEN -2 ") + .append("WHEN SUM(CASE WHEN data.MWR_SFDB = 2 THEN 1 ELSE 0 END) > 0 ") + .append(" AND COUNT(1) = SUM(CASE WHEN data.MWR_SFDB = 2 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.MWR_SFDB = 3 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.MWR_SFDB IS NULL THEN 1 ELSE 0 END) THEN -1 ") + .append("WHEN SUM(CASE WHEN data.MWR_SFDB = 2 THEN 1 ELSE 0 END) = 0 ") + .append(" AND COUNT(1) = SUM(CASE WHEN data.MWR_SFDB = 2 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.MWR_SFDB = 3 THEN 1 ELSE 0 END) + SUM(CASE WHEN data.MWR_SFDB IS NULL THEN 1 ELSE 0 END) THEN -2 ") + .append("END AS MQR, ") + .append("CASE ") + .append("WHEN COUNT(1) = SUM(CASE WHEN data.AVQ_SFDB = 2 THEN 1 ELSE 0 END) THEN -1 ") + .append("WHEN COUNT(1) = SUM(CASE WHEN data.AVQ_SFDB = 3 THEN 1 ELSE 0 END) THEN -2 ") + .append("END AS AQR ") + .append("FROM ").append(tableName).append(" data WHERE NVL(data.IS_DELETED, 0) = 0 "); + if (StrUtil.isNotBlank(timeFilter)) { + sql.append(" AND ").append(timeFilter).append(" "); + } + sql.append("GROUP BY data.STCD"); + return sql.toString(); + } + + private String buildStaticRuleSql(String ruleType) { + return "SELECT DISTINCT engRule.STCD " + + "FROM SD_ENGINFO_B_H engRule " + + "WHERE NVL(engRule.IS_DELETED, 0) = 0 " + + " AND NOT EXISTS ( " + + " SELECT 1 FROM MS_WARN_RULE_STBPRP_B ruleStbprp " + + " INNER JOIN MS_WARN_RULE_DETAIL_B detail ON detail.RULE_ID = ruleStbprp.RULE_ID AND NVL(detail.IS_DELETED, 0) = 0 " + + " INNER JOIN MS_WARN_RULE_B rule ON rule.ID = detail.RULE_ID AND NVL(rule.IS_DELETED, 0) = 0 " + + " WHERE NVL(ruleStbprp.IS_DELETED, 0) = 0 " + + " AND rule.RULE_TYPE = '" + ruleType + "' " + + " AND ruleStbprp.STCD = engRule.STCD " + + " )"; + } + + private String buildStaticIntervalSql(String stcdColumn, + String rateColumn, + String qrColumn, + String ruleColumn, + boolean avqMode) { + if (avqMode) { + return "CASE " + + "WHEN " + ruleColumn + " IS NOT NULL AND " + rateColumn + " IS NULL THEN '" + QecIntervalEnum.QEC_STLL_5_EMPTY.getCode() + "' " + + "WHEN " + ruleColumn + " IS NULL THEN '" + QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode() + "' " + + "WHEN " + rateColumn + " >= 95 THEN '" + QecIntervalEnum.QEC_STLL_1_DY95.getCode() + "' " + + "WHEN " + rateColumn + " >= 90 AND 95 > " + rateColumn + " THEN '" + QecIntervalEnum.QEC_STLL_2_90AND95.getCode() + "' " + + "WHEN " + rateColumn + " >= 80 AND 90 > " + rateColumn + " THEN '" + QecIntervalEnum.QEC_STLL_3_80AND90.getCode() + "' " + + "WHEN 80 > " + rateColumn + " THEN '" + QecIntervalEnum.QEC_STLL_4_XY80.getCode() + "' " + + "END"; + } + return "CASE " + + "WHEN " + stcdColumn + " IS NULL AND " + ruleColumn + " IS NULL THEN '" + QecIntervalEnum.QEC_STLL_5_EMPTY.getCode() + "' " + + "WHEN " + stcdColumn + " IS NULL AND " + ruleColumn + " IS NOT NULL THEN '" + QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode() + "' " + + "WHEN " + stcdColumn + " IS NOT NULL AND " + qrColumn + " = -2 THEN '" + QecIntervalEnum.QEC_STLL_6_NOEQMN.getCode() + "' " + + "WHEN " + stcdColumn + " IS NOT NULL AND " + qrColumn + " = -1 THEN '" + QecIntervalEnum.QEC_STLL_5_EMPTY.getCode() + "' " + + "WHEN " + rateColumn + " >= 95 THEN '" + QecIntervalEnum.QEC_STLL_1_DY95.getCode() + "' " + + "WHEN " + rateColumn + " >= 90 AND 95 > " + rateColumn + " THEN '" + QecIntervalEnum.QEC_STLL_2_90AND95.getCode() + "' " + + "WHEN " + rateColumn + " >= 80 AND 90 > " + rateColumn + " THEN '" + QecIntervalEnum.QEC_STLL_3_80AND90.getCode() + "' " + + "WHEN 80 > " + rateColumn + " THEN '" + QecIntervalEnum.QEC_STLL_4_XY80.getCode() + "' " + + "END"; + } + + private String buildWbsbViewSql() { + return "SELECT " + + "t.BASEID AS id, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_TIME AS modifyTime, " + + "CAST(NULL AS VARCHAR2(36)) AS displayRecordUser, " + + "CAST(NULL AS VARCHAR2(36)) AS isolateType, " + + "'PSB' AS wbsType, " + + "t.BASEID AS wbsCode, " + + "t.BASENAME AS wbsName, " + + "t.SHORTNAME AS wbsSname, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsNameEn, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsSnameEn, " + + "t.ENABLED AS enable, " + + "t.RMK AS description, " + + "CASE WHEN t.PBASEID = '0' THEN NULL ELSE t.PBASEID END AS parentId, " + + "CASE WHEN t.PBASEID = '0' THEN NULL ELSE t.PBASEID END AS parentCode, " + + "t.GRD AS treeLevel, " + + "CASE WHEN EXISTS (SELECT 1 FROM SD_HYDROBASE c WHERE c.PBASEID = t.BASEID AND NVL(c.IS_DELETED, 0) = 0) THEN 1 ELSE 0 END AS hasChildren, " + + "CAST(NULL AS VARCHAR2(36)) AS objId, " + + "CAST(NULL AS VARCHAR2(20)) AS topWbsType, " + + "t.PATH AS fullPath, " + + "1 AS internal, " + + "CAST(NULL AS NUMBER(10,6)) AS lgtd, " + + "CAST(NULL AS NUMBER(10,6)) AS lttd, " + + "CAST(NULL AS NUMBER(18,6)) AS area, " + + "CAST(NULL AS NUMBER(18,6)) AS perimeter, " + + "CAST(NULL AS VARCHAR2(4000)) AS synopsis, " + + "t.DES AS introduce, " + + "CAST(NULL AS VARCHAR2(255)) AS logo, " + + "CAST(NULL AS VARCHAR2(255)) AS inffile, " + + "t.ORDER_INDEX AS orderIndex, " + + "CAST(NULL AS VARCHAR2(255)) AS filterContent, " + + "CAST(NULL AS VARCHAR2(36)) AS departmentId, " + + "CAST(NULL AS VARCHAR2(36)) AS systemId, " + + "CAST(NULL AS VARCHAR2(36)) AS platformId, " + + "CAST(NULL AS VARCHAR2(50)) AS reachWwqtg, " + + "CAST(NULL AS NUMBER(10,6)) AS maxElev, " + + "CAST(NULL AS NUMBER(10,6)) AS minElev, " + + "CAST(NULL AS VARCHAR2(50)) AS datTp, " + + "CAST(NULL AS VARCHAR2(50)) AS rvAg, " + + "CAST(NULL AS NUMBER(1,0)) AS ifInnRv, " + + "CAST(NULL AS VARCHAR2(2000)) AS showControl, " + + "CAST(NULL AS VARCHAR2(36)) AS stcd, " + + "CAST(NULL AS VARCHAR2(255)) AS displayDepartment " + + "FROM SD_HYDROBASE t WHERE NVL(t.IS_DELETED, 0) = 0 " + + "UNION ALL " + + "SELECT " + + "t.HBRVCD || '_' || t.BASEID AS id, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_TIME AS modifyTime, " + + "CAST(NULL AS VARCHAR2(36)) AS displayRecordUser, " + + "CAST(NULL AS VARCHAR2(36)) AS isolateType, " + + "'PSB_RVCD' AS wbsType, " + + "t.HBRVCD AS wbsCode, " + + "t.HBRVNM AS wbsName, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsSname, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsNameEn, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsSnameEn, " + + "t.ENABLED AS enable, " + + "t.REMARK AS description, " + + "CASE WHEN t.PHBRVCD IS NULL OR t.PHBRVCD = '0' THEN NULL ELSE t.PHBRVCD || '_' || t.BASEID END AS parentId, " + + "CASE WHEN t.PHBRVCD IS NULL OR t.PHBRVCD = '0' THEN NULL ELSE t.PHBRVCD END AS parentCode, " + + "t.GRD AS treeLevel, " + + "CASE WHEN EXISTS (SELECT 1 FROM SD_HBRV_DIC c WHERE c.PHBRVCD = t.HBRVCD AND c.BASEID = t.BASEID AND NVL(c.IS_DELETED, 0) = 0) THEN 1 ELSE 0 END AS hasChildren, " + + "t.BASEID AS objId, " + + "'PSB' AS topWbsType, " + + "t.PATH AS fullPath, " + + "1 AS internal, " + + "CAST(NULL AS NUMBER(10,6)) AS lgtd, " + + "CAST(NULL AS NUMBER(10,6)) AS lttd, " + + "CAST(NULL AS NUMBER(18,6)) AS area, " + + "CAST(NULL AS NUMBER(18,6)) AS perimeter, " + + "CAST(NULL AS VARCHAR2(4000)) AS synopsis, " + + "CAST(NULL AS VARCHAR2(4000)) AS introduce, " + + "CAST(NULL AS VARCHAR2(255)) AS logo, " + + "CAST(NULL AS VARCHAR2(255)) AS inffile, " + + "t.ORDER_INDEX AS orderIndex, " + + "CAST(NULL AS VARCHAR2(255)) AS filterContent, " + + "CAST(NULL AS VARCHAR2(36)) AS departmentId, " + + "CAST(NULL AS VARCHAR2(36)) AS systemId, " + + "CAST(NULL AS VARCHAR2(36)) AS platformId, " + + "CAST(NULL AS VARCHAR2(50)) AS reachWwqtg, " + + "CAST(NULL AS NUMBER(10,6)) AS maxElev, " + + "CAST(NULL AS NUMBER(10,6)) AS minElev, " + + "CAST(NULL AS VARCHAR2(50)) AS datTp, " + + "CAST(NULL AS VARCHAR2(50)) AS rvAg, " + + "CAST(NULL AS NUMBER(1,0)) AS ifInnRv, " + + "CAST(NULL AS VARCHAR2(2000)) AS showControl, " + + "CAST(NULL AS VARCHAR2(36)) AS stcd, " + + "CAST(NULL AS VARCHAR2(255)) AS displayDepartment " + + "FROM SD_HBRV_DIC t WHERE NVL(t.IS_DELETED, 0) = 0 AND t.ORDER_INDEX IS NOT NULL"; + } + + private String buildQecRateMetricSourceSql() { + // 方案一:当前没有新框架业务结果表时,直接使用日统计表 SD_QECDAY_S 参与达标率计算。 + // 方案二:后续如果补齐新框架业务结果表,可仅替换此处为“SELECT * FROM 新业务结果表 WHERE TYPE='DAY' ...”。 + return "SELECT met.STCD, met.QEC, met.QEC_LIMIT, met.MWR_LIMIT, met.AVQ_LIMIT, " + + "met.SFDB, met.MWR_SFDB, met.AVQ_SFDB " + + "FROM SD_QECDAY_S met " + + "WHERE NVL(met.IS_DELETED, 0) = 0 " + + " AND met.DT BETWEEN TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " + + " AND TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS')"; + } + + private String buildQecRateSql() { + return "CASE " + + "WHEN COUNT(*) = 0 THEN NULL " + + "WHEN SUM(CASE WHEN met.QEC_LIMIT IS NULL AND met.MWR_LIMIT IS NULL AND met.AVQ_LIMIT IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL " + + "WHEN SUM(CASE WHEN (met.QEC_LIMIT IS NOT NULL OR met.MWR_LIMIT IS NOT NULL OR met.AVQ_LIMIT IS NOT NULL) AND met.QEC IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL " + + "WHEN SUM(CASE " + + "WHEN met.SFDB = 1 OR met.SFDB = 0 THEN 1 " + + "WHEN met.SFDB = 2 AND (met.MWR_SFDB = 1 OR met.MWR_SFDB = 0) THEN 1 " + + "WHEN met.MWR_SFDB = 2 AND (met.AVQ_SFDB = 1 OR met.AVQ_SFDB = 0) THEN 1 " + + "ELSE 0 END) = 0 THEN NULL " + + "ELSE ((SUM(CASE " + + "WHEN met.SFDB = 1 THEN 1 " + + "WHEN met.SFDB = 0 THEN 0 " + + "WHEN met.SFDB = 2 AND met.MWR_SFDB = 1 THEN 1 " + + "WHEN met.SFDB = 2 AND met.MWR_SFDB = 0 THEN 0 " + + "WHEN met.MWR_SFDB = 2 AND met.AVQ_SFDB = 1 THEN 1 " + + "WHEN met.MWR_SFDB = 2 AND met.AVQ_SFDB = 0 THEN 0 " + + "ELSE 0 END) / NULLIF(SUM(CASE " + + "WHEN met.SFDB = 1 OR met.SFDB = 0 THEN 1 " + + "WHEN met.SFDB = 2 AND (met.MWR_SFDB = 1 OR met.MWR_SFDB = 0) THEN 1 " + + "WHEN met.MWR_SFDB = 2 AND (met.AVQ_SFDB = 1 OR met.AVQ_SFDB = 0) THEN 1 " + + "ELSE 0 END), 0)) * 100) END"; + } + + private String[] resolveQecRateTimeRange(String tm) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + if (StrUtil.isNotBlank(tm)) { + String[] arr = StrUtil.splitToArray(tm, ','); + if (arr != null && arr.length >= 2) { + return new String[]{arr[0].trim(), arr[1].trim()}; + } + } + LocalDateTime end = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(0); + LocalDateTime start = end.minusMonths(3).withHour(0).withMinute(0).withSecond(0).withNano(0); + return new String[]{start.format(formatter), end.format(formatter)}; + } + + private String mapQecRateSelect(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "baseId" -> "eng.BASE_ID AS baseId"; + case "baseName" -> "hb.BASENAME AS baseName"; + case "hbrvcd" -> "eng.HBRVCD AS hbrvcd"; + case "hbrvcdName" -> "hbrv.HBRVNM AS hbrvcdName"; + case "addvcd" -> "eng.ADDVCD AS addvcd"; + case "addvcdName" -> "addv.ADDVNM AS addvcdName"; + case "stcd" -> "eng.STCD AS stcd"; + case "stnm" -> "eng.ENNM AS stnm"; + case "ennm" -> "eng.ENNM AS ennm"; + case "qecPerformance" -> buildQecPerformanceCaseSql() + " AS qecPerformance"; + default -> null; + }; + } + + private String mapQecRateGroup(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "baseId" -> "eng.BASE_ID"; + case "baseName" -> "hb.BASENAME"; + case "hbrvcd" -> "eng.HBRVCD"; + case "hbrvcdName" -> "hbrv.HBRVNM"; + case "addvcd" -> "eng.ADDVCD"; + case "addvcdName" -> "addv.ADDVNM"; + case "stcd" -> "eng.STCD"; + case "stnm", "ennm" -> "eng.ENNM"; + case "qecPerformance" -> buildQecPerformanceCaseSql(); + default -> null; + }; + } + + private String buildQecPerformanceCaseSql() { + return "CASE " + + "WHEN eng.RGCP = '1' THEN '1' " + + "WHEN eng.RGCP = '2' THEN '2' " + + "WHEN eng.RGCP = '5' THEN '5' " + + "WHEN eng.RGCP = '7' THEN '7' " + + "ELSE '9' END"; + } + + private String buildQecRateOrderBy(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor group : groups) { + if (group == null || StrUtil.isBlank(group.getField())) { + continue; + } + String column = mapQecRateGroup(group.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(group.getDir()) || "des".equalsIgnoreCase(group.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private void fillQecRateCountNames(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + for (EngEqRateCountVo item : list) { + item.setQecPerformanceName(getQecPerformanceName(item.getQecPerformance())); + if (item.getQecRate() != null) { + item.setQecRate(item.getQecRate().setScale(2, RoundingMode.HALF_UP)); + } + } + } + + private List completeQecPerformanceGroups(List list, + List groups) { + if (CollUtil.isEmpty(groups) || groups.get(0) == null || !"qecPerformance".equals(groups.get(0).getField())) { + return list; + } + Map exists = new LinkedHashMap<>(); + if (CollUtil.isNotEmpty(list)) { + for (EngEqRateCountVo item : list) { + if (item != null && StrUtil.isNotBlank(item.getQecPerformance())) { + exists.put(item.getQecPerformance(), item); + } + } + } + List result = new ArrayList<>(); + for (String code : Arrays.asList("1", "2", "5", "7", "9")) { + EngEqRateCountVo item = exists.get(code); + if (item == null) { + item = new EngEqRateCountVo(); + item.setQecPerformance(code); + item.setQecPerformanceName(getQecPerformanceName(code)); + } + result.add(item); + } + return result; + } + + private String getQecPerformanceName(String code) { + if (StrUtil.isBlank(code)) { + return null; + } + return switch (code) { + case "1" -> "多年调节"; + case "2" -> "年调节"; + case "5" -> "季调节"; + case "7" -> "周调节"; + case "9" -> "其他"; + default -> null; + }; + } + + private String buildWbsbDetailSelectSql(List selectFields) { + Map columns = wbsbFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map wbsbFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("id", "t.id AS id"); + columns.put("recordUser", "t.recordUser AS recordUser"); + columns.put("recordTime", "t.recordTime AS recordTime"); + columns.put("modifyTime", "t.modifyTime AS modifyTime"); + columns.put("displayRecordUser", "t.displayRecordUser AS displayRecordUser"); + columns.put("isolateType", "t.isolateType AS isolateType"); + columns.put("wbsType", "t.wbsType AS wbsType"); + columns.put("wbsCode", "t.wbsCode AS wbsCode"); + columns.put("wbsName", "t.wbsName AS wbsName"); + columns.put("wbsSname", "t.wbsSname AS wbsSname"); + columns.put("wbsNameEn", "t.wbsNameEn AS wbsNameEn"); + columns.put("wbsSnameEn", "t.wbsSnameEn AS wbsSnameEn"); + columns.put("enable", "t.enable AS enable"); + columns.put("description", "t.description AS description"); + columns.put("parentId", "t.parentId AS parentId"); + columns.put("parentCode", "t.parentCode AS parentCode"); + columns.put("treeLevel", "t.treeLevel AS treeLevel"); + columns.put("hasChildren", "t.hasChildren AS hasChildren"); + columns.put("objId", "t.objId AS objId"); + columns.put("topWbsType", "t.topWbsType AS topWbsType"); + columns.put("fullPath", "t.fullPath AS fullPath"); + columns.put("internal", "t.internal AS internal"); + columns.put("lgtd", "t.lgtd AS lgtd"); + columns.put("lttd", "t.lttd AS lttd"); + columns.put("area", "t.area AS area"); + columns.put("perimeter", "t.perimeter AS perimeter"); + columns.put("synopsis", "t.synopsis AS synopsis"); + columns.put("introduce", "t.introduce AS introduce"); + columns.put("logo", "t.logo AS logo"); + columns.put("inffile", "t.inffile AS inffile"); + columns.put("orderIndex", "t.orderIndex AS orderIndex"); + columns.put("filterContent", "t.filterContent AS filterContent"); + columns.put("departmentId", "t.departmentId AS departmentId"); + columns.put("systemId", "t.systemId AS systemId"); + columns.put("platformId", "t.platformId AS platformId"); + columns.put("reachWwqtg", "t.reachWwqtg AS reachWwqtg"); + columns.put("maxElev", "t.maxElev AS maxElev"); + columns.put("minElev", "t.minElev AS minElev"); + columns.put("datTp", "t.datTp AS datTp"); + columns.put("rvAg", "t.rvAg AS rvAg"); + columns.put("ifInnRv", "t.ifInnRv AS ifInnRv"); + columns.put("showControl", "t.showControl AS showControl"); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("displayDepartment", "t.displayDepartment AS displayDepartment"); + return columns; + } + + private String buildWbsbFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildWbsbLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildWbsbFilterCondition(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 buildWbsbLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapWbsbColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, false); + } + + private String buildWbsbDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY NVL(t.orderIndex, 999999) ASC, t.wbsCode ASC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapWbsbColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY NVL(t.orderIndex, 999999) ASC, t.wbsCode ASC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildWbsbGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapWbsbColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildFilterCondition(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 buildLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String field = filter.getField(); + String column = mapEqColumn(field); + if (StrUtil.isBlank(column)) { + return ""; + } + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + boolean dateField = isEqDateField(field); + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "eqParam" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add(buildEqValueExpr(key, dateField, item)); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if ("vdid".equalsIgnoreCase(field)) { + return ""; + } + if (value == null) { + return ""; + } + String key = "eqParam" + indexHolder[0]++; + String valueExpr = buildEqValueExpr(key, dateField, value); + return switch (operator) { + case "eq" -> { + paramMap.put(key, value); + yield column + " = " + valueExpr; + } + case "neq" -> { + paramMap.put(key, value); + yield column + " <> " + valueExpr; + } + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> { + paramMap.put(key, value); + yield column + " > " + valueExpr; + } + case "gte" -> { + paramMap.put(key, value); + yield column + " >= " + valueExpr; + } + case "lt" -> { + paramMap.put(key, value); + yield column + " < " + valueExpr; + } + case "lte" -> { + paramMap.put(key, value); + yield column + " <= " + valueExpr; + } + default -> ""; + }; + } + + private String buildStaticStationFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildStaticStationLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildStaticStationFilterCondition(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 buildStaticStationLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapStaticStationColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, false); + } + + private String buildStaticTimeFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + String timeColumn) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + if (!"tm".equalsIgnoreCase(filter.getField())) { + return ""; + } + return buildGenericCondition(timeColumn, filter, paramMap, indexHolder, true); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildStaticTimeFilterCondition(child, paramMap, indexHolder, timeColumn); + 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 buildGenericCondition(String column, + DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + boolean dateField) { + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "staticParam" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add(buildEqValueExpr(key, dateField, item)); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String key = "staticParam" + indexHolder[0]++; + paramMap.put(key, value); + String valueExpr = buildEqValueExpr(key, dateField, value); + return switch (operator) { + case "eq" -> column + " = " + valueExpr; + case "neq" -> column + " <> " + valueExpr; + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> column + " > " + valueExpr; + case "gte" -> column + " >= " + valueExpr; + case "lt" -> column + " < " + valueExpr; + case "lte" -> column + " <= " + valueExpr; + default -> ""; + }; + } + + private boolean isEqDateField(String field) { + return "tm".equalsIgnoreCase(field); + } + + private String buildEqValueExpr(String paramKey, boolean dateField, Object value) { + if (!dateField || value == null) { + return "#{map." + paramKey + "}"; + } + String text = String.valueOf(value).trim(); + if (text.length() <= 10) { + return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')"; + } + return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')"; + } + + + + + private List normalizeValues(Object value) { + List values = new ArrayList<>(); + if (value instanceof List list) { + for (Object item : list) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value instanceof Object[] array) { + for (Object item : array) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value != null) { + values.add(value); + } + return values; + } + + private List findFilterValues(DataSourceRequest.FilterDescriptor filter, String field) { + List values = new ArrayList<>(); + collectFilterValues(filter, field, values); + return values; + } + + private String[] resolveAlongTmRange(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) { + String tmValue = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm"); + if (StrUtil.isNotBlank(tmValue) && tmValue.contains(",")) { + String[] arr = tmValue.split(","); + if (arr.length == 2 && StrUtil.isNotBlank(arr[0]) && StrUtil.isNotBlank(arr[1])) { + return new String[]{arr[0].trim(), arr[1].trim()}; + } + } + String[] range = new String[2]; + collectAlongTmRange(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), range); + if (StrUtil.isNotBlank(range[0]) && StrUtil.isNotBlank(range[1])) { + return range; + } + return null; + } + + private String[] resolveEngLimitTimeRange(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) { + String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime"); + String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime"); + if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)) { + return new String[]{startTime, endTime}; + } + String[] range = new String[2]; + collectAlongTmRange(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), range); + if (StrUtil.isNotBlank(range[0]) && StrUtil.isNotBlank(range[1])) { + return range; + } + return null; + } + + private void collectAlongTmRange(DataSourceRequest.FilterDescriptor filter, String[] range) { + if (filter == null || range == null) { + return; + } + if (StrUtil.isNotBlank(filter.getField())) { + if (!"tm".equalsIgnoreCase(filter.getField()) || filter.getValue() == null) { + return; + } + String value = String.valueOf(filter.getValue()); + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + switch (operator) { + case "gt", "gte" -> range[0] = value; + case "lt", "lte" -> range[1] = value; + case "eq" -> { + range[0] = value; + range[1] = value; + } + default -> { + } + } + return; + } + if (CollUtil.isEmpty(filter.getFilters())) { + return; + } + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + collectAlongTmRange(child, range); + } + } + + private void collectFilterValues(DataSourceRequest.FilterDescriptor filter, String field, List values) { + if (filter == null) { + return; + } + if (StrUtil.isNotBlank(filter.getField())) { + if (field.equalsIgnoreCase(filter.getField())) { + for (Object value : normalizeValues(filter.getValue())) { + if (value != null) { + values.add(String.valueOf(value)); + } + } + } + return; + } + if (CollUtil.isEmpty(filter.getFilters())) { + return; + } + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + collectFilterValues(child, field, values); + } + } + + private String asString(Object value) { + return value == null ? null : String.valueOf(value); + } + + private BigDecimal toBigDecimal(Object value) { + if (value == null) { + return null; + } + if (value instanceof BigDecimal bigDecimal) { + return bigDecimal; + } + return new BigDecimal(String.valueOf(value)); + } + + private String stripTrailingZeros(BigDecimal value) { + if (value == null) { + return null; + } + return value.stripTrailingZeros().toPlainString(); + } + + private String mapStaticStationColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "type", "tm" -> null; + case "baseName" -> "hb.BASENAME"; + case "stnm", "ennm" -> "eng.ENNM"; + case "baseId" -> "eng.BASE_ID"; + case "dtin" -> "eng.DTIN"; + case "rvcdName" -> "rv.RVNM"; + case "addvcdName" -> "addv.ADDVNM"; + case "stcd" -> "eng.STCD"; + case "hbrvcd" -> "eng.HBRVCD"; + case "hbrvcdName" -> "hbrv.HBRVNM"; + case "hycd" -> "eng.HYCD"; + case "rvcd" -> "eng.RVCD"; + case "bldsttCcode" -> "eng.BLDSTT_CODE"; + default -> null; + }; + } + + private boolean hasIntervalTmFilter(DataSourceRequest.FilterDescriptor filter) { + if (filter == null) { + return false; + } + if ("tm".equalsIgnoreCase(filter.getField())) { + return true; + } + if (CollUtil.isEmpty(filter.getFilters())) { + return false; + } + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + if (hasIntervalTmFilter(child)) { + return true; + } + } + return false; + } + + private String buildIntervalTmFilterCondition(DataSourceRequest.FilterDescriptor filter, + String column, + Map paramMap, + int[] indexHolder, + int yearOffset) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + if (!"tm".equalsIgnoreCase(filter.getField())) { + return ""; + } + return buildIntervalTmLeafCondition(filter, column, paramMap, indexHolder, yearOffset); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildIntervalTmFilterCondition(child, column, paramMap, indexHolder, yearOffset); + 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 buildIntervalTmLeafCondition(DataSourceRequest.FilterDescriptor filter, + String column, + Map paramMap, + int[] indexHolder, + int yearOffset) { + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + Object shifted = shiftTemporalValue(item, yearOffset); + String key = "intervalTmParam" + indexHolder[0]++; + paramMap.put(key, shifted); + placeholders.add(buildEqValueExpr(key, true, shifted)); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + Object shiftedValue = shiftTemporalValue(value, yearOffset); + String key = "intervalTmParam" + indexHolder[0]++; + paramMap.put(key, shiftedValue); + String valueExpr = buildEqValueExpr(key, true, shiftedValue); + return switch (operator) { + case "eq" -> column + " = " + valueExpr; + case "neq" -> column + " <> " + valueExpr; + case "gt" -> column + " > " + valueExpr; + case "gte" -> column + " >= " + valueExpr; + case "lt" -> column + " < " + valueExpr; + case "lte" -> column + " <= " + valueExpr; + default -> ""; + }; + } + + private Object shiftTemporalValue(Object value, int yearOffset) { + if (value == null || yearOffset == 0) { + return value; + } + String text = String.valueOf(value).trim(); + if (StrUtil.isBlank(text)) { + return value; + } + if (text.length() <= 10) { + LocalDate date = LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + return date.plusYears(yearOffset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + LocalDateTime dateTime = LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return dateTime.plusYears(yearOffset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } + + private String mapIntervalColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "stcd" -> "t.stcd"; + case "stnm", "ennm" -> "t.ennm"; + case "sttp", "sttpCode" -> "t.sttpCode"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + case "addvcdName" -> "t.addvcdName"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + case "dtmel" -> "t.dtmel"; + case "dtin" -> "t.dtin"; + case "dtinEnv" -> "t.dtinEnv"; + case "prsc" -> "t.prsc"; + case "bldsttCcode", "bldstt" -> "t.bldsttCcode"; + case "qi" -> "t.qi"; + case "qo" -> "t.qo"; + case "qecLimit" -> "t.qecLimit"; + case "qec" -> "t.qec"; + case "rz" -> "t.rz"; + case "dz", "ddz" -> "t.dz"; + case "qecRate" -> "t.qecRate"; + case "beforeQecRate" -> "t.beforeQecRate"; + case "qecInterval" -> "t.qecInterval"; + case "anchoPointState" -> "t.anchoPointState"; + case "qecSfdbHy" -> "t.qecSfdbHy"; + case "qecSfdbHn" -> "t.qecSfdbHn"; + case "qecSfdbCount" -> "t.qecSfdbCount"; + case "qecSfdbHo" -> "t.qecSfdbHo"; + case "qiSum" -> "t.qiSum"; + case "qoSum" -> "t.qoSum"; + case "fillWater" -> "(t.qoSum - t.qiSum)"; + case "baseStepSort" -> "NVL(t.baseStepSort, 999999)"; + case "rvcdStepSort" -> "NVL(t.rvcdStepSort, 999999)"; + case "rstcdStepSort" -> "NVL(t.rstcdStepSort, 999999)"; + case "siteStepSort" -> "NVL(t.siteStepSort, 999999)"; + default -> null; + }; + } + + private String mapVmsstbprptColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "sttpCode" -> "t.sttpCode"; + case "sttpName" -> "t.sttpName"; + case "stcd" -> "t.stcd"; + case "stnm" -> "t.stnm"; + case "ennm" -> "t.ennm"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + case "rvcd" -> "t.rvcd"; + case "rvcdName" -> "t.rvcdName"; + case "prsc" -> "t.prsc"; + case "bldstt" -> "t.bldstt"; + case "bldsttCcode" -> "t.bldsttCcode"; + case "dtinEnv" -> "t.dtinEnv"; + case "baseStepSort" -> "NVL(t.baseStepSort, 999999)"; + case "rvcdStepSort" -> "NVL(t.rvcdStepSort, 999999)"; + case "rstcdStepSort" -> "NVL(t.rstcdStepSort, 999999)"; + case "siteStepSort" -> "NVL(t.siteStepSort, 999999)"; + default -> null; + }; + } + + private String mapMsstbprptColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id" -> "t.id"; + case "stcd" -> "t.stcd"; + case "stnm" -> "t.stnm"; + case "ennm" -> "t.ennm"; + case "sttpCode" -> "t.sttpCode"; + case "sttpName" -> "t.sttpName"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + case "elev" -> "t.elev"; + case "dtmel" -> "t.dtmel"; + case "stlc" -> "t.stlc"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + case "rvcd" -> "t.rvcd"; + case "rvcdName" -> "t.rvcdName"; + case "addvcd" -> "t.addvcd"; + case "addvcdName" -> "t.addvcdName"; + case "country" -> "t.country"; + case "countryName" -> "t.countryName"; + case "hycd" -> "t.hycd"; + case "hynm" -> "t.hynm"; + case "topHycd" -> "t.topHycd"; + case "topHynm" -> "t.topHynm"; + case "usfl" -> "t.usfl"; + case "dtin" -> "t.dtin"; + case "dtinName" -> "t.dtinName"; + case "dtinTm" -> "t.dtinTm"; + case "introduce" -> "t.introduce"; + case "logo" -> "t.logo"; + case "inffile" -> "t.inffile"; + case "url" -> "t.url"; + case "bldstt" -> "t.bldstt"; + case "bldsttCcode" -> "t.bldsttCcode"; + case "bldsttCode" -> "t.bldsttCode"; + case "bldsttCcodeName" -> "t.bldsttCcodeName"; + case "orderIndex" -> "NVL(t.orderIndex, 999999)"; + case "prsc" -> "t.prsc"; + case "engtp" -> "t.engtp"; + case "scrsc" -> "t.scrsc"; + case "prgr" -> "t.prgr"; + case "tm" -> "t.tm"; + default -> null; + }; + } + + private String mapWbsbColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id" -> "t.id"; + case "wbsType" -> "t.wbsType"; + case "wbsCode" -> "t.wbsCode"; + case "wbsName" -> "t.wbsName"; + case "wbsSname" -> "t.wbsSname"; + case "enable" -> "t.enable"; + case "description" -> "t.description"; + case "parentId" -> "t.parentId"; + case "parentCode" -> "t.parentCode"; + case "treeLevel" -> "t.treeLevel"; + case "hasChildren" -> "t.hasChildren"; + case "objId", "objid" -> "t.objId"; + case "topWbsType" -> "t.topWbsType"; + case "fullPath" -> "t.fullPath"; + case "internal" -> "t.internal"; + case "introduce" -> "t.introduce"; + case "orderIndex" -> "NVL(t.orderIndex, 999999)"; + case "recordTime" -> "t.recordTime"; + case "modifyTime" -> "t.modifyTime"; + default -> null; + }; + } + + private String mapEqColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "baseName" -> "hb.BASENAME"; + case "stnm", "ennm" -> "eng.ENNM"; + case "baseId" -> "eng.BASE_ID"; + case "rvcdName" -> "rv.RVNM"; + case "addvcdName" -> "addv.ADDVNM"; + case "stcd" -> "eng.STCD"; + case "tm" -> "sqr.TM"; + case "rz" -> "shr.RZ"; + case "qec" -> "sqr.QEC"; + case "sfdb" -> "sqr.SFDB"; + case "qi" -> "shr.QI"; + case "qo" -> "shr.QO"; + case "dz" -> "shr.DZ"; + case "qecLimit" -> "sqr.QEC_LIMIT"; + case "hbrvcd" -> "eng.HBRVCD"; + case "hbrvcdName" -> "hbrv.HBRVNM"; + case "rvcdStepSort" -> "NVL(along.ORDER_INDEX, 999999)"; + case "rstcdStepSort" -> "NVL(rstSort.SORT, 999999)"; + case "siteStepSort" -> "NVL(siteSort.SORT, 999999)"; + case "hycd" -> "eng.HYCD"; + case "rvcd" -> "eng.HBRVCD"; + case "bldsttCcode" -> "eng.BLDSTT_CODE"; + case "baseStepSort" -> "NVL(hb.ORDER_INDEX, 999999)"; + case "mwrLimit" -> "sqr.MWR_LIMIT"; + case "avqLimit" -> "eng.AVQ"; + case "mwrSfdb" -> "sqr.MWR_SFDB"; + case "avqSfdb" -> "sqr.AVQ_SFDB"; + case "qecC" -> "sqr.QEC_C"; + case "mwrC" -> "sqr.MWR_C"; + case "avqC" -> "sqr.AVQ_C"; + case "qecAi" -> "sqr.WATERFLOW"; + default -> null; + }; + } + + private String mapOrderColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "baseStepSort", "rvcdStepSort", "rstcdStepSort", "siteStepSort", + "tm", "stcd", "stnm", "ennm", "qi", "qo", "qec", "sfdb", + "rz", "dz", "qecLimit", "mwrLimit", "avqLimit", "baseName", + "rvcdName", "hbrvcdName", "addvcdName", "qecAi" -> field; + default -> null; + }; + } +} diff --git a/backend/src/main/java/com/yfd/platform/env/fh/controller/FhHabitatController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/env/fh/controller/FhHabitatController.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java index ddaa23a3..8a5ee63d 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/controller/FhHabitatController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java @@ -1,16 +1,18 @@ -package com.yfd.platform.env.fh.controller; +package com.yfd.platform.qgc_env.fh.controller; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.fh.entity.ao.FhDefaultAo; -import com.yfd.platform.env.fh.service.FhHabitatService; +import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; +import com.yfd.platform.qgc_env.fh.service.FhHabitatService; 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.GetMapping; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @@ -58,6 +60,12 @@ public class FhHabitatController { return ResponseResult.successData(fhHabitatService.getMsstbprptList(dataSourceRequest)); } + @GetMapping("/msstbprpt/getStcdInfo") + @Operation(summary = "根据站码查询单条栖息地基础数据") + public ResponseResult getStcdInfo(@RequestParam String stcd) { + return ResponseResult.successData(fhHabitatService.getStcdInfo(stcd)); + } + @PostMapping("/stTbYs/GetStTbYsBVoKendoListCust") @Operation(summary = "水质监测信息查询") public ResponseResult getStTbYsBVoKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/env/fh/entity/ao/FhDefaultAo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/ao/FhDefaultAo.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/fh/entity/ao/FhDefaultAo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/ao/FhDefaultAo.java index ab6309a2..50c238b3 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/entity/ao/FhDefaultAo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/ao/FhDefaultAo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fh.entity.ao; +package com.yfd.platform.qgc_env.fh.entity.ao; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhBaseInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhBaseInfoVo.java new file mode 100644 index 00000000..93105dc0 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhBaseInfoVo.java @@ -0,0 +1,165 @@ +package com.yfd.platform.qgc_env.fh.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "栖息地基础信息") +public class FhBaseInfoVo { + + @Schema(description = "栖息地编码") + private String stcd; + + @Schema(description = "栖息地名称") + private String stnm; + + @Schema(description = "数据时间") + private Date tm; + + @Schema(description = "所属建设阶段") + private Integer blprd; + + @Schema(description = "经度") + private Double lgtd; + + @Schema(description = "纬度") + private Double lttd; + + @Schema(description = "高程") + private Double elev; + + @Schema(description = "站址") + private String stlc; + + @Schema(description = "是否启用") + private Integer usfl; + + @Schema(description = "数据是否接入") + private Integer dtin; + + @Schema(description = "数据接入时间") + private Date dtinTm; + + @Schema(description = "排序") + private Integer orderIndex; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属电站名称") + private String ennm; + + @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; + + @Schema(description = "行政区编码") + private String addvcd; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "河段描述") + private String reachdes; + + @Schema(description = "栖息地范围经纬度列表") + private String lglttd; + + @Schema(description = "简介") + private String introduce; + + @Schema(description = "LOGO") + private String logo; + + @Schema(description = "介绍图片") + private String inffile; + + @Schema(description = "投资") + private BigDecimal inv; + + @Schema(description = "投资是否计入主体工程") + private Integer invinmn; + + @Schema(description = "保护对象") + private String bhdx; + + @Schema(description = "保护范围") + private String bhfw; + + @Schema(description = "保护长度") + private BigDecimal bhcd; + + @Schema(description = "保护面积") + private BigDecimal bhmj; + + @Schema(description = "保护河流") + private String bhhl; + + @Schema(description = "保护河段") + private String bhhd; + + @Schema(description = "保护措施") + private String bhcs; + + @Schema(description = "保护方式") + private String bhfs; + + @Schema(description = "实施时间") + private Date attm; + + @Schema(description = "保护外围长度") + private BigDecimal bhwwcd; + + @Schema(description = "保护核心长度") + private BigDecimal bhhxcd; + + @Schema(description = "数据监测频次") + private Integer dtfrqcy; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "数据来源") + private String vlsr; + + @Schema(description = "数据来源时间") + private Date vlsrTm; + + @Schema(description = "创建人") + private String recordUser; + + @Schema(description = "创建时间") + private Date recordTime; + + @Schema(description = "更新人") + private String modifyUser; + + @Schema(description = "更新时间") + private Date modifyTime; + + @Schema(description = "是否删除") + private Integer isDeleted; + + @Schema(description = "删除人") + private String deleteUser; + + @Schema(description = "删除时间") + private Date deleteTime; +} diff --git a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhDefaultVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhDefaultVo.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhDefaultVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhDefaultVo.java index 1aec0c8c..2ff9be9e 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhDefaultVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhDefaultVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fh.entity.vo; +package com.yfd.platform.qgc_env.fh.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhMsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhMsstbprptVo.java similarity index 67% rename from backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhMsstbprptVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhMsstbprptVo.java index 9ca7df5e..177ce601 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhMsstbprptVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhMsstbprptVo.java @@ -1,9 +1,10 @@ -package com.yfd.platform.env.fh.entity.vo; +package com.yfd.platform.qgc_env.fh.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @Data @@ -63,6 +64,42 @@ public class FhMsstbprptVo implements Serializable { @Schema(description = "监测指标") private String stindx; + @Schema(description = "建设阶段") + private Integer bldstt; + + @Schema(description = "保护对象") + private String qxdbhdx; + + @Schema(description = "保护范围") + private String qxdbhfw; + + @Schema(description = "保护长度") + private BigDecimal qxdbhcd; + + @Schema(description = "保护面积") + private BigDecimal qxdbhmj; + + @Schema(description = "保护河流") + private String bhhl; + + @Schema(description = "保护河段") + private String bhhd; + + @Schema(description = "保护措施") + private String bhcs; + + @Schema(description = "保护方式") + private String qxdbhfs; + + @Schema(description = "实施时间") + private Date ststdt; + + @Schema(description = "数据监测频次") + private Integer dtfrqcy; + + @Schema(description = "投资") + private BigDecimal qxdinv; + @Schema(description = "是否启用") private Integer usfl; diff --git a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhSdriverdayVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhSdriverdayVo.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhSdriverdayVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhSdriverdayVo.java index f81decd4..0abd7809 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhSdriverdayVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhSdriverdayVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fh.entity.vo; +package com.yfd.platform.qgc_env.fh.entity.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhSdrvwtsVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhSdrvwtsVo.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhSdrvwtsVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhSdrvwtsVo.java index baafa011..5654168c 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhSdrvwtsVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhSdrvwtsVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fh.entity.vo; +package com.yfd.platform.qgc_env.fh.entity.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/HabitatVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/HabitatVo.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/fh/entity/vo/HabitatVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/HabitatVo.java index 876b478b..207f3872 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/entity/vo/HabitatVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/HabitatVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fh.entity.vo; +package com.yfd.platform.qgc_env.fh.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -74,7 +74,7 @@ public class HabitatVo { private Date esstdt; @Schema(description = "监测方式") - private Integer mway; + private String mway; @Schema(description = "是否接入") private Integer dtin; diff --git a/backend/src/main/java/com/yfd/platform/env/fh/service/FhHabitatService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java similarity index 68% rename from backend/src/main/java/com/yfd/platform/env/fh/service/FhHabitatService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java index 92b600db..267ff509 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/service/FhHabitatService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java @@ -1,10 +1,11 @@ -package com.yfd.platform.env.fh.service; +package com.yfd.platform.qgc_env.fh.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.fh.entity.ao.FhDefaultAo; -import com.yfd.platform.env.fh.entity.vo.FhDefaultVo; -import com.yfd.platform.env.fh.entity.vo.HabitatVo; +import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; +import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; public interface FhHabitatService { @@ -20,5 +21,7 @@ public interface FhHabitatService { DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); + FhBaseInfoVo getStcdInfo(String stcd); + DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/env/fh/service/impl/FhHabitatServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index 752ca7d5..8b5c1608 100644 --- a/backend/src/main/java/com/yfd/platform/env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fh.service.impl; +package com.yfd.platform.qgc_env.fh.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; @@ -12,14 +12,16 @@ 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.env.fh.entity.ao.FhDefaultAo; -import com.yfd.platform.env.fh.entity.vo.FhDefaultVo; -import com.yfd.platform.env.fh.entity.vo.HabitatVo; -import com.yfd.platform.env.fh.entity.vo.FhMsstbprptVo; -import com.yfd.platform.env.fh.entity.vo.FhSdriverdayVo; -import com.yfd.platform.env.fh.entity.vo.FhSdrvwtsVo; -import com.yfd.platform.env.fh.service.FhHabitatService; -import com.yfd.platform.env.wq.entity.vo.StTbYsVo; +import com.yfd.platform.common.exception.BizException; +import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; +import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhMsstbprptVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhSdriverdayVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhSdrvwtsVo; +import com.yfd.platform.qgc_env.fh.service.FhHabitatService; +import com.yfd.platform.qgc_env.wq.entity.vo.StTbYsVo; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -61,8 +63,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { } sql.append(buildCustOrderBySql(dataSourceRequest.getSort())); - PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions); - Page page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null; + Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, HabitatVo.class); DataSourceResult result = new DataSourceResult<>(); @@ -162,6 +163,83 @@ public class FhHabitatServiceImpl implements FhHabitatService { return result.get(0); } + @Override + public FhBaseInfoVo getStcdInfo(String stcd) { + if (StrUtil.isBlank(stcd)) { + throw new BizException("站点编码不能为空!"); + } + String sql = "SELECT " + + "t.STCD AS stcd, " + + "t.STNM AS stnm, " + + "t.TM AS tm, " + + "t.BLPRD AS blprd, " + + "t.LGTD AS lgtd, " + + "t.LTTD AS lttd, " + + "t.ELEV AS elev, " + + "t.STLC AS stlc, " + + "t.USFL AS usfl, " + + "t.DTIN AS dtin, " + + "t.DTIN_TM AS dtinTm, " + + "t.ORDER_INDEX AS orderIndex, " + + "t.RSTCD AS rstcd, " + + "eng.ENNM AS ennm, " + + "t.BASE_ID AS baseId, " + + "base.BASENAME AS baseName, " + + "t.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "t.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "t.ADDVCD AS addvcd, " + + "addv.ADDVNM AS addvcdName, " + + "t.REACHDES AS reachdes, " + + "t.LGLTTD AS lglttd, " + + "t.INTRODUCE AS introduce, " + + "t.LOGO AS logo, " + + "t.INFFILE AS inffile, " + + "t.INV AS inv, " + + "t.INVINMN AS invinmn, " + + "t.BHDX AS bhdx, " + + "t.BHFW AS bhfw, " + + "t.BHCD AS bhcd, " + + "t.BHMJ AS bhmj, " + + "t.BHHL AS bhhl, " + + "t.BHHD AS bhhd, " + + "t.BHCS AS bhcs, " + + "t.BHFS AS bhfs, " + + "t.ATTM AS attm, " + + "t.BHWWCD AS bhwwcd, " + + "t.BHHXCD AS bhhxcd, " + + "t.DTFRQCY AS dtfrqcy, " + + "t.REMARK AS remark, " + + "t.VLSR AS vlsr, " + + "t.VLSR_TM AS vlsrTm, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_USER AS modifyUser, " + + "t.MODIFY_TIME AS modifyTime, " + + "t.IS_DELETED AS isDeleted, " + + "t.DELETE_USER AS deleteUser, " + + "t.DELETE_TIME AS deleteTime " + + "FROM SD_FHBT_B_H t " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " + + "LEFT JOIN SD_HYDROBASE base ON base.BASEID = t.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = t.HBRVCD " + + " AND hbrv.BASEID = t.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 " + + " AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = t.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = t.ADDVCD " + + "WHERE t.STCD = #{map.stcd} " + + " AND NVL(t.IS_DELETED, 0) = 0 "; + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, FhBaseInfoVo.class); + if (list == null || list.isEmpty()) { + return null; + } + return list.get(0); + } + @Override public DataSourceResult getSdrvwtsList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -418,7 +496,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { " t.QXDBHFS AS qxdbhfs, " + " t.STSTDT AS ststdt, " + " t.ESSTDT AS esstdt, " + - " t.MWAY AS mway, " + + "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mway , "+ " t.DTIN AS dtin, " + " t.VLSR AS vlsr, " + " t.DTIN_TYPE AS dtinType, " + @@ -1009,8 +1087,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { } sql.append(buildFhMsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); - PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions); - Page page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null; + Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhMsstbprptVo.class); DataSourceResult result = new DataSourceResult<>(); @@ -1021,11 +1098,50 @@ public class FhHabitatServiceImpl implements FhHabitatService { } private String buildFhMsstbprptBaseSql(String sttpCode) { + boolean onlyFh = "FH".equalsIgnoreCase(StrUtil.trim(sttpCode)); boolean onlyRiver = "ZQ".equalsIgnoreCase(StrUtil.trim(sttpCode)); boolean onlyWtrv = "WTRV".equalsIgnoreCase(StrUtil.trim(sttpCode)); StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM ("); - if (!onlyWtrv) { + if (onlyFh) { + sql.append("SELECT fh.STCD AS stcd, ") + .append("fh.STNM AS stnm, ") + .append("'FH' AS sttpCode, ") + .append("CAST(NULL AS VARCHAR2(36)) AS fhstcd, ") + .append("CAST(NULL AS VARCHAR2(255)) AS fhstnm, ") + .append("fh.RSTCD AS rstcd, ") + .append("CAST(NULL AS VARCHAR2(255)) AS ennm, ") + .append("fh.BASE_ID AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("fh.HBRVCD AS hbrvcd, ") + .append("fh.ATTM AS jcdt, ") + .append("CAST(NULL AS NUMBER(10)) AS mway, ") + .append("fh.DTIN AS dtin, ") + .append("CAST(NULL AS VARCHAR2(255)) AS dtinSrc, ") + .append("CAST(NULL AS NUMBER(10)) AS dtinType, ") + .append("fh.DTIN_TM AS dtinTm, ") + .append("CAST(NULL AS VARCHAR2(1000)) AS stindx, ") + .append("fh.BLPRD AS bldstt, ") + .append("fh.BHDX AS qxdbhdx, ") + .append("fh.BHFW AS qxdbhfw, ") + .append("fh.BHCD AS qxdbhcd, ") + .append("fh.BHMJ AS qxdbhmj, ") + .append("fh.BHHL AS bhhl, ") + .append("fh.BHHD AS bhhd, ") + .append("fh.BHCS AS bhcs, ") + .append("fh.BHFS AS qxdbhfs, ") + .append("fh.ATTM AS ststdt, ") + .append("fh.DTFRQCY AS dtfrqcy, ") + .append("fh.INV AS qxdinv, ") + .append("fh.USFL AS usfl, ") + .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ") + .append("999999 AS rvcdStepSort, ") + .append("999999 AS rstcdStepSort, ") + .append("NVL(fh.ORDER_INDEX, 999999) AS siteStepSort ") + .append("FROM SD_FHBT_B_H fh ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = fh.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 "); + } else if (!onlyWtrv) { sql.append("SELECT river.STCD AS stcd, ") .append("river.STNM AS stnm, ") .append("'ZQ' AS sttpCode, ") @@ -1043,6 +1159,18 @@ public class FhHabitatServiceImpl implements FhHabitatService { .append("river.DTIN_TYPE AS dtinType, ") .append("river.DTIN_TM AS dtinTm, ") .append("river.STINDX AS stindx, ") + .append("fh.BLPRD AS bldstt, ") + .append("fh.BHDX AS qxdbhdx, ") + .append("fh.BHFW AS qxdbhfw, ") + .append("fh.BHCD AS qxdbhcd, ") + .append("fh.BHMJ AS qxdbhmj, ") + .append("fh.BHHL AS bhhl, ") + .append("fh.BHHD AS bhhd, ") + .append("fh.BHCS AS bhcs, ") + .append("fh.BHFS AS qxdbhfs, ") + .append("fh.ATTM AS ststdt, ") + .append("fh.DTFRQCY AS dtfrqcy, ") + .append("fh.INV AS qxdinv, ") .append("river.USFL AS usfl, ") .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ") .append("999999 AS rvcdStepSort, ") @@ -1056,10 +1184,10 @@ public class FhHabitatServiceImpl implements FhHabitatService { .append("AND river.STTP = 'ZQ' ") .append("AND river.FHSTCD IS NOT NULL "); } - if (!onlyRiver && !onlyWtrv) { + if (!onlyFh && !onlyRiver && !onlyWtrv) { sql.append(" UNION ALL "); } - if (!onlyRiver) { + if (!onlyFh && !onlyRiver) { sql.append("SELECT wt.STCD AS stcd, ") .append("wt.STNM AS stnm, ") .append("'WTRV' AS sttpCode, ") @@ -1077,6 +1205,18 @@ public class FhHabitatServiceImpl implements FhHabitatService { .append("wt.DTIN_TYPE AS dtinType, ") .append("wt.DTIN_TM AS dtinTm, ") .append("wt.STINDX AS stindx, ") + .append("fh.BLPRD AS bldstt, ") + .append("fh.BHDX AS qxdbhdx, ") + .append("fh.BHFW AS qxdbhfw, ") + .append("fh.BHCD AS qxdbhcd, ") + .append("fh.BHMJ AS qxdbhmj, ") + .append("fh.BHHL AS bhhl, ") + .append("fh.BHHD AS bhhd, ") + .append("fh.BHCS AS bhcs, ") + .append("fh.BHFS AS qxdbhfs, ") + .append("fh.ATTM AS ststdt, ") + .append("fh.DTFRQCY AS dtfrqcy, ") + .append("fh.INV AS qxdinv, ") .append("wt.USFL AS usfl, ") .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ") .append("999999 AS rvcdStepSort, ") @@ -1087,8 +1227,8 @@ public class FhHabitatServiceImpl implements FhHabitatService { .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 ") .append("WHERE NVL(wt.IS_DELETED, 0) = 0 ") - .append("AND wt.STTP = 'WTRV' ") - .append("AND wt.FHSTCD IS NOT NULL "); + .append("AND wt.STTP = 'WTRV' "); +// .append("AND wt.FHSTCD IS NOT NULL "); } sql.append(") t WHERE 1 = 1 "); return sql.toString(); @@ -1204,6 +1344,18 @@ public class FhHabitatServiceImpl implements FhHabitatService { case "dtinType" -> "t.dtinType"; case "dtinTm" -> "t.dtinTm"; case "stindx" -> "t.stindx"; + case "bldstt" -> "t.bldstt"; + case "dtfrqcy" -> "t.dtfrqcy"; + case "qxdinv" -> "t.qxdinv"; + case "qxdbhdx" -> "t.qxdbhdx"; + case "qxdbhfw" -> "t.qxdbhfw"; + case "qxdbhcd" -> "t.qxdbhcd"; + case "qxdbhmj" -> "t.qxdbhmj"; + case "bhhl" -> "t.bhhl"; + case "bhhd" -> "t.bhhd"; + case "bhcs" -> "t.bhcs"; + case "qxdbhfs" -> "t.qxdbhfs"; + case "ststdt" -> "t.ststdt"; case "usfl", "enable" -> "t.usfl"; case "baseStepSort" -> "t.baseStepSort"; case "rvcdStepSort" -> "t.rvcdStepSort"; diff --git a/backend/src/main/java/com/yfd/platform/env/fp/controller/FishPassageController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java similarity index 71% rename from backend/src/main/java/com/yfd/platform/env/fp/controller/FishPassageController.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java index 4b4f1bae..104b5e69 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/controller/FishPassageController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java @@ -1,9 +1,9 @@ -package com.yfd.platform.env.fp.controller; +package com.yfd.platform.qgc_env.fp.controller; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.fp.service.FpBuildService; -import com.yfd.platform.env.fp.service.FpRunService; +import com.yfd.platform.qgc_env.fp.service.FpBuildService; +import com.yfd.platform.qgc_env.fp.service.FpRunService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -40,6 +40,18 @@ public class FishPassageController { return ResponseResult.successData(fpBuildService.processKendoList(dataSourceRequest)); } + @PostMapping("/vmsstbprpt/GetKendoList") + @Operation(summary = "根据条件查询过鱼设施基础列表") + public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(fpBuildService.getVmsstbprptList(dataSourceRequest)); + } + + @GetMapping("/msstbprpt/getStInfoByStcd") + @Operation(summary = "根据站码查询单条过鱼设施基础数据") + public ResponseResult getStInfoByStcd(@RequestParam String stcd) { + return ResponseResult.successData(fpBuildService.getStInfoByStcd(stcd)); + } + @GetMapping("/run/qgc/year/GetYearFpStatistics") @Operation(summary = "全过程过鱼统计总数,根据基地分组") public ResponseResult getYearFpStatic(@RequestParam("year") String year) { diff --git a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FdFishVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FdFishVo.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FdFishVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FdFishVo.java index 210e89b3..9c691ff7 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FdFishVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FdFishVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fp.entity.vo; +package com.yfd.platform.qgc_env.fp.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpConstructionSituationVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpConstructionSituationVo.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpConstructionSituationVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpConstructionSituationVo.java index 5f86411a..0e712b2c 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpConstructionSituationVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpConstructionSituationVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fp.entity.vo; +package com.yfd.platform.qgc_env.fp.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpFtpStatisticsVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpFtpStatisticsVo.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpFtpStatisticsVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpFtpStatisticsVo.java index 8073de06..55330057 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpFtpStatisticsVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpFtpStatisticsVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fp.entity.vo; +package com.yfd.platform.qgc_env.fp.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpRunPlanVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpRunPlanVo.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpRunPlanVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpRunPlanVo.java index 6f2c5455..0cb40ab2 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpRunPlanVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpRunPlanVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fp.entity.vo; +package com.yfd.platform.qgc_env.fp.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java new file mode 100644 index 00000000..4ad9471d --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java @@ -0,0 +1,243 @@ +package com.yfd.platform.qgc_env.fp.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "过鱼设施基础列表") +public class FpVmsstbprptVo 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 sttpFullPath; + + @Schema(description = "过鱼设施类型层级") + private Integer sttpTreeLevel; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属电站名称") + private String ennm; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal elev; + + @Schema(description = "站址") + private String stlc; + + @Schema(description = "数据是否接入") + private Integer dtin; + + @Schema(description = "接入状态中文") + private String dtinName; + + @Schema(description = "数据接入时间") + private Date dtinTm; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "建设状态中文") + private String bldsttCcodeName; + + @Schema(description = "规划设计日期") + private Date stdsdt; + + @Schema(description = "计划开工日期") + private Date pststdt; + + @Schema(description = "计划完工日期") + private Date pesstdt; + + @Schema(description = "开工日期") + private Date swdt; + + @Schema(description = "建成日期") + private Date jcdt; + + @Schema(description = "退役/拆除日期") + private Date wddt; + + @Schema(description = "简介") + private String introduce; + + @Schema(description = "鱼道型式") + private String ydxs; + + @Schema(description = "鱼道总长度") + private BigDecimal ydzcd; + + @Schema(description = "鱼道进口运行设计水位") + private BigDecimal ydjkz; + + @Schema(description = "鱼道进口数量") + private Integer ydjkcnt; + + @Schema(description = "进口高程") + private BigDecimal jkhg; + + @Schema(description = "鱼道进口诱鱼型式") + private String ydyyxs; + + @Schema(description = "鱼道出口运行设计水位") + private BigDecimal ydckz; + + @Schema(description = "鱼道出口数量") + private Integer ydckcnt; + + @Schema(description = "出口高程") + private BigDecimal ckhg; + + @Schema(description = "鱼道池室设计流速") + private BigDecimal ydcsv; + + @Schema(description = "鱼道每级池室长") + private BigDecimal ydcscd; + + @Schema(description = "鱼道每级池室宽") + private BigDecimal ydcskd; + + @Schema(description = "鱼道池室坡度") + private String ydcspd; + + @Schema(description = "鱼道池室数量") + private Integer ydcscnt; + + @Schema(description = "鱼道休息池个数") + private Integer ydxxccnt; + + @Schema(description = "鱼道或仿自然通道流速") + private String v; + + @Schema(description = "仿自然通道断面形状") + private String fzrdmxz; + + @Schema(description = "仿自然通道长度宽度") + private String fzrtdsz; + + @Schema(description = "仿自然通道运行水深") + private BigDecimal fzryxwdp; + + @Schema(description = "仿自然通道坡降") + private BigDecimal fzrpj; + + @Schema(description = "上游码头位置") + private String symtlc; + + @Schema(description = "上游码头型式") + private String symtxs; + + @Schema(description = "下游码头位置") + private String xymtlc; + + @Schema(description = "下游码头型式") + private String xymtxs; + + @Schema(description = "集诱鱼方式") + private String jyfs; + + @Schema(description = "运鱼设施方式") + private String yyfs; + + @Schema(description = "升鱼机集鱼槽数量") + private Integer syjcnt; + + @Schema(description = "升鱼机集鱼槽进口高程") + private BigDecimal syjhg; + + @Schema(description = "升鱼机集鱼槽流量") + private String syjq; + + @Schema(description = "升鱼机断面尺寸") + private String syjsz; + + @Schema(description = "升鱼机集鱼槽水深") + private String syjwdp; + + @Schema(description = "设计过鱼规模") + private Integer sjgycnt; + + @Schema(description = "主要过鱼对象描述") + private String zygydxms; + + @Schema(description = "兼顾过鱼对象描述") + private String jggydxms; + + @Schema(description = "过鱼时间") + private String gytm; + + @Schema(description = "运行时间") + private String yxtm; + + @Schema(description = "主要过鱼月份") + private String fpssmn; + + @Schema(description = "数据监测频次") + private Integer dtfrqcy; + + @Schema(description = "基本特性参数") + private String jbtxcs; + + @Schema(description = "是否上行") + private Integer isUp; + + @Schema(description = "是否下行") + private Integer isDown; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "数据来源") + private String vlsr; + + @Schema(description = "数据来源时间") + private Date vlsrTm; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; +} diff --git a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/YearFpStatisticsVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/YearFpStatisticsVo.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/env/fp/entity/vo/YearFpStatisticsVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/YearFpStatisticsVo.java index ccbc42c3..29b100dc 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/entity/vo/YearFpStatisticsVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/YearFpStatisticsVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fp.entity.vo; +package com.yfd.platform.qgc_env.fp.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java new file mode 100644 index 00000000..8d1cefac --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java @@ -0,0 +1,15 @@ +package com.yfd.platform.qgc_env.fp.service; + +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_env.fp.entity.vo.FpConstructionSituationVo; +import com.yfd.platform.qgc_env.fp.entity.vo.FpVmsstbprptVo; + +public interface FpBuildService { + + DataSourceResult processKendoList(DataSourceRequest dataSourceRequest); + + DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); + + FpVmsstbprptVo getStInfoByStcd(String stcd); +} diff --git a/backend/src/main/java/com/yfd/platform/env/fp/service/FpRunService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java similarity index 65% rename from backend/src/main/java/com/yfd/platform/env/fp/service/FpRunService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java index da685715..3088f708 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/service/FpRunService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java @@ -1,9 +1,9 @@ -package com.yfd.platform.env.fp.service; +package com.yfd.platform.qgc_env.fp.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.fp.entity.vo.YearFpStatisticsVo; -import com.yfd.platform.env.fp.entity.vo.FpRunPlanVo; +import com.yfd.platform.qgc_env.fp.entity.vo.YearFpStatisticsVo; +import com.yfd.platform.qgc_env.fp.entity.vo.FpRunPlanVo; import java.util.List; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java new file mode 100644 index 00000000..7ae27947 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java @@ -0,0 +1,372 @@ +package com.yfd.platform.qgc_env.fp.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yfd.platform.common.DataSourceLoadOptionsBase; +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.common.PageInfo; +import com.yfd.platform.qgc_env.fp.entity.vo.FpConstructionSituationVo; +import com.yfd.platform.qgc_env.fp.entity.vo.FpVmsstbprptVo; +import com.yfd.platform.qgc_env.fp.service.FpBuildService; +import com.yfd.platform.utils.QgcQueryWrapperUtil; +import jakarta.annotation.Resource; +import org.springframework.util.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class FpBuildServiceImpl implements FpBuildService { + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Override + public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions); + Page page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null; + + String sql = "SELECT t.STTP AS sttpCode, " + + " SUM(CASE WHEN t.DTIN = 1 THEN 1 ELSE 0 END) AS bonusing, " + + " SUM(CASE WHEN t.DTIN = 1 AND t.BLDSTT_CODE = 2 THEN 1 ELSE 0 END) AS builtConnected, " + + " SUM(CASE WHEN t.BLDSTT_CODE = 2 THEN 1 ELSE 0 END) AS built, " + + " SUM(CASE WHEN t.DTIN = 1 AND t.BLDSTT_CODE = 1 THEN 1 ELSE 0 END) AS buildingConnected, " + + " SUM(CASE WHEN t.BLDSTT_CODE = 1 THEN 1 ELSE 0 END) AS building, " + + " SUM(CASE WHEN NVL(t.BLDSTT_CODE, 0) = 0 THEN 1 ELSE 0 END) AS noBuilt " + + "FROM SD_FPSS_B_H t " + + "GROUP BY t.STTP " + + "ORDER BY t.STTP"; + + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, + sql, + new HashMap<>(), + FpConstructionSituationVo.class + ); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + @Override + public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + Map paramMap = new HashMap<>(); + + StringBuilder sql = new StringBuilder(buildVmsstbprptBaseSql()); + + String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, new int[]{0}); + if (!filterSql.isBlank()) { + sql.append(" AND ").append(filterSql); + } + + sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, FpVmsstbprptVo.class); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + @Override + public FpVmsstbprptVo getStInfoByStcd(String stcd) { + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + String sql = buildVmsstbprptBaseSql() + " AND fp.STCD = #{map.stcd}"; + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, FpVmsstbprptVo.class); + if (list == null || list.isEmpty()) { + return null; + } + return list.getFirst(); + } + + private String buildVmsstbprptBaseSql() { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("fp.STCD AS stcd, ") + .append("fp.STNM AS stnm, ") + .append("fp.STTP AS sttpCode, ") + .append("sttp.STTP_NAME AS sttpName, ") + .append("sttp.FULL_PATH AS sttpFullPath, ") + .append("sttp.TREE_LEVEL AS sttpTreeLevel, ") + .append("fp.RSTCD AS rstcd, ") + .append("eng.ENNM AS ennm, ") + .append("eng.BASE_ID AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("eng.HBRVCD AS hbrvcd, ") + .append("hbrv.HBRVNM AS hbrvcdName, ") + .append("fp.LGTD AS lgtd, ") + .append("fp.LTTD AS lttd, ") + .append("fp.ELEV AS elev, ") + .append("fp.STLC AS stlc, ") + .append("fp.DTIN AS dtin, ") + .append("CASE WHEN NVL(fp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, ") + .append("fp.DTIN_TM AS dtinTm, ") + .append("fp.BLDSTT_CODE AS bldsttCcode, ") + .append("CASE ") + .append("WHEN fp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' ") + .append("WHEN fp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ") + .append("ELSE '未建/规划' END AS bldsttCcodeName, ") + .append("fp.STDSDT AS stdsdt, ") + .append("fp.PSTSTDT AS pststdt, ") + .append("fp.PESSTDT AS pesstdt, ") + .append("fp.SWDT AS swdt, ") + .append("fp.JCDT AS jcdt, ") + .append("fp.WDDT AS wddt, ") + .append("fp.INTRODUCE AS introduce, ") + .append("fp.YDXS AS ydxs, ") + .append("fp.YDZCD AS ydzcd, ") + .append("fp.YDJKZ AS ydjkz, ") + .append("fp.YDJKCNT AS ydjkcnt, ") + .append("fp.JKHG AS jkhg, ") + .append("fp.YDYYXS AS ydyyxs, ") + .append("fp.YDCKZ AS ydckz, ") + .append("fp.YDCKCNT AS ydckcnt, ") + .append("fp.CKHG AS ckhg, ") + .append("fp.YDCSV AS ydcsv, ") + .append("fp.YDCSCD AS ydcscd, ") + .append("fp.YDCSKD AS ydcskd, ") + .append("fp.YDCSPD AS ydcspd, ") + .append("fp.YDCSCNT AS ydcscnt, ") + .append("fp.YDXXCCNT AS ydxxccnt, ") + .append("fp.V AS v, ") + .append("fp.FZRDMXZ AS fzrdmxz, ") + .append("fp.FZRTDSZ AS fzrtdsz, ") + .append("fp.FZRYXWDP AS fzryxwdp, ") + .append("fp.FZRPJ AS fzrpj, ") + .append("fp.SYMTLC AS symtlc, ") + .append("fp.SYMTXS AS symtxs, ") + .append("fp.XYMTLC AS xymtlc, ") + .append("fp.XYMTXS AS xymtxs, ") + .append("fp.JYFS AS jyfs, ") + .append("fp.YYFS AS yyfs, ") + .append("fp.SYJCNT AS syjcnt, ") + .append("fp.SYJHG AS syjhg, ") + .append("fp.SYJQ AS syjq, ") + .append("fp.SYJSZ AS syjsz, ") + .append("fp.SYJWDP AS syjwdp, ") + .append("fp.SJGYCNT AS sjgycnt, ") + .append("fp.ZYGYDXMS AS zygydxms, ") + .append("fp.JGGYDXMS AS jggydxms, ") + .append("fp.GYTM AS gytm, ") + .append("fp.YXTM AS yxtm, ") + .append("fp.FPSSMN AS fpssmn, ") + .append("fp.DTFRQCY AS dtfrqcy, ") + .append("fp.JBTXCS AS jbtxcs, ") + .append("fp.IS_UP AS isUp, ") + .append("fp.IS_DOWN AS isDown, ") + .append("fp.REMARK AS remark, ") + .append("fp.VLSR AS vlsr, ") + .append("fp.VLSR_TM AS vlsrTm, ") + .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ") + .append("NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, ") + .append("NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, ") + .append("NVL(fp.ORDER_INDEX, 999999) AS siteStepSort ") + .append("FROM SD_FPSS_B_H fp ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 ") + .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = fp.STTP ") + .append(" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 ") + .append("WHERE 1 = 1 "); + return sql.toString(); + } + + private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (filter.getField() != null && !filter.getField().isBlank()) { + return buildVmsstbprptLeafCondition(filter, paramMap, indexHolder); + } + if (CollectionUtils.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildVmsstbprptFilterCondition(child, paramMap, indexHolder); + if (!childSql.isBlank()) { + conditions.add("(" + childSql + ")"); + } + } + if (conditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return String.join(logic, conditions); + } + + private String buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapVmsstbprptColumn(filter.getField()); + if (column == null || column.isBlank()) { + return ""; + } + String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = "fpVmsParam" + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add("#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String paramKey = "fpVmsParam" + indexHolder[0]++; + switch (operator) { + case "eq": + paramMap.put(paramKey, value); + return column + " = #{map." + paramKey + "}"; + case "neq": + paramMap.put(paramKey, value); + return column + " <> #{map." + paramKey + "}"; + case "contains": + paramMap.put(paramKey, "%" + value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "startswith": + paramMap.put(paramKey, value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "endswith": + paramMap.put(paramKey, "%" + value); + return column + " LIKE #{map." + paramKey + "}"; + case "gt": + paramMap.put(paramKey, value); + return column + " > #{map." + paramKey + "}"; + case "gte": + paramMap.put(paramKey, value); + return column + " >= #{map." + paramKey + "}"; + case "lt": + paramMap.put(paramKey, value); + return column + " < #{map." + paramKey + "}"; + case "lte": + paramMap.put(paramKey, value); + return column + " <= #{map." + paramKey + "}"; + default: + return ""; + } + } + + private List normalizeValues(Object value) { + List values = new ArrayList<>(); + if (value instanceof List list) { + for (Object item : list) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value instanceof Object[] array) { + for (Object item : array) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value != null) { + values.add(value); + } + return values; + } + + private String mapVmsstbprptColumn(String field) { + if (field == null || field.isBlank()) { + return null; + } + Map columnMap = new HashMap<>(); + columnMap.put("stcd", "fp.STCD"); + columnMap.put("stnm", "fp.STNM"); + columnMap.put("sttpCode", "fp.STTP"); + columnMap.put("sttpName", "sttp.STTP_NAME"); + columnMap.put("sttpFullPath", "sttp.FULL_PATH"); + columnMap.put("rstcd", "fp.RSTCD"); + columnMap.put("ennm", "eng.ENNM"); + columnMap.put("baseId", "eng.BASE_ID"); + columnMap.put("baseName", "hb.BASENAME"); + columnMap.put("hbrvcd", "eng.HBRVCD"); + columnMap.put("dtin", "fp.DTIN"); + columnMap.put("dtinName", "CASE WHEN NVL(fp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END"); + columnMap.put("bldsttCcode", "fp.BLDSTT_CODE"); + columnMap.put("bldsttCcodeName", "CASE WHEN fp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN fp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END"); + columnMap.put("ydxs", "fp.YDXS"); + columnMap.put("siteStepSort", "fp.ORDER_INDEX"); + columnMap.put("rstcdStepSort", "eng.ORDER_INDEX"); + columnMap.put("baseStepSort", "hb.ORDER_INDEX"); + columnMap.put("rvcdStepSort", "hbrv.ORDER_INDEX"); + return columnMap.get(field); + } + + private String buildVmsstbprptOrderBySql(List sorts) { + if (sorts == null || sorts.isEmpty()) { + return " ORDER BY NVL(hb.ORDER_INDEX, 999999) ASC, NVL(hbrv.ORDER_INDEX, 999999) ASC, " + + "NVL(eng.ORDER_INDEX, 999999) ASC, NVL(fp.ORDER_INDEX, 999999) ASC, fp.STCD ASC"; + } + Map sortMap = new HashMap<>(); + sortMap.put("stcd", "fp.STCD"); + sortMap.put("stnm", "fp.STNM"); + sortMap.put("sttpCode", "fp.STTP"); + sortMap.put("sttpName", "sttp.STTP_NAME"); + sortMap.put("rstcd", "fp.RSTCD"); + sortMap.put("ennm", "eng.ENNM"); + sortMap.put("baseId", "eng.BASE_ID"); + sortMap.put("baseName", "hb.BASENAME"); + sortMap.put("hbrvcd", "eng.HBRVCD"); + sortMap.put("dtin", "fp.DTIN"); + sortMap.put("bldsttCcode", "fp.BLDSTT_CODE"); + sortMap.put("baseStepSort", "hb.ORDER_INDEX"); + sortMap.put("rvcdStepSort", "hbrv.ORDER_INDEX"); + sortMap.put("rstcdStepSort", "eng.ORDER_INDEX"); + sortMap.put("siteStepSort", "fp.ORDER_INDEX"); + + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sorts) { + if (sort == null || sort.getField() == null || sort.getField().isBlank()) { + continue; + } + String column = sortMap.get(sort.getField()); + if (column == null) { + continue; + } + String direction = "desc".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + direction); + } + if (orderItems.isEmpty()) { + return " ORDER BY NVL(hb.ORDER_INDEX, 999999) ASC, NVL(hbrv.ORDER_INDEX, 999999) ASC, " + + "NVL(eng.ORDER_INDEX, 999999) ASC, NVL(fp.ORDER_INDEX, 999999) ASC, fp.STCD ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } +} diff --git a/backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpRunServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpRunServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java index d2d0e9a6..d0591911 100644 --- a/backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpRunServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.fp.service.impl; +package com.yfd.platform.qgc_env.fp.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; @@ -9,10 +9,10 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.exception.BizException; -import com.yfd.platform.env.fp.entity.vo.FpFtpStatisticsVo; -import com.yfd.platform.env.fp.entity.vo.FpRunPlanVo; -import com.yfd.platform.env.fp.entity.vo.YearFpStatisticsVo; -import com.yfd.platform.env.fp.service.FpRunService; +import com.yfd.platform.qgc_env.fp.entity.vo.FpFtpStatisticsVo; +import com.yfd.platform.qgc_env.fp.entity.vo.FpRunPlanVo; +import com.yfd.platform.qgc_env.fp.entity.vo.YearFpStatisticsVo; +import com.yfd.platform.qgc_env.fp.service.FpRunService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java new file mode 100644 index 00000000..a341cb51 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/controller/VdMonitorController.java @@ -0,0 +1,55 @@ +package com.yfd.platform.qgc_env.vd.controller; + +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_env.vd.service.VdMonitorService; +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.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/vd") +@Tag(name = "视频监控模块") +@Validated +public class VdMonitorController { + + @Resource + private VdMonitorService vdMonitorService; + + @PostMapping("/vmsstbprpt/GetKendoList") + @Operation(summary = "视频监控设备统计查询") + public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vdMonitorService.getVmsstbprptList(dataSourceRequest)); + } + + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "根据条件查询视频监控设备基础数据") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vdMonitorService.getVmsstbprptList(dataSourceRequest)); + } + + @GetMapping("/msstbprpt/getStcdInfo") + @Operation(summary = "根据站码查询单条视频监控设备详情") + public ResponseResult getStcdInfo(@RequestParam String stcd) { + return ResponseResult.successData(vdMonitorService.getStcdInfo(stcd)); + } + + @PostMapping("/GetKendoListCust") + @Operation(summary = "查询视频站最新一条数据") + public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vdMonitorService.getKendoListCust(dataSourceRequest)); + } + + @PostMapping("/runData/GetKendoListCust") + @Operation(summary = "查询视频监控运行数据") + public ResponseResult getRunDataKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vdMonitorService.getRunDataKendoListCust(dataSourceRequest)); + } +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdRunDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdRunDataVo.java new file mode 100644 index 00000000..166fc84d --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdRunDataVo.java @@ -0,0 +1,97 @@ +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; + +@Data +@Schema(description = "视频监控运行数据") +public class VdRunDataVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "视频站名称") + private String stnm; + + @Schema(description = "视频监控点编码") + private String stcd; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "时间") + private Date tm; + + @Schema(description = "显示名称") + private String flnm; + + @Schema(description = "图片路径") + private String imgPath; + + @Schema(description = "视频路径") + private String flpth; + + @Schema(description = "设备视频信息") + private String deviceinfo; + + @Schema(description = "设备状态描述") + private String describe; + + @Schema(description = "附件ID") + private String fid; + + @Schema(description = "缩略图") + private String thumbnail; + + @Schema(description = "电站编码") + private String rstcd; + + @Schema(description = "电站名称") + private String ennm; + + @Schema(description = "栖息地编码") + private String fhstcd; + + @Schema(description = "栖息地名称") + private String fhstnm; + + @Schema(description = "测站编码") + private String stCode; + + @Schema(description = "测站名称") + private String stName; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "类型编码") + private String sttpCode; + + @Schema(description = "类型名称") + private String sttpName; + + @Schema(description = "标题名称") + private String titleName; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java new file mode 100644 index 00000000..b4281f26 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/entity/vo/VdVmsstbprptVo.java @@ -0,0 +1,150 @@ +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; +import java.util.Date; + +@Data +@Schema(description = "视频监控设备分组统计") +public class VdVmsstbprptVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "站类值") + private String sttpCodeValue; + + @Schema(description = "站类扩展") + private Object sttpCodeExt; + + @Schema(description = "站类数量") + private Integer countSttpCode; + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "监控类型") + private String mntp; + + @Schema(description = "站类名称") + private String sttpName; + + @Schema(description = "站类全路径") + private String sttpFullPath; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属电站名称") + private String ennm; + + @Schema(description = "所属栖息地编码") + private String fhstcd; + + @Schema(description = "所属栖息地名称") + private String fhstnm; + + @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 rvcd; + + @Schema(description = "行政区编码") + private String addvcd; + + @Schema(description = "站址") + private String stlc; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal elev; + + @Schema(description = "建成日期") + private Date jcdt; + + @Schema(description = "撤站日期") + private Date wddt; + + @Schema(description = "数据是否接入") + private Integer dtin; + + @Schema(description = "数据是否接入中文") + private String dtinName; + + @Schema(description = "是否启用") + private Integer usfl; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "建设状态中文") + private String bldsttCcodeName; + + @Schema(description = "监测指标") + private String stindx; + + @Schema(description = "简介") + private String introduce; + + @Schema(description = "LOGO") + private String logo; + + @Schema(description = "介绍附件") + private String inffile; + + @Schema(description = "监测频次") + private Integer dtfrqcy; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "数据来源") + private String vlsr; + + @Schema(description = "数据来源时间") + private Date vlsrTm; + + @Schema(description = "视频播放地址") + private String url; + + @Schema(description = "播放方式") + private Integer playWay; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; + + @Schema(description = "来源表") + private String sourceTable; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java new file mode 100644 index 00000000..4fa8d933 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/VdMonitorService.java @@ -0,0 +1,17 @@ +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.VdRunDataVo; +import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo; + +public interface VdMonitorService { + + DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); + + VdVmsstbprptVo getStcdInfo(String stcd); + + DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getRunDataKendoListCust(DataSourceRequest dataSourceRequest); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java new file mode 100644 index 00000000..220eb699 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java @@ -0,0 +1,947 @@ +package com.yfd.platform.qgc_env.vd.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.DataSourceLoadOptionsBase; +import com.yfd.platform.common.DataSourceRequest; +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.VdRunDataVo; +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; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Service +public class VdMonitorServiceImpl implements VdMonitorService { + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Override + public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + GroupingInfo[] groups = loadOptions == null ? null : loadOptions.getGroup(); + Map paramMap = new HashMap<>(); + String filterSql = buildFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + + if (groups != null && groups.length > 0) { + return buildGroupedResult(dataSourceRequest, groups, filterSql, paramMap); + } + + return buildDetailResult(dataSourceRequest, loadOptions, filterSql, paramMap); + } + + @Override + public VdVmsstbprptVo getStcdInfo(String stcd) { + if (StrUtil.isBlank(stcd)) { + return null; + } + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("t.stcd AS stcd, ") + .append("t.stnm AS stnm, ") + .append("t.mntp AS mntp, ") + .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.fhstcd AS fhstcd, ") + .append("t.fhstnm AS fhstnm, ") + .append("t.stCode AS stCode, ") + .append("t.stName AS stName, ") + .append("t.baseId AS baseId, ") + .append("t.baseName AS baseName, ") + .append("t.hbrvcd AS hbrvcd, ") + .append("t.rvcd AS rvcd, ") + .append("t.addvcd AS addvcd, ") + .append("t.stlc AS stlc, ") + .append("t.lgtd AS lgtd, ") + .append("t.lttd AS lttd, ") + .append("t.elev AS elev, ") + .append("t.jcdt AS jcdt, ") + .append("t.wddt AS wddt, ") + .append("t.dtin AS dtin, ") + .append("CASE WHEN NVL(t.dtin, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, ") + .append("t.usfl AS usfl, ") + .append("t.bldsttCcode AS bldsttCcode, ") + .append("CASE ") + .append("WHEN t.bldsttCcode IN (1, 10, 11) THEN '已建' ") + .append("WHEN t.bldsttCcode IN (2, 7, 8) THEN '在建' ") + .append("ELSE '未建/规划' END AS bldsttCcodeName, ") + .append("t.stindx AS stindx, ") + .append("t.introduce AS introduce, ") + .append("t.logo AS logo, ") + .append("t.inffile AS inffile, ") + .append("t.dtfrqcy AS dtfrqcy, ") + .append("t.remark AS remark, ") + .append("t.vlsr AS vlsr, ") + .append("t.vlsrTm AS vlsrTm, ") + .append("t.url AS url, ") + .append("t.playWay AS playWay, ") + .append("t.baseStepSort AS baseStepSort, ") + .append("t.rstcdStepSort AS rstcdStepSort, ") + .append("t.siteStepSort AS siteStepSort, ") + .append("t.sourceTable AS sourceTable ") + .append("FROM (") + .append(buildVmsstbprptViewSql()) + .append(") t WHERE t.stcd = #{map.stcd}"); + + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + List list = microservicDynamicSQLMapper.getAllListWithResultType( + sql.toString(), paramMap, VdVmsstbprptVo.class); + if (CollUtil.isEmpty(list)) { + return null; + } + return list.get(0); + } + + @Override + public DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryLatestRunDataDetailList(dataSourceRequest, loadOptions); + } + return queryLatestRunDataGroupList(dataSourceRequest, loadOptions); + } + + @Override + public DataSourceResult getRunDataKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryRunDataDetailList(dataSourceRequest, loadOptions); + } + return queryRunDataGroupList(dataSourceRequest, loadOptions); + } + + private DataSourceResult buildGroupedResult(DataSourceRequest dataSourceRequest, + GroupingInfo[] groups, + String filterSql, + Map paramMap) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT t.sttpCode AS sttpCode, COUNT(1) AS count_sttpCode ") + .append("FROM (") + .append(buildVmsstbprptViewSql()) + .append(") t ") + .append("WHERE 1 = 1 "); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + sql.append(" GROUP BY t.sttpCode "); + sql.append(buildOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getGroup())); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groups))); + result.setTotal((long) rows.size()); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groups))); + result.setTotal((long) rows.size()); + } + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult buildDetailResult(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions, + String filterSql, + Map paramMap) { + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildVmsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append("FROM (") + .append(buildVmsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, VdVmsstbprptVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildVmsstbprptDetailSelectSql(List selectFields) { + Map selectMap = new LinkedHashMap<>(); + selectMap.put("stcd", "t.stcd AS stcd"); + selectMap.put("stnm", "t.stnm AS stnm"); + selectMap.put("mntp", "t.mntp AS mntp"); + selectMap.put("sttpCode", "t.sttpCode AS sttpCode"); + selectMap.put("sttpName", "t.sttpName AS sttpName"); + selectMap.put("sttpFullPath", "t.sttpFullPath AS sttpFullPath"); + selectMap.put("rstcd", "t.rstcd AS rstcd"); + selectMap.put("ennm", "t.ennm AS ennm"); + selectMap.put("fhstcd", "t.fhstcd AS fhstcd"); + selectMap.put("fhstnm", "t.fhstnm AS fhstnm"); + selectMap.put("stCode", "t.stCode AS stCode"); + selectMap.put("stName", "t.stName AS stName"); + selectMap.put("baseId", "t.baseId AS baseId"); + selectMap.put("baseName", "t.baseName AS baseName"); + selectMap.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + selectMap.put("rvcd", "t.rvcd AS rvcd"); + selectMap.put("addvcd", "t.addvcd AS addvcd"); + selectMap.put("stlc", "t.stlc AS stlc"); + selectMap.put("lgtd", "t.lgtd AS lgtd"); + selectMap.put("lttd", "t.lttd AS lttd"); + selectMap.put("elev", "t.elev AS elev"); + selectMap.put("jcdt", "t.jcdt AS jcdt"); + selectMap.put("wddt", "t.wddt AS wddt"); + selectMap.put("dtin", "t.dtin AS dtin"); + selectMap.put("dtinName", "CASE WHEN NVL(t.dtin, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName"); + selectMap.put("usfl", "t.usfl AS usfl"); + selectMap.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + selectMap.put("bldsttCcodeName", "CASE WHEN t.bldsttCcode IN (1, 10, 11) THEN '已建' WHEN t.bldsttCcode IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); + selectMap.put("stindx", "t.stindx AS stindx"); + selectMap.put("introduce", "t.introduce AS introduce"); + selectMap.put("logo", "t.logo AS logo"); + selectMap.put("inffile", "t.inffile AS inffile"); + selectMap.put("dtfrqcy", "t.dtfrqcy AS dtfrqcy"); + selectMap.put("remark", "t.remark AS remark"); + selectMap.put("vlsr", "t.vlsr AS vlsr"); + selectMap.put("vlsrTm", "t.vlsrTm AS vlsrTm"); + selectMap.put("url", "t.url AS url"); + selectMap.put("playWay", "t.playWay AS playWay"); + selectMap.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + selectMap.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + selectMap.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + selectMap.put("sourceTable", "t.sourceTable AS sourceTable"); + + if (CollUtil.isEmpty(selectFields)) { + return String.join(", ", selectMap.values()) + " "; + } + List actualColumns = new ArrayList<>(); + for (String selectField : selectFields) { + String column = selectMap.get(selectField); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(selectMap.values()); + } + return String.join(", ", actualColumns) + " "; + } + + private DataSourceResult queryRunDataDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + return queryRunDataDetailList(dataSourceRequest, loadOptions, buildRunDataCoreSql()); + } + + private DataSourceResult queryLatestRunDataDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + return queryRunDataDetailList(dataSourceRequest, loadOptions, buildLatestRunDataCoreSql()); + } + + private DataSourceResult queryRunDataDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions, + String coreSql) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildRunDataSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(coreSql) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildRunDataFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildRunDataOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, VdRunDataVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryRunDataGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + return queryRunDataGroupList(dataSourceRequest, loadOptions, buildRunDataCoreSql()); + } + + private DataSourceResult queryLatestRunDataGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + return queryRunDataGroupList(dataSourceRequest, loadOptions, buildLatestRunDataCoreSql()); + } + + private DataSourceResult queryRunDataGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions, + String coreSql) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapRunDataColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField()); + selectItems.add("COUNT(*) AS count_" + descriptor.getField()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapRunDataColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildRunDataAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.sttpCode AS sttpCode"); + selectItems.add("COUNT(*) AS count_sttpCode"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(coreSql) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildRunDataFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapRunDataColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)); + sql.append(buildRunDataGroupOrderBySql(groups)); + } + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildVmsstbprptViewSql() { + return "SELECT " + + "src.STCD AS stcd, " + + "src.STNM AS stnm, " + + "src.MNTP AS mntp, " + + "src.STTP AS sttpCode, " + + "sttp.STTP_NAME AS sttpName, " + + "sttp.FULL_PATH AS sttpFullPath, " + + "src.RSTCD AS rstcd, " + + "eng.ENNM AS ennm, " + + "src.FHSTCD AS fhstcd, " + + "fh.STNM AS fhstnm, " + + "src.CSTCD AS stCode, " + + "cst.STNM AS stName, " + + "NVL(eng.BASE_ID, src.BASE_ID) AS baseId, " + + "hb.BASENAME AS baseName, " + + "NVL(eng.HBRVCD, src.HBRVCD) AS hbrvcd, " + + "NVL(eng.RVCD, src.RVCD) AS rvcd, " + + "NVL(eng.ADDVCD, src.ADDVCD) AS addvcd, " + + "src.STLC AS stlc, " + + "src.LGTD AS lgtd, " + + "src.LTTD AS lttd, " + + "src.ELEV AS elev, " + + "src.JCDT AS jcdt, " + + "src.WDDT AS wddt, " + + "src.DTIN AS dtin, " + + "src.USFL AS usfl, " + + "src.BLDSTT_CODE AS bldsttCcode, " + + "src.STINDX AS stindx, " + + "src.INTRODUCE AS introduce, " + + "src.LOGO AS logo, " + + "src.INFFILE AS inffile, " + + "src.DTFRQCY AS dtfrqcy, " + + "src.REMARK AS remark, " + + "src.VLSR AS vlsr, " + + "src.VLSR_TM AS vlsrTm, " + + "src.URL AS url, " + + "CASE WHEN src.URL IS NULL THEN NULL WHEN INSTR(src.URL, 'm3u8') > 0 THEN 1 ELSE 0 END AS playWay, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + + "NVL(src.ORDER_INDEX, 999999) AS siteStepSort, " + + "src.SOURCE_TABLE AS sourceTable " + + "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_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, src.BASE_ID) AND NVL(hb.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 (" + buildStationBaseSql() + ") cst ON cst.STCD = src.CSTCD " + + "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = src.STTP " + + " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLED, 1) = 1 "; + } + + 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, " + + " 'SD_VDINFO_B' AS SOURCE_TABLE " + + "FROM SD_VDINFO_B vd WHERE vd.STTP = 'VD_FP' " + + "UNION ALL " + + "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, " + + " '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 buildRunDataCoreSql() { + return "SELECT " + + "run.ID AS id, " + + "run.STCD AS stcd, " + + "run.TM AS tm, " + + "NVL(run.FLNM, base.STNM || ' ' || TO_CHAR(run.TM, 'yyyy-mm-dd hh24')) AS flnm, " + + "run.IMG_PATH AS imgPath, " + + "run.FLPTH AS flpth, " + + "run.DEVICEINFO AS deviceinfo, " + + "run.DESCRIBE AS describe, " + + "run.FID AS fid, " + + "run.THUMBNAIL AS thumbnail, " + + "base.RSTCD AS rstcd, " + + "base.STNM AS stnm, " + + "eng.ENNM AS ennm, " + + "base.FHSTCD AS fhstcd, " + + "fh.STNM AS fhstnm, " + + "base.CSTCD AS stCode, " + + "cst.STNM AS stName, " + + "NVL(eng.BASE_ID, base.BASE_ID) AS baseId, " + + "hb.BASENAME AS baseName, " + + "base.STTP AS sttpCode, " + + "sttp.STTP_NAME AS sttpName, " + + "base.STNM AS titleName, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + + "NVL(base.ORDER_INDEX, 999999) AS siteStepSort, " + + "NVL(eng.HBRVCD, base.HBRVCD) AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName " + + "FROM SD_VDINFO_R run " + + "INNER JOIN (" + buildVdDeviceBaseSql() + ") base ON run.STCD = base.STCD " + + "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 SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(eng.HBRVCD, base.HBRVCD) " + + " AND hbrv.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = base.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + + "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 " + + "WHERE NVL(run.IS_DELETED, 0) = 0 "; + } + + private String buildLatestRunDataCoreSql() { + return "SELECT " + + "run.ID AS id, " + + "run.STCD AS stcd, " + + "run.TM AS tm, " + + "NVL(run.FLNM, base.STNM || ' ' || TO_CHAR(run.TM, 'yyyy-mm-dd hh24')) AS flnm, " + + "run.IMG_PATH AS imgPath, " + + "run.FLPTH AS flpth, " + + "run.DEVICEINFO AS deviceinfo, " + + "run.DESCRIBE AS describe, " + + "run.FID AS fid, " + + "run.THUMBNAIL AS thumbnail, " + + "base.RSTCD AS rstcd, " + + "base.STNM AS stnm, " + + "eng.ENNM AS ennm, " + + "base.FHSTCD AS fhstcd, " + + "fh.STNM AS fhstnm, " + + "base.CSTCD AS stCode, " + + "cst.STNM AS stName, " + + "NVL(eng.BASE_ID, base.BASE_ID) AS baseId, " + + "hb.BASENAME AS baseName, " + + "base.STTP AS sttpCode, " + + "sttp.STTP_NAME AS sttpName, " + + "base.STNM AS titleName, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + + "NVL(base.ORDER_INDEX, 999999) AS siteStepSort, " + + "NVL(eng.HBRVCD, base.HBRVCD) AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName " + + "FROM ( " + + "SELECT detail.ID, detail.STCD, detail.TM, detail.FLNM, detail.IMG_PATH, detail.FLPTH, detail.DEVICEINFO, " + + "detail.DESCRIBE, detail.FID, detail.THUMBNAIL " + + "FROM SD_VDINFO_R detail " + + "INNER JOIN ( " + + "SELECT STCD, MAX(TM) AS TM FROM SD_VDINFO_R WHERE NVL(IS_DELETED, 0) = 0 GROUP BY STCD " + + ") latest ON detail.STCD = latest.STCD AND detail.TM = latest.TM " + + "WHERE NVL(detail.IS_DELETED, 0) = 0 " + + ") run " + + "INNER JOIN (" + buildVdDeviceBaseSql() + ") base ON run.STCD = base.STCD " + + "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 SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(eng.HBRVCD, base.HBRVCD) " + + " AND hbrv.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = base.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + + "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 "; + } + + private String buildStationBaseSql() { + return "SELECT river.STCD AS STCD, river.STNM AS STNM FROM SD_RIVER_B_H river WHERE NVL(river.IS_DELETED, 0) = 0 " + + "UNION ALL " + + "SELECT wt.STCD AS STCD, wt.STNM AS STNM FROM SD_WT_B_H wt WHERE NVL(wt.IS_DELETED, 0) = 0 " + + "UNION ALL " + + "SELECT wq.STCD AS STCD, wq.STNM AS STNM FROM SD_WQ_B_H wq WHERE NVL(wq.IS_DELETED, 0) = 0 " + + "UNION ALL " + + "SELECT fh.STCD AS STCD, fh.STNM AS STNM FROM SD_FHBT_B_H fh WHERE NVL(fh.IS_DELETED, 0) = 0 " + + "UNION ALL " + + "SELECT eng.STCD AS STCD, eng.ENNM AS STNM FROM SD_ENGINFO_B_H eng WHERE NVL(eng.IS_DELETED, 0) = 0 "; + } + + private String buildRunDataSelectSql(List selectFields) { + Map selectMap = new LinkedHashMap<>(); + selectMap.put("stnm", "t.stnm AS stnm"); + selectMap.put("stcd", "t.stcd AS stcd"); + selectMap.put("tm", "t.tm AS tm"); + selectMap.put("flnm", "t.flnm AS flnm"); + selectMap.put("imgPath", "t.imgPath AS imgPath"); + selectMap.put("flpth", "t.flpth AS flpth"); + selectMap.put("deviceinfo", "t.deviceinfo AS deviceinfo"); + selectMap.put("describe", "t.describe AS describe"); + selectMap.put("fid", "t.fid AS fid"); + selectMap.put("thumbnail", "t.thumbnail AS thumbnail"); + selectMap.put("rstcd", "t.rstcd AS rstcd"); + selectMap.put("ennm", "t.ennm AS ennm"); + selectMap.put("fhstcd", "t.fhstcd AS fhstcd"); + selectMap.put("fhstnm", "t.fhstnm AS fhstnm"); + selectMap.put("stCode", "t.stCode AS stCode"); + selectMap.put("stName", "t.stName AS stName"); + selectMap.put("baseId", "t.baseId AS baseId"); + selectMap.put("baseName", "t.baseName AS baseName"); + selectMap.put("sttpCode", "t.sttpCode AS sttpCode"); + selectMap.put("sttpName", "t.sttpName AS sttpName"); + selectMap.put("titleName", "t.titleName AS titleName"); + selectMap.put("baseStepSort", "t.baseStepSort AS baseStepSort"); + selectMap.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort"); + selectMap.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort"); + selectMap.put("siteStepSort", "t.siteStepSort AS siteStepSort"); + selectMap.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + selectMap.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + + if (CollUtil.isEmpty(selectFields)) { + return String.join(", ", selectMap.values()); + } + List actualColumns = new ArrayList<>(); + for (String selectField : selectFields) { + String column = selectMap.get(selectField); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(selectMap.values()); + } + return String.join(", ", actualColumns); + } + + private String buildRunDataOrderBySql(List 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"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapRunDataColumn(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.baseStepSort ASC, t.rvcdStepSort ASC, t.rstcdStepSort ASC, t.siteStepSort ASC, t.stcd ASC, t.tm DESC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } + + private String buildRunDataGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapRunDataColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String direction = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + direction); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String buildRunDataAggregateSql(String aggregate, String column, String field) { + String normalized = aggregate == null ? "" : aggregate.toLowerCase(); + return switch (normalized) { + case "sum", "min", "max", "avg", "count" -> + normalized.toUpperCase() + "(" + column + ") AS " + normalized + "_" + field; + default -> null; + }; + } + + private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildFilterCondition(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 buildRunDataFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildRunDataLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildRunDataFilterCondition(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 buildLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildSimpleCondition(column, "vdParam", filter, paramMap, indexHolder); + } + + private String buildRunDataLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapRunDataColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildSimpleCondition(column, "vdRunParam", filter, paramMap, indexHolder, isRunDataDateField(filter)); + } + + private String buildSimpleCondition(String column, + String paramPrefix, + DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + return buildSimpleCondition(column, paramPrefix, filter, paramMap, indexHolder, false); + } + + private String buildSimpleCondition(String column, + String paramPrefix, + DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder, + boolean dateField) { + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = paramPrefix + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add("#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String paramKey = paramPrefix + indexHolder[0]++; + String valueExpr = buildValueExpr(paramKey, dateField, value); + return switch (operator) { + case "eq" -> { + paramMap.put(paramKey, value); + yield column + " = " + valueExpr; + } + case "neq" -> { + paramMap.put(paramKey, value); + yield column + " <> " + valueExpr; + } + case "contains" -> { + paramMap.put(paramKey, "%" + value + "%"); + yield column + " LIKE #{map." + paramKey + "}"; + } + case "startswith" -> { + paramMap.put(paramKey, value + "%"); + yield column + " LIKE #{map." + paramKey + "}"; + } + case "endswith" -> { + paramMap.put(paramKey, "%" + value); + yield column + " LIKE #{map." + paramKey + "}"; + } + case "gt" -> { + paramMap.put(paramKey, value); + yield column + " > " + valueExpr; + } + case "gte" -> { + paramMap.put(paramKey, value); + yield column + " >= " + valueExpr; + } + case "lt" -> { + paramMap.put(paramKey, value); + yield column + " < " + valueExpr; + } + case "lte" -> { + paramMap.put(paramKey, value); + yield column + " <= " + valueExpr; + } + default -> ""; + }; + } + + private boolean isRunDataDateField(DataSourceRequest.FilterDescriptor filter) { + if (filter == null || StrUtil.isBlank(filter.getField())) { + return false; + } + if ("tm".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 + "}"; + } + String text = String.valueOf(value).trim(); + if (text.length() <= 10) { + return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')"; + } + return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')"; + } + + private List normalizeValues(Object value) { + List values = new ArrayList<>(); + if (value instanceof List list) { + for (Object item : list) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value instanceof Object[] array) { + for (Object item : array) { + if (item != null) { + values.add(item); + } + } + return values; + } + if (value != null) { + values.add(value); + } + return values; + } + + private String mapColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "sttpCode" -> "t.sttpCode"; + case "sttpName" -> "t.sttpName"; + case "sttpFullPath" -> "t.sttpFullPath"; + case "stcd" -> "t.stcd"; + case "stnm" -> "t.stnm"; + case "rstcd" -> "t.rstcd"; + case "ennm" -> "t.ennm"; + case "fhstcd" -> "t.fhstcd"; + case "fhstnm" -> "t.fhstnm"; + case "stCode" -> "t.stCode"; + case "stName" -> "t.stName"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "rvcd" -> "t.rvcd"; + case "addvcd" -> "t.addvcd"; + case "dtin" -> "t.dtin"; + case "usfl" -> "t.usfl"; + case "bldsttCcode" -> "t.bldsttCcode"; + case "url" -> "t.url"; + case "playWay" -> "t.playWay"; + case "sourceTable" -> "t.sourceTable"; + default -> null; + }; + } + + private String mapRunDataColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id" -> "t.id"; + case "stnm" -> "t.stnm"; + case "stcd" -> "t.stcd"; + case "tm" -> "t.tm"; + case "flnm" -> "t.flnm"; + case "imgPath" -> "t.imgPath"; + case "flpth" -> "t.flpth"; + case "deviceinfo" -> "t.deviceinfo"; + case "describe" -> "t.describe"; + case "fid" -> "t.fid"; + case "thumbnail" -> "t.thumbnail"; + case "rstcd" -> "t.rstcd"; + case "ennm" -> "t.ennm"; + case "fhstcd" -> "t.fhstcd"; + case "fhstnm" -> "t.fhstnm"; + case "stCode" -> "t.stCode"; + case "stName" -> "t.stName"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "sttpCode" -> "t.sttpCode"; + case "sttpName" -> "t.sttpName"; + case "titleName" -> "t.titleName"; + case "baseStepSort" -> "t.baseStepSort"; + case "rvcdStepSort" -> "t.rvcdStepSort"; + case "rstcdStepSort" -> "t.rstcdStepSort"; + case "siteStepSort" -> "t.siteStepSort"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + default -> null; + }; + } + + private String buildOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return " ORDER BY t.sttpCode ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor group : groups) { + if (group == null || StrUtil.isBlank(group.getField())) { + continue; + } + String column = mapColumn(group.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String direction = "desc".equalsIgnoreCase(group.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + direction); + } + if (orderItems.isEmpty()) { + return " ORDER BY t.sttpCode ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } + + private String buildDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY t.baseStepSort ASC, t.rstcdStepSort ASC, t.siteStepSort ASC, t.stcd ASC"; + } + List 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()) ? "DESC" : "ASC"; + orderItems.add(column + " " + direction); + } + if (orderItems.isEmpty()) { + return " ORDER BY t.baseStepSort ASC, t.rstcdStepSort ASC, t.siteStepSort ASC, t.stcd ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } +} diff --git a/backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java index 7472649c..76f13c1f 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/controller/EnvWqDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/controller/EnvWqDataController.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.wq.controller; +package com.yfd.platform.qgc_env.wq.controller; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.wq.service.EnvWqDataService; +import com.yfd.platform.qgc_env.wq.service.EnvWqDataService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -23,12 +23,19 @@ public class EnvWqDataController { @Resource private EnvWqDataService envWqDataService; + @PostMapping("/GetKendoListCust") @Operation(summary = "水质统计分析") public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(envWqDataService.processKendoList(dataSourceRequest)); } + @PostMapping("/compare/GetKendoListCust") + @Operation(summary = "水质达标情况同比统计查询") + public ResponseResult getCompareKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(envWqDataService.getCompareKendoList(dataSourceRequest)); + } + @PostMapping("/data/GetKendoListCust") @Operation(summary = "水质明细数据查询") public ResponseResult getDataKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { @@ -47,8 +54,8 @@ public class EnvWqDataController { public ResponseResult getStTbYsBVoKendoListCust( @RequestParam String stcd, @RequestParam String tbCode, - @RequestParam String startTime, - @RequestParam String endTime) { + @RequestParam(required = false) String startTime, + @RequestParam(required = false) String endTime) { return ResponseResult.successData(envWqDataService.getStTbYsBVoKendoListCust(stcd, tbCode, startTime, endTime)); } @@ -106,4 +113,11 @@ public class EnvWqDataController { public ResponseResult getStcdInfo(@RequestParam String stcd) { return ResponseResult.successData(envWqDataService.getStcdInfo(stcd)); } + + + @PostMapping("/rule/GetKendoListCust") + @Operation(summary = "查询水质预警规则列表") + public ResponseResult getRuleKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(envWqDataService.getWqWarRuleList(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/EnvWqDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqDataVo.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/EnvWqDataVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqDataVo.java index 4a60882e..c7c8cd5b 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/EnvWqDataVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqDataVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/EnvWqVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqVo.java similarity index 99% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/EnvWqVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqVo.java index 47163bf7..f40f3699 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/EnvWqVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/EnvWqVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/MsWarnRuleDetailBVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/MsWarnRuleDetailBVo.java new file mode 100644 index 00000000..3186f812 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/MsWarnRuleDetailBVo.java @@ -0,0 +1,96 @@ +package com.yfd.platform.qgc_env.wq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "水质预警规则明细") +public class MsWarnRuleDetailBVo { + + @Schema(description = "主键") + private String id; + + @Schema(description = "规则主键") + private String ruleId; + + @Schema(description = "监测表主键") + private String tbId; + + @Schema(description = "要素编码") + private String ys; + + @Schema(description = "生效时间") + private Date tm; + + @Schema(description = "开始月日") + private String beginTime; + + @Schema(description = "结束月日") + private String endTime; + + @Schema(description = "最小值") + private BigDecimal minVal; + + @Schema(description = "最大值") + private BigDecimal maxVal; + + @Schema(description = "等级") + private Integer lvl; + + @Schema(description = "等级描述") + private String lvlNote; + + @Schema(description = "站类标识") + private String stty; + + @Schema(description = "持续要求") + private Integer alwyrqst; + + @Schema(description = "环评要求") + private Integer elaeq; + + @Schema(description = "容差系数") + private BigDecimal qecsc; + + @Schema(description = "备注") + private String description; + + @Schema(description = "创建人") + private String recordUser; + + @Schema(description = "创建时间") + private Date recordTime; + + @Schema(description = "更新人") + private String modifyUser; + + @Schema(description = "更新时间") + private Date modifyTime; + + @Schema(description = "是否删除") + private Integer isDeleted; + + @Schema(description = "删除人") + private String deleteUser; + + @Schema(description = "删除时间") + private Date deleteTime; + + @Schema(description = "告警等级") + private Integer warnLevel; + + @Schema(description = "标注") + private String mark; + + @Schema(description = "数据来源") + private String vlsr; + + @Schema(description = "数据来源时间") + private Date vlsrTm; + + @Schema(description = "是否正序") + private Integer isAsc; +} diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StTbYsVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/StTbYsVo.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StTbYsVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/StTbYsVo.java index 21b3251d..b529cff3 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StTbYsVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/StTbYsVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StbprpYsVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/StbprpYsVo.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StbprpYsVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/StbprpYsVo.java index f5c5d413..80ab125e 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/StbprpYsVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/StbprpYsVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqAlongVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqAlongVo.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqAlongVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqAlongVo.java index ad5d38b2..c47d8f41 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqAlongVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqAlongVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqBaseInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqBaseInfoVo.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqBaseInfoVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqBaseInfoVo.java index ac273d24..0fc81648 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqBaseInfoVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqBaseInfoVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqMsstbprptGroupVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqMsstbprptGroupVo.java similarity index 88% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqMsstbprptGroupVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqMsstbprptGroupVo.java index 8ba1aeb1..05a011fa 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqMsstbprptGroupVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqMsstbprptGroupVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqVmsstbprptVo.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqVmsstbprptVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqVmsstbprptVo.java index 0a46130d..04810375 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/entity/vo/WqVmsstbprptVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/entity/vo/WqVmsstbprptVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.entity.vo; +package com.yfd.platform.qgc_env.wq.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java similarity index 79% rename from backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java index 321901d7..7e351ad7 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/service/EnvWqDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/EnvWqDataService.java @@ -1,13 +1,15 @@ -package com.yfd.platform.env.wq.service; +package com.yfd.platform.qgc_env.wq.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.wq.entity.vo.WqBaseInfoVo; +import com.yfd.platform.qgc_env.wq.entity.vo.WqBaseInfoVo; public interface EnvWqDataService { DataSourceResult processKendoList(DataSourceRequest dataSourceRequest); + DataSourceResult getCompareKendoList(DataSourceRequest dataSourceRequest); + DataSourceResult processDataKendoList(DataSourceRequest dataSourceRequest); DataSourceResult getStbprpYsByStcd(DataSourceRequest dataSourceRequest); @@ -24,6 +26,8 @@ public interface EnvWqDataService { DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest); + DataSourceResult getWqWarRuleList(DataSourceRequest dataSourceRequest); + DataSourceResult getStTbYsBVoKendoListCust(String stcd, String tbCode, String startTime, String endTime); DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java similarity index 78% rename from backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index 883ca95a..72790e38 100644 --- a/backend/src/main/java/com/yfd/platform/env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wq.service.impl; +package com.yfd.platform.qgc_env.wq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; @@ -13,9 +13,9 @@ import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.PageInfo; import com.yfd.platform.common.exception.BizException; -import com.yfd.platform.env.wq.entity.vo.*; -import com.yfd.platform.env.wq.service.EnvWqDataService; -import com.yfd.platform.env.wt.entity.vo.WbsbVo; +import com.yfd.platform.qgc_env.wq.entity.vo.*; +import com.yfd.platform.qgc_env.wq.service.EnvWqDataService; +import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo; import com.yfd.platform.utils.KendoUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.RequestHolder; @@ -91,6 +91,11 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + @Override + public DataSourceResult getCompareKendoList(DataSourceRequest dataSourceRequest) { + return processKendoList(dataSourceRequest); + } + @Override public DataSourceResult processDataKendoList(DataSourceRequest dataSourceRequest) { boolean calculated = CommonConstant.CALCULATE_SUCCESS.equals( @@ -368,7 +373,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "WHERE NVL(mab.IS_DELETED, 0) = 0 " + " AND NVL(sab.IS_DELETED, 0) = 0 " + " AND mab.CODE = 'common' " + - " AND eng.BASE_ID = #{map.baseId} " + + " AND wq.BASE_ID = #{map.baseId} " + " AND r.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " + " AND r.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " + "ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC " + @@ -386,7 +391,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "WHERE NVL(mab.IS_DELETED, 0) = 0 " + " AND NVL(sab.IS_DELETED, 0) = 0 " + " AND mab.CODE = 'common' " + - " AND eng.BASE_ID = #{map.baseId} " + + " AND wq.BASE_ID = #{map.baseId} " + "ORDER BY r.TM DESC " + ") WHERE ROWNUM = 1"; } @@ -412,7 +417,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { sql.append("AND mab.RVCD = #{map.rvcd} "); } if (StrUtil.isNotBlank(baseId)) { - sql.append("AND eng.BASE_ID = #{map.baseId} "); + sql.append("AND wq.BASE_ID = #{map.baseId} "); } sql.append("AND swr.TM IS NOT NULL ") .append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC, swr.TM DESC") @@ -486,7 +491,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { sql.append("AND mab.RVCD = #{map.rvcd} "); } if (StrUtil.isNotBlank(baseId)) { - sql.append("AND eng.BASE_ID = #{map.baseId} "); + sql.append("AND wq.BASE_ID = #{map.baseId} "); } sql.append("ORDER BY NVL(mab.ORDER_INDEX, 999999) ASC, NVL(sab.SORT, 999999) ASC"); return sql.toString(); @@ -496,8 +501,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { if (CollUtil.isEmpty(list)) { return; } - String sql = "SELECT t2.YS AS ys, t2.MIN_VAL AS minVal, t2.MAX_VAL AS maxVal, t2.LVL AS lvl " + - "FROM MS_WARN_RULE_B t1 " + + String sql = "SELECT t2.YS AS \"ys\", t2.MIN_VAL AS \"minVal\", t2.MAX_VAL AS \"maxVal\", t2.LVL AS \"lvl\" " + "FROM MS_WARN_RULE_B t1 " + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + "WHERE t1.RULE_TYPE = 'WQLVL'"; List> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); @@ -544,29 +548,68 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { @Override public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { - String groupField = "dtinType"; - String groupColumn = "t.DTIN_TYPE"; - String groupDir = "ASC"; - if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) { - DataSourceRequest.GroupDescriptor groupDescriptor = dataSourceRequest.getGroup().get(0); - if (groupDescriptor != null && StrUtil.isNotBlank(groupDescriptor.getField())) { - groupField = groupDescriptor.getField(); - String mappedColumn = mapMsstbprptColumn(groupField); - if (StrUtil.isNotBlank(mappedColumn)) { - groupColumn = mappedColumn; - } - if ("desc".equalsIgnoreCase(groupDescriptor.getDir()) || "des".equalsIgnoreCase(groupDescriptor.getDir())) { - groupDir = "DESC"; - } + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM SD_WQ_B_H t ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = t.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 = t.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append(" AND NVL(hbrv.ENABLED, 1) = 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("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = t.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(t.IS_DELETED, 0) = 0 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0} + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); } + sql.append(buildMsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WqBaseInfoVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; } - StringBuilder sql = new StringBuilder(); - sql.append("SELECT ") - .append(groupColumn).append(" AS ").append(groupField.toUpperCase()).append(", ") - .append("COUNT(*) AS COUNT_").append(groupField.toUpperCase()).append(" ") + GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup(); + StringBuilder baseSql = new StringBuilder(); + baseSql.append("SELECT ") + .append("NVL(t.IS_DELETED, 0) AS isDeleted, ") + .append("t.STTP AS sttpCode, ") + .append("t.MWAY AS mway, ") + .append("t.DTIN_TYPE AS dtinType, ") + .append("t.STCD AS stcd, ") + .append("t.STNM AS stnm, ") + .append("t.FHSTCD AS fhstcd, ") + .append("t.DTIN AS dtin, ") + .append("t.BASE_ID AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("hb.ORDER_INDEX AS baseStepSort, ") + .append("eng.HBRVCD AS hbrvcd, ") + .append("hbrv.HBRVNM AS hbrvcdName, ") + .append("eng.ORDER_INDEX AS rstcdStepSort, ") + .append("t.ORDER_INDEX AS siteStepSort ") .append("FROM SD_WQ_B_H t ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = t.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 = t.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append(" AND NVL(hbrv.ENABLED, 1) = 1 ") .append("WHERE NVL(t.IS_DELETED, 0) = 0 "); Map paramMap = new HashMap<>(); @@ -576,14 +619,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { new int[]{0} ); if (StrUtil.isNotBlank(filterSql)) { - sql.append(" AND ").append(filterSql).append(" "); + baseSql.append(" AND ").append(filterSql).append(" "); } - sql.append("GROUP BY ").append(groupColumn).append(" ") - .append("ORDER BY ").append(groupColumn).append(" ").append(groupDir); - List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + String groupedSql = buildMsstbprptGroupSql(baseSql.toString(), groupInfos); + List> rows = microservicDynamicSQLMapper.pageAllList(null, groupedSql, paramMap); DataSourceResult result = new DataSourceResult(); - result.setData(toMsstbprptLegacyGroups(rows, groupField)); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData(toLegacyGroupResult(new GroupHelper().group(rows, Arrays.asList(groupInfos)), 0)); + } result.setTotal((long) rows.size()); result.setAggregates(new HashMap<>()); return result; @@ -729,7 +775,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "t.ORDER_INDEX AS orderIndex, " + "t.RSTCD AS rstcd, " + "eng.ENNM AS ennm, " + - "eng.BASE_ID AS baseId, " + + "t.BASE_ID AS baseId, " + "base.BASENAME AS baseName, " + "eng.HBRVCD AS hbrvcd, " + "hbrv.HBRVNM AS hbrvcdName, " + @@ -752,9 +798,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "t.DELETE_TIME AS deleteTime " + "FROM SD_WQ_B_H t " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " + - "LEFT JOIN SD_HYDROBASE base ON base.BASEID = eng.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE base ON base.BASEID = t.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD " + - " AND hbrv.BASEID = eng.BASE_ID " + + " AND hbrv.BASEID = t.BASE_ID " + " AND NVL(hbrv.IS_DELETED, 0) = 0 " + " AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + @@ -879,7 +925,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "wq.FHSTCD AS ST_CODE, " + "CAST(NULL AS VARCHAR2(200)) AS ST_NAME, " + "eng.ENNM, " + - "eng.BASE_ID, " + + "wq.BASE_ID, " + "hb.BASENAME AS BASE_NAME, " + "rv.RVNM AS RVCD_NAME, " + "addv.ADDVNM AS ADDVCD_NAME, " + @@ -892,7 +938,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "wq.STTP AS STTP_CODE " + "FROM SD_WQ_B_H wq " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + - "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + @@ -1092,8 +1138,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { if (CollUtil.isEmpty(list)) { return; } - String sql = "SELECT t2.YS AS ys, t2.MIN_VAL AS minVal, t2.MAX_VAL AS maxVal, t2.LVL AS lvl " + - "FROM MS_WARN_RULE_B t1 " + + String sql = "SELECT t2.YS AS \"ys\", t2.MIN_VAL AS \"minVal\", t2.MAX_VAL AS \"maxVal\", t2.LVL AS \"lvl\" " + "FROM MS_WARN_RULE_B t1 " + "INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + "WHERE t1.RULE_TYPE = 'WQLVL'"; List> ruleList = microservicDynamicSQLMapper.pageAllList(null, sql, null); @@ -1273,10 +1318,13 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { } sql.append("FROM (").append(buildStationBaseSql()).append(") MSB "); if (calculated) { - sql.append("INNER JOIN MS_WQCALCULATION_T MWT ON MWT.STCD = MSB.STCD ") - .append("WHERE MWT.RECORD_USER = #{map.recordUser} "); + sql.append("INNER JOIN (") + .append(buildEnvWqMetricSourceSql(true)) + .append(") MWT ON MWT.STCD = MSB.STCD "); } else { - sql.append("INNER JOIN MS_WQ_T MWT ON MWT.STCD = MSB.STCD ") + sql.append("INNER JOIN (") + .append(buildEnvWqMetricSourceSql(false)) + .append(") MWT ON MWT.STCD = MSB.STCD ") .append("LEFT JOIN SD_WQDAY_S WQD ON WQD.DT = MWT.TM AND MSB.STCD = WQD.STCD AND NVL(WQD.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_WQDAY_S WQD2 ON ADD_MONTHS(WQD2.DT, 12) = WQD.DT AND WQD2.STCD = WQD.STCD AND NVL(WQD2.IS_DELETED, 0) = 0 "); } @@ -1284,6 +1332,21 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return sql.toString(); } + private String buildEnvWqMetricSourceSql(boolean calculated) { + if (calculated) { + return "SELECT " + + "ID, STCD, TM, TYPE, STTYPE, SFDB, DR_MONTH, DR_YEAR, " + + "WQ_SFDB_HY, WQ_SFDB_COUNT, WQ_SFDB_HO, WQ_RATE, WQ_SFDB_HN " + + "FROM MS_WQCALCULATION_T " + + "WHERE NVL(IS_DELETED, 0) = 0 AND RECORD_USER = #{map.recordUser}"; + } + return "SELECT " + + "ID, STCD, TM, TYPE, STTYPE, SFDB, DR_MONTH, DR_YEAR, " + + "WQ_SFDB_HY, WQ_SFDB_COUNT, WQ_SFDB_HO, WQ_RATE, WQ_SFDB_HN " + + "FROM MS_WQ_T " + + "WHERE NVL(IS_DELETED, 0) = 0"; + } + private String buildStationBaseSql() { return "SELECT " + "wq.STCD, " + @@ -1304,8 +1367,8 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "siteAlong.SORT AS SITESTEPSORT " + "FROM SD_WQ_B_H wq " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wq.RSTCD " + - "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + - "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = wq.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + @@ -1392,6 +1455,24 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { case "contains": paramMap.put(key, "%" + filter.getValue() + "%"); return column + " LIKE #{map." + key + "}"; + case "in": { + List list = null; + if (filter.getValue() instanceof List l) { + list = l; + } else if (filter.getValue() instanceof Object[] arr) { + list = Arrays.asList(arr); + } + if (list != null && !list.isEmpty()) { + List placeholders = new ArrayList<>(); + for (Object item : list) { + String itemKey = "envWqParam" + indexHolder[0]++; + paramMap.put(itemKey, item); + placeholders.add("#{map." + itemKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + return ""; + } default: return ""; } @@ -1415,6 +1496,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { case "wwqtg" -> "T.WWQTG"; case "id" -> "T.ID"; case "tm" -> "T.TM"; + case "TYPE" -> "T.TYPE"; case "type" -> "T.TYPE"; case "sttype" -> "T.STTYPE"; case "sfdb" -> "T.SFDB"; @@ -1479,7 +1561,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { item.put("field", group.getField()); } item.put("key", group.getKey()); - item.put("keyName", group.getKeyName()); + item.put("keyName", StrUtil.blankToDefault(group.getKeyName(), resolveEnvWqGroupKeyName(group.getField(), group.getKey()))); item.put("keyExt", group.getKeyExt() == null ? new HashMap<>() : group.getKeyExt()); item.put("count", group.getCount()); item.put("summary", group.getSummary() == null ? new Object[0] : group.getSummary()); @@ -1494,6 +1576,31 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + private String resolveEnvWqGroupKeyName(Object field, Object key) { + if (field == null || key == null) { + return null; + } + String fieldName = String.valueOf(field); + String keyValue = String.valueOf(key); + return switch (fieldName) { + case "sfdb" -> parseInteger(keyValue) == null ? null : getSfdbName(parseInteger(keyValue)); + case "sttype" -> getSttypeName(keyValue); + case "wwqtg", "wqGrd", "beforeWqGrd" -> getWqLevelName(keyValue); + default -> null; + }; + } + + private Integer parseInteger(String value) { + if (StrUtil.isBlank(value)) { + return null; + } + try { + return Integer.parseInt(value); + } catch (NumberFormatException ex) { + return null; + } + } + private Object readGroupValue(Map row, String field) { Object value = row.get(field); if (value == null) { @@ -1606,6 +1713,293 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + @Override + public DataSourceResult getWqWarRuleList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("d.ID AS id, ") + .append("d.RULE_ID AS ruleId, ") + .append("d.TB_ID AS tbId, ") + .append("d.YS AS ys, ") + .append("d.TM AS tm, ") + .append("d.BEGIN_TIME AS beginTime, ") + .append("d.END_TIME AS endTime, ") + .append("d.MIN_VAL AS minVal, ") + .append("d.MAX_VAL AS maxVal, ") + .append("d.LVL AS lvl, ") + .append("d.LVL_NOTE AS lvlNote, ") + .append("d.STTY AS stty, ") + .append("d.ALWYRQST AS alwyrqst, ") + .append("d.ELAEQ AS elaeq, ") + .append("d.QECSC AS qecsc, ") + .append("d.DESCRIPTION AS description, ") + .append("d.RECORD_USER AS recordUser, ") + .append("d.RECORD_TIME AS recordTime, ") + .append("d.MODIFY_USER AS modifyUser, ") + .append("d.MODIFY_TIME AS modifyTime, ") + .append("d.IS_DELETED AS isDeleted, ") + .append("d.DELETE_USER AS deleteUser, ") + .append("d.DELETE_TIME AS deleteTime, ") + .append("d.WARN_LEVEL AS warnLevel, ") + .append("d.MARK AS mark, ") + .append("d.VLSR AS vlsr, ") + .append("d.VLSR_TM AS vlsrTm ") + .append("FROM MS_WARN_RULE_DETAIL_B d ") + .append("WHERE NVL(d.IS_DELETED, 0) = 0 ") + .append(" AND d.TB_ID = (SELECT tb.ID FROM ST_TB_B tb ") + .append(" WHERE tb.TB_CODE = 'WQ_R' AND NVL(tb.IS_DELETED, 0) = 0 AND ROWNUM = 1) ") + .append(" AND d.RULE_ID = (SELECT r.ID FROM MS_WARN_RULE_B r ") + .append(" WHERE r.RULE_TYPE = 'WQLVL' AND NVL(r.IS_DELETED, 0) = 0 AND ROWNUM = 1) ") + .append(" AND d.LVL = (SELECT station.WWQTG FROM (") + .append(buildWqWarRuleStationSql()) + .append(") station WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWqWarRuleStationFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0} + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(" AND station.WWQTG IS NOT NULL AND ROWNUM = 1) "); + sql.append(buildWqWarRuleOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, + sql.toString(), + paramMap, + MsWarnRuleDetailBVo.class + ); + fillWqWarRuleSort(list); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildWqWarRuleStationSql() { + return "SELECT " + + "t.WWQTG AS WWQTG, " + + "NVL(t.IS_DELETED, 0) AS ISDELETED, " + + "t.STTP AS STTPCODE, " + + "t.MWAY AS MWAY, " + + "t.DTIN_TYPE AS DTINTYPE, " + + "t.STCD AS STCD, " + + "t.STNM AS STNM, " + + "t.FHSTCD AS FHSTCD, " + + "t.DTIN AS DTIN, " + + "t.RSTCD AS RSTCD, " + + "eng.ENNM AS ENNM, " + + "t.BASE_ID AS BASEID, " + + "eng.HBRVCD AS HBRVCD, " + + "eng.RVCD AS RVCD, " + + "eng.ADDVCD AS ADDVCD, " + + "t.TM AS TM, " + + "t.JCDT AS JCDT, " + + "t.WDDT AS WDDT, " + + "t.DTIN_TM AS DTINTM " + + "FROM SD_WQ_B_H t " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + + "WHERE NVL(t.IS_DELETED, 0) = 0 "; + } + + private String buildWqWarRuleStationFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildWqWarRuleStationLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildWqWarRuleStationFilterCondition(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 buildWqWarRuleStationLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapWqWarRuleStationColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + boolean dateField = isWqWarRuleDateField(filter.getField()); + + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeMsstbprptValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = "wqWarP" + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add(dateField + ? "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" + : "#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + + String paramKey = "wqWarP" + indexHolder[0]++; + switch (operator) { + case "eq": + paramMap.put(paramKey, value); + return dateField ? column + " = TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " = #{map." + paramKey + "}"; + case "neq": + paramMap.put(paramKey, value); + return dateField ? column + " <> TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " <> #{map." + paramKey + "}"; + case "contains": + paramMap.put(paramKey, "%" + value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "startswith": + paramMap.put(paramKey, value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "endswith": + paramMap.put(paramKey, "%" + value); + return column + " LIKE #{map." + paramKey + "}"; + case "gt": + paramMap.put(paramKey, value); + return dateField ? column + " > TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " > #{map." + paramKey + "}"; + case "gte": + paramMap.put(paramKey, value); + return dateField ? column + " >= TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " >= #{map." + paramKey + "}"; + case "lt": + paramMap.put(paramKey, value); + return dateField ? column + " < TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " < #{map." + paramKey + "}"; + case "lte": + paramMap.put(paramKey, value); + return dateField ? column + " <= TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')" : column + " <= #{map." + paramKey + "}"; + default: + return ""; + } + } + + private String mapWqWarRuleStationColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "isDeleted" -> "station.ISDELETED"; + case "sttpCode" -> "station.STTPCODE"; + case "mway" -> "station.MWAY"; + case "dtinType" -> "station.DTINTYPE"; + case "stcd" -> "station.STCD"; + case "stnm" -> "station.STNM"; + case "fhstcd" -> "station.FHSTCD"; + case "baseId" -> "station.BASEID"; + case "dtin" -> "station.DTIN"; + case "rstcd" -> "station.RSTCD"; + case "ennm" -> "station.ENNM"; + case "hbrvcd" -> "station.HBRVCD"; + case "rvcd" -> "station.RVCD"; + case "addvcd" -> "station.ADDVCD"; + case "wwqtg" -> "station.WWQTG"; + case "tm" -> "station.TM"; + case "jcdt" -> "station.JCDT"; + case "wddt" -> "station.WDDT"; + case "dtinTm" -> "station.DTINTM"; + default -> null; + }; + } + + private boolean isWqWarRuleDateField(String field) { + if (StrUtil.isBlank(field)) { + return false; + } + return "tm".equalsIgnoreCase(field) + || "jcdt".equalsIgnoreCase(field) + || "wddt".equalsIgnoreCase(field) + || "dtinTm".equalsIgnoreCase(field); + } + + private String buildWqWarRuleOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY d.YS ASC, d.LVL ASC, d.TM DESC "; + } + List orderColumns = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String column = switch (sortDescriptor.getField()) { + case "ys" -> "d.YS"; + case "lvl" -> "d.LVL"; + case "lvlNote" -> "d.LVL_NOTE"; + case "minVal" -> "d.MIN_VAL"; + case "maxVal" -> "d.MAX_VAL"; + case "tm" -> "d.TM"; + case "beginTime" -> "d.BEGIN_TIME"; + case "endTime" -> "d.END_TIME"; + case "warnLevel" -> "d.WARN_LEVEL"; + case "mark" -> "d.MARK"; + case "description" -> "d.DESCRIPTION"; + case "vlsrTm" -> "d.VLSR_TM"; + default -> null; + }; + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderColumns.add(column + " " + dir + " NULLS LAST"); + } + if (orderColumns.isEmpty()) { + return " ORDER BY d.YS ASC, d.LVL ASC, d.TM DESC "; + } + return " ORDER BY " + String.join(", ", orderColumns) + " "; + } + + private void fillWqWarRuleSort(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + String sql = "SELECT ys AS ys, CASE WHEN lvl = dr THEN 1 ELSE 0 END AS isAsc " + + "FROM ( " + + " SELECT T.ys AS ys, T.lvl AS lvl, DENSE_RANK() OVER (PARTITION BY T.ys ORDER BY T.MIN_VAL) AS dr " + + " FROM (SELECT * FROM MS_WARN_RULE_DETAIL_B " + + " WHERE NVL(IS_DELETED, 0) = 0 " + + " AND TB_ID = (SELECT ID FROM ST_TB_B WHERE TB = 'SD_WQ_R' AND TB_CODE = 'WQ_R' AND NVL(IS_DELETED, 0) = 0 AND ROWNUM = 1) " + + " AND RULE_ID = (SELECT ID FROM MS_WARN_RULE_B WHERE RULE_TYPE = 'WQLVL' AND NVL(IS_DELETED, 0) = 0 AND ROWNUM = 1) " + + " ) T " + + ") WHERE lvl = 1"; + List sortList = microservicDynamicSQLMapper.getAllListWithResultType( + sql, + new HashMap<>(), + MsWarnRuleDetailBVo.class + ); + Map ysRuleSortMap = sortList.stream() + .filter(item -> StrUtil.isNotBlank(item.getYs())) + .collect(Collectors.toMap(MsWarnRuleDetailBVo::getYs, MsWarnRuleDetailBVo::getIsAsc, (left, right) -> left)); + list.forEach(item -> item.setIsAsc(ysRuleSortMap.get(item.getYs()))); + } + private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, Map paramMap, int[] indexHolder, @@ -1890,12 +2284,80 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { case "dtinType" -> "t.DTIN_TYPE"; case "stcd" -> "t.STCD"; case "stnm" -> "t.STNM"; - case "baseId" -> "eng.BASE_ID"; + case "fhstcd" -> "t.FHSTCD"; + case "baseId" -> "t.BASE_ID"; case "dtin" -> "t.DTIN"; default -> null; }; } + private String buildMsstbprptDetailSelectSql(List selectFields) { + Map selectMap = new LinkedHashMap<>(); + selectMap.put("stcd", "t.STCD AS stcd"); + selectMap.put("stnm", "t.STNM AS stnm"); + selectMap.put("tm", "t.TM AS tm"); + selectMap.put("sttp", "t.STTP AS sttp"); + selectMap.put("lgtd", "t.LGTD AS lgtd"); + selectMap.put("lttd", "t.LTTD AS lttd"); + selectMap.put("elev", "t.ELEV AS elev"); + selectMap.put("stlc", "t.STLC AS stlc"); + selectMap.put("wwqtg", "t.WWQTG AS wwqtg"); + selectMap.put("wqtype", "t.WQTYPE AS wqtype"); + selectMap.put("jcdt", "t.JCDT AS jcdt"); + selectMap.put("wddt", "t.WDDT AS wddt"); + selectMap.put("bldsttCode", "t.BLDSTT_CODE AS bldsttCode"); + selectMap.put("introduce", "t.INTRODUCE AS introduce"); + selectMap.put("logo", "t.LOGO AS logo"); + selectMap.put("inffile", "t.INFFILE AS inffile"); + selectMap.put("usfl", "t.USFL AS usfl"); + selectMap.put("dtin", "t.DTIN AS dtin"); + selectMap.put("dtinSrc", "t.DTIN_SRC AS dtinSrc"); + selectMap.put("dtinType", "t.DTIN_TYPE AS dtinType"); + selectMap.put("dtinTm", "t.DTIN_TM AS dtinTm"); + selectMap.put("mway", "t.MWAY AS mway"); + selectMap.put("stindx", "t.STINDX AS stindx"); + selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex"); + selectMap.put("rstcd", "t.RSTCD AS rstcd"); + selectMap.put("ennm", "eng.ENNM AS ennm"); + selectMap.put("baseId", "t.BASE_ID AS baseId"); + selectMap.put("baseName", "hb.BASENAME AS baseName"); + selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); + selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName"); + selectMap.put("rvcd", "eng.RVCD AS rvcd"); + selectMap.put("rvcdName", "rv.RVNM AS rvcdName"); + selectMap.put("addvcd", "eng.ADDVCD AS addvcd"); + selectMap.put("addvcdName", "addv.ADDVNM AS addvcdName"); + selectMap.put("fhstcd", "t.FHSTCD AS fhstcd"); + selectMap.put("ispro", "t.ISPRO AS ispro"); + selectMap.put("dtfrqcy", "t.DTFRQCY AS dtfrqcy"); + selectMap.put("remark", "t.REMARK AS remark"); + selectMap.put("vlsr", "t.VLSR AS vlsr"); + selectMap.put("vlsrTm", "t.VLSR_TM AS vlsrTm"); + selectMap.put("recordUser", "t.RECORD_USER AS recordUser"); + selectMap.put("recordTime", "t.RECORD_TIME AS recordTime"); + selectMap.put("modifyUser", "t.MODIFY_USER AS modifyUser"); + selectMap.put("modifyTime", "t.MODIFY_TIME AS modifyTime"); + selectMap.put("isDeleted", "t.IS_DELETED AS isDeleted"); + selectMap.put("deleteUser", "t.DELETE_USER AS deleteUser"); + selectMap.put("deleteTime", "t.DELETE_TIME AS deleteTime"); + + if (CollUtil.isEmpty(selectFields)) { + return String.join(", ", selectMap.values()); + } + + List actualColumns = new ArrayList<>(); + for (String selectField : selectFields) { + String column = selectMap.get(selectField); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(selectMap.values()); + } + return String.join(", ", actualColumns); + } + private List> toMsstbprptLegacyGroups(List> rows, String groupField) { List> result = new ArrayList<>(); if (rows == null) { @@ -1940,6 +2402,76 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } + private String buildMsstbprptGroupSql(String baseSql, GroupingInfo[] groupInfos) { + if (groupInfos == null || groupInfos.length == 0) { + return baseSql; + } + List groupFields = new ArrayList<>(); + List orderByItems = new ArrayList<>(); + for (GroupingInfo item : groupInfos) { + if (item == null || StrUtil.isBlank(item.getSelector())) { + continue; + } + groupFields.add(item.getSelector()); + String dir = Boolean.TRUE.equals(item.getDesc()) ? "DESC" : "ASC"; + orderByItems.add(item.getSelector() + " " + dir); + } + 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(" "); + if (!orderByItems.isEmpty()) { + sql.append("ORDER BY ").append(String.join(", ", orderByItems)); + } + return sql.toString(); + } + + private String buildMsstbprptDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY t.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; + } + List orderColumns = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String column = switch (sortDescriptor.getField()) { + case "stcd" -> "t.STCD"; + case "stnm" -> "t.STNM"; + case "tm" -> "t.TM"; + case "sttp" -> "t.STTP"; + case "jcdt" -> "t.JCDT"; + case "rstcd" -> "t.RSTCD"; + case "ennm" -> "eng.ENNM"; + case "baseId" -> "eng.BASE_ID"; + case "baseName" -> "hb.BASENAME"; + case "hbrvcd" -> "eng.HBRVCD"; + case "rvcd" -> "eng.RVCD"; + case "fhstcd" -> "t.FHSTCD"; + case "mway" -> "t.MWAY"; + case "dtin" -> "t.DTIN"; + case "dtinType" -> "t.DTIN_TYPE"; + case "orderIndex" -> "t.ORDER_INDEX"; + default -> null; + }; + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderColumns.add(column + " " + dir + " NULLS LAST"); + } + if (orderColumns.isEmpty()) { + return " ORDER BY t.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; + } + return " ORDER BY " + String.join(", ", orderColumns); + } + private String buildEnvWqOrderBySql(List sortList) { if (sortList == null || sortList.isEmpty()) { return ""; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java index ebad6183..b1bf235c 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/controller/SdWTMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.controller; +package com.yfd.platform.qgc_env.wt.controller; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,9 +7,9 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.exception.BizException; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.env.entity.vo.BatchDeleteAo; -import com.yfd.platform.env.wt.entity.vo.WtrvInfo; -import com.yfd.platform.env.wt.service.*; +import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo; +import com.yfd.platform.qgc_env.wt.service.*; import com.yfd.platform.utils.QgcQueryWrapperUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -191,6 +191,18 @@ public class SdWTMonitorController { return ResponseResult.successData(sdWtMonitorService.getVmsstbprptList(dataSourceRequest)); } + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "根据条件查询水温基础站点列表") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(sdWtMonitorService.getMsstbprptList(dataSourceRequest)); + } + + @GetMapping("/msstbprpt/getStcdInfo") + @Operation(summary = "根据站码查询单条水温基础数据") + public ResponseResult getStcdInfo(@RequestParam String stcd) { + return ResponseResult.successData(sdWtMonitorService.getStcdInfo(stcd)); + } + @PostMapping("/wbsb/GetKendoList") @Operation(summary = "查询水电基地流域字典列表") public ResponseResult getWbsbList(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/DfltkwFacilityCountVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/DfltkwFacilityCountVo.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/DfltkwFacilityCountVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/DfltkwFacilityCountVo.java index 5ed84803..46cafc39 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/DfltkwFacilityCountVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/DfltkwFacilityCountVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/FishSpawnVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/FishSpawnVo.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/FishSpawnVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/FishSpawnVo.java index 4d1c9de6..566b83c8 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/FishSpawnVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/FishSpawnVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/RstcdTreeInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/RstcdTreeInfoVo.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/RstcdTreeInfoVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/RstcdTreeInfoVo.java index d62cab4c..54819070 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/RstcdTreeInfoVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/RstcdTreeInfoVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdAlongDetailVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdAlongDetailVO.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdAlongDetailVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdAlongDetailVO.java index 6496d197..a3188af3 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdAlongDetailVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdAlongDetailVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdAlongVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdAlongVO.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdAlongVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdAlongVO.java index d4a6a7c0..b6559bd6 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdAlongVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdAlongVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdDzChuiXiangListVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdDzChuiXiangListVO.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdDzChuiXiangListVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdDzChuiXiangListVO.java index 90ec997e..df6a7e66 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdDzChuiXiangListVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdDzChuiXiangListVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdMonthDetailVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdMonthDetailVO.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdMonthDetailVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdMonthDetailVO.java index bd26e144..c708410c 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdMonthDetailVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdMonthDetailVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdRvwtSVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdRvwtSVO.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdRvwtSVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdRvwtSVO.java index 0e79bea0..ae6d7108 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdRvwtSVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdRvwtSVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java index 85139154..71894890 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtBaseInfoVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -41,6 +41,9 @@ public class SdWtBaseInfoVO implements Serializable { @Schema(description = "开工日期") private Date ststdt; + @Schema(description = "建设状态") + private String bldsttCcode; + @Schema(description = "建设状态") private String bldsttCcodeName; @@ -65,6 +68,9 @@ public class SdWtBaseInfoVO implements Serializable { @Schema(description = "站码") private String stcd; + @Schema(description = "所属栖息地编码") + private String fhstcd; + @Schema(description = "所属电站编码") private String rstcd; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtMonitorCountVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtMonitorCountVO.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtMonitorCountVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtMonitorCountVO.java index 3e05d905..9a5c397e 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtMonitorCountVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtMonitorCountVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtvtYearVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtvtYearVo.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtvtYearVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtvtYearVo.java index b63b2bd4..65a81f06 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdWtvtYearVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtvtYearVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdYearDetailVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdYearDetailVO.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdYearDetailVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdYearDetailVO.java index 1ba93147..bb3da57c 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdYearDetailVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdYearDetailVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdYearListVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdYearListVO.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdYearListVO.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdYearListVO.java index 570db59e..d4d6d3c6 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SdYearListVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdYearListVO.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/StcdVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/StcdVo.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/StcdVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/StcdVo.java index bd578063..c0cd75f2 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/StcdVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/StcdVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SttpInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SttpInfoVo.java similarity index 95% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SttpInfoVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SttpInfoVo.java index 681f9e78..0b3962b3 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/SttpInfoVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SttpInfoVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WbsbVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WbsbVo.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WbsbVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WbsbVo.java index f205081a..eaccd9ef 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WbsbVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WbsbVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtBaseInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtBaseInfoVo.java new file mode 100644 index 00000000..37d0f22f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtBaseInfoVo.java @@ -0,0 +1,187 @@ +package com.yfd.platform.qgc_env.wt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "水温基础站点信息") +public class WtBaseInfoVo { + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "数据时间") + private Date tm; + + @Schema(description = "站类") + private String sttp; + + @Schema(description = "经度") + private Double lgtd; + + @Schema(description = "纬度") + private Double lttd; + + @Schema(description = "海拔") + private Double elev; + + @Schema(description = "站址") + private String stlc; + + @Schema(description = "测站来源") + private String stsr; + + @Schema(description = "水温断面设备类型") + private Integer wtDeviceType; + + @Schema(description = "水温监测断面类型") + private String wtType; + + @Schema(description = "电站水温结构类型") + private String wts; + + @Schema(description = "固定垂向水温类型") + private Integer wtHgtType; + + @Schema(description = "第一个探头高程") + private Double wtFirstHgt; + + @Schema(description = "垂向水温探头分布") + private String wtDist; + + @Schema(description = "建成日期") + private Date jcdt; + + @Schema(description = "撤站日期") + private Date wddt; + + @Schema(description = "建设状态分类") + private Integer bldsttCode; + + @Schema(description = "建设状态名称") + private String bldsttCcodeName; + + + @Schema(description = "总投资") + private BigDecimal inv; + + @Schema(description = "投资是否计入主体工程") + private Integer invinmn; + + @Schema(description = "简介") + private String introduce; + + @Schema(description = "LOGO") + private String logo; + + @Schema(description = "介绍图片") + private String inffile; + + @Schema(description = "是否启用") + private Integer usfl; + + @Schema(description = "数据是否接入") + private Integer dtin; + + @Schema(description = "数据接入来源") + private String dtinSrc; + + @Schema(description = "数据接入类型") + private Integer dtinType; + + @Schema(description = "数据接入开始时间") + private Date dtinTm; + + @Schema(description = "监测方式") + private Integer mway; + + @Schema(description = "监测方式名称") + private String mwayName; + + @Schema(description = "监测指标") + private String stindx; + + @Schema(description = "排序") + private Integer orderIndex; + + @Schema(description = "所属断面编码") + private String dmstcd; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属电站名称") + private String ennm; + + @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; + + @Schema(description = "行政区编码") + private String addvcd; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "所属栖息地编码") + private String fhstcd; + + @Schema(description = "是否属于测站") + private Integer ispro; + + @Schema(description = "依托项目") + private String project; + + @Schema(description = "数据监测频次") + private Integer dtfrqcy; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "数据来源") + private String vlsr; + + @Schema(description = "数据来源时间") + private Date vlsrTm; + + @Schema(description = "创建人") + private String recordUser; + + @Schema(description = "创建时间") + private Date recordTime; + + @Schema(description = "更新人") + private String modifyUser; + + @Schema(description = "更新时间") + private Date modifyTime; + + @Schema(description = "是否删除") + private Integer isDeleted; + + @Schema(description = "删除人") + private String deleteUser; + + @Schema(description = "删除时间") + private Date deleteTime; +} diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtFishVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtFishVo.java similarity index 85% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtFishVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtFishVo.java index 859a4d46..181aaae2 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtFishVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtFishVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtTreeStcdVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtTreeStcdVo.java similarity index 96% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtTreeStcdVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtTreeStcdVo.java index 541514ba..9ec0fcbe 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtTreeStcdVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtTreeStcdVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvDataVo.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvDataVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvDataVo.java index f788117f..a3b5b195 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvDataVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvDataVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvInfo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvInfo.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvInfo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvInfo.java index 43dc6c2c..75c8b69b 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvInfo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvInfo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java similarity index 87% rename from backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvVo.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java index 1f4a30ed..ac9c0f7d 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/entity/vo/WtrvVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WtrvVo.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.entity.vo; +package com.yfd.platform.qgc_env.wt.entity.vo; import lombok.Data; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/AlongDetailMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongDetailMapper.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/AlongDetailMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongDetailMapper.java index 486b6d8c..3592d50e 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/AlongDetailMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongDetailMapper.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.wt.entity.vo.SdAlongDetailVO; -import com.yfd.platform.env.wt.entity.vo.WtrvInfo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdAlongDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/AlongListMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/AlongListMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java index b5849c7c..0fd45a09 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/AlongListMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java @@ -1,9 +1,9 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.wt.entity.vo.SdAlongVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdAlongVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdDzChuiXiangListMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdDzChuiXiangListMapper.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/SdDzChuiXiangListMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdDzChuiXiangListMapper.java index a9a46a9d..100ec6bc 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdDzChuiXiangListMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdDzChuiXiangListMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.wt.entity.vo.SdDzChuiXiangListVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdDzChuiXiangListVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdRvwtSInOutOneMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdRvwtSInOutOneMapper.java similarity index 94% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/SdRvwtSInOutOneMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdRvwtSInOutOneMapper.java index c3298452..2670ef36 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdRvwtSInOutOneMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdRvwtSInOutOneMapper.java @@ -1,8 +1,8 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.wt.entity.vo.SdRvwtSVO; -import com.yfd.platform.env.wt.entity.vo.StcdVo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdRvwtSVO; +import com.yfd.platform.qgc_env.wt.entity.vo.StcdVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtMonitorMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtMonitorMapper.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtMonitorMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtMonitorMapper.java index b17bdef0..98c88ee4 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtMonitorMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtMonitorMapper.java @@ -1,6 +1,6 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; -import com.yfd.platform.env.wt.entity.vo.SdWtMonitorCountVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdWtMonitorCountVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtrvdrtpSMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtrvdrtpSMapper.java similarity index 93% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtrvdrtpSMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtrvdrtpSMapper.java index 76ea5e53..1ae5ef60 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtrvdrtpSMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtrvdrtpSMapper.java @@ -1,6 +1,6 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; -import com.yfd.platform.env.entity.vo.DataParam; +import com.yfd.platform.qgc_base.entity.vo.DataParam; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtvtRMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtvtRMapper.java similarity index 89% rename from backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtvtRMapper.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtvtRMapper.java index 4357f570..8a514c00 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/mapper/SdWtvtRMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/SdWtvtRMapper.java @@ -1,7 +1,7 @@ -package com.yfd.platform.env.wt.mapper; +package com.yfd.platform.qgc_env.wt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.env.wt.entity.vo.SdWtvtYearVo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdWtvtYearVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/AlongDetailService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/AlongDetailService.java similarity index 87% rename from backend/src/main/java/com/yfd/platform/env/wt/service/AlongDetailService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/AlongDetailService.java index 7ff96690..5465ec79 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/AlongDetailService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/AlongDetailService.java @@ -1,13 +1,13 @@ -package com.yfd.platform.env.wt.service; +package com.yfd.platform.qgc_env.wt.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.GroupResult; -import com.yfd.platform.env.entity.vo.BatchDeleteAo; -import com.yfd.platform.env.wt.entity.vo.SdAlongDetailVO; -import com.yfd.platform.env.wt.entity.vo.WtrvInfo; +import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdAlongDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo; import java.util.Map; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/AlongListService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/AlongListService.java similarity index 83% rename from backend/src/main/java/com/yfd/platform/env/wt/service/AlongListService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/AlongListService.java index 418fc40f..f55a9beb 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/AlongListService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/AlongListService.java @@ -1,10 +1,10 @@ -package com.yfd.platform.env.wt.service; +package com.yfd.platform.qgc_env.wt.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.wt.entity.vo.SdYearListVO; -import com.yfd.platform.env.wt.entity.vo.StcdVo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdYearListVO; +import com.yfd.platform.qgc_env.wt.entity.vo.StcdVo; import org.springframework.web.bind.annotation.RequestBody; import java.util.Map; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/SdDzChuiXiangListService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdDzChuiXiangListService.java similarity index 91% rename from backend/src/main/java/com/yfd/platform/env/wt/service/SdDzChuiXiangListService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdDzChuiXiangListService.java index de4bbff4..086a3235 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/SdDzChuiXiangListService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdDzChuiXiangListService.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.service; +package com.yfd.platform.qgc_env.wt.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/SdRvwtSInOutOneService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdRvwtSInOutOneService.java similarity index 72% rename from backend/src/main/java/com/yfd/platform/env/wt/service/SdRvwtSInOutOneService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdRvwtSInOutOneService.java index 2bd09913..0ac4708b 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/SdRvwtSInOutOneService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdRvwtSInOutOneService.java @@ -1,9 +1,9 @@ -package com.yfd.platform.env.wt.service; +package com.yfd.platform.qgc_env.wt.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.wt.entity.vo.SdRvwtSVO; -import com.yfd.platform.env.wt.entity.vo.StcdVo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdRvwtSVO; +import com.yfd.platform.qgc_env.wt.entity.vo.StcdVo; public interface SdRvwtSInOutOneService { diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java similarity index 62% rename from backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java index 804d4a20..e8aab7ec 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java @@ -1,15 +1,16 @@ -package com.yfd.platform.env.wt.service; +package com.yfd.platform.qgc_env.wt.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.env.wt.entity.vo.DfltkwFacilityCountVo; -import com.yfd.platform.env.wt.entity.vo.FishSpawnVo; -import com.yfd.platform.env.wt.entity.vo.RstcdTreeInfoVo; -import com.yfd.platform.env.wt.entity.vo.SdMonthDetailVO; -import com.yfd.platform.env.wt.entity.vo.SdYearDetailVO; -import com.yfd.platform.env.wt.entity.vo.SttpInfoVo; -import com.yfd.platform.env.wt.entity.vo.WbsbVo; -import com.yfd.platform.env.wt.entity.vo.WtrvVo; +import com.yfd.platform.qgc_env.wt.entity.vo.DfltkwFacilityCountVo; +import com.yfd.platform.qgc_env.wt.entity.vo.FishSpawnVo; +import com.yfd.platform.qgc_env.wt.entity.vo.RstcdTreeInfoVo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdMonthDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdYearDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; import java.util.List; @@ -19,6 +20,10 @@ public interface SdWtMonitorService { DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); + DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); + + WtBaseInfoVo getStcdInfo(String stcd); + DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest); DataSourceResult getWtFishAnalysis(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtvtRService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtvtRService.java similarity index 90% rename from backend/src/main/java/com/yfd/platform/env/wt/service/SdWtvtRService.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtvtRService.java index 9d0e7382..f820339c 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/SdWtvtRService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtvtRService.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.service; +package com.yfd.platform.qgc_env.wt.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/AlongDetailServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/AlongDetailServiceImpl.java similarity index 97% rename from backend/src/main/java/com/yfd/platform/env/wt/service/impl/AlongDetailServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/AlongDetailServiceImpl.java index c52dff2b..d1bb3656 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/AlongDetailServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/AlongDetailServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.service.impl; +package com.yfd.platform.qgc_env.wt.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; @@ -8,12 +8,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.*; import com.yfd.platform.common.exception.BizException; -import com.yfd.platform.env.entity.vo.*; -import com.yfd.platform.env.wt.mapper.AlongDetailMapper; -import com.yfd.platform.env.wt.mapper.SdWtrvdrtpSMapper; -import com.yfd.platform.env.wt.service.AlongDetailService; -import com.yfd.platform.env.wt.entity.vo.SdAlongDetailVO; -import com.yfd.platform.env.wt.entity.vo.WtrvInfo; +import com.yfd.platform.qgc_env.wt.mapper.AlongDetailMapper; +import com.yfd.platform.qgc_env.wt.mapper.SdWtrvdrtpSMapper; +import com.yfd.platform.qgc_env.wt.service.AlongDetailService; +import com.yfd.platform.qgc_env.wt.entity.vo.SdAlongDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo; +import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo; +import com.yfd.platform.qgc_base.entity.vo.DataParam; import com.yfd.platform.utils.CollectionExtUtils; import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.SecurityUtils; @@ -117,8 +118,9 @@ public class AlongDetailServiceImpl extends ServiceImpl list = this.microservicDynamicSQLMapper.pageAllListWithResultType(currentPage, sql.toString(), map, SdAlongDetailVO.class); dataSourceResult.setData(list); dataSourceResult.setTotal(ObjectUtil.isNotEmpty(currentPage) ? currentPage.getTotal() : (long) list.size()); diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/AlongListServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/AlongListServiceImpl.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/wt/service/impl/AlongListServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/AlongListServiceImpl.java index aa5e2168..8529947c 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/AlongListServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/AlongListServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.service.impl; +package com.yfd.platform.qgc_env.wt.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,11 +10,11 @@ import com.yfd.platform.common.DynamicSQLMapper; import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.PageInfo; import com.yfd.platform.common.exception.BizException; -import com.yfd.platform.env.wt.entity.vo.SdAlongVO; -import com.yfd.platform.env.wt.entity.vo.SdYearListVO; -import com.yfd.platform.env.wt.entity.vo.StcdVo; -import com.yfd.platform.env.wt.mapper.AlongListMapper; -import com.yfd.platform.env.wt.service.AlongListService; +import com.yfd.platform.qgc_env.wt.entity.vo.SdAlongVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdYearListVO; +import com.yfd.platform.qgc_env.wt.entity.vo.StcdVo; +import com.yfd.platform.qgc_env.wt.mapper.AlongListMapper; +import com.yfd.platform.qgc_env.wt.service.AlongListService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.SqlUtil; import jakarta.annotation.Resource; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdDzChuiXiangListServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdDzChuiXiangListServiceImpl.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdDzChuiXiangListServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdDzChuiXiangListServiceImpl.java index 9ee64c92..388aa8a3 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdDzChuiXiangListServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdDzChuiXiangListServiceImpl.java @@ -1,13 +1,13 @@ -package com.yfd.platform.env.wt.service.impl; +package com.yfd.platform.qgc_env.wt.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.MicroservicDynamicSQLMapper; -import com.yfd.platform.env.wt.entity.vo.SdDzChuiXiangListVO; -import com.yfd.platform.env.wt.mapper.SdDzChuiXiangListMapper; -import com.yfd.platform.env.wt.service.SdDzChuiXiangListService; +import com.yfd.platform.qgc_env.wt.entity.vo.SdDzChuiXiangListVO; +import com.yfd.platform.qgc_env.wt.mapper.SdDzChuiXiangListMapper; +import com.yfd.platform.qgc_env.wt.service.SdDzChuiXiangListService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdRvwtSInOutOneServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdRvwtSInOutOneServiceImpl.java similarity index 98% rename from backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdRvwtSInOutOneServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdRvwtSInOutOneServiceImpl.java index 68c98d69..6c86008f 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdRvwtSInOutOneServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdRvwtSInOutOneServiceImpl.java @@ -1,4 +1,4 @@ -package com.yfd.platform.env.wt.service.impl; +package com.yfd.platform.qgc_env.wt.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; @@ -6,10 +6,10 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.*; -import com.yfd.platform.env.wt.entity.vo.SdRvwtSVO; -import com.yfd.platform.env.wt.entity.vo.StcdVo; -import com.yfd.platform.env.wt.mapper.SdRvwtSInOutOneMapper; -import com.yfd.platform.env.wt.service.SdRvwtSInOutOneService; +import com.yfd.platform.qgc_env.wt.entity.vo.SdRvwtSVO; +import com.yfd.platform.qgc_env.wt.entity.vo.StcdVo; +import com.yfd.platform.qgc_env.wt.mapper.SdRvwtSInOutOneMapper; +import com.yfd.platform.qgc_env.wt.service.SdRvwtSInOutOneService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java similarity index 87% rename from backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index f9af2aa8..1c7092ec 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -1,22 +1,24 @@ -package com.yfd.platform.env.wt.service.impl; +package com.yfd.platform.qgc_env.wt.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.*; -import com.yfd.platform.env.wt.entity.vo.DfltkwFacilityCountVo; -import com.yfd.platform.env.wt.entity.vo.FishSpawnVo; -import com.yfd.platform.env.wt.entity.vo.RstcdTreeInfoVo; -import com.yfd.platform.env.wt.entity.vo.SdMonthDetailVO; -import com.yfd.platform.env.wt.entity.vo.SdYearDetailVO; -import com.yfd.platform.env.wt.entity.vo.SdWtBaseInfoVO; -import com.yfd.platform.env.wt.entity.vo.SdWtMonitorCountVO; -import com.yfd.platform.env.wt.entity.vo.SttpInfoVo; -import com.yfd.platform.env.wt.entity.vo.WbsbVo; -import com.yfd.platform.env.wt.entity.vo.WtFishVo; -import com.yfd.platform.env.wt.entity.vo.WtTreeStcdVo; -import com.yfd.platform.env.wt.entity.vo.WtrvVo; -import com.yfd.platform.env.wt.mapper.SdWtMonitorMapper; -import com.yfd.platform.env.wt.service.SdWtMonitorService; +import com.yfd.platform.common.exception.BizException; +import com.yfd.platform.qgc_env.wt.entity.vo.DfltkwFacilityCountVo; +import com.yfd.platform.qgc_env.wt.entity.vo.FishSpawnVo; +import com.yfd.platform.qgc_env.wt.entity.vo.RstcdTreeInfoVo; +import com.yfd.platform.qgc_env.wt.entity.vo.SdMonthDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdYearDetailVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdWtBaseInfoVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SdWtMonitorCountVO; +import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtFishVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtTreeStcdVo; +import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; +import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper; +import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import lombok.Data; @@ -78,6 +80,90 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { return result; } + @Override + public WtBaseInfoVo getStcdInfo(String stcd) { + if (StrUtil.isBlank(stcd)) { + throw new BizException("站点编码不能为空!"); + } + String sql = "SELECT " + + "t.STCD AS stcd, " + + "t.STNM AS stnm, " + + "t.TM AS tm, " + + "t.STTP AS sttp, " + + "t.LGTD AS lgtd, " + + "t.LTTD AS lttd, " + + "t.ELEV AS elev, " + + "t.STLC AS stlc, " + + "t.STSR AS stsr, " + + "t.WT_DEVICE_TYPE AS wtDeviceType, " + + "t.WT_TYPE AS wtType, " + + "t.WTS AS wts, " + + "t.WT_HGT_TYPE AS wtHgtType, " + + "t.WT_FIRST_HGT AS wtFirstHgt, " + + "t.WT_DIST AS wtDist, " + + "t.JCDT AS jcdt, " + + "t.WDDT AS wddt, " + + "t.BLDSTT_CODE AS bldsttCode, " + + "CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, "+ + "t.INV AS inv, " + + "t.INVINMN AS invinmn, " + + "t.INTRODUCE AS introduce, " + + "t.LOGO AS logo, " + + "t.INFFILE AS inffile, " + + "t.USFL AS usfl, " + + "t.DTIN AS dtin, " + + "t.DTIN_SRC AS dtinSrc, " + + "t.DTIN_TYPE AS dtinType, " + + "t.DTIN_TM AS dtinTm, " + + "t.MWAY AS mway, " + + "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mwayName , "+ + "t.STINDX AS stindx, " + + "t.ORDER_INDEX AS orderIndex, " + + "t.DMSTCD AS dmstcd, " + + "t.RSTCD AS rstcd, " + + "eng.ENNM AS ennm, " + + "eng.BASE_ID AS baseId, " + + "base.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "eng.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "eng.ADDVCD AS addvcd, " + + "addv.ADDVNM AS addvcdName, " + + "t.FHSTCD AS fhstcd, " + + "t.ISPRO AS ispro, " + + "t.PROJECT AS project, " + + "t.DTFRQCY AS dtfrqcy, " + + "t.REMARK AS remark, " + + "t.VLSR AS vlsr, " + + "t.VLSR_TM AS vlsrTm, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_USER AS modifyUser, " + + "t.MODIFY_TIME AS modifyTime, " + + "t.IS_DELETED AS isDeleted, " + + "t.DELETE_USER AS deleteUser, " + + "t.DELETE_TIME AS deleteTime " + + "FROM SD_WT_B_H t " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " + + "LEFT JOIN SD_HYDROBASE base ON base.BASEID = eng.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD " + + " AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 " + + " AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "WHERE t.STCD = #{map.stcd} " + + " AND NVL(t.IS_DELETED, 0) = 0 "; + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, WtBaseInfoVo.class); + if (list == null || list.isEmpty()) { + return null; + } + return list.get(0); + } + @Override public DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -563,6 +649,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { String stnm = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stnm"); String coenvwState = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "coenvwState"); String dtin = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "dtin"); + String bldsttCcode = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "bldsttCcode"); StringBuilder sql = new StringBuilder(); boolean queryEngDirectly = "ENG".equalsIgnoreCase(sttpCode); boolean queryDwDirectly = StrUtil.isNotBlank(sttpCode) && sttpCode.toUpperCase().startsWith("DW_"); @@ -615,6 +702,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("WHEN dw.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ") .append("WHEN dw.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ") .append("ELSE '未建/规划' END AS bldsttCcodeName, ") + .append("dw.BLDSTT_CODE AS bldsttCcode, ") .append("eng.HBRVCD AS hbrvcd ") .append("FROM SD_DFLTKW_B_H dw ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = dw.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") @@ -643,6 +731,11 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("sttp.FULL_PATH AS sttpFullPath, ") .append("wt.STCD AS stcd, ") .append("wt.RSTCD AS rstcd, ") + .append("CASE ") + .append("WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ") + .append("WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ") + .append("ELSE '未建/规划' END AS bldsttCcodeName, ") + .append("wt.BLDSTT_CODE AS bldsttCcode, ") .append("NULL AS stCode, ") .append("NULL AS stName, ") .append("eng.DVTP AS dvtp, ") @@ -666,10 +759,15 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { paramMap.put("sttpCode", sttpCode); sql.append("AND wt.STTP = #{map.sttpCode} "); } - if (queryDwDirectly && sttpCode != null && !sttpCode.isBlank()) { + if (queryDwDirectly && StrUtil.isNotBlank(sttpCode)) { paramMap.put("sttpCode", sttpCode); sql.append("AND dw.STTP = #{map.sttpCode} "); } + + if (queryDwDirectly && StrUtil.isNotBlank(bldsttCcode)) { + paramMap.put("bldsttCcode", bldsttCcode); + sql.append("AND dw.BLDSTT_CODE = #{map.bldsttCcode} "); + } if (rstcd != null && !rstcd.isBlank()) { paramMap.put("rstcd", rstcd); if (queryEngDirectly) { @@ -744,6 +842,37 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { return result; } + @Override + public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { + List selectFields = dataSourceRequest == null ? null : dataSourceRequest.getSelect(); + String selectSql = buildWtMsstbprptSelectSql(selectFields); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ").append(selectSql).append(" ") + .append("FROM SD_WT_B_H wt ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = wt.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTRV_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) rvRecent ON rvRecent.STCD = wt.STCD ") + .append("LEFT JOIN (SELECT DISTINCT STCD FROM SD_WTVT_R WHERE IS_DELETED = 0 AND TM >= SYSDATE - 1) vtRecent ON vtRecent.STCD = wt.STCD ") + .append("WHERE NVL(wt.IS_DELETED, 0) = 0 AND NVL(wt.DTIN_TYPE, 0) = 0 "); + + Map paramMap = new HashMap<>(); + appendWtMsstbprptFilters(sql, paramMap, dataSourceRequest == null ? null : dataSourceRequest.getFilter()); + sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdWtBaseInfoVO.class); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + @Override public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) { List filters = new ArrayList<>(); @@ -1791,7 +1920,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } else if ("hbrvcd".equals(field)) { orderColumns.add("NVL(hbrvcd, '~') " + dir); } else if ("rstcdStepSort".equals(field)) { - orderColumns.add("NVL(rstcdStepSort, 999999) " + dir); +// orderColumns.add("NVL(rstcdStepSort, 999999) " + dir); } else if ("siteStepSort".equals(field)) { orderColumns.add("NVL(siteStepSort, 999999) " + dir); } else if ("stnm".equals(field)) { @@ -1804,11 +1933,138 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } } if (orderColumns.isEmpty()) { - return " ORDER BY NVL(baseStepSort, 999999) ASC, NVL(rstcdStepSort, 999999) ASC"; + return ""; +// return " ORDER BY NVL(baseStepSort, 999999) ASC, NVL(rstcdStepSort, 999999) ASC"; } return " ORDER BY " + String.join(", ", orderColumns); } + private String buildWtMsstbprptSelectSql(List selectFields) { + Map columnMap = new LinkedHashMap<>(); + columnMap.put("baseName", "hb.BASENAME AS baseName"); + columnMap.put("baseId", "hb.BASEID AS baseId"); + columnMap.put("baseStepSort", "hb.ORDER_INDEX AS baseStepSort"); + columnMap.put("rvcdStepSort", "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort"); + columnMap.put("rstcdStepSort", "eng.ORDER_INDEX AS rstcdStepSort"); + columnMap.put("siteStepSort", "wt.ORDER_INDEX AS siteStepSort"); + columnMap.put("stnm", "wt.STNM AS stnm"); + columnMap.put("ennm", "eng.ENNM AS ennm"); + columnMap.put("jcdt", "wt.JCDT AS jcdt"); + columnMap.put("stindx", "wt.STINDX AS stindx"); + columnMap.put("coenvwState", "CASE WHEN wt.STTP = 'WTRV' AND rvRecent.STCD IS NOT NULL THEN 1 WHEN wt.STTP = 'WTVT' AND vtRecent.STCD IS NOT NULL THEN 1 ELSE 0 END AS coenvwState"); + columnMap.put("sttpCode", "wt.STTP AS sttpCode"); + columnMap.put("sttpName", "sttp.STTP_NAME AS sttpName"); + columnMap.put("sttpFullPath", "sttp.FULL_PATH AS sttpFullPath"); + columnMap.put("stcd", "wt.STCD AS stcd"); + columnMap.put("fhstcd", "wt.FHSTCD AS fhstcd"); + columnMap.put("rstcd", "wt.RSTCD AS rstcd"); + columnMap.put("bldsttCcodeName", "CASE WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); + columnMap.put("bldsttCcode", "wt.BLDSTT_CODE AS bldsttCcode"); + columnMap.put("stCode", "NULL AS stCode"); + columnMap.put("stName", "NULL AS stName"); + columnMap.put("dvtp", "eng.DVTP AS dvtp"); + columnMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); + + List actualColumns = new ArrayList<>(); + if (selectFields != null && !selectFields.isEmpty()) { + for (String field : selectFields) { + String column = columnMap.get(field); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(columnMap.values()); + } + return String.join(", ", actualColumns); + } + + private void appendWtMsstbprptFilters(StringBuilder sql, + Map paramMap, + DataSourceRequest.FilterDescriptor filter) { + List filters = new ArrayList<>(); + collectFilters(filter, filters); + for (DataSourceRequest.FilterDescriptor descriptor : filters) { + String field = descriptor.getField(); + String operator = descriptor.getOperator(); + Object value = descriptor.getValue(); + if (StrUtil.isBlank(field) || StrUtil.isBlank(operator)) { + continue; + } + String paramKey = "wtMsst_" + field + "_" + paramMap.size(); + if ("fhstcd".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.FHSTCD", operator, value); + } else if ("sttpCode".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STTP", operator, value); + } else if ("stcd".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STCD", operator, value); + } else if ("stnm".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.STNM", operator, value); + } else if ("rstcd".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.RSTCD", operator, value); + } else if ("baseId".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "eng.BASE_ID", operator, value); + } else if ("mway".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.MWAY", operator, value); + } else if ("dtin".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.DTIN", operator, value); + } else if ("bldsttCcode".equals(field)) { + appendWtMsstbprptLeaf(sql, paramMap, paramKey, "wt.BLDSTT_CODE", operator, value); + } + } + } + + private void appendWtMsstbprptLeaf(StringBuilder sql, + Map paramMap, + String paramKey, + String column, + String operator, + Object value) { + switch (operator) { + case "eq": + sql.append("AND ").append(column).append(" = #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, value); + break; + case "neq": + sql.append("AND ").append(column).append(" <> #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, value); + break; + case "contains": + sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, "%" + value + "%"); + break; + case "startswith": + sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, value + "%"); + break; + case "endswith": + sql.append("AND ").append(column).append(" LIKE #{map.").append(paramKey).append("} "); + paramMap.put(paramKey, "%" + value); + break; + case "in": + if (value instanceof List && !((List) value).isEmpty()) { + List values = (List) value; + List placeholders = new ArrayList<>(); + for (int i = 0; i < values.size(); i++) { + String itemKey = paramKey + "_" + i; + placeholders.add("#{map." + itemKey + "}"); + paramMap.put(itemKey, values.get(i)); + } + sql.append("AND ").append(column).append(" IN (").append(String.join(", ", placeholders)).append(") "); + } + break; + case "isnull": + sql.append("AND ").append(column).append(" IS NULL "); + break; + case "isnotnull": + sql.append("AND ").append(column).append(" IS NOT NULL "); + break; + default: + break; + } + } + private void collectFilters(DataSourceRequest.FilterDescriptor filter, List result) { if (filter == null) { return; diff --git a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtvtRServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtvtRServiceImpl.java similarity index 92% rename from backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtvtRServiceImpl.java rename to backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtvtRServiceImpl.java index 22d28686..bb59d92e 100644 --- a/backend/src/main/java/com/yfd/platform/env/wt/service/impl/SdWtvtRServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtvtRServiceImpl.java @@ -1,13 +1,13 @@ -package com.yfd.platform.env.wt.service.impl; +package com.yfd.platform.qgc_env.wt.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.MicroservicDynamicSQLMapper; -import com.yfd.platform.env.wt.entity.vo.SdWtvtYearVo; -import com.yfd.platform.env.wt.mapper.SdWtvtRMapper; -import com.yfd.platform.env.wt.service.SdWtvtRService; +import com.yfd.platform.qgc_env.wt.entity.vo.SdWtvtYearVo; +import com.yfd.platform.qgc_env.wt.mapper.SdWtvtRMapper; +import com.yfd.platform.qgc_env.wt.service.SdWtvtRService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java new file mode 100644 index 00000000..534b6b8b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java @@ -0,0 +1,43 @@ +package com.yfd.platform.qgc_env.zq.controller; + +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_env.zq.service.ZqMonitorService; +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.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/zq") +@Tag(name = "水文流量站监测") +@Validated +public class ZqMonitorController { + + @Resource + private ZqMonitorService zqMonitorService; + + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "根据条件查询水文流量站基础数据") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(zqMonitorService.getMsstbprptList(dataSourceRequest)); + } + + @PostMapping("/river/GetKendoListCust") + @Operation(summary = "查询流量站实时数据") + public ResponseResult getRiverKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(zqMonitorService.getRiverKendoListCust(dataSourceRequest)); + } + + @GetMapping("/msstbprpt/getStcdInfo") + @Operation(summary = "根据站码查询单条水文站基础数据") + public ResponseResult getStcdInfo(@RequestParam String stcd) { + return ResponseResult.successData(zqMonitorService.getStcdInfo(stcd)); + } +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqBaseInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqBaseInfoVo.java new file mode 100644 index 00000000..0dfcbd38 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqBaseInfoVo.java @@ -0,0 +1,161 @@ +package com.yfd.platform.qgc_env.zq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + +@Data +@Schema(description = "水文站基础站点信息") +public class ZqBaseInfoVo { + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "数据时间") + private Date tm; + + @Schema(description = "站类") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "经度") + private Double lgtd; + + @Schema(description = "纬度") + private Double lttd; + + @Schema(description = "海拔") + private Double elev; + + @Schema(description = "站址") + private String stlc; + + @Schema(description = "建成日期") + private Date jcdt; + + @Schema(description = "撤站日期") + private Date wddt; + + @Schema(description = "建设状态分类") + private Integer bldsttCode; + + @Schema(description = "建设状态名称") + private String bldsttCcodeName; + + @Schema(description = "简介") + private String introduce; + + @Schema(description = "LOGO") + private String logo; + + @Schema(description = "介绍图片") + private String inffile; + + @Schema(description = "是否启用") + private Integer usfl; + + @Schema(description = "数据是否接入") + private Integer dtin; + + @Schema(description = "数据接入来源") + private String dtinSrc; + + @Schema(description = "数据接入类型") + private Integer dtinType; + + @Schema(description = "数据接入开始时间") + private Date dtinTm; + + @Schema(description = "监测方式") + private Integer mway; + + @Schema(description = "监测方式名称") + private String mwayName; + + @Schema(description = "监测指标") + private String stindx; + + @Schema(description = "排序") + private Integer orderIndex; + + @Schema(description = "所属断面编码") + private String dmstcd; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属电站名称") + private String ennm; + + @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; + + @Schema(description = "行政区编码") + private String addvcd; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "所属栖息地编码") + private String fhstcd; + + @Schema(description = "是否属于测站") + private Integer ispro; + + @Schema(description = "依托项目") + private String project; + + @Schema(description = "数据监测频次") + private Integer dtfrqcy; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "数据来源") + private String vlsr; + + @Schema(description = "数据来源时间") + private Date vlsrTm; + + @Schema(description = "创建人") + private String recordUser; + + @Schema(description = "创建时间") + private Date recordTime; + + @Schema(description = "更新人") + private String modifyUser; + + @Schema(description = "更新时间") + private Date modifyTime; + + @Schema(description = "是否删除") + private Integer isDeleted; + + @Schema(description = "删除人") + private String deleteUser; + + @Schema(description = "删除时间") + private Date deleteTime; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqRiverDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqRiverDataVo.java new file mode 100644 index 00000000..56c59541 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqRiverDataVo.java @@ -0,0 +1,87 @@ +package com.yfd.platform.qgc_env.zq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "流量站实时数据") +public class ZqRiverDataVo { + + @Schema(description = "流量") + private BigDecimal q; + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "流速") + private BigDecimal v; + + @Schema(description = "所属电站名称") + private String ennm; + + @Schema(description = "时间") + private Date tm; + + @Schema(description = "水位") + private BigDecimal z; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "站址") + private String stlc; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "流域编码") + private String rvcd; + + @Schema(description = "流域名称") + private String rvcdName; + + @Schema(description = "基地流域编码") + private String hbrvcd; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "建设状态分类") + private Integer bldsttCcode; + + @Schema(description = "视频站编码聚合") + private String vdid; + + @Schema(description = "水位视频名称") + private String rzVideo; + + @Schema(description = "流速视频名称") + private String speedVideo; + + @Schema(description = "水位视频路径") + private String rzVideoPath; + + @Schema(description = "流速视频路径") + private String speedVideoPath; + + @Schema(description = "基地排序") + private Integer baseStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "站点排序") + private Integer siteStepSort; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java new file mode 100644 index 00000000..1eff40a1 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java @@ -0,0 +1,15 @@ +package com.yfd.platform.qgc_env.zq.service; + +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo; +import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDataVo; + +public interface ZqMonitorService { + + DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); + + DataSourceResult getRiverKendoListCust(DataSourceRequest dataSourceRequest); + + ZqBaseInfoVo getStcdInfo(String stcd); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java new file mode 100644 index 00000000..21e5cd7e --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java @@ -0,0 +1,944 @@ +package com.yfd.platform.qgc_env.zq.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.DataSourceLoadOptionsBase; +import com.yfd.platform.common.DataSourceRequest; +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.common.exception.BizException; +import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; +import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo; +import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDataVo; +import com.yfd.platform.qgc_env.zq.service.ZqMonitorService; +import com.yfd.platform.utils.QgcQueryWrapperUtil; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class ZqMonitorServiceImpl implements ZqMonitorService { + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Override + public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM SD_RIVER_B_H t ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ") + .append(" AND hbrv.BASEID = eng.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append(" AND NVL(hbrv.ENABLED, 1) = 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 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildMsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, ZqBaseInfoVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + String groupField = "dtinType"; + String groupColumn = "t.DTIN_TYPE"; + String groupDir = "ASC"; + if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) { + DataSourceRequest.GroupDescriptor groupDescriptor = dataSourceRequest.getGroup().get(0); + if (groupDescriptor != null && StrUtil.isNotBlank(groupDescriptor.getField())) { + groupField = groupDescriptor.getField(); + String mappedColumn = mapMsstbprptColumn(groupField); + if (StrUtil.isNotBlank(mappedColumn)) { + groupColumn = mappedColumn; + } + if ("desc".equalsIgnoreCase(groupDescriptor.getDir()) || "des".equalsIgnoreCase(groupDescriptor.getDir())) { + groupDir = "DESC"; + } + } + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(groupColumn).append(" AS ").append(groupField.toUpperCase()).append(", ") + .append("COUNT(*) AS COUNT_").append(groupField.toUpperCase()).append(" ") + .append("FROM SD_RIVER_B_H t ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(t.IS_DELETED, 0) = 0 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append("GROUP BY ").append(groupColumn).append(" ") + .append("ORDER BY ").append(groupColumn).append(" ").append(groupDir); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult(); + result.setData(toMsstbprptLegacyGroups(rows, groupField)); + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + @Override + public DataSourceResult getRiverKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryRiverDetailList(dataSourceRequest, loadOptions); + } + return queryRiverGroupList(dataSourceRequest, loadOptions); + } + + @Override + public ZqBaseInfoVo getStcdInfo(String stcd) { + if (StrUtil.isBlank(stcd)) { + throw new BizException("站点编码不能为空!"); + } + String sql = "SELECT " + + "t.STCD AS stcd, " + + "t.STNM AS stnm, " + + "t.TM AS tm, " + + "t.STTP AS sttp, " + + "t.LGTD AS lgtd, " + + "t.LTTD AS lttd, " + + "t.ELEV AS elev, " + + "t.STLC AS stlc, " + + "t.JCDT AS jcdt, " + + "t.WDDT AS wddt, " + + "t.BLDSTT_CODE AS bldsttCode, " + + "CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, " + + "t.INTRODUCE AS introduce, " + + "t.LOGO AS logo, " + + "t.INFFILE AS inffile, " + + "t.USFL AS usfl, " + + "t.DTIN AS dtin, " + + "t.DTIN_SRC AS dtinSrc, " + + "t.DTIN_TYPE AS dtinType, " + + "t.DTIN_TM AS dtinTm, " + + "t.MWAY AS mway, " + + "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mwayName, " + + "t.STINDX AS stindx, " + + "t.ORDER_INDEX AS orderIndex, " + + "t.DMSTCD AS dmstcd, " + + "t.RSTCD AS rstcd, " + + "eng.ENNM AS ennm, " + + "eng.BASE_ID AS baseId, " + + "base.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "eng.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "eng.ADDVCD AS addvcd, " + + "addv.ADDVNM AS addvcdName, " + + "t.FHSTCD AS fhstcd, " + + "t.ISPRO AS ispro, " + + "t.PROJECT AS project, " + + "t.DTFRQCY AS dtfrqcy, " + + "t.REMARK AS remark, " + + "t.VLSR AS vlsr, " + + "t.VLSR_TM AS vlsrTm, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_USER AS modifyUser, " + + "t.MODIFY_TIME AS modifyTime, " + + "t.IS_DELETED AS isDeleted, " + + "t.DELETE_USER AS deleteUser, " + + "t.DELETE_TIME AS deleteTime " + + "FROM SD_RIVER_B_H t " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD " + + "LEFT JOIN SD_HYDROBASE base ON base.BASEID = eng.BASE_ID AND NVL(base.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD " + + " AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 " + + " AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "WHERE t.STCD = #{map.stcd} " + + " AND NVL(t.IS_DELETED, 0) = 0 "; + Map paramMap = new HashMap<>(); + paramMap.put("stcd", stcd); + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql, paramMap, ZqBaseInfoVo.class); + if (list == null || list.isEmpty()) { + return null; + } + return list.get(0); + } + + private DataSourceResult queryRiverDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildRiverDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildRiverCoreSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildRiverFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildRiverOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, ZqRiverDataVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryRiverGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + + StringBuilder sql = new StringBuilder("SELECT "); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapRiverColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapRiverColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildRiverAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + sql.append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildRiverCoreSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildRiverFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapRiverColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildRiverGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult(); + if (dataSourceRequest.getGroupResultFlat() != null && dataSourceRequest.getGroupResultFlat()) { + result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData(new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildRiverCoreSql() { + return "SELECT " + + "rr.Q AS q, " + + "rr.STCD AS stcd, " + + "rb.STNM AS stnm, " + + "rr.V AS v, " + + "eng.ENNM AS ennm, " + + "rr.TM AS tm, " + + "rr.Z AS z, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "rb.STLC AS stlc, " + + "rb.RSTCD AS rstcd, " + + "eng.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "rb.BLDSTT_CODE AS bldsttCcode, " + + "LISTAGG(vdb.STCD, ',') WITHIN GROUP(ORDER BY vdb.STCD) AS vdid, " + + "CASE " + + " WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') > 0 " + + " THEN CASE WHEN INSTR(SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1), '水位') > 0 " + + " THEN SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1) " + + " ELSE SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), 1, INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') - 1) END " + + " ELSE CASE WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), '水位') > 0 THEN LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD) END " + + "END AS rzVideo, " + + "CASE " + + " WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') > 0 " + + " THEN CASE WHEN INSTR(SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1), '流速') > 0 " + + " THEN SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1) " + + " ELSE SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), 1, INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') - 1) END " + + " ELSE CASE WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), '流速') > 0 THEN LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD) END " + + "END AS speedVideo, " + + "CASE " + + " WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') > 0 " + + " THEN CASE WHEN INSTR(SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1), '水位') > 0 " + + " THEN SUBSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1) " + + " ELSE SUBSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), 1, INSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') - 1) END " + + " ELSE CASE WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), '水位') > 0 THEN LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD) END " + + "END AS rzVideoPath, " + + "CASE " + + " WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') > 0 " + + " THEN CASE WHEN INSTR(SUBSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1), '流速') > 0 " + + " THEN SUBSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), INSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') + 1) " + + " ELSE SUBSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), 1, INSTR(LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD), ',') - 1) END " + + " ELSE CASE WHEN INSTR(LISTAGG(vdr.FLNM, ',') WITHIN GROUP(ORDER BY vdb.STCD), '流速') > 0 THEN LISTAGG(vdr.FLPTH, ',') WITHIN GROUP(ORDER BY vdb.STCD) END " + + "END AS speedVideoPath, " + + "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + + "NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " + + "NVL(rstSort.SORT, 999999) AS rstcdStepSort, " + + "NVL(siteSort.SORT, 999999) AS siteStepSort " + + "FROM SD_RIVER_R rr " + + "INNER JOIN SD_RIVER_B_H rb ON rb.STCD = rr.STCD AND rb.STTP = 'ZQ' AND NVL(rb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = rb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + + "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = rb.RSTCD " + + "LEFT JOIN ( " + + " SELECT det.SORT, cfg.RVCD, det.STCD " + + " FROM MS_ALONGDET_B det " + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + + ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = rb.STCD " + + "LEFT JOIN SD_VDINFO_B vdb ON vdb.CSTCD = rr.STCD AND NVL(vdb.USFL, 1) = 1 " + + "LEFT JOIN SD_VDINFO_R vdr ON vdr.STCD = vdb.STCD AND vdr.TM = rr.TM AND NVL(vdr.IS_DELETED, 0) = 0 " + + "WHERE NVL(rr.IS_DELETED, 0) = 0 " + + "GROUP BY rr.Q, rr.STCD, rb.STNM, rr.V, eng.ENNM, rr.TM, rr.Z, eng.BASE_ID, hb.BASENAME, rb.STLC, rb.RSTCD, " + + "eng.RVCD, rv.RVNM, eng.HBRVCD, hbrv.HBRVNM, rb.BLDSTT_CODE, hb.ORDER_INDEX, along.ORDER_INDEX, rstSort.SORT, siteSort.SORT"; + } + + private String buildRiverFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildRiverLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildRiverFilterCondition(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 buildRiverLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String field = filter.getField(); + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("vdid".equalsIgnoreCase(field)) { + return buildRiverVdidCondition(operator, value, paramMap, indexHolder); + } + + String column = mapRiverColumn(field); + if (StrUtil.isBlank(column)) { + return ""; + } + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + boolean dateField = "tm".equalsIgnoreCase(field); + if ("in".equals(operator)) { + List values = normalizeRiverValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "zqRiverP" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add(buildRiverValueExpr(key, dateField, item)); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + + String key = "zqRiverP" + indexHolder[0]++; + String valueExpr = buildRiverValueExpr(key, dateField, value); + return switch (operator) { + case "eq" -> { + paramMap.put(key, value); + yield column + " = " + valueExpr; + } + case "neq" -> { + paramMap.put(key, value); + yield column + " <> " + valueExpr; + } + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> { + paramMap.put(key, value); + yield column + " > " + valueExpr; + } + case "gte" -> { + paramMap.put(key, value); + yield column + " >= " + valueExpr; + } + case "lt" -> { + paramMap.put(key, value); + yield column + " < " + valueExpr; + } + case "lte" -> { + paramMap.put(key, value); + yield column + " <= " + valueExpr; + } + default -> ""; + }; + } + + private String buildRiverVdidCondition(String operator, + Object value, + Map paramMap, + int[] indexHolder) { + List values; + if ("in".equals(operator)) { + values = normalizeRiverValues(value); + } else if (value == null) { + return ""; + } else { + values = List.of(value); + } + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "zqRiverP" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add("#{map." + key + "}"); + } + if ("neq".equals(operator)) { + return " NOT EXISTS (SELECT 1 FROM SD_VDINFO_B vdb WHERE vdb.CSTCD = t.STCD AND vdb.STCD IN (" + String.join(", ", placeholders) + "))"; + } + return " EXISTS (SELECT 1 FROM SD_VDINFO_B vdb WHERE vdb.CSTCD = t.STCD AND vdb.STCD IN (" + String.join(", ", placeholders) + "))"; + } + + private List normalizeRiverValues(Object value) { + if (value == null) { + return new ArrayList<>(); + } + if (value instanceof List list) { + return new ArrayList<>(list); + } + String text = String.valueOf(value).trim(); + if (StrUtil.isBlank(text)) { + return new ArrayList<>(); + } + if (text.startsWith("[") && text.endsWith("]")) { + text = text.substring(1, text.length() - 1); + } + List values = new ArrayList<>(); + for (String item : text.split(",")) { + String trimmed = StrUtil.trim(item); + if (StrUtil.isNotBlank(trimmed)) { + values.add(StrUtil.removeAll(trimmed, "\"")); + } + } + return values; + } + + private String buildRiverValueExpr(String paramKey, boolean dateField, Object value) { + if (!dateField || value == null) { + return "#{map." + paramKey + "}"; + } + String text = String.valueOf(value).trim(); + if (text.length() <= 10) { + return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')"; + } + return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')"; + } + + private String mapRiverColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "q" -> "t.Q"; + case "stcd" -> "t.STCD"; + case "stnm" -> "t.STNM"; + case "v" -> "t.V"; + case "ennm" -> "t.ENNM"; + case "tm" -> "t.TM"; + case "z" -> "t.Z"; + case "baseId" -> "t.BASEID"; + case "baseName" -> "t.BASENAME"; + case "stlc" -> "t.STLC"; + case "rstcd" -> "t.RSTCD"; + case "rvcd" -> "t.RVCD"; + case "rvcdName" -> "t.RVCDNAME"; + case "hbrvcd" -> "t.HBRVCD"; + case "hbrvcdName" -> "t.HBRVCDNAME"; + case "bldsttCcode" -> "t.BLDSTTCCODE"; + case "rzVideo" -> "t.RZVIDEO"; + case "speedVideo" -> "t.SPEEDVIDEO"; + case "baseStepSort" -> "t.BASESTEPSORT"; + case "rvcdStepSort" -> "t.RVCDSTEPSORT"; + case "rstcdStepSort" -> "t.RSTCDSTEPSORT"; + case "siteStepSort" -> "t.SITESTEPSORT"; + default -> null; + }; + } + + private String buildRiverDetailSelectSql(List selectFields) { + Map selectMap = new LinkedHashMap<>(); + selectMap.put("q", "t.Q AS q"); + selectMap.put("stcd", "t.STCD AS stcd"); + selectMap.put("stnm", "t.STNM AS stnm"); + selectMap.put("v", "t.V AS v"); + selectMap.put("ennm", "t.ENNM AS ennm"); + selectMap.put("tm", "t.TM AS tm"); + selectMap.put("z", "t.Z AS z"); + selectMap.put("baseId", "t.BASEID AS baseId"); + selectMap.put("baseName", "t.BASENAME AS baseName"); + selectMap.put("stlc", "t.STLC AS stlc"); + selectMap.put("rstcd", "t.RSTCD AS rstcd"); + selectMap.put("rvcd", "t.RVCD AS rvcd"); + selectMap.put("rvcdName", "t.RVCDNAME AS rvcdName"); + selectMap.put("hbrvcd", "t.HBRVCD AS hbrvcd"); + selectMap.put("hbrvcdName", "t.HBRVCDNAME AS hbrvcdName"); + selectMap.put("bldsttCcode", "t.BLDSTTCCODE AS bldsttCcode"); + selectMap.put("vdid", "t.VDID AS vdid"); + selectMap.put("rzVideo", "t.RZVIDEO AS rzVideo"); + selectMap.put("speedVideo", "t.SPEEDVIDEO AS speedVideo"); + selectMap.put("rzVideoPath", "t.RZVIDEOPATH AS rzVideoPath"); + selectMap.put("speedVideoPath", "t.SPEEDVIDEOPATH AS speedVideoPath"); + selectMap.put("baseStepSort", "t.BASESTEPSORT AS baseStepSort"); + selectMap.put("rvcdStepSort", "t.RVCDSTEPSORT AS rvcdStepSort"); + selectMap.put("rstcdStepSort", "t.RSTCDSTEPSORT AS rstcdStepSort"); + selectMap.put("siteStepSort", "t.SITESTEPSORT AS siteStepSort"); + + if (CollUtil.isEmpty(selectFields)) { + return String.join(", ", selectMap.values()); + } + List actualColumns = new ArrayList<>(); + for (String selectField : selectFields) { + String column = selectMap.get(selectField); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(selectMap.values()); + } + return String.join(", ", actualColumns); + } + + private String buildRiverOrderBySql(List 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"; + } + List orderColumns = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String column = mapRiverColumn(sortDescriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderColumns.add(column + " " + dir + " NULLS LAST"); + } + if (orderColumns.isEmpty()) { + return " ORDER BY t.BASESTEPSORT ASC, t.RVCDSTEPSORT ASC, t.RSTCDSTEPSORT ASC, t.SITESTEPSORT ASC, t.STCD ASC, t.TM DESC"; + } + return " ORDER BY " + String.join(", ", orderColumns); + } + + private String buildRiverGroupOrderBySql(List groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapRiverColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + + private String buildRiverAggregateSql(String aggregate, String column, String field) { + String normalized = aggregate == null ? "" : aggregate.toLowerCase(); + return switch (normalized) { + case "sum", "min", "max", "avg", "count" -> + normalized.toUpperCase() + "(" + column + ") AS " + normalized + "_" + field; + default -> ""; + }; + } + + private String buildMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildMsstbprptLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildMsstbprptFilterCondition(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 buildMsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapMsstbprptColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeMsstbprptValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = "zqMsstP" + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add("#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + + String paramKey = "zqMsstP" + indexHolder[0]++; + switch (operator) { + case "eq": + paramMap.put(paramKey, value); + return column + " = #{map." + paramKey + "}"; + case "neq": + paramMap.put(paramKey, value); + return column + " <> #{map." + paramKey + "}"; + case "contains": + paramMap.put(paramKey, "%" + value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "startswith": + paramMap.put(paramKey, value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "endswith": + paramMap.put(paramKey, "%" + value); + return column + " LIKE #{map." + paramKey + "}"; + case "gt": + paramMap.put(paramKey, value); + return column + " > #{map." + paramKey + "}"; + case "gte": + paramMap.put(paramKey, value); + return column + " >= #{map." + paramKey + "}"; + case "lt": + paramMap.put(paramKey, value); + return column + " < #{map." + paramKey + "}"; + case "lte": + paramMap.put(paramKey, value); + return column + " <= #{map." + paramKey + "}"; + default: + return ""; + } + } + + private List normalizeMsstbprptValues(Object value) { + if (value == null) { + return new ArrayList<>(); + } + if (value instanceof List list) { + return new ArrayList<>(list); + } + String text = String.valueOf(value).trim(); + if (StrUtil.isBlank(text)) { + return new ArrayList<>(); + } + if (text.startsWith("[") && text.endsWith("]")) { + text = text.substring(1, text.length() - 1); + } + List values = new ArrayList<>(); + for (String item : text.split(",")) { + String trimmed = StrUtil.trim(item); + if (StrUtil.isNotBlank(trimmed)) { + values.add(StrUtil.removeAll(trimmed, "\"")); + } + } + return values; + } + + private String mapMsstbprptColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "isDeleted" -> "NVL(t.IS_DELETED, 0)"; + case "sttpCode" -> "t.STTP"; + case "mway" -> "t.MWAY"; + case "dtinType" -> "t.DTIN_TYPE"; + case "stcd" -> "t.STCD"; + case "stnm" -> "t.STNM"; + case "fhstcd" -> "t.FHSTCD"; + case "baseId" -> "eng.BASE_ID"; + case "dtin" -> "t.DTIN"; + case "rstcd" -> "t.RSTCD"; + default -> null; + }; + } + + private String buildMsstbprptDetailSelectSql(List selectFields) { + Map selectMap = new LinkedHashMap<>(); + selectMap.put("stcd", "t.STCD AS stcd"); + selectMap.put("stnm", "t.STNM AS stnm"); + selectMap.put("tm", "t.TM AS tm"); + selectMap.put("sttp", "t.STTP AS sttp"); + selectMap.put("sttpCode", "t.STTP AS sttpCode"); + selectMap.put("lgtd", "t.LGTD AS lgtd"); + selectMap.put("lttd", "t.LTTD AS lttd"); + selectMap.put("elev", "t.ELEV AS elev"); + selectMap.put("stlc", "t.STLC AS stlc"); + selectMap.put("jcdt", "t.JCDT AS jcdt"); + selectMap.put("wddt", "t.WDDT AS wddt"); + selectMap.put("bldsttCode", "t.BLDSTT_CODE AS bldsttCode"); + selectMap.put("bldsttCcodeName", "CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); + selectMap.put("introduce", "t.INTRODUCE AS introduce"); + selectMap.put("logo", "t.LOGO AS logo"); + selectMap.put("inffile", "t.INFFILE AS inffile"); + selectMap.put("usfl", "t.USFL AS usfl"); + selectMap.put("dtin", "t.DTIN AS dtin"); + selectMap.put("dtinSrc", "t.DTIN_SRC AS dtinSrc"); + selectMap.put("dtinType", "t.DTIN_TYPE AS dtinType"); + selectMap.put("dtinTm", "t.DTIN_TM AS dtinTm"); + selectMap.put("mway", "t.MWAY AS mway"); + selectMap.put("mwayName", "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mwayName"); + selectMap.put("stindx", "t.STINDX AS stindx"); + selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex"); + selectMap.put("dmstcd", "t.DMSTCD AS dmstcd"); + selectMap.put("rstcd", "t.RSTCD AS rstcd"); + selectMap.put("ennm", "eng.ENNM AS ennm"); + selectMap.put("baseId", "eng.BASE_ID AS baseId"); + selectMap.put("baseName", "hb.BASENAME AS baseName"); + selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd"); + selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName"); + selectMap.put("rvcd", "eng.RVCD AS rvcd"); + selectMap.put("rvcdName", "rv.RVNM AS rvcdName"); + selectMap.put("addvcd", "eng.ADDVCD AS addvcd"); + selectMap.put("addvcdName", "addv.ADDVNM AS addvcdName"); + selectMap.put("fhstcd", "t.FHSTCD AS fhstcd"); + selectMap.put("ispro", "t.ISPRO AS ispro"); + selectMap.put("project", "t.PROJECT AS project"); + selectMap.put("dtfrqcy", "t.DTFRQCY AS dtfrqcy"); + selectMap.put("remark", "t.REMARK AS remark"); + selectMap.put("vlsr", "t.VLSR AS vlsr"); + selectMap.put("vlsrTm", "t.VLSR_TM AS vlsrTm"); + selectMap.put("recordUser", "t.RECORD_USER AS recordUser"); + selectMap.put("recordTime", "t.RECORD_TIME AS recordTime"); + selectMap.put("modifyUser", "t.MODIFY_USER AS modifyUser"); + selectMap.put("modifyTime", "t.MODIFY_TIME AS modifyTime"); + selectMap.put("isDeleted", "t.IS_DELETED AS isDeleted"); + selectMap.put("deleteUser", "t.DELETE_USER AS deleteUser"); + selectMap.put("deleteTime", "t.DELETE_TIME AS deleteTime"); + + if (CollUtil.isEmpty(selectFields)) { + return String.join(", ", selectMap.values()); + } + + List actualColumns = new ArrayList<>(); + for (String selectField : selectFields) { + String column = selectMap.get(selectField); + if (StrUtil.isNotBlank(column)) { + actualColumns.add(column); + } + } + if (actualColumns.isEmpty()) { + actualColumns.addAll(selectMap.values()); + } + return String.join(", ", actualColumns); + } + + private List> toMsstbprptLegacyGroups(List> rows, String groupField) { + List> result = new ArrayList<>(); + if (rows == null) { + return result; + } + String upperField = groupField == null ? "DTINTYPE" : groupField.toUpperCase(); + String countField = "COUNT_" + upperField; + String aggregateKey = "count_" + groupField; + for (Map row : rows) { + Object key = row.get(upperField); + if (key == null) { + key = row.get(groupField); + } + Object countValue = row.get(countField); + if (countValue == null) { + countValue = row.get("count_" + upperField); + } + long count = 0L; + if (countValue instanceof Number number) { + count = number.longValue(); + } else if (countValue != null) { + count = Long.parseLong(String.valueOf(countValue)); + } + + Map item = new LinkedHashMap<>(); + item.put("key", key); + item.put("keyName", null); + item.put("keyExt", new HashMap<>()); + + Map detail = new LinkedHashMap<>(); + detail.put(upperField, key); + detail.put(countField, count); + item.put("items", List.of(detail)); + item.put("count", count); + item.put("summary", new Object[0]); + + Map aggregates = new LinkedHashMap<>(); + aggregates.put(aggregateKey, count); + item.put("aggregates", aggregates); + result.add(item); + } + return result; + } + + private String buildMsstbprptDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; + } + List orderColumns = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String column = switch (sortDescriptor.getField()) { + case "stcd" -> "t.STCD"; + case "stnm" -> "t.STNM"; + case "tm" -> "t.TM"; + case "sttp", "sttpCode" -> "t.STTP"; + case "jcdt" -> "t.JCDT"; + case "rstcd" -> "t.RSTCD"; + case "ennm" -> "eng.ENNM"; + case "baseId" -> "eng.BASE_ID"; + case "baseName" -> "hb.BASENAME"; + case "hbrvcd" -> "eng.HBRVCD"; + case "rvcd" -> "eng.RVCD"; + case "fhstcd" -> "t.FHSTCD"; + case "mway" -> "t.MWAY"; + case "dtin" -> "t.DTIN"; + case "dtinType" -> "t.DTIN_TYPE"; + case "orderIndex" -> "t.ORDER_INDEX"; + default -> null; + }; + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderColumns.add(column + " " + dir + " NULLS LAST"); + } + if (orderColumns.isEmpty()) { + return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC "; + } + return " ORDER BY " + String.join(", ", orderColumns); + } +} diff --git a/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java b/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java index e3183674..a0572066 100644 --- a/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java +++ b/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java @@ -4,11 +4,11 @@ import cn.hutool.json.JSONUtil; import cn.hutool.jwt.JWTUtil; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.WebConfig; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.service.ISysUserDataScopeService; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.service.ISdEngInfoBHService; -import com.yfd.platform.env.service.ISdHbrvDicService; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.service.ISysUserDataScopeService; +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; +import com.yfd.platform.qgc_base.service.ISdHbrvDicService; import com.yfd.platform.system.domain.*; import com.yfd.platform.system.mapper.SysMenuMapper; import com.yfd.platform.system.service.ISmsVerifyCodeService; diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java index 31aa4ea9..bdc2fa5e 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java @@ -10,13 +10,11 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.config.ResponseResult; -import com.yfd.platform.data.domain.SysUserDataScope; -import com.yfd.platform.data.mapper.SysUserDataScopeMapper; -import com.yfd.platform.env.domain.SdEngInfoBH; -import com.yfd.platform.env.domain.SdHbrvDic; -import com.yfd.platform.env.domain.StationBasinInfo; -import com.yfd.platform.env.mapper.SdEngInfoBHMapper; -import com.yfd.platform.env.mapper.SdHbrvDicMapper; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.qgc_base.domain.StationBasinInfo; +import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; +import com.yfd.platform.qgc_base.mapper.SdHbrvDicMapper; import com.yfd.platform.system.domain.LoginUser; import com.yfd.platform.system.domain.SysRole; import com.yfd.platform.system.domain.SysUser; diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 8520bc61..b125d232 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -122,6 +122,8 @@ logging: level: root: info com.yfd.platform: info + com.yfd.platform.common.MicroservicDynamicSQLMapper: debug + # ... existing code ... # com.yfd.platform.*.mapper: trace # 在线文档: swagger-ui(生产环境建议关闭) diff --git a/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml b/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml index ec55559f..a2e54147 100644 --- a/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml +++ b/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml @@ -3,7 +3,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -35,7 +35,7 @@ - + diff --git a/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml b/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml index d652a587..53218609 100644 --- a/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml +++ b/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml @@ -3,7 +3,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + diff --git a/backend/src/main/resources/mapper/data/ImportTaskRowMapper.xml b/backend/src/main/resources/mapper/data/ImportTaskRowMapper.xml index 2de26c35..78a617a6 100644 --- a/backend/src/main/resources/mapper/data/ImportTaskRowMapper.xml +++ b/backend/src/main/resources/mapper/data/ImportTaskRowMapper.xml @@ -3,7 +3,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + diff --git a/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml b/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml index 572746db..b5d72bda 100644 --- a/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml +++ b/backend/src/main/resources/mapper/data/SysUserDataScopeMapper.xml @@ -3,7 +3,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + diff --git a/backend/src/main/resources/mapper/env/SdCountryBMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdCountryBMapper.xml similarity index 80% rename from backend/src/main/resources/mapper/env/SdCountryBMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdCountryBMapper.xml index b5c093c9..c4a1241e 100644 --- a/backend/src/main/resources/mapper/env/SdCountryBMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdCountryBMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/backend/src/main/resources/mapper/env/SdEngInfoBHMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdEngInfoBHMapper.xml similarity index 98% rename from backend/src/main/resources/mapper/env/SdEngInfoBHMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdEngInfoBHMapper.xml index a01627ce..0e04883c 100644 --- a/backend/src/main/resources/mapper/env/SdEngInfoBHMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdEngInfoBHMapper.xml @@ -1,9 +1,9 @@ - + - + @@ -231,7 +231,7 @@ - + diff --git a/backend/src/main/resources/mapper/env/SdHbrvDicMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdHbrvDicMapper.xml similarity index 87% rename from backend/src/main/resources/mapper/env/SdHbrvDicMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdHbrvDicMapper.xml index 850aebd7..09f8a32d 100644 --- a/backend/src/main/resources/mapper/env/SdHbrvDicMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdHbrvDicMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/backend/src/main/resources/mapper/env/SdHycdDicMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdHycdDicMapper.xml similarity index 90% rename from backend/src/main/resources/mapper/env/SdHycdDicMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdHycdDicMapper.xml index 810afb72..4ed2f89c 100644 --- a/backend/src/main/resources/mapper/env/SdHycdDicMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdHycdDicMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/backend/src/main/resources/mapper/env/SdHydrobaseMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdHydrobaseMapper.xml similarity index 88% rename from backend/src/main/resources/mapper/env/SdHydrobaseMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdHydrobaseMapper.xml index 3391d95c..839bafd4 100644 --- a/backend/src/main/resources/mapper/env/SdHydrobaseMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdHydrobaseMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/backend/src/main/resources/mapper/env/SdPrhbrltnBMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdPrhbrltnBMapper.xml similarity index 81% rename from backend/src/main/resources/mapper/env/SdPrhbrltnBMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdPrhbrltnBMapper.xml index 28d25b7b..4b5f9253 100644 --- a/backend/src/main/resources/mapper/env/SdPrhbrltnBMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdPrhbrltnBMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/backend/src/main/resources/mapper/env/SdPrhyrltnBMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdPrhyrltnBMapper.xml similarity index 81% rename from backend/src/main/resources/mapper/env/SdPrhyrltnBMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdPrhyrltnBMapper.xml index bd6d8592..0127f05c 100644 --- a/backend/src/main/resources/mapper/env/SdPrhyrltnBMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdPrhyrltnBMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/backend/src/main/resources/mapper/env/SdRvcdDicMapper.xml b/backend/src/main/resources/mapper/qgc_base/SdRvcdDicMapper.xml similarity index 92% rename from backend/src/main/resources/mapper/env/SdRvcdDicMapper.xml rename to backend/src/main/resources/mapper/qgc_base/SdRvcdDicMapper.xml index 1eaf1b7a..e4f11d28 100644 --- a/backend/src/main/resources/mapper/env/SdRvcdDicMapper.xml +++ b/backend/src/main/resources/mapper/qgc_base/SdRvcdDicMapper.xml @@ -1,9 +1,9 @@ - + - +