浏览代码

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

xf 1 年之前
父节点
当前提交
924fdcab22

+ 4 - 0
.editorconfig

@@ -0,0 +1,4 @@
+[*.cs]
+
+# CS8625: 无法将 null 字面量转换为非 null 的引用类型。
+dotnet_diagnostic.CS8625.severity = none

+ 7 - 2
Hotline.sln

@@ -37,9 +37,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XF.Domain", "src\XF.Domain\
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XF.EasyCaching", "src\XF.EasyCaching\XF.EasyCaching.csproj", "{F68F9925-E184-47C4-88EE-73A09CF4F61E}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wex.Sdk", "src\Wex.Sdk\Wex.Sdk.csproj", "{F2E2E925-39FF-41BB-B199-34E50A3AC1FB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wex.Sdk", "src\Wex.Sdk\Wex.Sdk.csproj", "{F2E2E925-39FF-41BB-B199-34E50A3AC1FB}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hotline.Wex", "src\Hotline.Wex\Hotline.Wex.csproj", "{40B6FBEC-0524-430C-8B28-22229681D0F8}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hotline.Wex", "src\Hotline.Wex\Hotline.Wex.csproj", "{40B6FBEC-0524-430C-8B28-22229681D0F8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5A1F7142-179E-47F7-A7C2-F73C6C3E68C4}"
+	ProjectSection(SolutionItems) = preProject
+		.editorconfig = .editorconfig
+	EndProjectSection
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+ 4 - 7
src/Hotline.Api/Controllers/OrderController.cs

@@ -304,11 +304,6 @@ public class OrderController : BaseController
 
         var first = dto.VisitDetails.First(x => x.VisitTarget == EVisitTarget.Org);
 
-        bool CanAgain = false;
-        if((visit.VisitState == EVisitState.WaitForVisit || visit.VisitState == EVisitState.Visiting) && dto.IsAgain)
-        {
-            CanAgain = true;
-        }
 
         //更新主表
         visit.VisitState = Share.Enums.Order.EVisitState.Visited;
@@ -323,14 +318,16 @@ public class OrderController : BaseController
         visit.Order.Visited(first.OrgProcessingResults.Id, first.OrgProcessingResults.Name);
 
         //更新明細
-        //var visitDetails = _mapper.Map <List<OrderVisitDetail>>(dto.VisitDetails);
+        //var visitDetails = _mapper.Map <List<OrderVisitDetail>>(dto.VisitDetails); 
         //await _orderVisitedDetailRepository.UpdateRangeAsync(visitDetails, HttpContext.RequestAborted);
         visit.VisitDetails = _mapper.Map<List<OrderVisitDetail>>(dto.VisitDetails);
 
         _orderVisitedRepository.UpdateNav(visit);
 
+        var orderDto = _mapper.Map<OrderDto>(visit.Order);
+
         //推省上
-        //_capPublisher.Publish(EventNames.HotlineOrderSubmitVisitInfo,new PublishVisitDto(){ OrderDto = null,NowVisit = null,FirstVisit=null })
+        _capPublisher.Publish(EventNames.HotlineOrderVisited, new PublishVisitDto() { Order = orderDto, No = visit.No, VisitType = visit.VisitType, VisitName = visit.Employee.Name , VisitTime = visit.VisitTime, VisitRemark = "", AreaCode = visit.Order.AreaCode!, SubjectResultSatify = first.OrgProcessingResults, FirstSatisfaction = new IdName(visit.Order.FirstVisitResultCode!,visit.Order.FirstVisitResult!), ClientGuid="" });
     }
 
     #endregion

+ 1 - 1
src/Hotline.Api/Controllers/SysController.cs

@@ -265,7 +265,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddDicData)]
+        [Permission(EPermission.AddDicData)] 
         [HttpPost("add-dicdata")]
         public async Task AddDicData([FromBody] AddDicDataDto dto)
         {

+ 19 - 0
src/Hotline.Repository.SqlSugar/CallCenter/WexCallRecordRepository.cs

@@ -0,0 +1,19 @@
+using Hotline.CallCenter.Calls;
+using Hotline.Repository.SqlSugar.DataPermissions;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+
+namespace Hotline.Repository.SqlSugar.CallCenter
+{
+    public class WexCallRecordRepository : BaseRepository<WexCallRecord>, IWexCallRecordRepository, IScopeDependency
+    {
+        public WexCallRecordRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+        {
+        }
+    }
+}

+ 52 - 1
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -71,6 +71,11 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string? No110 { get; set; }
 
+        /// <summary>
+        /// 是否110来的工单
+        /// </summary>
+        public bool IsNo110 { get; set; }
+
         #region 流程信息
 
         /// <summary>
@@ -532,9 +537,55 @@ namespace Hotline.Share.Dtos.Order
 
     public class PublishVisitDto
     {
-        public OrderDto OrderDto { get; set; }
+        /// <summary>
+        /// 工单对象
+        /// </summary>
+        public OrderDto Order { get; set; }
+
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        public string No { get; set; }
+
+        /// <summary>
+        /// 回访评价方式
+        /// </summary>
+        public EVisitType? VisitType { get; set; }
+
+        /// <summary>
+        /// 回访人
+        /// </summary>
+        public string VisitName{get;set;}
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        public DateTime? VisitTime { get; set; }
+
+        /// <summary>
+        /// 回访评价情况
+        /// </summary>
+        public string VisitRemark { get; set; }
+
+        /// <summary>
+        /// 回访结果满意度
+        /// </summary>
+        public IdName SubjectResultSatify { get; set; }
 
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 工单回访首次结果满意度
+        /// </summary>
+        public IdName FirstSatisfaction { get; set; }
 
+        /// <summary>
+        /// 附件
+        /// </summary>
+        public string ClientGuid { get; set;}
     }
 
 }

