From f7477ea8fffcb4c85f3f393bbe5a6ba6e20062af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=90=8C=E5=AD=A6?= Date: Mon, 24 Nov 2025 08:54:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(device):=201=E3=80=81=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=9B=91=E6=B5=8B=E7=82=B9=E6=B2=BB=E7=90=86=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=92=8C=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E4=B8=8E=E5=89=8D=E7=AB=AF=E8=81=94=E8=B0=83=EF=BC=9B?= =?UTF-8?q?2=E3=80=81=E5=BC=80=E5=8F=91=E7=9B=91=E6=B5=8B=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E7=94=B5=E7=BD=91=E4=BE=A7=E5=92=8C=E8=B4=9F=E8=BD=BD?= =?UTF-8?q?=E4=BE=A7=E7=9B=91=E6=B5=8B=E7=82=B9=E6=8C=87=E6=A0=87=E8=B6=8B?= =?UTF-8?q?=E5=8A=BF=E5=AF=B9=E6=AF=94=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/csdevice/pojo/po/CsLinePO.java | 6 + .../pojo/vo/PqSensitiveUserLineVO.java | 30 ++++ .../equipment/CsGroupController.java | 15 ++ .../controller/line/CslineController.java | 41 +++++- .../csdevice/service/CsLinePOService.java | 9 +- .../csdevice/service/ICsGroupService.java | 11 ++ .../service/impl/CsGroupServiceImpl.java | 56 ++++++-- .../service/impl/CsLinePOServiceImpl.java | 128 +++++++++++++++++- .../api/PqSensitiveUserFeignClient.java | 19 +++ ...nsitiveUserFeignClientFallbackFactory.java | 35 +++++ .../SensitiveUserTrendDataQueryParam.java | 40 ++++++ .../controller/PqSensitiveUserController.java | 24 +++- 12 files changed, 394 insertions(+), 20 deletions(-) create mode 100644 cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/PqSensitiveUserLineVO.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/PqSensitiveUserFeignClient.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/PqSensitiveUserFeignClientFallbackFactory.java create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/SensitiveUserTrendDataQueryParam.java diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java index 8129cd4..caf58cd 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java @@ -135,4 +135,10 @@ public class CsLinePO extends BaseEntity { @TableField(value = "monitor_user") private String monitorUser; + + /** + * 治理报告文件路径 + */ + @TableField(value = "report_file_path") + private String reportFilePath; } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/PqSensitiveUserLineVO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/PqSensitiveUserLineVO.java new file mode 100644 index 0000000..ef78486 --- /dev/null +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/PqSensitiveUserLineVO.java @@ -0,0 +1,30 @@ +package com.njcn.csdevice.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class PqSensitiveUserLineVO { + @ApiModelProperty("治理对象") + private String sensitiveUser; + @ApiModelProperty("监测点ID") + private String lineId; + @ApiModelProperty("测点名称") + private String lineName; + @ApiModelProperty("是否治理") + private String govern; + @ApiModelProperty("电压等级") + private double volGrade; + @ApiModelProperty("监测类型") + private String position; + @ApiModelProperty("运行状态") + private String runStatus; + @ApiModelProperty("报告文件") + private String reportFilePath; + @ApiModelProperty("最新数据时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime latestTime; +} diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsGroupController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsGroupController.java index 20f780f..fdde7d1 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsGroupController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsGroupController.java @@ -13,6 +13,7 @@ import com.njcn.csdevice.pojo.vo.DataGroupTemplateVO; import com.njcn.csdevice.service.ICsGroupService; import com.njcn.csharmonic.param.CommonStatisticalQueryParam; import com.njcn.csharmonic.param.FittingDataQueryParam; +import com.njcn.csharmonic.param.SensitiveUserTrendDataQueryParam; import com.njcn.csharmonic.param.TrendDataQueryParam; import com.njcn.csharmonic.pojo.vo.ThdDataTdVO; import com.njcn.csharmonic.pojo.vo.ThdDataVO; @@ -28,6 +29,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** *

@@ -168,5 +170,18 @@ public class CsGroupController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/sensitiveUserTrendData") + @ApiOperation("查询监测对象电网侧和负载侧监测点指标趋势对比数据") + @ApiImplicitParam(name = "param",required = true) + public HttpResult>> sensitiveUserTrendData(@RequestBody @Validated SensitiveUserTrendDataQueryParam param){ + String methodDescribe = getMethodDescribe("sensitiveUserTrendData"); + Map> result = csGroupService.sensitiveUserTrendData(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + + + } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java index 1fb3b6f..f6436f1 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/line/CslineController.java @@ -2,6 +2,7 @@ package com.njcn.csdevice.controller.line; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -10,19 +11,19 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.csdevice.mapper.OverlimitMapper; import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.po.CsLinePO; +import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO; import com.njcn.csdevice.service.CsLinePOService; import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.utils.COverlimitUtil; import com.njcn.web.controller.BaseController; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import java.util.List; @@ -248,7 +249,8 @@ public class CslineController extends BaseController { public HttpResult> list(@RequestBody CsLinePO param) { String methodDescribe = getMethodDescribe("list"); List list = csLinePOService.list(new LambdaQueryWrapper() - .eq(StrUtil.isNotBlank(param.getPosition()), CsLinePO::getPosition, param.getPosition()) + .eq(CsLinePO::getStatus, 1) + .eq(StrUtil.isNotBlank(param.getPosition()), CsLinePO::getPosition, param.getPosition()) .orderByAsc(CsLinePO::getName)); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } @@ -262,4 +264,33 @@ public class CslineController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getSensitiveUserLineList") + @ApiOperation("获取敏感负荷用户监测点列表") + @ApiImplicitParam(name = "param", value = "查询参数", required = true) + public HttpResult> getSensitiveUserLineList(@RequestBody BaseParam param) { + String methodDescribe = getMethodDescribe("getList"); + Page page = csLinePOService.getSensitiveUserLineList(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/uploadReport") + @ApiOperation("上传治理报告") + public HttpResult uploadReport(@ApiParam(value = "文件",name="报告文件", required = true) @RequestPart("file") MultipartFile file,@ApiParam(value = "lineId", name="监测点ID", required = true) @RequestParam String lineId) { + String methodDescribe = getMethodDescribe("uploadReport"); + boolean success = csLinePOService.uploadReport(file, lineId); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, success, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getReportUrl") + @ApiOperation("获取治理报告链接") + public HttpResult getReportUrl(@ApiParam(value = "lineId", name="监测点ID", required = true) @RequestParam String lineId) { + String methodDescribe = getMethodDescribe("getReportUrl"); + String url = csLinePOService.getReportUrl(lineId); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, url, methodDescribe); + } + } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java index b01befa..d095c54 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java @@ -1,9 +1,12 @@ package com.njcn.csdevice.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.po.CsLinePO; -import org.springframework.web.bind.annotation.RequestParam; +import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO; +import com.njcn.web.pojo.param.BaseParam; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -74,4 +77,8 @@ public interface CsLinePOService extends IService{ List getAllLine(); List getLineBySensitiveUser(List list); + + Page getSensitiveUserLineList(BaseParam param); + boolean uploadReport(MultipartFile file, String lineId); + String getReportUrl(String lineId); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/ICsGroupService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/ICsGroupService.java index 00302f4..d11b3f2 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/ICsGroupService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/ICsGroupService.java @@ -8,12 +8,14 @@ import com.njcn.csdevice.pojo.vo.CsGroupVO; import com.njcn.csdevice.pojo.vo.DataGroupTemplateVO; import com.njcn.csharmonic.param.CommonStatisticalQueryParam; import com.njcn.csharmonic.param.FittingDataQueryParam; +import com.njcn.csharmonic.param.SensitiveUserTrendDataQueryParam; import com.njcn.csharmonic.param.TrendDataQueryParam; import com.njcn.csharmonic.pojo.vo.ThdDataTdVO; import com.njcn.csharmonic.pojo.vo.ThdDataVO; import com.njcn.system.pojo.po.EleEpdPqd; import java.util.List; +import java.util.Map; /** *

@@ -82,13 +84,22 @@ public interface ICsGroupService extends IService { /** * 查询趋势数据 + * @param trendDataQueryParam * @return */ List trendData(TrendDataQueryParam trendDataQueryParam); /** * 查询指标拟合图数据 + * @param fittingDataQueryParam * @return */ List fittingData(FittingDataQueryParam fittingDataQueryParam); + /** + * 查询敏感用户趋势数据 + * @param sensitiveUserTrendDataQueryParam + * @return + */ + Map> sensitiveUserTrendData(SensitiveUserTrendDataQueryParam sensitiveUserTrendDataQueryParam); + } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java index a129815..76d3512 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsGroupServiceImpl.java @@ -34,10 +34,7 @@ import com.njcn.csdevice.util.InfluxDbParamUtil; import com.njcn.csdevice.utils.DataChangeUtil; import com.njcn.csharmonic.api.EventFeignClient; import com.njcn.csharmonic.constant.HarmonicConstant; -import com.njcn.csharmonic.param.CommonStatisticalQueryParam; -import com.njcn.csharmonic.param.CsEventUserQueryPage; -import com.njcn.csharmonic.param.FittingDataQueryParam; -import com.njcn.csharmonic.param.TrendDataQueryParam; +import com.njcn.csharmonic.param.*; import com.njcn.csharmonic.pojo.vo.ThdDataTdVO; import com.njcn.csharmonic.pojo.vo.ThdDataVO; import com.njcn.device.biz.pojo.po.Overlimit; @@ -46,10 +43,8 @@ import com.njcn.influx.pojo.dto.EventDataSetDTO; import com.njcn.influx.pojo.dto.StatisticalDataDTO; import com.njcn.influx.service.CommonService; import com.njcn.influx.service.EvtDataService; -import com.njcn.system.api.CsStatisticalSetFeignClient; -import com.njcn.system.api.DictTreeFeignClient; -import com.njcn.system.api.EleEvtFeignClient; -import com.njcn.system.api.EpdFeignClient; +import com.njcn.system.api.*; +import com.njcn.system.pojo.po.DictData; import com.njcn.system.pojo.po.EleEpdPqd; import com.njcn.system.pojo.po.EleEvtParm; import com.njcn.system.pojo.vo.CsStatisticalSetVO; @@ -101,6 +96,10 @@ public class CsGroupServiceImpl extends ServiceImpl impl private final EventFeignClient eventFeignClient; private final InfluxDbParamUtil influxDbParamUtil; private final DictTreeFeignClient dictTreeFeignClient; + private final DicDataFeignClient dicDataFeignClient; + + private final String GRID_SIDE_DICT_CODE = "Grid_Side"; + private final String LOAD_SIDE_DICT_CODE = "Load_Side"; @Override @Transactional(rollbackFor = Exception.class) @@ -1130,6 +1129,47 @@ public class CsGroupServiceImpl extends ServiceImpl impl return result; } + @Override + public Map> sensitiveUserTrendData(SensitiveUserTrendDataQueryParam param) { + Map> result = new HashMap<>(); + result.put("before", new ArrayList<>()); + result.put("after", new ArrayList<>()); + String sensitiveUserId = param.getSensitiveUserId(); + List linePOList = csLineFeignClient.getLineBySensitiveUser(Collections.singletonList(sensitiveUserId)).getData(); + if (CollUtil.isEmpty(linePOList)) { + return result; + } + DictData loadSideDictData = dicDataFeignClient.getDicDataByCode(LOAD_SIDE_DICT_CODE).getData(); + DictData gridSideDictData = dicDataFeignClient.getDicDataByCode(GRID_SIDE_DICT_CODE).getData(); + CsLinePO gridSideLine = linePOList.stream().filter(linePO -> linePO.getPosition().equals(gridSideDictData.getId())).findFirst().orElse(null); + CsLinePO loadSideLine = linePOList.stream().filter(linePO -> linePO.getPosition().equals(loadSideDictData.getId())).findFirst().orElse(null); + TrendDataQueryParam trendDataQueryParam = new TrendDataQueryParam(); + trendDataQueryParam.setSearchBeginTime(param.getSearchBeginTime()); + trendDataQueryParam.setSearchEndTime(param.getSearchEndTime()); + trendDataQueryParam.setValueType(param.getValueType()); + trendDataQueryParam.setDataLevel(param.getDataLevel()); + List paramList = param.getList(); + List indexList = paramList.stream().map(item -> { + TrendDataQueryParam queryParam = new TrendDataQueryParam(); + queryParam.setFrequency(item.getFrequency()); + queryParam.setStatisticalId(item.getStatisticalId()); + return queryParam; + }).collect(Collectors.toList()); + trendDataQueryParam.setList(indexList); + if (loadSideLine != null) { + trendDataQueryParam.setLineId(loadSideLine.getLineId()); + List thdDataList = this.trendData(trendDataQueryParam); + result.put("before", thdDataList); + } + if (gridSideLine != null) { + trendDataQueryParam.setLineId(gridSideLine.getLineId()); + List thdDataList = this.trendData(trendDataQueryParam); + result.put("after", thdDataList); + } + + return result; + } + private List getChildren(String tabId, List all) { return all.stream().filter(item -> item.getPid().equals(tabId)).collect(Collectors.toList()); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java index 6a4ccc4..1388f96 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java @@ -1,30 +1,45 @@ package com.njcn.csdevice.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.njcn.access.api.CsLineLatestDataFeignClient; +import com.njcn.access.pojo.po.CsLineLatestData; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.mapper.CsLedgerMapper; import com.njcn.csdevice.mapper.CsLinePOMapper; import com.njcn.csdevice.mapper.CsTerminalLogsMapper; import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.po.*; +import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO; import com.njcn.csdevice.service.CsDevModelService; import com.njcn.csdevice.service.CsLinePOService; import com.njcn.csdevice.service.ICsDataSetService; +import com.njcn.csharmonic.api.PqSensitiveUserFeignClient; +import com.njcn.csharmonic.pojo.po.PqSensitiveUser; +import com.njcn.oss.constant.OssPath; +import com.njcn.oss.utils.FileStorageUtil; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.pojo.po.DictData; +import com.njcn.web.pojo.param.BaseParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -44,6 +59,10 @@ public class CsLinePOServiceImpl extends ServiceImpl i private final ICsDataSetService csDataSetService; private final DicDataFeignClient dicDataFeignClient; private final CsTerminalLogsMapper csTerminalLogsMapper; + private final CsLineLatestDataFeignClient csLineLatestDataFeignClient; + private final PqSensitiveUserFeignClient pqSensitiveUserFeignClient; + + private final FileStorageUtil fileStorageUtil; @Override public List getLineByDev(List list) { @@ -214,7 +233,7 @@ public class CsLinePOServiceImpl extends ServiceImpl i @Override public List getLineByName(String lineName) { - return this.lambdaQuery().like(CsLinePO::getName,lineName).list(); + return this.lambdaQuery().eq(CsLinePO::getStatus, 1).like(CsLinePO::getName,lineName).list(); } @Override @@ -235,6 +254,111 @@ public class CsLinePOServiceImpl extends ServiceImpl i .list(); } + @Override + public Page getSensitiveUserLineList(BaseParam param) { + Page result = new Page<>(); + result.setCurrent(param.getPageNum()); + result.setSize(param.getPageSize()); + + + Page linePage = this.page(new Page<>(param.getPageNum(), param.getPageSize()), + new LambdaQueryWrapper() + .eq(CsLinePO::getStatus, 1) + // 关联敏感用户 + .isNotNull(CsLinePO::getMonitorUser) + .orderByAsc(CsLinePO::getMonitorUser) + ); + BeanUtil.copyProperties(linePage, result); + List records = linePage.getRecords(); + if (CollUtil.isEmpty(records)) { + return result; + } + List list = new ArrayList<>(); + List sensitiveUserIds = list.stream().map(PqSensitiveUserLineVO::getSensitiveUser).distinct().collect(Collectors.toList()); + + Map sensitiveUserNameMap = pqSensitiveUserFeignClient.getListByIds(sensitiveUserIds).getData() + .stream().collect(Collectors.toMap(PqSensitiveUser::getId, PqSensitiveUser::getName)); + PqSensitiveUserLineVO sensitiveUserLineVO; + for (CsLinePO record : records) { + sensitiveUserLineVO = new PqSensitiveUserLineVO(); + // 治理对象 + sensitiveUserLineVO.setSensitiveUser(sensitiveUserNameMap.getOrDefault(record.getMonitorUser(), null)); + // 测点名称 + sensitiveUserLineVO.setLineId(record.getLineId()); + sensitiveUserLineVO.setLineName(record.getName()); + // 是否治理 + if (ObjectUtil.isNotEmpty(record.getGovern())) { + if (record.getGovern().equals(0)) { + sensitiveUserLineVO.setGovern("未治理"); + } + if (record.getGovern().equals(1)) { + sensitiveUserLineVO.setGovern("已治理"); + } + } + // 监测类型 + sensitiveUserLineVO.setPosition(record.getPosition()); + DictData positionDictData = dicDataFeignClient.getDicDataById(record.getPosition()).getData(); + if (positionDictData != null) { + sensitiveUserLineVO.setPosition(positionDictData.getName()); + } + // 电压等级 + sensitiveUserLineVO.setVolGrade(record.getVolGrade()); + // 运行状态 + sensitiveUserLineVO.setRunStatus(getRunStatusDescription(record.getRunStatus())); + // 报告文件 + sensitiveUserLineVO.setReportFilePath(record.getReportFilePath()); + // 最新数据时间 + List lineLatestDataList = csLineLatestDataFeignClient.listData().getData(); + if (CollUtil.isNotEmpty(lineLatestDataList)) { + sensitiveUserLineVO.setLatestTime(lineLatestDataList.stream() + .filter(item -> item.getLineId().equals(record.getLineId())) + .map(CsLineLatestData::getTimeId) + .max(LocalDateTime::compareTo) + .orElse(null)); + } + list.add(sensitiveUserLineVO); + } + result.setRecords(list); + return result; + } + + @Override + public boolean uploadReport(MultipartFile file, String lineId) { + String filePath = fileStorageUtil.uploadMultipart(file, OssPath.GOVERN_HARMONIC_FILE); + return this.update(new LambdaUpdateWrapper().eq(CsLinePO::getLineId, lineId).set(CsLinePO::getReportFilePath, filePath)); + } + + @Override + public String getReportUrl(String lineId) { + CsLinePO linePO = this.getById(lineId); + if (linePO != null) { + String reportFilePath = linePO.getReportFilePath(); + if (StrUtil.isNotBlank(reportFilePath)) { + return fileStorageUtil.getFileUrl(reportFilePath); + } + } + return ""; + } + + + private String getRunStatusDescription(Integer runStatus) { + // 0:运行;1:检修;2:停运;3:调试;4:退运 + switch (runStatus) { + case 0: + return "运行"; + case 1: + return "检修"; + case 2: + return "停运"; + case 3: + return "调试"; + case 4: + return "退运"; + default: + return "未知"; + } + } + // /** // * 1.平台端默认配置拓扑图模板,包含拓扑图信息(cs_topology_diagram_template)和拓扑图上监测点的点位信息(cs_line_topology_template) // * diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/PqSensitiveUserFeignClient.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/PqSensitiveUserFeignClient.java new file mode 100644 index 0000000..852e912 --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/PqSensitiveUserFeignClient.java @@ -0,0 +1,19 @@ +package com.njcn.csharmonic.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.csharmonic.api.fallback.EventUserFeignClientFallbackFactory; +import com.njcn.csharmonic.pojo.po.PqSensitiveUser; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(value = ServerInfo.CS_HARMONIC_BOOT, path = "/pqSensitiveUser", fallbackFactory = EventUserFeignClientFallbackFactory.class,contextId = "pqSensitiveUser") +public interface PqSensitiveUserFeignClient { + + @PostMapping("/getListByIds") + HttpResult> getListByIds(@RequestParam(name = "ids", required = false) List ids); + +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/PqSensitiveUserFeignClientFallbackFactory.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/PqSensitiveUserFeignClientFallbackFactory.java new file mode 100644 index 0000000..1afc17c --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/api/fallback/PqSensitiveUserFeignClientFallbackFactory.java @@ -0,0 +1,35 @@ +package com.njcn.csharmonic.api.fallback; + + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.csharmonic.api.PqSensitiveUserFeignClient; +import com.njcn.csharmonic.pojo.po.PqSensitiveUser; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component +public class PqSensitiveUserFeignClientFallbackFactory implements FallbackFactory { + + @Override + public PqSensitiveUserFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (cause.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) cause.getCause(); + } + Enum finalExceptionEnum = exceptionEnum; + return new PqSensitiveUserFeignClient() { + @Override + public HttpResult> getListByIds(List ids) { + log.error("{}异常,降级处理,异常为:{}","根据id集合获取敏感负荷用户列表",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/SensitiveUserTrendDataQueryParam.java b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/SensitiveUserTrendDataQueryParam.java new file mode 100644 index 0000000..1e321eb --- /dev/null +++ b/cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/param/SensitiveUserTrendDataQueryParam.java @@ -0,0 +1,40 @@ +package com.njcn.csharmonic.param; + + +import com.njcn.web.pojo.annotation.DateTimeStrValid; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +@Data +public class SensitiveUserTrendDataQueryParam { + + @ApiModelProperty(value = "检测对象ID") + @NotBlank(message = "检测对象ID不可为空") + private String sensitiveUserId; + + @ApiModelProperty(name = "searchBeginTime", value = "开始时间") + @NotBlank(message = "起始时间不可为空") + @DateTimeStrValid(message = "起始时间格式出错") + private String searchBeginTime; + + @ApiModelProperty(name = "searchEndTime", value = "结束时间") + @NotBlank(message = "结束时间不可为空") + private String searchEndTime; + + @ApiModelProperty(value = "用于选择多个指标及谐波次数") + List list; + @ApiModelProperty(value = "指标组id") + private String statisticalId; + @ApiModelProperty(value = "取值类型(Max,Min,cp95,avg)") + private String valueType; + + @ApiModelProperty(value = "一次值:Primary;二次值:Secondary") + private String dataLevel; + + @ApiModelProperty(value = "频次2-50") + private String frequency; + +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/PqSensitiveUserController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/PqSensitiveUserController.java index 24b5603..6a115fb 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/PqSensitiveUserController.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/PqSensitiveUserController.java @@ -1,12 +1,15 @@ package com.njcn.csharmonic.controller; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; +import com.njcn.csharmonic.pojo.po.PqSensitiveUser; import com.njcn.csharmonic.pojo.vo.PqSensitiveUserVo; import com.njcn.csharmonic.service.IPqSensitiveUserService; import com.njcn.web.controller.BaseController; @@ -16,10 +19,9 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -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; /** *

@@ -48,6 +50,20 @@ public class PqSensitiveUserController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getListByIds") + @ApiOperation("根据id集合获取敏感负荷用户列表") + @ApiImplicitParam(name = "ids", value = "id集合") + public HttpResult> getListByIds(@RequestParam(name = "ids", required = false) List ids) { + String methodDescribe = getMethodDescribe("getListByIds"); + List list = pqSensitiveUserService.list( + new LambdaQueryWrapper() + .in(CollUtil.isNotEmpty(ids),PqSensitiveUser::getId, ids) + ); + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + }