北京需求优化

This commit is contained in:
hzj
2026-06-15 11:41:48 +08:00
parent 271c178a0f
commit e1f3dc5fa7
5 changed files with 144 additions and 3 deletions

View File

@@ -118,6 +118,7 @@ public class LargeScreenCountController extends BaseController {
@OperateInfo @OperateInfo
@PostMapping("/noDealEventList") @PostMapping("/noDealEventList")
@ApiOperation("未处理暂降事件列表") @ApiOperation("未处理暂降事件列表")
@Deprecated
@ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true)
public HttpResult<List<EventDetailVO>> noDealEventList(@RequestBody LargeScreenCountParam largeScreenCountParam) { public HttpResult<List<EventDetailVO>> noDealEventList(@RequestBody LargeScreenCountParam largeScreenCountParam) {
String methodDescribe = getMethodDescribe("noDealEventList"); String methodDescribe = getMethodDescribe("noDealEventList");
@@ -125,6 +126,15 @@ public class LargeScreenCountController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
} }
@OperateInfo @OperateInfo
@PostMapping("/noDealEventListMessage")
@ApiOperation("未处理暂降事件列表(短信)")
@ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true)
public HttpResult<List<MessageEventVO>> noDealEventListMessage(@RequestBody LargeScreenCountParam largeScreenCountParam) {
String methodDescribe = getMethodDescribe("noDealEventListMessage");
List<MessageEventVO> result = largeScreenCountService.noDealEventListMessage(largeScreenCountParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo
@PostMapping("/mapCount") @PostMapping("/mapCount")
@ApiOperation("地图统计") @ApiOperation("地图统计")
@ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true) @ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true)
@@ -138,6 +148,7 @@ public class LargeScreenCountController extends BaseController {
@OperateInfo(operateType= OperateType.UPDATE) @OperateInfo(operateType= OperateType.UPDATE)
@PostMapping("/lookEvent") @PostMapping("/lookEvent")
@ApiOperation("处理暂降事件") @ApiOperation("处理暂降事件")
@Deprecated
@ApiImplicitParam(name = "eventIds", value = "暂降事件id", required = true) @ApiImplicitParam(name = "eventIds", value = "暂降事件id", required = true)
public HttpResult<Boolean> lookEvent(@RequestBody List<String> eventIds) { public HttpResult<Boolean> lookEvent(@RequestBody List<String> eventIds) {
String methodDescribe = getMethodDescribe("lookEvent"); String methodDescribe = getMethodDescribe("lookEvent");
@@ -145,6 +156,16 @@ public class LargeScreenCountController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
} }
@OperateInfo(operateType= OperateType.UPDATE)
@PostMapping("/lookMessage")
@ApiOperation("处理推送消息")
@ApiImplicitParam(name = "eventIds", value = "暂降事件id", required = true)
public HttpResult<Boolean> lookMessage(@RequestBody List<String> messageIds) {
String methodDescribe = getMethodDescribe("lookMessage");
boolean result = largeScreenCountService.lookMessage(messageIds);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo @OperateInfo
@GetMapping("/eventMsgDetail") @GetMapping("/eventMsgDetail")
@ApiOperation("暂降事件列表详情按钮") @ApiOperation("暂降事件列表详情按钮")

View File

@@ -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<String> messageIds;
private List<String> eventIds;
private String messageContent;
private Integer needDealFlag;
}

View File

@@ -66,4 +66,8 @@ public interface LargeScreenCountService {
Page<EventDetailVO> userEventList(LargeScreenCountParam largeScreenCountParam); Page<EventDetailVO> userEventList(LargeScreenCountParam largeScreenCountParam);
void exportLineData(); void exportLineData();
List<MessageEventVO> noDealEventListMessage(LargeScreenCountParam largeScreenCountParam);
boolean lookMessage(List<String> eventIds);
} }

View File

