Browse Source

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

xf 2 weeks ago
parent
commit
653c175935

+ 14 - 12
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -610,7 +610,7 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="dto"></param>
         /// <param name="dto"></param>
         /// <returns></returns>
         /// <returns></returns>
         [HttpGet("centre_data_list")]
         [HttpGet("centre_data_list")]
-        public async Task<List<OrderBiCentreDataListVo>> CentreDataList([FromQuery] ReportPagedRequest dto)
+        public async Task<TotalList<OrderBiCentreDataListVo>> CentreDataList([FromQuery] ReportPagedRequest dto)
         {
         {
             ISugarQueryable<OrderBiCentreDataListVo> query;
             ISugarQueryable<OrderBiCentreDataListVo> query;
             if (_appOptions.Value.IsZiGong)
             if (_appOptions.Value.IsZiGong)
@@ -619,18 +619,20 @@ namespace Hotline.Api.Controllers.Bi
                 query = _orderApplication.CentreDataList(dto);
                 query = _orderApplication.CentreDataList(dto);
 
 
             var list = await query.Where(x => (x.CentreArchive + x.CentreCareOf + x.NoCentreCareOf + x.Invalid + x.Repeat) != 0).ToListAsync(HttpContext.RequestAborted);
             var list = await query.Where(x => (x.CentreArchive + x.CentreCareOf + x.NoCentreCareOf + x.Invalid + x.Repeat) != 0).ToListAsync(HttpContext.RequestAborted);
-            if (_appOptions.Value.IsZiGong)
+
+            var total = new OrderBiCentreDataListVo
             {
             {
-                list.Add(new OrderBiCentreDataListVo
-                {
-                    UserName = "合计",
-                    CentreArchive = list.Select(s => s.CentreArchive).Sum(),
-                    CentreCareOf = list.Select(s => s.CentreCareOf).Sum(),
-                    NoCentreCareOf = list.Select(s => s.NoCentreCareOf).Sum(),
-                    Subtotal = list.Select(s => s.Subtotal).Sum()
-                });
-            }
-            return list;
+                UserName = "合计",
+                UserId = "",
+                CentreArchive = list.Select(s => s.CentreArchive).Sum(),
+                CentreCareOf = list.Select(s => s.CentreCareOf).Sum(),
+                NoCentreCareOf = list.Select(s => s.NoCentreCareOf).Sum(),
+                Invalid = list.Select(s => s.Invalid).Sum(),
+                Repeat = list.Select(s => s.Repeat).Sum(),
+                Subtotal = list.Select(s => s.Subtotal).Sum()
+            };
+
+            return new TotalList<OrderBiCentreDataListVo>(list, total);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 4 - 2
src/Hotline.Application/Jobs/ApptaskJob.cs

@@ -6,6 +6,8 @@ using Microsoft.Extensions.DependencyInjection;
 using Hotline.EventBus;
 using Hotline.EventBus;
 using Hotline.Share.Dtos.Order.OrderVisit;
 using Hotline.Share.Dtos.Order.OrderVisit;
 using Hotline.Share.Dtos.Order.OrderDelay;
 using Hotline.Share.Dtos.Order.OrderDelay;
+using Hotline.Application.OrderApp.OrderDelayApp;
+using Hotline.Application.OrderApp.OrderVisitApp;
 
 
 namespace Hotline.Application.Jobs
 namespace Hotline.Application.Jobs
 {
 {
@@ -34,13 +36,13 @@ namespace Hotline.Application.Jobs
             switch (task.TaskType)
             switch (task.TaskType)
             {
             {
                 case ETaskType.OrderDelay:
                 case ETaskType.OrderDelay:
-                    var delayExecutor = _serviceProvider.GetService<IApptaskExecutor<OrderDelayReviewRequest>>();
+                    var delayExecutor = _serviceProvider.GetService<IApptaskExecutor<OrderDelayReviewWithSessionRequest>>();
                     result = await _apptaskDomainService.ExecuteAsync(delayExecutor, task, context.CancellationToken);
                     result = await _apptaskDomainService.ExecuteAsync(delayExecutor, task, context.CancellationToken);
                     break;
                     break;
                 case ETaskType.OrderScreen:
                 case ETaskType.OrderScreen:
                     break;
                     break;
                 case ETaskType.VoiceVisit:
                 case ETaskType.VoiceVisit:
-                    var vvExecutor = _serviceProvider.GetService<IApptaskExecutor<VoiceVisitRequest>>();
+                    var vvExecutor = _serviceProvider.GetService<IApptaskExecutor<VoiceVisitWithSessionRequest>>();
                     result = await _apptaskDomainService.ExecuteAsync(vvExecutor, task, context.CancellationToken);
                     result = await _apptaskDomainService.ExecuteAsync(vvExecutor, task, context.CancellationToken);
                     break;
                     break;
                 default:
                 default:

+ 8 - 5
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -3583,7 +3583,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
 
                 NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(it.ActualHandleStepName == "话务部" &&
                 NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(it.ActualHandleStepName == "话务部" &&
                 it.Status < EOrderStatus.Filed && it.Status > EOrderStatus.WaitForAccept, 1, 0)),//待转办信件(当前节点为话务部,已受理未归档的工单)
                 it.Status < EOrderStatus.Filed && it.Status > EOrderStatus.WaitForAccept, 1, 0)),//待转办信件(当前节点为话务部,已受理未归档的工单)
-
+                Invalid = 0,
+                Repeat = 0,
                 Subtotal = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status > EOrderStatus.WaitForAccept, 1, 0))//排除待受理工单
                 Subtotal = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status > EOrderStatus.WaitForAccept, 1, 0))//排除待受理工单
             })
             })
             .LeftJoin<User>((it, u) => it.UserId == u.Id)
             .LeftJoin<User>((it, u) => it.UserId == u.Id)
