田爽 1 рік тому
батько
коміт
156136672e
1 змінених файлів з 67 додано та 4 видалено
  1. 67 4
      src/Hotline.Api/Controllers/CommonPController.cs

+ 67 - 4
src/Hotline.Api/Controllers/CommonPController.cs

@@ -1,11 +1,18 @@
-using Hotline.Permissions;
+using Hotline.CallCenter.Calls;
+using Hotline.Orders;
+using Hotline.Permissions;
 using Hotline.Settings;
 using Hotline.Settings.CommonOpinions;
 using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Enums.FlowEngine;
 using MapsterMapper;
 using Microsoft.AspNetCore.Mvc;
 using MongoDB.Driver;
+using SqlSugar;
+using System.Reflection.Metadata;
+using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
+using XF.Domain.Repository;
 
 namespace Hotline.Api.Controllers
 {
@@ -17,13 +24,25 @@ namespace Hotline.Api.Controllers
         private readonly ISystemCommonOpinionDomainService _commonOpinionDomainService;
         private readonly ISystemAreaDomainService _systemAreaDomainService;
         private readonly IMapper _mapper;
+        private readonly ISessionContext _sessionContext;
+        private readonly IRepository<TrCallRecord> _trCallRecordRepository;
+        private readonly IOrderRepository _orderRepository;
 
-        public CommonPController(ISystemCommonOpinionDomainService commonOpinionDomainService,ISystemAreaDomainService systemAreaDomainService, IMapper mapper)
+		public CommonPController(
+            ISystemCommonOpinionDomainService commonOpinionDomainService,
+            ISystemAreaDomainService systemAreaDomainService,
+            ISessionContext sessionContext,
+            IRepository<TrCallRecord> trCallRecordRepository,
+            IOrderRepository orderRepository,
+			IMapper mapper)
         {
             _commonOpinionDomainService = commonOpinionDomainService;
             _systemAreaDomainService= systemAreaDomainService;
             _mapper = mapper;
-        }
+            _sessionContext = sessionContext;
+            _trCallRecordRepository = trCallRecordRepository;
+            _orderRepository = orderRepository;
+		}
 
        
 
@@ -40,5 +59,49 @@ namespace Hotline.Api.Controllers
         }
 
         #endregion
-    }
+
+        /// <summary>
+        /// 首页基础数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("home_data")]
+        public async Task<Object> GetHomeData() 
+        {
+            var tadayTime = DateTime.Now.ToString("yyyy-MM-dd");
+            var orderQuery = _orderRepository.Queryable(false, false, false)
+			    .Includes(d => d.Workflow, x => x.Steps)
+				.Where(x => tadayTime.Equals(x.CreationTime.ToString("yyyy-MM-dd")));
+			//中心
+			if (_sessionContext.OrgIsCenter)
+	        {
+                //今日来电
+                var tadayCalls = await _trCallRecordRepository.Queryable()
+	                .Where(x => x.CallDirection == Share.Enums.CallCenter.ECallDirection.In && tadayTime.Equals(x.CreatedTime.ToString("yyyy-MM-dd"))).ToListAsync();
+				var callNum = tadayCalls.Count();
+                var validCallNum = tadayCalls.Where(x => x.Duration > 0 || x.QueueTims > 0 || x.RingTimes > 0).Count();
+				//今日接通率
+                var answeredNum = tadayCalls.Where(x=>x.Duration > 0).Count();
+                var answeredRate = validCallNum > 0 ? (answeredNum / validCallNum * 100) + "%" : "100%";
+                //今日受理工单
+                var tadayOrders = await orderQuery.ToListAsync();
+				var orderNum = tadayOrders.Count();
+				var directlyNum = tadayOrders.Where(x=> x.ProcessType == Share.Enums.Order.EProcessType.Zhiban).Count();
+                return new { CallNum = callNum, ValidCallNum = validCallNum, AnsweredNum = answeredNum, AnsweredRate = answeredRate, OrderNum = orderNum, DirectlyNum = directlyNum };
+			}
+			//部门
+			//今日待办
+			var handleStatuses =  new[] { EWorkflowStepStatus.WaitForAccept, EWorkflowStepStatus.WaitForHandle };
+            var tasksOrderQuery = orderQuery.Where(d => d.Workflow.Steps.Any(x => handleStatuses.Contains(x.Status)));
+            var tasksOkNum = await tasksOrderQuery.Where(d => SqlFunc.JsonListObjectAny(d.Workflow.HandlerUsers, "Key", _sessionContext.RequiredUserId)).CountAsync();
+            var tasksOkOrgNum = await tasksOrderQuery.Where(d => SqlFunc.JsonListObjectAny(d.Workflow.HandlerOrgs, "Key", _sessionContext.RequiredOrgId)).CountAsync();
+			//今日已办
+			var handleOrderQuery = orderQuery.Where(d => d.Workflow.Steps.Any(x => new[] { EWorkflowStepStatus.Handled }.Contains(x.Status)));
+			var handleNum = await handleOrderQuery.Where(d => SqlFunc.JsonListObjectAny(d.Workflow.HandlerUsers, "Key", _sessionContext.RequiredUserId)).CountAsync();
+			var handleOrgNum = await handleOrderQuery.Where(d => SqlFunc.JsonListObjectAny(d.Workflow.HandlerOrgs, "Key", _sessionContext.RequiredOrgId)).CountAsync();
+			//部门超期
+			var exceedTasksOkNum = await tasksOrderQuery.Where(d => SqlFunc.JsonListObjectAny(d.Workflow.HandlerOrgs, "Key", _sessionContext.RequiredOrgId) && d.ExpiredTime > DateTime.Now).CountAsync();
+			var exceedHandleNum = await handleOrderQuery.Where(d => SqlFunc.JsonListObjectAny(d.Workflow.HandlerOrgs, "Key", _sessionContext.RequiredOrgId) && d.ExpiredTime > DateTime.Now).CountAsync();
+            return new { TasksOkNum = tasksOkNum, TasksOkOrgNum = tasksOkOrgNum, HandleNum = handleNum, HandleOrgNum = handleOrgNum, ExceedTasksOkNum = exceedTasksOkNum, ExceedHandleNum = exceedHandleNum };
+        }
+	}
 }