@@ -551,6 +551,60 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
result = result.stream().sorted(Comparator.comparing(EventDetailVO::getTimeid)).collect(Collectors.toList()); result = result.stream().sorted(Comparator.comparing(EventDetailVO::getTimeid)).collect(Collectors.toList());
return result; return result;
} }
public Set<String> getAllParentDeptIds(Set<String> deptIds) {
// 首次获取直接父级
List<PqsDepts> allDeptList = pqsDeptsService.lambdaQuery().list();
// 递归获取所有父级
Set<String> result = recursivelyGetParentIds(deptIds, allDeptList);
return result;
}
private Set<String> recursivelyGetParentIds(Set<String> currentParentIds, List<PqsDepts> allDeptList) {
Set<String> result = new HashSet<>(currentParentIds);
Set<String> nextLevelParentIds = new HashSet<>();
List<PqsDepts> 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<String> deeperParentIds = recursivelyGetParentIds(nextLevelParentIds, allDeptList);
result.addAll(deeperParentIds);
}
return result;
}
@Override
public List<MessageEventVO> noDealEventListMessage(LargeScreenCountParam largeScreenCountParam) {
List<MessageEventVO> result = new ArrayList<>();
DateTime startTime = DateUtil.beginOfDay(DateUtil.parse(largeScreenCountParam.getSearchBeginTime()));
DateTime endTime = DateUtil.endOfDay(DateUtil.parse(largeScreenCountParam.getSearchEndTime()));
Set<String> resultIds = getAllParentDeptIds(Collections.singleton(largeScreenCountParam.getDeptId()));
List<PqsUserSet> list = pqsUsersetService.lambdaQuery().in(PqsUserSet::getDeptsIndex, resultIds).list();
if(CollectionUtils.isEmpty(list)){
return result;
}
List<String> userIds = list.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList());
List<MsgEventInfo> msgEventInfos = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getUserId, userIds).between(MsgEventInfo::getSendTime, startTime, endTime).ne(MsgEventInfo::getIsHandle,1).list();
Map<String, List<MsgEventInfo>> collect = msgEventInfos.stream().collect(Collectors.groupingBy(MsgEventInfo::getMsgContent));
collect.forEach((k,v)->{
MessageEventVO mesageEventVO = new MessageEventVO();
List<String> eventIds = v.stream().map(MsgEventInfo::getEventIndex).distinct().collect(Collectors.toList());
List<String> 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 @Override
public boolean lookEvent(List<String> ids) { public boolean lookEvent(List<String> ids) {
@@ -568,6 +622,22 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
} }
return true; return true;
} }
@Override
public boolean lookMessage(List<String> ids) {
if (ids.size() > 1000) {
List<List<String>> eventIds = CollUtil.split(ids, 1000);
for (List<String> needIds : eventIds) {
LambdaUpdateWrapper<MsgEventInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(MsgEventInfo::getMsgIndex, needIds).set(MsgEventInfo::getIsHandle, DataStateEnum.ENABLE.getCode());
msgEventInfoService.update(updateWrapper);
}
} else {
LambdaUpdateWrapper<MsgEventInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(MsgEventInfo::getMsgIndex, ids).set(MsgEventInfo::getIsHandle, DataStateEnum.ENABLE.getCode());
msgEventInfoService.update(updateWrapper);
}
return true;
}
@Override @Override
public List<MapCountVO> mapCount(LargeScreenCountParam largeScreenCountParam) { public List<MapCountVO> mapCount(LargeScreenCountParam largeScreenCountParam) {
@@ -1695,4 +1765,6 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
} }
} }

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.product.event.config.RedisUtil; import com.njcn.product.event.config.RedisUtil;
import com.njcn.product.event.devcie.pojo.dto.LedgerBaseInfoDTO; 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.pojo.po.*;
import com.njcn.product.event.transientes.service.*; import com.njcn.product.event.transientes.service.*;
import com.njcn.product.event.transientes.utils.SmsUtils; import com.njcn.product.event.transientes.utils.SmsUtils;
import com.njcn.product.event.transientes.websocket.WebSocketServer;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@@ -27,7 +29,6 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -54,6 +55,7 @@ public class SendMessageServiceImpl implements SendMessageService {
private final ThreadPoolTaskExecutor smsTaskExecutor; private final ThreadPoolTaskExecutor smsTaskExecutor;
private final PqsUsersetService pqsUsersetService; private final PqsUsersetService pqsUsersetService;
private final SmsUtils smsUtils; private final SmsUtils smsUtils;
private final WebSocketServer webSocketServer;
private final PqsDeptslineService pqsDeptslineService; private final PqsDeptslineService pqsDeptslineService;
@Value("${SYS_TYPE_ZT}") @Value("${SYS_TYPE_ZT}")
@@ -65,6 +67,7 @@ public class SendMessageServiceImpl implements SendMessageService {
@Override @Override
public void sendMessage(LocalDateTime threeHourAgo, LocalDateTime now) { public void sendMessage(LocalDateTime threeHourAgo, LocalDateTime now) {
log.info("开始扫描暂态事件时间段:"+threeHourAgo+"-"+now); log.info("开始扫描暂态事件时间段:"+threeHourAgo+"-"+now);
//查询重要敏感客户 //查询重要敏感客户
List<PqUserLedgerPO> poList = pqUserLedgerMapper.selectList(new LambdaQueryWrapper<PqUserLedgerPO>().select(PqUserLedgerPO::getId, PqUserLedgerPO::getCustomerName,PqUserLedgerPO::getIsShow).eq(PqUserLedgerPO::getIsShow, 1)); List<PqUserLedgerPO> poList = pqUserLedgerMapper.selectList(new LambdaQueryWrapper<PqUserLedgerPO>().select(PqUserLedgerPO::getId, PqUserLedgerPO::getCustomerName,PqUserLedgerPO::getIsShow).eq(PqUserLedgerPO::getIsShow, 1));
List<String> userIds = poList.stream().map(PqUserLedgerPO::getId).collect(Collectors.toList()); List<String> userIds = poList.stream().map(PqUserLedgerPO::getId).collect(Collectors.toList());
@@ -234,10 +237,15 @@ public class SendMessageServiceImpl implements SendMessageService {
return; return;
} }
List<PqsUser> pqsUserList = pqsUserService.lambdaQuery().select(PqsUser::getUserIndex, PqsUser::getPhone, PqsUser::getName).in(PqsUser::getUserIndex, pqsUserSetList.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList())).list(); List<PqsUser> 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)){ if(!CollectionUtils.isEmpty(pqsUserList)){
//开始发送短信 //开始发送短信
smsTaskExecutor.execute(() -> { 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<PqsUser> pqsUserList, List<String> eventdetailIndexs) { private void sendMessageforUser(String content, List<PqsUser> pqsUserList, List<String> eventdetailIndexs, Set<String> deptIds) {
//发送短信 //发送短信
List<MsgEventInfo> resultList = new ArrayList<>(); List<MsgEventInfo> resultList = new ArrayList<>();
@@ -296,6 +304,12 @@ public class SendMessageServiceImpl implements SendMessageService {
item.setSendResult(Objects.equals(smsItem.getCode(), "0") ? 1 : 0); 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); msgEventInfoService.saveBatch(resultList);
} }