浏览代码

剩余办理时长

Dun.Jason 4 月之前
父节点
当前提交
68460996ce

+ 54 - 2
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -43,6 +43,7 @@ using Hotline.Repository.SqlSugar.CallCenter;
 using SqlSugar;
 using Hotline.Tools;
 using Hotline.Api.Filter;
+using XF.Domain.Cache;
 
 namespace Hotline.Api.Controllers
 {
@@ -69,7 +70,7 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<QualityTemplate> _qualityTemplate;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IRepository<TelActionRecord> _telActionRecordRepository;
-        
+        private readonly ITypedCache<Work> _cacheWork;
         private readonly ISystemMobilAreaApplication _systemMobilAreaApplication;
         private readonly IRepository<Work> _workRepository;
         private readonly Publisher _publisher;
@@ -85,7 +86,7 @@ namespace Hotline.Api.Controllers
             ITelApplication telApplication, IRepository<Quality.Quality> qualiteyRepository,
             IAiQualityService aiQualityService, IRepository<QualityTemplate> qualityTemplate,
             ISystemSettingCacheManager systemSettingCacheManager, IRepository<TelActionRecord> telActionRecordRepository,
-            ISystemMobilAreaApplication systemMobilAreaApplication, IRepository<Work> workRepository, Publisher publisher, ITrCallRecordRepository callRecordRepository)
+            ISystemMobilAreaApplication systemMobilAreaApplication, IRepository<Work> workRepository, Publisher publisher, ITrCallRecordRepository callRecordRepository, ITypedCache<Work> cacheWork)
         {
             _trClient = trClient;
             _mapper = mapper;
@@ -112,6 +113,7 @@ namespace Hotline.Api.Controllers
             _workRepository = workRepository;
             _publisher = publisher;
             _callRecordRepository = callRecordRepository;
+            _cacheWork = cacheWork;
         }
 
         #region 添添呼
@@ -885,6 +887,56 @@ namespace Hotline.Api.Controllers
 
         #endregion
 
+        #region 话机状态
+
+        /// <summary>
+        /// 重置话机状态
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("tels-status-refreshservice")]
+        [AllowAnonymous]
+        public async Task TelsStatusRefreshService()
+        {
+            try
+            {
+                var list = await _workRepository.Queryable().Where(x => 1 == 1 && !x.EndTime.HasValue).ToListAsync();
+                var tellist = await _trClient.QueryTelStateAsync(new Tr.Sdk.Tels.QueryTelStateRequest { },HttpContext.RequestAborted);
+                foreach (var item in list)
+                {
+                    var telmodel = tellist.AgentList.First(x => x.TelNo == item.TelNo);
+                    if (telmodel != null)
+                    {
+                        if (telmodel.State == "logout")
+                        {
+                            var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && !x.EndTime.HasValue, HttpContext.RequestAborted);
+                            if (telRest is not null)
+                            {
+                                telRest.EndRest();
+                                await _telRestRepository.UpdateAsync(telRest, HttpContext.RequestAborted);
+                            }
+
+                            item.OffDuty();
+                            await _workRepository.UpdateAsync(item, HttpContext.RequestAborted);
+                            _cacheWork.Remove(item.GetKey(KeyMode.UserId));
+                            _cacheWork.Remove(item.GetKey(KeyMode.TelNo));
+                            var listx = await _telActionRecordRepository.Queryable().Where(x => x.TelNo == item.TelNo && !x.EndTime.HasValue).ToListAsync();
+                            foreach (var itemx in listx)
+                            {
+                                itemx.EndAction();
+                                await _telActionRecordRepository.UpdateAsync(itemx);
+                            }
+                        }
+                    }
+                }
+            }
+            catch
+            {
+
+            }
+        }
+
+        #endregion
+
         #endregion
     }
 }

+ 1 - 1
src/Hotline.Api/StartupExtensions.cs

@@ -168,7 +168,7 @@ internal static class StartupExtensions
                     .AddScoped<ICallApplication, TianRunCallApplication>()
                     .AddScoped<ITrApplication, TrApplication>()
                     .AddHostedService<CurrentWaitNumService>()
