Selaa lähdekoodia

Merge branch 'feature/order_migrate' of http://110.188.24.182:10023/Fengwo/hotline into feature/order_migrate

xf 10 kuukautta sitten
vanhempi
commit
1a4a4182d6

+ 19 - 8
src/Hotline.Application/Identity/IdentityAppService.cs

@@ -1,18 +1,23 @@
 using System.Security.Claims;
+using Hotline.Caching.Interfaces;
 using Hotline.Identity;
 using Hotline.Identity.Accounts;
 using Hotline.Orders;
 using Hotline.Push;
 using Hotline.Schedulings;
 using Hotline.Settings;
+using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Identity;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Identity;
 using Hotline.Users;
 using IdentityModel;
+using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Identity;
 using Microsoft.Extensions.Options;
 using XF.Domain.Authentications;
 using XF.Domain.Cache;
+using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Options;
@@ -31,8 +36,9 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
     private readonly IMessageCodeDomainService _messageCodeDomainService;
     private readonly IRepository<Scheduling> _schedulingRepository;
     private readonly IOrderDomainService _orderDomainService;
+    private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
-    public IdentityAppService(
+	public IdentityAppService(
         IAccountRepository accountRepository,
         IAccountDomainService accountDomainService,
         IRepository<User> userRepository,
@@ -41,7 +47,8 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
         ITypedCache<AudienceTicket> cacheAudience,
         IMessageCodeDomainService messageCodeDomainService,
         IRepository<Scheduling> schedulingRepository,
-         IOrderDomainService orderDomainService)
+        IOrderDomainService orderDomainService,
+        ISystemSettingCacheManager systemSettingCacheManager)
     {
         _accountRepository = accountRepository;
         _accountDomainService = accountDomainService;
@@ -52,7 +59,9 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
         _messageCodeDomainService = messageCodeDomainService;
         _schedulingRepository = schedulingRepository;
         _orderDomainService = orderDomainService;
-    }
+        _systemSettingCacheManager = systemSettingCacheManager;
+
+	}
 
     public async Task<string> LoginAsync(LoginDto dto, CancellationToken cancellationToken)
     {
@@ -99,9 +108,12 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
             .FirstAsync(d => d.Id == account.Id);
         if (user == null)
             throw UserFriendlyException.SameMessage("未查询到用户数据");
-        //平均派单
-        await AverageOrderScheduling(account.Id, cancellationToken);
-
+		//平均派单
+		var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
+		if (averageSendOrder)
+		{
+			await AverageOrderScheduling(account.Id, cancellationToken);
+		}
         var jwtOptions = _identityOptionsAccessor.Value.Jwt;
         var claims = new List<Claim>
         {
@@ -155,9 +167,8 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
             if (scheduling != null)
             {
                 scheduling.AtWork = true;
-                await _schedulingRepository.UpdateAsync(scheduling, cancellationToken);
                 //执行登录平均派单
-                await _orderDomainService.LogAverageOrder(id, cancellationToken);
+                await _orderDomainService.LogAverageOrder(id, scheduling, cancellationToken);
             }
         }
         catch

+ 3 - 2
src/Hotline/Orders/IOrderDomainService.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Dtos;
+using Hotline.Schedulings;
+using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
 
@@ -68,7 +69,7 @@ namespace Hotline.Orders
         /// </summary>
         /// <param name="userId"></param>
         /// <returns></returns>
-        Task LogAverageOrder(string userId, CancellationToken cancellationToken);
+        Task LogAverageOrder(string userId, Scheduling scheduling, CancellationToken cancellationToken);
 
         /// <summary>
         /// 触发平均派单

+ 10 - 87
src/Hotline/Orders/OrderDomainService.cs

@@ -17,6 +17,7 @@ using Hotline.Users;
 using Hotline.Share.Dtos;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Dtos.FlowEngine;
+using Microsoft.AspNetCore.Http;
 
 namespace Hotline.Orders;
 
@@ -190,7 +191,6 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             .Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay && x.AtWork == true)
             .OrderBy(x => x.SendOrderNum).FirstAsync(cancellationToken);
         if (scheduling is null)
-            //return new List<Kv> { new(OrderDefaults.SourceChannel.SendPoolId, "待派单池") };
             return new FlowStepHandler
             {
                 Key = OrderDefaults.SourceChannel.SendPoolId,
@@ -198,13 +198,8 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                 UserId = OrderDefaults.SourceChannel.SendPoolId,
                 Username = "待派单池",
             };
-
-        //var user = await _userRepository.GetAsync(x => x.Id == scheduling.SchedulingUser.UserId, cancellationToken);
-        //if (user is null)
-        //    throw new UserFriendlyException("无效用户编号");
         scheduling.SendOrderNum++;
         await _schedulingRepository.UpdateAsync(scheduling, cancellationToken);
