Forráskód Böngészése

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

xf 1 éve
szülő
commit
ee387c9763

+ 45 - 2
src/Hotline.Api/Controllers/AiController.cs

@@ -2,8 +2,10 @@
 using Consul;
 using Hotline.Caching.Interfaces;
 using Hotline.Orders;
+using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Ai;
+using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http.Features;
 using Microsoft.AspNetCore.Mvc;
@@ -21,14 +23,16 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
         private readonly IRepository<OrderVisit> _orderVisitRepository;
         private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
+        private readonly IMapper _mapper;
 
-        public AiController(ISystemSettingCacheManager systemSettingCacheManager,IRepository<AiOrderVisit> aiOrderVisitRepository,IRepository<AiOrderVisitDetail>  aiOrderVisitDetailRepository,IRepository<OrderVisit> orderVisitRepository,IRepository<OrderVisitDetail> orderVisitDetailRepository)
+        public AiController(ISystemSettingCacheManager systemSettingCacheManager,IRepository<AiOrderVisit> aiOrderVisitRepository,IRepository<AiOrderVisitDetail>  aiOrderVisitDetailRepository,IRepository<OrderVisit> orderVisitRepository,IRepository<OrderVisitDetail> orderVisitDetailRepository,IMapper mapper)
         {
            _systemSettingCacheManager = systemSettingCacheManager;
             _aiOrderVisitRepository = aiOrderVisitRepository;
             _aiOrderVisitDetailRepository = aiOrderVisitDetailRepository;
             _orderVisitRepository = orderVisitRepository;
             _orderVisitDetailRepository = orderVisitDetailRepository;
+            _mapper = mapper;
         }
 
 
@@ -65,13 +69,18 @@ namespace Hotline.Api.Controllers
             return IsOk;
         }
 
+
+
+        #region 智能回访
+
+
         /// <summary>
         /// 智能回访外呼结果回传
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
         [AllowAnonymous]
-        [HttpPost("visit/aivisit-back")]
+        [HttpPost("aivisit/aivisit-back")]
         public async Task AiVisitBack([FromBody]AiVisitBackDto dto)
         {
             var aiOrderVisit = await _aiOrderVisitRepository.Queryable()
@@ -168,5 +177,39 @@ namespace Hotline.Api.Controllers
             }
         }
 
+        /// <summary>
+        /// 智能回访列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("aivisit/aivisit-list")]
+        public async Task<PagedDto<AiOrderVisitDto>> AiVisitList([FromQuery]AiVisitListDto dto)
+        {
+            var (total,items) = await _aiOrderVisitRepository.Queryable()
+                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Name.Contains(dto.Keyword))
+                .OrderByDescending(x => x.CreationTime)
+                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            return new PagedDto<AiOrderVisitDto>(total, _mapper.Map<IReadOnlyList<AiOrderVisitDto>>(items)); 
+        }
+        /// <summary>
+        /// 智能回访明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("aivisit/aivisitdetail-list")]
+        public async Task<PagedDto<AiOrderVisitDetailDto>> AiVisitDetailList([FromQuery]AiVisitDetailListDto dto)
+        {
+            var (total, items) = await _aiOrderVisitDetailRepository.Queryable()
+                .Includes(x=>x.OrderVisit,x=>x.OrderVisitDetails)
+                .Where(x => x.AiOrderVisitId == dto.Id)
+                .OrderByDescending(x => x.CreationTime)
+                .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+
+            return new PagedDto<AiOrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<AiOrderVisitDetailDto>>(items));
+        }
+
+
+
+        #endregion
     }
 }

+ 3 - 3
src/Hotline.Api/config/appsettings.Development.json

@@ -204,11 +204,11 @@
     },
     //智能回访
     "AiVisit": {
-      "Url": "",
+      "Url": "http://118.121.198.222:9000",
       "Appkey": "fwkj",
       "ServiceVersion": "V1.0.0", //接口版本号
-      "SceneUid": "", //场景ID
-      "RuleUid": ""//现有规则ID
+      "SceneUid": "MTAwMDAxX0T7BfPTIqh8biWrOf58", //场景ID
+      "RuleUid": "" //现有规则ID
     }
   }
 

+ 99 - 1
src/Hotline.Share/Dtos/Ai/AiDto.cs

@@ -1,4 +1,7 @@
-using System;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Ai;
+using Hotline.Share.Requests;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -54,4 +57,99 @@ namespace Hotline.Share.Dtos.Ai
 
         public string QuestionResult { get; set; }
     }
