qinchaoyue před 7 měsíci
rodič
revize
7694c84699

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -86,7 +86,7 @@ public class OrderController : BaseController
     private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
     private readonly ICapPublisher _capPublisher;
     private readonly IOrderDelayRepository _orderDelayRepository;
-    //private readonly ITimeLimitDomainService _timeLimitDomainService;
+    private readonly ITimeLimitDomainService _timeLimitDomainService;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     private readonly IRepository<OrderRedo> _orderRedoRepository;
     private readonly IRepository<OrderSupervise> _orderSuperviseRepository;

+ 26 - 0
src/Hotline.Application.Tests/Application/ExpireTimeHandlerTest.cs

@@ -0,0 +1,26 @@
+using Hotline.Settings.TimeLimitDomain;
+using Shouldly;
+
+namespace Hotline.Application.Tests.Application;
+public class ExpireTimeHandlerTest
+{
+
+    private readonly IExpireTimeHandler _expireTimeHandler;
+
+    public ExpireTimeHandlerTest(IExpireTimeHandler expireTimeHandler)
+    {
+        _expireTimeHandler = expireTimeHandler;
+    }
+
+    [Theory]
+    [InlineData("2024/09/04", false)]
+    [InlineData("2024/09/05", false)]
+    [InlineData("2024/09/06", false)]
+    [InlineData("2024/09/07", true)]
+    public async Task Test_GetExpireTime(string time, bool work)
+    {
+        var dateTime = DateTime.Parse(time);
+        var result = await _expireTimeHandler.NotWorkDay(dateTime);
+        result.ShouldBe(work);
+    }
+}

+ 3 - 3
src/Hotline.Application.Tests/DefaultHttpContextAccessor.cs

@@ -14,11 +14,11 @@ public class DefaultHttpContextAccessor : IHttpContextAccessor, ISessionContext
     private HttpContext GetContext()
     { 
         var context = new DefaultHttpContext();
-        var openId = new Claim(AppClaimTypes.OpenId, "测试生成的OpenId");
+        //var openId = new Claim(AppClaimTypes.OpenId, "测试生成的OpenId");
         var id = new ClaimsIdentity("身份");
-        id.AddClaim(openId);
+        //id.AddClaim(openId);
         context.User = new ClaimsPrincipal(id);
-        OpenId = context.User.FindFirstValue(AppClaimTypes.OpenId);
+        //OpenId = context.User.FindFirstValue(AppClaimTypes.OpenId);
         return context;
 
     }

+ 3 - 8
src/Hotline.Application.Tests/Startup.cs

@@ -9,7 +9,6 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
-using Hotline.Application.Snapshot;
 using Hotline.Api;
 using Microsoft.AspNetCore.Identity;
 using XF.Domain.Dependency;
@@ -29,7 +28,6 @@ using Polly;
 using Senparc.Weixin.AspNet;
 using Hotline.Share.Tools;
 using Hotline.Users;
-using Hotline.Snapshot.Test;
 using Hotline.Identity;
 using XF.Domain.Cache;
 using XF.EasyCaching;
@@ -39,9 +37,6 @@ using XF.Utility.MQ;
 using Microsoft.Extensions.DependencyInjection.Extensions;
 using DotNetCore.CAP;
 using XF.Domain.Options;
-using Hotline.WeChat;
-using Hotline.Snapshot;
-using Hotline.Repository.SqlSugar.Snapshot;
 
 namespace Hotline.Application.Tests;
 public class Startup
@@ -90,7 +85,7 @@ public class Startup
             services.AddSqlSugar(configuration);
 
             // application services
-            services.AddScoped<ISnapshotApplication, SnapshotApplication>();
+            // services.AddScoped<ISnapshotApplication, SnapshotApplication>();
 
             //mq
             services.AddTestMq(configuration);
@@ -119,10 +114,10 @@ public class Startup
                 .ToList()
                 .ForEach(d => ServiceRegister.Register(services, d));
 
-            services.AddScoped<IThirdIdentiyService, ThirdTestService>();
+            //services.AddScoped<IThirdIdentiyService, ThirdTestService>();
             // services.AddScoped<IThirdIdentiyService, WeChatService>();
 
-            services.AddScoped<IThirdAccountRepository, ThirdAccountRepository>();
+            //services.AddScoped<IThirdAccountRepository, ThirdAccountRepository>();
             ServiceLocator.Instance = services.BuildServiceProvider();
         }
 

+ 4 - 0
src/Hotline.Application/Mappers/MapperConfigs.cs

@@ -9,6 +9,7 @@ using Hotline.Share.Dtos.JudicialManagement;
 using Hotline.Share.Dtos.OrderExportWord;
 using Hotline.Share.Dtos.Org;
 using Hotline.Share.Dtos.Push.FWMessage;
+using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.Order;
 using Mapster;
 using XF.Domain.Entities;
