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 00088d47..13328298 100644 --- a/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java @@ -274,6 +274,16 @@ public class SwaggerConfig { } + @Bean + public GroupedOpenApi groupPsbmodulelbbApi() { + return GroupedOpenApi.builder() + .group("5.6 电站与布局组件配置管理") + .packagesToScan("com.yfd.platform.qgc_sys.psbmodulelbb.controller") + .build(); + } + + + @Bean public GroupedOpenApi groupLygkApi() { return GroupedOpenApi.builder() diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/mapper/MsWarnRuleBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/MsWarnRuleBMapper.java index eec1a3de..c61f1a2f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/mapper/MsWarnRuleBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/MsWarnRuleBMapper.java @@ -16,15 +16,29 @@ public interface MsWarnRuleBMapper extends BaseMapper { @Update("UPDATE MS_WARN_RULE_B SET IS_SHOW = #{isShow} WHERE RULE_CODE IN ('common','custom')") void updateIsShow(@Param("isShow") Integer isShow); +// @Select("SELECT RULE_NAME AS ruleName FROM (" + +// "SELECT RULE_NAME FROM MS_WARN_RULE_B " + +// "WHERE RULE_CODE = 'custom' AND STCD = #{stcd} AND IS_DELETED = 0 AND RECORD_TIME IS NOT NULL " + +// "ORDER BY RECORD_TIME DESC) WHERE ROWNUM = 1") +// String getCustomRuleNameByStcd(@Param("stcd") String stcd); + + @Select("SELECT RULE_NAME AS ruleName FROM (" + "SELECT RULE_NAME FROM MS_WARN_RULE_B " + - "WHERE RULE_CODE = 'custom' AND STCD = #{stcd} AND IS_DELETED = 0 AND RECORD_TIME IS NOT NULL " + + "WHERE 1=1 AND STCD = #{stcd} AND IS_DELETED = 0 AND RECORD_TIME IS NOT NULL " + "ORDER BY RECORD_TIME DESC) WHERE ROWNUM = 1") String getCustomRuleNameByStcd(@Param("stcd") String stcd); +// @Select("SELECT t1.ID, RULE_NAME AS ruleName, RULE_CODE AS ruleCode, t2.LVL AS lvl " + +// "FROM MS_WARN_RULE_B t1 INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + +// "WHERE (t1.RULE_CODE = 'common' OR (t1.RULE_CODE = 'custom' AND t1.STCD = #{stcd})) " + +// "AND t1.RULE_TYPE = #{ruleType} AND t1.IS_DELETED = 0 AND t2.IS_DELETED = 0 " + +// "GROUP BY t1.ID, RULE_NAME, RULE_CODE, lvl") +// List getRuleListByStcd(@Param("stcd") String stcd, @Param("ruleType") String ruleType); + @Select("SELECT t1.ID, RULE_NAME AS ruleName, RULE_CODE AS ruleCode, t2.LVL AS lvl " + "FROM MS_WARN_RULE_B t1 INNER JOIN MS_WARN_RULE_DETAIL_B t2 ON t1.ID = t2.RULE_ID " + - "WHERE (t1.RULE_CODE = 'common' OR (t1.RULE_CODE = 'custom' AND t1.STCD = #{stcd})) " + + "WHERE 1=1 AND t1.STCD = #{stcd} " + "AND t1.RULE_TYPE = #{ruleType} AND t1.IS_DELETED = 0 AND t2.IS_DELETED = 0 " + "GROUP BY t1.ID, RULE_NAME, RULE_CODE, lvl") List getRuleListByStcd(@Param("stcd") String stcd, @Param("ruleType") String ruleType); diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsPsbmodulelbBService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsPsbmodulelbBService.java index 0e646524..1647056f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsPsbmodulelbBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsPsbmodulelbBService.java @@ -3,6 +3,7 @@ package com.yfd.platform.qgc_base.service; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.qgc_base.domain.MsPsbmodulelbB; +import com.yfd.platform.qgc_sys.psbmodulelbb.vo.WbsBPpVo; import java.util.List; @@ -30,4 +31,9 @@ public interface IMsPsbmodulelbBService extends IService { * 逻辑删除 */ boolean deleteData(String id); + + /** + * 获取已配置电站及流域树形数据 + */ + List getTreeConfiguredps(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsPsbmodulelbBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsPsbmodulelbBServiceImpl.java index 2a137164..8dfd2ad4 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsPsbmodulelbBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsPsbmodulelbBServiceImpl.java @@ -9,10 +9,12 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.qgc_base.domain.*; import com.yfd.platform.qgc_base.mapper.*; import com.yfd.platform.qgc_base.service.IMsOperationLogService; import com.yfd.platform.qgc_base.service.IMsPsbmodulelbBService; +import com.yfd.platform.qgc_sys.psbmodulelbb.vo.WbsBPpVo; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; @@ -46,6 +48,9 @@ public class MsPsbmodulelbBServiceImpl extends ServiceImpl queryPageList(DataSourceRequest request) { String templateId = getFilterFieldValue(request, "templateId"); @@ -210,6 +215,66 @@ public class MsPsbmodulelbBServiceImpl extends ServiceImpl getTreeConfiguredps(DataSourceRequest dataSourceRequest) { + String wbsCode = getFilterFieldValue(dataSourceRequest, "wbsCode"); + + // 第一步:获取已布局电站(IS_LAYOUT=1 且未删除) + StringBuilder ppsql = new StringBuilder(); + ppsql.append("SELECT DISTINCT STCD FROM MS_PSBMODULELB_B WHERE IS_LAYOUT = 1 AND IS_DELETED = 0"); + List> ppList = microservicDynamicSQLMapper.getAllList(ppsql.toString(), null); + + List list = new ArrayList<>(); + if (ppList != null && !ppList.isEmpty()) { + StringBuilder stcdBuilder = new StringBuilder(); + for (Map pp : ppList) { + stcdBuilder.append("'").append(pp.get("STCD")).append("',"); + } + String stcdIn = stcdBuilder.substring(0, stcdBuilder.length() - 1); + + // 第二步:从 SD_ENGINFO_B_H 获取电站及基地信息(替代 V_MS_STBPRP_T) + // HBRVCD → BASE_ID,HBRVCD_NAME → BASE_NAME + StringBuilder basinSql = new StringBuilder(); + basinSql.append("SELECT STCD AS wbsCode, ENNM AS wbsName, LGTD AS lgtd, LTTD AS lttd, ") + .append("CASE WHEN BASE_ID IS NULL THEN 'QT' ELSE BASE_ID END AS rvcd, ") + .append("CASE WHEN BASE_NAME IS NULL THEN '其他' ELSE BASE_NAME END AS rvcdName ") + .append("FROM SD_ENGINFO_B_H WHERE IS_DELETED = 0 AND STCD IN (").append(stcdIn).append(") "); + if (StringUtils.isNotBlank(wbsCode)) { + basinSql.append("AND BASE_ID = '").append(wbsCode).append("' "); + } + basinSql.append("ORDER BY ORDER_INDEX ASC"); + + List baseVoList = microservicDynamicSQLMapper.getAllListWithResultType( + basinSql.toString(), null, WbsBPpVo.class); + + // 第三步:按基地编码(BASE_ID)分组构建树形结构 + Map> map = new LinkedHashMap<>(); + for (WbsBPpVo vo : baseVoList) { + String rvcd = vo.getRvcd(); + if (rvcd == null || map.get(rvcd) == null || map.get(rvcd).isEmpty()) { + List children = new ArrayList<>(); + children.add(vo); + map.put(rvcd, children); + } else { + map.get(rvcd).add(vo); + } + } + + for (Map.Entry> entry : map.entrySet()) { + WbsBPpVo group = new WbsBPpVo(); + group.setWbsCode(entry.getKey()); + List children = entry.getValue(); + if (!children.isEmpty()) { + group.setWbsName(children.get(0).getRvcdName()); + } + group.setChildren(children); + list.add(group); + } + } + + return list; + } + // ==================== 私有辅助方法 ==================== /** diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/controller/MsPsbmodulelbBController.java b/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/controller/MsPsbmodulelbBController.java index 8f00dbda..80c85efc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/controller/MsPsbmodulelbBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/controller/MsPsbmodulelbBController.java @@ -7,6 +7,7 @@ import com.yfd.platform.qgc_base.domain.MsPplayoutB; import com.yfd.platform.qgc_base.domain.MsPsbmodulelbB; import com.yfd.platform.qgc_base.mapper.MsPplayoutBMapper; import com.yfd.platform.qgc_base.service.IMsPsbmodulelbBService; +import com.yfd.platform.qgc_sys.psbmodulelbb.vo.WbsBPpVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -88,9 +89,9 @@ public class MsPsbmodulelbBController { } } - @DeleteMapping("/{id}") + @PostMapping("/delete") @Operation(summary = "逻辑删除电站与布局组件配置") - public ResponseResult delete(@PathVariable("id") String id) { + public ResponseResult delete(@RequestParam String id) { if (StringUtils.isBlank(id)) { return ResponseResult.error("id 不能为空"); } @@ -101,4 +102,11 @@ public class MsPsbmodulelbBController { return ResponseResult.error("删除失败,记录不存在"); } } + + @PostMapping("/getTreeConfiguredps") + @Operation(summary = "获取已配置电站及流域树形数据") + public ResponseResult getTreeConfiguredps(@RequestBody DataSourceRequest dataSourceRequest) { + List list = msPsbmodulelbBService.getTreeConfiguredps(dataSourceRequest); + return ResponseResult.successData(list); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/vo/WbsBPpVo.java b/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/vo/WbsBPpVo.java new file mode 100644 index 00000000..df045fc9 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/psbmodulelbb/vo/WbsBPpVo.java @@ -0,0 +1,33 @@ +package com.yfd.platform.qgc_sys.psbmodulelbb.vo; + +import lombok.Data; + +import java.util.List; + +/** + * 流域及电站VO(树形结构) + */ +@Data +public class WbsBPpVo { + + /** 节点编码(电站STCD / 基地BASE_ID) */ + private String wbsCode; + + /** 节点名称(电站名称 / 基地名称) */ + private String wbsName; + + /** 子节点 */ + private List children; + + /** 经度 */ + private String lgtd; + + /** 纬度 */ + private String lttd; + + /** 基地编码 */ + private String rvcd; + + /** 基地名称 */ + private String rvcdName; +}