From 7419142abe3242953fcf3b59f5d6413ec93beedd Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Thu, 1 Jun 2023 17:16:28 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=A7=A3=E5=86=B3=E5=AE=A1=E8=AE=A1=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=B2=A1=E6=9C=89=E6=98=BE=E7=A4=BA=E7=9A=84bug=202.?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=BF=83=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2=E8=BF=87=E6=85=A2=E5=92=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=B1=95=E7=A4=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GeneralDeviceInfoController.java | 3 +- .../com/njcn/device/pq/mapper/LineMapper.java | 7 + .../device/pq/mapper/mapping/LineMapper.xml | 25 + .../pq/service/TerminalBaseService.java | 2 +- .../pq/service/impl/GeneralDeviceService.java | 9 +- .../impl/LineIntegrityDataServiceImpl.java | 2 +- .../service/impl/TerminalBaseServiceImpl.java | 14 +- .../TerminalOnlineRateDataServiceImpl.java | 2 +- .../njcn/event/pojo/po/RmpEventDetailPO.java | 4 +- .../com/njcn/event/pojo/vo/GeneralVO.java | 3 +- .../majornetwork/EventDetailMapper.java | 11 + .../mapping/EventDetailMapper.xml | 27 + .../Impl/AreaAnalysisServiceImpl.java | 51 +- .../Impl/AreaLineServiceImpl.java | 91 +-- .../majornetwork/Impl/ReportServiceImpl.java | 692 +++++++++++++----- .../Impl/TransientServiceImpl.java | 4 +- .../src/main/resources/templates/bar3.ftl | 11 +- .../src/main/resources/templates/bar4.ftl | 11 +- .../src/main/resources/templates/bar5.ftl | 8 +- .../src/main/resources/templates/bar6.ftl | 8 +- .../src/main/resources/templates/bar7.ftl | 7 +- .../com/njcn/harmonic/utils/PubUtils.java | 4 +- .../service/impl/HarmonicServiceImpl.java | 2 +- .../impl/PollutionSubstationServiceImpl.java | 4 +- .../impl/SteadyExceedRateServiceImpl.java | 28 +- .../impl/SteadyQualifyServiceImpl.java | 2 +- .../service/impl/THDistortionServiceImpl.java | 2 +- .../service/impl/TerminalServiceImpl.java | 2 +- .../com/njcn/system/enums/DicDataEnum.java | 4 + .../com/njcn/system/excel/DataListener.java | 15 +- .../com/njcn/system/mapper/AuditMapper.java | 6 + .../system/mapper/mapping/AuditMapper.xml | 13 + .../system/service/impl/AuditServiceImpl.java | 9 +- 33 files changed, 797 insertions(+), 286 deletions(-) diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java index ee52b01a2..c0914c635 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/GeneralDeviceInfoController.java @@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -134,7 +135,7 @@ public class GeneralDeviceInfoController extends BaseController { String methodDescribe = getMethodDescribe("getPracticalRunDeviceInfoAsSubstation"); List substationDeviceInfos = generalDeviceService.getDeviceInfoAsSubstation(deviceInfoParam, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); if (CollectionUtil.isEmpty(substationDeviceInfos)) { - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.NO_DATA, null, methodDescribe); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, new ArrayList<>(), methodDescribe); } else { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, substationDeviceInfos, methodDescribe); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java index ea5be458a..e454f3a7e 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java @@ -436,4 +436,11 @@ public interface LineMapper extends BaseMapper { * @date 2023/5/25 */ List getLineByIDs(@Param("searchValue")String searchValue); + + /** + * 通过电站id集合,和电压等级 + * @author cdf + * @date 2023/5/10 + */ + List getSubStations(@Param("subId")List subId, @Param("scale") List scale); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml index 2ad3c042e..980943c97 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml @@ -1109,4 +1109,29 @@ + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java index b399499fa..d6e445c37 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalBaseService.java @@ -62,7 +62,7 @@ public interface TerminalBaseService { * @param substationIds 监测点id * @return 变电站信息 */ - List getSubstationByIds(List substationIds); + List getSubstationByIds(List substationIds,List scale); /** * 根据监测点id,获取所有监测点 diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java index 067fc7f68..2176f4e6b 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/GeneralDeviceService.java @@ -1,6 +1,7 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.common.pojo.dto.SimpleDTO; @@ -198,6 +199,12 @@ public class GeneralDeviceService { */ public List getDeviceInfoAsSubstation(DeviceInfoParam deviceInfoParam, List runFlag, List devModel) { List deviceInfoAsSubstation = new ArrayList<>(); + List scale = new ArrayList<>(); + if(CollUtil.isNotEmpty(deviceInfoParam.getScale())){ + scale = deviceInfoParam.getScale().stream().map(SimpleDTO::getId).collect(Collectors.toList()); + deviceInfoParam.setScale(new ArrayList<>()); + } + List deviceInfoAsDept = getDeviceInfo(deviceInfoParam, runFlag, devModel); List substationIds = new ArrayList<>(); List lineIds = new ArrayList<>(); @@ -212,7 +219,7 @@ public class GeneralDeviceService { substationIds = substationIds.stream().distinct().collect(Collectors.toList()); lineIds = lineIds.stream().distinct().collect(Collectors.toList()); if (!CollectionUtil.isEmpty(substationIds)) { - List substations = terminalBaseService.getSubstationByIds(substationIds); + List substations = terminalBaseService.getSubstationByIds(substationIds,scale); List lines = terminalBaseService.getLineById(lineIds); for (Line substation : substations) { deviceInfoAsSubstation.add(mergeDeviceInfoAsSubstation(substation, lines)); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java index 2f49fbf98..489033031 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java @@ -203,7 +203,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl integrityData = getCondition(lineIndexes, integrityIconParam.getSearchBeginTime(), integrityIconParam.getSearchEndTime()); outParam.setSingle(NumberUtil.round(integrityData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159),2).doubleValue()); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java index 4bee9a68f..23ea2f213 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java @@ -5,6 +5,7 @@ import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; @@ -1427,12 +1428,13 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple } @Override - public List getSubstationByIds(List substationIds) { - return this.lambdaQuery() - .in(Line::getId, substationIds) - .eq(Line::getLevel, 3) - .eq(Line::getState, DataStateEnum.ENABLE.getCode()) - .list(); + public List getSubstationByIds(List substationIds,List scale) { + return this.baseMapper.getSubStations(substationIds,scale); +// .in(Line::getId, substationIds) +// .eq(Line::getLevel, 3) +// .in(CollUtil.isNotEmpty(scale),Line::getLevel) +// .eq(Line::getState, DataStateEnum.ENABLE.getCode()) +// .list(); } @Override diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java index ae9496e62..317a9be69 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java @@ -167,7 +167,7 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData if (CollectionUtils.isEmpty(deviceIndexes)) { continue; } - type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getDeviceIndexes().size()+")"); + type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getLineIndexes().size()+")"); //根据终端索引集查询在线率 List onlineRateList = getCondition(deviceIndexes, onlineRateCensusParam.getSearchBeginTime(), onlineRateCensusParam.getSearchEndTime()); single.add(onlineRateList.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159)); diff --git a/pqs-event/event-api/src/main/java/com/njcn/event/pojo/po/RmpEventDetailPO.java b/pqs-event/event-api/src/main/java/com/njcn/event/pojo/po/RmpEventDetailPO.java index 9174a0740..89502d3cc 100644 --- a/pqs-event/event-api/src/main/java/com/njcn/event/pojo/po/RmpEventDetailPO.java +++ b/pqs-event/event-api/src/main/java/com/njcn/event/pojo/po/RmpEventDetailPO.java @@ -111,7 +111,9 @@ public class RmpEventDetailPO implements Serializable { private LocalDateTime createTime; - + @ApiModelProperty(value = "用于计算数量") + @TableField(exist = false) + private Integer count; } diff --git a/pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/GeneralVO.java b/pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/GeneralVO.java index de5f124cd..0d721cf5b 100644 --- a/pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/GeneralVO.java +++ b/pqs-event/event-api/src/main/java/com/njcn/event/pojo/vo/GeneralVO.java @@ -45,5 +45,6 @@ public class GeneralVO implements Serializable { @ApiModelProperty(name = "upCount",value = "暂升次数") private Integer upCount; - + @ApiModelProperty(name = "id",value = "id") + private String id; } diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/EventDetailMapper.java b/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/EventDetailMapper.java index c3d75d57e..2cb0f5b96 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/EventDetailMapper.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/EventDetailMapper.java @@ -2,6 +2,11 @@ package com.njcn.event.mapper.majornetwork; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.njcn.event.pojo.po.RmpEventDetailPO; +import com.njcn.event.pojo.vo.GeneralVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +18,10 @@ import com.njcn.event.pojo.po.RmpEventDetailPO; */ public interface EventDetailMapper extends BaseMapper { + /** + * 根据时间范围查询信息数据 + * @param condMap + * @return + */ + List ListEventType( @Param("condMap") Map condMap); } diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/mapping/EventDetailMapper.xml b/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/mapping/EventDetailMapper.xml index b8f4db2b8..20196c9b7 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/mapping/EventDetailMapper.xml +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/mapper/majornetwork/mapping/EventDetailMapper.xml @@ -15,5 +15,32 @@ + diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaAnalysisServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaAnalysisServiceImpl.java index 52e3fb2a7..cec6638a9 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaAnalysisServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaAnalysisServiceImpl.java @@ -6,6 +6,9 @@ import cn.hutool.core.date.DateUtil; 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.njcn.common.pojo.exception.BusinessException; +import com.njcn.device.biz.enums.DeviceResponseEnum; import com.njcn.device.pq.api.GeneralDeviceInfoClient; import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; @@ -22,6 +25,7 @@ import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.po.DictData; +import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -50,6 +54,11 @@ public class AreaAnalysisServiceImpl implements AreaAnalysisService { private final EventDetailService eventDetailService; @Override public AreaAnalysisVO getEventReason(DeviceInfoParam.BusinessParam deviceInfoParam) { + //获取暂降字典信息 +// DictData voltageData = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); +// if(ObjectUtil.isNull(voltageData)){ +// throw new BusinessException(DeviceResponseEnum.DIC_GET_EMPTY); +// } AreaAnalysisVO areaAnalysisVO = new AreaAnalysisVO(); List dicReasonList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_REASON.getName()).getData(); List dicTypeList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_TYPE.getName()).getData(); @@ -59,18 +68,21 @@ public class AreaAnalysisServiceImpl implements AreaAnalysisService { //查询数据 // List reasonList = assData(dicReasonList, lineIds, deviceInfoParam.getSearchBeginTime(), deviceInfoParam.getSearchEndTime(), "event_reason"); - List info = eventDetailService.list(new LambdaQueryWrapper() - .in(RmpEventDetailPO::getMeasurementPointId, lineIds) - .in(RmpEventDetailPO::getAdvanceReason, dicReasonList.stream().map(DictData::getId).collect(Collectors.toList())) - .in(RmpEventDetailPO::getAdvanceType, dicTypeList.stream().map(DictData::getId).collect(Collectors.toList())) - .ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))) + List info = eventDetailService.list(new QueryWrapper() + .select("advance_reason,advance_type,count(event_id) as count") + .in("measurement_point_id", lineIds) +// .eq("event_type", voltageData.getId()) + .in("advance_reason", dicReasonList.stream().map(DictData::getId).collect(Collectors.toList())) + .in("advance_type", dicTypeList.stream().map(DictData::getId).collect(Collectors.toList())) + .ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()),"start_time" ,DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime()))) + .le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), "start_time", DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))) + .groupBy("measurement_point_id,advance_reason,advance_type") ); List reasonList = assDataPQ(info, dicReasonList); //暂降类型特殊处理 - DictData dictData = dicReasonList.stream().filter(item->"短路故障".equals(item.getName())).findFirst().get(); + DictData dictData = dicReasonList.stream().filter(item->DicDataEnum.SHORT_TROUBLE.getCode().equals(item.getCode())).findFirst().get(); //相间 List dicIdsXi = dicTypeList.stream().filter(item-> ObjectUtil.equals(DicDataEnum.INTERPHASE_AB.getCode(),item.getCode())|| @@ -186,6 +198,27 @@ public class AreaAnalysisServiceImpl implements AreaAnalysisService { } private List assDataPQ(List info,List dicReasonList) { + List reasonList = new ArrayList<>(); + Map> reasonMap = info.stream().collect(Collectors.groupingBy(RmpEventDetailPO::getAdvanceReason)); + AreaAnalysisVO.Children allType ; + Integer allCount = 0; + for (DictData dictData : dicReasonList) { + allType = new AreaAnalysisVO.Children(); + if(reasonMap.containsKey(dictData.getId())){ + Integer sum = reasonMap.get(dictData.getId()).stream().mapToInt(RmpEventDetailPO::getCount).sum(); + allCount+=sum; + allType.setValue(sum); + }else{ + allType.setValue(0); + } + allType.setName(dictData.getName()); + reasonList.add(allType); + } + AreaAnalysisVO.Children zj = new AreaAnalysisVO.Children(); + zj.setName("总计"); + zj.setValue(allCount); + reasonList.add(zj); +/* List reasonList = new ArrayList<>(); //根据暂降原因分组 Map reasonMap = dicReasonList.stream().collect(Collectors.toMap(DictData::getId,DictData::getName)); @@ -219,7 +252,7 @@ public class AreaAnalysisServiceImpl implements AreaAnalysisService { AreaAnalysisVO.Children zj = new AreaAnalysisVO.Children(); zj.setName("总计"); zj.setValue(allCount); - reasonList.add(zj); + reasonList.add(zj);*/ return reasonList; } @@ -230,7 +263,7 @@ public class AreaAnalysisServiceImpl implements AreaAnalysisService { Integer allCount = 0; for (Map.Entry> stringListEntry : stringListMap.entrySet()) { List value = stringListEntry.getValue(); - Integer count = Math.toIntExact(reasons.stream().filter(x -> value.contains(x.getAdvanceType())).count()); + Integer count = reasons.stream().filter(x -> value.contains(x.getAdvanceType())).mapToInt(RmpEventDetailPO::getCount).sum(); AreaAnalysisVO.Children allType = new AreaAnalysisVO.Children(); allType.setName(stringListEntry.getKey()); allType.setValue(count); diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaLineServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaLineServiceImpl.java index af96fd6b6..1b74dcf11 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaLineServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/AreaLineServiceImpl.java @@ -3,9 +3,13 @@ package com.njcn.event.service.majornetwork.Impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; +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.njcn.common.pojo.enums.common.ServerEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.device.biz.enums.DeviceResponseEnum; import com.njcn.device.pq.api.GeneralDeviceInfoClient; import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; @@ -29,12 +33,14 @@ import com.njcn.harmonic.pojo.po.PQSComAssesPO; import com.njcn.harmonic.utils.HarmonicComAssesUtil; import com.njcn.influxdb.param.InfluxDBPublicParam; import com.njcn.influxdb.utils.InfluxDbUtils; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; import com.njcn.system.pojo.enums.StatisticsEnum; +import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.influxdb.dto.QueryResult; import org.influxdb.impl.InfluxDBResultMapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -44,7 +50,6 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; -import static com.njcn.event.influxdb.PqsOnlinerateQuery.devIdOr; import static com.njcn.event.influxdb.QueryBuilder.*; /** @@ -69,10 +74,10 @@ public class AreaLineServiceImpl implements AreaLineService { private final PqDeviceMapper pqDeviceMapper; private final EventDetailService eventDetailService; - @Autowired - private LargeScreenService largeScreenService; - @Autowired - private HarmonicComAssesUtil comAssesUtil; + private final LargeScreenService largeScreenService; + private final HarmonicComAssesUtil comAssesUtil; + private final DicDataFeignClient dicDataFeignClient; + @Override public AreaLineVO getAreaLineVO(DeviceInfoParam deviceInfoParam) { @@ -164,10 +169,16 @@ public class AreaLineServiceImpl implements AreaLineService { @Override public EventHeatMapVO getEventHeatMap(DeviceInfoParam.BusinessParam deviceInfoParam) { + //获取暂降字典信息 + DictData voltageData = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); + if(ObjectUtil.isNull(voltageData)){ + throw new BusinessException(DeviceResponseEnum.DIC_GET_EMPTY); + } EventHeatMapVO eventHeatMapVO = new EventHeatMapVO(); List> eventHeatMapDetailList = new ArrayList<>(); deviceInfoParam.setServerName(ServerEnum.EVENT.getName()); List listObject = new ArrayList<>(); + // 获取暂降监测点 List generalDeviceDTOList = generalDeviceInfoClient.getPracticalAllDeviceInfo(deviceInfoParam).getData(); List lineIndexs; @@ -177,38 +188,29 @@ public class AreaLineServiceImpl implements AreaLineService { lineIndexs = generalDeviceDTO.getLineIndexes(); // 获取暂降数据 if (lineIndexs.size() > 0) { - int tail = 0; -// List eventdetailList = getContion(deviceInfoParam, lineIndexs); + Integer tail = 0; //数据暂降查询 - List info = eventDetailService.list(new LambdaQueryWrapper() - .in(RmpEventDetailPO::getMeasurementPointId, lineIndexs) - .ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))) + List info = eventDetailService.list(new QueryWrapper() + .select("measurement_point_id as measurementPointId,count(file_flag) as fileFlag") + .in("measurement_point_id", lineIndexs) + .eq("event_type", voltageData.getId()) + .ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()),"start_time" ,DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime()))) + .le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), "start_time", DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))) + .groupBy("measurement_point_id") ); - List eventdetailList = BeanUtil.copyToList(info, EventHeatDeatilVO.class); - if (eventdetailList.size() > 0) { - List lineIds = eventdetailList.stream().map(EventHeatDeatilVO::getLineId).distinct().collect(Collectors.toList()); + + if (info.size() > 0) { + List lineIds = info.stream().map(RmpEventDetailPO::getMeasurementPointId).distinct().collect(Collectors.toList()); List areaAnalysisVOList = lineFeignClient.getBaseLineAreaInfo(lineIds).getData(); - /* for (EventHeatDeatilVO eventHeat : eventdetailList) { - for (AreaLineInfoVO areaLineInfoVO : areaAnalysisVOList) { - if (eventHeat.getLineId().equals(areaLineInfoVO.getLineId())) { - List ev = new ArrayList<>(); - tail += eventHeat.getCount() == null ? 0 : eventHeat.getCount(); - areaLineInfoVO.setTail(tail); - ev.add(areaLineInfoVO); - eventHeatMapDetailList.add(ev); - break; - } - } - }*/ for (AreaLineInfoVO areaLineInfoVO : areaAnalysisVOList) { List ev = new ArrayList<>(); - long count = eventdetailList.stream() - .filter(obj -> obj.getLineId().equals( areaLineInfoVO.getLineId())) - .count(); - int c = (int) count; - areaLineInfoVO.setTail(c); + Integer count = info.stream() + .filter(obj -> obj.getMeasurementPointId().equals( areaLineInfoVO.getLineId())) + .mapToInt(RmpEventDetailPO::getFileFlag) + .sum(); + tail+=count; + areaLineInfoVO.setTail(count); ev.add(areaLineInfoVO); eventHeatMapDetailList.add(ev); } @@ -221,7 +223,7 @@ public class AreaLineServiceImpl implements AreaLineService { baseVO.setName(generalDeviceDTO.getName()); baseVO.setValue(BigDecimal.valueOf(lineIndexs.size())); baseVO.setData(String.valueOf(allComAss)); - baseVO.setCount(eventdetailList.size()); + baseVO.setCount(tail); baseVO.setSize(lineIndexs.size()); listObject.add(baseVO); } @@ -243,6 +245,11 @@ public class AreaLineServiceImpl implements AreaLineService { @Override public EventSeverityVO getEventSeverity(DeviceInfoParam.BusinessParam deviceInfoParam) { + //获取暂降字典信息 + DictData voltageData = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); + if(ObjectUtil.isNull(voltageData)){ + throw new BusinessException(DeviceResponseEnum.DIC_GET_EMPTY); + } EventSeverityVO eventSeverityVO = new EventSeverityVO(); List eventSeverityValueList = new ArrayList<>(); deviceInfoParam.setServerName(ServerEnum.EVENT.getName()); @@ -259,16 +266,18 @@ public class AreaLineServiceImpl implements AreaLineService { if (lineIndexs.size() > 0) { int tail = 0; EventSeverityValueVO eventSeverityValueVO = new EventSeverityValueVO(); -// List eventdetailList = getContion(deviceInfoParam, lineIndexs); - List info = eventDetailService.list(new LambdaQueryWrapper() - .in(RmpEventDetailPO::getMeasurementPointId, lineIndexs) - .ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))) + List info = eventDetailService.list(new QueryWrapper() + .select("measurement_point_id as measurementPointId,count(file_flag) as fileFlag") + .in("measurement_point_id", lineIndexs) + .eq("event_type", voltageData.getId()) + .ge(StrUtil.isNotBlank(deviceInfoParam.getSearchBeginTime()),"start_time" ,DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime()))) + .le(StrUtil.isNotBlank(deviceInfoParam.getSearchEndTime()), "start_time", DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))) + .groupBy("measurement_point_id") ); List eventdetailList = BeanUtil.copyToList(info, EventHeatDeatilVO.class); - if (eventdetailList.size() > 0) { - for (int eventNum = 0; eventNum < eventdetailList.size(); eventNum++) { - tail += eventdetailList.get(eventNum).getCount(); + if (info.size() > 0) { + for (int eventNum = 0; eventNum < info.size(); eventNum++) { + tail += info.get(eventNum).getFileFlag(); } eventSeverityValueVO.setAreaName(generalDeviceDTO.getName()); eventSeverityValueVO.setLineNum(lineIndexs.size()); diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java index cde017b44..8721bd433 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/ReportServiceImpl.java @@ -2,13 +2,14 @@ package com.njcn.event.service.majornetwork.Impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.date.DateUtil; import com.github.abel533.echarts.Label; import com.github.abel533.echarts.Title; import com.github.abel533.echarts.axis.AxisLabel; @@ -26,6 +27,7 @@ import com.njcn.common.pojo.dto.SimpleDTO; 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.device.biz.enums.DeviceResponseEnum; import com.njcn.device.pms.api.MonitorClient; import com.njcn.device.pms.api.PmsGeneralDeviceInfoClient; import com.njcn.device.pms.pojo.dto.PmsGeneralDeviceDTO; @@ -33,13 +35,13 @@ import com.njcn.device.pms.pojo.param.PmsDeviceInfoParam; import com.njcn.device.pms.pojo.po.Monitor; import com.njcn.device.pq.api.GeneralDeviceInfoClient; import com.njcn.device.pq.api.LineFeignClient; -import com.njcn.device.biz.enums.DeviceResponseEnum; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; import com.njcn.device.pq.pojo.vo.AreaLineInfoVO; import com.njcn.device.pq.pojo.vo.LineDetailDataVO; import com.njcn.event.enums.EventResponseEnum; +import com.njcn.event.mapper.majornetwork.EventDetailMapper; import com.njcn.event.mapper.majornetwork.ReportMapper; import com.njcn.event.pojo.constant.Param; import com.njcn.event.pojo.param.*; @@ -65,6 +67,23 @@ import com.njcn.system.pojo.enums.StatisticsEnum; import com.njcn.system.pojo.po.DictData; import com.njcn.user.api.DeptFeignClient; import freemarker.template.TemplateException; +import java.io.*; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.net.URLEncoder; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.List; +import java.util.stream.Collectors; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import net.sf.json.JSONArray; import org.apache.commons.lang.StringUtils; @@ -78,7 +97,6 @@ import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; import org.influxdb.dto.QueryResult; import org.influxdb.impl.InfluxDBResultMapper; - import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.springframework.beans.BeanUtils; import org.springframework.http.*; @@ -86,22 +104,6 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import sun.misc.BASE64Decoder; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.RoundingMode; -import java.net.URLEncoder; -import java.text.NumberFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.List; -import java.util.stream.Collectors; /** * @author xxy @@ -133,6 +135,7 @@ public class ReportServiceImpl implements ReportService { private final MonitorClient monitorClient; private final EventDetailService eventDetailService; + private final EventDetailMapper eventDetailMapper; private final FreemarkerUtil freemarkerUtil; @@ -190,62 +193,50 @@ public class ReportServiceImpl implements ReportService { if(CollectionUtil.isEmpty(dictType)){ return new ArrayList<>(); } - Map dictMap = dictType.stream().collect(Collectors.toMap(DictData::getId, DictData::getCode)); - - + Map dictMap = dictType.stream().collect(Collectors.toMap(DictData::getCode, DictData::getId)); //查区域 - HttpResult> info = generalDeviceInfoClient.getPracticalAllDeviceInfo(businessParam); - List data = info.getData(); - //所有根据line_id查询出来的数据 - HashMap> map = new HashMap<>(); - //循环查找所有数据 -// QueryResult queryResult = new QueryResult(); - ArrayList list = new ArrayList<>(); + List data = generalDeviceInfoClient.getPracticalAllDeviceInfo(businessParam).getData(); + List lineIds = data.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList()); + + HashMap condMap = new HashMap<>(); + condMap.put("startTime", DateUtil.beginOfDay(DateUtil.parse(businessParam.getSearchBeginTime())).toString()); + condMap.put("endTime", DateUtil.endOfDay(DateUtil.parse(businessParam.getSearchEndTime())).toString()); + condMap.put("ids", lineIds); + condMap.put(DicDataEnum.VOLTAGE_DIP.getCode(), dictMap.get(DicDataEnum.VOLTAGE_DIP.getCode())); //电压暂降 + condMap.put(DicDataEnum.SHORT_INTERRUPTIONS.getCode(), dictMap.get(DicDataEnum.SHORT_INTERRUPTIONS.getCode())); //短时中断 + condMap.put(DicDataEnum.VOLTAGE_RISE.getCode(), dictMap.get(DicDataEnum.VOLTAGE_RISE.getCode())); //电压暂升 + + //根据id把所有的数据查询出来 + List generalVOS = eventDetailMapper.ListEventType(condMap); + + GeneralVO generalVO; + List list = new ArrayList<>(); for (GeneralDeviceDTO dto : data) { - list.add(new GeneralVO(dto.getName(), 0.0,0, 0, 0, 0, 0)); + generalVO= new GeneralVO(); + generalVO.setName(dto.getName()); -// queryResult = null; -// StringBuilder stringBuilder = new StringBuilder(Param.SELECT).append(Param.EVENT_DETAIL); - List lineIndexes = dto.getLineIndexes(); - if (lineIndexes.size() > 0) { - //数据暂降查询 - List eventDetails = eventDetailService.list(new LambdaQueryWrapper() - .in(RmpEventDetailPO::getMeasurementPointId,lineIndexes) - .ge(StrUtil.isNotBlank(businessParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime,DateUtil.beginOfDay(DateUtil.parse(businessParam.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(businessParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(businessParam.getSearchEndTime()))) - ); - List eventDetailList= BeanUtil.copyToList(eventDetails,EventDetail.class); + if(CollUtil.isNotEmpty(dto.getLineIndexes())){ + List collect = generalVOS.stream().filter(x -> dto.getLineIndexes().contains(x.getId())).collect(Collectors.toList()); + int sagsCount = collect.stream().mapToInt(GeneralVO::getSagsCount).sum(); + int breakCount = collect.stream().mapToInt(GeneralVO::getBreakCount).sum(); + int upCount = collect.stream().mapToInt(GeneralVO::getUpCount).sum(); + Integer onLineCount = lineFeignClient.getOnLineCount(dto.getLineIndexes()).getData(); + generalVO.setVol(0.0D); + generalVO.setOnLine(onLineCount); + generalVO.setOffLine(dto.getLineIndexes().size() - onLineCount); + generalVO.setSagsCount(sagsCount); + generalVO.setBreakCount(breakCount); + generalVO.setUpCount(upCount); + }else{ + generalVO.setVol(0.0D); + generalVO.setOnLine(0); + generalVO.setOffLine(0); + generalVO.setSagsCount(0); + generalVO.setBreakCount(0); + generalVO.setUpCount(0); + } + list.add(generalVO); - map.put(dto.getName(), eventDetailList); - } else { - List eventDetailList = new ArrayList<>(); - map.put(dto.getName(), eventDetailList); - } - } - Set keySet = map.keySet(); - //获取状态 - for (int i = 0; i < keySet.size(); i++) { - for (String s : keySet) { - GeneralVO generalVO = list.get(i); - if (map.get(s).size() > 0 && generalVO.getName().equals(s)) { - long count1 = map.get(s).stream().filter(x -> DicDataEnum.VOLTAGE_DIP.getCode().equals(dictMap.get(x.getEventType()))).count(); - long count2 = map.get(s).stream().filter(x -> DicDataEnum.VOLTAGE_RISE.getCode().equals(dictMap.get(x.getEventType()))).count(); - long count3 = map.get(s).stream().filter(x -> DicDataEnum.SHORT_INTERRUPTIONS.getCode().equals(dictMap.get(x.getEventType()))).count(); - generalVO.setSagsCount((int) count1); - generalVO.setUpCount((int) count2); - generalVO.setBreakCount((int) count3); - } - } - } - //是否在线 - for (int i = 0; i < data.size(); i++) { - GeneralVO generalVO = list.get(i); - GeneralDeviceDTO dto = data.get(i); - if (dto.getLineIndexes().size() > 0) { - HttpResult result = lineFeignClient.getOnLineCount(dto.getLineIndexes()); - generalVO.setOnLine(result.getData()); - generalVO.setOffLine(dto.getLineIndexes().size() - result.getData()); - } } return list; } @@ -263,66 +254,50 @@ public class ReportServiceImpl implements ReportService { if(CollectionUtil.isEmpty(dictType)){ return new ArrayList<>(); } - Map dictMap = dictType.stream().collect(Collectors.toMap(DictData::getId, DictData::getCode)); + Map dictMap = dictType.stream().collect(Collectors.toMap(DictData::getCode, DictData::getId)); //查电压 List data = generalDeviceInfoClient.getPracticalAllDeviceInfo(businessParam).getData(); - //所有根据line_id查询出来的数据 - HashMap> map = new HashMap<>(); - //循环查找所有数据 -// QueryResult queryResult = new QueryResult(); - ArrayList list = new ArrayList<>(); + List lineIds = data.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList()); + + HashMap condMap = new HashMap<>(); + condMap.put("startTime", DateUtil.beginOfDay(DateUtil.parse(businessParam.getSearchBeginTime())).toString()); + condMap.put("endTime", DateUtil.endOfDay(DateUtil.parse(businessParam.getSearchEndTime())).toString()); + condMap.put("ids", lineIds); + condMap.put(DicDataEnum.VOLTAGE_DIP.getCode(), dictMap.get(DicDataEnum.VOLTAGE_DIP.getCode())); //电压暂降 + condMap.put(DicDataEnum.SHORT_INTERRUPTIONS.getCode(), dictMap.get(DicDataEnum.SHORT_INTERRUPTIONS.getCode())); //短时中断 + condMap.put(DicDataEnum.VOLTAGE_RISE.getCode(), dictMap.get(DicDataEnum.VOLTAGE_RISE.getCode())); //电压暂升 + + //根据id把所有的数据查询出来 + List generalVOS = eventDetailMapper.ListEventType(condMap); + + GeneralVO generalVO; + List list = new ArrayList<>(); for (GeneralDeviceDTO dto : data) { - list.add(new GeneralVO(dto.getName(), 0.0,0, 0, 0, 0, 0)); -// queryResult = null; -// StringBuilder stringBuilder = new StringBuilder(Param.SELECT + Param.EVENT_DETAIL); - List lineIndexes = dto.getLineIndexes(); - if (lineIndexes.size() > 0) { - //数据暂降查询 - List eventDetails = eventDetailService.list(new LambdaQueryWrapper() - .in(RmpEventDetailPO::getMeasurementPointId,lineIndexes) - .ge(StrUtil.isNotBlank(businessParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime,DateUtil.beginOfDay(DateUtil.parse(businessParam.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(businessParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(businessParam.getSearchEndTime()))) - ); - List eventDetailList= BeanUtil.copyToList(eventDetails,EventDetail.class); -// stringBuilder.append(Param.WHERE); -// lineIndexes.stream().forEach(line -> { -// stringBuilder.append("line_id = '").append(line + "' ").append("or "); -// }); -// String substring = stringBuilder.substring(0, stringBuilder.length() - 3); -// queryResult = influxDbUtils.query(substring.toString()); -// //结果集映射到对象中 -// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); -// List eventDetailList = influxDBResultMapper.toPOJO(queryResult, EventDetail.class); - map.put(dto.getName(), eventDetailList); - } else { - List eventDetailList = new ArrayList<>(); - map.put(dto.getName(), eventDetailList); - } - } - Set keySet = map.keySet(); - //获取状态 - for (int i = 0; i < keySet.size(); i++) { - for (String s : keySet) { - GeneralVO generalVO = list.get(i); - if (map.get(s).size() > 0 && generalVO.getName().equals(s)) { - long count1 = map.get(s).stream().filter(x -> DicDataEnum.VOLTAGE_DIP.getCode().equals(dictMap.get(x.getEventType()))).count(); - long count2 = map.get(s).stream().filter(x -> DicDataEnum.VOLTAGE_RISE.getCode().equals(dictMap.get(x.getEventType()))).count(); - long count3 = map.get(s).stream().filter(x -> DicDataEnum.SHORT_INTERRUPTIONS.getCode().equals(dictMap.get(x.getEventType()))).count(); - generalVO.setSagsCount((int) count1); - generalVO.setUpCount((int) count2); - generalVO.setBreakCount((int) count3); - } - } - } - //是否在线 - for (int i = 0; i < data.size(); i++) { - GeneralVO generalVO = list.get(i); - GeneralDeviceDTO dto = data.get(i); - if (dto.getLineIndexes().size() > 0) { - HttpResult result = lineFeignClient.getOnLineCount(dto.getLineIndexes()); - generalVO.setOnLine(result.getData()); - generalVO.setOffLine(dto.getLineIndexes().size() - result.getData()); + generalVO= new GeneralVO(); + generalVO.setName(dto.getName()); + + if(CollUtil.isNotEmpty(dto.getLineIndexes())){ + List collect = generalVOS.stream().filter(x -> dto.getLineIndexes().contains(x.getId())).collect(Collectors.toList()); + int sagsCount = collect.stream().mapToInt(GeneralVO::getSagsCount).sum(); + int breakCount = collect.stream().mapToInt(GeneralVO::getBreakCount).sum(); + int upCount = collect.stream().mapToInt(GeneralVO::getUpCount).sum(); + Integer onLineCount = lineFeignClient.getOnLineCount(dto.getLineIndexes()).getData(); + generalVO.setVol(0.0D); + generalVO.setOnLine(onLineCount); + generalVO.setOffLine(dto.getLineIndexes().size() - onLineCount); + generalVO.setSagsCount(sagsCount); + generalVO.setBreakCount(breakCount); + generalVO.setUpCount(upCount); + }else{ + generalVO.setVol(0.0D); + generalVO.setOnLine(0); + generalVO.setOffLine(0); + generalVO.setSagsCount(0); + generalVO.setBreakCount(0); + generalVO.setUpCount(0); } + list.add(generalVO); + } list.forEach(item -> item.setVol(Double.parseDouble(item.getName().substring(0,item.getName().indexOf("k"))))); List sortedList = list.stream().sorted(Comparator.comparing(GeneralVO::getVol)).collect(Collectors.toList()); @@ -441,6 +416,11 @@ public class ReportServiceImpl implements ReportService { */ @Override public Page getContinueTime(WaveTypeParam waveTypeParam) { + //获取暂降字典信息 + DictData voltageData = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); + if(ObjectUtil.isNull(voltageData)){ + throw new BusinessException(DeviceResponseEnum.DIC_GET_EMPTY); + } List lineIds =new ArrayList<>(); List result = new ArrayList<>(); if(waveTypeParam.getType()==0){ @@ -467,7 +447,7 @@ public class ReportServiceImpl implements ReportService { } Page pageInfo = eventDetailService.page(new Page<>(waveTypeParam.getPageNum(), waveTypeParam.getPageSize()), new LambdaQueryWrapper() .in(RmpEventDetailPO::getMeasurementPointId, lineIds) - .eq(StrUtil.isNotBlank(waveTypeParam.getStatisticalType().getId()),RmpEventDetailPO::getEventType,waveTypeParam.getStatisticalType().getId()) + .eq(StrUtil.isNotBlank(voltageData.getId()),RmpEventDetailPO::getEventType,voltageData.getId()) .ge(StringUtils.isNotBlank(waveTypeParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime,DateUtil.beginOfDay(DateUtil.parse(waveTypeParam.getSearchBeginTime()))) .le(StringUtils.isNotBlank(waveTypeParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(waveTypeParam.getSearchEndTime()))) .orderByDesc(RmpEventDetailPO::getStartTime) @@ -481,45 +461,47 @@ public class ReportServiceImpl implements ReportService { result.add(vo); idlist.add(eventDetail.getLineId()); } - if(waveTypeParam.getType()==0){ - //pq系统 - HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); - List data = AreaInfo.getData(); - for (DetailVO detailVO : result) { - for (AreaLineInfoVO vo : data) { - if (vo.getLineId().equals(detailVO.getLineId())) { - BeanUtils.copyProperties(vo, detailVO); + if(CollUtil.isNotEmpty(idlist)){ + if(waveTypeParam.getType()==0){ + //pq系统 + HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); + List data = AreaInfo.getData(); + for (DetailVO detailVO : result) { + for (AreaLineInfoVO vo : data) { + if (vo.getLineId().equals(detailVO.getLineId())) { + BeanUtils.copyProperties(vo, detailVO); + } + } + } + + }else{ + //pms系统 + List monitorInfo = monitorClient.getMonitorList(idlist).getData(); + for (DetailVO detailVO : result) { + for (Monitor vo : monitorInfo) { + if (vo.getId().equals(detailVO.getLineId())) { + detailVO.setLineId(vo.getId()); + detailVO.setLineName(vo.getName()); + detailVO.setSubId(vo.getPowerrId()); + detailVO.setSubName(vo.getPowerrName()); + detailVO.setGdId(vo.getOrgId()); + detailVO.setGdName(vo.getOrgName()); + detailVO.setVoltageScale(vo.getVoltageLevel()); + } } } } - }else{ - //pms系统 - List monitorInfo = monitorClient.getMonitorList(idlist).getData(); + HttpResult> reason = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_TYPE.getName()); + List type = reason.getData(); for (DetailVO detailVO : result) { - for (Monitor vo : monitorInfo) { - if (vo.getId().equals(detailVO.getLineId())) { - detailVO.setLineId(vo.getId()); - detailVO.setLineName(vo.getName()); - detailVO.setSubId(vo.getPowerrId()); - detailVO.setSubName(vo.getPowerrName()); - detailVO.setGdId(vo.getOrgId()); - detailVO.setGdName(vo.getOrgName()); - detailVO.setVoltageScale(vo.getVoltageLevel()); + for (DictData dictData : type) { + if (dictData.getId().equals(detailVO.getAdvanceType())) { + detailVO.setAdvanceType(dictData.getName()); } } } } - - HttpResult> reason = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_TYPE.getName()); - List type = reason.getData(); - for (DetailVO detailVO : result) { - for (DictData dictData : type) { - if (dictData.getId().equals(detailVO.getAdvanceType())) { - detailVO.setAdvanceType(dictData.getName()); - } - } - } } Page page = BeanUtil.copyProperties(pageInfo,Page.class); page.setRecords(result); @@ -575,8 +557,9 @@ public class ReportServiceImpl implements ReportService { for (DetailVO vo : detailVO) { idlist.add(vo.getLineId()); } - HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); - List data = AreaInfo.getData(); + if(CollUtil.isNotEmpty(idlist)){ + HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); + List data = AreaInfo.getData(); /*for (DetailVO detailVO : result) { for (AreaLineInfoVO vo : data) { if (vo.getLineId().equals(detailVO.getLineId())) { @@ -589,13 +572,15 @@ public class ReportServiceImpl implements ReportService { } } }*/ - for (DetailVO v : detailVO) { - for (AreaLineInfoVO vo : data) { - if (vo.getLineId().equals(v.getLineId())) { - BeanUtils.copyProperties(vo, v); + for (DetailVO v : detailVO) { + for (AreaLineInfoVO vo : data) { + if (vo.getLineId().equals(v.getLineId())) { + BeanUtils.copyProperties(vo, v); + } } } } + Page page = BeanUtil.copyProperties(detail,Page.class); page.setRecords(detailVO); return page; @@ -656,8 +641,9 @@ public class ReportServiceImpl implements ReportService { for (DetailVO vo : detailVO) { idlist.add(vo.getLineId()); } - HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); - List data = AreaInfo.getData(); + if(CollUtil.isNotEmpty(idlist)){ + HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); + List data = AreaInfo.getData(); /*for (DetailVO detailVO : result) { for (AreaLineInfoVO vo : data) { if (vo.getLineId().equals(detailVO.getLineId())) { @@ -670,10 +656,11 @@ public class ReportServiceImpl implements ReportService { } } }*/ - for (DetailVO v : detailVO) { - for (AreaLineInfoVO vo : data) { - if (vo.getLineId().equals(v.getLineId())) { - BeanUtils.copyProperties(vo, v); + for (DetailVO v : detailVO) { + for (AreaLineInfoVO vo : data) { + if (vo.getLineId().equals(v.getLineId())) { + BeanUtils.copyProperties(vo, v); + } } } } @@ -737,8 +724,9 @@ public class ReportServiceImpl implements ReportService { for (DetailVO vo : detailVO) { idlist.add(vo.getLineId()); } - HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); - List data = AreaInfo.getData(); + if(CollUtil.isNotEmpty(idlist)){ + HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); + List data = AreaInfo.getData(); /* for (DetailVO detailVO : result) { for (AreaLineInfoVO vo : data) { if (vo.getLineId().equals(detailVO.getLineId())) { @@ -751,13 +739,15 @@ public class ReportServiceImpl implements ReportService { } } }*/ - for (DetailVO v : detailVO) { - for (AreaLineInfoVO vo : data) { - if (vo.getLineId().equals(v.getLineId())) { - BeanUtils.copyProperties(vo, v); + for (DetailVO v : detailVO) { + for (AreaLineInfoVO vo : data) { + if (vo.getLineId().equals(v.getLineId())) { + BeanUtils.copyProperties(vo, v); + } } } } + Page page = BeanUtil.copyProperties(detail,Page.class); page.setRecords(detailVO); return page; @@ -835,7 +825,7 @@ public class ReportServiceImpl implements ReportService { //表格操作 HSSFWorkbook sheets = new HSSFWorkbook(); - sheets.createSheet("sheet1"); + sheets.createSheet("暂态总体概况"); HSSFSheet sheetAt = sheets.getSheetAt(0); sheetAt.setColumnWidth(0, 24 * 256); sheetAt.setColumnWidth(1, 9 * 256); @@ -887,6 +877,7 @@ public class ReportServiceImpl implements ReportService { setCellStyle(r3Cell1, "在线", cellStyle); HSSFCell r3Cell2 = row3.createCell(2); setCellStyle(r3Cell2, "离线", cellStyle); + int titleSize = 4; HSSFCellStyle bodyStyle = sheets.createCellStyle(); bodyStyle.setAlignment(HorizontalAlignment.CENTER); @@ -896,6 +887,11 @@ public class ReportServiceImpl implements ReportService { bodyFont.setFontHeightInPoints((short) 9); bodyStyle.setFont(bodyFont); + sheet2(sheets,cellStyle,bodyStyle,businessParam); + sheet3(sheets,cellStyle,bodyStyle,businessParam); + sheet4(sheets,cellStyle,bodyStyle,businessParam); + + ArrayList online = new ArrayList<>(); ArrayList offline = new ArrayList<>(); ArrayList xdata = new ArrayList<>(); @@ -911,7 +907,7 @@ public class ReportServiceImpl implements ReportService { List up2 = new ArrayList<>(); List sag2 = new ArrayList<>(); List break2 = new ArrayList<>(); - +/* for (int i = 0; i < GereralList.size(); i++) { GeneralVO vo = GereralList.get(i); @@ -1076,9 +1072,341 @@ public class ReportServiceImpl implements ReportService { drawingPatriarch.createPicture(anchor1, sheets.addPicture(bytes2, HSSFWorkbook.PICTURE_TYPE_JPEG)); drawingPatriarch.createPicture(anchor2, sheets.addPicture(bytes3, HSSFWorkbook.PICTURE_TYPE_JPEG)); drawingPatriarch.createPicture(anchor3, sheets.addPicture(bytes4, HSSFWorkbook.PICTURE_TYPE_JPEG)); - +*/ PoiUtil.exportFileByWorkbook(sheets, "电压暂降周报.xlsx", response); } + public void sheet2(HSSFWorkbook sheets,HSSFCellStyle cellStyle, HSSFCellStyle bodyStyle ,DeviceInfoParam.BusinessParam businessParam){ + sheets.createSheet("暂态严重度统计"); + HSSFSheet sheetAt = sheets.getSheetAt(1); + sheetAt.setColumnWidth(0, 24 * 256); + sheetAt.setColumnWidth(1, 24 * 256); + sheetAt.setColumnWidth(2, 24 * 256); + sheetAt.setColumnWidth(3, 24 * 256); + sheetAt.setColumnWidth(4, 24 * 256); + sheetAt.setColumnWidth(5, 24 * 256); + sheetAt.setColumnWidth(6, 24 * 256); + sheetAt.setColumnWidth(7, 24 * 256); + sheetAt.setColumnWidth(8, 24 * 256); + sheetAt.setColumnWidth(9, 24 * 256); + sheetAt.addMergedRegion(new CellRangeAddress(0, 0, 0, 10)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 0, 0)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 1, 1)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 2, 2)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 3, 3)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 4, 4)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 5, 5)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 6, 6)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 7, 7)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 8, 8)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 9, 9)); + + HSSFRow title = sheetAt.createRow(0); + HSSFRow row1 = sheetAt.createRow(1); + + + HSSFCell titleCell = title.createCell(0); + setCellStyle(titleCell, "暂态事件严重度(前二十)", cellStyle); + HSSFCell r1Cell0 = row1.createCell(0); + HSSFCell r1Cell1 = row1.createCell(1); + HSSFCell r1Cell2 = row1.createCell(2); + HSSFCell r1Cell3 = row1.createCell(3); + HSSFCell r1Cell4 = row1.createCell(4); + HSSFCell r1Cell5 = row1.createCell(5); + HSSFCell r1Cell6 = row1.createCell(6); + HSSFCell r1Cell7 = row1.createCell(7); + HSSFCell r1Cell8 = row1.createCell(8); + HSSFCell r1Cell9 = row1.createCell(9); + setCellStyle(r1Cell0, "序号", cellStyle); + setCellStyle(r1Cell1, "暂态事件发生时刻", cellStyle); + setCellStyle(r1Cell2, "供电公司", cellStyle); + setCellStyle(r1Cell3, "变电站", cellStyle); + setCellStyle(r1Cell4, "监测点", cellStyle); + setCellStyle(r1Cell5, "监测点电压等级", cellStyle); + setCellStyle(r1Cell6, "干扰源类型", cellStyle); + setCellStyle(r1Cell7, "暂降(骤升)幅值(%)", cellStyle); + setCellStyle(r1Cell8, "持续时间(s)", cellStyle); + setCellStyle(r1Cell9, "暂态事件严重度", cellStyle); + List severity = getSeverity(businessParam); + for (int i = 0; i < severity.size(); i++) { + WaveTypeVO vo = severity.get(i); + + HSSFRow row = sheetAt.createRow(i + 3); + HSSFCell cell0 = row.createCell(0); + HSSFCell cell1 = row.createCell(1); + HSSFCell cell2 = row.createCell(2); + HSSFCell cell3 = row.createCell(3); + HSSFCell cell4 = row.createCell(4); + HSSFCell cell5 = row.createCell(5); + HSSFCell cell6 = row.createCell(6); + HSSFCell cell7 = row.createCell(7); + HSSFCell cell8 = row.createCell(8); + HSSFCell cell9 = row.createCell(9); + + cell0.setCellStyle(bodyStyle); + cell1.setCellStyle(bodyStyle); + cell2.setCellStyle(bodyStyle); + cell3.setCellStyle(bodyStyle); + cell4.setCellStyle(bodyStyle); + cell5.setCellStyle(bodyStyle); + cell6.setCellStyle(bodyStyle); + cell7.setCellStyle(bodyStyle); + cell8.setCellStyle(bodyStyle); + cell9.setCellStyle(bodyStyle); + + cell0.setCellValue(i+1); + cell1.setCellValue(vo.getStartTime()); + cell2.setCellValue(vo.getGdName()); + cell3.setCellValue(vo.getSubName()); + cell4.setCellValue(vo.getLineName()); + cell5.setCellValue(vo.getVoltageScale()); + cell6.setCellValue(vo.getLoadType()); + cell7.setCellValue(vo.getFeatureAmplitude()*100); + cell8.setCellValue(vo.getDuration()); + cell9.setCellValue(vo.getSeverity()); + } + + } + public void sheet3(HSSFWorkbook sheets,HSSFCellStyle cellStyle, HSSFCellStyle bodyStyle ,DeviceInfoParam.BusinessParam businessParam){ + sheets.createSheet("暂态原因统计"); + HSSFSheet sheetAt = sheets.getSheetAt(2); + sheetAt.setColumnWidth(0, 40 * 256); + sheetAt.setColumnWidth(1, 40 * 256); + sheetAt.setColumnWidth(2, 40 * 256); + sheetAt.setColumnWidth(3, 40 * 256); + sheetAt.setColumnWidth(4, 40 * 256); + sheetAt.setColumnWidth(5, 40 * 256); + sheetAt.addMergedRegion(new CellRangeAddress(0, 0, 0, 6)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 0, 0)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 1, 1)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 2, 2)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 3, 3)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 4, 4)); + sheetAt.addMergedRegion(new CellRangeAddress(1, 2, 5, 5)); + + HSSFRow title = sheetAt.createRow(0); + HSSFRow row1 = sheetAt.createRow(1); + + + HSSFCell titleCell = title.createCell(0); + setCellStyle(titleCell, "暂态原因统计表", cellStyle); + HSSFCell r1Cell0 = row1.createCell(0); + HSSFCell r1Cell1 = row1.createCell(1); + HSSFCell r1Cell2 = row1.createCell(2); + HSSFCell r1Cell3 = row1.createCell(3); + HSSFCell r1Cell4 = row1.createCell(4); + HSSFCell r1Cell5 = row1.createCell(5); + setCellStyle(r1Cell0, "暂态原因", cellStyle); + setCellStyle(r1Cell1, "短路故障", cellStyle); + setCellStyle(r1Cell2, "变压器激磁", cellStyle); + setCellStyle(r1Cell3, "电压扰动", cellStyle); + setCellStyle(r1Cell4, "大型感应电动机启动", cellStyle); + setCellStyle(r1Cell5, "其他", cellStyle); + + List reason = getReason(businessParam); + HSSFRow row = sheetAt.createRow(3); + HSSFCell cell0 = row.createCell(0); + cell0.setCellValue("次数"); + cell0.setCellStyle(bodyStyle); + + HSSFRow row2 = sheetAt.createRow(4); + HSSFCell cellR0 = row2.createCell(0); + cellR0.setCellValue("占比(%)"); + cellR0.setCellStyle(bodyStyle); + + for (ReasonsVO reasonsVO : reason) { + if(ObjectUtil.equals(reasonsVO.getReason(),"短路故障")) { + HSSFCell cell1 = row.createCell(1); + HSSFCell cellR1 = row2.createCell(1); + cell1.setCellStyle(bodyStyle); + cellR1.setCellStyle(bodyStyle); + cell1.setCellValue(reasonsVO.getTimes()); + cellR1.setCellValue(reasonsVO.getRate()); + } + if(ObjectUtil.equals(reasonsVO.getReason(),"变压器激磁")) { + HSSFCell cell1 = row.createCell(2); + HSSFCell cellR1 = row2.createCell(2); + cell1.setCellStyle(bodyStyle); + cellR1.setCellStyle(bodyStyle); + cell1.setCellValue(reasonsVO.getTimes()); + cellR1.setCellValue(reasonsVO.getRate()); + } + if(ObjectUtil.equals(reasonsVO.getReason(),"电压扰动")) { + HSSFCell cell1 = row.createCell(3); + HSSFCell cellR1 = row2.createCell(3); + cell1.setCellStyle(bodyStyle); + cellR1.setCellStyle(bodyStyle); + cell1.setCellValue(reasonsVO.getTimes()); + cellR1.setCellValue(reasonsVO.getRate()); + } + if(ObjectUtil.equals(reasonsVO.getReason(),"大型感应电动机启动")) { + HSSFCell cell1 = row.createCell(4); + HSSFCell cellR1 = row2.createCell(4); + cell1.setCellStyle(bodyStyle); + cellR1.setCellStyle(bodyStyle); + cell1.setCellValue(reasonsVO.getTimes()); + cellR1.setCellValue(reasonsVO.getRate()); + } + if(ObjectUtil.equals(reasonsVO.getReason(),"其他")) { + HSSFCell cell1 = row.createCell(5); + HSSFCell cellR1 = row2.createCell(5); + cell1.setCellStyle(bodyStyle); + cellR1.setCellStyle(bodyStyle); + cell1.setCellValue(reasonsVO.getTimes()); + cellR1.setCellValue(reasonsVO.getRate()); + } + } + //todo 缺少eaches + } + public void sheet4(HSSFWorkbook sheets,HSSFCellStyle cellStyle, HSSFCellStyle bodyStyle ,DeviceInfoParam.BusinessParam businessParam){ + sheets.createSheet("详细事件列表"); + HSSFSheet sheetAt = sheets.getSheetAt(3); + sheetAt.setColumnWidth(0, 24 * 256); + sheetAt.setColumnWidth(1, 24 * 256); + sheetAt.setColumnWidth(2, 24 * 256); + sheetAt.setColumnWidth(3, 24 * 256); + sheetAt.setColumnWidth(4, 24 * 256); + sheetAt.setColumnWidth(5, 24 * 256); + sheetAt.setColumnWidth(6, 24 * 256); + sheetAt.setColumnWidth(7, 24 * 256); + sheetAt.setColumnWidth(8, 24 * 256); + sheetAt.setColumnWidth(9, 24 * 256); + sheetAt.setColumnWidth(10, 24 * 256); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 2, 2)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 3, 3)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 4, 4)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 6, 6)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 7, 7)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 8, 8)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 9, 9)); + sheetAt.addMergedRegion(new CellRangeAddress(0, 1, 10, 10)); + + HSSFRow row1 = sheetAt.createRow(0); + + + HSSFCell r1Cell0 = row1.createCell(0); + HSSFCell r1Cell1 = row1.createCell(1); + HSSFCell r1Cell2 = row1.createCell(2); + HSSFCell r1Cell3 = row1.createCell(3); + HSSFCell r1Cell4 = row1.createCell(4); + HSSFCell r1Cell5 = row1.createCell(5); + HSSFCell r1Cell6 = row1.createCell(6); + HSSFCell r1Cell7 = row1.createCell(7); + HSSFCell r1Cell8 = row1.createCell(8); + HSSFCell r1Cell9 = row1.createCell(9); + HSSFCell r1Cell10 = row1.createCell(10); + setCellStyle(r1Cell0, "序号", cellStyle); + setCellStyle(r1Cell1, "暂态事件发生时刻", cellStyle); + setCellStyle(r1Cell2, "供电公司", cellStyle); + setCellStyle(r1Cell3, "变电站", cellStyle); + setCellStyle(r1Cell4, "监测点", cellStyle); + setCellStyle(r1Cell5, "监测点电压等级", cellStyle); + setCellStyle(r1Cell6, "干扰源类型", cellStyle); + setCellStyle(r1Cell7, "暂降(骤升)幅值(%)", cellStyle); + setCellStyle(r1Cell8, "持续时间(s)", cellStyle); + setCellStyle(r1Cell9, "暂态事件严重度", cellStyle); + setCellStyle(r1Cell10, "暂态类型(机器判断)", cellStyle); + List severity = sheetDetailed(businessParam); + for (int i = 0; i < severity.size(); i++) { + DetailVO vo = severity.get(i); + + HSSFRow row = sheetAt.createRow(i + 2); + HSSFCell cell0 = row.createCell(0); + HSSFCell cell1 = row.createCell(1); + HSSFCell cell2 = row.createCell(2); + HSSFCell cell3 = row.createCell(3); + HSSFCell cell4 = row.createCell(4); + HSSFCell cell5 = row.createCell(5); + HSSFCell cell6 = row.createCell(6); + HSSFCell cell7 = row.createCell(7); + HSSFCell cell8 = row.createCell(8); + HSSFCell cell9 = row.createCell(9); + HSSFCell cell10 = row.createCell(10); + + cell0.setCellStyle(bodyStyle); + cell1.setCellStyle(bodyStyle); + cell2.setCellStyle(bodyStyle); + cell3.setCellStyle(bodyStyle); + cell4.setCellStyle(bodyStyle); + cell5.setCellStyle(bodyStyle); + cell6.setCellStyle(bodyStyle); + cell7.setCellStyle(bodyStyle); + cell8.setCellStyle(bodyStyle); + cell9.setCellStyle(bodyStyle); + cell10.setCellStyle(bodyStyle); + + cell0.setCellValue(i+1); + cell1.setCellValue(vo.getStartTime()); + cell2.setCellValue(vo.getGdName()); + cell3.setCellValue(vo.getSubName()); + cell4.setCellValue(vo.getLineName()); + cell5.setCellValue(vo.getVoltageScale()); + cell6.setCellValue(vo.getLoadType()); + cell7.setCellValue(vo.getObjName()); + cell8.setCellValue(vo.getFeatureAmplitude()*100); + cell9.setCellValue(vo.getDuration()); + cell10.setCellValue(vo.getAdvanceType()); + } + + } + /** + * sheet 详细数据列表 + */ + private List sheetDetailed(DeviceInfoParam.BusinessParam businessParam){ + //获取暂降字典信息 + DictData voltageData = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); + if(ObjectUtil.isNull(voltageData)){ + throw new BusinessException(DeviceResponseEnum.DIC_GET_EMPTY); + } + List result = new ArrayList<>(); + //pq系统 + List deviceDTOList = generalDeviceInfoClient.getPracticalAllDeviceInfo(businessParam).getData(); + List lineIds =deviceDTOList.stream().flatMap(list -> list.getLineIndexes().stream()).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(lineIds)) { + throw new BusinessException(DeviceResponseEnum.DEPT_LINE_EMPTY); + } + List info = eventDetailService.list( new LambdaQueryWrapper() + .in(RmpEventDetailPO::getMeasurementPointId, lineIds) + .eq(StrUtil.isNotBlank(voltageData.getId()),RmpEventDetailPO::getEventType,voltageData.getId()) + .ge(StringUtils.isNotBlank(businessParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime,DateUtil.beginOfDay(DateUtil.parse(businessParam.getSearchBeginTime()))) + .le(StringUtils.isNotBlank(businessParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(businessParam.getSearchEndTime()))) + .orderByDesc(RmpEventDetailPO::getStartTime) + ); + if (CollectionUtil.isNotEmpty(info)) { + ArrayList idlist = new ArrayList<>(); + for (RmpEventDetailPO eventDetail : info) { + DetailVO vo = new DetailVO(); + vo.setStartTime( eventDetail.getStartTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_MS_PATTERN))); + BeanUtils.copyProperties(eventDetail, vo); + result.add(vo); + idlist.add(eventDetail.getLineId()); + } + if(CollUtil.isNotEmpty(idlist)){ + //pq系统 + HttpResult> AreaInfo = lineFeignClient.getBaseLineAreaInfo(idlist); + List data = AreaInfo.getData(); + for (DetailVO detailVO : result) { + for (AreaLineInfoVO vo : data) { + if (vo.getLineId().equals(detailVO.getLineId())) { + BeanUtils.copyProperties(vo, detailVO); + } + } + } + HttpResult> reason = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_TYPE.getName()); + List type = reason.getData(); + for (DetailVO detailVO : result) { + for (DictData dictData : type) { + if (dictData.getId().equals(detailVO.getAdvanceType())) { + detailVO.setAdvanceType(dictData.getName()); + } + } + } + } + } + return result; + } /** * 创建标题 @@ -1261,7 +1589,7 @@ public class ReportServiceImpl implements ReportService { EventDetail eventDetail = plot.get(j); String s = eventDetail.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); - insertRow(doc, table, centerParagraph, false, j + 1 + "", s, eventDetail.getFeatureAmplitude() + "", eventDetail.getDuration() / 1000.0 + "", eventDetail.getAdvanceType(), eventDetail.getAdvanceReason(), eventDetail.getSeverity() + ""); + insertRow(doc, table, centerParagraph, false, j + 1 + "", s, eventDetail.getFeatureAmplitude()*100 + "", eventDetail.getDuration() + "", eventDetail.getAdvanceType(), eventDetail.getAdvanceReason(), eventDetail.getSeverity() + ""); } i++; } @@ -1497,7 +1825,7 @@ public class ReportServiceImpl implements ReportService { ArrayList> list = new ArrayList<>(); for (EventDetail eventDetail : plot) { ArrayList doubles = new ArrayList<>(); - doubles.add(Double.parseDouble(eventDetail.getDuration() / 1000 + "")); + doubles.add(eventDetail.getDuration()); doubles.add(Double.parseDouble(String.valueOf(eventDetail.getFeatureAmplitude() * 100))); list.add(doubles); } diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/TransientServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/TransientServiceImpl.java index 84fcc2d03..1d429dd57 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/TransientServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/TransientServiceImpl.java @@ -322,10 +322,10 @@ public class TransientServiceImpl implements TransientService { .orderByDesc(RmpEventDetailPO::getStartTime); //暂态幅值 if (Objects.nonNull(transientParam.getEventValueMin())) { - wrapper.ge(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMin().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); + wrapper.ge(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMin()); } if (Objects.nonNull(transientParam.getEventValueMax())) { - wrapper.le(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMax().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); + wrapper.le(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMax()); } if (Objects.nonNull(transientParam.getPersistMin()) && Objects.nonNull(transientParam.getSeverityMax())) { wrapper.ge(RmpEventDetailPO::getDuration, transientParam.getPersistMin()).le(RmpEventDetailPO::getDuration, transientParam.getPersistMax()); diff --git a/pqs-event/event-boot/src/main/resources/templates/bar3.ftl b/pqs-event/event-boot/src/main/resources/templates/bar3.ftl index 98aed5a42..16a87cf49 100644 --- a/pqs-event/event-boot/src/main/resources/templates/bar3.ftl +++ b/pqs-event/event-boot/src/main/resources/templates/bar3.ftl @@ -3,16 +3,19 @@ backgroundColor: "#FFF", title: { text: "ITIC曲线", -x: "center", +left: "center", }, grid: { -left: "4%", -right: "2%", +top: "80px", +left: "40px", +right: "40px", bottom: "10%", }, legend: { data: ["上限", "下限", "可容忍事件", "不可容忍事件"], -x: "left", +top:"26px", +left: "0px", +bottom: "94%", }, color: ["#FF8C00", "#00BFFF", "green", "red"], xAxis: [ diff --git a/pqs-event/event-boot/src/main/resources/templates/bar4.ftl b/pqs-event/event-boot/src/main/resources/templates/bar4.ftl index 2f5e51274..6a83e4cd1 100644 --- a/pqs-event/event-boot/src/main/resources/templates/bar4.ftl +++ b/pqs-event/event-boot/src/main/resources/templates/bar4.ftl @@ -3,16 +3,19 @@ backgroundColor: "#fff", title: { text: "SEMI F47曲线", -x: "center", +left: "center", }, grid: { -left: "4%", -right: "5%", +top: "80px", +left: "40px", +right: "40px", bottom: "10%", }, legend: { data: ["边界线", "可容忍事件", "不可容忍事件"], -x: "left", +top:"26px", +left: "0px", +bottom: "94%", }, color: ["yellow", "green", "red"], xAxis: [ diff --git a/pqs-event/event-boot/src/main/resources/templates/bar5.ftl b/pqs-event/event-boot/src/main/resources/templates/bar5.ftl index 78085f1b7..5a568d160 100644 --- a/pqs-event/event-boot/src/main/resources/templates/bar5.ftl +++ b/pqs-event/event-boot/src/main/resources/templates/bar5.ftl @@ -30,10 +30,10 @@ xAxis: [ { type: "category", - boundaryGap: false, + boundaryGap: true, name: "暂降幅值", nameLocation: "center", - nameGap: 20, + nameGap: 40, nameTextStyle: { fontSize: 15, }, @@ -56,7 +56,7 @@ type: "value", name: "概率分布", nameLocation: "center", - nameGap: 40, + nameGap: 60, nameTextStyle: { fontSize: 15, }, @@ -68,7 +68,7 @@ type: "value", name: "占比", nameLocation: "center", - nameGap: 40, + nameGap: 20, nameTextStyle: { fontSize: 15, }, diff --git a/pqs-event/event-boot/src/main/resources/templates/bar6.ftl b/pqs-event/event-boot/src/main/resources/templates/bar6.ftl index fb9f17d14..8911f2ce6 100644 --- a/pqs-event/event-boot/src/main/resources/templates/bar6.ftl +++ b/pqs-event/event-boot/src/main/resources/templates/bar6.ftl @@ -19,10 +19,10 @@ bottom: "15%" xAxis: [ { type: "category", -boundaryGap: false, +boundaryGap: true, name: "暂降持续时间(s)", nameLocation: "center", -nameGap: 20, +nameGap: 40, nameTextStyle: { fontSize: 15, }, @@ -34,7 +34,7 @@ yAxis: [ type: "value", name: "概率分布", nameLocation: "center", -nameGap: 40, +nameGap: 60, nameTextStyle: { fontSize: 15, }, @@ -46,7 +46,7 @@ formatter: "{value} %", type: "value", name: "占比", nameLocation: "center", -nameGap: 40, +nameGap: 20, nameTextStyle: { fontSize: 15, }, diff --git a/pqs-event/event-boot/src/main/resources/templates/bar7.ftl b/pqs-event/event-boot/src/main/resources/templates/bar7.ftl index 9673c0d7d..8ae8d3640 100644 --- a/pqs-event/event-boot/src/main/resources/templates/bar7.ftl +++ b/pqs-event/event-boot/src/main/resources/templates/bar7.ftl @@ -11,9 +11,10 @@ data: ["暂降次数"], x: "left", }, grid: { -left: "3%", -bottom: "3%", -right: "7%", +top: "80px", +left: "40px", +right: "60px", +bottom:"20px", containLabel: true, }, xAxis: [ diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/PubUtils.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/PubUtils.java index 9d248672c..b601b7f85 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/PubUtils.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/utils/PubUtils.java @@ -190,7 +190,7 @@ public class PubUtils { } @SneakyThrows - public static List getIntervalDateTime(Integer startTime, Integer endTime, Integer dd) { + public static List getIntervalDateTime(Integer startTime,int beginDay, Integer endTime, Integer dd) { List list = new ArrayList<>(); Calendar calendar = Calendar.getInstance(Locale.CHINA); calendar.set(startTime, endTime - 1, 1); @@ -198,7 +198,7 @@ public class PubUtils { int year = calendar.get(Calendar.YEAR); //月份 int month = calendar.get(Calendar.MONTH) + 1; - for (int i = 1; i <= dd; i++) { + for (int i = beginDay; i <= dd; i++) { String date = null; if (month < 10 && i < 10) { date = year + "-0" + month + "-0" + i; diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java index b1ca62f4f..e1534afb8 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java @@ -95,7 +95,7 @@ public class HarmonicServiceImpl implements IHarmonicService { List childrenList = new ArrayList<>(); PollutionVO pollutionVO = new PollutionVO(); pollutionVO.setId(dept.getIndex()); - pollutionVO.setName(dept.getName()); + pollutionVO.setName(dept.getName()+"\n("+dept.getLineIndexes().size()+")"); dept.getSubIndexes().forEach(sub->{ List l1 = map.get(sub); PollutionVO children = new PollutionVO(); 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 213859c45..6ace633fb 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 @@ -195,7 +195,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl powers = temp.getPowerrIdList ( ); pollutionVO.setId (detpid); - pollutionVO.setName (name); + pollutionVO.setName (name+"\n("+temp.getMonitorIdList().size()+")"); pollutionVO.setData (-1.0); setData(harmonicPublicParam, pollutionType, searchBeginTime,harmonicPublicParam.getSearchEndTime(), pollutionVO, detpid); if(CollectionUtil.isNotEmpty(powers)) { @@ -242,7 +242,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl subPollutionVO = new ArrayList<>(); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java index 4629f090b..970a588a1 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java @@ -89,7 +89,7 @@ public class SteadyExceedRateServiceImpl implements SteadyExceedRateService { if (!CollectionUtils.isEmpty(deviceDataList)) { List> maps=new ArrayList<>(); for (GeneralDeviceDTO generalDeviceDTO: deviceDataList) { - type.add("("+generalDeviceDTO.getDeviceIndexes().size()+")"+generalDeviceDTO.getName()); + type.add("("+generalDeviceDTO.getLineIndexes().size()+")"+generalDeviceDTO.getName()); List lineIndexes = generalDeviceDTO.getLineIndexes(); Map collect=new HashMap<>(); @@ -129,15 +129,31 @@ public class SteadyExceedRateServiceImpl implements SteadyExceedRateService { case 1: //查询是天 List intervalTime = PubUtils.getIntervalTime(steadyExceedCensusParam.getSearchBeginTime(),steadyExceedCensusParam.getSearchEndTime()); - for (String interTime : intervalTime) { - String startTime = PublicDateUtil.getFisrtDayOfMonth(Integer.parseInt(interTime.substring(0, 4)), Integer.parseInt(interTime.substring(5))); + for (int j = 0; j < intervalTime.size(); j++) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); - Date dt = simpleDateFormat.parse(startTime); - Date dtDate = simpleDateFormat.parse(steadyExceedCensusParam.getSearchEndTime()); + Date dt ; + Date dtDate; + int beginDay; + if(j==0){ + dt= simpleDateFormat.parse(steadyExceedCensusParam.getSearchBeginTime()); + beginDay = Integer.valueOf(String.format("%td", dt)); + }else{ + String startTime = PublicDateUtil.getFisrtDayOfMonth(Integer.parseInt(intervalTime.get(j).substring(0, 4)), Integer.parseInt(intervalTime.get(j).substring(5))); + dt= simpleDateFormat.parse(startTime); + beginDay = Integer.valueOf(String.format("%td", dt)); + } + if(j==intervalTime.size()-1){ + dtDate= simpleDateFormat.parse(steadyExceedCensusParam.getSearchEndTime()); + }else{ + String startTime = PublicDateUtil.getLastDayOfMonth(Integer.parseInt(intervalTime.get(j).substring(0, 4)), Integer.parseInt(intervalTime.get(j).substring(5))); + dtDate= simpleDateFormat.parse(startTime); + } Integer year = Integer.valueOf(String.format("%tY", dt)); Integer mon = Integer.valueOf(String.format("%tm", dt)); + Integer day = Integer.valueOf(String.format("%td", dtDate)); - List dayTime = PubUtils.getIntervalDateTime(year, mon, day); + List dayTime = PubUtils.getIntervalDateTime(year,beginDay, mon, day); for (String s : dayTime) { List steadyExceedRate = new ArrayList<>(); for (int i = 0; i < tempIndex.size(); i++) { diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java index 1a5956507..bce223849 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java @@ -116,7 +116,7 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService { if (CollectionUtils.isEmpty(lineIndexes)) { continue; } - type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getDeviceIndexes().size()+")"); + type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getLineIndexes().size()+")"); List qualifiesRate = getQualifiesRate(lineIndexes, steadyCensusParam.getSearchBeginTime(), steadyCensusParam.getSearchEndTime()); SteadyQualifyVO dataMoreMonitorMoreDay = getDataMoreMonitorMoreDay(qualifiesRate); harmonicVoltage.add(dataMoreMonitorMoreDay.getHarmonicVoltage()); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/THDistortionServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/THDistortionServiceImpl.java index f602445d9..5032ab6d7 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/THDistortionServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/THDistortionServiceImpl.java @@ -101,7 +101,7 @@ public class THDistortionServiceImpl implements THDistortionService { if (CollectionUtils.isEmpty(lineIndexes)) { continue; } - type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getDeviceIndexes().size()+")"); + type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getLineIndexes().size()+")"); List condition = getCondition(lineIndexes, thDistortionCensusParam.getSearchBeginTime(), thDistortionCensusParam.getSearchEndTime()); single.add(roundHalfUp(condition.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159))); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java index e5e666ee1..261a777a7 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java @@ -88,7 +88,7 @@ public class TerminalServiceImpl implements TerminalService { if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())) { continue; } - type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getDeviceIndexes().size()+")"); + type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getLineIndexes().size()+")"); List deviceIndexes = generalDeviceDTO.getDeviceIndexes(); //根据终端查询在线率 List condition = getCondition(deviceIndexes, terminalCensusParam.getSearchBeginTime(), terminalCensusParam.getSearchEndTime()); diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java index bbc86747d..0fe09c142 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java @@ -347,6 +347,10 @@ public enum DicDataEnum { SET("定值","Set"), INSET("内部定值","InSet"), CTRL("控制","Ctrl"), + /** + * 暂降原因 + */ + SHORT_TROUBLE("短路故障", "Short_Trouble"), /** * 暂降类型 diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/excel/DataListener.java b/pqs-system/system-boot/src/main/java/com/njcn/system/excel/DataListener.java index aa6f78b46..3730e5687 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/excel/DataListener.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/excel/DataListener.java @@ -1,11 +1,13 @@ package com.njcn.system.excel; +import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; import com.njcn.system.mapper.UserLogMapper; import java.util.List; +import java.util.stream.Collectors; // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去 public class DataListener implements ReadListener { @@ -14,7 +16,7 @@ public class DataListener implements ReadListener { /** * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收 */ - private static final int BATCH_COUNT = 1000; + private static final int BATCH_COUNT = 5000; /** * 缓存的数据 */ @@ -23,14 +25,16 @@ public class DataListener implements ReadListener { * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 */ private UserLogMapper userLogMapper; + private List ids; /** * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 * * @param userLogMapper */ - public DataListener(UserLogMapper userLogMapper) { + public DataListener(UserLogMapper userLogMapper,List ids) { this.userLogMapper = userLogMapper; + this.ids = ids; } /** @@ -66,6 +70,11 @@ public class DataListener implements ReadListener { * 加上存储数据库 */ public void saveData() { - userLogMapper.insertBatch(cachedDataList); + //剔除数据库存在的数据 + List newCachedDataList = cachedDataList.stream().filter(x -> !ids.contains(x.getId())).collect(Collectors.toList()); + System.err.println(newCachedDataList.size()); + if(CollUtil.isNotEmpty(newCachedDataList)){ + userLogMapper.insertBatch(newCachedDataList); + } } } \ No newline at end of file diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AuditMapper.java b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AuditMapper.java index ac17afb72..7daf7ccee 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AuditMapper.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/AuditMapper.java @@ -45,4 +45,10 @@ public interface AuditMapper { */ List selectOperateType(); + /** + * 时间范围查询id集合 + * @return + */ + List getListIDs(@Param("startTime") String startTime, + @Param("endTime") String endTime); } diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AuditMapper.xml b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AuditMapper.xml index db8183d82..358ca8792 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AuditMapper.xml +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/mapper/mapping/AuditMapper.xml @@ -148,5 +148,18 @@ + \ No newline at end of file diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AuditServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AuditServiceImpl.java index 5001046e1..dfccf1434 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AuditServiceImpl.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/AuditServiceImpl.java @@ -29,7 +29,6 @@ import com.njcn.common.pojo.exception.BusinessException; import com.njcn.oss.constant.OssPath; import com.njcn.redis.utils.RedisUtil; import com.njcn.system.enums.AuditLogEnum; -import com.njcn.system.excel.DataListener; import com.njcn.system.excel.UserLogExcel; import com.njcn.system.mapper.AuditMapper; import com.njcn.system.mapper.UserLogMapper; @@ -267,8 +266,10 @@ public class AuditServiceImpl extends ServiceImpl implem public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }).sheet().doRead(); - // 执行批量插入 - saveLogsBatch(userLogs, 1500); + if(CollUtil.isNotEmpty(userLogs)){ + // 执行批量插入 + saveLogsBatch(userLogs, 1500); + } } catch (Exception e) { redisUtil.delete("recoverLogFile"); e.printStackTrace(); @@ -317,6 +318,8 @@ public class AuditServiceImpl extends ServiceImpl implem @Override public Page censusAuditLog(AuditParam auditParam) { + auditParam.setSearchBeginTime(DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())).toString()); + auditParam.setSearchEndTime(DateUtil.endOfDay(DateUtil.parse(auditParam.getSearchBeginTime())).toString()); //待分页数据总量 Page page = auditMapper.selectCensusAuditLog(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), auditParam); return page;