+
+
+    public record AiVisitListDto:PagedKeywordRequest
+    {
+        
+    }
+
+    public record AiVisitDetailListDto:PagedKeywordRequest
+    {
+        public string Id { get; set; }
+    }
+
+    public class AiOrderVisitDto
+    {
+        public string Name { get; set; }
+
+        public DateTime BeginTime { get; set; }
+
+        public DateTime EndTime { get; set; }
+
+        public EAiOrderVisitTaskState TaskState { get; set; }
+        /// <summary>
+        /// 批次上报结果ID
+        /// </summary>
+        public string? BatchUid { get; set; }
+
+
+        /// <summary>
+        /// 节日禁呼 0:否 1:是
+        /// </summary>
+        public int FestivalBan { get; set; }
+
+        /// <summary>
+        /// 外呼规则类型 1:自定义 2::使用现有规则
+        /// </summary>
+        public int RuleType { get; set; }
+
+        /// <summary>
+        /// 现有外呼规则ID
+        /// </summary>
+        public string RuleUid { get; set; }
+
+        /// <summary>
+        /// 应回访数量
+        /// </summary>
+        public int HasVisitCount { get; set; }
+
+        /// <summary>
+        /// 已回访成功数量
+        /// </summary>
+        public int VisitedCount { get; set; }
+
+        /// <summary>
+        /// 已回访失败数量
+        /// </summary>
+        public int VisitedFailCount { get; set; }
+
+        public DateTime CreationTime { get; set; }
+    }
+
+    public class AiOrderVisitDetailDto
+    {
+        /// <summary>
+        /// 主表ID
+        /// </summary>
+        public string AiOrderVisitId { get; set; }
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 工单
+        /// </summary>
+        public OrderDto Order { get; set; }
+        /// <summary>
+        /// 工单回访主表ID
+        /// </summary>
+        public string OrderVisitId { get; set; }
+        /// <summary>
+        /// 工单
+        /// </summary>
+        public OrderVisitDto OrderVisit { get; set; }
+        /// <summary>
+        /// 外呼电话
+        /// </summary>
+        public string OuterNo { get; set; }
+
+        public EAiOrderVisitState AiOrderVisitState { get; set; }
+
+        /// <summary>
+        /// 批此上传成功后任务ID
+        /// </summary>
+        public string? TaskUid { get; set; }
+    }
 }

+ 1 - 1
src/Hotline.Share/Enums/Settings/ETimeType.cs