-        //return new List<Kv> { new(user.Id, user.Name) };
         var user = scheduling.SchedulingUser;
         return new FlowStepHandler
         {
@@ -222,13 +217,11 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     /// </summary>
     /// <param name="userId"></param>
     /// <returns></returns>
-    public async Task LogAverageOrder(string userId, CancellationToken cancellationToken)
+    public async Task LogAverageOrder(string userId, Scheduling scheduling, CancellationToken cancellationToken)
     {
         //1.获取默认派单员所属的工单
         //2.获取今天上班的人员
         //3.给当前这个用户平均派单
-        //var steps = await _workflowDomainService.GetUnhandleStepIdsFromSendPoolAsync(OrderDefaults.SourceChannel.SendPoolId, cancellationToken);
-        //var stepsList = steps.ToList();
 
         var steps = await _workflowDomainService.GetStepsBelongsToAsync(OrderDefaults.SourceChannel.SendPoolId,
             cancellationToken);
@@ -239,7 +232,6 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         var time = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
         var schedulings = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
             .Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay).CountAsync(cancellationToken);
-
         if (schedulings > 0)
         {
             var sendNum = steps.Count / schedulings;
@@ -249,29 +241,10 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             {
                 new(user.Id, user.Name, user.OrgId, user.Organization.Name, sendSteps)
             }, cancellationToken);
-
-
-            //List<string> stepIds = new List<string>();
-            //var sendNum = stepsList.Count() / schedulings;
-            //for (int i = 0; i < sendNum; i++)
-            //{
-            //    stepIds.Add(stepsList[0]);
-            //    stepsList.Remove(stepsList[0]);
-            //}
-            //List<(string, string, string, string, IReadOnlyList<string> stepIds)> handlers = new();
-            //handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(user.Id, user.Name, user.OrgId, user.Organization.Name, stepIds));
-            //var workflowIds = await _workflowDomainService.ChangeHandlerRangeAsync(OrderDefaults.SourceChannel.SendPoolId, handlers, cancellationToken);
-            //var orders = await _orderRepository.Queryable().Includes(d => d.Workflow).Where(d => workflowIds.Contains(d.WorkflowId))
-            //    .ToListAsync(cancellationToken);
-            //foreach (var order in orders)
-            //{
-            //    _mapper.Map(order.Workflow, order);
-            //}
-            var scheduling = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
-                .Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay && x.SchedulingUser.UserId == userId).FirstAsync(cancellationToken);
             scheduling.SendOrderNum += sendNum;
-            await _schedulingRepository.UpdateAsync(scheduling, cancellationToken);
-            //await _orderRepository.UpdateRangeAsync(orders, cancellationToken);
+            await _schedulingRepository.Updateable()
+                .SetColumns(s => new Scheduling() { SendOrderNum = scheduling.SendOrderNum, AtWork = scheduling.AtWork } )
+                .Where(s=> s.Id == scheduling.Id).ExecuteCommandAsync(cancellationToken);
         }
 
     }
@@ -309,58 +282,14 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
                         scheduling.SchedulingUser.OrgId,
                         scheduling.SchedulingUser.OrgIdName,
                         steps.Take(size).ToList()));
-                }
-
+                    scheduling.SendOrderNum += size;
+					await _schedulingRepository.Updateable()
+	                    .SetColumns(s => new Scheduling() { SendOrderNum = scheduling.SendOrderNum })
+	                    .Where(s => s.Id == scheduling.Id).ExecuteCommandAsync(cancellationToken);
+				}
                 if (handlers.Any())
                     await _workflowDomainService.ChangeHandlerBatchAsync(handlers, cancellationToken);
             }
-
-
-
-            ////
-            //var steps = await _workflowDomainService.GetUnhandleStepIdsFromSendPoolAsync(OrderDefaults.SourceChannel.SendPoolId, cancellationToken);
-            //var stepsList = steps.ToList();
-
-            //var sendNum = steps.Count() / schedulings.Count();
-            //List<(string userId, string username, string orgId, string orgName, IReadOnlyList<string> stepIds)> handlers = new();
-            //if (sendNum > 0)
-            //{
-
-            //    foreach (var scheduling in schedulings)
-            //    {
-            //        List<string> stepIds = new List<string>();
-            //        for (int i = 0; i < sendNum; i++)
-            //        {
-            //            stepIds.Add(stepsList[0]);
-            //            stepsList.Remove(stepsList[0]);
-            //        }
-            //        handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(scheduling.SchedulingUser.UserId, scheduling.SchedulingUser.UserName, scheduling.SchedulingUser.OrgId, scheduling.SchedulingUser.OrgIdName, stepIds));
-
-            //    }
-            //}
-            //sendNum = steps.Count() % schedulings.Count();
-            //if (sendNum > 0)
-            //{
-            //    List<string> stepIds = new List<string>();
-            //    for (int i = 0; i < sendNum; i++)
-            //    {
-            //        stepIds.Add(stepsList[0]);
-            //        stepsList.Remove(stepsList[0]);
-            //    }
-            //    handlers.Add(new ValueTuple<string, string, string, string, IReadOnlyList<string>>(schedulings[0].SchedulingUser.UserId, schedulings[0].SchedulingUser.UserName, schedulings[0].SchedulingUser.OrgId, schedulings[0].SchedulingUser.OrgIdName, stepIds));
-            //}
-            //if (handlers.Any())
-            //{
-            //    var workflowIds = await _workflowDomainService.ChangeHandlerRangeAsync(OrderDefaults.SourceChannel.SendPoolId, handlers, cancellationToken);
-            //    var orders = await _orderRepository.Queryable().Includes(d => d.Workflow).Where(d => workflowIds.Contains(d.WorkflowId))
-            //        .ToListAsync(cancellationToken);
-            //    foreach (var order in orders)
-            //    {
-            //        _mapper.Map(order.Workflow, order);
-            //    }
-
-            //    await _orderRepository.UpdateRangeAsync(orders, cancellationToken);
-            //}
         }
     }
     #endregion
@@ -442,12 +371,6 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             valid.Result = "标题或受理内容出现限制词,请检查!";
         return valid;
     }
-    #endregion
-
-    #region SchedulingSendOrder
-
-
-
     #endregion
 
     #region private