From 757efd4d627ae43b4be5257cd16c5fd88b852c4f Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 09:36:16 +0800 Subject: [PATCH 01/14] =?UTF-8?q?feat:=20=E6=9F=A5=E8=AF=A2=E7=AB=99?= =?UTF-8?q?=E7=B1=BB=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=EF=BC=88=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2=E5=92=8CSTTP=5FCO?= =?UTF-8?q?DE=E8=BF=87=E6=BB=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SdWtMonitorServiceImpl.java | 2 +- .../along/controller/MsAlongBController.java | 8 ++ .../qgc_lygk/along/domain/SttpDto.java | 32 +++++ .../along/service/IMsAlongBService.java | 9 ++ .../service/impl/MsAlongBServiceImpl.java | 122 ++++++++++++++++++ 5 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/SttpDto.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index c2c3f8fe..f50e5292 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -2959,7 +2959,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } @Override -// @Cacheable(cacheNames = "wtCache#3600", keyGenerator = "cacheKeyByUserGenerator") + @Cacheable(cacheNames = "wtCache#3600", keyGenerator = "cacheKeyByUserGenerator") public DataSourceResult getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setAggregates(new HashMap<>()); diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java index 6ea3a3e6..5c663e81 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java @@ -11,6 +11,7 @@ import com.yfd.platform.qgc_base.service.ISdHbrvDicService; import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import com.yfd.platform.qgc_lygk.along.domain.SttpDto; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService; import com.yfd.platform.utils.DataSourceRequestUtil; @@ -99,4 +100,11 @@ public class MsAlongBController { DataSourceResult result = msAlongBService.getKendoPage(dataSourceRequest); return ResponseResult.successData(result); } + + @PostMapping("/sttp/GetKendoList") + @Operation(summary = "查询站类信息列表(支持模糊搜索和STTP_CODE过滤)") + public ResponseResult getSttpList(@RequestBody DataSourceRequest dataSourceRequest) { + DataSourceResult result = msAlongBService.getSttpList(dataSourceRequest); + return ResponseResult.successData(result); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/SttpDto.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/SttpDto.java new file mode 100644 index 00000000..6731281b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/SttpDto.java @@ -0,0 +1,32 @@ +package com.yfd.platform.qgc_lygk.along.domain; + +import lombok.Data; + +import java.util.Date; + +/** + * 站类信息查询结果 DTO + */ +@Data +public class SttpDto { + + private String id; + private String sttpCode; + private String sttpName; + private String sttpSname; + private String description; + private Integer enabled; + private String parentId; + private String fullPath; + private Integer treeLevel; + private Integer hasChildren; + private String introduce; + private String logo; + private String inffile; + private Integer internal; + private Integer orderIndex; + private String recordUser; + private Date recordTime; + private String modifyUser; + private Date modifyTime; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java index 3847dfe2..b75e2694 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java @@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import com.yfd.platform.qgc_lygk.along.domain.SttpDto; import java.util.List; @@ -28,6 +29,14 @@ public interface IMsAlongBService extends IService { DataSourceResult getKendoPage(DataSourceRequest dataSourceRequest); + /** + * 查询站类信息列表(支持模糊搜索和STTP_CODE过滤) + * + * @param dataSourceRequest 数据源请求 + * @return 数据源结果 + */ + DataSourceResult getSttpList(DataSourceRequest dataSourceRequest); + // /** // * 保存或更新沿程配置 // * diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java index a2cc47fc..64647c88 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java @@ -13,6 +13,7 @@ import com.yfd.platform.qgc_base.domain.SdRvcdDic; import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import com.yfd.platform.qgc_lygk.along.domain.SttpDto; import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; import com.yfd.platform.utils.CodeToNameMetadataBo; @@ -154,6 +155,127 @@ public class MsAlongBServiceImpl extends ServiceImpl i return result; } + @Override + public DataSourceResult getSttpList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + + StringBuilder sql = new StringBuilder("SELECT * FROM SD_STTP_B WHERE NVL(IS_DELETED, 0) = 0"); + Map paramMap = new HashMap<>(); + + // 解析过滤条件 + if (dataSourceRequest != null && dataSourceRequest.getFilter() != null) { + String filterSql = parseSttpFilter(dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); + } + } + + // 解析排序 + if (dataSourceRequest != null && CollUtil.isNotEmpty(dataSourceRequest.getSort())) { + List orderList = new ArrayList<>(); + for (SortDescriptor sort : dataSourceRequest.getSort()) { + String field = sort.getField(); + if (StrUtil.isBlank(field) || !isSafeSttpField(field)) continue; + String direction = "asc".equalsIgnoreCase(sort.getDir()) ? "ASC" : "DESC"; + orderList.add(field + " " + direction); + } + if (!orderList.isEmpty()) { + sql.append(" ORDER BY ").append(String.join(", ", orderList)); + } + } else { + sql.append(" ORDER BY ORDER_INDEX ASC, STTP_CODE ASC"); + } + + // 执行分页查询 + Page page = loadOptions == null ? null : + QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, SttpDto.class + ); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + /** + * 递归解析站类过滤条件 + */ + private String parseSttpFilter(FilterDescriptor filter, Map paramMap, int[] paramIndex) { + if (filter == null) return ""; + + List childFilters = filter.getFilters(); + if (CollUtil.isNotEmpty(childFilters)) { + List childConditions = new ArrayList<>(); + for (FilterDescriptor child : childFilters) { + String childSql = parseSttpFilter(child, paramMap, paramIndex); + if (StrUtil.isNotBlank(childSql)) { + childConditions.add(childSql); + } + } + if (childConditions.isEmpty()) return ""; + String logic = StrUtil.isNotBlank(filter.getLogic()) ? filter.getLogic() : "and"; + String connector = "and".equalsIgnoreCase(logic) ? " AND " : " OR "; + return "(" + String.join(connector, childConditions) + ")"; + } + + String field = filter.getField(); + Object value = filter.getValue(); + String operator = filter.getOperator(); + + if (StrUtil.isBlank(field)) return ""; + if (!isSafeSttpField(field)) return ""; + + String paramKey = "stp" + paramIndex[0]++; + paramMap.put(paramKey, value); + + if ("contains".equalsIgnoreCase(operator)) { + return field + " LIKE '%' || #{map." + paramKey + "} || '%'"; + } else if ("startswith".equalsIgnoreCase(operator)) { + return field + " LIKE #{map." + paramKey + "} || '%'"; + } else if ("endswith".equalsIgnoreCase(operator)) { + return field + " LIKE '%' || #{map." + paramKey + "}"; + } else if ("neq".equalsIgnoreCase(operator)) { + return field + " != #{map." + paramKey + "}"; + } else if ("gt".equalsIgnoreCase(operator)) { + return field + " > #{map." + paramKey + "}"; + } else if ("gte".equalsIgnoreCase(operator)) { + return field + " >= #{map." + paramKey + "}"; + } else if ("lt".equalsIgnoreCase(operator)) { + return field + " < #{map." + paramKey + "}"; + } else if ("lte".equalsIgnoreCase(operator)) { + return field + " <= #{map." + paramKey + "}"; + } else if ("isnull".equalsIgnoreCase(operator)) { + paramMap.remove(paramKey); + return field + " IS NULL"; + } else if ("isnotnull".equalsIgnoreCase(operator)) { + paramMap.remove(paramKey); + return field + " IS NOT NULL"; + } else if (value == null) { + paramMap.remove(paramKey); + return ""; + } else { + // 默认 eq + return field + " = #{map." + paramKey + "}"; + } + } + + /** + * 站类表安全字段白名单 + */ + private boolean isSafeSttpField(String field) { + if (StrUtil.isBlank(field)) return false; + Set validFields = new HashSet<>(Arrays.asList( + "ID", "STTP_CODE", "STTP_NAME", "STTP_SNAME", "DESCRIPTION", + "ENABLED", "PARENT_ID", "FULL_PATH", "TREE_LEVEL", "HAS_CHILDREN", + "INTRODUCE", "LOGO", "INFFILE", "INTERNAL", "ORDER_INDEX", + "IS_DELETED" + )); + return validFields.contains(field.toUpperCase()); + } + /** * 递归解析 FilterDescriptor(完美适配你的内部类结构) */ From 855fd754b0df4dfb24a469d275d2bb6fb2a45e3b Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 10:03:01 +0800 Subject: [PATCH 02/14] =?UTF-8?q?fix:=20=E6=B2=BF=E7=A8=8B=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qgc_env/wq/service/impl/EnvWqDataServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index 7c606e32..4d553f10 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -1825,12 +1825,12 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "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.BASEID = wq.BASE_ID AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + - "LEFT JOIN (SELECT det.SORT,cfg.BASEID, along.RVCD, det.STCD " + + "LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') rstAlong " + " ON rstAlong.BASEID = wq.BASE_ID AND rstAlong.STCD = wq.RSTCD " + - "LEFT JOIN (SELECT det.SORT,cfg.BASEID, along.RVCD, det.STCD " + + "LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') siteAlong " + From 59890a5659bede02639813669a98982e3335e5cb Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 11:26:51 +0800 Subject: [PATCH 03/14] =?UTF-8?q?feat:=20=E4=B8=89=E7=BB=B4=E6=BC=AB?= =?UTF-8?q?=E6=B8=B8=E6=95=B0=E6=8D=AE=E4=B8=BB=E8=A1=A8=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yfd/platform/config/SecurityConfig.java | 1 + .../yfd/platform/config/SwaggerConfig.java | 9 + .../controller/MsThreedRoamMController.java | 119 +++++ .../threedRoam/domain/MsThreedRoamEntity.java | 78 ++++ .../domain/MsThreedRoamMEntity.java | 74 ++++ .../threedRoam/dto/MsThreedRoamBVO.java | 27 ++ .../threedRoam/dto/MsThreedRoamMVO.java | 33 ++ .../threedRoam/dto/MsThreedRoamVO.java | 50 +++ .../mapper/MsThreedRoamMMapper.java | 12 + .../threedRoam/mapper/MsThreedRoamMapper.java | 30 ++ .../service/IMsThreedRoamMService.java | 44 ++ .../impl/MsThreedRoamMServiceImpl.java | 418 ++++++++++++++++++ .../qgc_sys/threedRoam/MsThreedRoamMapper.xml | 43 ++ 13 files changed, 938 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/controller/MsThreedRoamMController.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamEntity.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamBVO.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamVO.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMMapper.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMapper.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/IMsThreedRoamMService.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/impl/MsThreedRoamMServiceImpl.java create mode 100644 backend/src/main/resources/mapper/qgc_sys/threedRoam/MsThreedRoamMapper.xml 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 c4d0b605..165beccc 100644 --- a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java @@ -65,6 +65,7 @@ public class SecurityConfig { .requestMatchers("/eq/**").permitAll() .requestMatchers("/env/**").permitAll() .requestMatchers("/warn/**").permitAll() + .requestMatchers("/threedroamb/**").permitAll() .requestMatchers("/overview/**").permitAll() .requestMatchers("/wt/**").permitAll() .requestMatchers("/fb/**").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 fc91476f..2e43cdb8 100644 --- a/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java @@ -249,6 +249,15 @@ public class SwaggerConfig { .build(); } + @Bean + public GroupedOpenApi groupThreedRoamApi() { + return GroupedOpenApi.builder() + .group("5.3 三维漫游") + .packagesToScan("com.yfd.platform.qgc_sys.threedRoam.controller") + .build(); + } + + @Bean public GroupedOpenApi groupLygkApi() { return GroupedOpenApi.builder() diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/controller/MsThreedRoamMController.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/controller/MsThreedRoamMController.java new file mode 100644 index 00000000..6583e97e --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/controller/MsThreedRoamMController.java @@ -0,0 +1,119 @@ +package com.yfd.platform.qgc_sys.threedRoam.controller; + +import cn.hutool.core.util.StrUtil; +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.qgc_sys.threedRoam.domain.MsThreedRoamMEntity; +import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamBVO; +import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamMVO; +import com.yfd.platform.qgc_sys.threedRoam.service.IMsThreedRoamMService; +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.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.OutputStream; +import java.net.URLEncoder; + +/** + * 三维漫游数据主表控制器 + * + * @author migration + */ +@RestController +@RequestMapping("/threedroamb") +@Tag(name = "三维漫游数据主表控制器") +public class MsThreedRoamMController { + + @Resource + private IMsThreedRoamMService msThreedRoamMService; + + @PostMapping("/GetKendoListCust") + @Operation(summary = "条件过滤数据列表") + public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + DataSourceResult result = msThreedRoamMService.getKendoListCustReturn(dataSourceRequest); + return ResponseResult.successData(result); + } + + @PostMapping("/save") + @Operation(summary = "保存三维漫游数据") + public ResponseResult save(@RequestBody MsThreedRoamMVO vo) { + if (msThreedRoamMService.save(vo)) { + return ResponseResult.success(); + } else { + return ResponseResult.error("三维漫游数据保存失败"); + } + } + + @GetMapping("/getThreedRoamDetails") + @Operation(summary = "获取三维漫游数据详情") + public ResponseResult getThreedRoamDetails(@RequestParam("id") String id) { + return ResponseResult.successData(msThreedRoamMService.getThreedRoamDetails(id)); + } + + @GetMapping("/delete") + @Operation(summary = "删除三维漫游数据") + public ResponseResult delete(@RequestParam("id") String id) { + if (msThreedRoamMService.delete(id)) { + return ResponseResult.success(); + } else { + return ResponseResult.error("三维漫游数据删除失败"); + } + } + + @PostMapping("/getThreedRoamData") + @Operation(summary = "三维漫游数据") + public MsThreedRoamBVO getThreedRoamData(@RequestBody DataSourceRequest dataSourceRequest) { + return msThreedRoamMService.getThreedRoamData(dataSourceRequest); + } + + @PostMapping("/export") + @Operation(summary = "导出三维漫游数据模板") + public void export(HttpServletResponse response) { + try { + String fileName = "三维漫游数据模板"; + + XSSFWorkbook workBook = new XSSFWorkbook(); + XSSFSheet sheet = workBook.createSheet(); + workBook.setSheetName(0, "三维漫游数据模板"); + + XSSFRow row = sheet.createRow(0); + row.createCell(0).setCellValue("飞行路径Code"); + row.createCell(1).setCellValue("飞行路径名称"); + row.createCell(2).setCellValue("经度\u00B0(0-180\u00B0)"); + row.createCell(3).setCellValue("纬度\u00B0(0-90\u00B0)"); + row.createCell(4).setCellValue("高程(m)(小于10000m)"); + row.createCell(5).setCellValue("时间(s)(小于100s)"); + row.createCell(6).setCellValue("序号"); + row.createCell(7).setCellValue("里程碑节点编码(电站编码)"); + row.createCell(8).setCellValue("里程碑节点名称(电站名称)"); + + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(fileName, "utf-8") + ".xlsx"); + OutputStream outputStream = response.getOutputStream(); + workBook.write(outputStream); + outputStream.flush(); + outputStream.close(); + } catch (Exception e) { + // ignore + } + } + + @PostMapping("/import") + @Operation(summary = "导入三维漫游数据") + public ResponseResult importExcel(MultipartFile file) { + if (msThreedRoamMService.importData(file)) { + return ResponseResult.success(); + } else { + return ResponseResult.error("导入三维漫游数据失败"); + } + } +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamEntity.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamEntity.java new file mode 100644 index 00000000..c7d4a575 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamEntity.java @@ -0,0 +1,78 @@ +package com.yfd.platform.qgc_sys.threedRoam.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 三维漫游数据表实体(子表) + * + * @author migration + */ +@Data +@TableName("MS_THREEDROAM_B") +public class MsThreedRoamEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_UUID) + @TableField("ID") + private String id; + + @TableField("ROAM_ID") + private String roamId; + + @TableField("CODE") + private String code; + + @TableField("NAME") + private String name; + + @TableField("LGTD") + private BigDecimal lgtd; + + @TableField("LTTD") + private BigDecimal lttd; + + @TableField("DTMEL") + private BigDecimal dtmel; + + @TableField("TIME") + private BigDecimal time; + + @TableField("ORDER_INDEX") + private Integer orderIndex; + + @TableField("STCD") + private String stcd; + + @TableField("STNM") + private String stnm; + + @TableField("RECORD_USER") + private String recordUser; + + @TableField("RECORD_TIME") + private Date recordTime; + + @TableField("MODIFY_USER") + private String modifyUser; + + @TableField("MODIFY_TIME") + private Date modifyTime; + + @TableField("IS_DELETED") + private Integer isDeleted; + + @TableField("DELETE_USER") + private String deleteUser; + + @TableField("DELETE_TIME") + private Date deleteTime; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java new file mode 100644 index 00000000..2d9d82dc --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java @@ -0,0 +1,74 @@ +package com.yfd.platform.qgc_sys.threedRoam.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 三维漫游数据主表实体 + * + * @author migration + */ +@Data +@TableName("MS_THREEDROAMM_B") +public class MsThreedRoamMEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_UUID) + @TableField("ID") + private String id; + + @TableField("CODE") + private String code; + + @TableField("NAME") + private String name; + + @TableField("RVCD") + private String rvcd; + + @TableField("REMARK") + private String remark; + + @TableField("RECORD_USER") + private String recordUser; + + @TableField("RECORD_TIME") + private Date recordTime; + + @TableField("MODIFY_USER") + private String modifyUser; + + @TableField("MODIFY_TIME") + private Date modifyTime; + + @TableField("IS_DELETED") + private Integer isDeleted; + + @TableField("DELETE_USER") + private String deleteUser; + + @TableField("DELETE_TIME") + private Date deleteTime; + + @TableField("BASE_ID") + private String baseId; + + /** 河段名称(非表字段,查询时填充) */ + @TableField(exist = false) + private String rvcdName; + + /** 基地编码(非表字段,查询时填充) */ + @TableField(exist = false) + private String bscd; + + /** 基地名称(非表字段,查询时填充) */ + @TableField(exist = false) + private String bsnm; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamBVO.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamBVO.java new file mode 100644 index 00000000..8c054783 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamBVO.java @@ -0,0 +1,27 @@ +package com.yfd.platform.qgc_sys.threedRoam.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 三维漫游飞行路径数据查询结果 VO + */ +@Data +@Schema(description = "三维漫游飞行路径数据") +public class MsThreedRoamBVO { + + @Schema(description = "数据集合 (坐标序列: totalTime, lgtd, lttd, dtmel, ...)") + private List list; + + @Schema(description = "里程碑集合") + private List milestoneList; + + @Schema(description = "流域/编码") + private String code; + + @Schema(description = "总时间") + private BigDecimal totalTime; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java new file mode 100644 index 00000000..7fb0a15b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java @@ -0,0 +1,33 @@ +package com.yfd.platform.qgc_sys.threedRoam.dto; + +import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 三维漫游数据保存/查询 VO + */ +@Data +@Schema(description = "三维漫游数据") +public class MsThreedRoamMVO { + + @Schema(description = "主键") + private String id; + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称") + private String name; + + @Schema(description = "河段") + private String rvcd; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "漫游数据集合") + private List list; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamVO.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamVO.java new file mode 100644 index 00000000..68972f0a --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamVO.java @@ -0,0 +1,50 @@ +package com.yfd.platform.qgc_sys.threedRoam.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + +/** + * 三维漫游列表 VO + */ +@Data +@Schema(description = "三维漫游列表") +public class MsThreedRoamVO { + + @Schema(description = "主键") + private String id; + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称") + private String name; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "创建人") + private String recordUser; + + @Schema(description = "更新人") + private String modifyUser; + + @Schema(description = "创建时间") + private Date recordTime; + + @Schema(description = "更新时间") + private Date modifyTime; + + @Schema(description = "河段编码") + private String rvcd; + + @Schema(description = "河段名称") + private String rvcdName; + + @Schema(description = "基地编码") + private String bscd; + + @Schema(description = "基地名称") + private String bsnm; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMMapper.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMMapper.java new file mode 100644 index 00000000..4ba171ad --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMMapper.java @@ -0,0 +1,12 @@ +package com.yfd.platform.qgc_sys.threedRoam.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 三维漫游数据主表 Mapper + */ +@Mapper +public interface MsThreedRoamMMapper extends BaseMapper { +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMapper.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMapper.java new file mode 100644 index 00000000..647039d0 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/mapper/MsThreedRoamMapper.java @@ -0,0 +1,30 @@ +package com.yfd.platform.qgc_sys.threedRoam.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 三维漫游数据子表 Mapper + */ +@Mapper +public interface MsThreedRoamMapper extends BaseMapper { + + /** + * 批量插入漫游详细数据 + */ + int batchInsertList(@Param("list") List list); + + /** + * 根据漫游ID删除详细数据 + */ + void deleteTheedRoam(@Param("roamId") String roamId); + + /** + * 查询电站编码和名称(校验里程碑节点是否存在) + */ + MsThreedRoamEntity selectStcd(@Param("stcd") String stcd); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/IMsThreedRoamMService.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/IMsThreedRoamMService.java new file mode 100644 index 00000000..e709d845 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/IMsThreedRoamMService.java @@ -0,0 +1,44 @@ +package com.yfd.platform.qgc_sys.threedRoam.service; + +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity; +import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamBVO; +import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamMVO; +import org.springframework.web.multipart.MultipartFile; + +/** + * 三维漫游数据主表 Service 接口 + */ +public interface IMsThreedRoamMService { + + /** + * 条件过滤数据列表(GetKendoListCust) + */ + DataSourceResult getKendoListCustReturn(DataSourceRequest dataSourceRequest); + + /** + * 保存三维漫游数据 + */ + Boolean save(MsThreedRoamMVO vo); + + /** + * 获取三维漫游数据详情 + */ + MsThreedRoamMVO getThreedRoamDetails(String id); + + /** + * 删除三维漫游数据 + */ + Boolean delete(String id); + + /** + * 获取三维漫游飞行路径数据 + */ + MsThreedRoamBVO getThreedRoamData(DataSourceRequest dataSourceRequest); + + /** + * 导入三维漫游数据 + */ + Boolean importData(MultipartFile file); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/impl/MsThreedRoamMServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/impl/MsThreedRoamMServiceImpl.java new file mode 100644 index 00000000..e7602266 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/service/impl/MsThreedRoamMServiceImpl.java @@ -0,0 +1,418 @@ +package com.yfd.platform.qgc_sys.threedRoam.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.common.DataSourceResult; +import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.common.exception.BizException; +import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity; +import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity; +import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamBVO; +import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamMVO; +import com.yfd.platform.qgc_sys.threedRoam.mapper.MsThreedRoamMMapper; +import com.yfd.platform.qgc_sys.threedRoam.mapper.MsThreedRoamMapper; +import com.yfd.platform.qgc_sys.threedRoam.service.IMsThreedRoamMService; +import com.yfd.platform.utils.QgcQueryWrapperUtil; +import jakarta.annotation.Resource; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 三维漫游数据主表 Service 实现类 + */ +@Service +public class MsThreedRoamMServiceImpl extends ServiceImpl implements IMsThreedRoamMService { + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Resource + private MsThreedRoamMapper msThreedRoamMapper; + + @Resource + private MsThreedRoamMMapper msThreedRoamMMapper; + + @Override + public DataSourceResult getKendoListCustReturn(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT a.ID, a.CODE, a.NAME, a.RVCD, b.HBRVNM AS rvcdName, a.REMARK, ") + .append("a.RECORD_USER, a.RECORD_TIME, a.MODIFY_USER, a.MODIFY_TIME, ") + .append("c.BASEID AS bscd, c.BASENAME AS bsnm ") + .append("FROM MS_THREEDROAMM_B a ") + .append("LEFT JOIN SD_HBRV_DIC b ON a.RVCD = b.HBRVCD AND b.IS_DELETED = 0 ") + .append("LEFT JOIN SD_HYDROBASE c ON b.BASEID = c.BASEID AND c.IS_DELETED = 0 ") + .append("WHERE a.IS_DELETED = 0"); + + Map paramMap = new HashMap<>(); + String filterSql = buildFilterSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + // 排序 + sql.append(" ORDER BY a.CODE ASC"); + + Page page = loadOptions == null ? null + : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, MsThreedRoamMEntity.class + ); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page == null ? list.size() : page.getTotal()); + result.setAggregates(new HashMap<>()); + return result; + } + + /** + * 递归构建过滤 SQL + */ + private String buildFilterSql(com.yfd.platform.common.DataSourceRequest.FilterDescriptor filter, + Map paramMap, int[] indexHolder) { + if (filter == null) return ""; + + List childFilters = filter.getFilters(); + if (CollUtil.isNotEmpty(childFilters)) { + List childConditions = new ArrayList<>(); + for (com.yfd.platform.common.DataSourceRequest.FilterDescriptor child : childFilters) { + String childSql = buildFilterSql(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + childConditions.add(childSql); + } + } + if (childConditions.isEmpty()) return ""; + String logic = StrUtil.isNotBlank(filter.getLogic()) ? filter.getLogic() : "and"; + String connector = "and".equalsIgnoreCase(logic) ? " AND " : " OR "; + return "(" + String.join(connector, childConditions) + ")"; + } + + String field = filter.getField(); + Object value = filter.getValue(); + String operator = filter.getOperator(); + + if (StrUtil.isBlank(field)) return ""; + + String column = mapToListColumn(field); + if (StrUtil.isBlank(column)) return ""; + + if ("isnull".equalsIgnoreCase(operator)) return column + " IS NULL"; + if ("isnotnull".equalsIgnoreCase(operator)) return column + " IS NOT NULL"; + if (value == null) return ""; + + String paramKey = "t" + indexHolder[0]++; + paramMap.put(paramKey, value); + + if ("eq".equalsIgnoreCase(operator)) { + return column + " = #{map." + paramKey + "}"; + } else if ("neq".equalsIgnoreCase(operator)) { + return column + " != #{map." + paramKey + "}"; + } else if ("contains".equalsIgnoreCase(operator)) { + return column + " LIKE '%' || #{map." + paramKey + "} || '%'"; + } else if ("startswith".equalsIgnoreCase(operator)) { + return column + " LIKE #{map." + paramKey + "} || '%'"; + } else if ("endswith".equalsIgnoreCase(operator)) { + return column + " LIKE '%' || #{map." + paramKey + "}"; + } + return ""; + } + + private String mapToListColumn(String field) { + if (StrUtil.isBlank(field)) return null; + return switch (field) { + case "code" -> "a.CODE"; + case "name" -> "a.NAME"; + case "rvcd" -> "a.RVCD"; + case "remark" -> "a.REMARK"; + default -> null; + }; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean save(MsThreedRoamMVO vo) { + MsThreedRoamMEntity entity = new MsThreedRoamMEntity(); + BeanUtils.copyProperties(vo, entity); + + // 校验编码是否存在 + if (!checkCodeExist(entity)) { + throw new BizException("该编码已存在"); + } + + boolean result; + if (StrUtil.isNotBlank(entity.getId())) { + result = this.updateById(entity); + } else { + result = this.save(entity); + } + + if (result && CollUtil.isNotEmpty(vo.getList())) { + // 删除旧数据 + msThreedRoamMapper.deleteTheedRoam(entity.getId()); + + // 批量插入新数据 + List batchList = new ArrayList<>(); + List detailList = vo.getList(); + for (int i = 0; i < detailList.size(); i++) { + MsThreedRoamEntity detail = detailList.get(i); + if (StrUtil.isBlank(detail.getStcd())) { + detail.setStcd(""); + } + if (StrUtil.isBlank(detail.getStnm())) { + detail.setStnm(""); + } + detail.setRoamId(entity.getId()); + detail.setCode(vo.getCode()); + detail.setName(vo.getName()); + batchList.add(detail); + + if (batchList.size() == 2000 || i == detailList.size() - 1) { + int fruit = msThreedRoamMapper.batchInsertList(batchList); + if (fruit < 1) { + throw new BizException("保存三维漫游数据失败"); + } + batchList = new ArrayList<>(); + } + } + } + return result; + } + + /** + * 校验编码是否存在(修改时排除自身) + */ + private boolean checkCodeExist(MsThreedRoamMEntity entity) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("CODE", entity.getCode()); + MsThreedRoamMEntity exist = msThreedRoamMMapper.selectOne(wrapper); + if (exist != null && !exist.getId().equals(entity.getId())) { + return false; + } + return true; + } + + @Override + public MsThreedRoamMVO getThreedRoamDetails(String id) { + MsThreedRoamMVO vo = new MsThreedRoamMVO(); + MsThreedRoamMEntity entity = msThreedRoamMMapper.selectById(id); + if (entity != null) { + BeanUtils.copyProperties(entity, vo); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("ROAM_ID", id); + wrapper.orderByAsc("ORDER_INDEX"); + List list = msThreedRoamMapper.selectList(wrapper); + vo.setList(list); + } + return vo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean delete(String id) { + // 删除子表数据 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("ROAM_ID", id); + List list = msThreedRoamMapper.selectList(wrapper); + if (CollUtil.isNotEmpty(list)) { + msThreedRoamMapper.delete(wrapper); + } + // 删除主表数据 + int result = msThreedRoamMMapper.deleteById(id); + return result > 0; + } + + @Override + public MsThreedRoamBVO getThreedRoamData(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String code = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "code"); + + MsThreedRoamMEntity entity = msThreedRoamMMapper.selectOne( + new QueryWrapper().eq("CODE", code)); + if (entity == null) { + throw new BizException("该流域没有三维漫游数据"); + } + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("ROAM_ID", entity.getId()); + wrapper.orderByAsc("ORDER_INDEX"); + List threedRoamList = msThreedRoamMapper.selectList(wrapper); + + BigDecimal totalTime = BigDecimal.ZERO; + List lists = new ArrayList<>(); + String baseCode = ""; + List milestoneList = new ArrayList<>(); + List stcdList = new ArrayList<>(); + + for (MsThreedRoamEntity detail : threedRoamList) { + totalTime = totalTime.add(detail.getTime().multiply(new BigDecimal("0.2"))); + lists.add(totalTime); + lists.add(detail.getLgtd()); + lists.add(detail.getLttd()); + lists.add(detail.getDtmel()); + baseCode = detail.getCode(); + + if (StrUtil.isNotBlank(detail.getStcd()) && !stcdList.contains(detail.getStnm())) { + stcdList.add(detail.getStnm()); + milestoneList.add(new String[]{detail.getStnm(), totalTime.toString()}); + } + } + + MsThreedRoamBVO vo = new MsThreedRoamBVO(); + vo.setList(lists); + vo.setTotalTime(totalTime); + vo.setCode(baseCode); + vo.setMilestoneList(milestoneList); + return vo; + } + + @Override + public Boolean importData(MultipartFile file) { + if (file == null) { + throw new BizException("请上传文件"); + } + + List list = new ArrayList<>(); + try { + XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); + int sheets = workbook.getNumberOfSheets(); + for (int i = 0; i < sheets; i++) { + XSSFSheet sheet = workbook.getSheetAt(i); + int rows = sheet.getPhysicalNumberOfRows(); + for (int j = 1; j < rows; j++) { + MsThreedRoamEntity detail = new MsThreedRoamEntity(); + XSSFRow row = sheet.getRow(j); + + detail.setCode(row.getCell(0).toString()); + detail.setName(row.getCell(1).toString()); + + double lgtd = Double.parseDouble(row.getCell(2).toString()); + if (lgtd > 180 || lgtd < 0) { + throw new BizException("经度必须在0-180\u00B0之间"); + } + detail.setLgtd(new BigDecimal(row.getCell(2).toString())); + + double lttd = Double.parseDouble(row.getCell(3).toString()); + if (lttd > 90 || lttd < 0) { + throw new BizException("纬度必须在0-90\u00B0之间"); + } + detail.setLttd(new BigDecimal(row.getCell(3).toString())); + + double dtmel = Double.parseDouble(row.getCell(4).toString()); + if (dtmel >= 10000 || dtmel < 0) { + throw new BizException("高程小于10000米"); + } + detail.setDtmel(new BigDecimal(row.getCell(4).toString()).setScale(3, BigDecimal.ROUND_HALF_UP)); + + double time = Double.parseDouble(row.getCell(5).toString()); + if (time >= 100 || time < 0) { + throw new BizException("时间小于100秒"); + } + detail.setTime(new BigDecimal(row.getCell(5).toString()).setScale(1, BigDecimal.ROUND_HALF_UP)); + + int px = (int) Double.parseDouble(row.getCell(6).toString()); + detail.setOrderIndex(px); + + if (row.getCell(7) != null && StrUtil.isNotBlank(row.getCell(7).toString())) { + detail.setStcd(row.getCell(7).toString()); + } else { + detail.setStcd(""); + } + if (row.getCell(8) != null && StrUtil.isNotBlank(row.getCell(8).toString())) { + detail.setStnm(row.getCell(8).toString()); + } else { + detail.setStnm(""); + } + + list.add(detail); + } + } + } catch (IOException e) { + throw new BizException("导入文档解析错误"); + } + + return saveImportData(list); + } + + /** + * 保存导入数据 + */ + @Transactional(rollbackFor = Exception.class) + public Boolean saveImportData(List list) { + Map> collect = list.stream() + .collect(Collectors.groupingBy(MsThreedRoamEntity::getCode)); + + collect.forEach((code, roamList) -> { + MsThreedRoamMEntity entity = msThreedRoamMMapper.selectOne( + new QueryWrapper().eq("CODE", code)); + if (entity == null) { + entity = new MsThreedRoamMEntity(); + entity.setCode(code); + } + entity.setName(roamList.get(0).getName()); + + boolean result; + if (StrUtil.isNotBlank(entity.getId())) { + result = this.updateById(entity); + } else { + result = this.save(entity); + } + + if (result) { + msThreedRoamMapper.deleteTheedRoam(entity.getId()); + + List batchList = new ArrayList<>(); + List stcdExistList = new ArrayList<>(); + List newStcdList = new ArrayList<>(); + + for (int i = 0; i < roamList.size(); i++) { + MsThreedRoamEntity detail = roamList.get(i); + detail.setRoamId(entity.getId()); + + if (StrUtil.isNotBlank(detail.getStcd())) { + if (!stcdExistList.contains(detail.getStcd()) && !newStcdList.contains(detail.getStcd())) { + MsThreedRoamEntity stcdEntity = msThreedRoamMapper.selectStcd(detail.getStcd()); + if (stcdEntity != null) { + stcdExistList.add(detail.getStcd()); + } else { + newStcdList.add(detail.getStcd()); + detail.setStcd(""); + detail.setStnm(""); + } + } else if (newStcdList.contains(detail.getStcd())) { + detail.setStcd(""); + detail.setStnm(""); + } + } + + batchList.add(detail); + if (batchList.size() == 2000 || i == roamList.size() - 1) { + int fruit = msThreedRoamMapper.batchInsertList(batchList); + if (fruit < 1) { + throw new BizException("导入三维漫游数据失败"); + } + batchList = new ArrayList<>(); + } + } + } + }); + return true; + } +} diff --git a/backend/src/main/resources/mapper/qgc_sys/threedRoam/MsThreedRoamMapper.xml b/backend/src/main/resources/mapper/qgc_sys/threedRoam/MsThreedRoamMapper.xml new file mode 100644 index 00000000..2f679b71 --- /dev/null +++ b/backend/src/main/resources/mapper/qgc_sys/threedRoam/MsThreedRoamMapper.xml @@ -0,0 +1,43 @@ + + + + + + INSERT INTO MS_THREEDROAM_B(ROAM_ID, CODE, NAME, LGTD, LTTD, DTMEL, TIME, ORDER_INDEX, STCD, STNM) + SELECT * + FROM ( + + SELECT + #{item.roamId} AS roamId, + #{item.code} AS code, + #{item.name} AS name, + #{item.lgtd} AS lgtd, + #{item.lttd} AS lttd, + #{item.dtmel} AS dtmel, + #{item.time} AS time, + #{item.orderIndex} AS orderIndex, + #{item.stcd} AS stcd, + #{item.stnm} AS stnm + FROM DUAL + + ) + + + + DELETE FROM MS_THREEDROAM_B + + + AND ROAM_ID = #{roamId} + + + + + + + From 1e44d6ee4fe1ae17d3d4ab5e1e3967a7088d93b2 Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 11:52:30 +0800 Subject: [PATCH 04/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=BF=87?= =?UTF-8?q?=E9=B1=BC=E5=8E=86=E5=8F=B2=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FishDraftDataController.java | 13 ++- .../qgc_data/mapper/FishDraftDataMapper.java | 19 +++++ .../service/IFishDraftDataService.java | 6 ++ .../impl/FishDraftDataServiceImpl.java | 83 +++++++++++++++---- .../mapper/data/FishDraftDataMapper.xml | 55 ++++++++++++ 5 files changed, 158 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java index 3534edde..186e6971 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java @@ -89,10 +89,17 @@ public class FishDraftDataController { return t; }); +// @PostMapping("/page") +// @Operation(summary = "分页查询过鱼数据(关联电站和设施)") +// public ResponseResult queryPageList(@RequestBody DataSourceRequest dataSourceRequest) { +// Page result = fishDraftDataService.queryPageList(dataSourceRequest); +// return ResponseResult.successData(result); +// } + @PostMapping("/page") - @Operation(summary = "分页查询过鱼数据(关联电站和设施)") - public ResponseResult queryPageList(@RequestBody DataSourceRequest dataSourceRequest) { - Page result = fishDraftDataService.queryPageList(dataSourceRequest); + @Operation(summary = "分页查询过鱼数据(关联电站和设施,APPROVED状态时根据当前用户电站权限过滤)") + public ResponseResult queryPageListWithScope(@RequestBody DataSourceRequest dataSourceRequest) { + Page result = fishDraftDataService.queryPageListWithScope(dataSourceRequest); return ResponseResult.successData(result); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java index 994d4e48..e1104ae2 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/mapper/FishDraftDataMapper.java @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; +import java.util.Set; /** *