@@ -3594,6 +3595,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 CentreArchive = it.CentreArchive,
                 CentreArchive = it.CentreArchive,
                 CentreCareOf = it.CentreCareOf,
                 CentreCareOf = it.CentreCareOf,
                 NoCentreCareOf = it.NoCentreCareOf,
                 NoCentreCareOf = it.NoCentreCareOf,
+                Invalid = it.Invalid,
+                Repeat = it.Repeat,
                 Subtotal = it.Subtotal
                 Subtotal = it.Subtotal
             }).MergeTable()
             }).MergeTable()
             ;
             ;
@@ -3632,17 +3635,17 @@ public class OrderApplication : IOrderApplication, IScopeDependency
        .WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
        .WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
        .WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
        .WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
        .WhereIF(!string.IsNullOrEmpty(dto.UserId), p => p.AcceptorId == dto.UserId);
        .WhereIF(!string.IsNullOrEmpty(dto.UserId), p => p.AcceptorId == dto.UserId);
-        if (dto.TypeId == "0")//所有信件
+        if (dto.FieldName == "subtotal")//所有信件
             query = query.Where(p => p.Status > EOrderStatus.WaitForAccept);
             query = query.Where(p => p.Status > EOrderStatus.WaitForAccept);
 
 
-        if (dto.TypeId == "1")//中心归档件
+        if (dto.FieldName == "centreArchive")//中心归档件
             query = query.Where(p => p.Status >= EOrderStatus.Filed && p.FileOrgIsCenter == true);
             query = query.Where(p => p.Status >= EOrderStatus.Filed && p.FileOrgIsCenter == true);
 
 
-        if (dto.TypeId == "2")//转办信件
+        if (dto.FieldName == "centreCareOf")//转办信件
             query = query.Where(p => (p.Status >= EOrderStatus.Filed && p.FileOrgIsCenter == false) ||
             query = query.Where(p => (p.Status >= EOrderStatus.Filed && p.FileOrgIsCenter == false) ||
                (p.ActualHandleStepName != "话务部" && p.Status < EOrderStatus.Filed && p.Status > EOrderStatus.WaitForAccept));
                (p.ActualHandleStepName != "话务部" && p.Status < EOrderStatus.Filed && p.Status > EOrderStatus.WaitForAccept));
 
 