-                    .AddHostedService<TelsStatusRefreshService>()
+                    //.AddHostedService<TelsStatusRefreshService>()
                     .AddTrSdk(callCenterConfiguration.TianRun.Address,
                         callCenterConfiguration.TianRun.Username,
                         callCenterConfiguration.TianRun.Password);

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

@@ -1031,7 +1031,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         {
             if (_appOptions.Value.IsLuZhou)
             {
-                await _expireTime.CalcEndTime(DateTime.Now, DateTime.Now, new TimeConfig() { Count = dto.Data.TimeLimit, TimeType = dto.Data.TimeLimitUnit.Value }, order.AcceptTypeCode);
+                expiredTimeConfig = await _expireTime.CalcEndTime(DateTime.Now, DateTime.Now, new TimeConfig() { Count = dto.Data.TimeLimit, TimeType = dto.Data.TimeLimitUnit.Value }, order.AcceptTypeCode);
             }
             else
             {

+ 23 - 0
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -648,6 +648,29 @@ namespace Hotline.Share.Dtos.Order
             return string.Empty;
         }
 
+        /// <summary>
+        /// 剩余办理时长
+        /// </summary>
+        public string RemainingTime => RemainingTimeTextVoid();
+
+        public string RemainingTimeTextVoid()
+        {
+            DateTime now = DateTime.Now;
+            if (Status >= EOrderStatus.Filed && FiledTime !=null)
+            {
+                return Math.Round((FiledTime.Value - DateTime.Now).TotalDays,1) + "天";
+            }
+            else if(Status < EOrderStatus.Filed && ExpiredTime!=null)
+            {
+                return Math.Round((ExpiredTime.Value - DateTime.Now).TotalDays,1) + "天";
+            }
+            else
+            {
+                return "-";
+            }
+        }
+
+
         /// <summary>
         /// 超期部门
         /// </summary>

+ 8 - 2
src/Hotline/dataview.md

@@ -342,7 +342,7 @@ WHERE ordervisitdetailtemp."VisitTarget" = 20 and ordervisittemp."VisitTime">='2
 
 
  ### 信件清单查询(新)
- select '' as "序号",
+  select '' as "序号",
 aaa.信件状态,aaa."是否超期",aaa.来源,aaa.转接来源,aaa.当前节点,aaa.重办次数,aaa.甄别状态,aaa.受理编号,aaa.省编号,aaa.受理时间,aaa.标题,aaa.期满时间,aaa."一级部门",
 aaa.二级部门,aaa."接办部门",aaa."办结时间",aaa."受理类型",aaa."热点类型",aaa.热点全称,aaa."区域",aaa.区域全称,aaa."受理人",aaa."姓名",aaa."联系电话",aaa."来电电话",
 aaa."事发地址",aaa."具体对象",aaa."来电人主体",aaa."性别",ccc."SeatVisitResult" as "坐席满意度",bbb."OrgProcessingResults" as "满意度",aaa."推送分类",aaa."受理内容",
@@ -411,7 +411,12 @@ CASE
   WHEN "County" is not null and "County" <>'' THEN "County"
 	ELSE "City"
 END AS "区域",
-"Address"  As "区域全称",
+--"Address"  As "区域全称",
+CASE 
+	WHEN "Town" is not null and "Town" <> '' THEN "City" || '-' || "County" || '-' || "Town"
+	WHEN "County" is not null and "Town" <> '' THEN "City" || '-' || "County"
+	ELSE "City"
+END "区域全称",
 "AcceptorName" AS "受理人" ,
  "FromName" AS "姓名" , 
  "Contact" AS "联系电话" , 
@@ -458,6 +463,7 @@ where visittemp."CreationTime">='2024-08-29' and visitdetailtemp."VisitTarget"=1
 on aaa."SugarNav_Id" = ccc."OrderId"
 
 
+
 ### 重置工单回访部门信息
 update order_visit_detail set 
 "VisitOrgCode"= hhh."HandlerOrgId","VisitOrgName"=hhh."HandlerOrgName"