瀏覽代碼

自贡任务 230 【标书】数据大屏新增展示内容

tangjiang 3 月之前
父節點
當前提交
5a094b8f44

+ 71 - 2
src/Hotline.Api/Controllers/Bigscreen/DataScreenController.cs

@@ -1,9 +1,11 @@
-using Hotline.Configurations;
+using DocumentFormat.OpenXml.Drawing;
+using Hotline.Configurations;
 using Hotline.KnowledgeBase;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.Orders;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
+using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Bigscreen;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.KnowledgeBase;
@@ -28,11 +30,13 @@ namespace Hotline.Api.Controllers.Bigscreen
         private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
         private readonly IRepository<SystemArea> _systemAreaRepository;
         private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
+        private readonly IRepository<OrderSecondaryHandling> _orderSecondaryHandlingRepository;
 
         public DataScreenController(IOrderRepository orderRepository, IRepository<OrderVisit> orderVisitRepository,
             IRepository<OrderDelay> orderDelayRepository, IRepository<Knowledge> knowledgeRepository, IRepository<KnowledgePv> knowledgePvRepository,
             IMapper mapper, IRepository<OrderVisitDetail> orderVisitDetailRepository, IRepository<SystemArea> systemAreaRepository,
-            IOptionsSnapshot<AppConfiguration> appOptions)
+            IOptionsSnapshot<AppConfiguration> appOptions,
+            IRepository<OrderSecondaryHandling> orderSecondaryHandlingRepository)
         {
             _orderRepository = orderRepository;
             _orderVisitRepository = orderVisitRepository;
@@ -43,6 +47,7 @@ namespace Hotline.Api.Controllers.Bigscreen
             _orderVisitDetailRepository = orderVisitDetailRepository;
             _systemAreaRepository = systemAreaRepository;
             _appOptions = appOptions;
+            _orderSecondaryHandlingRepository = orderSecondaryHandlingRepository;
         }
 
         /// <summary>
@@ -590,5 +595,69 @@ namespace Hotline.Api.Controllers.Bigscreen
                 return list;
             }
         }
+
+        /// <summary>
+        /// 二次办理统计
+        /// </summary>
+        /// <param name="StartTime"></param>
+        /// <param name="EndTime"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpGet("order-secondary-statistics")]
+        public async Task<SecondaryProcessingOrderStatisticsDto> OrderSecondaryStatistics(DateTime StartTime, DateTime EndTime)
+        {
+            EndTime = EndTime.AddDays(1).AddSeconds(-1);
+            var data = new SecondaryProcessingOrderStatisticsDto
+            {
+                OrderCount = await _orderSecondaryHandlingRepository.Queryable()
+                 .Where(x => x.AuditTime >= StartTime && x.AuditTime <= EndTime && x.State != ESecondaryHandlingState.NotApply
+                 && x.State != ESecondaryHandlingState.Apply && x.State != ESecondaryHandlingState.Refuse).CountAsync(),
+
+                OrderOverdueCount = await _orderSecondaryHandlingRepository.Queryable()
+                .Includes(x => x.Order)
+                 .Where(x => x.Order.ExpiredStatus == EExpiredStatus.Expired && x.AuditTime >= StartTime && x.AuditTime <= EndTime
+                 && x.State != ESecondaryHandlingState.NotApply
+                 && x.State != ESecondaryHandlingState.Apply && x.State != ESecondaryHandlingState.Refuse)
+                 .CountAsync(),
+
+                OrderSoonOverdueCount = await _orderSecondaryHandlingRepository.Queryable()
+                .Includes(x => x.Order)
+                 .Where(x => x.Order.ExpiredStatus == EExpiredStatus.GoingToExpired && x.AuditTime >= StartTime && x.AuditTime <= EndTime
+                 && x.State != ESecondaryHandlingState.NotApply
+                 && x.State != ESecondaryHandlingState.Apply && x.State != ESecondaryHandlingState.Refuse)
+                 .CountAsync()
+            };
+            var da = await _orderSecondaryHandlingRepository.Queryable()
+                .LeftJoin<OrderVisit>((os, ov) => os.VisitId == ov.Id)
+                    .LeftJoin<OrderVisitDetail>((os, ov, od) => os.VisitDetailId == od.Id)
+                    .Where((os, ov, od) => ov.VisitTime >= StartTime && ov.VisitTime <= EndTime && os.State != ESecondaryHandlingState.NotApply
+                    && os.State != ESecondaryHandlingState.Apply && os.State != ESecondaryHandlingState.Refuse)
+                    .Select((os, ov, od) => new SecondarySatisfactionDto()
+                    {
+                        Count = SqlFunc.AggregateCount(os.Id),
+                        NoSatisfiedCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(od.OrgProcessingResults, "Key") == "1"
+                        || SqlFunc.JsonField(od.OrgProcessingResults, "Key") == "2", 1, 0)),//不满意数
+                    }).FirstAsync();
+            if (da != null)
+                data.SatisfactionRate = da.SatisfiedRate;
+            return data;
+        }
+
+        /// <summary>
+        /// 二次办理中工单概览
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpGet("order-secondary-handling-query")]
+        public async Task<List<OrderSecondaryHandlingDto>> OrderSecondaryHandlingDetailQuery()
+        {
+            var quer = await _orderSecondaryHandlingRepository.Queryable()
+                 .Includes(x=>x.Order)
+                  .Where(x => x.CreationTime.Date == DateTime.Now.Date)
+                  .OrderByDescending(x => x.CreationTime)
+                  .Take(50)
+                 .ToListAsync();
+            return _mapper.Map<List<OrderSecondaryHandlingDto>>(quer);
+        }
     }
 }