-        if (dto.TypeId == "3")//待转办信件
+        if (dto.FieldName == "noCentreCareOf")//待转办信件
             query = query.Where(p => p.ActualHandleStepName == "话务部" && p.Status < EOrderStatus.Filed && p.Status > EOrderStatus.WaitForAccept);
             query = query.Where(p => p.ActualHandleStepName == "话务部" && p.Status < EOrderStatus.Filed && p.Status > EOrderStatus.WaitForAccept);
 
 
         query = query.OrderByDescending(p => p.CreationTime);
         query = query.OrderByDescending(p => p.CreationTime);

+ 3 - 1
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayApplication.cs

@@ -6,6 +6,7 @@ using Hotline.Share.Enums.FlowEngine;
 using MapsterMapper;
 using MapsterMapper;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Http;
 using System.Threading;
 using System.Threading;
+using Hotline.Authentications;
 using Hotline.BatchTask;
 using Hotline.BatchTask;
 using Hotline.Orders;
 using Hotline.Orders;
 using Hotline.Share.Dtos.BatchTask;
 using Hotline.Share.Dtos.BatchTask;
@@ -186,8 +187,9 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
             .ToListAsync(cancellation);
             .ToListAsync(cancellation);
 
 
         var apptaskItems = new List<AddApptaskItemRequest>();
         var apptaskItems = new List<AddApptaskItemRequest>();
-        var req = new OrderDelayReviewRequest
+        var req = new OrderDelayReviewWithSessionRequest
         {
         {
+            SessionContext = _sessionContext,
             IsPass = request.IsPass,
             IsPass = request.IsPass,
             NextWorkflow = request.NextWorkflow
             NextWorkflow = request.NextWorkflow
         };
         };

+ 16 - 0
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayReviewWithSessionRequest.cs

@@ -0,0 +1,16 @@
+using Hotline.Share.Dtos.Order.OrderDelay;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.BatchTask;
+using XF.Domain.Authentications;
+
+namespace Hotline.Application.OrderApp.OrderDelayApp
+{
+    public class OrderDelayReviewWithSessionRequest : OrderDelayReviewRequest, IApptaskRequest
+    {
+        public ISessionContext SessionContext { get; set; }
+    }
+}

+ 16 - 0
src/Hotline.Application/OrderApp/OrderVisitApp/VoiceVisitWithSessionRequest.cs

@@ -0,0 +1,16 @@
+using Hotline.Share.Dtos.Order.OrderVisit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.BatchTask;
+using XF.Domain.Authentications;
+
+namespace Hotline.Application.OrderApp.OrderVisitApp
+{
+    public class VoiceVisitWithSessionRequest : VoiceVisitRequest, IApptaskRequest
+    {
+        public ISessionContext SessionContext { get; set; }
+    }
+}

+ 0 - 12
src/Hotline.Share/Dtos/Order/OrderDelay/BatchOrderDelayReviewWithSessionRequest.cs

@@ -1,12 +0,0 @@
-namespace Hotline.Share.Dtos.Order.OrderDelay;
-
-public class BatchOrderDelayReviewWithSessionRequest : BatchOrderDelayReviewRequest
-{
-    public string? UserId { get; set; }
-    public string? UserName { get; set; }
-    public string? OrgId { get; set; }
-    public string? OrgName { get; set; }
-    public bool OrgIsCenter { get; set; }
-    public string? OrgAreaCode { get; set; }
-    public string? OrgAreaName { get; set; }
-}

+ 2 - 2
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -1779,7 +1779,7 @@ public record CentreDataListDetailRequest : PagedKeywordRequest
     public string? UserId { get; set; }
     public string? UserId { get; set; }
 
 
     /// <summary>
     /// <summary>
