Browse Source

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf 1 year ago
parent
commit
f8b0b3fa6d

+ 3 - 8
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -187,15 +187,10 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="telNo"></param>
         /// <returns></returns>
-        [HttpPost("off-duty-manage")]
-        public async Task OffDuty([FromBody]string telNo)
+        [HttpGet("off-duty-manage")]
+        public async Task OffDuty([FromQuery]string telNo)
         {
-             var work = _userCacheManager.GetWorkByTel(telNo);
-            if (work != null)
-            {
-                await _telApplication.SignOutAsync(work.UserId, HttpContext.RequestAborted);
-            }
-            
+           await _telApplication.SignOutByTelNoAsync(telNo, HttpContext.RequestAborted);
         }
 
         //提供关闭浏览器事件触发调用

+ 20 - 9
src/Hotline.Api/Controllers/OrderController.cs

@@ -28,6 +28,7 @@ using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Push;
 using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Push;
@@ -3437,8 +3438,12 @@ public class OrderController : BaseController
         var citizen = await _citizenRepository.Queryable()
             .Includes(x => x.labelDetails)
             .FirstAsync(x => x.PhoneNumber == phone);
-        //工单历史 
-        var oders = await _orderRepository.Queryable().Where(x => x.Contact == phone)
+        var calls = await _trCallRecordRepository.Queryable().Where(x => x.CallDirection == 0 && x.CPN == phone).OrderBy(x => x.CreatedTime).ToListAsync();
+        var oneCallTime = calls != null && calls.Count() > 0 ? calls[0].CreatedTime : DateTime.Now;
+        var lastNum = calls != null && calls.Count() > 0 ? calls.Count() - 1 : -1;
+        var lastCallTime = lastNum >= 0 ? calls[lastNum].CreatedTime : DateTime.Now;
+		//工单历史 
+		var oders = await _orderRepository.Queryable().Where(x => x.Contact == phone)
             .OrderBy(x => x.CreationTime, OrderByType.Desc).ToListAsync();
         var allOrderNum = oders.Count;
         var endOrderNum = oders.Count(x => (int)x.Status >= 300);
@@ -3451,12 +3456,18 @@ public class OrderController : BaseController
                                                                 SqlFunc.JsonField(x.OrgProcessingResults, "Value") == "非常不满意"))
             .Distinct().Select(x => new { x.OrderVisit.OrderId }).CountAsync();
         //来电历史
-        var calls = await _trCallRecordRepository.Queryable().Where(x => x.CallDirection == 0 && x.CPN == phone).OrderBy(x => x.CreatedTime).ToListAsync();
-        var oneCallTime = calls != null && calls.Count() > 0 ? calls[0].CreatedTime : DateTime.Now;
-        var lastNum = calls != null && calls.Count() > 0 ? calls.Count() - 1 : -1;
-        var lastCallTime = lastNum >= 0 ? calls[lastNum].CreatedTime : DateTime.Now;
-        //关注诉求
-        var hotspotNames = string.Join(",", oders.Select(x => x.HotspotName).Distinct().Take(5).ToList());
+        var callsHistory = await _trCallRecordRepository.Queryable().Where(x => x.CPN == phone).ToListAsync();
+        var allCallNum = 0;
+        var connectNum = 0;
+        var callBackNum = 0;
+        if (callsHistory != null && callsHistory.Any())
+        {
+			 allCallNum = callsHistory.Count(x => x.CallDirection == ECallDirection.In);
+			 connectNum = callsHistory.Count(x => x.CallDirection == ECallDirection.In && x.Duration > 0);
+			 callBackNum = callsHistory.Count(x => x.CallDirection == ECallDirection.Out);
+		}
+		//关注诉求
+		var hotspotNames = string.Join(",", oders.Select(x => x.HotspotName).Distinct().Take(5).ToList());
         var rsp = new
         {
             Citizen = citizen,
@@ -3469,7 +3480,7 @@ public class OrderController : BaseController
                 handOrderNum = handOrderNum,
                 DissatisfactionNum = DissatisfactionNum
             },
-            CallHistory = new { AllCallNum = 0, ConnectNum = 0, CallBackNum = 0 },
+            CallHistory = new { AllCallNum = allCallNum, ConnectNum = connectNum, CallBackNum = callBackNum },
             HotspotNames = hotspotNames,
         };
         return rsp;

+ 13 - 0
src/Hotline.Api/Controllers/PushMessageController.cs

@@ -55,6 +55,19 @@ namespace Hotline.Api.Controllers
             return await _messageCodeDomainService.GenerateVerificationCode(UserName, HttpContext.RequestAborted);
         }
 
