fix(event): 修复事件详情波形路径更新逻辑

- 修正CsEventPOServiceImpl中wavePath更新时的对象引用错误
- 在EventDetailVO中新增startTime2字段用于显示不带毫秒的时间
- 优化DataTaskServiceImpl中的设备通信离线时段计算逻辑
- 完善DeviceMessageServiceImpl中设备消息映射的边界情况处理
This commit is contained in:
xy
2026-04-29 16:49:04 +08:00
parent 058229e8c4
commit db2821347d
5 changed files with 94 additions and 22 deletions

View File

@@ -103,6 +103,8 @@ class DeviceMessageServiceImpl implements DeviceMessageService {
map.put(1,item.getLineId()); map.put(1,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.LOAD_SIDE.getCode())){ } else if (Objects.equals(dictData.getCode(), DicDataEnum.LOAD_SIDE.getCode())){
map.put(2,item.getLineId()); map.put(2,item.getLineId());
} else {
map.put(item.getClDid(),item.getLineId());
} }
} }
} }

View File

@@ -62,6 +62,13 @@ public class EventDetailVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS",timezone = "GMT+8")
private LocalDateTime startTime; private LocalDateTime startTime;
/**
* 事件时间 不带毫秒
*/
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime startTime2;
/** /**
* 事件类型 * 事件类型
*/ */

View File

