TANG JIANG 1 year ago
parent
commit
77ad5c4f5a

+ 45 - 0
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -288,6 +288,9 @@ namespace DataSharing.Application.Receivers
                 dataCall.AreaCode = dto.AreaCode;
                 dataCall.CaseSerial = dto.ProvinceNo;
 
+                //处理通话记录时间
+                SetCallTime(dataCall);
+
                 #region 处理请求参数
                 var requestCall = new ProvinceListRequest<SubmitCaseRecordInfo>(configProvince.ClientId, configProvince.ClientSecret);
                 requestCall.SetData(new List<SubmitCaseRecordInfo>() { dataCall });
@@ -535,6 +538,8 @@ namespace DataSharing.Application.Receivers
             else
                 data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
 
+            //处理通话记录时间
+            SetCallTime(data);
 
             #region 处理请求参数
             var configProvince = _channelConfigurationManager.GetConfigurationProvince();
@@ -568,6 +573,9 @@ namespace DataSharing.Application.Receivers
             else
                 data.AreaCode = _channelConfigurationManager.GetConfigurationCityCode().AreaCode;
 
+            //处理通话记录时间
+            SetCallTime(data);
+
             #region 处理请求参数
             var configProvince = _channelConfigurationManager.GetConfigurationProvince();
             var request = new ProvinceListRequest<SubmitCaseRecordInfo>(configProvince.ClientId, configProvince.ClientSecret);
@@ -1420,6 +1428,43 @@ namespace DataSharing.Application.Receivers
             }
         }
 
+        /// <summary>
+        /// 处理通话记录队列时间
+        /// </summary>
+        /// <param name="recordInfo"></param>
+        /// <returns></returns>
+        private void SetCallTime(SubmitCaseRecordInfo recordInfo)
+        {
+            // 电话进入顺序 进IVR时间→进队列时间→振铃时间→开始时间→结束时间
+
+            //进入IVR时间为空
+            if (recordInfo.InIvr == null)
+            {
+                if (recordInfo.InQueue == null)
+                {
+                    recordInfo.InQueue = recordInfo.CallStart.Value.AddSeconds(-2);
+                }
+                recordInfo.InIvr = recordInfo.InQueue.Value.AddSeconds(-2);
+            }
+
+            //进入队列时间为空
+            if (recordInfo.InQueue == null)
+            {
+                if (recordInfo.InIvr == null)
+                {
+                    recordInfo.InQueue = recordInfo.CallStart.Value.AddSeconds(-2);
+                    recordInfo.InIvr = recordInfo.InQueue.Value.AddSeconds(-2);
+                }
+                else
+                    recordInfo.InQueue = recordInfo.InIvr.Value.AddSeconds(2);
+            }
+
+            //振铃时间为空
+            if (recordInfo.CallTime == null)
+                recordInfo.CallTime = recordInfo.CallStart.Value.AddSeconds(-2);
+
+        }
+
         #endregion
 
         #region 组装110数据

+ 80 - 3
src/DataSharing.Host/Controllers/WebPortalController.cs

@@ -9,6 +9,7 @@ using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
+using XF.Domain.Cache;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
 
@@ -29,6 +30,7 @@ namespace DataSharing.Host.Controllers
         private readonly IRepository<DsWebUserAuth> _webUserAuthRepository;
         private readonly IChannelConfigurationManager _channelConfigurationManager;
         private readonly IHotlineClient _hotlineClient;
+        private readonly ITypedCache<WriteLettersSendSmsDto> _writeLettersSendSms;
 
         /// <summary>
         /// 
@@ -49,7 +51,8 @@ namespace DataSharing.Host.Controllers
               IRepository<DsWebUserRegister> webUserRegisterRepository,
             IRepository<DsWebUserAuth> webUserAuthRepository,
             IChannelConfigurationManager channelConfigurationManager,
