From 67658609bab18d6e086fc3f88981f9e70114ef00 Mon Sep 17 00:00:00 2001 From: "review512jwy@163.com" <“review512jwy@163.com”> Date: Fri, 23 Jan 2026 13:14:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=8A=E8=AD=A6=E5=B7=B2=E8=BF=87=E5=8E=BB?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/config/language/msg/msg_cn.yml | 1 + .../resources/config/language/msg/msg_en.yml | 1 + .../resources/config/language/msg/msg_jp.yml | 1 + .../mappers/ex/DeviceInfoMapperExt.xml | 32 ++++++++++- .../back/vo/data/DeviceAlarmData.java | 6 ++ .../back/service/common/CommonOpt.java | 15 +++++ .../impl/DeviceDataAlarmServiceImpl.java | 4 ++ .../dashboard/back/util/DurationData.java | 55 +++++++++++++++++++ 8 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DurationData.java diff --git a/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_cn.yml b/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_cn.yml index d882e5e..c91f1f4 100644 --- a/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_cn.yml +++ b/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_cn.yml @@ -77,6 +77,7 @@ msgcn: levelNameExist: 层级名称已存在 invalidParentLevel: 无效的父级层级 levelReferencedByChildren: 已被下级层级绑定,请先解绑后再删除 + elapsedTime: '{0}天{1}小时{2}分' operationLogMap: addRole: 新增角色 editRole: 编辑角色 diff --git a/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_en.yml b/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_en.yml index 4263fa6..96e74e0 100644 --- a/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_en.yml +++ b/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_en.yml @@ -77,6 +77,7 @@ msgen: levelNameExist: Level name already exists invalidParentLevel: Invalid parent level levelReferencedByChildren: It is bound by child levels. Please unbind them before deleting. + elapsedTime: '{0}d {1}h {2}m' operationLogMap: addRole: Add Role editRole: Edit Role diff --git a/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_jp.yml b/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_jp.yml index 373e8f4..cb30b1b 100644 --- a/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_jp.yml +++ b/dongjian-dashboard-back-common/src/main/resources/config/language/msg/msg_jp.yml @@ -77,6 +77,7 @@ msgjp: levelNameExist: 階層名は既に存在しています invalidParentLevel: 無効な上位階層です levelReferencedByChildren: 下位階層に紐づいています。削除する前に紐付けを解除してください。 + elapsedTime: '{0}日{1}時間{2}分間' operationLogMap: addRole: ロールを追加 editRole: ロールを編集 diff --git a/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceInfoMapperExt.xml b/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceInfoMapperExt.xml index dcb3613..9849161 100644 --- a/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceInfoMapperExt.xml +++ b/dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceInfoMapperExt.xml @@ -76,6 +76,15 @@ drr.receive_ts + + device_info.device_name + + + device_info.monitoring_point_name + + + data_provider.name + drr.receive_ts @@ -88,6 +97,7 @@ DESC + ,device_info.id desc @@ -179,6 +189,15 @@ bss.latest_ts + + device_info.device_name + + + device_info.monitoring_point_name + + + data_provider.name + bss.latest_ts @@ -191,6 +210,7 @@ DESC + ,device_info.id desc diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/DeviceAlarmData.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/DeviceAlarmData.java index 2cf2a15..55dfd2f 100644 --- a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/DeviceAlarmData.java +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/DeviceAlarmData.java @@ -33,5 +33,11 @@ public class DeviceAlarmData extends BaseData{ @Schema(description = "资产记号",example = "122") private String assetSymbol; + @Schema(description = "已过去时长(毫秒级时间戳)", example = "15306854254") + private Long elapsedTime; + + @Schema(description = "已过去时长", example = "177日3時間54分間") + private String elapsedTimeStr; + } diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java index 236842b..d07d65a 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java @@ -2,6 +2,7 @@ package com.dongjian.dashboard.back.service.common; import java.math.BigDecimal; import java.sql.*; +import java.text.MessageFormat; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; @@ -13,12 +14,14 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import com.dongjian.dashboard.back.common.Constants; +import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange; import com.dongjian.dashboard.back.common.response.ResponseCode; import com.dongjian.dashboard.back.common.response.SimpleDataResponse; import com.dongjian.dashboard.back.dao.ex.*; import com.dongjian.dashboard.back.dto.device.LineDataSearchParams; import com.dongjian.dashboard.back.model.*; import com.dongjian.dashboard.back.util.DESUtil; +import com.dongjian.dashboard.back.util.DurationData; import com.dongjian.dashboard.back.vo.building.BindedBuildingVO; import com.dongjian.dashboard.back.vo.company.AuroraInfo; import com.dongjian.dashboard.back.vo.device.LineData; @@ -67,6 +70,9 @@ public class CommonOpt { private DeviceRawdataRealtimeMapperExt deviceRawdataRealtimeMapperExt; @Autowired private DeviceInfoMapperExt deviceInfoMapperExt; + + @Autowired + private MsgLanguageChange msgLanguageChange; /** @@ -650,4 +656,13 @@ public class CommonOpt { return null; } } + + public String formatElapsedTime(Long elapsedTime, Integer languageType) { + DurationData durationData = DurationData.fromMilliseconds(elapsedTime); + return MessageFormat.format( + msgLanguageChange.getParameterMapByCode(languageType, "elapsedTime"), + durationData.getDays(), + durationData.getHours(), + durationData.getMinutes()); + } } diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAlarmServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAlarmServiceImpl.java index 9503d98..8a7fc46 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAlarmServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAlarmServiceImpl.java @@ -98,6 +98,8 @@ public class DeviceDataAlarmServiceImpl implements DeviceDataAlarmService { if (CollectionUtils.isNotEmpty(resultList)) { // 查询 favorited_device 表中所有设备的 device_id List favoritedDeviceIds = favoritedDeviceMapperExt.getFavoritedDeviceIds(); + + long currentTs = System.currentTimeMillis(); for (DeviceAlarmData data : resultList){ String deviceId = data.getDeviceId().toLowerCase(); // 判断设备是否在 favorited_device 表中 @@ -109,6 +111,8 @@ public class DeviceDataAlarmServiceImpl implements DeviceDataAlarmService { data.setAlertLevelStr(msgLanguageChange.getParameterMapByCode(languageType, "alertLevel_" + data.getAlertLevel())); data.setConfirmStatusStr(msgLanguageChange.getParameterMapByCode(languageType, "confirmStatus_" + data.getConfirmStatus())); data.setHandleStatusStr(msgLanguageChange.getParameterMapByCode(languageType, "handleStatus_" + data.getHandleStatus())); + data.setElapsedTime(currentTs - data.getUploadTimestamp()); + data.setElapsedTimeStr(commonOpt.formatElapsedTime(data.getElapsedTime(), languageType)); } } diff --git a/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DurationData.java b/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DurationData.java new file mode 100644 index 0000000..8c4c6f2 --- /dev/null +++ b/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DurationData.java @@ -0,0 +1,55 @@ +package com.dongjian.dashboard.back.util; + +import java.util.Locale; +import java.util.ResourceBundle; + +/** + * 持续时间对象,包含结构化时间单位 + */ +public class DurationData { + private long days; + private long hours; + private long minutes; + private long seconds; + + // 构造函数 + public DurationData(long days, long hours, long minutes, long seconds) { + this.days = days; + this.hours = hours; + this.minutes = minutes; + this.seconds = seconds; + } + + // Getters + public long getDays() { return days; } + public long getHours() { return hours; } + public long getMinutes() { return minutes; } + public long getSeconds() { return seconds; } + + // 从毫秒创建 + public static DurationData fromMilliseconds(long ms) { + if (ms <= 0) { + return new DurationData(0, 0, 0, 0); + } + + long totalSeconds = ms / 1000; + long days = totalSeconds / (24 * 3600); + long hours = (totalSeconds % (24 * 3600)) / 3600; + long minutes = (totalSeconds % 3600) / 60; + long seconds = totalSeconds % 60; + + return new DurationData(days, hours, minutes, seconds); + } + + @Override + public String toString() { + return String.format("DurationData{days=%d, hours=%d, minutes=%d, seconds=%d}", + days, hours, minutes, seconds); + } + + public static void main(String[] args){ + DurationData durationData = DurationData.fromMilliseconds(15306504932L); + System.out.println(durationData); + System.out.println(durationData.getDays()); + } +}