@@ -459,7 +459,7 @@ public class CsEventPOServiceImpl extends ServiceImpl<CsEventPOMapper, CsEventPO
LambdaQueryWrapper<RmpEventDetailPO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RmpEventDetailPO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RmpEventDetailPO::getEventId,id); wrapper.eq(RmpEventDetailPO::getEventId,id);
RmpEventDetailPO po2 = wlRmpEventDetailMapper.selectOne(wrapper); RmpEventDetailPO po2 = wlRmpEventDetailMapper.selectOne(wrapper);
po2.setWavePath(po2.getWavePath()); po2.setWavePath(po.getWavePath());
po2.setFileFlag(1); po2.setFileFlag(1);
int row = wlRmpEventDetailMapper.updateById(po2); int row = wlRmpEventDetailMapper.updateById(po2);
if (row > 0) { if (row > 0) {

View File

@@ -46,6 +46,8 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -350,6 +352,9 @@ public class CsEventUserPOServiceImpl extends ServiceImpl<CsEventUserPOMapper, C
List<String> ids = returnpage.getRecords().stream().map(EventDetailVO::getId).collect(Collectors.toList()); List<String> ids = returnpage.getRecords().stream().map(EventDetailVO::getId).collect(Collectors.toList());
List<CsEventUserPO> userEvents = this.queryEventListByUserId(RequestUtil.getUserIndex(),ids); List<CsEventUserPO> userEvents = this.queryEventListByUserId(RequestUtil.getUserIndex(),ids);
returnpage.getRecords().forEach(temp -> { returnpage.getRecords().forEach(temp -> {
if (!Objects.equals(csEventUserQueryPage.getType(),"0")) {
temp.setStartTime2(temp.getStartTime());
}
//台账信息 //台账信息
DevDetailDTO devDetail = csLedgerFeignClient.queryDevDetail(temp.getDeviceId()).getData(); DevDetailDTO devDetail = csLedgerFeignClient.queryDevDetail(temp.getDeviceId()).getData();
temp.setEquipmentName(devDetail.getEquipmentName()); temp.setEquipmentName(devDetail.getEquipmentName());

View File

@@ -549,57 +549,115 @@ public class DataTaskServiceImpl implements IDataTaskService {
Map<String, List<PqsCommunicate>> deviceCommMap = pqsCommunicates.stream() Map<String, List<PqsCommunicate>> deviceCommMap = pqsCommunicates.stream()
.collect(Collectors.groupingBy(PqsCommunicate::getDevId)); .collect(Collectors.groupingBy(PqsCommunicate::getDevId));
// deviceCommMap.forEach((devId, commList) -> {
// // 按时间排序
// commList.sort(Comparator.comparing(PqsCommunicate::getTime));
//
// List<String> offlinePeriods = new ArrayList<>();
// String offlineStartTime = null;
// String offlineEndTime = null;
//
// if (commList.size() == 1) {
// // 只有一条数据的情况
// PqsCommunicate singleRecord = commList.get(0);
// if (singleRecord.getType() == 0) {
// // 掉线:从掉线时间到 24 点
// offlineStartTime = DATE_TIME_FORMATTER.format(singleRecord.getTime());
// offlineEndTime = DATE_TIME_FORMATTER.format(singleRecord.getTime()).substring(0, 10) + " 23:59:59";
// } else {
// // 上线:从 0 点到上线时间
// offlineStartTime = DATE_TIME_FORMATTER.format(singleRecord.getTime()).substring(0, 10) + " 00:00:00";
// offlineEndTime = DATE_TIME_FORMATTER.format(singleRecord.getTime());
// }
// offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
// } else {
// // 多条数据的情况
// for (int i = 0; i < commList.size(); i++) {
// PqsCommunicate current = commList.get(i);
//
// if (current.getType() == 0) {
// // 掉线记录
// if (offlineStartTime == null) {
// offlineStartTime = DATE_TIME_FORMATTER.format(current.getTime());
// }
// // 如果是最后一条记录,结束时间为 24 点
// if (i == commList.size() - 1) {
// offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime()).substring(0, 10) + " 23:59:59";
// offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
// }
// } else {
// // 上线记录
// if (offlineStartTime != null) {
// // 有对应的掉线记录,形成完整时间段
// offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime());
// offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
// offlineStartTime = null;
// offlineEndTime = null;
// } else {
// // 没有对应的掉线记录,说明是从 0 点开始掉线
// offlineStartTime = DATE_TIME_FORMATTER.format(current.getTime()).substring(0, 10) + " 00:00:00";
// offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime());;
// offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
// }
// }
// }
// }
// if (CollUtil.isNotEmpty(offlinePeriods)) {
// result.put(devId, offlinePeriods);
// }
// });
deviceCommMap.forEach((devId, commList) -> { deviceCommMap.forEach((devId, commList) -> {
// 按时间排序 // 按时间排序
commList.sort(Comparator.comparing(PqsCommunicate::getTime)); commList.sort(Comparator.comparing(PqsCommunicate::getTime));
List<String> offlinePeriods = new ArrayList<>(); List<String> offlinePeriods = new ArrayList<>();
String offlineStartTime = null; String offlineStartTime = null;
String offlineEndTime = null;
if (commList.size() == 1) { if (commList.size() == 1) {
// 只有一条数据的情况 // 只有一条数据的情况
PqsCommunicate singleRecord = commList.get(0); PqsCommunicate singleRecord = commList.get(0);
if (singleRecord.getType() == 0) { if (singleRecord.getType() == 0) {
// 掉线:从掉线时间到 24 点 // 掉线:从掉线时间到 24 点
offlineStartTime = DATE_TIME_FORMATTER.format(singleRecord.getTime()); String startTime1 = DATE_TIME_FORMATTER.format(singleRecord.getTime());
offlineEndTime = DATE_TIME_FORMATTER.format(singleRecord.getTime()).substring(0, 10) + " 23:59:59"; String endTime1 = DATE_TIME_FORMATTER.format(singleRecord.getTime()).substring(0, 10) + " 23:59:59";
offlinePeriods.add(startTime1 + " ~ " + endTime1);
} else { } else {
// 上线:从 0 点到上线时间 // 上线:从 0 点到上线时间
offlineStartTime = DATE_TIME_FORMATTER.format(singleRecord.getTime()).substring(0, 10) + " 00:00:00"; String startTime1 = DATE_TIME_FORMATTER.format(singleRecord.getTime()).substring(0, 10) + " 00:00:00";
offlineEndTime = DATE_TIME_FORMATTER.format(singleRecord.getTime()); String endTime1 = DATE_TIME_FORMATTER.format(singleRecord.getTime());
offlinePeriods.add(startTime1 + " ~ " + endTime1);
} }
offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
} else { } else {
// 多条数据的情况 // 多条数据的情况:遍历每相邻两条记录
for (int i = 0; i < commList.size(); i++) { for (int i = 0; i < commList.size(); i++) {
PqsCommunicate current = commList.get(i); PqsCommunicate current = commList.get(i);
if (current.getType() == 0) { if (current.getType() == 0) {
// 掉线记录 // 掉线记录:开始计时
if (offlineStartTime == null) { if (offlineStartTime == null) {
offlineStartTime = DATE_TIME_FORMATTER.format(current.getTime()); offlineStartTime = DATE_TIME_FORMATTER.format(current.getTime());
} }
// 如果是最后一条记录,结束时间为 24 点
if (i == commList.size() - 1) {
offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime()).substring(0, 10) + " 23:59:59";
offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
}
} else { } else {
// 上线记录 // 上线记录:结算离线时段
if (offlineStartTime != null) { if (offlineStartTime != null) {
// 有对应的掉线记录,形成完整时间段 // 有未结算的离线时段,进行结算
offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime()); String offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime());
offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime); offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime);
offlineStartTime = null; offlineStartTime = null;
offlineEndTime = null;
} else { } else {
// 没有对应的掉线记录,说明是从 0 点开始掉线 // 没有对应的掉线记录,说明是从 0 点开始掉线到当前上线时间
offlineStartTime = DATE_TIME_FORMATTER.format(current.getTime()).substring(0, 10) + " 00:00:00"; String startTime1 = DATE_TIME_FORMATTER.format(current.getTime()).substring(0, 10) + " 00:00:00";
offlineEndTime = DATE_TIME_FORMATTER.format(current.getTime());; String endTime1 = DATE_TIME_FORMATTER.format(current.getTime());
offlinePeriods.add(offlineStartTime + " ~ " + offlineEndTime); offlinePeriods.add(startTime1 + " ~ " + endTime1);
} }
} }
// 如果是最后一条记录且仍在离线状态,结算到 24 点
if (i == commList.size() - 1 && offlineStartTime != null) {
String endTime1 = DATE_TIME_FORMATTER.format(current.getTime()).substring(0, 10) + " 23:59:59";
offlinePeriods.add(offlineStartTime + " ~ " + endTime1);
offlineStartTime = null;
}
} }
} }
if (CollUtil.isNotEmpty(offlinePeriods)) { if (CollUtil.isNotEmpty(offlinePeriods)) {