-           IHotlineClient hotlineClient)
+           IHotlineClient hotlineClient,
+           ITypedCache<WriteLettersSendSmsDto> writeLettersSendSms)
         {
             _mapper = mapper;
             _mediator = mediator;
@@ -61,6 +64,7 @@ namespace DataSharing.Host.Controllers
             _webUserAuthRepository = webUserAuthRepository;
             _channelConfigurationManager = channelConfigurationManager;
             _hotlineClient = hotlineClient;
+            _writeLettersSendSms = writeLettersSendSms;
         }
 
         #region 通知
@@ -75,7 +79,7 @@ namespace DataSharing.Host.Controllers
             RefAsync<int> total = 0;
             var items = await _bulletinRepository.Queryable()
                 .Where(p => p.LoseEfficacyTime >= DateTime.Now)
-                .Where(d=> SqlFunc.JsonListObjectAny(d.PushRanges, "Key", "2"))
+                .Where(d => SqlFunc.JsonListObjectAny(d.PushRanges, "Key", "2"))
                  .Where(p => p.BulletinTypeId == dto.NoticeType)
                  .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
                  .OrderByDescending(p => p.BulletinTime)
@@ -414,7 +418,7 @@ namespace DataSharing.Host.Controllers
 
             //调用工单创建接口
             var result = await _hotlineClient.ReceiveOrderAsync(data, HttpContext.RequestAborted);
-            
+
             OrderAcceptanceReturnDto returnDto = new();
             if (result.IsSuccess)
             {
@@ -623,6 +627,79 @@ namespace DataSharing.Host.Controllers
         }
         #endregion
 
+        /// <summary>
+        /// 短信验证码发送
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("writeletterssendsms")]
+        public async Task<OpenResponse> WriteLettersSendSms([FromBody] SendSmsModelDto dto)
+        {
+            string keyToken = "SmsUserWriteKey_" + dto.TelNum + "_" + DateTime.Now.ToString("yyyyMMdd");
+
+            var data = await _writeLettersSendSms.GetAsync(keyToken, HttpContext.RequestAborted);
+            if (data != null)//已经发过短信
+            {
+                //是否可以继续发送短信(10次)
+                if (data.SendCount > 10)
+                    //短信发送超过10条
+                    return OpenResponse.Ok(WebPortalDeResponse<string>.Success("-2"));
+
+                // 验证是否在两分钟之内
+                TimeSpan duration = DateTime.Now - data.AddTime; // 计算时间差
+                if ((int)duration.TotalSeconds < 120)
+                    // 距离上次发送时间不足两分钟
+                    return OpenResponse.Ok(WebPortalDeResponse<string>.Success("-4"));
+
+                //修改缓存信息
+                data.SendCount++;
+                data.SmsCode = dto.SmsCode;
+                data.AddTime = DateTime.Now;
+
+            }
+            else
+            {
+                //没有发过短信,直接写入数据
+                data = new WriteLettersSendSmsDto
+                {
+                    AddTime = DateTime.Now,
+                    SmsCode = dto.SmsCode,
+                    MobileNum = dto.TelNum,
+                    SendCount = 1
+                };
+            }
+            //这里发送短信
+
+
+            //修改缓存
+            await _writeLettersSendSms.SetAsync(keyToken, data, TimeSpan.FromDays(1));
+
+            return OpenResponse.Ok(WebPortalDeResponse<string>.Success("1"));
+        }
+
+        /// <summary>
+        /// 验证短信验证码是否正确   正确返回1,错误返回-1
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("checksmscode")]
+        public async Task<OpenResponse> CheckSmsCode([FromBody] SendSmsModelDto dto)
+        {
+            string keyToken = "SmsUserWriteKey_" + dto.TelNum + "_" + DateTime.Now.ToString("yyyyMMdd");
+
+            var data = await _writeLettersSendSms.GetAsync(keyToken, HttpContext.RequestAborted);
+            //检测是否存在
+            if (data != null)
+                return OpenResponse.Ok(WebPortalDeResponse<string>.Success(data.SmsCode));
+
+            //不存在
+            return OpenResponse.Ok(WebPortalDeResponse<string>.Success("-1"));
+        }
+
+
+
         /// <summary>
         /// 系统主题颜色
         /// </summary>

