Преглед на файлове

fix: 解决应用范围导致服务注入异常

xf преди 8 месеца
родител
ревизия
16fc07ccc0

+ 20 - 2
src/Hotline.Api/config/appsettings.Development.json

@@ -1,9 +1,27 @@
 {
   "AllowedHosts": "*",
   "AppConfiguration": {
-    "AppScope": "YiBin",
+    "AppScope": "ZiGong",
     "YiBin": {
-      "CallCenterType": "TianRun" //XunShi、WeiErXin、TianRun、XingTang
+      "CallCenterType": "XingTang", //XunShi、WeiErXin、TianRun、XingTang
+      //智能回访
+      "AiVisit": {
+        "Url": "http://118.122.73.80:19061",
+        "Appkey": "MTAwMDAx",
+        "ServiceVersion": "V1.0.0" //接口版本号
+      },
+      //智能质检
+      "AiQuality": {
+        "Url": "http://118.122.73.80:19072/" // 正式
+        //"Url": "http://118.122.73.80:19072/", // 测试
+      },
+      //企业服务
+      "Enterprise": {
+        "AddressUrl": "http://10.12.185.227:8834/",
+        "ClientId": "1462598736",
+        "ClientSecret": "6nZtVK4rKfnsncGymUHB",
+        "TenantId": "000000"
+      }
     },
     "ZiGong": {
       "CallCenterType": "XingTang"

+ 2 - 0
src/Hotline.Application/Quality/AiOrderQualityHandler.cs

@@ -9,10 +9,12 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Hotline.EventBus;
 using Hotline.Quality.Notifications;
 
 namespace Hotline.Application.Quality
 {
+	[HandlerInject(AppScopes = EAppScope.YiBin)]
 	public class AiOrderQualityHandler : INotificationHandler<AiOrderQualityNotify>
 	{
 		private readonly IAiQualityService _aiQualityService;

+ 0 - 6
src/Hotline.Application/Quality/QualityApplication.cs

@@ -34,9 +34,7 @@ namespace Hotline.Application.Quality
         private readonly IMapper _mapper;
         private readonly IRepository<QualityDetail> _qualiteyDetail;
         private readonly IQualityRepository _qualityRepository;
-        private readonly IAiQualityService _aiQualityService;
         private readonly IOrderRepository _orderRepository;
-        //private readonly IRepository<TrCallRecord> _trCallRecordRepository;
         private readonly IRepository<QualityTemplate> _qualityTemplate;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly ILogger<Hotline.Quality.Quality> _logger;
@@ -50,8 +48,6 @@ namespace Hotline.Application.Quality
             IMapper mapper,
             IRepository<QualityDetail> qualiteyDetail,
             IQualityRepository qualityRepository,
-            IAiQualityService aiQualityService,
-            //IRepository<TrCallRecord> trCallRecordRepository,
             IRepository<QualityTemplate> qualityTemplate,
             IOrderRepository orderRepository,
             ISystemSettingCacheManager systemSettingCacheManager,
@@ -65,8 +61,6 @@ namespace Hotline.Application.Quality
             _mapper = mapper;
             _qualiteyDetail = qualiteyDetail;
             _qualityRepository = qualityRepository;
-            _aiQualityService = aiQualityService;
-            //_trCallRecordRepository = trCallRecordRepository;
             _qualityTemplate = qualityTemplate;
             _orderRepository = orderRepository;
             _systemSettingCacheManager = systemSettingCacheManager;

+ 63 - 63
src/Hotline.Application/Visit/AiOrderVisitService.cs

@@ -1,71 +1,71 @@
 
-using Hotline.Ai.Visit;
-using Hotline.Orders;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using Org.BouncyCastle.Utilities;
-using XF.Domain.Repository;
+//using Hotline.Ai.Visit;
+//using Hotline.Orders;
+//using Microsoft.Extensions.DependencyInjection;
+//using Microsoft.Extensions.Hosting;
+//using Org.BouncyCastle.Utilities;
+//using XF.Domain.Repository;
 
-namespace Hotline.Application.Visit
-{
-    public class AiOrderVisitService : BackgroundService
-    {
-        private readonly IServiceScopeFactory _serviceScopeFactory;
+//namespace Hotline.Application.Visit
+//{
+//    public class AiOrderVisitService : BackgroundService
+//    {
+//        private readonly IServiceScopeFactory _serviceScopeFactory;
 
-        public AiOrderVisitService(IServiceScopeFactory serviceScopeFactory)
-        {
-            _serviceScopeFactory = serviceScopeFactory;
-        }
+//        public AiOrderVisitService(IServiceScopeFactory serviceScopeFactory)
+//        {
+//            _serviceScopeFactory = serviceScopeFactory;
+//        }
 
-        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
-        {
-            using var scope = _serviceScopeFactory.CreateScope();
-            var _aivisitService = scope.ServiceProvider.GetRequiredService<IAiVisitService>();
-            var _aivisitRepository = scope.ServiceProvider.GetRequiredService<IRepository<AiOrderVisit>>();
-            var _aiVisitDetailRepository = scope.ServiceProvider.GetRequiredService<IRepository<AiOrderVisitDetail>>();
-            var _orderVisitRepository = scope.ServiceProvider.GetRequiredService<IRepository<OrderVisit>>();
+//        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+//        {
+//            using var scope = _serviceScopeFactory.CreateScope();
+//            var _aivisitService = scope.ServiceProvider.GetRequiredService<IAiVisitService>();
+//            var _aivisitRepository = scope.ServiceProvider.GetRequiredService<IRepository<AiOrderVisit>>();
+//            var _aiVisitDetailRepository = scope.ServiceProvider.GetRequiredService<IRepository<AiOrderVisitDetail>>();
+//            var _orderVisitRepository = scope.ServiceProvider.GetRequiredService<IRepository<OrderVisit>>();
 
-            int times = 300000;
-            while (!stoppingToken.IsCancellationRequested)
-            {
-                try
-                {
-                    var aivisitList = await _aivisitRepository.Queryable()
-                    .Includes(x => x.AiOrderVisitDetails,d=>d.OrderVisit).Where(x=>x.TaskState == Share.Enums.Ai.EAiOrderVisitTaskState.InProgress).ToListAsync();
-                    if (aivisitList != null)
-                    {
-                        foreach (var aivisit in aivisitList)
-                        {
-                            foreach (var aivisitDetail in aivisit.AiOrderVisitDetails)
-                            {
-                                if (!string.IsNullOrEmpty(aivisit.BatchUid) && !string.IsNullOrEmpty(aivisitDetail.TaskUid))
-                                {
-                                    var res = await _aivisitService.QueryAiVisitTask(aivisit.BatchUid, aivisitDetail.TaskUid, stoppingToken);
-                                    if(res!=null  && res.Status == 4)
-                                    {
-                                        aivisitDetail.AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.LoseEfficacy;
-                                        await _aiVisitDetailRepository.UpdateAsync(aivisitDetail,stoppingToken);
-                                        aivisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.WaitForVisit;
-                                        aivisitDetail.OrderVisit.IsCanAiVisit = true;
-                                        await _orderVisitRepository.UpdateAsync(aivisitDetail.OrderVisit,stoppingToken);
-                                        aivisit.VisitedFailCount++;
-                                        if ((aivisit.VisitedFailCount + aivisit.VisitedCount) == aivisit.HasVisitCount)
-                                        {
-                                            aivisit.TaskState = Share.Enums.Ai.EAiOrderVisitTaskState.Ended;
-                                        }
-                                        await _aivisitRepository.UpdateAsync(aivisit,stoppingToken);
-                                    }
-                                }
+//            int times = 300000;
+//            while (!stoppingToken.IsCancellationRequested)
+//            {
+//                try
+//                {
+//                    var aivisitList = await _aivisitRepository.Queryable()
+//                    .Includes(x => x.AiOrderVisitDetails,d=>d.OrderVisit).Where(x=>x.TaskState == Share.Enums.Ai.EAiOrderVisitTaskState.InProgress).ToListAsync();
+//                    if (aivisitList != null)
+//                    {
+//                        foreach (var aivisit in aivisitList)
+//                        {
+//                            foreach (var aivisitDetail in aivisit.AiOrderVisitDetails)
+//                            {
+//                                if (!string.IsNullOrEmpty(aivisit.BatchUid) && !string.IsNullOrEmpty(aivisitDetail.TaskUid))
+//                                {
+//                                    var res = await _aivisitService.QueryAiVisitTask(aivisit.BatchUid, aivisitDetail.TaskUid, stoppingToken);
+//                                    if(res!=null  && res.Status == 4)
+//                                    {
+//                                        aivisitDetail.AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.LoseEfficacy;
+//                                        await _aiVisitDetailRepository.UpdateAsync(aivisitDetail,stoppingToken);
+//                                        aivisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.WaitForVisit;
+//                                        aivisitDetail.OrderVisit.IsCanAiVisit = true;
+//                                        await _orderVisitRepository.UpdateAsync(aivisitDetail.OrderVisit,stoppingToken);
+//                                        aivisit.VisitedFailCount++;
+//                                        if ((aivisit.VisitedFailCount + aivisit.VisitedCount) == aivisit.HasVisitCount)
+//                                        {
+//                                            aivisit.TaskState = Share.Enums.Ai.EAiOrderVisitTaskState.Ended;
+//                                        }
+//                                        await _aivisitRepository.UpdateAsync(aivisit,stoppingToken);
+//                                    }
+//                                }
 
-                            }
-                        }
-                    }
+//                            }
+//                        }
+//                    }
                     
-                }
-                catch{}
-                await Task.Delay(times);
-            }
+//                }
+//                catch{}
+//                await Task.Delay(times);
+//            }
            
-        }
-    }
-}
+//        }
+//    }
+//}

+ 0 - 12
src/Hotline.Application/Visit/IOrderVisitApplication.cs

@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Hotline.Application.Visit
-{
-    public interface IOrderVisitApplication
-    {
-    }
-}

+ 0 - 30
src/Hotline.Application/Visit/OrderVisitApplication.cs

@@ -1,30 +0,0 @@
-using Hotline.Ai.Visit;
-using Hotline.Caching.Interfaces;
-using Hotline.Orders;
-using StackExchange.Redis;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using XF.Domain.Constants;
-using XF.Domain.Dependency;
-using XF.Domain.Repository;
-
-namespace Hotline.Application.Visit
-{
-    public class OrderVisitApplication : IOrderVisitApplication, IScopeDependency
-    {
-        private readonly IRepository<AiOrderVisit> _aiOrderVisitRepository;
-        private readonly IAiVisitService _aiVisitService;
-        private readonly ISystemSettingCacheManager _systemSettingCacheManager;
-
-        public OrderVisitApplication(IRepository<AiOrderVisit> aiOrderVisitRepository,IAiVisitService aiVisitService, ISystemSettingCacheManager systemSettingCacheManager)
-        {
-            _aiOrderVisitRepository = aiOrderVisitRepository;
-            _aiVisitService = aiVisitService;
-            _systemSettingCacheManager = systemSettingCacheManager;
-        }
-       
-    }
-}

+ 1 - 1
src/Hotline.YbEnterprise.Sdk/EnterpriseService.cs

@@ -14,7 +14,7 @@ using XF.Domain.Dependency;
 
 namespace Hotline.YbEnterprise.Sdk
 {
-    public class EnterpriseService : IEnterpriseService, IScopeDependency
+    public class EnterpriseService : IEnterpriseService
     {
         private readonly IHttpClientFactory _httpClientFactory;
         private readonly IOptionsSnapshot<EnterpriseConfig> _enterpriseOptions;

+ 1 - 0
src/Hotline.YbEnterprise.Sdk/HotlineYbEnterpriseStartupExtensions.cs

@@ -9,6 +9,7 @@ namespace Hotline.Api.Sdk
     {
         public static IServiceCollection AddYbEnterpriseSdk(this IServiceCollection services, string? baseAddress)
         {
+            services.AddScoped<IEnterpriseService, EnterpriseService>();
             if (!string.IsNullOrEmpty(baseAddress))
                 services.AddHttpClient(YbEnterpriseDefaults.HttpName, d =>
                 {

+ 2 - 76
src/Hotline/Push/FWMessage/PushDomainService.cs

@@ -27,25 +27,20 @@ public class PushDomainService : IPushDomainService, IScopeDependency
     private readonly IMapper _mapper;
     private readonly IRepository<MessageTemplate> _messageTemplateRepository;
     private readonly ICapPublisher _capPublisher;
-    private readonly IHttpClientFactory _httpClientFactory;
     private readonly ILogger<PushDomainService> _logger;
-
+    
     /// <summary>
     /// 
     /// </summary>
     /// <param name="messageRepository"></param>
     /// <param name="mapper"></param>
-    /// <param name="mediator"></param>
     /// <param name="messageTemplateRepository"></param>
     /// <param name="capPublisher"></param>
-    /// <param name="httpClientFactory"></param>
     /// <param name="logger"></param>
-    /// <param name="sendSmsConfiguration"></param>
     public PushDomainService(IRepository<Message> messageRepository,
         IMapper mapper,
         IRepository<MessageTemplate> messageTemplateRepository,
         ICapPublisher capPublisher,
-        IHttpClientFactory httpClientFactory,
         ILogger<PushDomainService> logger
         )
     {
@@ -53,7 +48,6 @@ public class PushDomainService : IPushDomainService, IScopeDependency
         _mapper = mapper;
         _messageTemplateRepository = messageTemplateRepository;
         _capPublisher = capPublisher;
-        _httpClientFactory = httpClientFactory;
         _logger = logger;
     }
     #endregion
@@ -115,15 +109,6 @@ public class PushDomainService : IPushDomainService, IScopeDependency
         };
         //消息队列
         await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.SendSms, pushMessage, cancellationToken: cancellation);
-
-        ////http请求
-        //var result = await ExecuteAsync<PushMessageDto, SendSmsReponse>(_sendSmsConfiguration.Value.Url, pushMessage, cancellationToken: cancellation);
-        //if (result != null && result.code == 0)
-        //{
-        //    message.Status = EPushStatus.Success;
-        //    message.SendState = ESendState.Sending;
-        //    await _messageRepository.UpdateAsync(message, cancellation);
-        //}
     }
 
     /// <summary>
@@ -191,64 +176,5 @@ public class PushDomainService : IPushDomainService, IScopeDependency
             await _messageRepository.UpdateAsync(data, cancellation);
         }
     }
-
-    /// <summary>
-    /// 
-    /// </summary>
-    /// <typeparam name="TRequest"></typeparam>
-    /// <typeparam name="TResponse"></typeparam>
-    /// <param name="path"></param>
-    /// <param name="request"></param>
-    /// <param name="clientInitialize"></param>
-    /// <param name="cancellationToken"></param>
-    /// <returns></returns>
-    private async Task<TResponse?> ExecuteAsync<TRequest, TResponse>(string path, TRequest request,
-            Action<HttpClient>? clientInitialize = null, CancellationToken cancellationToken = default)
-    {
-        var client = _httpClientFactory.CreateClient("sendwaitsms");
-        clientInitialize?.Invoke(client);
-
-        using var responseMessage = await client.PostAsJsonAsync(path, request, cancellationToken);
-        responseMessage.EnsureSuccessStatusCode();
-        var result = await responseMessage.Content.ReadFromJsonAsync<TResponse>(cancellationToken: cancellationToken);
-        return result;
-    }
-
-
-    #region http请求
-
-    /// <summary>
-    /// 封装使用HttpClient调用WebService
-    /// </summary>
-    /// <param name="url">URL地址</param>
-    /// <param name="content">参数</param>
-    /// <returns></returns>
-    private async Task<string> PostHelper(string url, HttpContent content)
-    {
-        _logger.LogInformation($"准备推送短信, {nameof(PostHelper)}");
-        var result = string.Empty;
-        try
-        {
-            using var client = _httpClientFactory.CreateClient();
-            using (var response = await client.PostAsync(url, content))
-            {
-                if (response.StatusCode == HttpStatusCode.OK)
-                {
-                    result = await response.Content.ReadAsStringAsync();
-                    XmlDocument doc = new XmlDocument();
-                    doc.LoadXml(result);
-                    result = doc.InnerText;
-                }
-            }
-        }
-        catch (Exception ex)
-        {
-            _logger.LogError(ex.InnerException?.Message);
-            result = ex.Message;
-        }
-        _logger.LogInformation($"推送响应:{result}");
-        return result;
-    }
-
-    #endregion
+    
 }