@@ -9,7 +9,7 @@ namespace Hotline.Share.Enums.Settings
 {
     public enum ETimeType
     {
-        [Description("小时")]
+        //[Description("小时")]
         Hour = 1,
         [Description("工作日")]
         WorkDay = 2,

+ 92 - 92
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -293,96 +293,96 @@ namespace Hotline.Settings.TimeLimits
             {
                 //新增对应小时
                 case ETimeType.Hour:
-                    if (isCenter)
-                    {
-                        //中心计算自然时间
-                        return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
-                    }
-                    else
-                    {
-                        //部门计算工作时间
-                        //查询统一部门工作时间
-                        var workTime = _systemSettingRepository.Get(x => x.Code == "WorkTime");
-                        if (workTime != null)
-                        {
-                            //计算一天工作时间(分钟)
-                            DateTime WorkBeginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
-                            DateTime WorkEndTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[1] + ":00");
-                            TimeSpan minuteSpan = new TimeSpan(WorkEndTime.Ticks - WorkBeginTime.Ticks);
-                            //一天工作时间(分钟)
-                            int minutes = (int)minuteSpan.TotalMinutes;
-                            //延期总时间(分钟)
-                            int timeValueMinutes = timeValue * 60;
-
-                            //判断开始时间不在工时间段修正时间复位至当天或者第二天的开始时间(如果大于结束时间则复位至第二天的开始时间)
-                            if (beginTime < WorkBeginTime)
-                            {
-                                beginTime = WorkBeginTime;
-                            }
-                            else
-                            {
-                                if (beginTime > WorkEndTime)
-                                {
-                                    beginTime = WorkBeginTime.AddDays(1);
-                                }
-                            }
-
-                            //判断第一天时间是否足够
-                            TimeSpan firstMinuteSpan = new TimeSpan(WorkEndTime.Ticks - beginTime.Ticks);
-                            //计算开始时间的第一天时间
-                            int firstMinute = (int)firstMinuteSpan.TotalMinutes;
-                            //判断第一天时间是否足够
-                            if (firstMinute > timeValueMinutes)
-                            {
-                                //足够
-                                bool canWhile = true;
-                                while (canWhile)
-                                {
-                                    //判断开始时间是否在工作日
-                                    if (IsWorkDay(beginTime))
-                                    {
-                                        return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
-                                    }
-                                    else
-                                    {
-                                        //如果不是工作日就加一天
-                                        beginTime = beginTime.AddDays(1);
-                                    }
-                                }
-                                return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
-                            }
-                            else
-                            {
-                                //不够
-                                bool canWhile = true;
-                                while (canWhile)
-                                {
-                                    //判断开始时间是否在工作日
-                                    if (IsWorkDay(beginTime))
-                                    {
-                                        //在工作日
-                                        timeValueMinutes = timeValueMinutes - minutes;
-                                        if (timeValueMinutes > 0)
-                                        {
-                                            beginTime = beginTime.AddDays(1);
-                                        }
-                                        else
-                                        {
-                                            return new TimeResult { EndTime = beginTime.AddMinutes(timeValueMinutes), RuleStr = timeValue + "小时" };
-                                        }
-                                    }
-                                    else
-                                    {
-                                        //如果不是工作日
-                                        beginTime = beginTime.AddDays(1);
-                                    }
-                                }
-                            }
-
-                        }
-                        return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
-                    }
-
+                    //if (isCenter)
+                    //{
+                    //    //中心计算自然时间
+                    //    return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
+                    //}
+                    //else
+                    //{
+                    //    //部门计算工作时间
+                    //    //查询统一部门工作时间
+                    //    var workTime = _systemSettingRepository.Get(x => x.Code == "WorkTime");
+                    //    if (workTime != null)
+                    //    {
+                    //        //计算一天工作时间(分钟)
+                    //        DateTime WorkBeginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
+                    //        DateTime WorkEndTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[1] + ":00");
+                    //        TimeSpan minuteSpan = new TimeSpan(WorkEndTime.Ticks - WorkBeginTime.Ticks);
+                    //        //一天工作时间(分钟)
+                    //        int minutes = (int)minuteSpan.TotalMinutes;
+                    //        //延期总时间(分钟)
+                    //        int timeValueMinutes = timeValue * 60;
+
+                    //        //判断开始时间不在工时间段修正时间复位至当天或者第二天的开始时间(如果大于结束时间则复位至第二天的开始时间)
+                    //        if (beginTime < WorkBeginTime)
+                    //        {
+                    //            beginTime = WorkBeginTime;
+                    //        }
+                    //        else
+                    //        {
+                    //            if (beginTime > WorkEndTime)
+                    //            {
+                    //                beginTime = WorkBeginTime.AddDays(1);
+                    //            }
+                    //        }
+
+                    //        //判断第一天时间是否足够
+                    //        TimeSpan firstMinuteSpan = new TimeSpan(WorkEndTime.Ticks - beginTime.Ticks);
+                    //        //计算开始时间的第一天时间
+                    //        int firstMinute = (int)firstMinuteSpan.TotalMinutes;
+                    //        //判断第一天时间是否足够
+                    //        if (firstMinute > timeValueMinutes)
+                    //        {
+                    //            //足够
+                    //            bool canWhile = true;
+                    //            while (canWhile)
+                    //            {
+                    //                //判断开始时间是否在工作日
+                    //                if (IsWorkDay(beginTime))
+                    //                {
+                    //                    return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
+                    //                }
+                    //                else
+                    //                {
+                    //                    //如果不是工作日就加一天
+                    //                    beginTime = beginTime.AddDays(1);
+                    //                }
+                    //            }
+                    //            return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
+                    //        }
+                    //        else
+                    //        {
+                    //            //不够
+                    //            bool canWhile = true;
+                    //            while (canWhile)
+                    //            {
+                    //                //判断开始时间是否在工作日
+                    //                if (IsWorkDay(beginTime))
+                    //                {
+                    //                    //在工作日
+                    //                    timeValueMinutes = timeValueMinutes - minutes;
+                    //                    if (timeValueMinutes > 0)
+                    //                    {
+                    //                        beginTime = beginTime.AddDays(1);
+                    //                    }
+                    //                    else
+                    //                    {
+                    //                        return new TimeResult { EndTime = beginTime.AddMinutes(timeValueMinutes), RuleStr = timeValue + "小时" };
+                    //                    }
+                    //                }
+                    //                else
+                    //                {
+                    //                    //如果不是工作日
+                    //                    beginTime = beginTime.AddDays(1);
+                    //                }
+                    //            }
+                    //        }
+
+                    //    }
+                    //    return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
+                    //}
+                    return null;
                 //新增工作日
                 case ETimeType.WorkDay:
                     //检查时间段内是否存在休息日或者工作日
@@ -391,8 +391,8 @@ namespace Hotline.Settings.TimeLimits
                     if (workTimeWorkDay != null)
                     {
                         //计算一天工作时间(分钟)
-                        DateTime WorkBeginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTimeWorkDay.SettingValue[0] + ":00");
-                        DateTime WorkEndTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTimeWorkDay.SettingValue[1] + ":00");
+                        DateTime WorkBeginTime = DateTime.Parse(beginTime.ToShortDateString() + " " + workTimeWorkDay.SettingValue[0] + ":00");
+                        DateTime WorkEndTime = DateTime.Parse(beginTime.ToShortDateString() + " " + workTimeWorkDay.SettingValue[1] + ":00");
 
                         //判断开始时间不在工时间段修正时间复位至当天或者第二天的开始时间(如果大于结束时间则复位至第二天的开始时间)
                         if (beginTime < WorkBeginTime)