瀏覽代碼

站间联络图定位,运行优化方案渲染

raojiang 3 周之前
父節點
當前提交
3643bd4bc9
共有 14 個文件被更改,包括 295 次插入0 次删除
  1. 21 0
      api/load-transfer-bf-api/src/main/java/com/hdkj/fhzg/optimization/request/StationSvgLocationRequest.java
  2. 23 0
      api/load-transfer-bf-api/src/main/java/com/hdkj/fhzg/optimization/response/StationSvgLocationResponse.java
  3. 36 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/application/OptimizationApplication.java
  4. 11 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/controller/FhzgReconController.java
  5. 22 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/controller/optimization/OptimizationController.java
  6. 49 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/entity/StationSvgLocation.java
  7. 4 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/mapper/FeederTopoMapper.java
  8. 18 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/mapper/StationSvgLocationMapper.java
  9. 4 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/ReconQueryService.java
  10. 13 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/StationSvgLocationService.java
  11. 30 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/impl/ReconQueryServiceImpl.java
  12. 22 0
      services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/impl/StationSvgLocationServiceImpl.java
  13. 23 0
      services/load-transfer-bf/src/main/resources/mapper/FeederTopoMapper.xml
  14. 19 0
      services/load-transfer-bf/src/main/resources/mapper/StationSvgLocationMapper.xml

+ 21 - 0
api/load-transfer-bf-api/src/main/java/com/hdkj/fhzg/optimization/request/StationSvgLocationRequest.java

@@ -0,0 +1,21 @@
+package com.hdkj.fhzg.optimization.request;
+
+import lombok.Data;
+
+/**
+ * @author rj
+ * @date 2026/7/23 10:21
+ * @description
+ */
+@Data
+public class StationSvgLocationRequest {
+
+    private String id;
+
+    private String countyId;
+
+    private Integer x;
+
+    private Integer y;
+
+}

+ 23 - 0
api/load-transfer-bf-api/src/main/java/com/hdkj/fhzg/optimization/response/StationSvgLocationResponse.java

@@ -0,0 +1,23 @@
+package com.hdkj.fhzg.optimization.response;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * @author rj
+ * @date 2026/7/23 10:21
+ * @description
+ */
+@Data
+public class StationSvgLocationResponse {
+
+    private String id;
+
+    private String countyId;
+
+    private Integer x;
+
+    private Integer y;
+
+}

+ 36 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/application/OptimizationApplication.java

@@ -3,13 +3,17 @@ package com.hdkj.lt.bf.application;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hdkj.fhzg.optimization.request.StationSvgLocationRequest;
 import com.hdkj.fhzg.optimization.response.OperationMetrics;
 import com.hdkj.fhzg.optimization.response.StationGridMetrics;
+import com.hdkj.fhzg.optimization.response.StationSvgLocationResponse;
 import com.hdkj.fhzg.optimization.response.StationSvgResponse;
 import com.hdkj.lt.bf.entity.FhzgOptimizationFeederMetrics;
+import com.hdkj.lt.bf.entity.StationSvgLocation;
 import com.hdkj.lt.bf.entity.convert.EntityToVOConvertor;
 import com.hdkj.lt.bf.service.FhzgOptimizationFeederMetricsService;
 import com.hdkj.lt.bf.service.IXlRelService;
+import com.hdkj.lt.bf.service.StationSvgLocationService;
 import com.hdkj.lt.core.bizms.modle.po.DwdShbDsFeederBase;
 import com.hdkj.lt.core.bizms.modle.po.XlRel;
 import com.hdkj.lt.core.sys.service.DwdShbDsFeederBaseService;
