From ec8ba69d654652b1f7270b0bf7b99d5654800eb5 Mon Sep 17 00:00:00 2001 From: lilin <18811154576@163.com> Date: Tue, 7 Jul 2026 18:55:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B2=BF=E7=A8=8B=E9=85=8D=E7=BD=AE=E8=A1=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../along/controller/MsAlongBController.java | 18 ++- .../controller/MsAlongDetBController.java | 12 +- .../along/domain/MsAlongDetTreeDto.java | 18 +++ .../qgc_lygk/along/domain/PowerDto.java | 26 +++++ .../qgc_lygk/along/mapper/MsAlongBMapper.java | 17 ++- .../along/mapper/MsAlongDetBMapper.java | 17 ++- .../along/service/IMsAlongBService.java | 3 + .../along/service/IMsAlongDetBService.java | 6 + .../service/impl/MsAlongBServiceImpl.java | 49 +++++++- .../service/impl/MsAlongDetBServiceImpl.java | 106 +++++++++++++++++- .../src/main/resources/application-prod.yml | 5 +- 11 files changed, 256 insertions(+), 21 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.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 ddaaff51..133c13e1 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 @@ -13,13 +13,12 @@ import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService; import com.yfd.platform.utils.DataSourceRequestUtil; +import com.yfd.platform.utils.SecurityUtils; +import io.lettuce.core.dynamic.annotation.Param; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -66,8 +65,11 @@ public class MsAlongBController { if (StrUtil.isBlank(msAlongB.getCode())) { throw new BizException("沿程配置编码(code)不能为空."); } + msAlongB.setRecordUser(SecurityUtils.getUserId()); + //msAlongB.setRecordUser(SecurityUtils.getCurrentUsername()); msAlongBService.saveOrUpdate(msAlongB); - return ResponseResult.success("保存成功."); + return ResponseResult.successData(msAlongB.getId()); + } @PostMapping("/wbsb/GetKendoList") @@ -82,4 +84,10 @@ public class MsAlongBController { msAlongBService.delelteByIds(ids); return ResponseResult.success("删除成功."); } + + @PostMapping("/noAuth/GetKendoList") + @Operation(summary = "查询水电基地流域字典列表") + public ResponseResult getWbsbList(@RequestParam String stcd) { + return ResponseResult.successData(msAlongBService.getWbsbList(stcd)); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java index 8f489ee6..d0cf9918 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java @@ -1,5 +1,6 @@ package com.yfd.platform.qgc_lygk.along.controller; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; @@ -7,6 +8,7 @@ import com.yfd.platform.common.exception.BizException; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; +import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto; import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 沿程配置明细表控制器 * @@ -44,11 +48,11 @@ public class MsAlongDetBController { */ @Operation(summary = "保存或修改") @PostMapping("/save") - public ResponseResult save(@RequestBody MsAlongDetB msAlongDetB) { - if (msAlongDetB == null) { - return ResponseResult.error("沿程配置明细信息不能为空."); + public ResponseResult save(@RequestBody List treeList) { + if (CollUtil.isEmpty(treeList)) { + return ResponseResult.error("数据不能为空."); } - msAlongDetBService.saveOrUpdate(msAlongDetB); + msAlongDetBService.saveOrUpdateBatchData(treeList); return ResponseResult.success("保存成功."); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java new file mode 100644 index 00000000..faacbd8a --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java @@ -0,0 +1,18 @@ +package com.yfd.platform.qgc_lygk.along.domain; + +import lombok.Data; + +import java.util.List; + +@Data +public class MsAlongDetTreeDto { + private String id; // 记录ID(更新时传) + private String alongId; // 关联主表ID + private String stcd; // 断面编码 + private String sttp; // 类型编码 + private Integer sort; // 排序 + private String stnm; // 仅用于显示,不存表 + private String rstcd; // 仅用于显示,不存表 + private String parentId; // 前端用,不存表 + private List children; // 子节点 +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java new file mode 100644 index 00000000..5653482e --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java @@ -0,0 +1,26 @@ +package com.yfd.platform.qgc_lygk.along.domain; + +import lombok.Data; + +import java.util.List; +@Data +public class PowerDto { + // 水电水利工程编码 + private String stcd; + + // 水电水利工程名称 + private String stnm; + + // 水电水利工程名称 + private String sttp; + + // 主表实体 + private String sttpCode; + + // 主表实体 + private String sttpName; + + // 主表实体 + private String rstcd; + +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java index bc85485c..71c188e5 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java @@ -2,7 +2,10 @@ package com.yfd.platform.qgc_lygk.along.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; -import org.apache.ibatis.annotations.Mapper; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import org.apache.ibatis.annotations.*; + +import java.util.List; /** * 沿程配置表 Mapper 接口 @@ -12,4 +15,16 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface MsAlongBMapper extends BaseMapper { + @Select("SELECT STCD, STNM, STTP, STTP_CODE, STTP_NAME, RSTCD " + + "FROM V_MS_STBPRP_T " + + "WHERE RSTCD = #{stcd}") + @Results({ + @Result(column = "STCD", property = "stcd"), + @Result(column = "STNM", property = "stnm"), + @Result(column = "STTP", property = "sttp"), + @Result(column = "STTP_CODE", property = "sttpCode"), + @Result(column = "STTP_NAME", property = "sttpName"), + @Result(column = "RSTCD", property = "rstcd") + }) + List getWbsbList(@Param("stcd") String stcd); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java index 0e0e17bd..08439a35 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java @@ -2,7 +2,10 @@ package com.yfd.platform.qgc_lygk.along.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; -import org.apache.ibatis.annotations.Mapper; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import org.apache.ibatis.annotations.*; + +import java.util.List; /** * 沿程配置明细表 Mapper 接口 @@ -12,4 +15,16 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface MsAlongDetBMapper extends BaseMapper { + @Select("SELECT STCD, STNM, STTP, STTP_CODE, STTP_NAME, RSTCD " + + "FROM V_MS_STBPRP_T " + + "WHERE STCD = #{stcd}") + @Results({ + @Result(column = "STCD", property = "stcd"), + @Result(column = "STNM", property = "stnm"), + @Result(column = "STTP", property = "sttp"), + @Result(column = "STTP_CODE", property = "sttpCode"), + @Result(column = "STTP_NAME", property = "sttpName"), + @Result(column = "RSTCD", property = "rstcd") + }) + List getWbsbList(@Param("stcd") String stcd); } \ No newline at end of file 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 9260fb42..731c1ea6 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 @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; 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 java.util.List; @@ -23,6 +24,8 @@ public interface IMsAlongBService extends IService { void delelteByIds(List ids); + List getWbsbList(String stcd); + // /** // * 保存或更新沿程配置 // * diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java index 39aced84..9d34b194 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java @@ -3,7 +3,11 @@ package com.yfd.platform.qgc_lygk.along.service; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; +import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto; + +import java.util.List; /** * 沿程配置明细表 Service 接口 @@ -19,4 +23,6 @@ public interface IMsAlongDetBService extends IService { * @return 数据源结果 */ DataSourceResult getKendoList(DataSourceRequest dataSourceRequest); + + ResponseResult saveOrUpdateBatchData(List treeList); } \ No newline at end of file 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 0de796e3..283d3dcc 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 @@ -1,20 +1,28 @@ package com.yfd.platform.qgc_lygk.along.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.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.mapper.MsAlongBMapper; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; +import com.yfd.platform.utils.CodeToNameMetadataBo; import com.yfd.platform.utils.DataSourceRequestUtil; +import com.yfd.platform.utils.DictCodeToNameConverter; import com.yfd.platform.utils.QgcQueryWrapperUtil; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 沿程配置表 Service 实现类 @@ -24,6 +32,11 @@ import java.util.List; @Service public class MsAlongBServiceImpl extends ServiceImpl implements IMsAlongBService { + @Resource + private MsAlongBMapper msAlongBMapper; + @Resource + private SdRvcdDicMapper sdRvcdDicMapper; + @Override public DataSourceResult getKendoList(DataSourceRequest dataSourceRequest) { // 1. 构建查询条件 @@ -46,7 +59,29 @@ public class MsAlongBServiceImpl extends ServiceImpl i resultPage.setTotal(list.size()); } - // 4. 构建结果 + // 4. 循环填充 rvnm + List records = resultPage.getRecords(); + if (CollUtil.isNotEmpty(records)) { + for (MsAlongB record : records) { + String rvcd = record.getRvcd(); + if (StrUtil.isNotBlank(rvcd)) { + // 调用现有 Mapper 方法,查询单个 rvcd + List dictList = sdRvcdDicMapper.selectRegDropdown(null, rvcd); + if (CollUtil.isNotEmpty(dictList)) { + // 取第一条记录的 RVNM(即 DISPLAY_RVNM) + String displayRvnm = dictList.get(0).getRvnm(); + // 如果只需要末级名称,可截取最后一个 '-' 后的部分 + // 如果直接使用完整路径,则直接赋值 + record.setRvnm(displayRvnm); + // 若需要末级名称: + // int lastDash = displayRvnm.lastIndexOf('-'); + // record.setRvnm(lastDash > 0 ? displayRvnm.substring(lastDash + 1) : displayRvnm); + } + } + } + } + + // 5. 构建结果 DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setData(resultPage.getRecords()); dataSourceResult.setTotal(resultPage.getTotal()); @@ -56,10 +91,16 @@ public class MsAlongBServiceImpl extends ServiceImpl i @Override public void delelteByIds(List ids) { for (String id : ids) { - this.delelteByIds(Collections.singletonList(id)); + this.removeById(id); } } + @Override + public List getWbsbList(String stcd) { + List powerDtos = msAlongBMapper.getWbsbList(stcd); + return powerDtos; + } + // @Override // public boolean saveOrUpdate(MsAlongB msAlongB) { // super.saveOrUpdate(msAlongB); diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java index 5410fbd5..c4700493 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java @@ -1,23 +1,29 @@ package com.yfd.platform.qgc_lygk.along.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.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; +import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper; import com.yfd.platform.qgc_lygk.along.mapper.MsAlongDetBMapper; import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService; -import com.yfd.platform.utils.CodeToNameMetadataBo; -import com.yfd.platform.utils.DataSourceRequestUtil; -import com.yfd.platform.utils.DictCodeToNameConverter; -import com.yfd.platform.utils.QgcQueryWrapperUtil; +import com.yfd.platform.utils.*; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 沿程配置明细表 Service 实现类 @@ -30,6 +36,9 @@ public class MsAlongDetBServiceImpl extends ServiceImpl CODE_TO_NAME_META_LIST = new ArrayList<>(); static { @@ -62,10 +71,99 @@ public class MsAlongDetBServiceImpl extends ServiceImpl records = resultPage.getRecords(); + if (CollUtil.isNotEmpty(records)) { + for (MsAlongDetB record : records) { + String stcd = record.getStcd(); + if (StrUtil.isNotBlank(stcd)) { + // 调用 Mapper 方法查询测站信息 + List powerDtos = msAlongDetBMapper.getWbsbList(stcd); + if (CollUtil.isNotEmpty(powerDtos)) { + // 取第一个结果(通常一个 STCD 只对应一条记录) + String stnm = powerDtos.get(0).getStnm(); + record.setStnm(stnm); + } + } + } + } + // 4. 构建结果 DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setData(resultPage.getRecords()); dataSourceResult.setTotal(resultPage.getTotal()); return dataSourceResult; } + + @Override + public ResponseResult saveOrUpdateBatchData(List treeList) { + // 1. 递归扁平化:将树形结构转为平铺的实体列表 + List flatList = new ArrayList<>(); + for (MsAlongDetTreeDto root : treeList) { + flattenTree(root, flatList); + } + + if (flatList.isEmpty()) { + return ResponseResult.error("没有有效数据."); + } + + // 2. 校验每条记录的 alongId 不为空 + for (MsAlongDetB item : flatList) { + if (StrUtil.isBlank(item.getAlongId())) { + return ResponseResult.error("沿程配置ID(alongId)不能为空."); + } + } + + // 3. 【新增】提取所有不同的 alongId,删除这些主键下的旧明细 + Set alongIdSet = flatList.stream() + .map(MsAlongDetB::getAlongId) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + + if (CollUtil.isNotEmpty(alongIdSet)) { + LambdaUpdateWrapper deleteWrapper = new LambdaUpdateWrapper<>(); + deleteWrapper.in(MsAlongDetB::getAlongId, alongIdSet) + .set(MsAlongDetB::getIsDeleted, "1"); // 逻辑删除标记 + this.update(deleteWrapper); + } + + // 4. 插入新数据(注意:需要清空旧记录的主键ID,让数据库自增或雪花ID生成) + for (MsAlongDetB item : flatList) { + item.setId(null); // 确保都是新增 + } + + // 5. 批量保存(有则更新,无则新增) + this.saveOrUpdateBatch(flatList); + + return ResponseResult.success("保存成功."); + } + + /** + * 递归展开树形节点,将每个节点转换为 MsAlongDetB 实体 + */ + private void flattenTree(MsAlongDetTreeDto node, List flatList) { + // 1. 将当前节点转为实体 + MsAlongDetB entity = new MsAlongDetB(); + // 仅复制表中存在的字段 + entity.setId(node.getId()); + entity.setAlongId(node.getAlongId()); + entity.setStcd(node.getStcd()); + entity.setSttp(node.getSttp()); + entity.setRstcd(node.getRstcd()); + entity.setRecordUser(SecurityUtils.getUserId()); // 创建人 + //entity.setRecordUser(SecurityUtils.getCurrentUsername()); // 创建人 + if (node.getSort() != null){ + entity.setSort(String.valueOf(node.getSort())); // 若传了排序 + } + if (StrUtil.isBlank(entity.getId())) { + entity.setId(null); + } + flatList.add(entity); + // 2. 递归处理子节点 + if (CollUtil.isNotEmpty(node.getChildren())) { + for (MsAlongDetTreeDto child : node.getChildren()) { + flattenTree(child, flatList); + } + } + } } \ No newline at end of file diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 294c61ea..48e5a037 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -111,9 +111,10 @@ spring: matching-strategy: ant_path_matcher data: redis: - host: ${REDIS_HOST:localhost} + host: ${REDIS_HOST:172.16.21.142} port: ${REDIS_PORT:6379} - password: ${REDIS_PASSWORD:} + password: ${REDIS_PASSWORD:zny5678} + database: ${REDIS_DATABASE:15} timeout: 10000ms lettuce: pool: