From 3ca5e538dee9451e0beea6d5e8b3b6c7bd1523f6 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Wed, 26 Mar 2025 17:26:41 +0800
Subject: [PATCH 1/2] =?UTF-8?q?refactor:=E6=97=B6=E5=8C=BA=E6=A0=BC?=
=?UTF-8?q?=E5=BC=8F=E5=8C=96=E6=8F=90=E5=8F=96DateTimeHelper=E4=BE=BF?=
=?UTF-8?q?=E4=BA=8E=E5=A4=8D=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Helpers/DateTimeHelper.cs | 21 ++++++++++++++++++
.../Warning/CompleteWarningService.cs | 18 +--------------
.../Services/Warning/ReturnWarningService.cs | 19 ++--------------
.../Warning/TransportWarningService.cs | 22 +++----------------
4 files changed, 27 insertions(+), 53 deletions(-)
diff --git a/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs b/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs
index dff48044..b621a191 100644
--- a/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs
+++ b/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs
@@ -55,4 +55,25 @@ public static class DateTimeHelper
return sign * (hours + minutes / 60f);
}
+
+ ///
+ /// 将浮点数时区转换为GMT格式
+ /// 如果为null则返回"--"
+ ///
+ ///
+ ///
+ public static string ConvertFloatToTimeZone(float? timezone)
+ {
+ if (timezone == null) return "--";
+
+ if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 1) return "--";
+
+ // 将小数形式的小时转换为时区偏移量
+ var hours = (int) timezone.Value; // 提取整数部分作为小时
+ var minutes = (int) ((timezone.Value - hours) * 60); // 将小数部分乘以 60 转换为分钟
+ var offset = new TimeSpan(hours, minutes, 0);
+ var timeZoneStr = offset.ToString();
+ var flag = timezone > 0f ? "+" : "";
+ return $"GMT {flag}{timeZoneStr.RemovePostFix(":00")}";
+ }
}
diff --git a/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs b/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs
index 93a53005..fa3797bd 100644
--- a/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs
+++ b/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs
@@ -186,7 +186,7 @@ public class CompleteWarningService : ApplicationService
LatestTrackContent = orderIdTrack?.TrackContent,
LatestTrackPlace = orderIdTrack?.TrackPlace,
LatestTrackTime = orderIdTrack?.TrackTime,
- LatestTrackTimeZone = FormatTimeZone(orderIdTrack?.TrackTimeZone),
+ LatestTrackTimeZone = DateTimeHelper.ConvertFloatToTimeZone(orderIdTrack?.TrackTimeZone),
NotifyUserNames = ToUserNames(x.NotifyUsers),
CreateTime = x.CreateTime,
@@ -229,22 +229,6 @@ public class CompleteWarningService : ApplicationService
}).ToList()
}).ToList();
}
-
- // 格式化时区
- string FormatTimeZone(float? timezone)
- {
- if (timezone == null) return "--";
-
- if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 1) return "--";
-
- // 将小数形式的小时转换为时区偏移量
- var hours = (int) timezone.Value; // 提取整数部分作为小时
- var minutes = (int) ((timezone.Value - hours) * 60); // 将小数部分乘以 60 转换为分钟
- var offset = new TimeSpan(hours, minutes, 0);
- var timeZoneStr = offset.ToString();
- var flag = timezone > 0f ? "+" : "";
- return $"GMT {flag}{timeZoneStr.RemovePostFix(":00")}";
- }
}
///
diff --git a/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs b/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs
index 00be37c8..7eb2eb8a 100644
--- a/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs
+++ b/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs
@@ -3,6 +3,7 @@ using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.Warning;
using SJZY.Track.Application.Contract.Dtos.Warning.Return;
using SJZY.Track.Application.Contract.Events;
+using SJZY.Track.Application.Helpers;
using SJZY.Track.Application.Services.Warning.Handlers;
using SJZY.Track.Application.Services.Warning.Model;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
@@ -146,7 +147,7 @@ public class ReturnWarningService : ApplicationService
TrackContent = x.TrackContent,
TrackPlace = x.TrackPlace,
TrackTime = x.TrackTime,
- TrackTimeZone = FormatTimeZone(x.TrackTimeZone),
+ TrackTimeZone = DateTimeHelper.ConvertFloatToTimeZone(x.TrackTimeZone),
TrackCreateTime = x.TrackCreateTime,
// 轨迹信息(映射后)
PushTrackCode = x.PushTrackCode,
@@ -186,22 +187,6 @@ public class ReturnWarningService : ApplicationService
return string.Join(',', notifyUsers.ToObject>().Select(x => x.UserName));
}
- // 格式化时区
- string FormatTimeZone(float? timezone)
- {
- if (timezone == null) return "--";
-
- if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 1) return "--";
-
- // 将小数形式的小时转换为时区偏移量
- var hours = (int) timezone.Value; // 提取整数部分作为小时
- var minutes = (int) ((timezone.Value - hours) * 60); // 将小数部分乘以 60 转换为分钟
- var offset = new TimeSpan(hours, minutes, 0);
- var timeZoneStr = offset.ToString();
- var flag = timezone > 0f ? "+" : "";
- return $"GMT {flag}{timeZoneStr.RemovePostFix(":00")}";
- }
-
// 时间
string FormatTimeSpan(long? milliseconds)
{
diff --git a/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs b/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs
index baa69df7..46ed5dc3 100644
--- a/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs
+++ b/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs
@@ -223,20 +223,20 @@ public class TransportWarningService : ApplicationService
// 最新轨迹 (不冗余)
LatestTrackContent = orderIdTrack?.TrackContent,
LatestTrackTime = orderIdTrack?.TrackTime,
- LatestTrackTimeZone = FormatTimeZone(orderIdTrack?.TrackTimeZone),
+ LatestTrackTimeZone = DateTimeHelper.ConvertFloatToTimeZone(orderIdTrack?.TrackTimeZone),
LatestTrackPlace = orderIdTrack?.TrackPlace,
// 起始轨迹
StartTrackStatus = x.StartTrackStatus,
StartTrackContent = x.StartTrackContent,
StartTrackTime = x.StartTrackTime,
- StartTrackTimeZone = FormatTimeZone(x.StartTrackTimeZone),
+ StartTrackTimeZone = DateTimeHelper.ConvertFloatToTimeZone(x.StartTrackTimeZone),
// 截止轨迹
EndTrackStatus = x.EndTrackStatus,
EndTrackContent = x.EndTrackContent,
EndTrackTime = x.EndTrackTime,
- EndTrackTimeZone = FormatTimeZone(x.EndTrackTimeZone),
+ EndTrackTimeZone = DateTimeHelper.ConvertFloatToTimeZone(x.EndTrackTimeZone),
WarningName = x.WarningName,
WarningRuleDescription = x.WarningRuleDescription,
@@ -283,22 +283,6 @@ public class TransportWarningService : ApplicationService
return $"{timeSpan.Days:00}天{timeSpan.Hours:00}小时{timeSpan.Minutes:00}分钟";
}
-
- // 格式化时区
- string FormatTimeZone(float? timezone)
- {
- if (timezone == null) return "--";
-
- if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 1) return "--";
-
- // 将小数形式的小时转换为时区偏移量
- var hours = (int) timezone.Value; // 提取整数部分作为小时
- var minutes = (int) ((timezone.Value - hours) * 60); // 将小数部分乘以 60 转换为分钟
- var offset = new TimeSpan(hours, minutes, 0);
- var timeZoneStr = offset.ToString();
- var flag = timezone > 0f ? "+" : "";
- return $"GMT {flag}{timeZoneStr.RemovePostFix(":00")}";
- }
}
///
From bf3afe9480386253fcdc34eac2edb2c6fa70aa3b Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Thu, 27 Mar 2025 11:39:32 +0800
Subject: [PATCH 2/2] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E9=AA=8C=E8=AF=81?=
=?UTF-8?q?=E6=8F=8F=E8=BF=B0=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=A2=84=E8=AD=A6?=
=?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=B6=88=E6=81=AF=E4=BD=93=E6=A0=87=E9=A2=98?=
=?UTF-8?q?=E5=8A=A0=E5=9C=A8=E5=A4=B4=E9=83=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EditTransportWarningSceneRuleItemInput.cs | 2 +-
.../Hangfire/WarningNotifyAggregator.cs | 23 +++++++++++++------
.../Helpers/DateTimeHelper.cs | 4 +++-
3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/Warning/Transport/EditTransportWarningSceneRuleItemInput.cs b/src/SJZY.Track.Application.Contract/Dtos/Warning/Transport/EditTransportWarningSceneRuleItemInput.cs
index 443c5054..23e5bb6a 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/Warning/Transport/EditTransportWarningSceneRuleItemInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/Warning/Transport/EditTransportWarningSceneRuleItemInput.cs
@@ -49,7 +49,7 @@ public class EditTransportWarningSceneRuleItemDto
/// 时效 (单位h)
/// 注意:需要大于起始轨迹生成预警时间
///
- [Range(0.1f, 9999.9f, ErrorMessage = "时效必须范围0.1-9999.9")]
+ [Range(0.1f, 9999.9f, ErrorMessage = "时效范围0.1-9999.9")]
public float TransportTimeSpan { get; set; }
///
diff --git a/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs b/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs
index bc83d7ad..e71eb5fa 100644
--- a/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs
+++ b/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.Options;
using SJZY.Track.Application.Contract.Dtos.Warning;
+using SJZY.Track.Application.Helpers;
using SJZY.Track.Application.Options;
using SJZY.Track.Application.Services.Warning.Model;
using SJZY.Track.Domain.Aggregates.KPIAreaAggregate;
@@ -315,7 +316,6 @@ public sealed class WarningNotifyAggregator : ITransientDependency
{
var options = _optionsMonitor.CurrentValue;
var hours = options.ScanWarningNotifyTaskHourInterval;
- const float timeZone = 8.00f;
var transportCount = 0;
var transportLastNHoursCount = 0;
var returnCount = 0;
@@ -344,7 +344,6 @@ public sealed class WarningNotifyAggregator : ITransientDependency
return NotifyMessageBuilder.Build(
hours,
- timeZone,
transportCount,
transportLastNHoursCount,
returnCount,
@@ -364,7 +363,7 @@ public static class NotifyMessageBuilder
{
public const string Title = "预警通知";
- public static string Build(int hours, float timeZone,
+ public static string Build(int hours,
int transportCount, int transportLastNHoursCount,
int returnCount, int returnLastNHoursCount,
int completeCount, int completeLastNHoursCount)
@@ -375,15 +374,25 @@ public static class NotifyMessageBuilder
var url1 = "";
var url2 = "";
var url3 = "";
- var message = $"尊敬的用户,截止到{dateTime}(UTC {timeZone:+0:00:F2}),轨迹中心监测到与您相关的预警风险信息共计{totalCount} 条,请及时处理,详情如下:";
+
+ var message = $"{Title}\n尊敬的用户,截止到{dateTime}(UTC {BuildLocalTimezoneStr()}),轨迹中心监测到与您相关的预警风险信息共计{totalCount} 条,请及时处理,详情如下:";
if (transportCount > 0)
- message += $"\n运输时效预警共计{transportCount}条,其中过去{hours}小时内新增的预警{transportLastNHoursCount}条,查看详情{url1}";
+ message += $"\n运输时效预警共计{transportCount}条,其中过去{hours}小时内新增的预警{transportLastNHoursCount}条";
if (returnCount > 0)
- message += $"\n回传时效预警共计{returnCount}条,其中过去{hours}小时内新增的预警{returnLastNHoursCount}条,查看详情{url2}";
+ message += $"\n回传时效预警共计{returnCount}条,其中过去{hours}小时内新增的预警{returnLastNHoursCount}条";
if (completeCount > 0)
- message += $"\n轨迹完整预警共计{completeCount}条,其中过去{hours}小时内新增的预警{completeLastNHoursCount}条,查看详情{url3}";
+ message += $"\n轨迹完整预警共计{completeCount}条,其中过去{hours}小时内新增的预警{completeLastNHoursCount}条";
return message;
}
+
+ // 构建本地时区字符串标识 e.g UTC +8:00
+ private static string BuildLocalTimezoneStr()
+ {
+ var offset = TimeZoneInfo.Local.BaseUtcOffset;
+ var flag = offset.Hours > 0 ? "+" : "";
+ var offsetStr = offset.ToString().RemovePostFix(":00");
+ return $"UTC {flag}{offsetStr}";
+ }
}
diff --git a/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs b/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs
index b621a191..c92202a4 100644
--- a/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs
+++ b/src/SJZY.Track.Application/Helpers/DateTimeHelper.cs
@@ -66,7 +66,9 @@ public static class DateTimeHelper
{
if (timezone == null) return "--";
- if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 1) return "--";
+ if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 0.01f) return "--";
+
+ if (Math.Abs(timezone.Value) < 0.01f) return "GMT +00:00";
// 将小数形式的小时转换为时区偏移量
var hours = (int) timezone.Value; // 提取整数部分作为小时