+ 2 - 1
src/DataSharing.Host/config/appsettings.Development.json

@@ -72,7 +72,8 @@
       "HuiJu": "http://103.203.219.157/cns-sccthj-job-test/rest/",
       "XieTong": "http://103.203.219.157/cns-scxthj-rest-test/rest/",
       "ClientId": "6384f475-2e1e-4985-9e34-51a3379452d0",
-      "ClientSecret": "3e92b698-d640-4056-be94-128710ac1a7e"
+      "ClientSecret": "3e92b698-d640-4056-be94-128710ac1a7e",
+      "MissedCallCount": 6   //未接通通话记录最多上传条数
     },
     //企业服务
     "Enterprise": {

+ 11 - 11
src/DataSharing.Share/Dtos/Province/HuiJu/SubmitCaseRecordInfo.cs

@@ -10,67 +10,67 @@ namespace DataSharing.Share.Dtos.Province.HuiJu
         /// <summary>
         /// 电话号码
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("PHONE_NUMBER")]
         public string PhoneNumber { get; set; }
 
         /// <summary>
         /// 通话状态
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("PHONE_STATUS")]
         public string PhoneStatus { get; set; }
 
         /// <summary>
         /// 是否呼出
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("IS_PHONECALL")]
         public string IsPhoneCall { get; set; }
 
         /// <summary>
         /// 接通电话时间
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("CALL_START")]
         public DateTime? CallStart { get; set; }
 
         /// <summary>
         /// 通话结束时间
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("CALL_END")]
         public DateTime? CallEnd { get; set; }
 
         /// <summary>
         /// 进ivr时间
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("IN_IVR")]
         public DateTime? InIvr { get; set; }
 
         /// <summary>
         /// 进队列时间
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("IN_QUEUE")]
         public DateTime? InQueue { get; set; }
 
         /// <summary>
         /// 振铃时间
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("CALL_TIME")]
         public DateTime? CallTime { get; set; }
 
         /// <summary>
         /// 通话时长
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("CALL_LENGTH")]
         public int CallLength { get; set; }
 
         /// <summary>
         /// 坐席人员工号
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("SEAT_NUMBER")]
         public string SeatNumber { get; set; }
 
         /// <summary>
         /// 录音路径
         /// </summary>
-        [JsonPropertyName("DEPT_NAME")]
+        [JsonPropertyName("ACCORDURL")]
         public string AccordUrl { get; set; }
 
         /// <summary>

+ 21 - 0
src/DataSharing.Share/Dtos/WebPortal/SendSmsModelDto.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DataSharing.Share.Dtos.WebPortal
+{
+    public class SendSmsModelDto
+    {
+        /// <summary>
+        /// 号码
+        /// </summary>
+        public string TelNum { get; set; }
+
+        /// <summary>
+        /// 验证码
+        /// </summary>
+        public string SmsCode { get; set; }
+    }
+}

+ 16 - 0
src/DataSharing.Share/Dtos/WebPortal/WriteLettersSendSmsDto.cs

@@ -0,0 +1,16 @@
+namespace DataSharing.Share.Dtos.WebPortal
+{
+    /// <summary>
+    /// 短信发送缓存设置
+    /// </summary>
+    public class WriteLettersSendSmsDto
+    {
+        public string MobileNum { get; set; }
+
+        public string SmsCode { get; set; }
+
+        public int SendCount { get; set; } = 0;
+
+        public DateTime AddTime { get; set; }
+    }
+}

+ 1 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -53,6 +53,7 @@
         public string ClientId { get; set; } = string.Empty;
         public string ClientSecret { get; set; } = string.Empty;
         public string Scheme { get; set; } = string.Empty;
+        public int MissedCallCount { get; set; }
     }
 
     /// <summary>