+ 1 - 0
src/Hotline.Api/Realtimes/RealtimeMethods.cs

@@ -70,6 +70,7 @@
 
         public static string OrderHandlingDetail = "OrderHandlingDetail";
 
+        public static string OrderSecondaryHandlingDetail = "OrderSecondaryHandlingDetail";
         #endregion
 
         #region 司法大屏

+ 8 - 0
src/Hotline.Api/Realtimes/RealtimeService.cs

@@ -219,6 +219,14 @@ public class RealtimeService : IRealtimeService, IScopeDependency
     public Task OrderHandlingDetailAsync(object obj, CancellationToken cancellationToken) =>
         SendToGroupAsync(RealtimeGroupNames.BigDataScreen, RealtimeMethods.OrderHandlingDetail,obj, cancellationToken);
 
+    /// <summary>
+    /// 推送二次办理中工单概览
+    /// </summary>
+    /// <param name="obj"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public Task OrderSecondaryHandlingDetailAsync(object obj, CancellationToken cancellationToken) =>
+        SendToGroupAsync(RealtimeGroupNames.BigDataScreen, RealtimeMethods.OrderSecondaryHandlingDetail, obj, cancellationToken);
     #endregion
 
     /// <summary>

+ 19 - 4
src/Hotline.Application/Bigscreen/DataScreenRefreshService.cs

@@ -14,10 +14,12 @@ using System.Text;
 using System.Threading.Tasks;
 using Hotline.Settings;
 using XF.Domain.Constants;
