Bläddra i källkod

增加随手拍工单单人次提交间隔限制

qinchaoyue 1 vecka sedan
förälder
incheckning
de733dd1c6

+ 9 - 1
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -3,6 +3,7 @@ using Fw.Utility.UnifyResponse;
 using Hotline.Api.Filter;
 using Hotline.Application.Snapshot.Contracts;
 using Hotline.Caching.Interfaces;
+using Hotline.Caching.Services;
 using Hotline.File;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.Snapshot;
@@ -53,8 +54,9 @@ public class SnapshotController : BaseController
     private readonly IThirdAccountRepository _thirdAccountRepository;
     private readonly ILogger<SnapshotController> _logger;
     private readonly IRepository<SystemWebPageSetting> _webPageRepository;
+    private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
-    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger, IRepository<SystemWebPageSetting> webPageRepository)
+    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger, IRepository<SystemWebPageSetting> webPageRepository, ISystemSettingCacheManager systemSettingCacheManager)
     {
         _orderRepository = orderRepository;
         _snapshotApplication = snapshotApplication;
@@ -68,6 +70,7 @@ public class SnapshotController : BaseController
         _thirdAccountRepository = thirdAccountRepository;
         _logger = logger;
         _webPageRepository = webPageRepository;
+        _systemSettingCacheManager = systemSettingCacheManager;
     }
 
     /// <summary>
@@ -107,6 +110,11 @@ public class SnapshotController : BaseController
     [LogFilterAlpha("添加随手拍工单")]
     public async Task<AddSnapshotOrderOutDto> AddOrderAsync([FromBody] AddSnapshotOrderInDto dto)
     {
+        var minute = _systemSettingCacheManager.SnapshotIntervalMinutes;
+        var timeout = await _orderRepository.Queryable().Where(m => m.CreatorId == _sessionContext.UserId
+                        && DateTime.Now.AddMinutes(-minute) < m.CreationTime)
+            .AnyAsync();
+        if (timeout) throw UserFriendlyException.SameMessage($"请{minute}分钟后再提交工单");
         var ssp = _systemDicDataCacheManager.SourceChannel.FirstOrDefault(m => m.DicDataName == "随手拍")
             ?? throw UserFriendlyException.SameMessage("请添加[随手拍]来源.");
         var order = dto.Adapt<Order>();

+ 5 - 0
src/Hotline/Caching/Interfaces/ISystemSettingCacheManager.cs

@@ -112,6 +112,11 @@ namespace Hotline.Caching.Interfaces
 
         bool Snapshot { get; }
 
+        /// <summary>
+        /// 小程序同一个用户上报工单间隔时间(单位:分)
+        /// </summary>
+        int SnapshotIntervalMinutes { get; }
+
         /// <summary>
         /// 是否开启自动填写办理意见至汇总节点
         /// </summary>

+ 10 - 0
src/Hotline/Caching/Services/SystemSettingCacheManager.cs

@@ -234,6 +234,16 @@ namespace Hotline.Caching.Services
             }
         }
 
+        /// <summary>
+        /// 小程序同一个用户上报工单间隔时间(单位:分)
+        /// </summary>
+        public int SnapshotIntervalMinutes =>
+                        GetOrDefault("08dcf5d6-fcda-40c4-8f25-65a636f4d99d",
+                            SettingConstants.SnapshotIntervalMinutes,
+                            "小程序同一个用户上报工单间隔时间(单位:分)",
+                            20,
+                            "小程序同一个用户上报工单间隔时间(单位:分)");
+
         /// <summary>
         /// 是否开启自动填写办理意见至汇总节点
         /// </summary>

+ 5 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -825,5 +825,10 @@ namespace Hotline.Settings
         /// 是否开启白名单查询
         /// </summary>
         public const string IsOpenWhiteList = "IsOpenWhiteList";
+
+        /// <summary>
+        /// 小程序同一个用户上报工单间隔时间(单位:分)
+        /// </summary>
+        public const string SnapshotIntervalMinutes = "SnapshotIntervalMinutes";
     }
 }

+ 3 - 0
test/Hotline.Tests/Application/SystemSettingCacheManagerTest.cs

@@ -1,5 +1,6 @@
 using Hotline.Api.Controllers;
 using Hotline.Caching.Interfaces;
+using Hotline.Caching.Services;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Settings;
@@ -34,6 +35,8 @@ public class SystemSettingCacheManagerTest : TestBase
     [Fact]
     public void CancelPublishOrderEnabled_Test()
     {
+        var time = _systemSettingCacheManager.SnapshotIntervalMinutes;
+        time.ShouldBe(20);
         var dd = DateTime.Parse("11/19/2024 18:08:00");
         _systemSettingCacheManager.CallSyncUnPushDateTime.ShouldBe(DateTime.Parse("2025/04/11 15:40:00"));
         //var result = _systemSettingCacheManager.CancelPublishOrderEnabled;