-    /// 明细类型 0:所有信件, 1:中心归档件,2:转办信件,3:待转办信件
+    /// 类型
     /// </summary>
     /// </summary>
-    public string? TypeId { get; set; }
+    public string? FieldName { get; set; }
 }
 }

+ 13 - 1
src/Hotline/Authentications/SessionContextProvider.cs

@@ -84,7 +84,7 @@ public class SessionContextProvider : ISessionContextProvider, IScopeDependency
         httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
         httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
     }
     }
 
 
-    public void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel)
+    public void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel, string orgAreaCode, string orgAreaName)
     {
     {
         var httpContext = _serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
         var httpContext = _serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
         httpContext ??= new DefaultHttpContext();
         httpContext ??= new DefaultHttpContext();
@@ -97,10 +97,22 @@ public class SessionContextProvider : ISessionContextProvider, IScopeDependency
             new(AppClaimTypes.DepartmentId, orgId ?? string.Empty),
             new(AppClaimTypes.DepartmentId, orgId ?? string.Empty),
             new(AppClaimTypes.DepartmentIsCenter, orgId?.IsCenter().ToString() ?? string.Empty),
             new(AppClaimTypes.DepartmentIsCenter, orgId?.IsCenter().ToString() ?? string.Empty),
             new(AppClaimTypes.DepartmentName, orgname ?? string.Empty),
             new(AppClaimTypes.DepartmentName, orgname ?? string.Empty),
+            new(AppClaimTypes.DepartmentAreaCode, orgAreaCode ?? string.Empty),
+            new(AppClaimTypes.DepartmentAreaName, orgAreaName ?? string.Empty),
             new(AppClaimTypes.DepartmentLevel, orgLevel.ToString() ?? string.Empty),
             new(AppClaimTypes.DepartmentLevel, orgLevel.ToString() ?? string.Empty),
             new(AppClaimTypes.AreaId, orgId?.GetHigherOrgId() ?? string.Empty),
             new(AppClaimTypes.AreaId, orgId?.GetHigherOrgId() ?? string.Empty),
         ];
         ];
         httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
         httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
     }
     }
 
 
+    public void ChangeSession(ISessionContext sessionContext) =>
+        ChangeSession(
+            sessionContext.UserId,
+            sessionContext.UserName,
+            sessionContext.OrgId,
+            sessionContext.OrgName,
+            sessionContext.OrgLevel,
+            sessionContext.OrgAreaCode,
+            sessionContext.OrgAreaName
+        );
 }
 }

+ 11 - 7
src/Hotline/BatchTask/ApptaskDomainService.cs