+using XF.Domain.Repository;
+using Hotline.JudicialManagement;
 
 namespace Hotline.Application.Bigscreen
 {
-    public class DataScreenRefreshService: BackgroundService
+    public class DataScreenRefreshService : BackgroundService
     {
         private readonly IServiceScopeFactory _serviceScopeFactory;
 
@@ -33,7 +35,7 @@ namespace Hotline.Application.Bigscreen
             var _orderRepository = scope.ServiceProvider.GetRequiredService<IOrderRepository>();
             var _mapper = scope.ServiceProvider.GetRequiredService<IMapper>();
             var systemSettingCacheManager = scope.ServiceProvider.GetRequiredService<ISystemSettingCacheManager>();
-           
+            var _orderSecondaryHandlingRepository = scope.ServiceProvider.GetRequiredService<IRepository<OrderSecondaryHandling>>();
             int times = int.Parse(systemSettingCacheManager.GetSetting(SettingConstants.BsDataStateChangedTimes)?.SettingValue[0]);
             while (!stoppingToken.IsCancellationRequested)
             {
@@ -95,7 +97,7 @@ namespace Hotline.Application.Bigscreen
 
                     await realtimeService.OrderCountStatisticsAsync(dto, stoppingToken);
                 }
-                catch{}
+                catch { }
 
                 try
                 {
@@ -110,7 +112,20 @@ namespace Hotline.Application.Bigscreen
 
                     await realtimeService.OrderHandlingDetailAsync(orderlist, stoppingToken);
                 }
-                catch{}
+                catch { }
+
+                try
+                {
+                    var list = await _orderSecondaryHandlingRepository.Queryable().Includes(x => x.Order)
+                              .Where(x => x.CreationTime.Date == DateTime.Now.Date)
+                              .OrderByDescending(x => x.CreationTime)
+                              .Take(50)
+                             .ToListAsync();
+                    var orderlist = _mapper.Map<List<OrderSecondaryHandlingDto>>(list);
+
+                    await realtimeService.OrderHandlingDetailAsync(orderlist, stoppingToken);
+                }
+                catch { }
 
                 await Task.Delay(times);
             }

+ 5 - 1
src/Hotline.Application/Orders/OrderApplication.cs

@@ -3422,7 +3422,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         if (order == null)
         {
             order = _mapper.Map<Order>(dto);
-
+            if (order.IsSecret == true)
+            {
+                order.FocusOnEventsName = "保密";
+                order.FocusOnEvents = "99";
+            }
             order.InitId();
             if (files != null && files.Any())
                 order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);

+ 57 - 7
src/Hotline.Share/Dtos/Bigscreen/BigscreenDto.cs

@@ -1,4 +1,6 @@
 
+using Hotline.Share.Dtos.Order;
+
 namespace Hotline.Share.Dtos.Bigscreen
 {
     public class OrderStatisticsDto
@@ -20,7 +22,7 @@ namespace Hotline.Share.Dtos.Bigscreen
         /// <summary>
         /// 待受理率
         /// </summary>
-        public double HaveToAcceptRate { get; set;}
+        public double HaveToAcceptRate { get; set; }
 
         /// <summary>
         /// 超期工单数
@@ -104,11 +106,11 @@ namespace Hotline.Share.Dtos.Bigscreen
 
         public double ToDayQoQ { get; set; }
 
-        public int ToMonthCount { get; set;}
+        public int ToMonthCount { get; set; }
 
         public double ToMonthQoQ { get; set; }
 
-        public int ToYearCount { get; set;}
+        public int ToYearCount { get; set; }
 
         public double ToYearQoQ { get; set; }
     }
@@ -126,11 +128,11 @@ namespace Hotline.Share.Dtos.Bigscreen
 
         public double CalcCompletion()
         {
-            if(CompletionCount==0 || AcceptedCount == 0)
+            if (CompletionCount == 0 || AcceptedCount == 0)
             {
                 return 0;
             }
-            return Math.Round((CompletionCount / (double)AcceptedCount) * 100, 2) ;
+            return Math.Round((CompletionCount / (double)AcceptedCount) * 100, 2);
         }
 
     }
@@ -198,7 +200,7 @@ namespace Hotline.Share.Dtos.Bigscreen
             {
                 return 0;
             }
-            return Math.Round((SatisfiedCount / (double)VisitCount) * 100, 2) ;
+            return Math.Round((SatisfiedCount / (double)VisitCount) * 100, 2);
         }
     }
 
@@ -214,11 +216,59 @@ namespace Hotline.Share.Dtos.Bigscreen
 
         public double CalcHasRate()
         {
-            if (HasCount == 0|| SumCount==0)
+            if (HasCount == 0 || SumCount == 0)
             {
                 return 0;
             }
             return Math.Round((HasCount / (double)SumCount) * 100, 2);
         }
     }
+
+    /// <summary>
+    /// 二次办理统计
+    /// </summary>
+    public class SecondaryProcessingOrderStatisticsDto
+    {
+        /// <summary>
+        /// 二次办理工单
+        /// </summary>
+        public int OrderCount { get; set; }
+
+        /// <summary>
+        /// 二次办理超期
+        /// </summary>
+        public int OrderOverdueCount { get; set; }
+
+        /// <summary>
+        /// 二次办理即将超期
+        /// </summary>
+        public int OrderSoonOverdueCount { get; set; }
+
+        /// <summary>
+        /// 二次办理满意率
+        /// </summary>
+        public string SatisfactionRate { get; set; }
+    }
+
+    public class SecondarySatisfactionDto
+    {
+        public int Count { get; set; }
+
+        public int NoSatisfiedCount { get; set; }
+
+        /// <summary>
+        /// 满意率
+        /// </summary>
+        public string SatisfiedRate => CalcSatisfiedRate();
+
+        public string CalcSatisfiedRate()
+        {
+            if (Count == 0 || NoSatisfiedCount == 0)
+            {
+                return "0.000%";
+            }
+            return Math.Round(((Count - NoSatisfiedCount) / (double)Count) * 100, 3) + "%";
+        }
+    }
+
 }