diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml index b61a6084f..321905d38 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/DeptLineMapper.xml @@ -31,7 +31,8 @@ device.com_flag comFlag, 1 as lineType, 0 as type, - lineDetail.monitor_flag as isUpToGrid + lineDetail.monitor_flag as isUpToGrid, + point.name pointName diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SubstationVo.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SubstationVo.java new file mode 100644 index 000000000..ce37d1b94 --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/SubstationVo.java @@ -0,0 +1,35 @@ +package com.njcn.harmonic.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author xy + */ +@Data +public class SubstationVo { + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("变电站名称") + private String substationName; + + @ApiModelProperty("电网侧监测点名称") + private List dwLineList; + + @ApiModelProperty("非电网侧监测点名称") + private List yhLineList; + + @ApiModelProperty("告警频次") + private Double alarmFreq; + + @ApiModelProperty("谐波电压污染告警值") + private Double vPollutionData; + + @ApiModelProperty("谐波电流污染值") + private Double iPollutionData; + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java index 031d4bb10..7bdeb2416 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java @@ -8,22 +8,23 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.LogUtil; import com.njcn.device.pq.pojo.dto.PollutionLineDTO; import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO; +import com.njcn.device.pq.pojo.param.GridDiagramParam; +import com.njcn.device.pq.pojo.param.RunManageParam; import com.njcn.harmonic.pojo.param.HarmonicPublicParam; import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam; import com.njcn.harmonic.pojo.vo.PollutionSubstationVO; import com.njcn.harmonic.pojo.vo.PollutionVO; +import com.njcn.harmonic.pojo.vo.SubstationVo; import com.njcn.harmonic.service.PollutionSubstationService; 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 lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -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; @@ -100,4 +101,21 @@ public class PollutionSubstationController extends BaseController { List list = pollutionSubstationService.getLineRankTop10(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/substationInfo") + @ApiOperation("变电站台账信息(包含稳态数据统计)") + @ApiImplicitParams({ + @ApiImplicitParam(name = "deptIndex", value = "部门id"), + @ApiImplicitParam(name = "searchValue", value = "搜索值"), + @ApiImplicitParam(name = "startTime", value = "开始时间"), + @ApiImplicitParam(name = "endTime", value = "结束时间") + }) + public HttpResult> getSubstationInfo(@RequestParam(value = "deptIndex") String deptIndex, @RequestParam(value = "searchValue") String searchValue, @RequestParam(value = "startTime") String startTime, @RequestParam(value = "endTime") String endTime) { + String methodDescribe = getMethodDescribe("getSubstationInfo"); + LogUtil.njcnDebug(log, "{},实体参数:{},{}", methodDescribe, deptIndex, searchValue); + List list = pollutionSubstationService.getSubstationInfo(deptIndex,searchValue,startTime,endTime); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitRateDMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitRateDMapper.java index 9688e4aed..d3be9b6af 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitRateDMapper.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitRateDMapper.java @@ -62,4 +62,15 @@ public interface RStatLimitRateDMapper extends BaseMapper { List getAssessTargetRate( @Param("ids") List list, @Param("statTime") String startTime, @Param("endTime") String endTime); + + /** + * 获取监测点的超标次数 + * @param list + * @param startTime + * @param endTime + * @return + */ + List getAllOverTimes( @Param("ids") List list, + @Param("statTime") String startTime, + @Param("endTime") String endTime); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml index 460de929d..65f3634cd 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml @@ -329,4 +329,32 @@ group by my_index + + diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java index 35711f077..0eeb80377 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java @@ -6,6 +6,7 @@ import com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO; import com.njcn.device.pq.pojo.dto.PollutionLineDTO; import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO; import com.njcn.device.pq.pojo.param.GridDiagramParam; +import com.njcn.device.pq.pojo.param.RunManageParam; import com.njcn.device.pq.pojo.vo.GridDiagramVO; import com.njcn.harmonic.pojo.param.HarmonicPublicParam; import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam; @@ -13,6 +14,8 @@ import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam; import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM; import com.njcn.harmonic.pojo.vo.PollutionSubstationVO; import com.njcn.harmonic.pojo.vo.PollutionVO; +import com.njcn.harmonic.pojo.vo.SubstationVo; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; /** @@ -85,4 +88,5 @@ public interface PollutionSubstationService extends IService> getPollutionAlarmList(GridDiagramParam param); + List getSubstationInfo(String deptIndex, String searchValue, String startTime, String endTime); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java index 98d6e44f8..77d9e83c4 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java @@ -1,6 +1,5 @@ package com.njcn.harmonic.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; @@ -15,7 +14,9 @@ import com.njcn.common.pojo.constant.BizParamConstant; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.device.biz.pojo.dto.SubGetBase; import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.device.pms.api.MonitorClient; @@ -31,6 +32,7 @@ import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.api.SubstationFeignClient; import com.njcn.device.pq.pojo.dto.*; import com.njcn.device.pq.pojo.param.GridDiagramParam; +import com.njcn.device.pq.pojo.po.LineDetail; import com.njcn.device.pq.pojo.vo.GridDiagramVO; import com.njcn.harmonic.constant.Param; import com.njcn.harmonic.mapper.*; @@ -39,14 +41,15 @@ import com.njcn.harmonic.pojo.param.HarmonicPublicParam; import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam; import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam; import com.njcn.harmonic.pojo.po.*; +import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.vo.PollutionSubstationVO; import com.njcn.harmonic.pojo.vo.PollutionVO; +import com.njcn.harmonic.pojo.vo.SubstationVo; import com.njcn.harmonic.service.PollutionSubstationService; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.user.api.DeptFeignClient; import com.njcn.user.pojo.po.Dept; -import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.RequestUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -58,7 +61,9 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -105,7 +110,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl getSubstationInfo(String deptIndex, String searchValue, String startTime, String endTime) { + List result = new ArrayList<>(); + + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + deptGetLineParam.setDeptId(deptIndex); + deptGetLineParam.setLineRunFlag(0); + List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); + //获取监测点集合 + Map> lineMap = this.getLineMap(list, searchValue); + List lineList = lineMap.values().stream() + .flatMap(List::stream) + .distinct() + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(lineList)){ + //获取监测点的超标数据 + List limitRateList = rStatLimitRateDMapper.getAllOverTimes(lineList,startTime,endTime); + Map monitorMap = limitRateList.stream().collect(Collectors.toMap(RStatLimitRateDPO::getLineId, Function.identity())); + //todo 获取监测点污染数据 + + //获取监测点详细信息 + List lineDetailList = lineFeignClient.getLineDetail(lineList).getData(); + Map> lineDetailMap = lineDetailList.stream().collect(Collectors.groupingBy(LineDetail::getPowerSubstationName)); + lineDetailMap.forEach((k,v)->{ + AtomicInteger alarmTime = new AtomicInteger(); + SubstationVo vo = new SubstationVo(); + vo.setDeptName(""); + vo.setSubstationName(k); + vo.setDwLineList(v.stream().filter(t->Objects.equals(t.getPowerFlag(),0)).map(LineDetail::getId).collect(Collectors.toList())); + vo.setYhLineList(v.stream().filter(t->Objects.equals(t.getPowerFlag(),1)).map(LineDetail::getId).collect(Collectors.toList())); + v.forEach(item->{ + alarmTime.set(alarmTime.get() + monitorMap.get(item.getId()).getAllTime()); + }); + vo.setAlarmFreq(alarmTime.get() * 1.0 / v.size()); + result.add(vo); + }); + } + return result; + } + + public Map> getLineMap(List list, String searchValue) { + Map> map = new HashMap<>(); + list.forEach(it->{ + Predicate voltageFilter = item -> true; + if (!Objects.isNull(searchValue) && !Objects.equals(searchValue,"")) { + voltageFilter = item -> item.getPointName().contains(searchValue); + } + Predicate combinedFilter = voltageFilter; + map.put(it.getUnitName(),it.getLineBaseList().stream() + .filter(combinedFilter) + .map(LineDevGetDTO::getPointId) + .distinct() + .collect(Collectors.toList())); + }); + return map; + } + + private List addList(List substationMlist) { List info=new ArrayList<>(); Integer num1 = 0; diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java index 9f38ea1c4..ad7db7edb 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java @@ -38,6 +38,7 @@ import com.njcn.supervision.enums.ProblemTypeEnum; import com.njcn.supervision.mapper.device.LineWarningMapper; import com.njcn.supervision.pojo.param.device.OnlineParam; import com.njcn.supervision.pojo.po.device.LineWarning; +import com.njcn.supervision.pojo.po.leaflet.WarningLeaflet; import com.njcn.supervision.pojo.vo.device.LineLimitDetailVo; import com.njcn.supervision.pojo.vo.device.OnlineVo; import com.njcn.supervision.service.device.ILineWarningService; @@ -60,7 +61,10 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -247,10 +251,15 @@ public class LineWarningServiceImpl extends MppServiceImpl allLineWarnings = new ArrayList<>(); + //获取年份 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate date = LocalDate.parse(param.getSearchBeginTime(), formatter); + int year = date.getYear(); + param.setYear(String.valueOf(year)); + param.setNumber(getNumber(year)); //获取部门名称 String deptName = deptFeignClient.getDeptById(param.getDeptId()).getData().getName(); param.setDeptName(deptName); - String inputUrl = "file/warningReport.docx"; String alarmType = param.getType() == 1 ? "预" : "告"; String fileName = "电能["+alarmType+"]"+param.getYear()+"年"+param.getNumber()+"号-"+param.getDeptName()+"地市 电能质量技术监督"+alarmType+"警单.docx"; @@ -800,6 +809,34 @@ public class LineWarningServiceImpl extends MppServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(WarningLeaflet::getState, 1) + .eq(WarningLeaflet::getProblemType, 2) + .between(WarningLeaflet::getCreateTime, firstDayOfYear, lastDayOfYear); + List list = warningLeafletService.list(lambdaQueryWrapper); + if (list.isEmpty()) { + return "1"; + } + // 编译正则表达式,用于匹配文件中的编号 + Pattern pattern = Pattern.compile("年(\\d+)号"); + int maxNumber = 0; + for (WarningLeaflet leaflet : list) { + String filePath = leaflet.getFilePath(); + Matcher matcher = pattern.matcher(filePath); + if (matcher.find()) { + int number = Integer.parseInt(matcher.group(1)); + maxNumber = Math.max(maxNumber, number); + } + } + return String.valueOf(maxNumber + 1); + } + /** * 获取频率偏差-日最大值-最大值 */