+ 47 - 0
src/Hotline/Caching/Services/CallRecordManager.cs

@@ -0,0 +1,47 @@
+using Hotline.CallCenter.Calls;
+using Microsoft.EntityFrameworkCore.Metadata.Internal;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using SqlSugar;
+
+namespace Hotline.Caching.Services
+{
+    public class CallRecordManager : BackgroundService
+    {
+        private readonly IServiceScopeFactory _serviceScopeFactory;
+
+        public CallRecordManager(IServiceScopeFactory serviceScopeFactory)
+        {
+            _serviceScopeFactory = serviceScopeFactory;
+        }
+
+
+
+        protected override Task ExecuteAsync(CancellationToken stoppingToken)
+        {
+            //20秒扫描一次威尔信数据库
+            //using var sc = _serviceScopeFactory.CreateScope();
+            //var _logger = sc.ServiceProvider.GetService<ILogger<CallRecordManager>>();
+            //var time = TimeSpan.FromSeconds(20);
+            //while(!stoppingToken.IsCancellationRequested)
+            //{
+            //    using var scope = _serviceScopeFactory.CreateScope();
+            //    var _wexCallRecordRepository = scope.ServiceProvider.GetService<IWexCallRecordRepository>();
+            //}
+            throw new NotImplementedException();
+        }
+
+
+        public class WexRecord
+        {
+            [SugarColumn(ColumnName = "CallID")]
+            public string CallId { get; set; }
+
+            [SugarColumn(ColumnName = "CallType")]
+            public string CallType { get; set; }
+
+            
+        }
+    }
+}

+ 9 - 0
src/Hotline/CallCenter/Calls/IWexCallRecordRepository.cs

@@ -0,0 +1,9 @@
+using XF.Domain.Repository;
+
+namespace Hotline.CallCenter.Calls
+{
+    public interface IWexCallRecordRepository : IRepository<WexCallRecord>
+    {
+
+    }
+}

+ 123 - 0
src/Hotline/CallCenter/Calls/WexCallRecord.cs

@@ -0,0 +1,123 @@
+using Hotline.Share.Enums.CallCenter;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.CallCenter.Calls
+{
+    public class WexCallRecord:CreationEntity
+    {
+        /// <summary>
+        /// 电话方向
+        /// </summary>
+        public ECallDirection Direction { get; set; }
+
+        /// <summary>
+        /// 应答分机号
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string TelNo { get; set; }
+
+        /// <summary>
+        /// 工号
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string StaffNo { get; set; }
+
+        /// <summary>
+        /// 主叫
+        /// </summary>
+        public string CPN { get; set; }
+
+        /// <summary>
+        /// 被叫
+        /// </summary>
+        public string CDPN { get; set; }
+
+        /// <summary>
+        /// 号码归属地
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string AreaName { get; set; }
+
+        /// <summary>
+        /// 进入IVR时间
+        /// </summary>
+        public DateTime? InIvrTime { get; set; }
+
+
+        /// <summary>
+        /// 离开 IVR时间
+        /// </summary>
+        public DateTime? OutIvrTime { get; set; }
+
+
+        /// <summary>
+        /// 进入队列时间
+        /// </summary>
+        public DateTime? InQueueTime { get; set; }
+
+        
+        /// <summary>
+        /// 离开队列时间
+        /// </summary>
+        public DateTime? OutQueueTime { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime BeginTime { get; set; }
+
+        /// <summary>
+        /// 振铃时间
+        /// </summary>
+        public DateTime? RingTime { get; set; }
+
+        /// <summary>
+        /// 振铃时长
+        /// </summary>
+        public int RingTimes { get; set; }
+
+        /// <summary>
+        /// 接听时间
+        /// </summary>
+        public DateTime? AnsweredTime { get; set; }
+
+        /// <summary>
+        /// 挂断时间
+        /// </summary>
+        public DateTime? ByeTime { get; set; }
+
+        /// <summary>
+        /// 通话时长
+        /// </summary>
+        public int TalkTime { get; set; }
+
+        /// <summary>
+        /// 录音播放路径
+        /// </summary>
+        public string RecordUrl { get; set; }
+
+        /// <summary>
+        /// 录音相对路径
+        /// </summary>
+        public string SourceRecord { get; set; }
+
+        /// <summary>
+        /// 通话结果
+        /// </summary>
+        public EOnState OnState { get; set; }
+
+
+        /// <summary>
+        /// 挂断方
+        /// </summary>
+        public EEndBy EndBy { get; set; }
+
+
+        /// <summary>
+        /// 评价结果
+        /// </summary>
+        public string EvaluateResult { get; set; }
+
+    }
+}

+ 4 - 0
src/Hotline/Hotline.csproj

@@ -16,6 +16,10 @@
     <Compile Remove="CallCenter\Tels\ETelStatus.cs" />
   </ItemGroup>
 
+  <ItemGroup>
+    <None Include="..\..\.editorconfig" Link=".editorconfig" />
+  </ItemGroup>
+
   <ItemGroup>
     <PackageReference Include="Mapster" Version="7.3.0" />
     <PackageReference Include="MediatR" Version="12.0.1" />

+ 6 - 0
src/Hotline/Orders/Order.cs

@@ -260,6 +260,12 @@ namespace Hotline.Orders
         [SugarColumn(IsNullable = true)]
         public string? No110 { get; set; }
 
+        /// <summary>
+        /// 是否110来的工单
+        /// </summary>
+        [SugarColumn(DefaultValue = "f")]
+        public bool IsNo110 { get; set; }
+
         #endregion
 
         #region 流程信息