diff --git a/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/mapping/PqLineMapper.xml b/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/mapping/PqLineMapper.xml index abece248..2d68e329 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/mapping/PqLineMapper.xml +++ b/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/mapping/PqLineMapper.xml @@ -38,6 +38,7 @@ PQ_SUBVOLTAGE.name busBarName, pq_device.dev_index devId, pq_device.name devName, + pq_device.Status runFlag, PQ_SUBSTATION.sub_index stationId, PQ_SUBSTATION.name stationName from diff --git a/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/DeviceDTO.java b/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/DeviceDTO.java index 3d2d2500..8e4561a0 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/DeviceDTO.java +++ b/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/DeviceDTO.java @@ -23,5 +23,6 @@ public class DeviceDTO { private LocalDateTime updateTime; private String devFlag; private String ip; + //通讯状态 private Integer runFlag=0; } diff --git a/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/LedgerBaseInfoDTO.java b/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/LedgerBaseInfoDTO.java index a17f6439..04997b08 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/LedgerBaseInfoDTO.java +++ b/event_smart/src/main/java/com/njcn/gather/event/devcie/pojo/dto/LedgerBaseInfoDTO.java @@ -27,7 +27,8 @@ public class LedgerBaseInfoDTO { private Integer stationId; private String stationName; + //通讯状态 + private Integer runFlag=0; - private Integer runFlag=0;; } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/LargeScreenCountController.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/LargeScreenCountController.java index ce03431c..1247611a 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/LargeScreenCountController.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/LargeScreenCountController.java @@ -57,6 +57,15 @@ public class LargeScreenCountController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } @OperateInfo + @PostMapping("/alarmAnalysisDetail") + @ApiOperation("告警统计分析详情") + @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) + public HttpResult alarmAnalysisDetail(@RequestBody LargeScreenCountParam largeScreenCountParam) { + String methodDescribe = getMethodDescribe("alarmAnalysisDetail"); + AlarmAnalysisVO result = largeScreenCountService.alarmAnalysisDetail(largeScreenCountParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + @OperateInfo @PostMapping("/eventTrend") @ApiOperation("暂降事件趋势") @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/LargeScreenCountService.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/LargeScreenCountService.java index 48d047ad..1d80e410 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/LargeScreenCountService.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/LargeScreenCountService.java @@ -41,5 +41,5 @@ public interface LargeScreenCountService { boolean msgHandle(MessageEventFeedbackParam messageEventFeedbackParam); - + AlarmAnalysisVO alarmAnalysisDetail(LargeScreenCountParam largeScreenCountParam); } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventInfoService.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventInfoService.java index 0508a4d6..2cb0d588 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventInfoService.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventInfoService.java @@ -1,7 +1,12 @@ package com.njcn.gather.event.transientes.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.event.devcie.pojo.dto.LedgerBaseInfoDTO; import com.njcn.gather.event.transientes.pojo.po.MsgEventInfo; +import java.util.List; + public interface MsgEventInfoService extends IService { + + List getMsgByIds(List ids); } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/LargeScreenCountServiceImpl.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/LargeScreenCountServiceImpl.java index 8372d9d5..9c8a7457 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/LargeScreenCountServiceImpl.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/LargeScreenCountServiceImpl.java @@ -125,7 +125,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { long runDevCount = runDevList.stream().count(); List runSubList = list.stream().map(PqDevice::getSubIndex).distinct().collect(Collectors.toList()); long runSubCount = runSubList.stream().count(); - List runLineList = pqLineList.stream().filter(temp->runDevList.contains(temp.getDevIndex())).map(PqLine::getLineIndex).collect(Collectors.toList()); + List ledgerBaseInfoDTOS = pqLineService.getBaseLineInfo(allLineIds); + List runLineList = ledgerBaseInfoDTOS.stream().filter(temp->Objects.equals(temp.getRunFlag(),1)).map(LedgerBaseInfoDTO::getLineId).collect(Collectors.toList()); long runLineCount = runLineList.stream().count(); @@ -138,7 +139,6 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { ledgerCountVO.setRunSubCount(runSubCount); ledgerCountVO.setRunLineCount(runLineCount); - List ledgerBaseInfoDTOS = pqLineService.getBaseLineInfo(allLineIds); ledgerBaseInfoDTOS.stream().forEach(temp->temp.setRunFlag(runLineList.contains(temp.getLineId())?1:0)); ledgerCountVO.setAllLineList(ledgerBaseInfoDTOS); List deviceDTOS = pqDeviceService.queryListByIds(devList); @@ -205,25 +205,12 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { Integer eventCount = eventdetails.size(); // 告警 List aLarmEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() < 0.5).collect(Collectors.toList()); - aLarmEvent.forEach(temp->temp.setEventSeverity(1)); // 预警 List warnEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() >= 0.5&& temp.getEventvalue() <0.9).collect(Collectors.toList()); - warnEvent.forEach(temp->temp.setEventSeverity(2)); List eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()); //通知 - List msgEventInfoList = new ArrayList<>(); - if(!CollectionUtils.isEmpty(eventIds)){ - if(eventIds.size()>1000){ - List> listEven = CollUtil.split(eventIds,1000); - for(List pList: listEven){ - List temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,pList).list(); - msgEventInfoList.addAll(temp); - } - }else { - List temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,eventIds).list(); - msgEventInfoList.addAll(temp); - } - } + + List msgEventInfoList =msgEventInfoService.getMsgByIds(eventIds); msgEventInfoList = msgEventInfoList.stream().sorted(Comparator.comparing(MsgEventInfo::getSendTime,Comparator.reverseOrder())).collect(Collectors.toList()); @@ -247,14 +234,14 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { alarmAnalysisVO.setLookWarnCount(lookWarnCount); alarmAnalysisVO.setLookNoticeCount(lookNoticeCount); - - alarmAnalysisVO.setEventdetails(change(eventdetails,msgEventInfoList)); - alarmAnalysisVO.setALarmEvent(change(aLarmEvent,msgEventInfoList)); - alarmAnalysisVO.setWarnEvent(change(warnEvent,msgEventInfoList)); - alarmAnalysisVO.setNoticeEvent(msgEventInfoList); - alarmAnalysisVO.setLookALarmEvent(change(lookALarmEvent,msgEventInfoList)); - alarmAnalysisVO.setLookWarnEvent(change(lookWarnEvent,msgEventInfoList)); - alarmAnalysisVO.setLookNoticeEvent(handleMsg); +// +// alarmAnalysisVO.setEventdetails(change(eventdetails,msgEventInfoList)); +// alarmAnalysisVO.setALarmEvent(change(aLarmEvent,msgEventInfoList)); +// alarmAnalysisVO.setWarnEvent(change(warnEvent,msgEventInfoList)); +// alarmAnalysisVO.setNoticeEvent(msgEventInfoList); +// alarmAnalysisVO.setLookALarmEvent(change(lookALarmEvent,msgEventInfoList)); +// alarmAnalysisVO.setLookWarnEvent(change(lookWarnEvent,msgEventInfoList)); +// alarmAnalysisVO.setLookNoticeEvent(handleMsg); @@ -314,20 +301,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { if (Objects.equals(largeScreenCountParam.getEventtype(), 1)) { List eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()); //通知 - List msgEventInfoList = new ArrayList<>(); - if(!CollectionUtils.isEmpty(eventIds)){ - if(eventIds.size()>1000){ - List> listEven = CollUtil.split(eventIds,1000); - for(List pList: listEven){ - List temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,pList).list(); - msgEventInfoList.addAll(temp); - } - }else { - List temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,eventIds).list(); - msgEventInfoList.addAll(temp); - } - - } + List msgEventInfoList =msgEventInfoService.getMsgByIds(eventIds); // 使用 for 循环处理日期范围 for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { EventTrendVO eventTrendVO = new EventTrendVO(); @@ -613,7 +587,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List eveIdndex = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()); List temp = new ArrayList<>(); if(!CollectionUtils.isEmpty(eveIdndex)){ - temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,eveIdndex).list(); + temp =msgEventInfoService.getMsgByIds(eveIdndex); + } List change = change(eventdetails,temp); @@ -670,16 +645,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { } List eventIds = allEventList.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()); - if (eventIds.size() > 1000) { - List> listEven = CollUtil.split(eventIds, 1000); - for (List pList : listEven) { - List msgEventInfoList = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex, pList).list(); - result.addAll(msgEventInfoList); - } - } else { - List msgEventInfoList = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex, eventIds).list(); - result.addAll(msgEventInfoList); - } + result =msgEventInfoService.getMsgByIds(eventIds); result = result.stream().sorted(Comparator.comparing(MsgEventInfo::getSendTime, Comparator.reverseOrder())).collect(Collectors.toList()); if (result.size() > 200) { result = result.subList(0, 200); @@ -719,6 +685,103 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { return true; } + @Override + public AlarmAnalysisVO alarmAnalysisDetail(LargeScreenCountParam largeScreenCountParam) { + AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO(); + //起始时间 + LocalDateTime startTime; + //结束时间 + LocalDateTime endTime; + if (largeScreenCountParam.getType() == 3) { + //起始时间 + startTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.beginOfMonth(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER); + //结束时间 + endTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.endOfMonth(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER); + } else if (largeScreenCountParam.getType() == 4) { + //起始时间 + startTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.beginOfWeek(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER); + //结束时间 + endTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.endOfWeek(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER); + } else { + throw new BusinessException("统计类型有误类型"); + } + + //根据用户获取当前部门及子部门id + List deptAndChildren = pqsDeptsService.findDeptAndChildren(largeScreenCountParam.getDeptId()); + //获取对应监测点id + List deptslines = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getDeptsIndex, deptAndChildren).eq(PqsDeptsline::getSystype, sysTypeZt).list(); + List deptslineIds = deptslines.stream().map(PqsDeptsline::getLineIndex).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(deptslineIds)) { + throw new BusinessException("部门下暂无监测点"); + + } + List eventdetails = new ArrayList<>(); + if(deptslineIds.size()>1000){ + List> listIds = CollUtil.split(deptslineIds,1000); + for(List itemIds : listIds){ + List temp = pqsEventdetailService.lambdaQuery() + .between(PqsEventdetail::getTimeid,startTime, endTime) + .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .in(PqsEventdetail::getLineid,listIds) + .orderByDesc(PqsEventdetail::getTimeid).list() + ; + eventdetails.addAll(temp); + } + }else { + List temp = pqsEventdetailService.lambdaQuery() + .between(PqsEventdetail::getTimeid, startTime, endTime) + .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .in(PqsEventdetail::getLineid,deptslineIds) + .orderByDesc(PqsEventdetail::getTimeid).list(); + eventdetails.addAll(temp); + } + + Integer eventCount = eventdetails.size(); + // 告警 + List aLarmEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() < 0.5).collect(Collectors.toList()); + // 预警 + List warnEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() >= 0.5&& temp.getEventvalue() <0.9).collect(Collectors.toList()); + List eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()); + //通知 + List msgEventInfoList =msgEventInfoService.getMsgByIds(eventIds); + + msgEventInfoList = msgEventInfoList.stream().sorted(Comparator.comparing(MsgEventInfo::getSendTime,Comparator.reverseOrder())).collect(Collectors.toList()); + + + + List lookALarmEvent = aLarmEvent.stream().filter(temp ->Objects.equals(temp.getLookFlag(),1 )).collect(Collectors.toList()); + List lookWarnEvent = warnEvent.stream().filter(temp ->Objects.equals(temp.getLookFlag(),1 ) ).collect(Collectors.toList()); + List handleMsg = msgEventInfoList.stream().filter(temp -> Objects.equals(temp.getIsHandle(), 1)).collect(Collectors.toList()); + + Integer aLarmCount =aLarmEvent.size(); + Integer warnCount =warnEvent.size(); + Integer noticeCount =msgEventInfoList.size(); + Integer lookALarmCount =lookALarmEvent.size(); + Integer lookWarnCount =lookWarnEvent.size(); + Integer lookNoticeCount =handleMsg.size(); + + alarmAnalysisVO.setEventCount(eventCount); + alarmAnalysisVO.setALarmCount(aLarmCount); + alarmAnalysisVO.setWarnCount(warnCount); + alarmAnalysisVO.setNoticeCount(noticeCount); + alarmAnalysisVO.setLookALarmCount(lookALarmCount); + alarmAnalysisVO.setLookWarnCount(lookWarnCount); + alarmAnalysisVO.setLookNoticeCount(lookNoticeCount); + + + alarmAnalysisVO.setEventdetails(change(eventdetails,msgEventInfoList)); + alarmAnalysisVO.setALarmEvent(change(aLarmEvent,msgEventInfoList)); + alarmAnalysisVO.setWarnEvent(change(warnEvent,msgEventInfoList)); + alarmAnalysisVO.setNoticeEvent(msgEventInfoList); + alarmAnalysisVO.setLookALarmEvent(change(lookALarmEvent,msgEventInfoList)); + alarmAnalysisVO.setLookWarnEvent(change(lookWarnEvent,msgEventInfoList)); + alarmAnalysisVO.setLookNoticeEvent(handleMsg); + + + + return alarmAnalysisVO; + } + private List change(List list,List handleMsg){ List result = new ArrayList<>(); if(CollectionUtils.isEmpty(list)){ @@ -740,10 +803,11 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { eventDetailVO.setEventvalue(temp.getEventvalue()); eventDetailVO.setLookFlag(temp.getLookFlag()); eventDetailVO.setNoticeFlag(temp.getNoticeFlag()); - if(Objects.nonNull(temp.getEventSeverity())){ - eventDetailVO.setEventSeverity(temp.getEventSeverity()); + if( temp.getEventvalue()< 0.5){ + eventDetailVO.setEventSeverity(1); + }else{ + eventDetailVO.setEventSeverity(2); } - eventDetailVO.setMsgEventInfoSize(handleMsg.stream().filter(msg->Objects.equals(msg.getEventIndex(),temp.getEventdetailIndex())).count()); if(ledgerBaseInfoDTOMap.containsKey(temp.getLineid())){ LedgerBaseInfoDTO ledgerBaseInfoDTO = ledgerBaseInfoDTOMap.get(temp.getLineid()); diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventInfoServiceImpl.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventInfoServiceImpl.java index 07839854..170b640b 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventInfoServiceImpl.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventInfoServiceImpl.java @@ -1,10 +1,15 @@ package com.njcn.gather.event.transientes.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.gather.event.transientes.mapper.MsgEventInfoMapper; import com.njcn.gather.event.transientes.pojo.po.MsgEventInfo; import com.njcn.gather.event.transientes.service.MsgEventInfoService; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; /** * @Author: cdf @@ -13,4 +18,22 @@ import org.springframework.stereotype.Service; */ @Service public class MsgEventInfoServiceImpl extends ServiceImpl implements MsgEventInfoService { + @Override + public List getMsgByIds(List ids) { + //通知 + List msgEventInfoList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(ids)){ + if(ids.size()>1000){ + List> listEven = CollUtil.split(ids,1000); + for(List pList: listEven){ + List temp = this.lambdaQuery().in(MsgEventInfo::getEventIndex,pList).list(); + msgEventInfoList.addAll(temp); + } + }else { + List temp = this.lambdaQuery().in(MsgEventInfo::getEventIndex,ids).list(); + msgEventInfoList.addAll(temp); + } + } + return msgEventInfoList; + } }