diff --git a/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/PqLineMapper.java b/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/PqLineMapper.java index e0c156a4..c6c10758 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/PqLineMapper.java +++ b/event_smart/src/main/java/com/njcn/gather/event/devcie/mapper/PqLineMapper.java @@ -20,7 +20,7 @@ public interface PqLineMapper extends BaseMapper { List getBaseLineInfo(@Param("ids")List ids); - List getBaseLedger(@Param("ids")List ids); + List getBaseLedger(@Param("ids")List ids,@Param("searchValue")String searchValue); List getRunMonitorIds(@Param("ids")List ids); 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 0110d1f5..f8a35416 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 @@ -80,11 +80,19 @@ where 1=1 inner JOIN pq_device on PQ_SUBVOLTAGE.DEV_INDEX = pq_device.DEV_INDEX inner JOIN PQ_SUBSTATION on pq_device.SUB_INDEX = PQ_SUBSTATION.SUB_INDEX inner JOIN PQ_GDINFORMATION on pq_line.GD_INDEX =PQ_GDINFORMATION.GD_INDEX - where 1=1 + and pq_line.line_index in #{item} + + and ( + PQ_GDINFORMATION.name LIKE '%' || #{searchValue} || '%' + or PQ_SUBSTATION.name LIKE '%' || #{searchValue} || '%' + or pq_line.name LIKE '%' || #{searchValue} || '%' + ) + + + select distinct b.line_index,a.CUSTOMER_NAME userName + from pq_user_ledger a inner join PQ_USER_LINE_ASS b on a.id = b.user_index + where b.line_index in + + #{item} + + + and a.CUSTOMER_NAME LIKE '%' || #{searchValue} || '%' + + + + diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/param/LargeScreenCountParam.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/param/LargeScreenCountParam.java index ed79d870..d55287c2 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/param/LargeScreenCountParam.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/param/LargeScreenCountParam.java @@ -47,5 +47,17 @@ public class LargeScreenCountParam extends BaseParam { private Integer gdIndex; + private Integer bdId; + private String devName; + + private Float eventValueMin; + + private Float eventValueMax; + + private Float eventDurationMin; + + private Float eventDurationMax; + + } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MsgEventConfig.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MsgEventConfig.java index 2159e399..89b1b5ae 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MsgEventConfig.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MsgEventConfig.java @@ -12,6 +12,7 @@ import java.io.Serializable; import java.util.List; import lombok.Data; +import lombok.ToString; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; @@ -22,6 +23,7 @@ import javax.validation.constraints.NotNull; */ @Data @TableName("MSG_EVENT_CONFIG") +@ToString public class MsgEventConfig implements Serializable { private static final long serialVersionUID = 1L; @@ -59,9 +61,25 @@ public class MsgEventConfig implements Serializable { @NotNull(message = "屏幕通知标识不可为空") private Integer screenNotic; + /** + * 暂降类型,以逗号隔开 + */ private String eventType; + /** + * 暂降残余电压告警阈值 + */ + private Float eventValue; + + /** + * 暂降持续时间告警阈值 + */ + private Integer eventDuration; + + @NotEmpty(message = "事件类型不可为空") @TableField(exist = false) private List eventTypeList; + + } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLedgerPO.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLedgerPO.java index 3f311647..1227bb63 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLedgerPO.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLedgerPO.java @@ -8,6 +8,7 @@ import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; +import java.util.List; /** * @Author: cdf @@ -87,6 +88,18 @@ public class PqUserLedgerPO implements Serializable { @TableField(exist = false) private Integer eventCount = 0; + @TableField(exist = false) + private List eventIds; + + @TableField(exist = false) + private String deptName; + + @TableField(exist = false) + private String gdName; + + @TableField(exist = false) + private String station; + @TableField(exist = false) private String info; diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLineAssPO.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLineAssPO.java index 898de56f..bfe88251 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLineAssPO.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/PqUserLineAssPO.java @@ -19,4 +19,8 @@ public class PqUserLineAssPO { @TableField(value = "LINE_INDEX") private Integer lineIndex; + + + @TableField(exist = false) + private String userName; } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/security/SecurityConfig.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/security/SecurityConfig.java index af6fd6f8..349ed40e 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/security/SecurityConfig.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/security/SecurityConfig.java @@ -34,14 +34,14 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() -// .antMatchers("/cn_authenticate","/ws/**","/accept/testEvent").permitAll() // 允许访问认证接口 + //.antMatchers("/cn_authenticate","/ws/**","/accept/testEvent").permitAll() // 允许访问认证接口 .antMatchers("/**").permitAll() // 允许访问认证接口 .anyRequest().authenticated() .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); // 使用无状态会话 -// http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); + // http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); } @Bean diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/EventRightService.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/EventRightService.java index f939e9ca..dc0e2ecd 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/EventRightService.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/EventRightService.java @@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.event.file.pojo.dto.WaveDataDTO; import com.njcn.gather.event.devcie.pojo.dto.DeviceDTO; import com.njcn.gather.event.devcie.pojo.po.PqGdCompany; +import com.njcn.gather.event.devcie.pojo.po.PqSubstation; import com.njcn.gather.event.transientes.pojo.param.LargeScreenCountParam; import com.njcn.gather.event.transientes.pojo.param.MonitorTerminalParam; import com.njcn.gather.event.transientes.pojo.param.PqUserLedgerParam; import com.njcn.gather.event.transientes.pojo.po.PqUserLedgerPO; +import com.njcn.gather.event.transientes.pojo.po.PqsDepts; import com.njcn.gather.event.transientes.pojo.vo.EventDetailVO; import com.njcn.gather.event.transientes.pojo.vo.UserLedgerStatisticVO; @@ -21,6 +23,8 @@ public interface EventRightService { Page rightEventOpen(LargeScreenCountParam param); + Page rightEventOpenForDetail(LargeScreenCountParam param); + Page rightEventDevOpen(LargeScreenCountParam param); @@ -30,5 +34,20 @@ public interface EventRightService { List rightImportUser(LargeScreenCountParam param); + PqUserLedgerPO rightImportOpenDetail(LargeScreenCountParam param); + + + List gdSelect(); + + List bdSelect(); + + + + + /*-------------------------------------------------------*/ + UserLedgerStatisticVO userLedgerStatisticClone(LargeScreenCountParam param); + + Page rightEventOpenClone(LargeScreenCountParam param); + } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventConfigService.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventConfigService.java index 58c56b7f..bdb2b548 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventConfigService.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/MsgEventConfigService.java @@ -13,4 +13,8 @@ public interface MsgEventConfigService extends IService { MsgEventConfig queryConfig(); List getEventType(); + + Float getEventValue(); + + Integer getEventDuration(); } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/EventRightServiceImpl.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/EventRightServiceImpl.java index 7fd1feb2..06e0acd9 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/EventRightServiceImpl.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/EventRightServiceImpl.java @@ -14,11 +14,9 @@ import com.njcn.gather.event.devcie.mapper.PqGdCompanyMapper; import com.njcn.gather.event.devcie.mapper.PqSubstationMapper; import com.njcn.gather.event.devcie.pojo.dto.DeviceDTO; import com.njcn.gather.event.devcie.pojo.dto.LedgerBaseInfoDTO; -import com.njcn.gather.event.devcie.pojo.po.PqDevice; -import com.njcn.gather.event.devcie.pojo.po.PqGdCompany; -import com.njcn.gather.event.devcie.pojo.po.PqLine; -import com.njcn.gather.event.devcie.pojo.po.PqSubstation; +import com.njcn.gather.event.devcie.pojo.po.*; import com.njcn.gather.event.devcie.service.PqLineService; +import com.njcn.gather.event.devcie.service.PqsDeptslineService; import com.njcn.gather.event.transientes.mapper.PqUserLedgerMapper; import com.njcn.gather.event.transientes.mapper.PqUserLineAssMapper; import com.njcn.gather.event.transientes.mapper.PqsDicTreeMapper; @@ -34,6 +32,7 @@ import com.njcn.web.factory.PageFactory; import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -73,6 +72,11 @@ public class EventRightServiceImpl implements EventRightService { private final PqGdCompanyMapper pqGdCompanyMapper; + private final PqsDeptslineService pqsDeptslineService; + + private final PqsDeptsService pqsDeptsService; + @Value("${SYS_TYPE_ZT}") + private String sysTypeZt; @@ -146,7 +150,7 @@ public class EventRightServiceImpl implements EventRightService { private List getUserLineAssociations(List lineIds){ LambdaQueryWrapper assQuery = new LambdaQueryWrapper<>(); - assQuery.in(PqUserLineAssPO::getLineIndex, lineIds); + // assQuery.in(PqUserLineAssPO::getLineIndex, lineIds); if(lineIds.size()>1000){ List> lineList = CollUtil.split(lineIds, 1000); @@ -166,7 +170,9 @@ public class EventRightServiceImpl implements EventRightService { //查询时间段的暂降事件 LambdaQueryWrapper eventQuery = new LambdaQueryWrapper<>(); eventQuery.between(PqsEventdetail::getTimeid, DateUtil.parse(param.getSearchBeginTime()), DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))) - .in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType()); + .in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()); if (lineIds.size() > 1000) { List> listLineIds = CollUtil.split(lineIds, 1000); eventQuery.and(w -> { @@ -208,6 +214,9 @@ public class EventRightServiceImpl implements EventRightService { if(Objects.nonNull(param.getGdIndex())){ userWrapper.eq(PqUserLedgerPO::getPowerSupplyArea,param.getGdIndex()); } + if(StrUtil.isNotBlank(param.getSearchValue())){ + userWrapper.like(PqUserLedgerPO::getCustomerName,param.getSearchValue()); + } } return pqUserLedgerMapper.selectList(userWrapper); } @@ -237,15 +246,15 @@ public class EventRightServiceImpl implements EventRightService { List oneList = userMap.get(obj.getId()); if (tree.equals(DicTreeEnum.BJ_USER.getCode())) { - Integer[] count = getEventCount(oneList, assList, eventdetailList, lineList,true); + Integer[] count = getEventCount(oneList, assList, eventdetailList,true); result.setImportNum(count[0]); result.setImportDevNum(count[1]); } else if (tree.equals(DicTreeEnum.OI_USER.getCode())) { - Integer[] count = getEventCount(oneList, assList, eventdetailList, lineList,true); + Integer[] count = getEventCount(oneList, assList, eventdetailList,true); result.setOtherImportNum(count[0]); result.setOtherImportDevNum(count[1]); } else if (tree.equals(DicTreeEnum.OT_USER.getCode())) { - Integer[] count = getEventCount(oneList, assList, eventdetailList, lineList,true); + Integer[] count = getEventCount(oneList, assList, eventdetailList,true); result.setOtherNum(count[0]); result.setOtherDevNum(count[1]); } @@ -260,7 +269,56 @@ public class EventRightServiceImpl implements EventRightService { Map> smallMap = oneList.stream().collect(Collectors.groupingBy(PqUserLedgerPO::getSmallObjType)); smallMap.forEach((key, userList) -> { UserLedgerStatisticVO.Inner item = new UserLedgerStatisticVO.Inner(); - Integer[] count = getEventCount(userList, assList, eventdetailList, lineList, false); + Integer[] count = getEventCount(userList, assList, eventdetailList, false); + item.setCount(count[0]); + item.setTreeId(key); + item.setParentId(obj.getId()); + item.setName(allTreeMap.containsKey(key) ? allTreeMap.get(key).getName() : "/"); + childrenList.add(item); + }); + inner.setChildren(childrenList); + innerList.add(inner); + } + }); + + result.setInnerList(innerList); + } + + + private void buildResultClone(UserLedgerStatisticVO result,Map treeMap,Map> userMap,List assList,List eventdetailList, List lineList,List dicTreePOList){ + List innerList = new ArrayList<>(); + Map allTreeMap = dicTreePOList.stream().collect(Collectors.toMap(PqsDicTreePO::getId,dept->dept)); + + treeMap.forEach((tree, obj) -> { + //获取对象大类的用户 + List oneList = userMap.get(obj.getId()); + + + if (tree.equals(DicTreeEnum.BJ_USER.getCode())) { + Integer[] count = getEventCount(oneList, assList, eventdetailList,true); + result.setImportNum(oneList.size()); + result.setImportDevNum(count[1]); + } else if (tree.equals(DicTreeEnum.OI_USER.getCode())) { + Integer[] count = getEventCount(oneList, assList, eventdetailList,true); + result.setOtherImportNum(oneList.size()); + result.setOtherImportDevNum(count[1]); + } else if (tree.equals(DicTreeEnum.OT_USER.getCode())) { + Integer[] count = getEventCount(oneList, assList, eventdetailList,true); + result.setOtherNum(oneList.size()); + result.setOtherDevNum(count[1]); + } + + UserLedgerStatisticVO.Inner inner = new UserLedgerStatisticVO.Inner(); + inner.setName(obj.getName()); + + inner.setCount(0); + + List childrenList = new ArrayList<>(); + if(CollUtil.isNotEmpty(oneList)) { + Map> smallMap = oneList.stream().collect(Collectors.groupingBy(PqUserLedgerPO::getSmallObjType)); + smallMap.forEach((key, userList) -> { + UserLedgerStatisticVO.Inner item = new UserLedgerStatisticVO.Inner(); + Integer[] count = getEventCount(userList, assList, eventdetailList, false); item.setCount(count[0]); item.setTreeId(key); item.setParentId(obj.getId()); @@ -325,6 +383,19 @@ public class EventRightServiceImpl implements EventRightService { if(CollUtil.isEmpty(deptLineIds)){ return result; } + + if(Objects.nonNull(param.getBdId())){ + List pqSubstationList = pqSubstationMapper.selectList(new LambdaQueryWrapper().like(PqSubstation::getSubIndex,param.getBdId())); + if(CollUtil.isEmpty(pqSubstationList)){ + return result; + } + List subIds = pqSubstationList.stream().map(PqSubstation::getSubIndex).collect(Collectors.toList()); + + List pqLineList = pqLineService.list(new LambdaQueryWrapper().in(PqLine::getSubIndex,subIds)); + deptLineIds = pqLineList.stream().map(PqLine::getLineIndex).distinct().collect(Collectors.toList()); + } + + //获取用户监测点关系符合部门监测点的 List assList = getUserLineAssociations(deptLineIds); if(CollUtil.isEmpty(assList)){ @@ -348,7 +419,9 @@ public class EventRightServiceImpl implements EventRightService { //查询时间段的暂降事件 LambdaQueryWrapper eventQuery = new LambdaQueryWrapper<>(); eventQuery.between(PqsEventdetail::getTimeid, DateUtil.parse(param.getSearchBeginTime()), DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))) - .in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType()).orderByDesc(PqsEventdetail::getTimeid); + .in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType()).orderByDesc(PqsEventdetail::getTimeid) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()); if (lineUseList.size() > 1000) { List> listLineIds = CollUtil.split(lineUseList, 1000); @@ -394,6 +467,72 @@ public class EventRightServiceImpl implements EventRightService { return result; } + + @Override + public Page rightEventOpenForDetail(LargeScreenCountParam param) { + + Page result = new Page<>(PageFactory.getPageNum(param),PageFactory.getPageSize(param)); + + //查询时间段的暂降事件 + LambdaQueryWrapper eventQuery = new LambdaQueryWrapper<>(); + eventQuery.between(PqsEventdetail::getTimeid, DateUtil.parse(param.getSearchBeginTime()), DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))) + .in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType()).orderByDesc(PqsEventdetail::getTimeid) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .in(PqsEventdetail::getEventdetailIndex,param.getEventIds()); + + Page page = pqsEventdetailService.page(new Page<>(PageFactory.getPageNum(param),PageFactory.getPageSize(param)),eventQuery); + List temResultList = page.getRecords(); + if(CollUtil.isEmpty(temResultList)){ + return result; + } + + List ids = temResultList.stream().map(PqsEventdetail::getLineid).distinct().collect(Collectors.toList()); + List dtoList = pqLineService.getBaseLineInfo(ids); + Map lineMap = dtoList.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId,Function.identity())); + + //获取用户监测点关系符合部门监测点的 + List assList = getUserLineAssociations(ids); + if(CollUtil.isEmpty(assList)){ + return result; + } + List userIds = assList.stream().map(PqUserLineAssPO::getUserIndex).distinct().collect(Collectors.toList()); + if(CollUtil.isEmpty(userIds)){ + return result; + } + Map> temMap = assList.stream().collect(Collectors.groupingBy(PqUserLineAssPO::getLineIndex,Collectors.mapping(PqUserLineAssPO::getUserIndex,Collectors.toList()))); + + //获取符合条件的用户 + List pqUserLedgerPOList =getUserLedgers(userIds,param,true); + + if(CollUtil.isEmpty(pqUserLedgerPOList)){ + return result; + } + Map pqMap = pqUserLedgerPOList.stream().collect(Collectors.toMap(PqUserLedgerPO::getId,Function.identity())); + + List resultList = new ArrayList<>(); + for(PqsEventdetail pqsEventdetail : temResultList){ + EventDetailVO eventDetailVO = new EventDetailVO(); + BeanUtil.copyProperties(pqsEventdetail,eventDetailVO); + List userTemIds = temMap.get(pqsEventdetail.getLineid()); + String objName = userTemIds.stream().map(it->pqMap.get(it).getCustomerName()).collect(Collectors.joining("; ")); + eventDetailVO.setObjName(objName); + LedgerBaseInfoDTO dto = lineMap.get(pqsEventdetail.getLineid()); + eventDetailVO.setBdname(dto.getStationName()); + eventDetailVO.setGdName(dto.getGdName()); + eventDetailVO.setBusName(dto.getBusBarName()); + eventDetailVO.setLineid(dto.getLineId()); + eventDetailVO.setPointname(dto.getLineName()); + eventDetailVO.setEventdetail_index(pqsEventdetail.getEventdetailIndex()); + eventDetailVO.setDevName(dto.getDevName()); + eventDetailVO.setPersisttime(BigDecimal.valueOf(pqsEventdetail.getPersisttime() / 1000).setScale(3,RoundingMode.HALF_UP).toString()); + resultList.add(eventDetailVO); + } + result.setTotal(page.getTotal()); + result.setRecords(resultList); + return result; + } + @Override public Page rightEventDevOpen(LargeScreenCountParam param) { Page result = new Page<>(PageFactory.getPageNum(param),PageFactory.getPageSize(param)); @@ -401,6 +540,18 @@ public class EventRightServiceImpl implements EventRightService { if(CollUtil.isEmpty(lineIds)){ return result; } + + if(Objects.nonNull(param.getBdId())){ + List pqSubstationList = pqSubstationMapper.selectList(new LambdaQueryWrapper().like(PqSubstation::getSubIndex,param.getBdId())); + if(CollUtil.isEmpty(pqSubstationList)){ + return result; + } + List subIds = pqSubstationList.stream().map(PqSubstation::getSubIndex).collect(Collectors.toList()); + + List pqLineList = pqLineService.list(new LambdaQueryWrapper().in(PqLine::getSubIndex,subIds)); + lineIds = pqLineList.stream().map(PqLine::getLineIndex).distinct().collect(Collectors.toList()); + } + List assPOList =getUserLineAssociations(lineIds); if(CollUtil.isEmpty(assPOList)){ return result; @@ -433,6 +584,10 @@ public class EventRightServiceImpl implements EventRightService { lambdaQueryWrapper.eq(PqUserLedgerPO::getPowerSupplyArea,param.getGdIndex()); } + if(StrUtil.isNotBlank(param.getSearchValue())){ + lambdaQueryWrapper.eq(PqUserLedgerPO::getCustomerName,param.getSearchValue()); + } + List userList = pqUserLedgerMapper.selectList(lambdaQueryWrapper); if(CollUtil.isEmpty(userList)){ return result; @@ -470,8 +625,9 @@ public class EventRightServiceImpl implements EventRightService { }); page.getRecords().forEach(item-> { if(objMap.containsKey(item.getId())){ - long count = eventdetailList.stream().filter(it->objMap.get(item.getId()).contains(it.getLineid())).count(); - item.setEventCount((int)count);; + List countObj = eventdetailList.stream().filter(it->objMap.get(item.getId()).contains(it.getLineid())).collect(Collectors.toList()); + item.setEventCount(countObj.size()); + item.setEventIds(countObj.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList())); } if(lastMap.containsKey(item.getId())){ List abList = lastMap.get(item.getId()); @@ -524,6 +680,8 @@ public class EventRightServiceImpl implements EventRightService { List eventList = pqsEventdetailService.lambdaQuery(). in(PqsEventdetail::getLineid,lineIds) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) .between(PqsEventdetail::getTimeid,DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())),DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))).list(); if(CollUtil.isEmpty(eventList)){ poList.forEach(item->{ @@ -550,12 +708,37 @@ public class EventRightServiceImpl implements EventRightService { return result; } + @Override + public PqUserLedgerPO rightImportOpenDetail(LargeScreenCountParam param) { + List deptLineIds = commGeneralService.getLineIdsByRedis(param.getDeptId()); + if(CollUtil.isEmpty(deptLineIds)){ + return null; + } + + PqUserLedgerPO po = pqUserLedgerMapper.selectOne(new LambdaQueryWrapper().eq(PqUserLedgerPO::getId,param.getSearchValue())); + List pqUserLineAssPOS = pqUserLineAssMapper.selectList(new LambdaQueryWrapper().eq(PqUserLineAssPO::getUserIndex,po.getId())); + List lastAss = pqUserLineAssPOS.stream().filter(it->deptLineIds.contains(it.getLineIndex())).collect(Collectors.toList()); + + List lineIds = lastAss.stream().map(PqUserLineAssPO::getLineIndex).collect(Collectors.toList()); + List ledgerBaseInfoDTOList = pqLineService.getBaseLedger(lineIds,null); + po.setGdName(ledgerBaseInfoDTOList.stream().map(LedgerBaseInfoDTO::getGdName).distinct().collect(Collectors.joining(";"))); + po.setSubstationName(ledgerBaseInfoDTOList.stream().map(LedgerBaseInfoDTO::getStationName).distinct().collect(Collectors.joining(";"))); + po.setBusbarName(ledgerBaseInfoDTOList.stream().map(it->it.getStationName()+"_"+it.getBusBarName()).distinct().collect(Collectors.joining(";"))); + + return po; + } + @Override public List gdSelect() { return pqGdCompanyMapper.selectList(null); } - private Integer[] getEventCount(List oneList, List assList, List pqsEventdetailList, List lineList,boolean devFlag) { + @Override + public List bdSelect() { + return pqSubstationMapper.selectList(null); + } + + private Integer[] getEventCount(List oneList, List assList, List pqsEventdetailList,boolean devFlag) { Integer[] count = new Integer[]{0, 0}; //用户的id if(CollUtil.isNotEmpty(oneList)){ @@ -575,6 +758,157 @@ public class EventRightServiceImpl implements EventRightService { return count; } + @Override + public UserLedgerStatisticVO userLedgerStatisticClone(LargeScreenCountParam param) { + UserLedgerStatisticVO result = new UserLedgerStatisticVO(); + // 1. 获取字典树数据 + List dicTreeList = getAllDicTrees(); + Map treeMap = getDicTreeMap(dicTreeList); + setResultIds(result, treeMap); + + // 2. 获取线路ID列表 + List lineIds = commGeneralService.getLineIdsByDept(param); + if (CollUtil.isEmpty(lineIds)) { + return result; + } + + // 3. 获取用户线路关联数据 + List assList = getUserLineAssociations(lineIds); + if (CollUtil.isEmpty(assList)) { + return result; + } + + // 4. 获取用户台账信息 + Set assUserIds = assList.stream() + .map(PqUserLineAssPO::getUserIndex) + .collect(Collectors.toSet()); + List userLedgers = getUserLedgers(new ArrayList<>(assUserIds),null,false); + if (CollUtil.isEmpty(userLedgers)) { + return result; + } + + // 5. 获取事件和线路数据 + List events = getEventsInTimeRange(param, lineIds); + List lines = getLines(lineIds); + + // 6. 按用户类型分组处理 + Map> userMap = userLedgers.stream() + .collect(Collectors.groupingBy(PqUserLedgerPO::getBigObjType)); + + // 7. 构建结果 + buildResultClone(result, treeMap, userMap, assList, events, lines,dicTreeList); + + return result; + } + + @Override + public Page rightEventOpenClone(LargeScreenCountParam param) { + Page result = new Page<>(); + + // 2. 获取线路ID列表 + List lineIds = commGeneralService.getLineIdsByDept(param); + if (CollUtil.isEmpty(lineIds)) { + return result; + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + PqSubstation pqSubstation = null; + if(Objects.nonNull(param.getBdId())){ + pqSubstation = pqSubstationMapper.selectOne(new LambdaQueryWrapper().eq(PqSubstation::getSubIndex,param.getBdId())); + if(Objects.isNull(pqSubstation)){ + return result; + } + queryWrapper.in(PqLine::getSubIndex, pqSubstation.getSubIndex()); + + } + PqGdCompany pqGdCompany = null; + if(Objects.nonNull(param.getGdIndex())){ + pqGdCompany = pqGdCompanyMapper.selectOne(new LambdaQueryWrapper().eq(PqGdCompany::getGdIndex,param.getGdIndex())); + if(Objects.isNull(pqGdCompany)){ + return result; + } + queryWrapper.in(PqLine::getGdIndex, pqGdCompany.getGdIndex()); + } + + if(Objects.nonNull(param.getBdId()) || Objects.nonNull(param.getGdIndex())) { + List pqLineList = pqLineService.list(queryWrapper); + lineIds = pqLineList.stream().map(PqLine::getLineIndex).distinct().collect(Collectors.toList()); + } + + if(CollUtil.isEmpty(lineIds)){ + return result; + } + + // 3. 获取用户线路关联数据 + List assList = getUserLineAssociations(lineIds); + if (CollUtil.isEmpty(assList)) { + return result; + } + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(StrUtil.isNotBlank(param.getBigObjType())){ + //对象大类不为空 + lambdaQueryWrapper.eq(PqUserLedgerPO::getBigObjType,param.getBigObjType()); + } + if(StrUtil.isNotBlank(param.getSmallObjType())){ + //对象大类不为空 + lambdaQueryWrapper.eq(PqUserLedgerPO::getSmallObjType,param.getSmallObjType()); + } + if(Objects.nonNull(param.getGdIndex())){ + lambdaQueryWrapper.eq(PqUserLedgerPO::getPowerSupplyArea,param.getGdIndex()); + } + if(StrUtil.isNotBlank(param.getSearchValue())){ + lambdaQueryWrapper.like(PqUserLedgerPO::getCustomerName,param.getSearchValue()); + } + List assIds = assList.stream().map(PqUserLineAssPO::getUserIndex).distinct().collect(Collectors.toList()); + if(assIds.size()>1000){ + List> userIds = CollUtil.split(assIds, 1000); + lambdaQueryWrapper.and(w -> { + for (List ids : userIds) { + w.or(wIn -> wIn.in(PqUserLedgerPO::getId, ids)); + } + }); + }else { + lambdaQueryWrapper.in(PqUserLedgerPO::getId, assIds); + } + + Page page = pqUserLedgerMapper.selectPage(new Page<>(PageFactory.getPageNum(param),PageFactory.getPageSize(param)),lambdaQueryWrapper); + if(CollUtil.isEmpty(page.getRecords())){ + return result; + } + List userIds = page.getRecords().stream().map(PqUserLedgerPO::getId).collect(Collectors.toList()); + List assPOList = assList.stream().filter(it->userIds.contains(it.getUserIndex())).collect(Collectors.toList()); + List lineTemIds = assPOList.stream().map(PqUserLineAssPO::getLineIndex).distinct().collect(Collectors.toList()); + + List ledgerList = pqLineService.getBaseLedger(lineTemIds,null); + + List pqsDeptslineList = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getLineIndex,lineTemIds).eq(PqsDeptsline::getSystype,sysTypeZt).list(); + Map deptLineMap = pqsDeptslineList.stream().collect(Collectors.toMap(PqsDeptsline::getLineIndex,dept->dept)); + + Map deptTemMap = new HashMap<>(); + List pqsDeptsList = pqsDeptsService.lambdaQuery().eq(PqsDepts::getState,1).list(); + Map deptMap = pqsDeptsList.stream().collect(Collectors.toMap(PqsDepts::getDeptsIndex,dept->dept)); + deptLineMap.forEach((k,v)->{ + deptTemMap.put(k,deptMap.get(v.getDeptsIndex()).getDeptsname()); + }); + + + Map> assMap = assPOList.stream().collect(Collectors.groupingBy(PqUserLineAssPO::getUserIndex,Collectors.mapping(PqUserLineAssPO::getLineIndex,Collectors.toList()))); + + for(PqUserLedgerPO po :page.getRecords()){ + if(assMap.containsKey(po.getId())){ + List temIds = assMap.get(po.getId()); + List temList = ledgerList.stream().filter(it->temIds.contains(it.getLineId())).collect(Collectors.toList()); + po.setGdName(temList.stream().map(LedgerBaseInfoDTO::getGdName).distinct().collect(Collectors.joining(";"))); + po.setStation(temList.stream().map(LedgerBaseInfoDTO::getStationName).distinct().collect(Collectors.joining(";"))); + po.setInfo(temList.stream().map(it->it.getStationName()+"_"+it.getBusBarName()).distinct().collect(Collectors.joining(";"))); + po.setDeptName(temList.stream().map(LedgerBaseInfoDTO::getLineId).distinct().map(deptTemMap::get).distinct().collect(Collectors.joining(";"))); + } + + } + + return page; + } } 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 b0e49da9..16cd318d 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 @@ -205,6 +205,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid,startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,listIds) .orderByDesc(PqsEventdetail::getTimeid).list() ; @@ -214,6 +216,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,lineIds) .orderByDesc(PqsEventdetail::getTimeid).list(); eventdetails.addAll(temp); @@ -302,6 +306,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,listIds) .orderByDesc(PqsEventdetail::getTimeid).list(); eventdetails.addAll(temp); @@ -310,6 +316,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,lineIds) .orderByDesc(PqsEventdetail::getTimeid).list(); eventdetails.addAll(temp); @@ -388,6 +396,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { queryWrapper.lambda() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .and(ew->{ for(List pList: idPartitions){ ew.or(w->w.in(PqsEventdetail::getLineid, pList)); @@ -400,6 +410,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getLineid, lineIds) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) .orderByDesc(PqsEventdetail::getTimeid); } //查询需要发送短息处理的部门反推监测点 @@ -483,6 +495,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { lambdaQueryWrapper.clear(); lambdaQueryWrapper.between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) .in(PqsEventdetail::getLineid, ids) .and(wrapper -> wrapper.eq(PqsEventdetail::getLookFlag, 0).or().isNull(PqsEventdetail::getLookFlag)); if (Objects.nonNull(largeScreenCountParam.getEventDeep())) { @@ -498,6 +512,9 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { }else { lambdaQueryWrapper.between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid, deptslineIds) .and(wrapper -> wrapper.eq(PqsEventdetail::getLookFlag, 0).or().isNull(PqsEventdetail::getLookFlag)); if (Objects.nonNull(largeScreenCountParam.getEventDeep())) { @@ -619,6 +636,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List eventdetails = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) .in(PqsEventdetail::getLineid, deptslineIds).list(); mapCountVO.setEventCount(eventdetails.size()); @@ -760,6 +779,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid,startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,listIds) .orderByDesc(PqsEventdetail::getTimeid).list() ; @@ -769,6 +790,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,lineIds) .orderByDesc(PqsEventdetail::getTimeid).list(); eventdetails.addAll(temp); @@ -909,8 +932,6 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { DeviceCountVO deviceCountVO = new DeviceCountVO(); List pqLineList = (List) redisUtil.getObjectByKey( NAME_KEY+ StrUtil.DASHED+"pqLineList"); List deptslineIds = (List) redisUtil.getObjectByKey( NAME_KEY+ StrUtil.DASHED+largeScreenCountParam.getDeptId()); -// List deptslines = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getDeptsIndex, deptAndChildren).eq(PqsDeptsline::getSystype, sysTypeZt).list(); -// List deptslineIds = deptslines.stream().map(PqsDeptsline::getLineIndex).collect(Collectors.toList()); pqLineList = pqLineList.stream().filter(temp->deptslineIds.contains(temp.getLineIndex())).collect(Collectors.toList()); List devIndexs = pqLineList.stream().map(PqLine::getDevIndex).collect(Collectors.toList()); @@ -920,8 +941,12 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { long onLine = list.stream().filter(temp -> Objects.equals(temp.getStatus(), 1)).count(); long Offline = list.stream().filter(temp -> Objects.equals(temp.getStatus(), 0)).count(); deviceCountVO.setAllCount(list.size()); - deviceCountVO.setOnLine((int) onLine); - deviceCountVO.setOffLine((int) Offline); + // deviceCountVO.setOnLine((int) onLine); + // deviceCountVO.setOffLine((int) Offline); + + //临时调整 + deviceCountVO.setOnLine(list.size()); + deviceCountVO.setOffLine(0); return deviceCountVO; } @@ -1026,6 +1051,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid,startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,itemIds) .orderByDesc(PqsEventdetail::getTimeid).list(); eventdetails.addAll(temp); @@ -1034,6 +1061,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List temp = pqsEventdetailService.lambdaQuery() .between(PqsEventdetail::getTimeid, startTime, endTime) .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) .in(PqsEventdetail::getLineid,deptslineIds) .orderByDesc(PqsEventdetail::getTimeid).list(); eventdetails.addAll(temp); @@ -1055,7 +1084,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List pqUserLedgerPOList = getUserLedgers(userIds); List subStationCountVOS = new ArrayList<>(); - List ledgerBaseInfoDTOS = pqLineService.getBaseLedger(lineIds); + List ledgerBaseInfoDTOS = pqLineService.getBaseLedger(lineIds,null); //Map ledgerBaseInfoDTOMap = ledgerBaseInfoDTOS.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId, Function.identity())); List subIndexs = ledgerBaseInfoDTOS.stream().map(LedgerBaseInfoDTO::getStationId).collect(Collectors.toList()); @@ -1077,13 +1106,9 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { subStationCountVO.setLatitude(pqsStationMap.getLatItude()); List tempLineIds = v.stream().map(LedgerBaseInfoDTO::getLineId).collect(Collectors.toList()); - - - subStationCountVO.setLineCount(tempLineIds.size()); List tempEventList = eventdetails.stream().filter(temp -> tempLineIds.contains(temp.getLineid())).collect(Collectors.toList()); subStationCountVO.setEventCount(tempEventList.size()); - v.forEach(item->{ String obj = ""; if(lineAssMap.containsKey(item.getLineId())){ @@ -1105,35 +1130,87 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { LocalDateTime startTime = largeScreenCountParam.getStartTime().atStartOfDay(); LocalDateTime endTime = LocalDateTimeUtil.endOfDay(largeScreenCountParam.getEndTime().atStartOfDay()); - List deptslineIds = (List) redisUtil.getObjectByKey( NAME_KEY+ StrUtil.DASHED+largeScreenCountParam.getDeptId()); + List deptslineIds = commGeneralService.getLineIdsByRedis(largeScreenCountParam.getDeptId()); - List pqLineList = pqLineService.getBaseLineInfo(deptslineIds); - Map ledgerBaseInfoDTOMap = pqLineList.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId, Function.identity())); + List ledgerList = new ArrayList<>(); + List pqUserLedgerPOList = new ArrayList<>(); + List assList = new ArrayList<>(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper + .between(PqsEventdetail::getTimeid, startTime, endTime) + .gt(PqsEventdetail::getPersisttime,msgEventConfigService.getEventDuration()) + .le(PqsEventdetail::getEventvalue,msgEventConfigService.getEventValue()) + .orderByDesc(PqsEventdetail::getTimeid); - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (deptslineIds.size()>1000) { - List> idPartitions = CollUtil.split(deptslineIds,1000); - - queryWrapper.lambda() - .between(PqsEventdetail::getTimeid, startTime, endTime) - .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) - .and(ew->{ - for(List pList: idPartitions){ - ew.or(w->w.in(PqsEventdetail::getLineid, pList)); - } - }).orderByDesc(PqsEventdetail::getTimeid); - - - } else { - queryWrapper.lambda() - .between(PqsEventdetail::getTimeid, startTime, endTime) - .in(PqsEventdetail::getLineid, deptslineIds) - .in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()) - .orderByDesc(PqsEventdetail::getTimeid); + if(Objects.nonNull(largeScreenCountParam.getEventtype())){ + queryWrapper.eq(PqsEventdetail::getWavetype,largeScreenCountParam.getEventtype()); + }else { + queryWrapper.in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType()); } + if(Objects.nonNull(largeScreenCountParam.getEventDurationMin()) ||Objects.nonNull(largeScreenCountParam.getEventDurationMax())){ + queryWrapper.gt(Objects.nonNull(largeScreenCountParam.getEventDurationMin()),PqsEventdetail::getPersisttime,largeScreenCountParam.getEventDurationMin()); + queryWrapper.lt(Objects.nonNull(largeScreenCountParam.getEventDurationMax()),PqsEventdetail::getPersisttime,largeScreenCountParam.getEventDurationMax()); + } + + if(Objects.nonNull(largeScreenCountParam.getEventValueMin()) ||Objects.nonNull(largeScreenCountParam.getEventValueMax())){ + queryWrapper.gt(Objects.nonNull(largeScreenCountParam.getEventValueMin()),PqsEventdetail::getEventvalue,largeScreenCountParam.getEventValueMin()); + queryWrapper.lt(Objects.nonNull(largeScreenCountParam.getEventValueMax()),PqsEventdetail::getEventvalue,largeScreenCountParam.getEventValueMax()); + } + + if(StrUtil.isNotBlank(largeScreenCountParam.getSearchValue())){ + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.select(PqUserLedgerPO::getId,PqUserLedgerPO::getCustomerName); + lambdaQueryWrapper.like(PqUserLedgerPO::getCustomerName,largeScreenCountParam.getSearchValue()); + List lineTemUserIds = new ArrayList<>(); + pqUserLedgerPOList = pqUserLedgerMapper.selectList(lambdaQueryWrapper); + if(CollUtil.isNotEmpty(pqUserLedgerPOList)) { + List userIds = pqUserLedgerPOList.stream().map(PqUserLedgerPO::getId).collect(Collectors.toList()); + assList = pqUserLineAssMapper.selectList(new LambdaQueryWrapper().in(PqUserLineAssPO::getUserIndex, userIds)); + List assIds = assList.stream().map(PqUserLineAssPO::getLineIndex).distinct().collect(Collectors.toList()); + lineTemUserIds = deptslineIds.stream().filter(assIds::contains).collect(Collectors.toList()); + } + + ledgerList = pqLineService.getBaseLedger(deptslineIds,largeScreenCountParam.getSearchValue()); + lineTemUserIds.addAll(ledgerList.stream().map(LedgerBaseInfoDTO::getLineId).collect(Collectors.toList())); + if(CollUtil.isEmpty(lineTemUserIds)){ + return new Page<>(); + } + if (lineTemUserIds.size()>1000) { + List> idPartitions = CollUtil.split(lineTemUserIds,1000); + queryWrapper.and(ew->{ + for(List pList: idPartitions){ + ew.or(w->w.in(PqsEventdetail::getLineid, pList)); + } + }); + } else { + queryWrapper.in(PqsEventdetail::getLineid, lineTemUserIds); + } + + }else { + if (deptslineIds.size()>1000) { + List> idPartitions = CollUtil.split(deptslineIds,1000); + queryWrapper.and(ew->{ + for(List pList: idPartitions){ + ew.or(w->w.in(PqsEventdetail::getLineid, pList)); + } + }); + } else { + queryWrapper.in(PqsEventdetail::getLineid, deptslineIds); + } + } IPage list = pqsEventdetailService.getBaseMapper().selectPage(pqsEventdetailPage,queryWrapper); + if(CollUtil.isEmpty(list.getRecords())){ + return new Page<>(); + } + List pageLineIds = list.getRecords().stream().map(PqsEventdetail::getLineid).distinct().collect(Collectors.toList()); + List pageLedger = pqLineService.getBaseLedger(pageLineIds,null); + Map ledgerBaseInfoDTOMap = pageLedger.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId, Function.identity())); + + List assLastList = pqUserLedgerMapper.getUserByParam(pageLineIds,null); + Map> mapObj = assLastList.stream().collect(Collectors.groupingBy(PqUserLineAssPO::getLineIndex,Collectors.mapping(PqUserLineAssPO::getUserName,Collectors.toList()))); + List collect = list.getRecords().stream().map(temp -> { EventDetailVO eventDetailVO = new EventDetailVO(); eventDetailVO.setEventdetail_index(temp.getEventdetailIndex()); @@ -1153,6 +1230,11 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { eventDetailVO.setBusName(ledgerBaseInfoDTO.getBusBarName()); eventDetailVO.setObjName(ledgerBaseInfoDTO.getObjName()); } + String objName ="/"; + if(mapObj.containsKey(eventDetailVO.getLineid())){ + objName = String.join(";", mapObj.get(eventDetailVO.getLineid())); + } + eventDetailVO.setObjName(objName); return eventDetailVO; }).collect(Collectors.toList()); Page returnpage = new Page<>(largeScreenCountParam.getPageNum(), largeScreenCountParam.getPageSize()); @@ -1188,7 +1270,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); if(StrUtil.isNotBlank(largeScreenCountParam.getState())){ - lambdaQueryWrapper.eq(PqDevice::getStatus,Integer.valueOf(largeScreenCountParam.getState())); + // lambdaQueryWrapper.eq(PqDevice::getStatus,Integer.valueOf(largeScreenCountParam.getState())); } if(StrUtil.isNotBlank(largeScreenCountParam.getDevName())){ lambdaQueryWrapper.like(StrUtil.isNotEmpty(largeScreenCountParam.getDevName()),PqDevice::getName,largeScreenCountParam.getDevName()); @@ -1220,6 +1302,10 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { List deviceDTOList = page.getRecords(); if(!CollectionUtils.isEmpty(deviceDTOList)){ + + //临时处理 + deviceDTOList.forEach(it->it.setStatus(1)); + List devIds = deviceDTOList.stream().map(PqDevice::getDevIndex).collect(Collectors.toList()); log.info("在线率查询sql开始:"+timeInterval.intervalMs()+"ms; "+timeInterval.intervalSecond()+"s"); List onlineList = pqsOnlinerateService.lambdaQuery().in(PqsOnlinerate::getDevIndex,devIds).between(PqsOnlinerate::getTimeid, startTime, endTime).list(); diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventConfigServiceImpl.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventConfigServiceImpl.java index 68202560..f1759345 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventConfigServiceImpl.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/impl/MsgEventConfigServiceImpl.java @@ -14,6 +14,7 @@ import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -27,8 +28,21 @@ import java.util.stream.Stream; @Lazy(false) // 确保服务在启动时立即初始化 public class MsgEventConfigServiceImpl extends ServiceImpl implements MsgEventConfigService { + /** + * 暂降类型 + */ public List eventType = Stream.of("1","3").collect(Collectors.toList()); + /** + * 暂降残余电压阈值 只查询小于0.7的暂降事件 + */ + public Float eventValue = 0.7f; + + /** + * 暂降残余电压阈值 只查询大于50ms的暂降事件 + */ + public Integer eventDuration = 50; + @Transactional(rollbackFor = Exception.class) @@ -40,6 +54,8 @@ public class MsgEventConfigServiceImpl extends ServiceImpl()); - if (config != null && StrUtil.isNotBlank(config.getEventType())) { - eventType = Arrays.asList(config.getEventType().split(StrUtil.COMMA)); - } else { - eventType = Collections.emptyList(); + if(Objects.nonNull(config)){ + if (StrUtil.isNotBlank(config.getEventType())) { + eventType = Arrays.asList(config.getEventType().split(StrUtil.COMMA)); + } + if(Objects.nonNull(config.getEventValue())){ + eventValue = config.getEventValue(); + } + if(Objects.nonNull(config.getEventDuration())){ + eventDuration = config.getEventDuration(); + } } - System.out.println(eventType); + System.out.println(config); } @@ -69,6 +91,15 @@ public class MsgEventConfigServiceImpl extends ServiceImpl