From b2ff27b15ccbb682e6e00680a96fc5818b9a4f52 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Wed, 30 Jul 2025 16:36:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=B3=E4=BE=A7=E5=BC=B9?= =?UTF-8?q?=E6=A1=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EventRightController.java | 12 +++ .../pojo/constant/RedisConstant.java | 15 ++++ .../pojo/param/LargeScreenCountParam.java | 5 ++ .../service/CommGeneralService.java | 9 ++ .../service/EventRightService.java | 7 ++ .../service/impl/EventRightServiceImpl.java | 83 ++++++++++++++++++- 6 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/constant/RedisConstant.java diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventRightController.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventRightController.java index fceddd77..4e6a9797 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventRightController.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventRightController.java @@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -20,6 +21,7 @@ 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.SimulationMsgParam; import com.njcn.gather.event.transientes.pojo.po.*; +import com.njcn.gather.event.transientes.pojo.vo.EventDetailVO; import com.njcn.gather.event.transientes.pojo.vo.UserLedgerStatisticVO; import com.njcn.gather.event.transientes.service.*; import com.njcn.gather.event.transientes.service.impl.MsgEventInfoServiceImpl; @@ -79,4 +81,14 @@ public class EventRightController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @OperateInfo + @PostMapping("/rightEventOpen") + @ApiOperation("右侧表头点击事件") + @ApiImplicitParam(name = "largeScreenCountParam", value = "", required = true) + public HttpResult rightEventOpen(@RequestBody LargeScreenCountParam largeScreenCountParam) { + String methodDescribe = getMethodDescribe("rightEventOpen"); + Page page = eventRightService.rightEventOpen(largeScreenCountParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe); + } + } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/constant/RedisConstant.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/constant/RedisConstant.java new file mode 100644 index 00000000..e25d4168 --- /dev/null +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/constant/RedisConstant.java @@ -0,0 +1,15 @@ +package com.njcn.gather.event.transientes.pojo.constant; + +import lombok.Getter; + +/** + * @Author: cdf + * @CreateTime: 2025-07-30 + * @Description: + */ + +public class RedisConstant { + + public static final String REDIS_DEPT_INDEX ="LineCache:"; + +} 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 c432eab6..3764007a 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 @@ -36,4 +36,9 @@ public class LargeScreenCountParam extends BaseParam { private LocalDate startTime; @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate endTime; + + @ApiModelProperty(value = "字典树 对象大类") + private String bigObjType; + @ApiModelProperty(value = "字典树 对象大小") + private String smallObjType; } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/CommGeneralService.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/CommGeneralService.java index d62007d3..3687175f 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/service/CommGeneralService.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/service/CommGeneralService.java @@ -1,5 +1,6 @@ package com.njcn.gather.event.transientes.service; +import cn.hutool.core.util.StrUtil; import com.njcn.gather.event.devcie.pojo.po.PqsDeptsline; import com.njcn.gather.event.devcie.service.PqsDeptslineService; import com.njcn.gather.event.transientes.pojo.param.LargeScreenCountParam; @@ -11,6 +12,8 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; +import static com.njcn.gather.event.transientes.pojo.constant.RedisConstant.REDIS_DEPT_INDEX; + /** * @Author: cdf * @CreateTime: 2025-06-25 @@ -40,4 +43,10 @@ public class CommGeneralService { } + public List getLineIdsByRedis(String deptId){ + List deptLineIds = (List) redisUtil.getObjectByKey( REDIS_DEPT_INDEX+ StrUtil.DASHED+deptId); + return deptLineIds; + } + + } 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 371b5637..a1c0f7af 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 @@ -1,8 +1,12 @@ package com.njcn.gather.event.transientes.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.event.file.pojo.dto.WaveDataDTO; 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.vo.EventDetailVO; import com.njcn.gather.event.transientes.pojo.vo.UserLedgerStatisticVO; import java.util.List; @@ -13,5 +17,8 @@ public interface EventRightService { UserLedgerStatisticVO userLedgerStatistic(LargeScreenCountParam param); + Page rightEventOpen(LargeScreenCountParam param); + + List rightImportUser(LargeScreenCountParam param); } 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 59bec051..37c2ab1a 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 @@ -1,8 +1,12 @@ package com.njcn.gather.event.transientes.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.gather.event.devcie.pojo.dto.LedgerBaseInfoDTO; import com.njcn.gather.event.devcie.pojo.po.PqLine; import com.njcn.gather.event.devcie.service.PqLineService; import com.njcn.gather.event.transientes.mapper.PqUserLedgerMapper; @@ -14,8 +18,12 @@ import com.njcn.gather.event.transientes.pojo.po.PqUserLedgerPO; import com.njcn.gather.event.transientes.pojo.po.PqUserLineAssPO; import com.njcn.gather.event.transientes.pojo.po.PqsDicTreePO; import com.njcn.gather.event.transientes.pojo.po.PqsEventdetail; +import com.njcn.gather.event.transientes.pojo.vo.EventDetailVO; +import com.njcn.gather.event.transientes.pojo.vo.LedgerCountVO; import com.njcn.gather.event.transientes.pojo.vo.UserLedgerStatisticVO; import com.njcn.gather.event.transientes.service.*; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.web.factory.PageFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -48,6 +56,11 @@ public class EventRightServiceImpl implements EventRightService { private final PqLineService pqLineService; private final CommGeneralService commGeneralService; + private final RedisUtil redisUtil; + + private final static String NAME_KEY = "LineCache:"; + + @Override public UserLedgerStatisticVO userLedgerStatistic(LargeScreenCountParam param) { @@ -63,7 +76,7 @@ public class EventRightServiceImpl implements EventRightService { //获取字典树 List dicTreeList = pqsDicTreeMapper.selectList(new LambdaQueryWrapper<>()); - List touList = dicTreeList.stream().filter(it -> Objects.equals(it.getParentId(), "0")).collect(Collectors.toList()); + List touList = dicTreeList.stream().filter(it -> Objects.equals(it.getCode(), DicTreeEnum.BJ_USER.getCode())||Objects.equals(it.getCode(), DicTreeEnum.OI_USER.getCode())||Objects.equals(it.getCode(), DicTreeEnum.OT_USER.getCode())).collect(Collectors.toList()); Map treeMap = touList.stream().collect(Collectors.toMap(PqsDicTreePO::getCode, Function.identity())); Map dicTreeMap = dicTreeList.stream().collect(Collectors.toMap(PqsDicTreePO::getId, Function.identity())); @@ -139,11 +152,77 @@ public class EventRightServiceImpl implements EventRightService { return result; } + @Override + public Page rightEventOpen(LargeScreenCountParam param) { + Page result = new Page<>(PageFactory.getPageNum(param),PageFactory.getPageSize(param)); + List deptLineIds = commGeneralService.getLineIdsByRedis(param.getDeptId()); + + List assList = pqUserLineAssMapper.selectList(new LambdaQueryWrapper().in(PqUserLineAssPO::getLineIndex,deptLineIds)); + List userIds = assList.stream().map(PqUserLineAssPO::getUserIndex).distinct().collect(Collectors.toList()); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(PqUserLedgerPO::getId,userIds); + if(StrUtil.isNotBlank(param.getBigObjType())){ + //对象大类不为空 + lambdaQueryWrapper.eq(PqUserLedgerPO::getBigObjType,param.getBigObjType()); + } + if(StrUtil.isNotBlank(param.getSmallObjType())){ + //对象大类不为空 + lambdaQueryWrapper.eq(PqUserLedgerPO::getSmallObjType,param.getSmallObjType()); + } + List pqUserLedgerPOList = pqUserLedgerMapper.selectList(lambdaQueryWrapper); + Map pqMap = pqUserLedgerPOList.stream().collect(Collectors.toMap(PqUserLedgerPO::getId,Function.identity())); + List pUserIds = pqUserLedgerPOList.stream().map(PqUserLedgerPO::getId).collect(Collectors.toList()); + List lineUseList = assList.stream().filter(it->pUserIds.contains(it.getUserIndex())).map(PqUserLineAssPO::getLineIndex).distinct().collect(Collectors.toList()); + + //查询时间段的暂降事件 + LambdaQueryWrapper eventQuery = new LambdaQueryWrapper<>(); + eventQuery.between(PqsEventdetail::getTimeid, DateUtil.parse(param.getSearchBeginTime()), DateUtil.endOfDay(DateUtil.parse(param.getSearchBeginTime()))) + .in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType()); + + if (lineUseList.size() > 1000) { + List> listLineIds = CollUtil.split(lineUseList, 1000); + eventQuery.and(w -> { + for (List ids : listLineIds) { + w.or(wIn -> wIn.in(PqsEventdetail::getLineid, ids)); + } + }); + } else { + eventQuery.in(PqsEventdetail::getLineid, lineUseList); + } + 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())); + Map> temMap = assList.stream().filter(it->ids.contains(it.getLineIndex())).collect(Collectors.groupingBy(PqUserLineAssPO::getLineIndex,Collectors.mapping(PqUserLineAssPO::getUserIndex,Collectors.toList()))); + + 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().peek(it->pqMap.get(it).getCustomerName()).collect(Collectors.joining(StrUtil.COMMA)); + eventDetailVO.setObjName(objName); + LedgerBaseInfoDTO dto = lineMap.get(pqsEventdetail.getLineid()); + eventDetailVO.setBdname(dto.getStationName()); + eventDetailVO.setLineid(dto.getLineId()); + resultList.add(eventDetailVO); + } + result.setTotal(page.getTotal()); + result.setRecords(resultList); + return result; + } + @Override public List rightImportUser(LargeScreenCountParam param) { List result = new ArrayList<>(); - List deptLineIds = commGeneralService.getLineIdsByDept(param); + List deptLineIds = commGeneralService.getLineIdsByRedis(param.getDeptId()); List poList = pqUserLedgerMapper.selectList(new LambdaQueryWrapper().eq(PqUserLedgerPO::getIsShow,1)); if(CollUtil.isEmpty(poList)){