@@ -15,17 +15,20 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
 {
 {
     private readonly IRepository<Apptask> _apptaskRepository;
     private readonly IRepository<Apptask> _apptaskRepository;
     private readonly IRepository<ApptaskItem> _apptaskItemRepository;
     private readonly IRepository<ApptaskItem> _apptaskItemRepository;
+    private readonly ISessionContextProvider _sessionContextProvider;
     private readonly IMapper _mapper;
     private readonly IMapper _mapper;
     private readonly ILogger<ApptaskDomainService> _logger;
     private readonly ILogger<ApptaskDomainService> _logger;
 
 
     public ApptaskDomainService(
     public ApptaskDomainService(
         IRepository<Apptask> apptaskRepository,
         IRepository<Apptask> apptaskRepository,
         IRepository<ApptaskItem> apptaskItemRepository,
         IRepository<ApptaskItem> apptaskItemRepository,
+        ISessionContextProvider sessionContextProvider,
         IMapper mapper,
         IMapper mapper,
         ILogger<ApptaskDomainService> logger)
         ILogger<ApptaskDomainService> logger)
     {
     {
         _apptaskRepository = apptaskRepository;
         _apptaskRepository = apptaskRepository;
         _apptaskItemRepository = apptaskItemRepository;
         _apptaskItemRepository = apptaskItemRepository;
+        _sessionContextProvider = sessionContextProvider;
         _mapper = mapper;
         _mapper = mapper;
         _logger = logger;
         _logger = logger;
     }
     }
@@ -162,16 +165,17 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
     /// <param name="cancellation"></param>
     /// <param name="cancellation"></param>
     /// <returns></returns>
     /// <returns></returns>
     public async Task<ApptaskExecuteResult> ExecuteAsync<TRequest>(IApptaskExecutor<TRequest> executor, ApptaskItem apptaskItem, CancellationToken cancellation)
     public async Task<ApptaskExecuteResult> ExecuteAsync<TRequest>(IApptaskExecutor<TRequest> executor, ApptaskItem apptaskItem, CancellationToken cancellation)
+    where TRequest : class, IApptaskRequest
     {
     {
         try
         try
         {
         {
-            TRequest request = default;
-            if (!string.IsNullOrEmpty(apptaskItem.TaskParams))
-            {
-                request = System.Text.Json.JsonSerializer.Deserialize<TRequest>(apptaskItem.TaskParams);
-                if (request is null)
-                    throw new UserFriendlyException("任务参数反序列化异常");
-            }
+            if (string.IsNullOrEmpty(apptaskItem.TaskParams))
+                throw new UserFriendlyException($"无效任务参数, taskItemId: {apptaskItem.Id}");
+
+            var request = System.Text.Json.JsonSerializer.Deserialize<TRequest>(apptaskItem.TaskParams);
+            if (request is null)
+                throw new UserFriendlyException($"任务参数反序列化失败, taskItemId: {apptaskItem.Id}");
+            _sessionContextProvider.ChangeSession(request.SessionContext);
             var result = await executor.ExecuteAsync(request, cancellation);
             var result = await executor.ExecuteAsync(request, cancellation);
             apptaskItem.TaskStatus = result.IsSuccess ? ETaskStatus.Succeeded : ETaskStatus.Failed;
             apptaskItem.TaskStatus = result.IsSuccess ? ETaskStatus.Succeeded : ETaskStatus.Failed;
             apptaskItem.Message = result.Message;
             apptaskItem.Message = result.Message;

+ 2 - 1
src/Hotline/BatchTask/IApptaskDomainService.cs

@@ -51,6 +51,7 @@ namespace Hotline.BatchTask
         /// <param name="apptaskItem"></param>
         /// <param name="apptaskItem"></param>
         /// <param name="cancellation"></param>
         /// <param name="cancellation"></param>
         /// <returns></returns>
         /// <returns></returns>
-        Task<ApptaskExecuteResult> ExecuteAsync<TRequest>(IApptaskExecutor<TRequest> executor, ApptaskItem apptaskItem, CancellationToken cancellation);
+        Task<ApptaskExecuteResult> ExecuteAsync<TRequest>(IApptaskExecutor<TRequest> executor, ApptaskItem apptaskItem, CancellationToken cancellation)
+            where TRequest : class, IApptaskRequest;
     }
     }
 }
 }

+ 14 - 0
src/Hotline/BatchTask/IApptaskRequest.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Authentications;
+
+namespace Hotline.BatchTask
+{
+    public interface IApptaskRequest
+    {
+        public ISessionContext SessionContext { get; set; }
+    }
+}

+ 2 - 2
src/XF.Domain/Authentications/ISessionContextProvider.cs

@@ -14,8 +14,8 @@ namespace XF.Domain.Authentications
         //public void SetContext(string key);
         //public void SetContext(string key);
 
 
         HttpContext ChangeSessionByUserId(string id, HttpContext httpContext);
         HttpContext ChangeSessionByUserId(string id, HttpContext httpContext);
-
         Task ChangeSessionByUserIdAsync(string userId, CancellationToken cancellation);
         Task ChangeSessionByUserIdAsync(string userId, CancellationToken cancellation);
-        void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel);
+        void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel, string orgAreaCode, string orgAreaName);
+        void ChangeSession(ISessionContext sessionContext);
     }
     }
 }
 }