Compare commits
14 Commits
2025-07
...
a0f6846f53
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0f6846f53 | ||
|
|
a177d7991c | ||
|
|
f8fb45cf6f | ||
|
|
910069a463 | ||
| 56477157aa | |||
| a6b0509179 | |||
|
|
b5e5286411 | ||
|
|
d01c0e14c0 | ||
|
|
0cf8bbc3d5 | ||
|
|
3a239b5123 | ||
|
|
0eabe977cb | ||
|
|
f1f86ea854 | ||
|
|
e048c92ad1 | ||
|
|
65f46a22f5 |
@@ -1,5 +1,6 @@
|
||||
package com.njcn.gather.detection.handler;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -1725,6 +1726,9 @@ public class SocketDevResponseService {
|
||||
|
||||
List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds());
|
||||
FormalTestManager.devList = pqDevList;
|
||||
FormalTestManager.devList.forEach(x -> {
|
||||
x.setDevType(x.getIcdType());
|
||||
});
|
||||
FormalTestManager.devMapMonitorNum = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, it -> it.getMonitorList().stream().map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList())));
|
||||
FormalTestManager.monitorIdListComm = pqDevList.stream().flatMap(x -> x.getMonitorList().stream()).map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList());
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.njcn.gather.detection.handler;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
|
||||
@@ -234,9 +235,9 @@ public class SocketSourceResponseService {
|
||||
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
|
||||
String s = param.getUserPageId() + DEV;
|
||||
//开始设备通讯检测(发送设备初始化)
|
||||
List<PreDetection> devList = iPqDevService.getDevInfo(param.getDevIds());
|
||||
//List<PreDetection> devList = iPqDevService.getDevInfo(param.getDevIds());
|
||||
Map<String, List<PreDetection>> map = new HashMap<>(1);
|
||||
map.put("deviceList", devList);
|
||||
map.put("deviceList", FormalTestManager.devList);
|
||||
String jsonString = JSON.toJSONString(map);
|
||||
socketMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue());
|
||||
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue());
|
||||
|
||||
@@ -10,6 +10,7 @@ import lombok.Getter;
|
||||
public enum DevReportStateEnum {
|
||||
NOT_GENERATED("未生成", 0),
|
||||
GENERATED("已生成", 1),
|
||||
GENERATED_UPLOADED("已生成且已上传", 3),
|
||||
UNCHECKED("未检", 2);
|
||||
|
||||
private final Integer value;
|
||||
|
||||
@@ -351,7 +351,6 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
||||
.like(StrUtil.isNotBlank(param.getName()), PqDev::getName, param.getName())
|
||||
.in(ObjectUtil.isNotEmpty(param.getCheckStateList()), PqDev::getCheckState, param.getCheckStateList())
|
||||
.eq(ObjectUtil.isNotNull(param.getCheckResult()), PqDev::getCheckResult, param.getCheckResult())
|
||||
.eq(ObjectUtil.isNotNull(param.getCheckResult()), PqDev::getCheckResult, param.getCheckResult())
|
||||
.eq(ObjectUtil.isNotNull(param.getReportState()), PqDev::getReportState, param.getReportState())
|
||||
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
|
||||
.orderByDesc(PqDev::getCreateTime)
|
||||
|
||||
@@ -156,4 +156,15 @@ public class ReportController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
|
||||
}
|
||||
}
|
||||
|
||||
@OperateInfo
|
||||
@PostMapping("/uploadReportToCloud")
|
||||
@ApiOperation("批量上传检测报告到云端")
|
||||
@ApiImplicitParam(name = "deviceIds", value = "被检设备ID列表,为空时上传所有已生成报告的设备", required = false)
|
||||
public HttpResult<Object> uploadReportToCloud(@RequestBody(required = false) List<String> deviceIds) {
|
||||
String methodDescribe = getMethodDescribe("uploadReportToCloud");
|
||||
LogUtil.njcnDebug(log, "{},设备ID列表为:{}", methodDescribe, deviceIds);
|
||||
pqReportService.uploadReportToCloud(deviceIds);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,11 @@ public interface IPqReportService extends IService<PqReport> {
|
||||
*/
|
||||
boolean documented(List<String> id);
|
||||
|
||||
|
||||
/**
|
||||
* 批量上传检测报告到云端
|
||||
*
|
||||
* @param deviceIds 被检设备ID列表,为空时上传所有已生成报告的设备
|
||||
*/
|
||||
void uploadReportToCloud(List<String> deviceIds);
|
||||
|
||||
}
|
||||
|
||||
@@ -102,6 +102,7 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -615,17 +616,30 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
||||
}
|
||||
out.close();
|
||||
this.updateDevAndPlanState(devReportParam.getDevId(), devReportParam.getPlanId());
|
||||
sendReportToCloud(pqDevVO.getIp(), reportFullPath, pqDevVO.getCreateId() + ".docx");
|
||||
// // 检测报告上云
|
||||
// Future<?> future = executor.submit(() -> {
|
||||
// sendReportToCloud(pqDevVO.getIp(), reportFullPath, pqDevVO.getCreateId() + ".docx");
|
||||
// });
|
||||
// try {
|
||||
// future.get();
|
||||
// } catch (Exception e) {
|
||||
// log.error("检测报告上云异常,异常为:"+e.getMessage());
|
||||
// }
|
||||
|
||||
// 异步将有效的二维码下装到被检设备
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
sendQrToDevice(pqDevVO.getIp(), pqDevVO.getCreateId() + ".docx");
|
||||
log.info("二维码下装成功,设备IP: {}", pqDevVO.getIp());
|
||||
} catch (Exception e) {
|
||||
log.error("二维码下装失败,设备IP: {}", pqDevVO.getIp(), e);
|
||||
}
|
||||
});
|
||||
// 异步将检测报告上传到云端,但是不一定成功,需要无线网支撑
|
||||
CompletableFuture.runAsync(() -> {
|
||||
File file = new File(reportFullPath);
|
||||
if (file.exists()) {
|
||||
try {
|
||||
ResponseEntity<String> responseEntity = restTemplateUtil.uploadFile(cloudUrl + "/upload", file);
|
||||
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
||||
// 将被检设备的报告状态改为已生成且已上传
|
||||
iPqDevService.updatePqDevReportState(devReportParam.getDevId(), DevReportStateEnum.GENERATED_UPLOADED.getValue());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("文件上传到云端失败", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
log.error(ReportResponseEnum.GENERATE_REPORT_ERROR.getMessage(), e);
|
||||
throw new BusinessException(ReportResponseEnum.GENERATE_REPORT_ERROR);
|
||||
@@ -633,6 +647,68 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void sendQrToDevice(String devIp, String reportName) {
|
||||
try {
|
||||
// 上传没问题后,拼接url生成二维码,并将二维码转为bin格式文件传递给设备通讯模块
|
||||
String qrUrl = cloudUrl + "/download/" + reportName;
|
||||
BufferedImage bufferedImage = QrCodeUtil.generate(qrUrl, 148, 148);
|
||||
// 将 BufferedImage 转换为单色图像
|
||||
BufferedImage monoImage = new BufferedImage(148, 148, BufferedImage.TYPE_BYTE_BINARY);
|
||||
Graphics2D g2d = monoImage.createGraphics();
|
||||
g2d.drawImage(bufferedImage, 0, 0, null);
|
||||
g2d.dispose();
|
||||
// 3. 【关键修正】创建一个新的1-bit单色图像,并将原始图像绘制上去,以强制转换为单色位图
|
||||
BufferedImage monochromeImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
|
||||
monochromeImage.getGraphics().drawImage(bufferedImage, 0, 0, null);
|
||||
// 4. 将单色图像在内存中编码为完整的BMP文件流
|
||||
byte[] finalBinData = ImageConverter.convertToBinFormat(bufferedImage);
|
||||
String base64String = Base64.getEncoder().encodeToString(finalBinData);
|
||||
|
||||
// 测试ftp是否连接成功
|
||||
|
||||
|
||||
// 组装设备通讯模块的参数
|
||||
SocketMsg<String> sendFileMsg = new SocketMsg<>();
|
||||
sendFileMsg.setOperateCode(SourceOperateCodeEnum.FTP_SEND_01.getValue());
|
||||
sendFileMsg.setRequestId(SourceOperateCodeEnum.FTP_SEND_01.getValue());
|
||||
|
||||
// 组装业务数据
|
||||
JSONObject data = new JSONObject();
|
||||
if (testFTPConnection(devIp, devPort, devName, devPsd)) {
|
||||
data.set("name", devName);
|
||||
data.set("password", devPsd);
|
||||
data.set("port", devPort);
|
||||
data.set("path", "ftp://" + devIp + devPath);
|
||||
} else if (testFTPConnection(devIp, gcDevPort, gcDevName, gcDevPsd)) {
|
||||
data.set("name", gcDevName);
|
||||
data.set("password", gcDevPsd);
|
||||
data.set("port", gcDevPort);
|
||||
data.set("path", "ftp://" + devIp + gcDevPath);
|
||||
} else {
|
||||
throw new BusinessException(ReportResponseEnum.FTP_CONNECTION_FAILED);
|
||||
}
|
||||
data.set("file", base64String);
|
||||
sendFileMsg.setData(data.toString());
|
||||
String msg = JSON.toJSONString(sendFileMsg);
|
||||
Channel channel = SocketManager.getChannelByUserId("cdf" + DetectionCommunicateConstant.DEV);
|
||||
if (Objects.isNull(channel) || !channel.isActive()) {
|
||||
// 进行源通信连接
|
||||
PreDetectionParam preDetectionParam = new PreDetectionParam();
|
||||
preDetectionParam.setUserPageId("cdf");
|
||||
preDetectionParam.setSendWebMsg(false);
|
||||
|
||||
NettyClient.socketClient(ip, port, preDetectionParam, msg, new NettyDevClientHandler(preDetectionParam, socketDevResponseService));
|
||||
} else {
|
||||
channel.writeAndFlush(msg + "\n");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 进行日志记录入口
|
||||
System.out.println("异常为:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 测试FTP连接
|
||||
*
|
||||
@@ -682,83 +758,6 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理检测报告上传云服务器并生成二维码下装到装置
|
||||
* 做成异步执行
|
||||
*
|
||||
* @param devIp 设备IP
|
||||
* @param reportFullPath 检测报告本地全路径
|
||||
* @param reportName 检测报告名称
|
||||
*/
|
||||
public void sendReportToCloud(String devIp, String reportFullPath, String reportName) {
|
||||
// 将文件上传至目标服务器
|
||||
File file = new File(reportFullPath);
|
||||
try {
|
||||
ResponseEntity<String> responseEntity = restTemplateUtil.uploadFile(cloudUrl + "/upload", file);
|
||||
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
||||
// 上传没问题后,拼接url生成二维码,并将二维码转为bin格式文件传递给设备通讯模块
|
||||
String qrUrl = cloudUrl + "/download/" + reportName;
|
||||
BufferedImage bufferedImage = QrCodeUtil.generate(qrUrl, 148, 148);
|
||||
// 将 BufferedImage 转换为单色图像
|
||||
BufferedImage monoImage = new BufferedImage(148, 148, BufferedImage.TYPE_BYTE_BINARY);
|
||||
Graphics2D g2d = monoImage.createGraphics();
|
||||
g2d.drawImage(bufferedImage, 0, 0, null);
|
||||
g2d.dispose();
|
||||
// 3. 【关键修正】创建一个新的1-bit单色图像,并将原始图像绘制上去,以强制转换为单色位图
|
||||
BufferedImage monochromeImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
|
||||
monochromeImage.getGraphics().drawImage(bufferedImage, 0, 0, null);
|
||||
// 4. 将单色图像在内存中编码为完整的BMP文件流
|
||||
byte[] finalBinData = ImageConverter.convertToBinFormat(bufferedImage);
|
||||
String base64String = Base64.getEncoder().encodeToString(finalBinData);
|
||||
|
||||
// 测试ftp是否连接成功
|
||||
|
||||
|
||||
// 组装设备通讯模块的参数
|
||||
SocketMsg<String> sendFileMsg = new SocketMsg<>();
|
||||
sendFileMsg.setOperateCode(SourceOperateCodeEnum.FTP_SEND_01.getValue());
|
||||
sendFileMsg.setRequestId(SourceOperateCodeEnum.FTP_SEND_01.getValue());
|
||||
|
||||
// 组装业务数据
|
||||
JSONObject data = new JSONObject();
|
||||
if (testFTPConnection(cloudUrl, devPort, devName, devPsd)) {
|
||||
data.set("name", devName);
|
||||
data.set("password", devPsd);
|
||||
data.set("port", devPort);
|
||||
data.set("path", "ftp://" + devIp + devPath);
|
||||
} else if (testFTPConnection(cloudUrl, gcDevPort, gcDevName, gcDevPsd)) {
|
||||
data.set("name", gcDevName);
|
||||
data.set("password", gcDevPsd);
|
||||
data.set("port", gcDevPort);
|
||||
data.set("path", "ftp://" + devIp + gcDevPath);
|
||||
} else {
|
||||
throw new BusinessException(ReportResponseEnum.FTP_CONNECTION_FAILED);
|
||||
}
|
||||
data.set("file", base64String);
|
||||
sendFileMsg.setData(data.toString());
|
||||
String msg = JSON.toJSONString(sendFileMsg);
|
||||
Channel channel = SocketManager.getChannelByUserId("cdf" + DetectionCommunicateConstant.DEV);
|
||||
if (Objects.isNull(channel) || !channel.isActive()) {
|
||||
// 进行源通信连接
|
||||
PreDetectionParam preDetectionParam = new PreDetectionParam();
|
||||
preDetectionParam.setUserPageId("cdf");
|
||||
preDetectionParam.setSendWebMsg(false);
|
||||
|
||||
NettyClient.socketClient(ip, port, preDetectionParam, msg, new NettyDevClientHandler(preDetectionParam, socketDevResponseService));
|
||||
} else {
|
||||
channel.writeAndFlush(msg + "\n");
|
||||
}
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 进行日志记录入口
|
||||
System.out.println("异常为:" + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据计划绑定的报告模板生成报告
|
||||
* 注:该方法目前属于同用信息占位符替换,数据页为面向对象动态填充拼凑方式
|
||||
@@ -1748,5 +1747,62 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uploadReportToCloud(List<String> deviceIds) {
|
||||
log.info("开始批量上传检测报告到云端,设备ID列表:{}", deviceIds);
|
||||
|
||||
// 查询条件:报告状态为已生成(1)的设备
|
||||
LambdaQueryWrapper<PqDev> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(PqDev::getReportState, DevReportStateEnum.GENERATED.getValue());
|
||||
|
||||
// 如果指定了设备ID列表,则只查询这些设备
|
||||
if (CollUtil.isNotEmpty(deviceIds)) {
|
||||
wrapper.in(PqDev::getId, deviceIds);
|
||||
}
|
||||
|
||||
List<PqDev> devices = iPqDevService.list(wrapper);
|
||||
|
||||
if (CollUtil.isEmpty(devices)) {
|
||||
log.warn("未找到符合条件的设备,无需上传");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("找到{}台设备需要上传报告", devices.size());
|
||||
String dirPath = reportPath;
|
||||
// 确保目录存在
|
||||
ensureDirectoryExists(dirPath);
|
||||
// 异步批量上传每台设备的报告
|
||||
CompletableFuture.runAsync(() -> {
|
||||
for (PqDev device : devices) {
|
||||
try {
|
||||
// 构建报告文件路径
|
||||
String fileName = device.getCreateId() + ".docx";
|
||||
String reportFullPath = dirPath.concat(File.separator).concat(device.getCreateId()).concat(".docx");
|
||||
File reportFile = new File(reportFullPath);
|
||||
|
||||
if (!reportFile.exists()) {
|
||||
log.warn("设备{}的报告文件不存在:{}", device.getId(), fileName);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 上传文件到云端
|
||||
ResponseEntity<String> responseEntity = restTemplateUtil.uploadFile(cloudUrl + "/upload", reportFile);
|
||||
|
||||
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
||||
// 更新设备报告状态为已生成且已上传
|
||||
iPqDevService.updatePqDevReportState(device.getId(), DevReportStateEnum.GENERATED_UPLOADED.getValue());
|
||||
log.info("设备{}报告上传成功", device.getId());
|
||||
} else {
|
||||
log.error("设备{}报告上传失败,HTTP状态码:{}", device.getId(), responseEntity.getStatusCode());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("设备{}报告上传异常", device.getId(), e);
|
||||
}
|
||||
}
|
||||
log.info("批量上传任务完成");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ spring:
|
||||
datasource:
|
||||
druid:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://192.168.1.24:13306/pqs91003?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
|
||||
url: jdbc:mysql://192.168.1.24:13306/pqs9100_2f?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
|
||||
username: root
|
||||
password: njcnpqs
|
||||
# url: jdbc:mysql://localhost:3306/pqs91001?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT
|
||||
|
||||
BIN
entrance/src/main/resources/model/NPQS-580.docx
Normal file
BIN
entrance/src/main/resources/model/NPQS-580.docx
Normal file
Binary file not shown.
BIN
entrance/src/main/resources/model/NPQS680.docx
Normal file
BIN
entrance/src/main/resources/model/NPQS680.docx
Normal file
Binary file not shown.
BIN
entrance/src/main/resources/model/PQV-700.docx
Normal file
BIN
entrance/src/main/resources/model/PQV-700.docx
Normal file
Binary file not shown.
@@ -38,6 +38,7 @@
|
||||
PQ_SUBVOLTAGE.name busBarName,
|
||||
pq_device.dev_index devId,
|
||||
pq_device.name devName,
|
||||
pq_device.Status runFlag,
|
||||
PQ_SUBSTATION.sub_index stationId,
|
||||
PQ_SUBSTATION.name stationName
|
||||
from
|
||||
|
||||
@@ -23,5 +23,6 @@ public class DeviceDTO {
|
||||
private LocalDateTime updateTime;
|
||||
private String devFlag;
|
||||
private String ip;
|
||||
//通讯状态
|
||||
private Integer runFlag=0;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ public class LedgerBaseInfoDTO {
|
||||
private Integer stationId;
|
||||
|
||||
private String stationName;
|
||||
//通讯状态
|
||||
private Integer runFlag=0;
|
||||
|
||||
private Integer runFlag=0;;
|
||||
|
||||
}
|
||||
|
||||
@@ -57,6 +57,15 @@ public class LargeScreenCountController extends BaseController {
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||
}
|
||||
@OperateInfo
|
||||
@PostMapping("/alarmAnalysisDetail")
|
||||
@ApiOperation("告警统计分析详情")
|
||||
@ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true)
|
||||
public HttpResult<AlarmAnalysisVO> alarmAnalysisDetail(@RequestBody LargeScreenCountParam largeScreenCountParam) {
|
||||
String methodDescribe = getMethodDescribe("alarmAnalysisDetail");
|
||||
AlarmAnalysisVO result = largeScreenCountService.alarmAnalysisDetail(largeScreenCountParam);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||
}
|
||||
@OperateInfo
|
||||
@PostMapping("/eventTrend")
|
||||
@ApiOperation("暂降事件趋势")
|
||||
@ApiImplicitParam(name = "largeScreenCountParam", value = "查询参数", required = true)
|
||||
|
||||
@@ -41,5 +41,5 @@ public interface LargeScreenCountService {
|
||||
boolean msgHandle(MessageEventFeedbackParam messageEventFeedbackParam);
|
||||
|
||||
|
||||
|
||||
AlarmAnalysisVO alarmAnalysisDetail(LargeScreenCountParam largeScreenCountParam);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package com.njcn.gather.event.transientes.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.njcn.gather.event.devcie.pojo.dto.LedgerBaseInfoDTO;
|
||||
import com.njcn.gather.event.transientes.pojo.po.MsgEventInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MsgEventInfoService extends IService<MsgEventInfo> {
|
||||
|
||||
List<MsgEventInfo> getMsgByIds(List<String> ids);
|
||||
}
|
||||
|
||||
@@ -125,7 +125,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
long runDevCount = runDevList.stream().count();
|
||||
List<Integer> runSubList = list.stream().map(PqDevice::getSubIndex).distinct().collect(Collectors.toList());
|
||||
long runSubCount = runSubList.stream().count();
|
||||
List<Integer> runLineList = pqLineList.stream().filter(temp->runDevList.contains(temp.getDevIndex())).map(PqLine::getLineIndex).collect(Collectors.toList());
|
||||
List<LedgerBaseInfoDTO> ledgerBaseInfoDTOS = pqLineService.getBaseLineInfo(allLineIds);
|
||||
List<Integer> runLineList = ledgerBaseInfoDTOS.stream().filter(temp->Objects.equals(temp.getRunFlag(),1)).map(LedgerBaseInfoDTO::getLineId).collect(Collectors.toList());
|
||||
|
||||
long runLineCount = runLineList.stream().count();
|
||||
|
||||
@@ -138,7 +139,6 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
ledgerCountVO.setRunSubCount(runSubCount);
|
||||
ledgerCountVO.setRunLineCount(runLineCount);
|
||||
|
||||
List<LedgerBaseInfoDTO> ledgerBaseInfoDTOS = pqLineService.getBaseLineInfo(allLineIds);
|
||||
ledgerBaseInfoDTOS.stream().forEach(temp->temp.setRunFlag(runLineList.contains(temp.getLineId())?1:0));
|
||||
ledgerCountVO.setAllLineList(ledgerBaseInfoDTOS);
|
||||
List<DeviceDTO> deviceDTOS = pqDeviceService.queryListByIds(devList);
|
||||
@@ -205,25 +205,12 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
Integer eventCount = eventdetails.size();
|
||||
// 告警
|
||||
List<PqsEventdetail> aLarmEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() < 0.5).collect(Collectors.toList());
|
||||
aLarmEvent.forEach(temp->temp.setEventSeverity(1));
|
||||
// 预警
|
||||
List<PqsEventdetail> warnEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() >= 0.5&& temp.getEventvalue() <0.9).collect(Collectors.toList());
|
||||
warnEvent.forEach(temp->temp.setEventSeverity(2));
|
||||
List<String> eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList());
|
||||
//通知
|
||||
List<MsgEventInfo> msgEventInfoList = new ArrayList<>();
|
||||
if(!CollectionUtils.isEmpty(eventIds)){
|
||||
if(eventIds.size()>1000){
|
||||
List<List<String>> listEven = CollUtil.split(eventIds,1000);
|
||||
for(List<String> pList: listEven){
|
||||
List<MsgEventInfo> temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,pList).list();
|
||||
msgEventInfoList.addAll(temp);
|
||||
}
|
||||
}else {
|
||||
List<MsgEventInfo> temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,eventIds).list();
|
||||
msgEventInfoList.addAll(temp);
|
||||
}
|
||||
}
|
||||
|
||||
List<MsgEventInfo> msgEventInfoList =msgEventInfoService.getMsgByIds(eventIds);
|
||||
msgEventInfoList = msgEventInfoList.stream().sorted(Comparator.comparing(MsgEventInfo::getSendTime,Comparator.reverseOrder())).collect(Collectors.toList());
|
||||
|
||||
|
||||
@@ -247,14 +234,14 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
alarmAnalysisVO.setLookWarnCount(lookWarnCount);
|
||||
alarmAnalysisVO.setLookNoticeCount(lookNoticeCount);
|
||||
|
||||
|
||||
alarmAnalysisVO.setEventdetails(change(eventdetails,msgEventInfoList));
|
||||
alarmAnalysisVO.setALarmEvent(change(aLarmEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setWarnEvent(change(warnEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setNoticeEvent(msgEventInfoList);
|
||||
alarmAnalysisVO.setLookALarmEvent(change(lookALarmEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setLookWarnEvent(change(lookWarnEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setLookNoticeEvent(handleMsg);
|
||||
//
|
||||
// alarmAnalysisVO.setEventdetails(change(eventdetails,msgEventInfoList));
|
||||
// alarmAnalysisVO.setALarmEvent(change(aLarmEvent,msgEventInfoList));
|
||||
// alarmAnalysisVO.setWarnEvent(change(warnEvent,msgEventInfoList));
|
||||
// alarmAnalysisVO.setNoticeEvent(msgEventInfoList);
|
||||
// alarmAnalysisVO.setLookALarmEvent(change(lookALarmEvent,msgEventInfoList));
|
||||
// alarmAnalysisVO.setLookWarnEvent(change(lookWarnEvent,msgEventInfoList));
|
||||
// alarmAnalysisVO.setLookNoticeEvent(handleMsg);
|
||||
|
||||
|
||||
|
||||
@@ -314,20 +301,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
if (Objects.equals(largeScreenCountParam.getEventtype(), 1)) {
|
||||
List<String> eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList());
|
||||
//通知
|
||||
List<MsgEventInfo> msgEventInfoList = new ArrayList<>();
|
||||
if(!CollectionUtils.isEmpty(eventIds)){
|
||||
if(eventIds.size()>1000){
|
||||
List<List<String>> listEven = CollUtil.split(eventIds,1000);
|
||||
for(List<String> pList: listEven){
|
||||
List<MsgEventInfo> temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,pList).list();
|
||||
msgEventInfoList.addAll(temp);
|
||||
}
|
||||
}else {
|
||||
List<MsgEventInfo> temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,eventIds).list();
|
||||
msgEventInfoList.addAll(temp);
|
||||
}
|
||||
|
||||
}
|
||||
List<MsgEventInfo> msgEventInfoList =msgEventInfoService.getMsgByIds(eventIds);
|
||||
// 使用 for 循环处理日期范围
|
||||
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
|
||||
EventTrendVO eventTrendVO = new EventTrendVO();
|
||||
@@ -613,7 +587,8 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
List<String> eveIdndex = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList());
|
||||
List<MsgEventInfo> temp = new ArrayList<>();
|
||||
if(!CollectionUtils.isEmpty(eveIdndex)){
|
||||
temp = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex,eveIdndex).list();
|
||||
temp =msgEventInfoService.getMsgByIds(eveIdndex);
|
||||
|
||||
}
|
||||
List<EventDetailVO> change = change(eventdetails,temp);
|
||||
|
||||
@@ -670,16 +645,7 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
}
|
||||
|
||||
List<String> eventIds = allEventList.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList());
|
||||
if (eventIds.size() > 1000) {
|
||||
List<List<String>> listEven = CollUtil.split(eventIds, 1000);
|
||||
for (List<String> pList : listEven) {
|
||||
List<MsgEventInfo> msgEventInfoList = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex, pList).list();
|
||||
result.addAll(msgEventInfoList);
|
||||
}
|
||||
} else {
|
||||
List<MsgEventInfo> msgEventInfoList = msgEventInfoService.lambdaQuery().in(MsgEventInfo::getEventIndex, eventIds).list();
|
||||
result.addAll(msgEventInfoList);
|
||||
}
|
||||
result =msgEventInfoService.getMsgByIds(eventIds);
|
||||
result = result.stream().sorted(Comparator.comparing(MsgEventInfo::getSendTime, Comparator.reverseOrder())).collect(Collectors.toList());
|
||||
if (result.size() > 200) {
|
||||
result = result.subList(0, 200);
|
||||
@@ -719,6 +685,103 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlarmAnalysisVO alarmAnalysisDetail(LargeScreenCountParam largeScreenCountParam) {
|
||||
AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
|
||||
//起始时间
|
||||
LocalDateTime startTime;
|
||||
//结束时间
|
||||
LocalDateTime endTime;
|
||||
if (largeScreenCountParam.getType() == 3) {
|
||||
//起始时间
|
||||
startTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.beginOfMonth(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER);
|
||||
//结束时间
|
||||
endTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.endOfMonth(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER);
|
||||
} else if (largeScreenCountParam.getType() == 4) {
|
||||
//起始时间
|
||||
startTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.beginOfWeek(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER);
|
||||
//结束时间
|
||||
endTime = LocalDateTimeUtil.parse(DateUtil.format(DateUtil.endOfWeek(new Date()), DatePattern.NORM_DATETIME_FORMATTER), DatePattern.NORM_DATETIME_FORMATTER);
|
||||
} else {
|
||||
throw new BusinessException("统计类型有误类型");
|
||||
}
|
||||
|
||||
//根据用户获取当前部门及子部门id
|
||||
List<String> deptAndChildren = pqsDeptsService.findDeptAndChildren(largeScreenCountParam.getDeptId());
|
||||
//获取对应监测点id
|
||||
List<PqsDeptsline> deptslines = pqsDeptslineService.lambdaQuery().in(PqsDeptsline::getDeptsIndex, deptAndChildren).eq(PqsDeptsline::getSystype, sysTypeZt).list();
|
||||
List<Integer> deptslineIds = deptslines.stream().map(PqsDeptsline::getLineIndex).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(deptslineIds)) {
|
||||
throw new BusinessException("部门下暂无监测点");
|
||||
|
||||
}
|
||||
List<PqsEventdetail> eventdetails = new ArrayList<>();
|
||||
if(deptslineIds.size()>1000){
|
||||
List<List<Integer>> listIds = CollUtil.split(deptslineIds,1000);
|
||||
for(List<Integer> itemIds : listIds){
|
||||
List<PqsEventdetail> temp = pqsEventdetailService.lambdaQuery()
|
||||
.between(PqsEventdetail::getTimeid,startTime, endTime)
|
||||
.in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType())
|
||||
.in(PqsEventdetail::getLineid,listIds)
|
||||
.orderByDesc(PqsEventdetail::getTimeid).list()
|
||||
;
|
||||
eventdetails.addAll(temp);
|
||||
}
|
||||
}else {
|
||||
List<PqsEventdetail> temp = pqsEventdetailService.lambdaQuery()
|
||||
.between(PqsEventdetail::getTimeid, startTime, endTime)
|
||||
.in(PqsEventdetail::getWavetype,msgEventConfigService.getEventType())
|
||||
.in(PqsEventdetail::getLineid,deptslineIds)
|
||||
.orderByDesc(PqsEventdetail::getTimeid).list();
|
||||
eventdetails.addAll(temp);
|
||||
}
|
||||
|
||||
Integer eventCount = eventdetails.size();
|
||||
// 告警
|
||||
List<PqsEventdetail> aLarmEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() < 0.5).collect(Collectors.toList());
|
||||
// 预警
|
||||
List<PqsEventdetail> warnEvent = eventdetails.stream().filter(temp -> temp.getEventvalue() >= 0.5&& temp.getEventvalue() <0.9).collect(Collectors.toList());
|
||||
List<String> eventIds = eventdetails.stream().map(PqsEventdetail::getEventdetailIndex).collect(Collectors.toList());
|
||||
//通知
|
||||
List<MsgEventInfo> msgEventInfoList =msgEventInfoService.getMsgByIds(eventIds);
|
||||
|
||||
msgEventInfoList = msgEventInfoList.stream().sorted(Comparator.comparing(MsgEventInfo::getSendTime,Comparator.reverseOrder())).collect(Collectors.toList());
|
||||
|
||||
|
||||
|
||||
List<PqsEventdetail> lookALarmEvent = aLarmEvent.stream().filter(temp ->Objects.equals(temp.getLookFlag(),1 )).collect(Collectors.toList());
|
||||
List<PqsEventdetail> lookWarnEvent = warnEvent.stream().filter(temp ->Objects.equals(temp.getLookFlag(),1 ) ).collect(Collectors.toList());
|
||||
List<MsgEventInfo> handleMsg = msgEventInfoList.stream().filter(temp -> Objects.equals(temp.getIsHandle(), 1)).collect(Collectors.toList());
|
||||
|
||||
Integer aLarmCount =aLarmEvent.size();
|
||||
Integer warnCount =warnEvent.size();
|
||||
Integer noticeCount =msgEventInfoList.size();
|
||||
Integer lookALarmCount =lookALarmEvent.size();
|
||||
Integer lookWarnCount =lookWarnEvent.size();
|
||||
Integer lookNoticeCount =handleMsg.size();
|
||||
|
||||
alarmAnalysisVO.setEventCount(eventCount);
|
||||
alarmAnalysisVO.setALarmCount(aLarmCount);
|
||||
alarmAnalysisVO.setWarnCount(warnCount);
|
||||
alarmAnalysisVO.setNoticeCount(noticeCount);
|
||||
alarmAnalysisVO.setLookALarmCount(lookALarmCount);
|
||||
alarmAnalysisVO.setLookWarnCount(lookWarnCount);
|
||||
alarmAnalysisVO.setLookNoticeCount(lookNoticeCount);
|
||||
|
||||
|
||||
alarmAnalysisVO.setEventdetails(change(eventdetails,msgEventInfoList));
|
||||
alarmAnalysisVO.setALarmEvent(change(aLarmEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setWarnEvent(change(warnEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setNoticeEvent(msgEventInfoList);
|
||||
alarmAnalysisVO.setLookALarmEvent(change(lookALarmEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setLookWarnEvent(change(lookWarnEvent,msgEventInfoList));
|
||||
alarmAnalysisVO.setLookNoticeEvent(handleMsg);
|
||||
|
||||
|
||||
|
||||
return alarmAnalysisVO;
|
||||
}
|
||||
|
||||
private List<EventDetailVO> change(List<PqsEventdetail> list,List<MsgEventInfo> handleMsg){
|
||||
List<EventDetailVO> result = new ArrayList<>();
|
||||
if(CollectionUtils.isEmpty(list)){
|
||||
@@ -740,10 +803,11 @@ public class LargeScreenCountServiceImpl implements LargeScreenCountService {
|
||||
eventDetailVO.setEventvalue(temp.getEventvalue());
|
||||
eventDetailVO.setLookFlag(temp.getLookFlag());
|
||||
eventDetailVO.setNoticeFlag(temp.getNoticeFlag());
|
||||
if(Objects.nonNull(temp.getEventSeverity())){
|
||||
eventDetailVO.setEventSeverity(temp.getEventSeverity());
|
||||
if( temp.getEventvalue()< 0.5){
|
||||
eventDetailVO.setEventSeverity(1);
|
||||
}else{
|
||||
eventDetailVO.setEventSeverity(2);
|
||||
}
|
||||
|
||||
eventDetailVO.setMsgEventInfoSize(handleMsg.stream().filter(msg->Objects.equals(msg.getEventIndex(),temp.getEventdetailIndex())).count());
|
||||
if(ledgerBaseInfoDTOMap.containsKey(temp.getLineid())){
|
||||
LedgerBaseInfoDTO ledgerBaseInfoDTO = ledgerBaseInfoDTOMap.get(temp.getLineid());
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
package com.njcn.gather.event.transientes.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.gather.event.transientes.mapper.MsgEventInfoMapper;
|
||||
import com.njcn.gather.event.transientes.pojo.po.MsgEventInfo;
|
||||
import com.njcn.gather.event.transientes.service.MsgEventInfoService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: cdf
|
||||
@@ -13,4 +18,22 @@ import org.springframework.stereotype.Service;
|
||||
*/
|
||||
@Service
|
||||
public class MsgEventInfoServiceImpl extends ServiceImpl<MsgEventInfoMapper, MsgEventInfo> implements MsgEventInfoService {
|
||||
@Override
|
||||
public List<MsgEventInfo> getMsgByIds(List<String> ids) {
|
||||
//通知
|
||||
List<MsgEventInfo> msgEventInfoList = new ArrayList<>();
|
||||
if(!CollectionUtils.isEmpty(ids)){
|
||||
if(ids.size()>1000){
|
||||
List<List<String>> listEven = CollUtil.split(ids,1000);
|
||||
for(List<String> pList: listEven){
|
||||
List<MsgEventInfo> temp = this.lambdaQuery().in(MsgEventInfo::getEventIndex,pList).list();
|
||||
msgEventInfoList.addAll(temp);
|
||||
}
|
||||
}else {
|
||||
List<MsgEventInfo> temp = this.lambdaQuery().in(MsgEventInfo::getEventIndex,ids).list();
|
||||
msgEventInfoList.addAll(temp);
|
||||
}
|
||||
}
|
||||
return msgEventInfoList;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user