@@ -17,6 +21,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -35,6 +40,8 @@ public class OptimizationApplication {
     private final IXlRelService xlRelService;
     private final DwdShbDsFeederBaseService feederBaseService;
     private final FhzgOptimizationFeederMetricsService feederMetricsService;
+    private final StationSvgLocationService stationSvgLocationService;
+
 
     public List<StationSvgResponse> getStationSvg(String maintOrg) {
         List<DwdShbDsFeederBase> feederList = feederBaseService.lambdaQuery().eq(DwdShbDsFeederBase::getPsrState, "20")
@@ -81,4 +88,33 @@ public class OptimizationApplication {
         String json = byId.getJsonResult();
         return JSON.parseObject(json, StationGridMetrics.class);
     }
+
+    public List<StationSvgLocationResponse> getStationSvgLocation(String maintOrg) {
+        List<StationSvgLocation> list = stationSvgLocationService.list(new LambdaQueryWrapper<StationSvgLocation>().eq(StationSvgLocation::getCountyId, maintOrg));
+        List<StationSvgLocationResponse> result = new ArrayList<>();
+        list.forEach(i -> {
+            StationSvgLocationResponse response = new StationSvgLocationResponse();
+            response.setCountyId(i.getCountyId());
+            response.setX(i.getX());
+            response.setY(i.getY());
+            response.setId(i.getPsrId());
+            result.add(response);
+        });
+        return result;
+    }
+
+    public String saveStationSvgLocation(List<StationSvgLocationRequest> request) {
+        stationSvgLocationService.remove(new LambdaQueryWrapper<StationSvgLocation>().eq(StationSvgLocation::getCountyId, request.get(0).getCountyId()));
+        List<StationSvgLocation> list = new ArrayList<>();
+        request.forEach(i -> {
+            StationSvgLocation stationSvgLocation = new StationSvgLocation();
+            stationSvgLocation.setCountyId(i.getCountyId());
+            stationSvgLocation.setX(i.getX());
+            stationSvgLocation.setY(i.getY());
+            stationSvgLocation.setPsrId(i.getId());
+            list.add(stationSvgLocation);
+        });
+        stationSvgLocationService.saveBatch(list);
+        return "保存成功";
+    }
 }

+ 11 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/controller/FhzgReconController.java

@@ -16,6 +16,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;
+
 /**
  * 重构方案查询控制器
  *
@@ -83,4 +85,13 @@ public class FhzgReconController {
     public ApiResponse<PageVO<ReconSwitchCompareVO>> getSwitchComparePage(@RequestBody ReconPageReqDTO reqDTO) {
         return ApiResponse.success(reconQueryService.getSwitchComparePage(reqDTO));
     }
+
+    /**
+     * 查询方案详情(方案详情页)
+     */
+    @PostMapping("/svg-switch-change")
+    @ApiOperation(value = "重构后开关变化列表")
+    public ApiResponse<List<BreakerAreaVO>> getSvgSwitchChange(@RequestBody ReconDetailReqDTO reqDTO) {
+        return ApiResponse.success(reconQueryService.getSvgSwitchChange(reqDTO));
+    }
 }

+ 22 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/controller/optimization/OptimizationController.java

@@ -2,8 +2,10 @@ package com.hdkj.lt.bf.controller.optimization;
 
 import com.hdkj.fhzg.optimization.request.MaintOrgRequest;
 import com.hdkj.fhzg.optimization.request.MetricsRequest;
+import com.hdkj.fhzg.optimization.request.StationSvgLocationRequest;
 import com.hdkj.fhzg.optimization.response.OperationMetrics;
 import com.hdkj.fhzg.optimization.response.StationGridMetrics;
+import com.hdkj.fhzg.optimization.response.StationSvgLocationResponse;
 import com.hdkj.fhzg.optimization.response.StationSvgResponse;
 import com.hdkj.hussar.ApiResponse;
 import com.hdkj.lt.bf.application.OptimizationApplication;
@@ -69,5 +71,25 @@ public class OptimizationController {
         return ApiResponse.success(optimizationApplication.getStationSvg(request.getMaintOrg()));
     }
 
+    /**
+     * 获取站间联络图渲染位置
+     *
+     * @return
+     */
+    @PostMapping("/getStationSvgLocation")
+    public ApiResponse<List<StationSvgLocationResponse>> getStationSvgLocation(@RequestBody MaintOrgRequest request) {
+        return ApiResponse.success(optimizationApplication.getStationSvgLocation(request.getMaintOrg()));
+    }
+
+    /**
+     * 保存站间联络图渲染位置
+     *
+     * @return
+     */
+    @PostMapping("/saveStationSvgLocation")
+    public ApiResponse<String> saveStationSvgLocation(@RequestBody List<StationSvgLocationRequest> request) {
+        return ApiResponse.success(optimizationApplication.saveStationSvgLocation(request));
+    }
+
 
 }

+ 49 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/entity/StationSvgLocation.java

