From ad7835f0dbc0d5acc0b114bffa70a200faa05a95 Mon Sep 17 00:00:00 2001
From: xy <748613696@qq.com>
Date: Sat, 13 Jun 2026 11:33:31 +0800
Subject: [PATCH] =?UTF-8?q?feat(harmonic):=20=E6=96=B0=E5=A2=9E=E5=89=8D?=
=?UTF-8?q?=E7=BD=AE=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97=E5=92=8C=E4=BA=8B?=
=?UTF-8?q?=E4=BB=B6=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加获取前置调试日志接口,支持按时间和关键词筛选
- 实现暂降原因和暂降类型统计数据查询功能
- 新增CsEventLogsVo和CsEventReasonAndTypeVo数据传输对象
- 优化事件查询逻辑,支持多等级告警筛选
- 修复设备交付服务中的空指针异常问题
- 移除设备使用状态修改的日志记录功能
- 更新事件用户服务中的前置信息显示逻辑
---
.../com/njcn/csdevice/pojo/dto/CsLineDTO.java | 7 +-
.../mapper/mapping/CsLinePOMapper.xml | 3 +-
.../impl/CsEquipmentDeliveryServiceImpl.java | 36 ++----
.../pojo/param/EventStatisticParam.java | 6 +
.../csharmonic/pojo/vo/CsEventLogsVo.java | 60 +++++++++
.../pojo/vo/CsEventReasonAndTypeVo.java | 44 +++++++
.../controller/CsEventController.java | 21 ++++
.../csharmonic/mapper/CsEventPOMapper.java | 6 +
.../mapper/mapping/CsEventPOMapper.xml | 24 ++++
.../mapper/mapping/CsEventUserPOMapper.xml | 7 +-
.../csharmonic/service/CsEventPOService.java | 9 +-
.../service/impl/CsEventPOServiceImpl.java | 117 +++++++++++++++++-
.../impl/CsEventUserPOServiceImpl.java | 17 ++-
.../service/impl/CsLogsPOServiceImpl.java | 21 ++--
14 files changed, 330 insertions(+), 48 deletions(-)
create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/CsEventLogsVo.java
create mode 100644 cs-harmonic/cs-harmonic-api/src/main/java/com/njcn/csharmonic/pojo/vo/CsEventReasonAndTypeVo.java
diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/dto/CsLineDTO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/dto/CsLineDTO.java
index 257f2c1..676d11e 100644
--- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/dto/CsLineDTO.java
+++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/dto/CsLineDTO.java
@@ -19,7 +19,12 @@ public class CsLineDTO implements Serializable {
private String deviceId;
/**
- * 装置id
+ * 装置名称
+ */
+ private String deviceName;
+
+ /**
+ * 装置类型
*/
private String deviceType;
diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/mapper/mapping/CsLinePOMapper.xml b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/mapper/mapping/CsLinePOMapper.xml
index 8473e50..ef8b1d6 100644
--- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/mapper/mapping/CsLinePOMapper.xml
+++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/mapper/mapping/CsLinePOMapper.xml
@@ -57,7 +57,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/mapping/CsEventUserPOMapper.xml b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/mapping/CsEventUserPOMapper.xml
index 677b692..e96183b 100644
--- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/mapping/CsEventUserPOMapper.xml
+++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/mapper/mapping/CsEventUserPOMapper.xml
@@ -224,7 +224,12 @@
AND b.severity < #{csEventUserQueryPage.severityMax}
- AND d.name like concat('%',#{csEventUserQueryPage.searchValue},'%')
+
+ AND e.name like concat('%',#{csEventUserQueryPage.searchValue},'%')
+
+
+ AND d.name like concat('%',#{csEventUserQueryPage.searchValue},'%')
+
diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java
index 99d933d..462fe3c 100644
--- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java
+++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java
@@ -1,14 +1,13 @@
package com.njcn.csharmonic.service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
import com.njcn.csharmonic.param.*;
import com.njcn.csharmonic.pojo.param.EventStatisticParam;
import com.njcn.csharmonic.pojo.po.CsEventPO;
-import com.njcn.csharmonic.pojo.vo.CsEventVO;
-import com.njcn.csharmonic.pojo.vo.CsWarnDescVO;
-import com.njcn.csharmonic.pojo.vo.EventDetailVO;
+import com.njcn.csharmonic.pojo.vo.*;
import com.njcn.event.file.pojo.dto.WaveDataDTO;
import javax.servlet.http.HttpServletResponse;
@@ -70,4 +69,8 @@ public interface CsEventPOService extends IService{
List getEvents(List idList);
List getDevAlarmList(CsEventUserQueryParam param);
+
+ IPage getFrontDebugLogs(EventStatisticParam param);
+
+ CsEventReasonAndTypeVo eventReasonAndTypeStatistics(EventStatisticParam param);
}
diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java
index 3c46cb1..b964a63 100644
--- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java
+++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java
@@ -9,8 +9,10 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
+import com.alibaba.csp.sentinel.util.StringUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.advance.api.EventCauseFeignClient;
@@ -19,6 +21,7 @@ import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsLedgerFeignClient;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.enums.AlgorithmResponseEnum;
+import com.njcn.csdevice.pojo.dto.CsLineDTO;
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
@@ -28,9 +31,7 @@ import com.njcn.csharmonic.mapper.CsEventPOMapper;
import com.njcn.csharmonic.param.*;
import com.njcn.csharmonic.pojo.param.EventStatisticParam;
import com.njcn.csharmonic.pojo.po.CsEventPO;
-import com.njcn.csharmonic.pojo.vo.CsEventVO;
-import com.njcn.csharmonic.pojo.vo.CsWarnDescVO;
-import com.njcn.csharmonic.pojo.vo.EventDetailVO;
+import com.njcn.csharmonic.pojo.vo.*;
import com.njcn.csharmonic.service.CsEventPOService;
import com.njcn.csharmonic.service.CsEventUserPOService;
import com.njcn.csharmonic.utils.DataChangeUtil;
@@ -89,6 +90,7 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -124,6 +126,7 @@ public class CsEventPOServiceImpl extends ServiceImpl getFrontDebugLogs(EventStatisticParam param) {
+ IPage result = new Page<>(param.getPageNum(), param.getPageSize());
+ List voRecords = new ArrayList<>();
+ IPage page = new Page<>(param.getPageNum(), param.getPageSize());
+ //获取所有监测点信息
+ List lineList = csLineFeignClient.getAllLineDetail().getData();
+ if (CollectionUtil.isEmpty(lineList)) {
+ return result;
+ }
+ Map> devMap = lineList.stream().collect(Collectors.groupingBy(CsLineDTO::getDeviceId));
+ Map lineMap = lineList.stream().collect(Collectors.toMap(CsLineDTO::getLineId, Function.identity()));
+
+ List lineIds = new ArrayList<>();
+ List devIds = new ArrayList<>();
+
+ //根据关键字筛选(用户可能输入监测点名称或设备名称)
+ if (StringUtil.isNotBlank(param.getSearchValue())) {
+ String keyword = param.getSearchValue();
+ lineIds = lineList.stream()
+ .filter(item -> item.getName().contains(keyword))
+ .map(CsLineDTO::getLineId)
+ .distinct()
+ .collect(Collectors.toList());
+ devIds = lineList.stream()
+ .filter(item -> item.getDeviceName().contains(keyword))
+ .map(CsLineDTO::getDeviceId)
+ .distinct()
+ .collect(Collectors.toList());
+ //关键字筛选后没有任何匹配,返回空页
+ if (CollectionUtil.isEmpty(lineIds) && CollectionUtil.isEmpty(devIds)) {
+ return result;
+ }
+ }
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ //时间范围和类型是通用条件
+ queryWrapper
+ .between(CsEventPO::getStartTime,
+ DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())).toString(),
+ DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())).toString())
+ .in(CsEventPO::getLevel, Arrays.asList(4, 5, 6, 7))
+ .eq(CsEventPO::getType, 3)
+ .orderByDesc(CsEventPO::getStartTime);
+
+ //关键字筛选:监测点名称 OR 设备名称
+ if (StringUtil.isNotBlank(param.getSearchValue())) {
+ List finalLineIds = lineIds;
+ List finalDevIds = devIds;
+ queryWrapper.and(i -> {
+ if (CollUtil.isNotEmpty(finalLineIds)) {
+ i.in(CsEventPO::getLineId, finalLineIds);
+ }
+ if (CollUtil.isNotEmpty(finalDevIds)) {
+ i.or().in(CsEventPO::getDeviceId, finalDevIds);
+ }
+ });
+ }
+
+ //告警等级筛选
+ if (StringUtil.isNotBlank(param.getLevel())) {
+ List levelList = Arrays.stream(param.getLevel().split(","))
+ .map(String::trim)
+ .filter(s -> !s.isEmpty())
+ .map(Integer::parseInt)
+ .collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(levelList)) {
+ queryWrapper.in(CsEventPO::getLevel, levelList);
+ }
+ }
+ page = csEventPOMapper.selectPage(page, queryWrapper);
+ List records = page.getRecords();
+ if (CollUtil.isNotEmpty(records)) {
+ records.forEach(item->{
+ CsEventLogsVo vo = new CsEventLogsVo();
+ BeanUtils.copyProperties(item,vo);
+ if (!Objects.isNull(item.getLineId())) {
+ vo.setLineName(lineMap.get(item.getLineId()).getName());
+ }
+ if (!Objects.isNull(item.getDeviceId())) {
+ vo.setDeviceName(devMap.get(item.getDeviceId()).get(0).getName());
+ }
+ vo.setEvent(item.getTag());
+ voRecords.add(vo);
+ });
+ }
+ result.setRecords(voRecords);
+ result.setTotal(page.getTotal());
+ result.setSize(page.getSize());
+ result.setCurrent(page.getCurrent());
+ result.setPages(page.getPages());
+ return result;
+ }
+
+ @Override
+ public CsEventReasonAndTypeVo eventReasonAndTypeStatistics(EventStatisticParam param) {
+ CsEventReasonAndTypeVo vo = new CsEventReasonAndTypeVo();
+ String begin = DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())).toString();
+ String end = DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())).toString();
+ DictData data1 = dicDataFeignClient.getDicDataByCode(DicDataEnum.RESON_REST.getCode()).getData();
+ DictData data2 = dicDataFeignClient.getDicDataByCode(DicDataEnum.TYPE_REST.getCode()).getData();
+ vo.setEventReason(csEventPOMapper.getReasonStatistics(begin, end, data1.getId()));
+ vo.setEventType(csEventPOMapper.getTypeStatistics(begin, end, data2.getId()));
+ return vo;
+ }
+
/**
* 获取该事件的严重度
*
diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java
index acdaa2d..1ef19c3 100644
--- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java
+++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java
@@ -539,9 +539,10 @@ public class CsEventUserPOServiceImpl extends ServiceImpl getFrontWarnInfo(CldWarnParam baseParam) {
Page page = new Page<>(baseParam.getPageNum(), baseParam.getPageSize());
List nodeList = nodeFeignClient.nodeAllList().getData();
- Map nodeMap = nodeList.stream().collect(Collectors.toMap(Node::getId, Function.identity()));
+ Map nodeMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(nodeList)) {
+ nodeMap = nodeList.stream().collect(Collectors.toMap(Node::getId, Function.identity()));
if (ObjectUtil.isNotNull(baseParam.getSearchValue()) || StringUtil.isNotBlank(baseParam.getSearchValue())) {
nodeList = nodeList.stream().filter(item-> item.getName().contains(baseParam.getSearchValue()) || item.getIp().contains(baseParam.getSearchValue())).collect(Collectors.toList());
}
@@ -567,10 +568,20 @@ public class CsEventUserPOServiceImpl extends ServiceImpl records = page.getRecords();
if (CollUtil.isNotEmpty(records)) {
+ Map finalNodeMap = nodeMap;
page.getRecords().forEach(item->{
//这边将前置名称放进lineId字段;将前置IP放进wavePath字段;进程号使用clDid
- item.setLineId(nodeMap.get(item.getDeviceId()).getName());
- item.setWavePath(nodeMap.get(item.getDeviceId()).getIp());
+ Node node = finalNodeMap.get(item.getDeviceId());
+ item.setLineId(Objects.isNull(node) ? null : node.getName());
+ item.setWavePath(Objects.isNull(node) ? null : node.getIp());
+ //事件等级(1:Ⅰ级||ERROR 2:Ⅱ级||WARN 3:Ⅲ级||(DEBUG&&NORMAL))
+ if (item.getLevel() == 4 || item.getLevel() == 5) {
+ item.setLevel(3);
+ } else if (item.getLevel() == 6) {
+ item.setLevel(2);
+ } else if (item.getLevel() == 7) {
+ item.setLevel(1);
+ }
});
}
return page;
diff --git a/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/CsLogsPOServiceImpl.java b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/CsLogsPOServiceImpl.java
index f8d9adc..0f2a543 100644
--- a/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/CsLogsPOServiceImpl.java
+++ b/cs-system/cs-system-boot/src/main/java/com/njcn/cssystem/service/impl/CsLogsPOServiceImpl.java
@@ -1,6 +1,6 @@
package com.njcn.cssystem.service.impl;
-import com.alibaba.fastjson.JSONArray;
+import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,13 +10,10 @@ import com.njcn.cssystem.mapper.CsLogsPOMapper;
import com.njcn.cssystem.pojo.po.CsLogsPO;
import com.njcn.cssystem.service.CsLogsPOService;
import com.njcn.web.pojo.param.BaseParam;
-import com.njcn.web.utils.RequestUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
-import java.util.List;
-
/**
*
* Description:
@@ -32,6 +29,7 @@ public class CsLogsPOServiceImpl extends ServiceImpl i
public void addLog(DeviceLogDTO deviceLogDTO) {
CsLogsPO csPO = new CsLogsPO();
BeanUtils.copyProperties(deviceLogDTO,csPO);
+ csPO.setUserName(deviceLogDTO.getUserIndex());
csPO.setCreateBy(deviceLogDTO.getUserIndex());
csPO.setUpdateBy(deviceLogDTO.getUserIndex());
this.save(csPO);
@@ -39,14 +37,19 @@ public class CsLogsPOServiceImpl extends ServiceImpl i
@Override
public IPage queryPage(BaseParam baseParam) {
+ String beginDay = LocalDateTimeUtil.format(
+ LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(baseParam.getSearchBeginTime(), "yyyy-MM-dd")),
+ "yyyy-MM-dd HH:mm:ss"
+ );
+ String endDay = LocalDateTimeUtil.format(
+ LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(baseParam.getSearchEndTime(), "yyyy-MM-dd")),
+ "yyyy-MM-dd HH:mm:ss"
+ );
Page returnpage = new Page<> (baseParam.getPageNum ( ), baseParam.getPageSize ( ));
- String username = RequestUtil.getUsername();
- String userRole = RequestUtil.getUserRole();
- List strings = JSONArray.parseArray(userRole, String.class);
QueryWrapper csLogsPOQueryWrapper = new QueryWrapper<>();
csLogsPOQueryWrapper.lambda()
- .ge(StringUtils.isNotBlank(baseParam.getSearchBeginTime()),CsLogsPO::getCreateTime,baseParam.getSearchBeginTime()).
- le(StringUtils.isNotBlank(baseParam.getSearchEndTime()),CsLogsPO::getCreateTime,baseParam.getSearchEndTime()).orderByDesc(CsLogsPO::getCreateTime);
+ .ge(StringUtils.isNotBlank(beginDay),CsLogsPO::getCreateTime,beginDay).
+ le(StringUtils.isNotBlank(beginDay),CsLogsPO::getCreateTime,endDay).orderByDesc(CsLogsPO::getCreateTime);
IPage list = this.getBaseMapper().selectPage(returnpage,csLogsPOQueryWrapper);
return list;
}