diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/AlarmAnalysisVO.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/AlarmAnalysisVO.java index 0cec7d73..a9a8e1c9 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/AlarmAnalysisVO.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/AlarmAnalysisVO.java @@ -1,5 +1,6 @@ package com.njcn.gather.event.transientes.pojo.vo; +import com.njcn.gather.event.transientes.pojo.po.MsgEventInfo; import com.njcn.gather.event.transientes.pojo.po.PqsEventdetail; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -34,8 +35,8 @@ public class AlarmAnalysisVO { List eventdetails; List aLarmEvent; List warnEvent; - List noticeEvent; + List noticeEvent; List lookALarmEvent; List lookWarnEvent; - List lookNoticeEvent; + List lookNoticeEvent; } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/PqsUserService.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/PqsUserService.java new file mode 100644 index 00000000..d901ad34 --- /dev/null +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/PqsUserService.java @@ -0,0 +1,15 @@ +package com.njcn.gather.event.transientes.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.event.transientes.pojo.po.PqsDepts; +import com.njcn.gather.event.transientes.pojo.po.PqsUser; + +/** + * Description: + * Date: 2025/06/27 上午 9:45【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface PqsUserService extends IService { +} 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 f855f5a0..13a66824 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 @@ -37,6 +37,7 @@ import com.njcn.gather.event.transientes.service.*; import com.njcn.gather.event.devcie.service.PqsDeptslineService; import com.njcn.gather.event.transientes.utils.JwtUtil; import com.njcn.web.factory.PageFactory; +import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -75,6 +76,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { private final CommGeneralService commGeneralService; private final PqsUsersetService pqsUsersetService; + private final PqsUserService pqsUserService; private final PqLinedetailMapper pqLinedetailMapper; @Value("${SYS_TYPE_ZT}") private String sysTypeZt; @@ -91,7 +93,17 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { throw new BusinessException("部门下暂无监测点"); } - List pqLineList = pqLineService.lambdaQuery().in(PqLine::getLineIndex, deptslineIds).list(); + List pqLineList = new ArrayList<>(); + if(deptslineIds.size()>1000){ + List> listIds = CollUtil.split(deptslineIds,1000); + for(List itemIds : listIds){ + List temp =pqLineService.lambdaQuery().in(PqLine::getLineIndex, listIds).list(); + pqLineList.addAll(temp); + } + }else { + List temp = pqLineService.lambdaQuery().in(PqLine::getLineIndex, deptslineIds).list(); + pqLineList.addAll(temp); + } //统计总数 long allSubCount = pqLineList.stream().map(PqLine::getSubIndex).distinct().count(); List devList = pqLineList.stream().map(PqLine::getDevIndex).distinct().collect(Collectors.toList()); @@ -133,27 +145,53 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { throw new BusinessException("部门下暂无监测点"); } - List eventdetails = pqsEventdetailService.lambdaQuery() - .between(PqsEventdetail::getTimeid, LocalDateTimeUtil.parse(startTime, DatePattern.NORM_DATETIME_FORMATTER), LocalDateTimeUtil.parse(endTime, DatePattern.NORM_DATETIME_FORMATTER)) - .in(PqsEventdetail::getLineid, deptslineIds).list(); + 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, LocalDateTimeUtil.parse(startTime,DatePattern.NORM_DATETIME_FORMATTER), LocalDateTimeUtil.parse(endTime,DatePattern.NORM_DATETIME_FORMATTER)) + .in(PqsEventdetail::getLineid,listIds).list(); + eventdetails.addAll(temp); + } + }else { + List temp = pqsEventdetailService.lambdaQuery() + .between(PqsEventdetail::getTimeid, LocalDateTimeUtil.parse(startTime,DatePattern.NORM_DATETIME_FORMATTER), LocalDateTimeUtil.parse(endTime,DatePattern.NORM_DATETIME_FORMATTER)) + .in(PqsEventdetail::getLineid,deptslineIds).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 noticeEvent = eventdetails.stream().filter(temp -> Objects.equals(temp.getNoticeFlag(), 1)).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 = new ArrayList<>(); + 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 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 lookNoticeEvent = noticeEvent.stream().filter(temp -> Objects.equals(temp.getLookFlag(), 1)).collect(Collectors.toList()); - Integer aLarmCount = aLarmEvent.size(); - Integer warnCount = warnEvent.size(); - Integer noticeCount = noticeEvent.size(); - Integer lookALarmCount = lookALarmEvent.size(); - Integer lookWarnCount = lookWarnEvent.size(); - Integer lookNoticeCount = lookNoticeEvent.size(); + 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); @@ -167,10 +205,10 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { alarmAnalysisVO.setEventdetails(eventdetails); alarmAnalysisVO.setALarmEvent(aLarmEvent); alarmAnalysisVO.setWarnEvent(warnEvent); - alarmAnalysisVO.setNoticeEvent(noticeEvent); + alarmAnalysisVO.setNoticeEvent(msgEventInfoList); alarmAnalysisVO.setLookALarmEvent(lookALarmEvent); alarmAnalysisVO.setLookWarnEvent(lookWarnEvent); - alarmAnalysisVO.setLookNoticeEvent(lookNoticeEvent); + alarmAnalysisVO.setLookNoticeEvent(handleMsg); @@ -205,32 +243,63 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { throw new BusinessException("部门下暂无监测点"); } - List eventdetails = new ArrayList<>(); - if (Objects.equals(largeScreenCountParam.getEventtype(), 1)) { - eventdetails = pqsEventdetailService.lambdaQuery() - .between(PqsEventdetail::getTimeid, startTime, endTime) - .in(PqsEventdetail::getLineid, deptslineIds) - .eq(PqsEventdetail::getNoticeFlag, largeScreenCountParam.getEventtype()).list(); - } else { - eventdetails = pqsEventdetailService.lambdaQuery() - .between(PqsEventdetail::getTimeid, startTime, endTime) - .in(PqsEventdetail::getLineid, deptslineIds) - .and(w -> w.eq(PqsEventdetail::getNoticeFlag, 0).or().isNull(PqsEventdetail::getNoticeFlag)).list(); - } LocalDate startDate = LocalDate.parse(DateUtil.format(startTime, DatePattern.NORM_DATE_PATTERN)); LocalDate endDate = LocalDate.parse(DateUtil.format(endTime, DatePattern.NORM_DATE_PATTERN)); - - List dateList = new ArrayList<>(); - - // 使用 for 循环处理日期范围 - for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { - EventTrendVO eventTrendVO = new EventTrendVO(); - eventTrendVO.setLocalDate(date); - LocalDate finalDate = date; - List collect = eventdetails.stream().filter(temp -> Objects.equals(DateUtil.format(temp.getTimeid(), DatePattern.NORM_DATE_PATTERN), DateUtil.format(finalDate.atStartOfDay(), DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList()); - eventTrendVO.setEventCount(collect.size()); - eventTrendVOList.add(eventTrendVO); + 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::getLineid,listIds).list(); + eventdetails.addAll(temp); + } + }else { + List temp = pqsEventdetailService.lambdaQuery() + .between(PqsEventdetail::getTimeid, startTime, endTime) + .in(PqsEventdetail::getLineid,deptslineIds).list(); + eventdetails.addAll(temp); } + + if (Objects.equals(largeScreenCountParam.getEventtype(), 1)) { + List eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()); + //通知 + List msgEventInfoList = new ArrayList<>(); + 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); + } + // 使用 for 循环处理日期范围 + for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { + EventTrendVO eventTrendVO = new EventTrendVO(); + eventTrendVO.setLocalDate(date); + LocalDate finalDate = date; + List collect = msgEventInfoList.stream().filter(temp -> Objects.equals(DateUtil.format(temp.getSendTime(), DatePattern.NORM_DATE_PATTERN), DateUtil.format(finalDate.atStartOfDay(), DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList()); + eventTrendVO.setEventCount(collect.size()); + eventTrendVOList.add(eventTrendVO); + } + + } else { + + // 使用 for 循环处理日期范围 + for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { + EventTrendVO eventTrendVO = new EventTrendVO(); + eventTrendVO.setLocalDate(date); + LocalDate finalDate = date; + List collect = eventdetails.stream().filter(temp -> Objects.equals(DateUtil.format(temp.getTimeid(), DatePattern.NORM_DATE_PATTERN), DateUtil.format(finalDate.atStartOfDay(), DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList()); + eventTrendVO.setEventCount(collect.size()); + eventTrendVOList.add(eventTrendVO); + } + } + + + return eventTrendVOList; } @@ -255,31 +324,44 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { Map ledgerBaseInfoDTOMap = pqLineList.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId, Function.identity())); QueryWrapper queryWrapper = new QueryWrapper<>(); - if (Objects.equals(largeScreenCountParam.getEventtype(), 1)) { + if (deptslineIds.size()>1000) { + ; + List> idPartitions = CollUtil.split(deptslineIds,1000); + queryWrapper.lambda() .between(PqsEventdetail::getTimeid, startTime, endTime) - .in(PqsEventdetail::getLineid, deptslineIds) - .eq(PqsEventdetail::getNoticeFlag, largeScreenCountParam.getEventtype()) - .orderByAsc(PqsEventdetail::getLookFlag) - .orderByDesc(PqsEventdetail::getTimeid); + .and(ew->{ + for(List pList: idPartitions){ + ew.or(w->w.in(PqsEventdetail::getLineid, pList)); + } + }).orderByAsc(PqsEventdetail::getLookFlag) + .orderByDesc(PqsEventdetail::getTimeid); + } else { queryWrapper.lambda() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getLineid, deptslineIds) - .and(w -> w.eq(PqsEventdetail::getNoticeFlag, 0).or().isNull(PqsEventdetail::getNoticeFlag)) .orderByAsc(PqsEventdetail::getLookFlag) .orderByDesc(PqsEventdetail::getTimeid); } //查询需要发送短息处理的部门反推监测点 - List pqsUserSetList = pqsUsersetService.lambdaQuery().eq(PqsUserSet::getIsNotice, 1).list(); - List noticeDept = pqsUserSetList.stream().map(temp -> { - return pqsDeptsService.findDeptAndChildren(temp.getDeptsIndex()); - }).flatMap(Collection::stream).distinct().collect(Collectors.toList()); - //获取对应监测点id - List noticeLine = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getDeptsIndex, noticeDept).eq(PqsDeptsline::getSystype, sysTypeZt).list(); - List noticeLineIds = deptslines.stream().map(PqsDeptsline::getLineIndex).collect(Collectors.toList()); + + List noticeLineIds = new ArrayList<>(); + List pqsUserList = pqsUserService.lambdaQuery().eq(PqsUser::getState, 1).list(); + if(!CollectionUtils.isEmpty(pqsUserList)){ + List collect = pqsUserList.stream().map(PqsUser::getUserIndex).collect(Collectors.toList()); + List pqsUserSetList = pqsUsersetService.lambdaQuery().eq(PqsUserSet::getIsNotice, 1).in(PqsUserSet::getUserIndex,collect).list(); + List noticeDept = pqsUserSetList.stream().map(temp -> { + return pqsDeptsService.findDeptAndChildren(temp.getDeptsIndex()); + }).flatMap(Collection::stream).distinct().collect(Collectors.toList()); + //获取对应监测点id + List noticeLine = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getDeptsIndex, noticeDept).eq(PqsDeptsline::getSystype, sysTypeZt).list(); + noticeLineIds = deptslines.stream().map(PqsDeptsline::getLineIndex).collect(Collectors.toList()); + } + IPage list = pqsEventdetailService.getBaseMapper().selectPage(pqsEventdetailPage,queryWrapper); + List finalNoticeLineIds = noticeLineIds; List collect = list.getRecords().stream().map(temp -> { EventDetailVO eventDetailVO = new EventDetailVO(); eventDetailVO.setEventdetail_index(temp.getEventdetailIndex()); @@ -296,7 +378,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { eventDetailVO.setPointname(ledgerBaseInfoDTO.getLineName()); eventDetailVO.setBdname(ledgerBaseInfoDTO.getStationName()); } - eventDetailVO.setNeedDealFlag(noticeLineIds.contains(temp.getLineid())?1:0); + eventDetailVO.setNeedDealFlag(finalNoticeLineIds.contains(temp.getLineid())?1:0); return eventDetailVO; }).collect(Collectors.toList()); Page returnpage = new Page<>(largeScreenCountParam.getPageNum(), largeScreenCountParam.getPageSize()); @@ -371,6 +453,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { LocalDateTime endTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.endOfMonth(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER); //根据用户获取当前部门及子部门id List deptAndChildren = pqsDeptsService.findDeptAndChildren(largeScreenCountParam.getDeptId()); + deptAndChildren.remove(largeScreenCountParam.getDeptId()); //获取对应监测点id List deptslines = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getDeptsIndex, deptAndChildren).eq(PqsDeptsline::getSystype, sysTypeZt).list(); if (CollectionUtils.isEmpty(deptslines)) { diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/PqsUserServiceImpl.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/PqsUserServiceImpl.java new file mode 100644 index 00000000..0e0946e4 --- /dev/null +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/PqsUserServiceImpl.java @@ -0,0 +1,27 @@ +package com.njcn.gather.event.transientes.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.gather.event.transientes.mapper.PqsEventdetailMapper; +import com.njcn.gather.event.transientes.mapper.PqsUserMapper; +import com.njcn.gather.event.transientes.pojo.po.PqsEventdetail; +import com.njcn.gather.event.transientes.pojo.po.PqsUser; +import com.njcn.gather.event.transientes.service.PqsUserService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Function; + +/** + * Description: + * Date: 2025/06/27 上午 9:46【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +public class PqsUserServiceImpl extends ServiceImpl implements PqsUserService { + +}