From be1d3d95ffb55044e9e134762e2eeb377eb25e87 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 21 Jul 2026 09:32:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=BF=87=E9=B1=BC?= =?UTF-8?q?=E8=AE=BE=E6=96=BD=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yfd/platform/config/SecurityConfig.java | 46 +++++++------- .../controller/SdFpssBHController.java | 22 +++++-- .../platform/qgc_base/domain/SdFpssBH.java | 46 ++++++++++++++ .../qgc_base/service/ISdFpssBHService.java | 8 ++- .../service/impl/SdFpssBHServiceImpl.java | 62 +++++++++++++++++-- .../service/impl/MsAlongBServiceImpl.java | 36 +++++++++-- 6 files changed, 180 insertions(+), 40 deletions(-) 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 f32fd789..3fbb007d 100644 --- a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java @@ -61,29 +61,29 @@ public class SecurityConfig { .requestMatchers("/tempFile/**").permitAll() .requestMatchers("/system/user/auditUser").permitAll() .requestMatchers("/register/accessToken").permitAll() - .requestMatchers("/eng/**").permitAll() - .requestMatchers("/eq/**").permitAll() - .requestMatchers("/env/**").permitAll() - .requestMatchers("/warn/**").permitAll() - .requestMatchers("/threedroamb/**").permitAll() - .requestMatchers("/overview/**").permitAll() - .requestMatchers("/wt/**").permitAll() - .requestMatchers("/fb/**").permitAll() - .requestMatchers("/base/**").permitAll() - .requestMatchers("/zq/**").permitAll() - .requestMatchers("/wq/**").permitAll() - .requestMatchers("/wte/**").permitAll() - .requestMatchers("/vd/**").permitAll() - .requestMatchers("/vap/**").permitAll() - .requestMatchers("/fp/**").permitAll() - .requestMatchers("/fpr/**").permitAll() - .requestMatchers("/fh/**").permitAll() - .requestMatchers("/data/**").permitAll() - .requestMatchers("/mapLayer/**").permitAll() - .requestMatchers("/mapmodule/**").permitAll() - .requestMatchers("/mapLegend/**").permitAll() - .requestMatchers("/base/msalongb/**").permitAll() - .requestMatchers("/base/msalongdetb/**").permitAll() +// .requestMatchers("/eng/**").permitAll() +// .requestMatchers("/eq/**").permitAll() +// .requestMatchers("/env/**").permitAll() +// .requestMatchers("/warn/**").permitAll() +// .requestMatchers("/threedroamb/**").permitAll() +// .requestMatchers("/overview/**").permitAll() +// .requestMatchers("/wt/**").permitAll() +// .requestMatchers("/fb/**").permitAll() +// .requestMatchers("/base/**").permitAll() +// .requestMatchers("/zq/**").permitAll() +// .requestMatchers("/wq/**").permitAll() +// .requestMatchers("/wte/**").permitAll() +// .requestMatchers("/vd/**").permitAll() +// .requestMatchers("/vap/**").permitAll() +// .requestMatchers("/fp/**").permitAll() +// .requestMatchers("/fpr/**").permitAll() +// .requestMatchers("/fh/**").permitAll() +// .requestMatchers("/data/**").permitAll() +// .requestMatchers("/mapLayer/**").permitAll() +// .requestMatchers("/mapmodule/**").permitAll() +// .requestMatchers("/mapLegend/**").permitAll() +// .requestMatchers("/base/msalongb/**").permitAll() +// .requestMatchers("/base/msalongdetb/**").permitAll() .requestMatchers("/sms/**").permitAll() .requestMatchers(HttpMethod.GET, "/").permitAll() .requestMatchers(HttpMethod.GET, diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java index 9c38b5d1..efbb84c1 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssBHController.java @@ -1,8 +1,11 @@ package com.yfd.platform.qgc_base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; import com.yfd.platform.annotation.Log; +import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_base.domain.SdEngInfoBHOperateRequest; import com.yfd.platform.qgc_base.domain.SdFpssBH; import com.yfd.platform.qgc_base.service.ISdFpssBHService; import io.swagger.v3.oas.annotations.Operation; @@ -22,6 +25,8 @@ public class SdFpssBHController { @Resource private ISdFpssBHService sdFpssBHService; + @Resource + private ObjectMapper objectMapper; @GetMapping("/queryPageList") @Operation(summary = "分页查询过鱼设施列表") @@ -37,6 +42,13 @@ public class SdFpssBHController { return ResponseResult.successData(result); } + @PostMapping("/page") + @Operation(summary = "分页查询") + public ResponseResult queryPageList(@RequestBody DataSourceRequest request) { + Page page = sdFpssBHService.queryPageList(request); + return ResponseResult.successData(page); + } + @GetMapping("/list") @Operation(summary = "查询所有过鱼设施") public ResponseResult list() { @@ -68,16 +80,18 @@ public class SdFpssBHController { @Log(module = "过鱼设施管理", value = "新增过鱼设施") @PostMapping("/add") @Operation(summary = "新增过鱼设施") - public ResponseResult add(@RequestBody SdFpssBH sdFpssBH) { - boolean result = sdFpssBHService.add(sdFpssBH); + public ResponseResult add(@RequestBody SdEngInfoBHOperateRequest request) { + SdFpssBH entity = request == null || request.getEngInfo() == null ? null : objectMapper.convertValue(request.getEngInfo(), SdFpssBH.class); + boolean result = sdFpssBHService.add(entity, request == null ? null : request.getSource()); return result ? ResponseResult.success("新增成功") : ResponseResult.error("新增失败"); } @Log(module = "过鱼设施管理", value = "修改过鱼设施") @PostMapping("/update") @Operation(summary = "修改过鱼设施") - public ResponseResult update(@RequestBody SdFpssBH sdFpssBH) { - boolean result = sdFpssBHService.updateById(sdFpssBH); + public ResponseResult update(@RequestBody SdEngInfoBHOperateRequest request) { + SdFpssBH entity = request == null || request.getEngInfo() == null ? null : objectMapper.convertValue(request.getEngInfo(), SdFpssBH.class); + boolean result = sdFpssBHService.updateById(entity, request == null ? null : request.getSource()); return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败"); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java index 66d4e2e9..eeee4a8a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssBH.java @@ -32,6 +32,11 @@ public class SdFpssBH implements Serializable { */ private String stnm; + /** + * 所属水电基地流域编码 + */ + private String hbrvcd; + /** * 数据时间 */ @@ -43,6 +48,17 @@ public class SdFpssBH implements Serializable { */ private String sttp; + @TableField(exist = false) + private String sttpName; + + /** + * 所属基地编码 + */ + private String baseId; + + @TableField(exist = false) + private String baseName; + /** * 所属建设阶段 字典编码:common.blprd * 1001000=规划 1002000=预可研 1003000=环评 1004000=可研 1005000=在建 1006000=招标设计 @@ -80,6 +96,9 @@ public class SdFpssBH implements Serializable { */ private Integer dtin; + @TableField(exist = false) + private String dtinName; + /** * 数据接入时间 */ @@ -95,6 +114,9 @@ public class SdFpssBH implements Serializable { */ private String rstcd; + @TableField(exist = false) + private String ennm; + /** * 规划设计日期 */ @@ -130,6 +152,9 @@ public class SdFpssBH implements Serializable { */ private Integer bldsttCode; + @TableField(exist = false) + private String bldsttCodeName; + /** * 简介 */ @@ -335,6 +360,11 @@ public class SdFpssBH implements Serializable { */ private String gytm; + /** + * 所属测站编码 + */ + private String stCode; + /** * 运行时间 */ @@ -360,11 +390,27 @@ public class SdFpssBH implements Serializable { */ private Integer isUp; + @TableField(exist = false) + private String isUpName; + /** * 设施是否实现鱼类下行 0=否 1=是 */ private Integer isDown; + @TableField(exist = false) + private String isDownName; + + /** + * 监测方式:1=人工 2=自动 + */ + private Integer mway; + + + @TableField(exist = false) + private String mwayName; + + /** * 备注 */ diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java index f9960352..cbcd2fcb 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssBHService.java @@ -2,6 +2,8 @@ package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.qgc_base.domain.SdFhbtBH; import com.yfd.platform.qgc_base.domain.SdFpssBH; import java.util.List; @@ -20,11 +22,13 @@ public interface ISdFpssBHService extends IService { Set getUserAuthorizedStationCodes(); - boolean add(SdFpssBH sdFpssBH); + boolean add(SdFpssBH sdFpssBH, String source); - boolean updateById(SdFpssBH sdFpssBH); + boolean updateById(SdFpssBH sdFpssBH, String source); boolean deleteById(String stcd, String sttp); SdFpssBH getDetail(String stcd, String sttp); + + Page queryPageList(DataSourceRequest request); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java index c85ffa59..152ded95 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java @@ -3,14 +3,19 @@ package com.yfd.platform.qgc_base.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.yfd.platform.qgc_data.domain.SysUserDataScope; -import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; +import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.qgc_base.domain.SdEngInfoBH; import com.yfd.platform.qgc_base.domain.SdFpssBH; import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; import com.yfd.platform.qgc_base.mapper.SdFpssBHMapper; +import com.yfd.platform.qgc_base.service.IMsOperationLogService; import com.yfd.platform.qgc_base.service.ISdFpssBHService; +import com.yfd.platform.qgc_data.domain.SysUserDataScope; +import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; import com.yfd.platform.system.service.IAdminAuthService; +import com.yfd.platform.utils.CodeToNameMetadataBo; +import com.yfd.platform.utils.DataSourceRequestUtil; +import com.yfd.platform.utils.DictCodeToNameConverter; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -25,6 +30,7 @@ import java.util.stream.Collectors; @Service public class SdFpssBHServiceImpl extends ServiceImpl implements ISdFpssBHService { + private static final String TABLE_NAME = "SD_FPSS_B_H"; @Resource private SysUserDataScopeMapper sysUserDataScopeMapper; @Resource @@ -33,6 +39,41 @@ public class SdFpssBHServiceImpl extends ServiceImpl i @Resource private IAdminAuthService adminAuthService; + @Resource + private DictCodeToNameConverter dictCodeToNameConverter; + + @Resource + private IMsOperationLogService msOperationLogService; + + /** + * 代码转名称元数据配置列表(静态初始化) + *

+ * 每个模块的 ServiceImpl 中可按需定义自己的 codeToNameMetadataBoList, + * 在查询方法返回前调用 dictCodeToNameConverter.convertCodeToName(voList, codeToNameMetadataBoList) + * 即可自动将 code 字段转为对应的 name 字段。 + *

+ * + *
+     * 使用示例:
+     * // 在查询方法末尾调用:
+     * dictCodeToNameConverter.convertCodeToName(voList, CODE_TO_NAME_META_LIST);
+     * 
+ */ + private static final List CODE_TO_NAME_META_LIST = new ArrayList<>(); + + static { + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build()); +// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("mway").modifyProperty("mwayName").dictType("STATIC").dictSource("MWAY").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("isUp").modifyProperty("isUpName").dictType("STATIC").dictSource("TY_SF").build()); + CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("isDown").modifyProperty("isDownName").dictType("STATIC").dictSource("TY_SF").build()); + + } @Override public Page selectPage(String stcd, String sttp, String rstcd, Integer usfl, Page page) { @@ -173,12 +214,16 @@ public class SdFpssBHServiceImpl extends ServiceImpl i } @Override - public boolean add(SdFpssBH sdFpssBH) { - return save(sdFpssBH); + public boolean add(SdFpssBH entity, String source) { + boolean result = save(entity); + if (result) { + msOperationLogService.recordOperationLog(TABLE_NAME, entity.getStcd(), "新增", source); + } + return result; } @Override - public boolean updateById(SdFpssBH sdFpssBH) { + public boolean updateById(SdFpssBH sdFpssBH, String source) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SdFpssBH::getStcd, sdFpssBH.getStcd()) .eq(SdFpssBH::getSttp, sdFpssBH.getSttp()); @@ -200,4 +245,11 @@ public class SdFpssBHServiceImpl extends ServiceImpl i .eq(SdFpssBH::getSttp, sttp); return getOne(wrapper); } + + @Override + public Page queryPageList(DataSourceRequest request) { + Page sdFpssBHPage = DataSourceRequestUtil.executeQuery(request, SdFpssBH.class, this); + dictCodeToNameConverter.convertCodeToName(sdFpssBHPage, CODE_TO_NAME_META_LIST); + return sdFpssBHPage; + } } 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 64647c88..1ffdaba2 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 @@ -162,14 +162,26 @@ public class MsAlongBServiceImpl extends ServiceImpl i 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); - } + + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::mapWeFvColumn + ); + + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); } + // 解析过滤条件 +// 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<>(); @@ -200,6 +212,18 @@ public class MsAlongBServiceImpl extends ServiceImpl i return result; } + private String mapWeFvColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "sttpcode" -> "STTP_CODE"; + case "lgtd" -> "lgtd"; + default -> null; + }; + } + + /** * 递归解析站类过滤条件 */