|
@@ -1,11 +1,18 @@
|
|
-using Hotline.Permissions;
|
|
|
|
|
|
+using Hotline.CallCenter.Calls;
|
|
|
|
+using Hotline.Orders;
|
|
|
|
+using Hotline.Permissions;
|
|
using Hotline.Settings;
|
|
using Hotline.Settings;
|
|
using Hotline.Settings.CommonOpinions;
|
|
using Hotline.Settings.CommonOpinions;
|
|
using Hotline.Share.Dtos.Settings;
|
|
using Hotline.Share.Dtos.Settings;
|
|
|
|
+using Hotline.Share.Enums.FlowEngine;
|
|
using MapsterMapper;
|
|
using MapsterMapper;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using MongoDB.Driver;
|
|
using MongoDB.Driver;
|
|
|
|
+using SqlSugar;
|
|
|
|
+using System.Reflection.Metadata;
|
|
|
|
+using XF.Domain.Authentications;
|
|
using XF.Domain.Exceptions;
|
|
using XF.Domain.Exceptions;
|
|
|
|
+using XF.Domain.Repository;
|
|
|
|
|
|
namespace Hotline.Api.Controllers
|
|
namespace Hotline.Api.Controllers
|
|
{
|
|
{
|
|
@@ -17,13 +24,25 @@ namespace Hotline.Api.Controllers
|
|
private readonly ISystemCommonOpinionDomainService _commonOpinionDomainService;
|
|
private readonly ISystemCommonOpinionDomainService _commonOpinionDomainService;
|
|
private readonly ISystemAreaDomainService _systemAreaDomainService;
|
|
private readonly ISystemAreaDomainService _systemAreaDomainService;
|
|
private readonly IMapper _mapper;
|
|
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;
|
|
_commonOpinionDomainService = commonOpinionDomainService;
|
|
_systemAreaDomainService= systemAreaDomainService;
|
|
_systemAreaDomainService= systemAreaDomainService;
|
|
_mapper = mapper;
|
|
_mapper = mapper;
|
|
- }
|
|
|
|
|
|
+ _sessionContext = sessionContext;
|
|
|
|
+ _trCallRecordRepository = trCallRecordRepository;
|
|
|
|
+ _orderRepository = orderRepository;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -40,5 +59,49 @@ namespace Hotline.Api.Controllers
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
#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 };
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|