@@ -33,6 +34,24 @@ public interface FishDraftDataMapper extends BaseMapper { @Param("hbrvcd") String hbrvcd, @Param("approvalId") String approvalId); + /** + * 关联查询过鱼数据(分页,含电站权限过滤) + */ + Page selectJoinPageWithStationScope(Page page, + @Param("stcd") String stcd, + @Param("rstcd") String rstcd, + @Param("baseId") String baseId, + @Param("rvcd") String rvcd, + @Param("direction") String direction, + @Param("status") String status, + @Param("ftp") String ftp, + @Param("startTime") String startTime, + @Param("endTime") String endTime, + @Param("userId") String userId, + @Param("hbrvcd") String hbrvcd, + @Param("approvalId") String approvalId, + @Param("stationCodes") Set stationCodes); + /** * 关联查询过鱼数据(不分页) */ diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java index 742d6c88..2561b9c0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/IFishDraftDataService.java @@ -20,6 +20,12 @@ public interface IFishDraftDataService extends IService { */ Page queryPageList(DataSourceRequest dataSourceRequest); + /** + * 分页查询草稿数据(关联电站和设施表,含电站权限过滤) + * 当 status = APPROVED 时,根据当前用户有权限的电站编码过滤数据 + */ + Page queryPageListWithScope(DataSourceRequest dataSourceRequest); + /** * 查询草稿数据列表(关联电站和设施表,不分页) */ diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java index 45c47f12..3f3c9ca1 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java @@ -8,6 +8,7 @@ import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.qgc_base.domain.SdRvcdDic; import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper; +import com.yfd.platform.qgc_base.service.ICurrentUserDataScopeService; import com.yfd.platform.qgc_data.domain.ApprovalMain; import com.yfd.platform.qgc_data.domain.FishDraftData; import com.yfd.platform.qgc_data.domain.SysUserDataScope; @@ -89,6 +90,9 @@ public class FishDraftDataServiceImpl extends ServiceImpl resultPage = fishDraftDataMapper.selectJoinPage(page, stcd, rstcd, baseId, rvcd, direction, status, ftp, startTime, endTime,userId,hbrvcd,approvalId); + Page resultPage = fishDraftDataMapper.selectJoinPage(page, stcd, rstcd, baseId, rvcd, direction, status, ftp, startTime, endTime, userId, hbrvcd, approvalId); + fillUserNames(resultPage.getRecords()); + return resultPage; + } + + @Override + public Page queryPageListWithScope(DataSourceRequest dataSourceRequest) { + Page page = KendoUtil.getPage(dataSourceRequest); + page.setSize(dataSourceRequest.getTake()); + page.setCurrent(dataSourceRequest.getSkip()); + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd"); + String approvalId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "approvalId"); + String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd"); + String hbrvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "hbrvcd"); + String rvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd"); + String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"); + String ftp = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ftp"); + String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction"); + String status = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "status"); + String STRDT = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "strdt"); + String startTime = null; + String endTime = null; + String userId = SecurityUtils.getUserId(); + if (StrUtil.isNotBlank(approvalId)) { + userId = null; + } + if (StrUtil.isNotBlank(STRDT) && STRDT.split(",").length == 2) { + startTime = STRDT.split(",")[0]; + endTime = STRDT.split(",")[1]; + } + + // 当 status = APPROVED 时,加上当前用户的电站权限过滤 + Set stationCodes = null; + if ("APPROVED".equals(status)) { + userId=null; + if (!currentUserDataScopeService.getCurrentUserDataScope().isManagedAdmin()) { + stationCodes = currentUserDataScopeService.getCurrentUserDataScope().getStationCodes(); + // 如果用户没有电站权限且不是管理员,返回空结果 + if (stationCodes == null || stationCodes.isEmpty()) { + page.setRecords(Collections.emptyList()); + page.setTotal(0); + return page; + } + } + } + + Page resultPage = fishDraftDataMapper.selectJoinPageWithStationScope( + page, stcd, rstcd, baseId, rvcd, direction, status, ftp, + startTime, endTime, userId, hbrvcd, approvalId, stationCodes); fillUserNames(resultPage.getRecords()); return resultPage; } @@ -262,7 +315,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl ids) { long count = countByIdsAndLockFlag(ids, 1); - if(count > 0){ + if (count > 0) { return false; } String userId = SecurityUtils.getUserId(); @@ -392,7 +445,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl stationList = engInfoBHMapper.selectByRvcd(null,orgId); + List stationList = engInfoBHMapper.selectByRvcd(null, orgId); if (stationList != null) { for (SdEngInfoBH station : stationList) { if (station.getStcd() != null) { @@ -401,7 +454,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl succeededIds, - Map originalStatusMap, - Exception originalException) { + List succeededIds, + Map originalStatusMap, + Exception originalException) { try { for (List batchIds : splitList(normalizeBatchValues(succeededIds), IN_QUERY_BATCH_SIZE)) { executeInNewTransaction(() -> { diff --git a/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml b/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml index 205a2796..9d127754 100644 --- a/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml +++ b/backend/src/main/resources/mapper/data/FishDraftDataMapper.xml @@ -191,6 +191,61 @@ ORDER BY D.TM DESC, D.ROW_INDEX ASC + + From 6e733f55198cf88dc00c665b5d71fa3381cd3e45 Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 14:48:35 +0800 Subject: [PATCH 06/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../threedRoam/domain/MsThreedRoamMEntity.java | 13 +++++-------- .../qgc_sys/threedRoam/dto/MsThreedRoamMVO.java | 3 +++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java index 2d9d82dc..28c28121 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/domain/MsThreedRoamMEntity.java @@ -1,9 +1,6 @@ package com.yfd.platform.qgc_sys.threedRoam.domain; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.io.Serializable; @@ -36,16 +33,16 @@ public class MsThreedRoamMEntity implements Serializable { @TableField("REMARK") private String remark; - @TableField("RECORD_USER") + @TableField(value = "RECORD_USER",fill = FieldFill.INSERT) private String recordUser; - @TableField("RECORD_TIME") + @TableField(value = "RECORD_TIME",fill = FieldFill.INSERT) private Date recordTime; - @TableField("MODIFY_USER") + @TableField(value = "MODIFY_USER",fill = FieldFill.INSERT_UPDATE) private String modifyUser; - @TableField("MODIFY_TIME") + @TableField(value = "MODIFY_TIME",fill = FieldFill.INSERT_UPDATE) private Date modifyTime; @TableField("IS_DELETED") diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java index 7fb0a15b..ec9c6e91 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/threedRoam/dto/MsThreedRoamMVO.java @@ -25,6 +25,9 @@ public class MsThreedRoamMVO { @Schema(description = "河段") private String rvcd; + @Schema(description = "河段") + private String baseId; + @Schema(description = "备注") private String remark; From a248c61a2c962945a94f2f5e90951b29dec205ed Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 17:07:24 +0800 Subject: [PATCH 07/14] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E8=BE=BE?= =?UTF-8?q?=E6=A2=A6=E6=95=B0=E6=8D=AE=E5=BA=93=E9=85=8D=E7=BD=AE&?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=9E=E6=8E=A5=E8=BE=BE=E6=A2=A6=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/config/MyMetaObjectHandler.java | 5 +- .../wte/service/impl/WeFishServiceImpl.java | 306 +++++++++--------- .../src/main/resources/application-prod.yml | 12 +- 3 files changed, 164 insertions(+), 159 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/config/MyMetaObjectHandler.java b/backend/src/main/java/com/yfd/platform/config/MyMetaObjectHandler.java index 63de20da..71ec29a3 100644 --- a/backend/src/main/java/com/yfd/platform/config/MyMetaObjectHandler.java +++ b/backend/src/main/java/com/yfd/platform/config/MyMetaObjectHandler.java @@ -23,7 +23,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { Date now = new Date(); - + // 创建时间 this.strictInsertFill(metaObject, "createdAt", Date.class, now); @@ -31,7 +31,8 @@ public class MyMetaObjectHandler implements MetaObjectHandler { this.strictInsertFill(metaObject, "updatedAt", Date.class, now); // 更新时间 this.strictInsertFill(metaObject, "modifyTime", Date.class, now); - + // 更新时间 + this.strictInsertFill(metaObject, "recordTime", Date.class, now); try { String userId = SecurityUtils.getUserId(); // 创建人 diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java index b6da77f2..d9b6f10a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java @@ -437,7 +437,7 @@ public class WeFishServiceImpl implements WeFishService { "SUM(CASE WHEN we.DCPC = #{map.dcpc2} THEN NVL(fish.FCNT, 0) ELSE 0 END) AS fcnt2 " + "FROM SD_WE_R we " + "INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID AND NVL(fish.IS_DELETED, 0) = 0 " + - "INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD AND NVL(section.USFL, 0) = 1 " + + "INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD AND NVL(sec.USFL, 0) = 1 " + "INNER JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP AND NVL(dict.IS_DELETED, 0) = 0 " + "WHERE NVL(we.IS_DELETED, 0) = 0 " + "AND NVL(we.STATUS, 1) = 1 " + @@ -514,49 +514,49 @@ public class WeFishServiceImpl implements WeFishService { .append("CASE WHEN fishAgg.yr = #{map.endYear} THEN fishAgg.fcnt END AS endFtpCnt, ") .append("CASE WHEN fishAgg.yr = #{map.endYear} THEN totalAgg.fcnt END AS endCnt ") .append("FROM (") - .append("SELECT fish.FTP AS ftp, section.HBRVCD AS hbrvcd, SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ") + .append("SELECT fish.FTP AS ftp, sec.HBRVCD AS hbrvcd, SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ") .append("FROM SD_WE_R we ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ") + .append("INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD ") .append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ") - .append(" AND (section.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ") + .append(" AND (sec.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ") .append("WHERE NVL(we.STATUS, 1) = 1 ") .append("AND NVL(we.IS_DELETED, 0) = 0 ") .append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("fishPageBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.fishPageBaseId} "); + sql.append("AND sec.BASE_ID = #{map.fishPageBaseId} "); } if (StrUtil.isNotBlank(hbrvcd)) { paramMap.put("fishPageHbrvcd", hbrvcd); - sql.append("AND section.HBRVCD = #{map.fishPageHbrvcd} "); + sql.append("AND sec.HBRVCD = #{map.fishPageHbrvcd} "); } if (StrUtil.isNotBlank(rstcd)) { paramMap.put("fishPageRstcd", rstcd); - sql.append("AND section.RSTCD = #{map.fishPageRstcd} "); + sql.append("AND sec.RSTCD = #{map.fishPageRstcd} "); } - sql.append("GROUP BY fish.FTP, section.HBRVCD, TO_CHAR(we.TM, 'YYYY') ") + sql.append("GROUP BY fish.FTP, sec.HBRVCD, TO_CHAR(we.TM, 'YYYY') ") .append(") fishAgg ") .append("LEFT JOIN (") .append("SELECT SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ") .append("FROM SD_WE_R we ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ") + .append("INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD ") .append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ") - .append(" AND (section.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ") + .append(" AND (sec.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ") .append("WHERE NVL(we.STATUS, 1) = 1 ") .append("AND NVL(we.IS_DELETED, 0) = 0 ") .append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) "); if (StrUtil.isNotBlank(baseId)) { - sql.append("AND section.BASE_ID = #{map.fishPageBaseId} "); + sql.append("AND sec.BASE_ID = #{map.fishPageBaseId} "); } if (StrUtil.isNotBlank(hbrvcd)) { - sql.append("AND section.HBRVCD = #{map.fishPageHbrvcd} "); + sql.append("AND sec.HBRVCD = #{map.fishPageHbrvcd} "); } if (StrUtil.isNotBlank(rstcd)) { - sql.append("AND section.RSTCD = #{map.fishPageRstcd} "); + sql.append("AND sec.RSTCD = #{map.fishPageRstcd} "); } sql.append("GROUP BY TO_CHAR(we.TM, 'YYYY') ") .append(") totalAgg ON totalAgg.yr = fishAgg.yr ") @@ -1087,33 +1087,33 @@ public class WeFishServiceImpl implements WeFishService { Map paramMap = new HashMap<>(); StringBuilder sql = new StringBuilder(); sql.append("SELECT ") - .append("section.STCD AS stcd, ") - .append("section.STNM AS stnm, ") - .append("section.LGTD AS lgtd, ") - .append("section.LTTD AS lttd, ") - .append("section.ELEV AS dtmel, ") - .append("section.RSTCD AS rstcds, ") + .append("sec.STCD AS stcd, ") + .append("sec.STNM AS stnm, ") + .append("sec.LGTD AS lgtd, ") + .append("sec.LTTD AS lttd, ") + .append("sec.ELEV AS dtmel, ") + .append("sec.RSTCD AS rstcds, ") .append("eng.ENNM AS ennm, ") .append("TO_CHAR(latest.TM, 'yyyy-mm-dd hh24:mi:ss') AS tm, ") .append("'WE' AS anchoPointState, ") .append("'WE' AS sttpMap, ") .append("'WE' AS sttp, ") .append("'WE' AS sttpCode, ") - .append("section.STNM AS titleName, ") - .append("section.RVCD AS rvcd, ") - .append("section.ADDVCD AS addvcd, ") - .append("section.BASE_ID AS baseId, ") - .append("section.RSTCD AS rstcd, ") + .append("sec.STNM AS titleName, ") + .append("sec.RVCD AS rvcd, ") + .append("sec.ADDVCD AS addvcd, ") + .append("sec.BASE_ID AS baseId, ") + .append("sec.RSTCD AS rstcd, ") .append("siteSort.SORT AS siteStepSort ") - .append("FROM SD_WE_B_H section ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("FROM SD_WE_B_H sec ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN ( ") .append(" SELECT STCD, MAX(TM) AS TM ") .append(" FROM SD_WE_R ") .append(" WHERE NVL(IS_DELETED, 0) = 0 AND STATUS = 1 ") .append(" GROUP BY STCD ") - .append(") latest ON latest.STCD = section.STCD ") - .append("LEFT JOIN MS_ALONG_B along ON along.BASEID = section.BASE_ID ") + .append(") latest ON latest.STCD = sec.STCD ") + .append("LEFT JOIN MS_ALONG_B along ON along.BASEID = sec.BASE_ID ") .append(" AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ") .append("LEFT JOIN ( ") .append(" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD ") @@ -1122,8 +1122,8 @@ public class WeFishServiceImpl implements WeFishService { .append(" WHERE NVL(det.IS_DELETED, 0) = 0 ") .append(" AND NVL(cfg.IS_DELETED, 0) = 0 ") .append(" AND cfg.CODE = 'common' ") - .append(") siteSort ON siteSort.BASEID = section.BASE_ID AND siteSort.STCD = section.STCD ") - .append("WHERE NVL(section.USFL, 1) = 1 "); + .append(") siteSort ON siteSort.BASEID = sec.BASE_ID AND siteSort.STCD = sec.STCD ") + .append("WHERE NVL(sec.USFL, 1) = 1 "); String filterSql = buildWePointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); if (StrUtil.isNotBlank(filterSql)) { @@ -1186,8 +1186,8 @@ public class WeFishServiceImpl implements WeFishService { .append("FROM SD_WE_R we ") .append("INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ") - .append(" AND NVL(section.USFL, 1) = 1 ") + .append("INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD ") + .append(" AND NVL(sec.USFL, 1) = 1 ") .append("INNER JOIN ( ") .append(" SELECT STCD, MAX(TM) AS TM ") .append(" FROM SD_WE_R ") @@ -1201,7 +1201,7 @@ public class WeFishServiceImpl implements WeFishService { .append(" WHERE NVL(rel.IS_DELETED, 0) = 0 ") .append(" AND NVL(dic.IS_DELETED, 0) = 0 ") .append(" AND (rel.FISH_ID <> rel.ZY_FISH_ID OR rel.RVCD = 'ZY') ") - .append(") dict ON fish.FTP = dict.FISH_ID AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append(") dict ON fish.FTP = dict.FISH_ID AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") .append("WHERE fish.FCNT IS NOT NULL ") .append("AND NVL(we.IS_DELETED, 0) = 0 ") .append("AND NVL(we.STATUS, 1) = 1 "); @@ -1925,16 +1925,16 @@ public class WeFishServiceImpl implements WeFishService { StringBuilder sql = new StringBuilder(); sql.append("SELECT t.BASE_ID AS hbrvcd, t.YR AS yr ") .append("FROM (") - .append("SELECT section.HBRVCD, section.RSTCD, section.BASE_ID, TO_CHAR(we.TM, 'yyyy') AS yr ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("SELECT sec.HBRVCD, sec.RSTCD, sec.BASE_ID, TO_CHAR(we.TM, 'yyyy') AS yr ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") .append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ") - .append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") - .append("WHERE NVL(section.USFL, 0) = 1 ") + .append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append("WHERE NVL(sec.USFL, 0) = 1 ") .append("AND CASE ") .append("WHEN dict.SPEC_ORIGIN = 2 THEN 1 ") .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN 2 ") @@ -1943,11 +1943,11 @@ public class WeFishServiceImpl implements WeFishService { if (StrUtil.isNotBlank(baseId)) { paramMap.put("weYearBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weYearBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weYearBaseId} "); } if (StrUtil.isNotBlank(hbrvcd)) { paramMap.put("weYearHbrvcd", hbrvcd); - sql.append("AND section.HBRVCD = #{map.weYearHbrvcd} "); + sql.append("AND sec.HBRVCD = #{map.weYearHbrvcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("weYearYr", yr); @@ -1965,11 +1965,11 @@ public class WeFishServiceImpl implements WeFishService { placeholders.add("#{map." + key + "}"); } if (CollUtil.isNotEmpty(placeholders)) { - sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") "); + sql.append("AND sec.RSTCD IN (").append(String.join(", ", placeholders)).append(") "); } } - sql.append("GROUP BY section.BASE_ID, section.HBRVCD, section.RSTCD, TO_CHAR(we.TM, 'yyyy')") + sql.append("GROUP BY sec.BASE_ID, sec.HBRVCD, sec.RSTCD, TO_CHAR(we.TM, 'yyyy')") .append(") t ") .append("INNER JOIN (") .append("SELECT det.STCD, det.SORT, cfg.RVCD ") @@ -1993,7 +1993,7 @@ public class WeFishServiceImpl implements WeFishService { StringBuilder sql = new StringBuilder(); sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ") .append("FROM (") - .append("SELECT section.RSTCD AS STCD, ") + .append("SELECT sec.RSTCD AS STCD, ") .append("eng.ENNM AS STNM, ") .append("COUNT(DISTINCT fish.FTP) AS NUM, ") .append("CASE ") @@ -2001,26 +2001,26 @@ public class WeFishServiceImpl implements WeFishService { .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ") .append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ") .append("END AS TY ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") // .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD ") .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ") - .append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") .append("WHERE 1 = 1 "); -// .append("WHERE NVL(section.USFL, 0) = 1 "); +// .append("WHERE NVL(sec.USFL, 0) = 1 "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weFishStatBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weFishStatBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weFishStatBaseId} "); } if (StrUtil.isNotBlank(hbrvcd)) { paramMap.put("weFishStatHbrvcd", hbrvcd); - sql.append("AND section.HBRVCD = #{map.weFishStatHbrvcd} "); + sql.append("AND sec.HBRVCD = #{map.weFishStatHbrvcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("weFishStatYr", yr); @@ -2038,7 +2038,7 @@ public class WeFishServiceImpl implements WeFishService { placeholders.add("#{map." + key + "}"); } if (CollUtil.isNotEmpty(placeholders)) { - sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") "); + sql.append("AND sec.RSTCD IN (").append(String.join(", ", placeholders)).append(") "); } } @@ -2047,7 +2047,7 @@ public class WeFishServiceImpl implements WeFishService { .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN 2 ") .append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN 3 ") .append("END IS NOT NULL ") - .append("GROUP BY section.RSTCD, eng.ENNM, CASE ") + .append("GROUP BY sec.RSTCD, eng.ENNM, CASE ") .append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ") .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ") .append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ") @@ -2074,7 +2074,7 @@ public class WeFishServiceImpl implements WeFishService { StringBuilder sql = new StringBuilder(); sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ") .append("FROM (") - .append("SELECT section.RSTCD AS STCD, ") + .append("SELECT sec.RSTCD AS STCD, ") .append("eng.ENNM AS STNM, ") .append("COUNT(DISTINCT fish.FTP) AS NUM, ") .append("CASE ") @@ -2083,29 +2083,29 @@ public class WeFishServiceImpl implements WeFishService { .append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ") .append("END AS TY, ") .append("TO_CHAR(we.TM, 'yyyy') AS YR ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD ") .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ") .append(" AND NVL(dict.IS_DELETED, 0) = 0 ") - .append("WHERE NVL(section.USFL, 0) = 1 "); + .append("WHERE NVL(sec.USFL, 0) = 1 "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weFishStatBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weFishStatBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weFishStatBaseId} "); } if (StrUtil.isNotBlank(hbrvcd)) { paramMap.put("weFishStatHbrvcd", hbrvcd); - sql.append("AND section.HBRVCD = #{map.weFishStatHbrvcd} "); + sql.append("AND sec.HBRVCD = #{map.weFishStatHbrvcd} "); } - sql.append("AND section.RSTCD IS NOT NULL ") + sql.append("AND sec.RSTCD IS NOT NULL ") .append("AND dict.SPEC_ORIGIN IS NOT NULL ") - .append("GROUP BY section.RSTCD, eng.ENNM, ") + .append("GROUP BY sec.RSTCD, eng.ENNM, ") .append("CASE ") .append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ") .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ") @@ -2189,36 +2189,36 @@ public class WeFishServiceImpl implements WeFishService { Map paramMap) { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") - .append("section.RSTCD AS rstcd, ") + .append("sec.RSTCD AS rstcd, ") .append("eng.ENNM AS rstcdName, ") - .append("TO_CHAR(WM_CONCAT(DISTINCT section.STCD)) AS stcd, ") - .append("TO_CHAR(WM_CONCAT(DISTINCT section.STNM)) AS stnm, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT sec.STCD)) AS stcd, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT sec.STNM)) AS stnm, ") .append("TO_CHAR(WM_CONCAT(DISTINCT dict.ZY_FISH_ID)) AS id ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON sec.RSTCD = eng.STCD ") .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ") - .append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") - .append("WHERE NVL(section.USFL, 0) = 1 ") - .append("AND section.RSTCD IS NOT NULL ") + .append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append("WHERE NVL(sec.USFL, 0) = 1 ") + .append("AND sec.RSTCD IS NOT NULL ") .append("AND dict.ZY_FISH_ID IS NOT NULL "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("qgcWeFishDetailBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.qgcWeFishDetailBaseId} "); + sql.append("AND sec.BASE_ID = #{map.qgcWeFishDetailBaseId} "); } if (StrUtil.isNotBlank(rstcd)) { paramMap.put("qgcWeFishDetailRstcd", rstcd); - sql.append("AND section.RSTCD = #{map.qgcWeFishDetailRstcd} "); + sql.append("AND sec.RSTCD = #{map.qgcWeFishDetailRstcd} "); } if (StrUtil.isNotBlank(rvcd)) { paramMap.put("qgcWeFishDetailRvcd", rvcd); - sql.append("AND section.HBRVCD = #{map.qgcWeFishDetailRvcd} "); + sql.append("AND sec.HBRVCD = #{map.qgcWeFishDetailRvcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("qgcWeFishDetailYr", yr); @@ -2233,7 +2233,7 @@ public class WeFishServiceImpl implements WeFishService { .append("END = #{map.qgcWeFishDetailTy} "); } - sql.append("GROUP BY section.RSTCD, eng.ENNM ") + sql.append("GROUP BY sec.RSTCD, eng.ENNM ") .append("ORDER BY eng.ENNM ASC NULLS LAST"); return sql.toString(); } @@ -2246,36 +2246,36 @@ public class WeFishServiceImpl implements WeFishService { Map paramMap) { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") - .append("section.RSTCD AS rstcd, ") + .append("sec.RSTCD AS rstcd, ") .append("eng.ENNM AS rstcdName, ") - .append("TO_CHAR(WM_CONCAT(DISTINCT section.STCD)) AS stcd, ") - .append("TO_CHAR(WM_CONCAT(DISTINCT section.STNM)) AS stnm, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT sec.STCD)) AS stcd, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT sec.STNM)) AS stnm, ") .append("TO_CHAR(WM_CONCAT(DISTINCT dict.NAME)) AS name ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON sec.RSTCD = eng.STCD ") .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ") .append(" AND NVL(dict.IS_DELETED, 0) = 0 ") - .append("WHERE NVL(section.USFL, 0) = 1 ") - .append("AND section.RSTCD IS NOT NULL ") + .append("WHERE NVL(sec.USFL, 0) = 1 ") + .append("AND sec.RSTCD IS NOT NULL ") .append("AND dict.NAME IS NOT NULL "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weFishDetailBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weFishDetailBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weFishDetailBaseId} "); } if (StrUtil.isNotBlank(rstcd)) { paramMap.put("weFishDetailRstcd", rstcd); - sql.append("AND section.RSTCD = #{map.weFishDetailRstcd} "); + sql.append("AND sec.RSTCD = #{map.weFishDetailRstcd} "); } if (StrUtil.isNotBlank(rvcd)) { paramMap.put("weFishDetailRvcd", rvcd); - sql.append("AND section.HBRVCD = #{map.weFishDetailRvcd} "); + sql.append("AND sec.HBRVCD = #{map.weFishDetailRvcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("weFishDetailYr", yr); @@ -2290,7 +2290,7 @@ public class WeFishServiceImpl implements WeFishService { .append("END = #{map.weFishDetailTy} "); } - sql.append("GROUP BY section.RSTCD, eng.ENNM ") + sql.append("GROUP BY sec.RSTCD, eng.ENNM ") .append("ORDER BY eng.ENNM ASC NULLS LAST"); return sql.toString(); } @@ -2303,36 +2303,36 @@ public class WeFishServiceImpl implements WeFishService { Map paramMap) { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") - .append("section.RSTCD AS rstcd, ") + .append("sec.RSTCD AS rstcd, ") .append("eng.ENNM AS rstcdName, ") - .append("section.STCD AS stcd, ") - .append("section.STNM AS stnm, ") + .append("sec.STCD AS stcd, ") + .append("sec.STNM AS stnm, ") .append("dict.ZY_FISH_ID AS id ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON sec.RSTCD = eng.STCD ") .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ") - .append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") - .append("WHERE NVL(section.USFL, 0) = 1 ") - .append("AND section.RSTCD IS NOT NULL ") + .append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append("WHERE NVL(sec.USFL, 0) = 1 ") + .append("AND sec.RSTCD IS NOT NULL ") .append("AND dict.ZY_FISH_ID IS NOT NULL "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("hbbQgcWeFishDetailBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.hbbQgcWeFishDetailBaseId} "); + sql.append("AND sec.BASE_ID = #{map.hbbQgcWeFishDetailBaseId} "); } if (StrUtil.isNotBlank(rstcd)) { paramMap.put("hbbQgcWeFishDetailRstcd", rstcd); - sql.append("AND section.RSTCD = #{map.hbbQgcWeFishDetailRstcd} "); + sql.append("AND sec.RSTCD = #{map.hbbQgcWeFishDetailRstcd} "); } if (StrUtil.isNotBlank(rvcd)) { paramMap.put("hbbQgcWeFishDetailRvcd", rvcd); - sql.append("AND section.HBRVCD = #{map.hbbQgcWeFishDetailRvcd} "); + sql.append("AND sec.HBRVCD = #{map.hbbQgcWeFishDetailRvcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("hbbQgcWeFishDetailYr", yr); @@ -2347,8 +2347,8 @@ public class WeFishServiceImpl implements WeFishService { .append("END = #{map.hbbQgcWeFishDetailTy} "); } - sql.append("GROUP BY section.RSTCD, eng.ENNM, section.STCD, section.STNM,dict.ZY_FISH_ID ") - .append("ORDER BY eng.ENNM ASC NULLS LAST, section.STNM ASC NULLS LAST"); + sql.append("GROUP BY sec.RSTCD, eng.ENNM, sec.STCD, sec.STNM,dict.ZY_FISH_ID ") + .append("ORDER BY eng.ENNM ASC NULLS LAST, sec.STNM ASC NULLS LAST"); return sql.toString(); } @@ -2364,27 +2364,27 @@ public class WeFishServiceImpl implements WeFishService { .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ") .append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ") .append("END AS ty ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ") .append(" AND NVL(dict.IS_DELETED, 0) = 0 ") - .append("WHERE NVL(section.USFL, 0) = 1 "); + .append("WHERE NVL(sec.USFL, 0) = 1 "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weFishStatTabBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weFishStatTabBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weFishStatTabBaseId} "); } if (StrUtil.isNotBlank(rvcd)) { paramMap.put("weFishStatTabRvcd", rvcd); - sql.append("AND section.HBRVCD = #{map.weFishStatTabRvcd} "); + sql.append("AND sec.HBRVCD = #{map.weFishStatTabRvcd} "); } if (StrUtil.isNotBlank(rstcd)) { paramMap.put("weFishStatTabRstcd", rstcd); - sql.append("AND section.RSTCD = #{map.weFishStatTabRstcd} "); + sql.append("AND sec.RSTCD = #{map.weFishStatTabRstcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("weFishStatTabYr", yr); @@ -2547,7 +2547,7 @@ public class WeFishServiceImpl implements WeFishService { "eng.RVCD_NAME AS rvcdName, " + "eng.HBRVCD AS hbrvcd, " + "eng.HBRVCD_NAME AS hbrvcdName, " + - "section.RSTCD AS rstcd, " + + "sec.RSTCD AS rstcd, " + "eng.ENNM AS ennm, " + "eng.BASE_ID AS baseId, " + "eng.BASE_NAME AS baseName, " + @@ -2557,9 +2557,9 @@ public class WeFishServiceImpl implements WeFishService { "FROM SD_WE_R we " + "INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID " + " AND NVL(fish.IS_DELETED, 0) = 0 " + - "INNER JOIN SD_WE_B_H section ON we.STCD = section.STCD " + - " AND NVL(section.USFL, 0) = 1 " + - "INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD " + + "INNER JOIN SD_WE_B_H sec ON we.STCD = sec.STCD " + + " AND NVL(sec.USFL, 0) = 1 " + + "INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD " + " AND NVL(eng.IS_DELETED, 0) = 0 " + "INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = fish.FTP " + " AND (eng.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') " + @@ -2580,11 +2580,11 @@ public class WeFishServiceImpl implements WeFishService { end = parseDateTimeSafely(endTime); } StringBuilder sql = new StringBuilder(); - sql.append("SELECT agg.ftp AS ftp, section.STCD AS stcd, section.RSTCD AS rstcds, ") - .append("section.STNM AS stnm, eng.ENNM AS ennm, ") - .append("section.LGTD AS lgtd, section.LTTD AS lttd, ") + sql.append("SELECT agg.ftp AS ftp, sec.STCD AS stcd, sec.RSTCD AS rstcds, ") + .append("sec.STNM AS stnm, eng.ENNM AS ennm, ") + .append("sec.LGTD AS lgtd, sec.LTTD AS lttd, ") .append("'ylfb' AS sttp, 'ylfb' AS sttpMap, ") - .append("section.RVCD AS rvcd, section.ADDVCD AS addvcd, section.BASE_ID AS baseId, ") + .append("sec.RVCD AS rvcd, sec.ADDVCD AS addvcd, sec.BASE_ID AS baseId, ") .append("'WE' AS sttpCode, 'ylfb' AS anchoPointState, '鱼类分布' AS titleName, ") .append("eng.ELEV AS dtmel ") .append("FROM (") @@ -2592,12 +2592,12 @@ public class WeFishServiceImpl implements WeFishService { .append("FROM (") .append("SELECT dict.ZY_FISH_ID AS ID, we.STCD AS stcd ") .append("FROM SD_WE_R we ") - .append("INNER JOIN SD_WE_B_H section ON we.STCD = section.STCD ") - .append(" AND NVL(section.USFL, 0) = 1 ") + .append("INNER JOIN SD_WE_B_H sec ON we.STCD = sec.STCD ") + .append(" AND NVL(sec.USFL, 0) = 1 ") .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") .append("INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = fish.FTP ") - .append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") .append("WHERE NVL(we.IS_DELETED, 0) = 0 ") .append("AND NVL(we.STATUS, 1) = 1 "); @@ -2625,12 +2625,12 @@ public class WeFishServiceImpl implements WeFishService { sql.append("AND we.STCD IN (") .append("SELECT a.STCD ") .append("FROM SD_WE_R a ") - .append("INNER JOIN SD_WE_B_H section2 ON a.STCD = section2.STCD ") - .append(" AND NVL(section2.USFL, 0) = 1 ") + .append("INNER JOIN SD_WE_B_H sec2 ON a.STCD = sec2.STCD ") + .append(" AND NVL(sec2.USFL, 0) = 1 ") .append("INNER JOIN SD_WEFISH_R b ON a.ID = b.WER_ID ") .append(" AND NVL(b.IS_DELETED, 0) = 0 ") .append("INNER JOIN V_SD_FISHDICTORY_B c ON c.FISH_ID = b.FTP ") - .append(" AND (section2.HBRVCD = c.RVCD OR c.RVCD = 'ZY') ") + .append(" AND (sec2.HBRVCD = c.RVCD OR c.RVCD = 'ZY') ") .append("WHERE NVL(a.IS_DELETED, 0) = 0 ") .append("AND NVL(a.STATUS, 1) = 1 "); if (start != null && end != null) { @@ -2644,16 +2644,16 @@ public class WeFishServiceImpl implements WeFishService { sql.append("GROUP BY we.STCD, dict.ZY_FISH_ID") .append(") t GROUP BY t.stcd") .append(") agg ") - .append("INNER JOIN SD_WE_B_H section ON agg.stcd = section.STCD ") - .append(" AND NVL(section.USFL, 0) = 1 ") - .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD ") + .append("INNER JOIN SD_WE_B_H sec ON agg.stcd = sec.STCD ") + .append(" AND NVL(sec.USFL, 0) = 1 ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD ") .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") .append("WHERE 1 = 1 "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weFishPointBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weFishPointBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weFishPointBaseId} "); } - sql.append("ORDER BY section.STCD ASC"); + sql.append("ORDER BY sec.STCD ASC"); return sql.toString(); } @@ -2669,14 +2669,14 @@ public class WeFishServiceImpl implements WeFishService { } return switch (field) { - case "stcd" -> "section.STCD"; - case "lgtd" -> "section.LGTD"; - case "stnm", "titleName" -> "section.STNM"; + case "stcd" -> "sec.STCD"; + case "lgtd" -> "sec.LGTD"; + case "stnm", "titleName" -> "sec.STNM"; case "ennm" -> "eng.ENNM"; - case "rvcd" -> "section.RVCD"; - case "addvcd" -> "section.ADDVCD"; - case "baseId" -> "section.BASE_ID"; - case "rstcd", "rstcds" -> "section.RSTCD"; + case "rvcd" -> "sec.RVCD"; + case "addvcd" -> "sec.ADDVCD"; + case "baseId" -> "sec.BASE_ID"; + case "rstcd", "rstcds" -> "sec.RSTCD"; case "tm" -> "latest.TM"; default -> null; }; @@ -2709,13 +2709,13 @@ public class WeFishServiceImpl implements WeFishService { return null; } return switch (field) { - case "stcd" -> "section.STCD"; - case "stnm", "titleName" -> "section.STNM"; + case "stcd" -> "sec.STCD"; + case "stnm", "titleName" -> "sec.STNM"; case "ennm" -> "eng.ENNM"; case "tm" -> "latest.TM"; - case "rvcd" -> "section.RVCD"; - case "addvcd" -> "section.ADDVCD"; - case "baseId" -> "section.BASE_ID"; + case "rvcd" -> "sec.RVCD"; + case "addvcd" -> "sec.ADDVCD"; + case "baseId" -> "sec.BASE_ID"; case "siteStepSort" -> "siteSort.SORT"; default -> null; }; @@ -3949,21 +3949,21 @@ public class WeFishServiceImpl implements WeFishService { .append("COUNT(DISTINCT we.STCD) AS stcdCount, ") .append("COUNT(DISTINCT fish.FTP) AS ftpCount, ") .append("NVL(SUM(NVL(fish.FCNT, 0)), 0) AS fcntSum ") - .append("FROM SD_WE_B_H section ") - .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append("FROM SD_WE_B_H sec ") + .append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ") .append(" AND NVL(we.IS_DELETED, 0) = 0 ") .append(" AND NVL(we.STATUS, 1) = 1 ") .append("LEFT JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID ") .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") - .append("WHERE NVL(section.USFL, 0) = 1 "); + .append("WHERE NVL(sec.USFL, 0) = 1 "); if (StrUtil.isNotBlank(baseId)) { paramMap.put("weStaticsBaseId", baseId); - sql.append("AND section.BASE_ID = #{map.weStaticsBaseId} "); + sql.append("AND sec.BASE_ID = #{map.weStaticsBaseId} "); } if (StrUtil.isNotBlank(hbrvcd)) { paramMap.put("weStaticsHbrvcd", hbrvcd); - sql.append("AND section.HBRVCD = #{map.weStaticsHbrvcd} "); + sql.append("AND sec.HBRVCD = #{map.weStaticsHbrvcd} "); } if (StrUtil.isNotBlank(yr)) { paramMap.put("weStaticsYr", yr); @@ -3981,7 +3981,7 @@ public class WeFishServiceImpl implements WeFishService { placeholders.add("#{map." + key + "}"); } if (CollUtil.isNotEmpty(placeholders)) { - sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") "); + sql.append("AND sec.RSTCD IN (").append(String.join(", ", placeholders)).append(") "); } } return sql.toString(); @@ -4001,8 +4001,8 @@ public class WeFishServiceImpl implements WeFishService { private String buildWeFishTDetailSql() { return "SELECT " + - "section.STCD AS stcd, " + - "section.STNM AS stnm, " + + "sec.STCD AS stcd, " + + "sec.STNM AS stnm, " + "eng.BASE_ID AS baseId, " + "eng.BASE_NAME AS baseName, " + "eng.RVCD AS rvcd, " + @@ -4044,9 +4044,9 @@ public class WeFishServiceImpl implements WeFishService { "FROM SD_WE_R we " + "INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID " + " AND NVL(fish.IS_DELETED, 0) = 0 " + - "INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD " + - " AND NVL(section.USFL, 0) = 1 " + - "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD " + + "INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD " + + " AND NVL(sec.USFL, 0) = 1 " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD " + " AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP " + " AND NVL(dict.IS_DELETED, 0) = 0 " + @@ -4056,8 +4056,8 @@ public class WeFishServiceImpl implements WeFishService { private String buildWeFishQgcDetailSql() { return "SELECT " + - "section.STCD AS stcd, " + - "section.STNM AS stnm, " + + "sec.STCD AS stcd, " + + "sec.STNM AS stnm, " + "eng.BASE_ID AS baseId, " + "eng.BASE_NAME AS baseName, " + "eng.RVCD AS rvcd, " + @@ -4099,9 +4099,9 @@ public class WeFishServiceImpl implements WeFishService { "FROM SD_WE_R we " + "INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID " + " AND NVL(fish.IS_DELETED, 0) = 0 " + - "INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD " + -// " AND NVL(section.USFL, 0) = 1 " + - "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD " + + "INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD " + +// " AND NVL(sec.USFL, 0) = 1 " + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD " + " AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP " + // " AND (dict.RVCD = 'ZY' OR dict.RVCD = eng.HBRVCD) " + diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 24473695..1c569fca 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -11,8 +11,10 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: master: - driverClassName: oracle.jdbc.OracleDriver - url: "${DB_MASTER_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}" +# driverClassName: oracle.jdbc.OracleDriver +# url: "${DB_MASTER_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}" + driverClassName: dm.jdbc.driver.DmDriver + url: "${DB_MASTER_URL:jdbc:dm://172.16.21.143:5236/QGC_REFA}" username: "${DB_MASTER_USERNAME:QGC_REFA}" password: "${DB_MASTER_PASSWORD:Y4M4K1oCkL8U}" initial-size: 5 @@ -41,8 +43,10 @@ spring: max-pool-prepared-statement-per-connection-size: 100 connection-properties: oracle.net.CONNECT_TIMEOUT=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000 slave: - driverClassName: oracle.jdbc.OracleDriver - url: "${DB_SLAVE_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}" + driverClassName: dm.jdbc.driver.DmDriver + url: "${DB_MASTER_URL:jdbc:dm://172.16.21.143:5236/QGC_REFA}" +# driverClassName: oracle.jdbc.OracleDriver +# url: "${DB_SLAVE_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}" username: "${DB_SLAVE_USERNAME:QGC_REFA}" password: "${DB_SLAVE_PASSWORD:Y4M4K1oCkL8U}" initial-size: 5 From 1866e3b27422d4c82147f19763823512c2686ea7 Mon Sep 17 00:00:00 2001 From: tangwei Date: Thu, 16 Jul 2026 17:49:11 +0800 Subject: [PATCH 08/14] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yfd/platform/qgc_env/fpr/entity/vo/FprZyFishDicVo.java | 1 + .../qgc_env/fpr/service/impl/FprMonitorServiceImpl.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprZyFishDicVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprZyFishDicVo.java index 7dad88bf..71947bd0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprZyFishDicVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprZyFishDicVo.java @@ -15,6 +15,7 @@ public class FprZyFishDicVo { private String rvcdName; private String name; private Integer type; + private String typeName; private String family; private String genus; private String species; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java index d6cde63c..6a55e3c3 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java @@ -800,6 +800,7 @@ public class FprMonitorServiceImpl implements FprMonitorService { "rv.RVNM AS rvcdName, " + "src.NAME AS name, " + "src.TYPE AS type, " + + "CASE WHEN src.TYPE = 1 THEN '淡水' WHEN src.TYPE = 2 THEN '海水' ELSE '未知' END AS typeName,"+ "src.FAMILY AS family, " + "src.GENUS AS genus, " + "src.SPECIES AS species, " + @@ -848,6 +849,7 @@ public class FprMonitorServiceImpl implements FprMonitorService { "NVL(relAgg.rvcdName, '') AS rvcdName, " + "src.NAME AS name, " + "src.TYPE AS type, " + + "CASE WHEN src.TYPE = 1 THEN '淡水' WHEN src.TYPE = 2 THEN '海水' ELSE '未知' END AS typeName,"+ "src.FAMILY AS family, " + "src.GENUS AS genus, " + "src.SPECIES AS species, " + From 4a2ba4863da23d354ca55ca72893400d934b3c64 Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 17 Jul 2026 10:26:50 +0800 Subject: [PATCH 09/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/yfd/platform/common/GroupHelper.java | 5 ++++- .../qgc_base/service/impl/SdEngInfoBHServiceImpl.java | 2 +- .../qgc_env/overview/entity/vo/OverviewVmsstbprptVo.java | 5 +++++ .../qgc_env/overview/service/impl/OverviewServiceImpl.java | 5 +++++ .../com/yfd/platform/qgc_lygk/along/domain/MsAlongDetB.java | 6 +++++- .../qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java | 4 ++-- 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/common/GroupHelper.java b/backend/src/main/java/com/yfd/platform/common/GroupHelper.java index aaf612b5..6b707ee9 100644 --- a/backend/src/main/java/com/yfd/platform/common/GroupHelper.java +++ b/backend/src/main/java/com/yfd/platform/common/GroupHelper.java @@ -92,7 +92,10 @@ public class GroupHelper { for(Map item : data) { Object groupKey = this.getKey(item, groupInfo); - Object groupIndexKey = groupKey != null ? groupKey : null; + if (groupKey == null) { + continue; + } + Object groupIndexKey = groupKey; Object tempCount = item.get("count_" + groupInfo.getSelector()); if (tempCount == null) { tempCount = item.get("COUNT_" + groupInfo.getSelector().toUpperCase()); 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 index 7e34245e..1418a713 100644 --- 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 @@ -170,7 +170,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl powerDtos = msAlongDetBMapper.getWbsbList(stcd); if (CollUtil.isNotEmpty(powerDtos)) { // 取第一个结果(通常一个 STCD 只对应一条记录) - String stnm = powerDtos.get(0).getStnm(); + String stnm = powerDtos.getFirst().getStnm(); record.setStnm(stnm); } } @@ -154,7 +154,7 @@ public class MsAlongDetBServiceImpl extends ServiceImpl Date: Fri, 17 Jul 2026 14:16:22 +0800 Subject: [PATCH 10/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=94=B5?= =?UTF-8?q?=E7=AB=99=E6=9F=A5=E8=AF=A2=E5=AD=97=E6=AE=B5=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yfd/platform/config/MybitsPlusConfig.java | 4 +- .../service/impl/SdEngInfoBHServiceImpl.java | 48 +++++++++---------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/config/MybitsPlusConfig.java b/backend/src/main/java/com/yfd/platform/config/MybitsPlusConfig.java index 99d43307..eff73ed2 100644 --- a/backend/src/main/java/com/yfd/platform/config/MybitsPlusConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/MybitsPlusConfig.java @@ -28,7 +28,9 @@ public class MybitsPlusConfig { public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加分页拦截器,指定数据库类型为 Oracle - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE)); +// interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE)); + // 添加分页拦截器,指定数据库类型为 Oracle + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.DM)); return interceptor; } 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 index 1418a713..adfb2590 100644 --- 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 @@ -1237,9 +1237,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl Date: Fri, 17 Jul 2026 14:31:21 +0800 Subject: [PATCH 11/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=94=B5?= =?UTF-8?q?=E7=AB=99=E6=9F=A5=E8=AF=A2=E9=98=B2=E6=B4=AA=E6=89=A9=E5=AE=B9?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=80=BC=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SdEngInfoBHServiceImpl.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) 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 index adfb2590..3b2674fb 100644 --- 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 @@ -1261,7 +1261,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl 0\n" + + " GROUP BY STCD, TM ) temp\n" + + " GROUP BY STCD) b ON b.STCD = eng.STCD " + "LEFT JOIN MS_ALONG_B along ON along.BASEID = eng.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + "LEFT JOIN ( " + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + From 9b93565fc55eaf53d38fce17535498c2b8ba885e Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 17 Jul 2026 15:26:45 +0800 Subject: [PATCH 12/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=A2=AF?= =?UTF-8?q?=E7=BA=A7=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SdEngInfoBHServiceImpl.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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 index 3b2674fb..8e700969 100644 --- 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 @@ -3519,10 +3519,10 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl paramMap = new HashMap<>(); StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT ") - .append("dic.HBRVCD AS wbsCode, ") - .append("dic.HBRVNM AS wbsName, ") + .append("dic.BASEID AS wbsCode, ") + .append("dic.BASENAME AS wbsName, ") .append("dic.BASEID AS objId, ") .append("NVL(dic.BASEID, 'ZZZZZZZZ') AS baseOrder, ") .append("NVL(dic.ORDER_INDEX, 999999) AS orderIndex ") - .append("FROM SD_HBRV_DIC dic ") - .append("INNER JOIN SD_RSVRCSCD_B r ON r.RVCD = dic.HBRVCD AND NVL(r.IS_DELETED, 0) = 0 ") + .append("FROM SD_HYDROBASE dic ") + .append("INNER JOIN SD_RSVRCSCD_B r ON r.BASE_ID = dic.BASEID AND NVL(r.IS_DELETED, 0) = 0 ") .append("WHERE NVL(dic.IS_DELETED, 0) = 0 ") .append("AND NVL(dic.ENABLED, 1) = 1 "); @@ -3712,7 +3712,8 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl "r.ID"; - case "rvcd" -> "r.RVCD"; + case "rvcd" -> "eng.BASE_ID"; + case "baseId" -> "eng.BASE_ID"; case "rvcdName" -> "rv.RVNM"; case "stcd" -> "r.STCD"; case "ennm" -> "r.ENNM"; From fdf14634271cec938c46d17642a3ce4afbd4d5b4 Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 17 Jul 2026 16:51:15 +0800 Subject: [PATCH 13/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=A2=AF?= =?UTF-8?q?=E7=BA=A7=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/qgc_base/domain/vo/EngRsvrcscdBVo.java | 2 ++ .../qgc_base/service/impl/SdEngInfoBHServiceImpl.java | 1 + backend/src/main/resources/application-prod.yml | 10 ++++++---- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java index c402b4a4..4ccc4736 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java @@ -13,6 +13,8 @@ public class EngRsvrcscdBVo { private String rvcdName; + private String bldsttCcode; + private String stcd; private String ennm; 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 index 8e700969..7259fdca 100644 --- 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 @@ -3522,6 +3522,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl Date: Fri, 17 Jul 2026 17:38:57 +0800 Subject: [PATCH 14/14] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=B2=BF?= =?UTF-8?q?=E7=A8=8B=E7=94=A8=E6=88=B7=E5=90=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../along/controller/MsAlongBController.java | 5 ++++ .../qgc_lygk/along/domain/MsAlongB.java | 4 +++ .../utils/AsyncWithCompletableFuture.java | 30 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/utils/AsyncWithCompletableFuture.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java index 5c663e81..1118572b 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java @@ -6,6 +6,7 @@ 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.exception.BizException; +import com.yfd.platform.common.utils.UserNameFillHelper; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_base.service.ISdHbrvDicService; import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; @@ -42,6 +43,9 @@ public class MsAlongBController { @Resource private ISdHbrvDicService hbrvDicService; + + @Resource + private UserNameFillHelper userNameFillHelper; /** * 条件过滤数据列表 */ @@ -49,6 +53,7 @@ public class MsAlongBController { @PostMapping("/GetKendoList") public ResponseResult getKendoList(@RequestBody DataSourceRequest dataSourceRequest) { DataSourceResult result = msAlongBService.getKendoList(dataSourceRequest); + userNameFillHelper.fillUserNames(result.getData()); return ResponseResult.successData(result); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongB.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongB.java index 8922b884..c43ef2fb 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongB.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongB.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.yfd.platform.annotation.UserIdField; +import com.yfd.platform.annotation.UserNameField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -47,10 +49,12 @@ public class MsAlongB implements Serializable { /** 创建人 */ @TableField("RECORD_USER") + @UserIdField private String recordUser; /** 创建人名称(非数据库字段) */ @TableField(exist = false) + @UserNameField private String recordUserName; /** 创建时间 */ diff --git a/backend/src/main/java/com/yfd/platform/utils/AsyncWithCompletableFuture.java b/backend/src/main/java/com/yfd/platform/utils/AsyncWithCompletableFuture.java new file mode 100644 index 00000000..eb234848 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/utils/AsyncWithCompletableFuture.java @@ -0,0 +1,30 @@ +package com.yfd.platform.utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class AsyncWithCompletableFuture { + public static void main(String[] args) throws Exception { + // 异步执行任务,返回 CompletableFuture + CompletableFuture> future = CompletableFuture.supplyAsync(() -> { + List list = new ArrayList<>(); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + return list; + }); + + // 注册回调(非阻塞) + future.thenAccept(result -> System.out.println("回调收到结果: " + result)); + + // 主线程继续执行 + System.out.println("主线程继续..."); + + // 防止主线程提前退出(如果不想阻塞,可以省略) + future.join(); // 或 future.get() + } +} \ No newline at end of file