@@ -0,0 +1,49 @@
+package com.hdkj.lt.bf.entity;
+
+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 java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName t_station_svg_location
+ */
+@TableName(value ="t_station_svg_location")
+@Data
+public class StationSvgLocation implements Serializable {
+    /**
+     * 
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 区县编码
+     */
+    @TableField(value = "county_id")
+    private String countyId;
+
+    /**
+     * 
+     */
+    @TableField(value = "psr_id")
+    private String psrId;
+
+    /**
+     * 
+     */
+    @TableField(value = "x")
+    private Integer x;
+
+    /**
+     * 
+     */
+    @TableField(value = "y")
+    private Integer y;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 4 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/mapper/FeederTopoMapper.java

@@ -3,8 +3,12 @@ package com.hdkj.lt.bf.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hdkj.lt.core.bizms.modle.po.FeederTopo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface FeederTopoMapper extends BaseMapper<FeederTopo> {
+    List<String> getBreakerPsrId(@Param("startKg") String startKg, @Param("feeder") String feeder, @Param("endKg") String endKg, @Param("kgPsrTypes") List<String> kgPsrTypes);
 
 }

+ 18 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/mapper/StationSvgLocationMapper.java

@@ -0,0 +1,18 @@
+package com.hdkj.lt.bf.mapper;
+
+import com.hdkj.lt.bf.entity.StationSvgLocation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Sunlit
+* @description 针对表【t_station_svg_location】的数据库操作Mapper
+* @createDate 2026-07-23 10:22:56
+* @Entity com.hdkj.lt.bf.entity.StationSvgLocation
+*/
+public interface StationSvgLocationMapper extends BaseMapper<StationSvgLocation> {
+
+}
+
+
+
+

+ 4 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/ReconQueryService.java

@@ -7,6 +7,8 @@ import com.hdkj.lt.bf.entity.dto.ReconListReqDTO;
 import com.hdkj.lt.bf.entity.dto.ReconPageReqDTO;
 import com.hdkj.lt.bf.entity.vo.*;
 
+import java.util.List;
+
 /**
  * 重构方案查询服务
  */
@@ -41,4 +43,6 @@ public interface ReconQueryService {
      * 查询开关状态对比(分页)
      */
     PageVO<ReconSwitchCompareVO> getSwitchComparePage(ReconPageReqDTO reqDTO);
+
+    List<BreakerAreaVO> getSvgSwitchChange(ReconDetailReqDTO reqDTO);
 }

+ 13 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/StationSvgLocationService.java

@@ -0,0 +1,13 @@
+package com.hdkj.lt.bf.service;
+
+import com.hdkj.lt.bf.entity.StationSvgLocation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Sunlit
+* @description 针对表【t_station_svg_location】的数据库操作Service
+* @createDate 2026-07-23 10:22:56
+*/
+public interface StationSvgLocationService extends IService<StationSvgLocation> {
+
+}

+ 30 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/impl/ReconQueryServiceImpl.java

@@ -2,6 +2,7 @@ package com.hdkj.lt.bf.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hdkj.lt.base.constants.DictConstants;
 import com.hdkj.lt.base.exception.BusinessException;
 import com.hdkj.lt.base.model.response.PageVO;
 import com.hdkj.lt.bf.entity.dto.ReconDetailReqDTO;
@@ -10,7 +11,9 @@ import com.hdkj.lt.bf.entity.dto.ReconPageReqDTO;
 import com.hdkj.lt.bf.entity.vo.*;
 import com.hdkj.lt.bf.mapper.*;
 import com.hdkj.lt.bf.service.ReconQueryService;
+import com.hdkj.lt.core.bizms.modle.po.FeederTopo;
 import com.hdkj.lt.modle.po.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -39,6 +42,8 @@ public class ReconQueryServiceImpl implements ReconQueryService {
     private FhzgReconVolDetailMapper reconVolDetailMapper;
     @Autowired
     private FhzgReconSwitchResultDetailMapper reconSwitchResultDetailMapper;
+    @Autowired
+    private FeederTopoMapper feederTopoMapper;
 
 
     @Override
@@ -93,6 +98,31 @@ public class ReconQueryServiceImpl implements ReconQueryService {
         return vo;
     }
 
+    @Override
+    public List<BreakerAreaVO> getSvgSwitchChange(ReconDetailReqDTO reqDTO) {
+        List<FhzgReconSwitchSeq> list = reconSwitchSeqMapper.selectList(
+                new LambdaQueryWrapper<FhzgReconSwitchSeq>().eq(FhzgReconSwitchSeq::getResultId, reqDTO.getId()));
+        List<BreakerAreaVO> breakerAreaVOS = new ArrayList<>();
+        for (FhzgReconSwitchSeq fhzgReconSwitchSeq : list) {
+            String startSwitchId = fhzgReconSwitchSeq.getOpenBreakerId();
+            String endSwitchId = fhzgReconSwitchSeq.getCloseBreakerId();
+            List<FeederTopo> feederTopos = feederTopoMapper.selectList(new LambdaQueryWrapper<FeederTopo>().eq(FeederTopo::getStartKgId, fhzgReconSwitchSeq.getOpenBreakerId()));
+            if (CollectionUtils.isEmpty(feederTopos)) {
+                FeederTopo feederTopo = feederTopoMapper.selectOne(new LambdaQueryWrapper<FeederTopo>().eq(FeederTopo::getPsrId, fhzgReconSwitchSeq.getOpenBreakerId()));
+                startSwitchId = feederTopo.getStartKgId();
+            }
+            List<String> kgPsrTypes = Arrays.asList(DictConstants.KG_PSR_TYPE.split(","));
+            List<String> breakerPsrId = feederTopoMapper.getBreakerPsrId(startSwitchId, fhzgReconSwitchSeq.getFeederOutPsrId(), endSwitchId, kgPsrTypes);
+            BreakerAreaVO breakerAreaVO = new BreakerAreaVO();
+            breakerAreaVO.setStartSwitch(startSwitchId);
+            breakerAreaVO.setMidSwitch(breakerPsrId);
+            breakerAreaVO.setEndSwitch(Collections.singletonList(endSwitchId));
+            breakerAreaVO.setOppositeLineId(fhzgReconSwitchSeq.getFeederInPsrId());
+            breakerAreaVOS.add(breakerAreaVO);
+        }
+        return breakerAreaVOS;
+    }
+
     @Override
     public PageVO<ReconSwitchSeqVO> getSwitchSeqPage(ReconPageReqDTO reqDTO) {
         validatePageParam(reqDTO);

+ 22 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/service/impl/StationSvgLocationServiceImpl.java

@@ -0,0 +1,22 @@
+package com.hdkj.lt.bf.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hdkj.lt.bf.entity.StationSvgLocation;
+import com.hdkj.lt.bf.service.StationSvgLocationService;
+import com.hdkj.lt.bf.mapper.StationSvgLocationMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Sunlit
+* @description 针对表【t_station_svg_location】的数据库操作Service实现
+* @createDate 2026-07-23 10:22:56
+*/
+@Service
+public class StationSvgLocationServiceImpl extends ServiceImpl<StationSvgLocationMapper, StationSvgLocation>
+    implements StationSvgLocationService{
+
+}
+
+
+
+

+ 23 - 0
services/load-transfer-bf/src/main/resources/mapper/FeederTopoMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hdkj.lt.bf.mapper.FeederTopoMapper">
+
+    <select id="getBreakerPsrId" resultType="java.lang.String">
+        with recursive res_tab as (select t.*, t.psr_id link_id
+        from t_feeder_topo t
+        where t.feeder = #{feeder}
+        and psr_id = #{startKg}
+        union all
+        select t.*,
+        if(FIND_IN_SET(t.psr_id, #{endKg})>0, '-', t.psr_id) link_id
+        from t_feeder_topo t
+        join res_tab p on t.start_kg_id = p.link_id
+        where t.feeder = #{feeder}
+        and t.normal_open !='true'
+        and t.psr_type in <foreach collection='kgPsrTypes' item='item' open="(" separator=',' close=')'>
+        #{item}</foreach>)
+        select psr_id
+        from res_tab
+        where link_id not in ('-', #{startKg});
+    </select>
+</mapper>

+ 19 - 0
services/load-transfer-bf/src/main/resources/mapper/StationSvgLocationMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hdkj.lt.bf.mapper.StationSvgLocationMapper">
+
+    <resultMap id="BaseResultMap" type="com.hdkj.lt.bf.entity.StationSvgLocation">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="countyId" column="country_id" jdbcType="VARCHAR"/>
+            <result property="psrId" column="psr_id" jdbcType="VARCHAR"/>
+            <result property="x" column="x" jdbcType="INTEGER"/>
+            <result property="y" column="y" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,country_id,psr_id,
+        x,y
+    </sql>
+</mapper>