From 9c02a7cb8e837d58cbd186c912b53545b790a100 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Tue, 1 Jul 2025 21:00:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EventGateController.java | 176 +++++++++++++++--- .../transientes/filter/JwtRequestFilter.java | 4 +- .../pojo/po/MessageEventFeedback.java | 2 + .../transientes/pojo/vo/EventMsgDetailVO.java | 2 + .../transientes/security/AuthController.java | 2 +- 5 files changed, 152 insertions(+), 34 deletions(-) diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventGateController.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventGateController.java index 4f70b6e3..e639dc2e 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventGateController.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/controller/EventGateController.java @@ -1,7 +1,11 @@ package com.njcn.gather.event.transientes.controller; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +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.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -14,10 +18,9 @@ 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.MonitorTerminalParam; import com.njcn.gather.event.transientes.pojo.param.SimulationMsgParam; -import com.njcn.gather.event.transientes.pojo.po.PqsDepts; -import com.njcn.gather.event.transientes.pojo.po.PqsUser; -import com.njcn.gather.event.transientes.pojo.po.PqsUserSet; +import com.njcn.gather.event.transientes.pojo.po.*; import com.njcn.gather.event.transientes.service.*; +import com.njcn.gather.event.transientes.service.impl.MsgEventInfoServiceImpl; import com.njcn.gather.event.transientes.websocket.WebSocketServer; import com.njcn.web.controller.BaseController; import com.njcn.web.utils.HttpResultUtil; @@ -33,9 +36,10 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -50,6 +54,7 @@ import java.util.stream.Stream; @RequiredArgsConstructor @Slf4j public class EventGateController extends BaseController { + private final MsgEventInfoServiceImpl msgEventInfoServiceImpl; @Value("${SYS_TYPE_ZT}") private String sysTypeZt; @@ -69,6 +74,9 @@ public class EventGateController extends BaseController { private final MsgEventConfigService msgEventConfigService; + private final PqsEventdetailService pqsEventdetailService; + + private final MsgEventInfoService msgEventInfoService; @OperateInfo @@ -76,27 +84,106 @@ public class EventGateController extends BaseController { @ApiOperation("接收远程推送的暂态事件") @ApiImplicitParam(name = "eventMsg", value = "暂态事件json字符", required = true) public HttpResult eventMsg(@RequestParam("msg") String msg) { - System.out.println(msg); String methodDescribe = getMethodDescribe("eventMsg"); + System.out.println(msg); + JSONObject jsonObject; try { - jsonObject = new JSONObject(msg); - if(msgEventConfigService.getEventType().contains(jsonObject.get("wavetype").toString()) ){ - webSocketServer.sendMessageToAll(msg); + //下面一行代码正式环境需要放开 + //jsonObject = new JSONObject(msg); + //下面一行代码正式环境需要放开 + jsonObject = test(); + + if (msgEventConfigService.getEventType().contains(jsonObject.get("wavetype").toString())) { + webSocketServer.sendMessageToAll(jsonObject.toString()); } //开始发送短信 - // sendMessage(jsonObject); - }catch (Exception e){ - log.error("暂降json格式异常!{}",e.getMessage()); + sendMessage(jsonObject); + } catch (Exception e) { + log.error("暂降json格式异常!{}", e.getMessage()); } return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + //测试模拟,正式环境删除 + private PqsEventdetail createEvent(JSONObject jsonObject, LocalDateTime now) { + PqsEventdetail pqsEventdetail = new PqsEventdetail(); + pqsEventdetail.setEventdetailIndex(jsonObject.get("eventdetail_index").toString()); + pqsEventdetail.setLineid(Integer.valueOf(jsonObject.get("lineid").toString())); + pqsEventdetail.setTimeid(now); + pqsEventdetail.setMs(new BigDecimal(jsonObject.get("ms").toString())); + pqsEventdetail.setWavetype(Integer.valueOf(jsonObject.get("wavetype").toString())); + pqsEventdetail.setPersisttime(Double.valueOf(jsonObject.get("persisttime").toString())); + pqsEventdetail.setEventvalue(Double.valueOf(jsonObject.get("eventvalue").toString())); + pqsEventdetail.setEventreason(jsonObject.get("eventreason").toString()); + pqsEventdetail.setEventtype(jsonObject.get("eventtype").toString()); + + return pqsEventdetail; + } + + //测试模拟,正式环境删除 + private JSONObject test() { + /*----------------------------------------------------------------------------------------*/ + //以下部分为测试数据后续删除 + List pqLineList = pqLineMapper.selectList(new LambdaQueryWrapper<>()); + List lineList = pqLineList.stream().map(PqLine::getLineIndex).collect(Collectors.toList()); + List baseInfoDTOList = pqLineMapper.getBaseLineInfo(lineList); + Map map = baseInfoDTOList.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId, Function.identity())); + + Random random = new Random(); + Integer lineId = lineList.get(random.nextInt(lineList.size())); + LedgerBaseInfoDTO dto = map.get(lineId); + + LocalDateTime now = LocalDateTime.now(); + String timeStr = DateUtil.format(now, DatePattern.NORM_DATETIME_PATTERN); + Long ms = (long) random.nextInt(999); + + Integer[] temArr = new Integer[]{1, 3}; + Integer wave = random.nextInt(2); + + double min = 0.5; + double max = 10.0; + + // 生成 (0.5, 10.0) 范围内的随机小数 + Double perTem = min + (max - min) * Math.random(); + Double per = new BigDecimal(perTem).setScale(2, RoundingMode.HALF_UP).doubleValue(); + + double minV = 0.1; + double maxV = 0.9; + Double eventValue = minV + (maxV - minV) * Math.random(); + + String id = IdUtil.simpleUUID(); + + JSONObject tem = new JSONObject(); + tem.set("eventdetail_index", id); + tem.set("lineid", lineId.toString()); + tem.set("timeid", timeStr); + tem.set("ms", ms.toString()); + tem.set("wavetype", temArr[wave]); + tem.set("persisttime", per.toString()); + tem.set("eventvalue", eventValue); + tem.set("eventreason", "97a56e0f-b546-4c1e-b27c-52463fc1d82f"); + tem.set("eventtype", "676683a0-7f80-43e6-8df8-bea8ed235d67"); + tem.set("gdname", "测试供电公司"); + tem.set("bdname", dto.getStationName()); + tem.set("pointname", dto.getLineName()); + + PqsEventdetail pqsEventdetail = createEvent(tem, now); + if (msgEventConfigService.getEventType().contains(tem.get("wavetype").toString())) { + webSocketServer.sendMessageToAll(tem.toString()); + } + pqsEventdetailService.save(pqsEventdetail); + /*----------------------------------------------------------------------------------------*/ + + return tem; + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/getTransientAnalyseWave") @ApiOperation("暂态事件波形分析") - public HttpResult getTransientAnalyseWave(@RequestBody MonitorTerminalParam param){ + public HttpResult getTransientAnalyseWave(@RequestBody MonitorTerminalParam param) { String methodDescribe = getMethodDescribe("getTransientAnalyseWave"); WaveDataDTO wave = eventGateService.getTransientAnalyseWave(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, wave, methodDescribe); @@ -106,29 +193,27 @@ public class EventGateController extends BaseController { @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/simulationSend") @ApiOperation("模拟发送短信") - public HttpResult simulationSend(@RequestBody @Validated SimulationMsgParam param){ + public HttpResult simulationSend(@RequestBody @Validated SimulationMsgParam param) { String methodDescribe = getMethodDescribe("simulationSend"); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } - - - private void sendMessage(JSONObject jsonObject){ + private void sendMessage(JSONObject jsonObject) { Integer lineId = Integer.valueOf(jsonObject.get("lineid").toString()); - List pqLineDept = pqsDeptslineService.lambdaQuery().eq(PqsDeptsline::getLineIndex,lineId).eq(PqsDeptsline::getSystype,sysTypeZt).list(); + List pqLineDept = pqsDeptslineService.lambdaQuery().eq(PqsDeptsline::getLineIndex, lineId).eq(PqsDeptsline::getSystype, sysTypeZt).list(); Set deptIds = pqLineDept.stream().map(PqsDeptsline::getDeptsIndex).collect(Collectors.toSet()); Set resultIds = getAllParentDeptIds(deptIds); - List pqsUserSetList = pqsUsersetService.lambdaQuery().eq(PqsUserSet::getIsNotice,1).in(PqsUserSet::getDeptsIndex,resultIds).list(); - if(CollUtil.isEmpty(pqsUserSetList)){ + List pqsUserSetList = pqsUsersetService.lambdaQuery().eq(PqsUserSet::getIsNotice, 1).in(PqsUserSet::getDeptsIndex, resultIds).list(); + if (CollUtil.isEmpty(pqsUserSetList)) { //当前事件未找到用户信息,判断为不需要发送短信用户 return; } - List pqsUserList = pqsUserService.lambdaQuery().select(PqsUser::getUserIndex).in(PqsUser::getUserIndex,pqsUserSetList.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList())).list(); + List pqsUserList = pqsUserService.lambdaQuery().select(PqsUser::getUserIndex,PqsUser::getPhone,PqsUser::getName).in(PqsUser::getUserIndex, pqsUserSetList.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList())).list(); List userIds = pqsUserList.stream().map(PqsUser::getUserIndex).collect(Collectors.toList()); - List poList = pqsUserSetList.stream().filter(it->userIds.contains(it.getUserIndex())).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(poList)){ + List poList = pqsUserSetList.stream().filter(it -> userIds.contains(it.getUserIndex())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(poList)) { StringBuilder stringBuilder = new StringBuilder(jsonObject.get("timeid").toString()); List list = pqLineMapper.getBaseLineInfo(Stream.of(lineId).collect(Collectors.toList())); LedgerBaseInfoDTO ledgerBaseInfoDTO = list.get(0); @@ -136,36 +221,65 @@ public class EventGateController extends BaseController { stringBuilder.append(".").append(jsonObject.get("ms").toString()).append(", ").append(ledgerBaseInfoDTO.getStationName()).append(ledgerBaseInfoDTO.getLineName()) .append("发生暂降事件,事件特征幅值").append(bigDecimal).append("%,持续时间:").append(jsonObject.get("persisttime").toString()).append("S"); //TODO 发送短信 - System.out.println(stringBuilder); + // System.out.println(stringBuilder); + + List resultList = new ArrayList<>(); + for (PqsUser user : pqsUserList) { + MsgEventInfo msgEventInfo = new MsgEventInfo(); + msgEventInfo.setEventIndex(jsonObject.get("eventdetail_index").toString()); + msgEventInfo.setMsgContent(stringBuilder.toString()); + msgEventInfo.setMsgIndex(IdUtil.simpleUUID()); + msgEventInfo.setPhone(user.getPhone()); + msgEventInfo.setSendResult(0); + msgEventInfo.setUserId(user.getUserIndex()); + msgEventInfo.setUserName(user.getName()); + msgEventInfo.setIsHandle(0); + msgEventInfo.setSendTime(LocalDateTime.now()); + resultList.add(msgEventInfo); + } + msgEventInfoService.saveBatch(resultList); } } + /** + * 获取远程短信平台token + */ + private String apiToken() { + + return "token"; + } + + private boolean apiSend(){ + return false; + } + public Set getAllParentDeptIds(Set deptIds) { // 首次获取直接父级 List allDeptList = pqsDeptsService.lambdaQuery().list(); // 递归获取所有父级 - Set result = recursivelyGetParentIds(deptIds,allDeptList); + Set result = recursivelyGetParentIds(deptIds, allDeptList); return result; } /** * 递归获取所有父级ID + * * @param currentParentIds 当前层级的父级ID集合 * @return 所有层级的父级ID集合 */ - private Set recursivelyGetParentIds(Set currentParentIds,List allDeptList) { + 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")){ + 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); + Set deeperParentIds = recursivelyGetParentIds(nextLevelParentIds, allDeptList); result.addAll(deeperParentIds); } return result; diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/filter/JwtRequestFilter.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/filter/JwtRequestFilter.java index 9d990640..31c1557f 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/filter/JwtRequestFilter.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/filter/JwtRequestFilter.java @@ -45,11 +45,11 @@ public class JwtRequestFilter extends OncePerRequestFilter { try { username = jwtUtil.extractUsername(jwt); } catch (ExpiredJwtException e) { - e.printStackTrace(); + // e.printStackTrace(); sendErrorResponse(response,CommonResponseEnum.TOKEN_EXPIRE_JWT); return; } catch (Exception e) { - e.printStackTrace(); + // e.printStackTrace(); sendErrorResponse(response,CommonResponseEnum.PARSE_TOKEN_ERROR); return; } diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MessageEventFeedback.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MessageEventFeedback.java index b735f9d5..c699277d 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MessageEventFeedback.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/po/MessageEventFeedback.java @@ -6,6 +6,7 @@ package com.njcn.gather.event.transientes.pojo.po; * @Description: 暂降远程通知反馈 */ import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; @@ -23,6 +24,7 @@ public class MessageEventFeedback { private String influenceFactors; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date dealDate; private String dealScheme; diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/EventMsgDetailVO.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/EventMsgDetailVO.java index d8d4a582..c9acc436 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/EventMsgDetailVO.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/pojo/vo/EventMsgDetailVO.java @@ -1,5 +1,6 @@ package com.njcn.gather.event.transientes.pojo.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.njcn.gather.event.transientes.pojo.po.MsgEventInfo; import lombok.Data; @@ -20,6 +21,7 @@ public class EventMsgDetailVO { private String influenceFactors; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date dealDate; private String dealScheme; diff --git a/event_smart/src/main/java/com/njcn/gather/event/transientes/security/AuthController.java b/event_smart/src/main/java/com/njcn/gather/event/transientes/security/AuthController.java index c55cd853..d24eada9 100644 --- a/event_smart/src/main/java/com/njcn/gather/event/transientes/security/AuthController.java +++ b/event_smart/src/main/java/com/njcn/gather/event/transientes/security/AuthController.java @@ -35,7 +35,7 @@ public class AuthController extends BaseController { @ApiOperation("登录认证") public HttpResult createAuthenticationToken(@RequestBody AuthRequest authRequest) { String methodDescribe = getMethodDescribe("createAuthenticationToken"); - log.info("Authentication request - username: {}, password: {}",authRequest.getUsername(),authRequest.getPassword()); + //log.info("Authentication request - username: {}, password: {}",authRequest.getUsername(),authRequest.getPassword()); try { // 执行认证,内部会调用 UserDetailsService 加载用户信息 Authentication authentication = authenticationManager.authenticate(