+        /// <summary>
+        /// 验证白名单
+        /// </summary>
+        /// <param name="UserName"></param>
+        /// <returns></returns>
+        [HttpGet("get_verify_whitelist")]
+        [AllowAnonymous]
+        public async Task<bool> VerifyWhitelist(string UserName)
+        {
+            return await _messageCodeDomainService.VerifyWhitelistAsync(UserName);
+        }
+
+
         //[HttpGet("checkdcode")]
         //public async Task CheckdCode(string UserName, string phoneNum, string Code)
         //{

+ 1 - 1
src/Hotline.Application/Tels/TelApplication.cs

@@ -49,7 +49,7 @@ public class TelApplication : ITelApplication, IScopeDependency
 
     public async Task SignOutByTelNoAsync(string telNo,CancellationToken cancellationToken)
     {
-        var work = _userCacheManager.GetWorkByTel(telNo);
+        var work = _userCacheManager.GetWorkByTelNoExp(telNo);
         if (work is null) return;
 
         var telRest = await _telRestRepository.GetAsync(x => x.TelNo == work.TelNo && !x.EndTime.HasValue, cancellationToken);

+ 5 - 0
src/Hotline/Permissions/EPermission.cs

@@ -1764,6 +1764,11 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName ="话务管理",Name ="监听分机",Description ="监听分机")]
         ListenInTel = 800301,
+        /// <summary>
+        /// 强制下线
+        /// </summary>
+        [Display(GroupName ="话务管理",Name ="强制下线",Description ="强制下线")]
+        ForceOffDuty = 800302,
         #endregion
 
         #endregion

+ 7 - 0
src/Hotline/Push/IMessageCodeDomainService.cs

@@ -17,5 +17,12 @@
         /// <param name="cancellation"></param>
         /// <returns></returns>
         Task CheckdCode(string UserName, string PhoneNo, string Code, CancellationToken cancellation);
+
+        /// <summary>
+        /// 验证白名单
+        /// </summary>
+        /// <param name="UserName"></param>
+        /// <returns></returns>
+        Task<bool> VerifyWhitelistAsync(string UserName);
     }
 }

+ 23 - 13
src/Hotline/Push/MessageCodeDomainService.cs

@@ -1,27 +1,15 @@
 using DotNetCore.CAP;
 using Hotline.Caching.Interfaces;
 using Hotline.Identity.Accounts;
-using Hotline.Orders;
-using Hotline.Push.FWMessage;
 using Hotline.Push.Notifies;
 using Hotline.Share.Dtos.Push;
 using Hotline.Share.Enums.Push;
 using MapsterMapper;
 using MediatR;
-using Microsoft.AspNetCore.Http;
-using Org.BouncyCastle.Utilities.IO;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Security.Principal;
-using System.Text;
-using System.Threading.Tasks;
 using XF.Domain.Cache;
 using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
-using XF.Domain.Repository;
-using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace Hotline.Push
 {
@@ -59,6 +47,25 @@ namespace Hotline.Push
         }
         #endregion
 
+        /// <summary>
+        /// 验证白名单
+        /// </summary>
+        /// <param name="UserName"></param>
+        /// <returns></returns>
+        public async Task<bool> VerifyWhitelistAsync(string UserName)
+        {
+            var setting = _systemSettingCacheManager.GetSetting(SettingConstants.IsLoginMessageCode);
+            if (setting == null || setting.SettingValue[0] != "true")
+                return false;
+
+            var settingWhite = _systemSettingCacheManager.GetSetting(SettingConstants.LoginCodeWhiteList);
+       
+            if (settingWhite == null || !settingWhite.SettingValue.Exists(p => p == UserName))
+                return true;
+
+            return false;
+        }
+
         /// <summary>
         /// 生成验证码
         /// </summary>
@@ -138,10 +145,13 @@ namespace Hotline.Push
             if (settingWhite != null && settingWhite.SettingValue.Exists(p => p == UserName))
                 return;
 
+            if (string.IsNullOrEmpty(Code))
+                throw UserFriendlyException.SameMessage("验证码不能为空!");
+
             string strKeyToken = KeyToken + PhoneNo;
             var token = await _loginMessageCodeTypedCache.GetAsync(strKeyToken, cancellation);
             if (token == null)
-                throw UserFriendlyException.SameMessage("账号或者验证码错误!");
+                throw UserFriendlyException.SameMessage("验证码校验失败!");
 
             //if (token.IsChecking)
             //    return;