北京手动发送短信需求
This commit is contained in:
@@ -10,6 +10,7 @@ import cn.hutool.core.util.IdUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.annotation.OperateInfo;
|
||||||
import com.njcn.common.pojo.enums.common.LogEnum;
|
import com.njcn.common.pojo.enums.common.LogEnum;
|
||||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||||
@@ -25,11 +26,13 @@ import com.njcn.product.event.devcie.service.PqsDeptslineService;
|
|||||||
import com.njcn.product.event.transientes.mapper.PqUserLedgerMapper;
|
import com.njcn.product.event.transientes.mapper.PqUserLedgerMapper;
|
||||||
import com.njcn.product.event.transientes.mapper.PqUserLineAssMapper;
|
import com.njcn.product.event.transientes.mapper.PqUserLineAssMapper;
|
||||||
import com.njcn.product.event.transientes.mapper.PqsEventdetailMapper;
|
import com.njcn.product.event.transientes.mapper.PqsEventdetailMapper;
|
||||||
|
import com.njcn.product.event.transientes.pojo.dto.MessaeDTO;
|
||||||
import com.njcn.product.event.transientes.pojo.dto.SmsResponseDTO;
|
import com.njcn.product.event.transientes.pojo.dto.SmsResponseDTO;
|
||||||
import com.njcn.product.event.transientes.pojo.dto.SmsSendDTO;
|
import com.njcn.product.event.transientes.pojo.dto.SmsSendDTO;
|
||||||
import com.njcn.product.event.transientes.pojo.dto.UpLoadEvent;
|
import com.njcn.product.event.transientes.pojo.dto.UpLoadEvent;
|
||||||
import com.njcn.product.event.transientes.pojo.param.MonitorTerminalParam;
|
import com.njcn.product.event.transientes.pojo.param.MonitorTerminalParam;
|
||||||
import com.njcn.product.event.transientes.pojo.po.*;
|
import com.njcn.product.event.transientes.pojo.po.*;
|
||||||
|
import com.njcn.product.event.transientes.pojo.vo.EventDetailVO;
|
||||||
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 com.njcn.product.event.transientes.websocket.WebSocketServer;
|
||||||
@@ -131,7 +134,7 @@ public class EventGateController extends BaseController {
|
|||||||
&& (Float.parseFloat(jsonObject.get("persisttime").toString()) * 1000) >= msgEventConfigService.getEventDuration()) {
|
&& (Float.parseFloat(jsonObject.get("persisttime").toString()) * 1000) >= msgEventConfigService.getEventDuration()) {
|
||||||
//过滤重要暂降事件
|
//过滤重要暂降事件
|
||||||
//F47过滤
|
//F47过滤
|
||||||
float eventvalue = Float.parseFloat(jsonObject.get("eventvalue").toString());
|
float eventvalue = Float.parseFloat(jsonObject.get("eventvalue").toString())*100;
|
||||||
float persisttime = Float.parseFloat(jsonObject.get("persisttime").toString()) * 1000;
|
float persisttime = Float.parseFloat(jsonObject.get("persisttime").toString()) * 1000;
|
||||||
if(shouldSendSMS(eventvalue,persisttime)){
|
if(shouldSendSMS(eventvalue,persisttime)){
|
||||||
Integer lineId = Integer.valueOf(jsonObject.get("lineid").toString());
|
Integer lineId = Integer.valueOf(jsonObject.get("lineid").toString());
|
||||||
@@ -197,7 +200,7 @@ public class EventGateController extends BaseController {
|
|||||||
|
|
||||||
|
|
||||||
// 条件1: 电压降至50%以下,持续时间超过20ms
|
// 条件1: 电压降至50%以下,持续时间超过20ms
|
||||||
if (value < 0.5 && time >= 20) {
|
if (value < 50 && time >= 20) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,6 +411,59 @@ public class EventGateController extends BaseController {
|
|||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OperateInfo
|
||||||
|
@PostMapping("/messageGenerate")
|
||||||
|
@ApiOperation("暂降事件短信内容生成")
|
||||||
|
public HttpResult<MessaeDTO> messageGenerate(@RequestParam String eventId) {
|
||||||
|
String methodDescribe = getMethodDescribe("messageGenerate");
|
||||||
|
MessaeDTO result = eventGateService.messageGenerate(eventId);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||||
|
}
|
||||||
|
@OperateInfo
|
||||||
|
@PostMapping("/messageSend")
|
||||||
|
@ApiOperation("短信发送")
|
||||||
|
public HttpResult<List<MsgEventInfo>> messageSend(@RequestBody MessaeDTO messaeDTO) {
|
||||||
|
String methodDescribe = getMethodDescribe("messageGenerate");
|
||||||
|
List<MsgEventInfo> resultList = new ArrayList<>();
|
||||||
|
List<SmsSendDTO.ItemInner> msgDTOList = new ArrayList<>();
|
||||||
|
for (PqsUser user : messaeDTO.getPqsUsers()) {
|
||||||
|
String msgId = IdUtil.simpleUUID();
|
||||||
|
|
||||||
|
SmsSendDTO.ItemInner dto = new SmsSendDTO.ItemInner();
|
||||||
|
dto.setContent(messaeDTO.getMessage());
|
||||||
|
dto.setTo(user.getPhone());
|
||||||
|
dto.setCustomMsgID(msgId);
|
||||||
|
msgDTOList.add(dto);
|
||||||
|
|
||||||
|
MsgEventInfo msgEventInfo = new MsgEventInfo();
|
||||||
|
msgEventInfo.setMsgIndex(msgId);
|
||||||
|
msgEventInfo.setMsgContent(messaeDTO.getMessage());
|
||||||
|
msgEventInfo.setPhone(user.getPhone());
|
||||||
|
msgEventInfo.setUserId(user.getUserIndex());
|
||||||
|
msgEventInfo.setUserName(user.getName());
|
||||||
|
msgEventInfo.setIsHandle(0);
|
||||||
|
msgEventInfo.setSendResult(0);
|
||||||
|
msgEventInfo.setSendTime(LocalDateTime.now());
|
||||||
|
msgEventInfo.setEventIndex(messaeDTO.getEventId());
|
||||||
|
resultList.add(msgEventInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SmsResponseDTO.SmsItem> result = smsUtils.sendSmSToUser(msgDTOList);
|
||||||
|
Map<String, SmsResponseDTO.SmsItem> stringSmsItemMap = result.stream().collect(Collectors.toMap(SmsResponseDTO.SmsItem::getCustomMsgID, Function.identity()));
|
||||||
|
|
||||||
|
resultList.forEach(item -> {
|
||||||
|
if (stringSmsItemMap.containsKey(item.getMsgIndex())) {
|
||||||
|
SmsResponseDTO.SmsItem smsItem = stringSmsItemMap.get(item.getMsgIndex());
|
||||||
|
item.setSendResult(Objects.equals(smsItem.getCode(), "0") ? 1 : 0);
|
||||||
|
item.setIsHandle(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
msgEventInfoService.saveBatch(resultList);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, resultList, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void sendMessage(JSONObject jsonObject, String objStr) {
|
private void sendMessage(JSONObject jsonObject, String objStr) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
|||||||
import com.njcn.common.pojo.response.HttpResult;
|
import com.njcn.common.pojo.response.HttpResult;
|
||||||
import com.njcn.product.event.dataTransmit.DataSynchronization;
|
import com.njcn.product.event.dataTransmit.DataSynchronization;
|
||||||
import com.njcn.product.event.devcie.pojo.dto.DeviceDTO;
|
import com.njcn.product.event.devcie.pojo.dto.DeviceDTO;
|
||||||
|
import com.njcn.product.event.transientes.pojo.dto.MessaeDTO;
|
||||||
import com.njcn.product.event.transientes.pojo.param.LargeScreenCountParam;
|
import com.njcn.product.event.transientes.pojo.param.LargeScreenCountParam;
|
||||||
import com.njcn.product.event.transientes.pojo.param.MessageEventFeedbackParam;
|
import com.njcn.product.event.transientes.pojo.param.MessageEventFeedbackParam;
|
||||||
import com.njcn.product.event.transientes.pojo.po.MsgEventInfo;
|
import com.njcn.product.event.transientes.pojo.po.MsgEventInfo;
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.njcn.product.event.transientes.pojo.dto;
|
||||||
|
|
||||||
|
import com.njcn.product.event.transientes.pojo.po.PqsUser;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Date: 2026/06/22 上午 10:34【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MessaeDTO {
|
||||||
|
private String message;
|
||||||
|
private String eventId;
|
||||||
|
|
||||||
|
private List<PqsUser> pqsUsers;
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,6 +37,12 @@ public class LargeScreenCountParam extends BaseParam {
|
|||||||
private LocalDate startTime;
|
private LocalDate startTime;
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
private LocalDate endTime;
|
private LocalDate endTime;
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime startDateTime;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime endTDateime;
|
||||||
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "字典树 对象大类")
|
@ApiModelProperty(value = "字典树 对象大类")
|
||||||
private String bigObjType;
|
private String bigObjType;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.njcn.product.event.transientes.service;
|
package com.njcn.product.event.transientes.service;
|
||||||
|
|
||||||
import com.njcn.event.file.pojo.dto.WaveDataDTO;
|
import com.njcn.event.file.pojo.dto.WaveDataDTO;
|
||||||
|
import com.njcn.product.event.transientes.pojo.dto.MessaeDTO;
|
||||||
import com.njcn.product.event.transientes.pojo.param.MonitorTerminalParam;
|
import com.njcn.product.event.transientes.pojo.param.MonitorTerminalParam;
|
||||||
|
|
||||||
public interface EventGateService {
|
public interface EventGateService {
|
||||||
@@ -12,4 +13,6 @@ public interface EventGateService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
WaveDataDTO getTransientAnalyseWave(MonitorTerminalParam param);
|
WaveDataDTO getTransientAnalyseWave(MonitorTerminalParam param);
|
||||||
|
|
||||||
|
MessaeDTO messageGenerate(String eventId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,42 @@
|
|||||||
package com.njcn.product.event.transientes.service.impl;
|
package com.njcn.product.event.transientes.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
import com.njcn.event.file.component.WaveFileComponent;
|
import com.njcn.event.file.component.WaveFileComponent;
|
||||||
import com.njcn.event.file.pojo.dto.WaveDataDTO;
|
import com.njcn.event.file.pojo.dto.WaveDataDTO;
|
||||||
import com.njcn.event.file.pojo.enums.WaveFileResponseEnum;
|
import com.njcn.event.file.pojo.enums.WaveFileResponseEnum;
|
||||||
|
import com.njcn.product.event.config.RedisUtil;
|
||||||
import com.njcn.product.event.devcie.mapper.PqLinedetailMapper;
|
import com.njcn.product.event.devcie.mapper.PqLinedetailMapper;
|
||||||
|
import com.njcn.product.event.devcie.pojo.dto.LedgerBaseInfoDTO;
|
||||||
import com.njcn.product.event.devcie.pojo.po.PqDevice;
|
import com.njcn.product.event.devcie.pojo.po.PqDevice;
|
||||||
import com.njcn.product.event.devcie.pojo.po.PqLine;
|
import com.njcn.product.event.devcie.pojo.po.PqLine;
|
||||||
import com.njcn.product.event.devcie.pojo.po.PqLinedetail;
|
import com.njcn.product.event.devcie.pojo.po.PqLinedetail;
|
||||||
|
import com.njcn.product.event.devcie.pojo.po.PqsDeptsline;
|
||||||
import com.njcn.product.event.devcie.service.PqDeviceService;
|
import com.njcn.product.event.devcie.service.PqDeviceService;
|
||||||
import com.njcn.product.event.devcie.service.PqLineService;
|
import com.njcn.product.event.devcie.service.PqLineService;
|
||||||
|
import com.njcn.product.event.devcie.service.PqsDeptslineService;
|
||||||
|
import com.njcn.product.event.transientes.mapper.PqUserLedgerMapper;
|
||||||
|
import com.njcn.product.event.transientes.mapper.PqUserLineAssMapper;
|
||||||
|
import com.njcn.product.event.transientes.pojo.dto.MessaeDTO;
|
||||||
import com.njcn.product.event.transientes.pojo.param.MonitorTerminalParam;
|
import com.njcn.product.event.transientes.pojo.param.MonitorTerminalParam;
|
||||||
import com.njcn.product.event.transientes.pojo.po.PqsEventdetail;
|
import com.njcn.product.event.transientes.pojo.po.*;
|
||||||
import com.njcn.product.event.transientes.service.EventGateService;
|
import com.njcn.product.event.transientes.service.*;
|
||||||
import com.njcn.product.event.transientes.service.PqsEventdetailService;
|
|
||||||
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;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Objects;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: cdf
|
* @Author: cdf
|
||||||
@@ -38,6 +53,17 @@ public class EventGateServiceImpl implements EventGateService {
|
|||||||
private final WaveFileComponent waveFileComponent;
|
private final WaveFileComponent waveFileComponent;
|
||||||
private final PqLineService pqLineService;
|
private final PqLineService pqLineService;
|
||||||
private final PqLinedetailMapper pqLinedetailMapper;
|
private final PqLinedetailMapper pqLinedetailMapper;
|
||||||
|
private final PqsDeptslineService pqsDeptslineService;
|
||||||
|
private final PqsDeptsService pqsDeptsService;
|
||||||
|
private final PqsUsersetService pqsUsersetService;
|
||||||
|
private final PqsUserService pqsUserService;
|
||||||
|
private final PqUserLineAssMapper pqUserLineAssMapper;
|
||||||
|
private final PqUserLedgerMapper pqUserLedgerMapper;
|
||||||
|
|
||||||
|
private final static String NAME_KEY = "LineCache:";
|
||||||
|
private final RedisUtil redisUtil;
|
||||||
|
@Value("${SYS_TYPE_ZT}")
|
||||||
|
private String sysTypeZt;
|
||||||
@Value("${business.wavePath}")
|
@Value("${business.wavePath}")
|
||||||
private String WAVEPATH;
|
private String WAVEPATH;
|
||||||
|
|
||||||
@@ -80,4 +106,104 @@ public class EventGateServiceImpl implements EventGateService {
|
|||||||
return waveDataDTO;
|
return waveDataDTO;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessaeDTO messageGenerate(String eventId) {
|
||||||
|
MessaeDTO messaeDTO = new MessaeDTO();
|
||||||
|
messaeDTO.setEventId(eventId);
|
||||||
|
PqsEventdetail eventDetail = pqsEventdetailService.getById(eventId);
|
||||||
|
Double eventvalue = eventDetail.getEventvalue();
|
||||||
|
BigDecimal eventvalueFormmat = new BigDecimal(eventvalue).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
|
Double persisttime = eventDetail.getPersisttime();
|
||||||
|
BigDecimal persisttimeFormmat = new BigDecimal(persisttime).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
|
List<PqUserLineAssPO> assList = pqUserLineAssMapper.selectList(new LambdaQueryWrapper<PqUserLineAssPO>().eq(PqUserLineAssPO::getLineIndex, eventDetail.getLineid()));
|
||||||
|
String str ;
|
||||||
|
if (CollUtil.isNotEmpty(assList)) {
|
||||||
|
List<String> userIds = assList.stream().map(PqUserLineAssPO::getUserIndex).distinct().collect(Collectors.toList());
|
||||||
|
List<PqUserLedgerPO> poList = pqUserLedgerMapper.selectList(new LambdaQueryWrapper<PqUserLedgerPO>().select(PqUserLedgerPO::getId, PqUserLedgerPO::getCustomerName,PqUserLedgerPO::getIsShow).in(PqUserLedgerPO::getId, userIds));
|
||||||
|
String sensitiveUser = poList.stream().map(PqUserLedgerPO::getCustomerName).collect(Collectors.joining(";"));
|
||||||
|
|
||||||
|
str ="影响用户:"+sensitiveUser+";";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
str = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
List<LedgerBaseInfoDTO> ledgerBaseInfoDTOS = (List<LedgerBaseInfoDTO>)redisUtil.getObjectByKey(NAME_KEY + StrUtil.DASHED+"LedgerBaseInfoDTO");
|
||||||
|
Map<Integer, LedgerBaseInfoDTO> LedgerBaseInfoDTOMap = ledgerBaseInfoDTOS.stream().collect(Collectors.toMap(LedgerBaseInfoDTO::getLineId, Function.identity()));
|
||||||
|
StringBuilder stringBuilder = new StringBuilder(LocalDateTimeUtil.format(eventDetail.getTimeid(), DatePattern.NORM_DATETIME_PATTERN));
|
||||||
|
stringBuilder.append(".").append(eventDetail.getMs().toString()).append(",").append(LedgerBaseInfoDTOMap.get(eventDetail.getLineid()).getStationName())
|
||||||
|
.append(LedgerBaseInfoDTOMap.get(eventDetail.getLineid()).getBusBarName())
|
||||||
|
// .append("_").append(jsonObject.get("pointname").toString())
|
||||||
|
.append("发生电压暂降事件,事件残余电压:").append(eventvalueFormmat).append("%,持续时间:").append(persisttimeFormmat).append("S;");
|
||||||
|
stringBuilder.append(str);
|
||||||
|
|
||||||
|
messaeDTO.setMessage(stringBuilder.toString());
|
||||||
|
List<PqsDeptsline> pqLineDept = pqsDeptslineService.lambdaQuery().eq(PqsDeptsline::getLineIndex, eventDetail.getLineid()).eq(PqsDeptsline::getSystype, sysTypeZt).list();
|
||||||
|
Set<String> deptIds = pqLineDept.stream().map(PqsDeptsline::getDeptsIndex).collect(Collectors.toSet());
|
||||||
|
Set<String> resultIds = getAllParentDeptIds(deptIds);
|
||||||
|
List<PqsUserSet> pqsUserSetList = pqsUsersetService.lambdaQuery().eq(PqsUserSet::getIsNotice, 1).in(PqsUserSet::getDeptsIndex, resultIds).list();
|
||||||
|
if (CollUtil.isEmpty(pqsUserSetList)) {
|
||||||
|
//当前事件未找到用户信息,判断为不需要发送短信用户
|
||||||
|
throw new BusinessException("当前事件暂无发送短信用户信息");
|
||||||
|
}
|
||||||
|
List<PqsUser> pqsUserList = pqsUserService.lambdaQuery().select(PqsUser::getUserIndex, PqsUser::getPhone, PqsUser::getName)
|
||||||
|
.in(PqsUser::getUserIndex, pqsUserSetList.stream().map(PqsUserSet::getUserIndex).collect(Collectors.toList())).list();
|
||||||
|
messaeDTO.setPqsUsers(pqsUserList);
|
||||||
|
return messaeDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean shouldSendSMS( Double value , Double time ) {
|
||||||
|
|
||||||
|
|
||||||
|
// 条件1: 电压降至50%以下,持续时间超过20ms
|
||||||
|
if (value < 50 && time >= 20) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 条件2: 电压降至50%—70%,持续时间超过200ms
|
||||||
|
if (value >= 50 && value < 70 && time >= 200) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 条件3: 电压降至70%—80%,持续时间超过500ms
|
||||||
|
if (value >= 70 && value <= 80 && time >= 500) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getAllParentDeptIds(Set<String> deptIds) {
|
||||||
|
// 首次获取直接父级
|
||||||
|
List<PqsDepts> allDeptList = pqsDeptsService.lambdaQuery().list();
|
||||||
|
// 递归获取所有父级
|
||||||
|
Set<String> result = recursivelyGetParentIds(deptIds, allDeptList);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 递归获取所有父级ID
|
||||||
|
*
|
||||||
|
* @param currentParentIds 当前层级的父级ID集合
|
||||||
|
* @return 所有层级的父级ID集合
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1196,8 +1196,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
|||||||
@Override
|
@Override
|
||||||
public Page<EventDetailVO> eventPage(LargeScreenCountParam largeScreenCountParam) {
|
public Page<EventDetailVO> eventPage(LargeScreenCountParam largeScreenCountParam) {
|
||||||
Page<PqsEventdetail> pqsEventdetailPage = new Page<>(largeScreenCountParam.getPageNum(), largeScreenCountParam.getPageSize());
|
Page<PqsEventdetail> pqsEventdetailPage = new Page<>(largeScreenCountParam.getPageNum(), largeScreenCountParam.getPageSize());
|
||||||
LocalDateTime startTime = largeScreenCountParam.getStartTime().atStartOfDay();
|
// LocalDateTime startTime = largeScreenCountParam.getStartTime().atStartOfDay();
|
||||||
LocalDateTime endTime = LocalDateTimeUtil.endOfDay(largeScreenCountParam.getEndTime().atStartOfDay());
|
// LocalDateTime endTime = LocalDateTimeUtil.endOfDay(largeScreenCountParam.getEndTime().atStartOfDay());
|
||||||
|
|
||||||
List<Integer> deptslineIds = commGeneralService.getLineIdsByRedis(largeScreenCountParam.getDeptId());
|
List<Integer> deptslineIds = commGeneralService.getLineIdsByRedis(largeScreenCountParam.getDeptId());
|
||||||
|
|
||||||
@@ -1206,7 +1206,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
|||||||
List<PqUserLineAssPO> assList = new ArrayList<>();
|
List<PqUserLineAssPO> assList = new ArrayList<>();
|
||||||
LambdaQueryWrapper<PqsEventdetail> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<PqsEventdetail> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper
|
queryWrapper
|
||||||
.between(PqsEventdetail::getTimeid, startTime, endTime)
|
// .between(PqsEventdetail::getTimeid, startTime, endTime)
|
||||||
.gt(PqsEventdetail::getPersisttime, msgEventConfigService.getEventDuration())
|
.gt(PqsEventdetail::getPersisttime, msgEventConfigService.getEventDuration())
|
||||||
.le(PqsEventdetail::getEventvalue, msgEventConfigService.getEventValue())
|
.le(PqsEventdetail::getEventvalue, msgEventConfigService.getEventValue())
|
||||||
.orderByDesc(PqsEventdetail::getTimeid);
|
.orderByDesc(PqsEventdetail::getTimeid);
|
||||||
@@ -1216,6 +1216,15 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
|||||||
} else {
|
} else {
|
||||||
queryWrapper.in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType());
|
queryWrapper.in(PqsEventdetail::getWavetype, msgEventConfigService.getEventType());
|
||||||
}
|
}
|
||||||
|
if(Objects.nonNull(largeScreenCountParam.getStartTime())&&Objects.nonNull(largeScreenCountParam.getEndTime())){
|
||||||
|
LocalDateTime startTime = largeScreenCountParam.getStartTime().atStartOfDay();
|
||||||
|
LocalDateTime endTime = LocalDateTimeUtil.endOfDay(largeScreenCountParam.getEndTime().atStartOfDay());
|
||||||
|
queryWrapper
|
||||||
|
.between(PqsEventdetail::getTimeid, startTime, endTime);
|
||||||
|
}
|
||||||
|
if (Objects.nonNull(largeScreenCountParam.getStartDateTime())&&Objects.nonNull(largeScreenCountParam.getEndTDateime())) {
|
||||||
|
queryWrapper.between(PqsEventdetail::getTimeid, largeScreenCountParam.getStartDateTime(),largeScreenCountParam.getEndTDateime());
|
||||||
|
}
|
||||||
|
|
||||||
if (Objects.nonNull(largeScreenCountParam.getEventDurationMin()) || Objects.nonNull(largeScreenCountParam.getEventDurationMax())) {
|
if (Objects.nonNull(largeScreenCountParam.getEventDurationMin()) || Objects.nonNull(largeScreenCountParam.getEventDurationMax())) {
|
||||||
queryWrapper.gt(Objects.nonNull(largeScreenCountParam.getEventDurationMin()), PqsEventdetail::getPersisttime, largeScreenCountParam.getEventDurationMin());
|
queryWrapper.gt(Objects.nonNull(largeScreenCountParam.getEventDurationMin()), PqsEventdetail::getPersisttime, largeScreenCountParam.getEventDurationMin());
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class SendMessageServiceImpl implements SendMessageService {
|
|||||||
List<String> successSendEventIds = msgEventInfos.stream().map(MsgEventInfo::getEventIndex).distinct().collect(Collectors.toList());
|
List<String> successSendEventIds = msgEventInfos.stream().map(MsgEventInfo::getEventIndex).distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
pqsEventdetails = pqsEventdetails.stream()
|
pqsEventdetails = pqsEventdetails.stream()
|
||||||
.filter(temp -> shouldSendSMS(temp.getEventvalue(), temp.getPersisttime()) && (!successSendEventIds.contains(temp.getEventdetailIndex())))
|
.filter(temp -> shouldSendSMS(temp.getEventvalue()*100, temp.getPersisttime()) && (!successSendEventIds.contains(temp.getEventdetailIndex())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
log.info("扫描到敏感客户暂态事件过滤后事件:"+pqsEventdetails.size()+"条");
|
log.info("扫描到敏感客户暂态事件过滤后事件:"+pqsEventdetails.size()+"条");
|
||||||
|
|
||||||
@@ -348,7 +348,7 @@ public class SendMessageServiceImpl implements SendMessageService {
|
|||||||
|
|
||||||
|
|
||||||
// 条件1: 电压降至50%以下,持续时间超过20ms
|
// 条件1: 电压降至50%以下,持续时间超过20ms
|
||||||
if (value < 0.5 && time >= 20) {
|
if (value < 50 && time >= 20) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user