@@ -19,6 +20,9 @@ namespace Hotline.Application.Mappers
     {
         public void Register(TypeAdapterConfig config)
         {
+            config.ForType<TimeLimitSetting, TimeConfig>()
+                .Map(d => d.Count, x => x.TimeValue);
+
             config.ForType<AddBlacklistDto, Blacklist>()
                 .Ignore(d => d.Expired)
                 .AfterMapping((s, t) => t.InitExpired());

+ 11 - 0
src/Hotline.Share/Dtos/Settings/TimeConfig.cs

@@ -25,11 +25,22 @@ namespace Hotline.Share.Dtos.Settings
         public int Count { get; set; }
         public ETimeType TimeType { get; set; }
         public string TimeText { get; set; }
+
+        /// <summary>
+        /// 超期时限百分比
+        /// </summary>
+        public int Percentage { get; set; }
+
+        /// <summary>
+        /// 超期时间百分比(第一级)
+        /// </summary>
+        public int PercentageOne { get; set; }
     }
 
     public class ExpiredTimeWithConfig : TimeConfig
     {
         public DateTime ExpiredTime { get; set; }
+
         /// <summary>
         /// 即将超期时间
         /// </summary>

+ 2 - 2
src/Hotline.Share/Enums/Settings/ETimeType.cs

@@ -9,8 +9,8 @@ namespace Hotline.Share.Enums.Settings
 {
     public enum ETimeType
     {
-        //[Description("小时")]
-        //Hour = 1,
+        [Description("小时")]
+        Hour = 1,
         [Description("工作日")]
         WorkDay = 2,
         [Description("自然日")]

+ 1 - 0
src/Hotline.Share/Hotline.Share.csproj

@@ -13,6 +13,7 @@
   <ItemGroup>
     <PackageReference Include="DocXCore" Version="1.0.10" />
     <PackageReference Include="MediatR.Contracts" Version="1.0.1" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
     <PackageReference Include="XF.Utility.EnumExtensions" Version="1.0.4" />
   </ItemGroup>
 

+ 7 - 0
src/Hotline.Share/Tools/ServiceLocator.cs

@@ -0,0 +1,7 @@
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Hotline.Share.Tools;
+public static class ServiceLocator
+{
+    public static ServiceProvider Instance { get; set; }
+}

+ 6 - 0
src/Hotline/Settings/SystemDicData.cs

@@ -47,5 +47,11 @@ namespace Hotline.Settings
 
         [SugarColumn(IsIgnore = true)]
         public List<SystemDicData> Children { get; set; }
+
+		/// <summary>
+		/// 附加数据
+		///</summary>
+		[SugarColumn(ColumnDataType = "json", IsJson = true)]
+		public string? Attach { get; set; }        
     }
 }

+ 4 - 3
src/Hotline/Settings/TimeLimitDomain/ExpireTimeLimitBase.cs

@@ -13,7 +13,7 @@ namespace Hotline.Settings.TimeLimitDomain;
 /// <summary>
 /// 过期时间处理基类
 /// </summary>
-public abstract class ExpireTimeLimitBase 
+public abstract class ExpireTimeLimitBase
 {
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     private readonly IRepository<TimeLimitSetting> _timeLimitSettingRepository;
@@ -95,7 +95,8 @@ public abstract class ExpireTimeLimitBase
         else
         {
             var timeSetting = _timeLimitSettingRepository.Queryable().First(x => x.BusCode == code);
-            return new TimeConfig(timeSetting.TimeValue, timeSetting.TimeType);
+            //return new TimeConfig(timeSetting.TimeValue, timeSetting.TimeType);
+            return timeSetting.MapTo<TimeConfig>();
         }
     }
 
@@ -175,7 +176,7 @@ public abstract class ExpireTimeLimitBase
     /// <param name="PercentageOne">超期百分比第一级</param>
     /// <returns></returns>    
     public virtual async Task<TimeResult> CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue, int Percentage, int PercentageOne)
-    { 
+    {
         var workTime = _systemSettingRepository.Get(x => x.Code == SettingConstants.WorkTime);
         return await _expireTimeHandler.CalcEndTimeAsync(beginTime, timeType, workTime.SettingValue, timeValue, Percentage, PercentageOne);
     }

+ 2 - 0
src/Hotline/Settings/TimeLimitDomain/IExpireTimeHandler.cs

@@ -5,6 +5,8 @@ using XF.Domain.Dependency;
 namespace Hotline.Settings.TimeLimitDomain;
 public interface IExpireTimeHandler 
 {
+    Task<bool> NotWorkDay(DateTime date);
+
     /// <summary>
     /// 计算工作时间分钟数
     /// </summary>

+ 4 - 8
src/Hotline/Settings/TimeLimitDomain/YBExpireTimeLimit.cs → src/Hotline/Settings/TimeLimitDomain/YiBinExpireTimeLimit.cs

@@ -1,21 +1,17 @@
 using Hotline.Caching.Interfaces;
+using Hotline.DI;
 using Hotline.Settings.TimeLimits;
-using Hotline.Share.Dtos.Settings;
-using Hotline.Share.Enums.FlowEngine;
-using Hotline.Share.Enums.Settings;
 using MapsterMapper;
-using System.Runtime.CompilerServices;
 using XF.Domain.Dependency;
-using XF.Domain.Exceptions;
 using XF.Domain.Repository;
-using XF.Utility.EnumExtensions;
 
 namespace Hotline.Settings.TimeLimitDomain;
 
 /// <summary>
 /// 宜宾过期时间计算
 /// </summary>
-public class YBExpireTimeLimit : ExpireTimeLimitBase, ICalcExpireTime, IScopeDependency
+[Injection(AppScopes = EAppScope.YiBin)]
+public class YiBinExpireTimeLimit : ExpireTimeLimitBase, ICalcExpireTime, IScopeDependency
 {
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     private readonly IRepository<TimeLimitSetting> _timeLimitSettingRepository;
@@ -24,7 +20,7 @@ public class YBExpireTimeLimit : ExpireTimeLimitBase, ICalcExpireTime, IScopeDep
     private readonly IRepository<SystemSetting> _systemSettingRepository;
     private readonly IDaySettingRepository _daySettingRepository;
 
-    public YBExpireTimeLimit(ISystemSettingCacheManager systemSettingCacheManager, IRepository<TimeLimitSetting> timeLimitSettingRepository, IExpireTimeHandler expireTimeHandler, IMapper mapper, IRepository<SystemSetting> systemSettingRepository, IDaySettingRepository daySettingRepository) : base(systemSettingCacheManager, timeLimitSettingRepository, expireTimeHandler, mapper, systemSettingRepository, daySettingRepository)
+    public YiBinExpireTimeLimit(ISystemSettingCacheManager systemSettingCacheManager, IRepository<TimeLimitSetting> timeLimitSettingRepository, IExpireTimeHandler expireTimeHandler, IMapper mapper, IRepository<SystemSetting> systemSettingRepository, IDaySettingRepository daySettingRepository) : base(systemSettingCacheManager, timeLimitSettingRepository, expireTimeHandler, mapper, systemSettingRepository, daySettingRepository)
     {
         _systemSettingCacheManager = systemSettingCacheManager;
         _timeLimitSettingRepository = timeLimitSettingRepository;

+ 40 - 0
src/Hotline/Settings/TimeLimitDomain/ZiGongExpireTimeLimit.cs

@@ -0,0 +1,40 @@
+using Hotline.Caching.Interfaces;
+using Hotline.DI;
+using Hotline.Settings.TimeLimits;
+using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Enums.Settings;
+using MapsterMapper;
+using XF.Domain.Dependency;
+using XF.Domain.Repository;
+
+namespace Hotline.Settings.TimeLimitDomain;
+
+/// <summary>
+/// 自贡过期时间计算
+/// </summary>
+[Injection(AppScopes = EAppScope.ZiGong)]
+public class ZiGongExpireTimeLimit : ExpireTimeLimitBase, ICalcExpireTime, IScopeDependency
+{
+    private readonly ISystemSettingCacheManager _systemSettingCacheManager;
+    private readonly IRepository<TimeLimitSetting> _timeLimitSettingRepository;
+    private readonly IExpireTimeHandler _expireTimeHandler;
+    private readonly IMapper _mapper;
+    private readonly IRepository<SystemSetting> _systemSettingRepository;
+    private readonly IDaySettingRepository _daySettingRepository;
+
+    public ZiGongExpireTimeLimit(ISystemSettingCacheManager systemSettingCacheManager, IRepository<TimeLimitSetting> timeLimitSettingRepository, IExpireTimeHandler expireTimeHandler, IMapper mapper, IRepository<SystemSetting> systemSettingRepository, IDaySettingRepository daySettingRepository) : base(systemSettingCacheManager, timeLimitSettingRepository, expireTimeHandler, mapper, systemSettingRepository, daySettingRepository)
+    {
+        _systemSettingCacheManager = systemSettingCacheManager;
+        _timeLimitSettingRepository = timeLimitSettingRepository;
+        _expireTimeHandler = expireTimeHandler;
+        _mapper = mapper;
+        _systemSettingRepository = systemSettingRepository;
+        _daySettingRepository = daySettingRepository;
+    }
+
+    public override Task<TimeResult> CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue, int Percentage, int PercentageOne)
+    {
+        return base.CalcEndTime(beginTime, timeType, timeValue, Percentage, PercentageOne);
+    }
+}
+

+ 1 - 1
src/XF.Domain/Dependency/DependencyInjectionExtensions.cs

@@ -84,7 +84,7 @@ public static class DependencyInjectionExtensions
     }
 }
 
-internal class ServiceRegister
+public class ServiceRegister
 {
     public static void Register(IServiceCollection services, Type type)
     {