From e1f3dc5fa717aa506ba7459044230eb2dea9abb1 Mon Sep 17 00:00:00 2001 From: hzj <826100833@qq.com> Date: Mon, 15 Jun 2026 11:41:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=97=E4=BA=AC=E9=9C=80=E6=B1=82=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LargeScreenCountController.java | 21 ++++++ .../transientes/pojo/vo/MessageEventVO.java | 30 ++++++++ .../service/LargeScreenCountService.java | 4 ++ .../impl/LargeScreenCountServiceImpl.java | 72 +++++++++++++++++++ .../service/impl/SendMessageServiceImpl.java | 20 +++++- 5 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 event_smart/src/main/java/com/njcn/product/event/transientes/pojo/vo/MessageEventVO.java diff --git a/event_smart/src/main/java/com/njcn/product/event/transientes/controller/LargeScreenCountController.java b/event_smart/src/main/java/com/njcn/product/event/transientes/controller/LargeScreenCountController.java index 7dceaf3..b2ba411 100644 --- a/event_smart/src/main/java/com/njcn/product/event/transientes/controller/LargeScreenCountController.java +++ b/event_smart/src/main/java/com/njcn/product/event/transientes/controller/LargeScreenCountController.java @@ -118,6 +118,7 @@ public class LargeScreenCountController extends BaseController { @OperateInfo @PostMapping("/noDealEventList") @ApiOperation("未处理暂降事件列表") + @Deprecated @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) public HttpResult> noDealEventList(@RequestBody LargeScreenCountParam largeScreenCountParam) { String methodDescribe = getMethodDescribe("noDealEventList"); @@ -125,6 +126,15 @@ public class LargeScreenCountController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } @OperateInfo + @PostMapping("/noDealEventListMessage") + @ApiOperation("未处理暂降事件列表(短信)") + @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) + public HttpResult> noDealEventListMessage(@RequestBody LargeScreenCountParam largeScreenCountParam) { + String methodDescribe = getMethodDescribe("noDealEventListMessage"); + List result = largeScreenCountService.noDealEventListMessage(largeScreenCountParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + @OperateInfo @PostMapping("/mapCount") @ApiOperation("地图统计") @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) @@ -138,6 +148,7 @@ public class LargeScreenCountController extends BaseController { @OperateInfo(operateType= OperateType.UPDATE) @PostMapping("/lookEvent") @ApiOperation("处理暂降事件") + @Deprecated @ApiImplicitParam(name = "eventIds", value = "暂降事件id", required = true) public HttpResult lookEvent(@RequestBody List eventIds) { String methodDescribe = getMethodDescribe("lookEvent"); @@ -145,6 +156,16 @@ public class LargeScreenCountController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @OperateInfo(operateType= OperateType.UPDATE) + @PostMapping("/lookMessage") + @ApiOperation("处理推送消息") + @ApiImplicitParam(name = "eventIds", value = "暂降事件id", required = true) + public HttpResult lookMessage(@RequestBody List messageIds) { + String methodDescribe = getMethodDescribe("lookMessage"); + boolean result = largeScreenCountService.lookMessage(messageIds); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + @OperateInfo @GetMapping("/eventMsgDetail") @ApiOperation("暂降事件列表详情按钮") diff --git a/event_smart/src/main/java/com/njcn/product/event/transientes/pojo/vo/MessageEventVO.java b/event_smart/src/main/java/com/njcn/product/event/transientes/pojo/vo/MessageEventVO.java new file mode 100644 index 0000000..28f8216 --- /dev/null +++ b/event_smart/src/main/java/com/njcn/product/event/transientes/pojo/vo/MessageEventVO.java @@ -0,0 +1,30 @@ +package com.njcn.product.event.transientes.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * Description: + * Date: 2025/06/20 下午 2:50【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +public class MessageEventVO { + private List messageIds; + + private List eventIds; + + + private String messageContent; + + + + private Integer needDealFlag; + +} diff --git a/event_smart/src/main/java/com/njcn/product/event/transientes/service/LargeScreenCountService.java b/event_smart/src/main/java/com/njcn/product/event/transientes/service/LargeScreenCountService.java index c9b2b23..5586309 100644 --- a/event_smart/src/main/java/com/njcn/product/event/transientes/service/LargeScreenCountService.java +++ b/event_smart/src/main/java/com/njcn/product/event/transientes/service/LargeScreenCountService.java @@ -66,4 +66,8 @@ public interface LargeScreenCountService { Page userEventList(LargeScreenCountParam largeScreenCountParam); void exportLineData(); + + List noDealEventListMessage(LargeScreenCountParam largeScreenCountParam); + + boolean lookMessage(List eventIds); } diff --git a/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/LargeScreenCountServiceImpl.java b/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/LargeScreenCountServiceImpl.java index 773def9..b0e70d8 100644 --- a/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/LargeScreenCountServiceImpl.java +++ b/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/LargeScreenCountServiceImpl.java @@ -551,6 +551,60 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { result = result.stream().sorted(Comparator.comparing(EventDetailVO::getTimeid)).collect(Collectors.toList()); return result; } + public Set getAllParentDeptIds(Set deptIds) { + // 首次获取直接父级 + List allDeptList = pqsDeptsService.lambdaQuery().list(); + // 递归获取所有父级 + Set result = recursivelyGetParentIds(deptIds, allDeptList); + return result; + } + private Set recursivelyGetParentIds(Set currentParentIds, List allDeptList) { + Set result = new HashSet<>(currentParentIds); + Set nextLevelParentIds = new HashSet<>(); + List parentDeptList = allDeptList.stream().filter(it -> currentParentIds.contains(it.getDeptsIndex())).collect(Collectors.toList()); + for (PqsDepts pqsDepts : parentDeptList) { + if (!pqsDepts.getParentnodeid().equals("0")) { + nextLevelParentIds.add(pqsDepts.getParentnodeid()); + } + } + // 如果有更高层级的父级,继续递归 + if (!nextLevelParentIds.isEmpty()) { + Set deeperParentIds = recursivelyGetParentIds(nextLevelParentIds, allDeptList); + result.addAll(deeperParentIds); + } + return result; + } + @Override + public List noDealEventListMessage(LargeScreenCountParam largeScreenCountParam) { + List result = new ArrayList<>(); + DateTime startTime = DateUtil.beginOfDay(DateUtil.parse(largeScreenCountParam.getSearchBeginTime())); + DateTime endTime = DateUtil.endOfDay(DateUtil.parse(largeScreenCountParam.getSearchEndTime())); + Set resultIds = getAllParentDeptIds(Collections.singleton(largeScreenCountParam.getDeptId())); + + List list = pqsUsersetService.lambdaQuery().in(PqsUserSet::getDeptsIndex, resultIds).list(); + if(CollectionUtils.isEmpty(list)){ + return result; + } + List userIds = list.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList()); + + List msgEventInfos = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getUserId, userIds).between(MsgEventInfo::getSendTime, startTime, endTime).ne(MsgEventInfo::getIsHandle,1).list(); + Map> collect = msgEventInfos.stream().collect(Collectors.groupingBy(MsgEventInfo::getMsgContent)); + collect.forEach((k,v)->{ + MessageEventVO mesageEventVO = new MessageEventVO(); + List eventIds = v.stream().map(MsgEventInfo::getEventIndex).distinct().collect(Collectors.toList()); + List messageIds = v.stream().map(MsgEventInfo::getMsgIndex).distinct().collect(Collectors.toList()); + + mesageEventVO.setMessageIds(messageIds); + mesageEventVO.setEventIds(eventIds); + mesageEventVO.setMessageContent(k); + result.add(mesageEventVO); + }); + +// result = result.stream().sorted(Comparator.comparing(EventDetailVO::getTimeid)).collect(Collectors.toList()); + return result; + } + + @Override public boolean lookEvent(List ids) { @@ -568,6 +622,22 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { } return true; } + @Override + public boolean lookMessage(List ids) { + if (ids.size() > 1000) { + List> eventIds = CollUtil.split(ids, 1000); + for (List needIds : eventIds) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(MsgEventInfo::getMsgIndex, needIds).set(MsgEventInfo::getIsHandle, DataStateEnum.ENABLE.getCode()); + msgEventInfoService.update(updateWrapper); + } + } else { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(MsgEventInfo::getMsgIndex, ids).set(MsgEventInfo::getIsHandle, DataStateEnum.ENABLE.getCode()); + msgEventInfoService.update(updateWrapper); + } + return true; + } @Override public List mapCount(LargeScreenCountParam largeScreenCountParam) { @@ -1695,4 +1765,6 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService { } + + } diff --git a/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/SendMessageServiceImpl.java b/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/SendMessageServiceImpl.java index e020891..48a3874 100644 --- a/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/SendMessageServiceImpl.java +++ b/event_smart/src/main/java/com/njcn/product/event/transientes/service/impl/SendMessageServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.njcn.product.event.config.RedisUtil; import com.njcn.product.event.devcie.pojo.dto.LedgerBaseInfoDTO; @@ -18,6 +19,7 @@ import com.njcn.product.event.transientes.pojo.dto.SmsSendDTO; import com.njcn.product.event.transientes.pojo.po.*; import com.njcn.product.event.transientes.service.*; import com.njcn.product.event.transientes.utils.SmsUtils; +import com.njcn.product.event.transientes.websocket.WebSocketServer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -27,7 +29,6 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.Duration; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; @@ -54,6 +55,7 @@ public class SendMessageServiceImpl implements SendMessageService { private final ThreadPoolTaskExecutor smsTaskExecutor; private final PqsUsersetService pqsUsersetService; private final SmsUtils smsUtils; + private final WebSocketServer webSocketServer; private final PqsDeptslineService pqsDeptslineService; @Value("${SYS_TYPE_ZT}") @@ -65,6 +67,7 @@ public class SendMessageServiceImpl implements SendMessageService { @Override public void sendMessage(LocalDateTime threeHourAgo, LocalDateTime now) { log.info("开始扫描暂态事件时间段:"+threeHourAgo+"-"+now); + //查询重要敏感客户 List poList = pqUserLedgerMapper.selectList(new LambdaQueryWrapper().select(PqUserLedgerPO::getId, PqUserLedgerPO::getCustomerName,PqUserLedgerPO::getIsShow).eq(PqUserLedgerPO::getIsShow, 1)); List userIds = poList.stream().map(PqUserLedgerPO::getId).collect(Collectors.toList()); @@ -234,10 +237,15 @@ public class SendMessageServiceImpl implements SendMessageService { return; } List pqsUserList = pqsUserService.lambdaQuery().select(PqsUser::getUserIndex, PqsUser::getPhone, PqsUser::getName).in(PqsUser::getUserIndex, pqsUserSetList.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList())).list(); +// JSONObject jsonObject = new JSONObject(); +// jsonObject.putOpt("messageContent", stringBuilder); +// jsonObject.putOpt("eventIds",result.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList()) ); +// webSocketServer.sendMessageToAll(jsonObject.toString()); + if(!CollectionUtils.isEmpty(pqsUserList)){ //开始发送短信 smsTaskExecutor.execute(() -> { - sendMessageforUser(stringBuilder.toString(), pqsUserList,eventdetailIndexs); + sendMessageforUser(stringBuilder.toString(), pqsUserList,eventdetailIndexs,resultIds); }); } @@ -252,7 +260,7 @@ public class SendMessageServiceImpl implements SendMessageService { } - private void sendMessageforUser(String content, List pqsUserList, List eventdetailIndexs) { + private void sendMessageforUser(String content, List pqsUserList, List eventdetailIndexs, Set deptIds) { //发送短信 List resultList = new ArrayList<>(); @@ -296,6 +304,12 @@ public class SendMessageServiceImpl implements SendMessageService { item.setSendResult(Objects.equals(smsItem.getCode(), "0") ? 1 : 0); } }); + JSONObject jsonObject = new JSONObject(); + jsonObject.putOpt("messageContent", content); + jsonObject.putOpt("dept", String.join(StrUtil.COMMA, deptIds)); + + jsonObject.putOpt("messageIds",resultList.stream().map(MsgEventInfo::getMsgIndex).collect(Collectors.toList()) ); + webSocketServer.sendMessageToAll(jsonObject.toString()); msgEventInfoService.saveBatch(resultList); }