浏览代码

智能质检

田爽 1 年之前
父节点
当前提交
66c2912ef1

+ 12 - 8
src/Hotline.Ai.Jths/AiJthsStartupExtensions.cs

@@ -8,13 +8,17 @@ using Microsoft.Extensions.DependencyInjection;
 
 namespace Hotline.Ai.Jths
 {
-    public static class AiJthsStartupExtensions
-    {
-        public static IServiceCollection AddAiJths(this IServiceCollection services)
-        {
-            services.AddSingleton<IAiQualityService, AiQualityService>();
+	public static class AiJthsStartupExtensions
+	{
+		public static IServiceCollection AddAiJths(this IServiceCollection services, string baseUrl)
+		{
+			services.AddSingleton<IAiQualityService, AiQualityService>(_ => new AiQualityService(baseUrl));
 
-            return services;
-        }
-    }
+			return services;
+		}
+	}
+	public class AiQualityConfig
+	{
+		public string Url { get; set; }
+	}
 }

+ 33 - 2
src/Hotline.Ai.Jths/AiQualityService.cs

@@ -5,14 +5,24 @@ using Hotline.Share.Dtos.Quality;
 using Hotline.CallCenter.Calls;
 using Hotline.Orders;
 using Newtonsoft.Json;
+using System.Text;
+using System.Security.Cryptography;
 
 namespace Hotline.Ai.Jths
 {
     public class AiQualityService : IAiQualityService
 	{
 		private readonly RestClient _client;
+		private readonly string _baseUrl;
 
-		public async Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord call, Order order, CancellationToken cancellationToken)
+		public AiQualityService(string baseUrl)
+        {
+            _client = new RestClient();
+            _baseUrl = baseUrl;
+
+		}
+
+        public async Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord call, Order order, CancellationToken cancellationToken)
 		{
 			AiQualityDto  aiQuality = new AiQualityDto
 			{
@@ -26,7 +36,7 @@ namespace Hotline.Ai.Jths
 			};
 			var data =JsonConvert.SerializeObject(aiQuality);
 			//todo  缺少地址
-			await ExecuteAsync("......./routeinfo/api", Method.Post, data, cancellationToken);
+			await ExecuteAsync(_baseUrl+"/routeinfo/api", Method.Post, data, cancellationToken);
 		}
 
 		public async Task<ApiResponse<TResponse>> ExecuteAsync<TRequest, TResponse>(string path, Method httpMethod,
@@ -59,6 +69,12 @@ namespace Hotline.Ai.Jths
 			where TRequest : class
 		{
 			var req = new RestRequest(path, httpMethod);
+			req.AddHeader("content-type", "application/json");
+			req.AddHeader("token", "");
+			req.AddHeader("version", "");
+			var appkey = MD5Encrypt(request.ToString());
+			req.AddHeader("appkey", appkey);
+			req.AddHeader("signType", "md5");
 			if (httpMethod is Method.Get)
 			{
 				req.AddObject(request);
@@ -78,5 +94,20 @@ namespace Hotline.Ai.Jths
 				throw new HttpRequestException($"智能质检平台错误,Error: {e.Message}");
 			}
 		}
+
+		/// <summary>
+		/// MD5加密
+		/// </summary>
+		/// <param name="input">需要加密的字符串</param>
+		/// <returns></returns>
+		private static string MD5Encrypt(string? input)
+		{
+			using var md5 = MD5.Create();
+			var t = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
+			var sb = new StringBuilder(32);
+			for (var i = 0; i < t.Length; i++)
+				sb.Append(t[i].ToString("x").PadLeft(2, '0'));
+			return sb.ToString();
+		}
 	}
 }

+ 2 - 2
src/Hotline.Api/StartupExtensions.cs

@@ -96,8 +96,8 @@ internal static class StartupExtensions
         var trConfig = configuration.GetRequiredSection("Tr").Get<TrConfiguration>();
         services.AddTrSdk(trConfig.Address, trConfig.Username, trConfig.Password);
 
-        //jths
-        services.AddAiJths();
+		//jths 
+		services.AddAiJths(configuration.GetSection("AiQuality").Get<AiQualityConfig>().Url);
 
         //sqlsugar
         services.AddSqlSugar(configuration);

+ 61 - 58
src/Hotline.Api/config/appsettings.Development.json

@@ -136,69 +136,72 @@
       "DownloadUrlAddress": "file/downloadfile",
       "Source": "数据共享系统"
     },
+    //110对接
+    "PoliceDS": {
+      //1、非警情分流推送服务_宜宾市
+      //   receive-工单受理
+      //   http://10.12.185.168:8001/service/api/ds/110To12345/chainAlarm
+      "token1_token": "b8aae0a998f5b79c9a35aecb888e1a58",
+      "token1_dcsm": "c9bc4e718d1917a9a68add90fecbe5bb60920e5ab85d9ecb6a6167db4352f42b8ae21ac67a6e2aab48b4c99cd9f93ec5fb017e202df969a91f74456c14e8770a",
+      "token1_sm2_public": "BS/H9JVlRdo8vbsZYQLTkeGGZBVjdkX+VJ82CX7n6i4NubmynRIaxvzoSsEAhbbvTDGm2DS96l95nK6Dkd0UZg==",
+      "token1_sm2_private": "GbjU4GFk0yaa/wTdzxeh5BOh8VNlqvnTcb7EUtDVvOY=",
+      "token1_sm4": "BKrW/v4jeRgsFg3HSbxEKnDi6rPceW0AdRiaa1rhEwAnraf8MnHdXzUQoQ7+zyjfghaK5G+zDz+wW+Ob27Jgxt91HkVmyL6+SjqV9ZnqNeGFgTBkQrHDySGz6jHKa12Sv7PZs8pjc716he3NNHZAkCI=",
+      "token1_sm4_mw": "4034d80c19bbd01d",
 
-      //110对接
-      "PoliceDS": {
-        //1、非警情分流推送服务_宜宾市
-        //   receive-工单受理
-        //   http://10.12.185.168:8001/service/api/ds/110To12345/chainAlarm
-        "token1_token": "b8aae0a998f5b79c9a35aecb888e1a58",
-        "token1_dcsm": "c9bc4e718d1917a9a68add90fecbe5bb60920e5ab85d9ecb6a6167db4352f42b8ae21ac67a6e2aab48b4c99cd9f93ec5fb017e202df969a91f74456c14e8770a",
-        "token1_sm2_public": "BS/H9JVlRdo8vbsZYQLTkeGGZBVjdkX+VJ82CX7n6i4NubmynRIaxvzoSsEAhbbvTDGm2DS96l95nK6Dkd0UZg==",
-        "token1_sm2_private": "GbjU4GFk0yaa/wTdzxeh5BOh8VNlqvnTcb7EUtDVvOY=",
-        "token1_sm4": "BKrW/v4jeRgsFg3HSbxEKnDi6rPceW0AdRiaa1rhEwAnraf8MnHdXzUQoQ7+zyjfghaK5G+zDz+wW+Ob27Jgxt91HkVmyL6+SjqV9ZnqNeGFgTBkQrHDySGz6jHKa12Sv7PZs8pjc716he3NNHZAkCI=",
-        "token1_sm4_mw": "4034d80c19bbd01d",
+      //4、警务警情分流推送服务_宜宾市
+      //   receive-工单办结
+      //   http://10.12.185.168:8001/service/api/ds/110To12345/chainDeal
+      "token4_token": "8806bfba29b997853bdb059a9ba9a3ae",
+      "token4_dcsm": "f5dce079e0f4acd6b6627b89fb5e72af5fa5775d3ee3b8c7876f546c5ebe723888df4a70c09f9aa5e096bb342d73e0c4793c851a7a8035e8683b07430f132bd3",
+      "token4_sm2_public": "P2IVWpFx38GQTDV3hgrxjlOdfPhLQNW2LyvAKmYqMz9UYHCtm/l3K73UIouMXs4jcmZjXyItepvKFv44g3YnXA==",
+      "token4_sm2_private": "yxIkRALHoOTxpiZ/jrvCDQatcR7k11Xhps7c92peU9w=",
+      "token4_sm4": "BCD88AXnIfMxe8PrUcubSbFRr07cOuDDEPzy754W3CzhOqjcpAcu1B9B6U46jyM4hEFPqkx+SS1PUAfRlG5tzYD1Z8SKsJTBUDGR6bTMRvCc+C/aps+IcRBfzjjRchtT1c5iok4CfiT4LoK5cmOHKKU=",
+      "token4_sm4_mw": "d731ff1282dda792",
 
-        //4、警务警情分流推送服务_宜宾市
-        //   receive-工单办结
-        //   http://10.12.185.168:8001/service/api/ds/110To12345/chainDeal
-        "token4_token": "8806bfba29b997853bdb059a9ba9a3ae",
-        "token4_dcsm": "f5dce079e0f4acd6b6627b89fb5e72af5fa5775d3ee3b8c7876f546c5ebe723888df4a70c09f9aa5e096bb342d73e0c4793c851a7a8035e8683b07430f132bd3",
-        "token4_sm2_public": "P2IVWpFx38GQTDV3hgrxjlOdfPhLQNW2LyvAKmYqMz9UYHCtm/l3K73UIouMXs4jcmZjXyItepvKFv44g3YnXA==",
-        "token4_sm2_private": "yxIkRALHoOTxpiZ/jrvCDQatcR7k11Xhps7c92peU9w=",
-        "token4_sm4": "BCD88AXnIfMxe8PrUcubSbFRr07cOuDDEPzy754W3CzhOqjcpAcu1B9B6U46jyM4hEFPqkx+SS1PUAfRlG5tzYD1Z8SKsJTBUDGR6bTMRvCc+C/aps+IcRBfzjjRchtT1c5iok4CfiT4LoK5cmOHKKU=",
-        "token4_sm4_mw": "d731ff1282dda792",
+      //3、警务警情分流查询服务_宜宾市
+      //   send-工单受理
+      //   http://10.12.185.168:8001/service/api/ds/12345To110/chainAlarm
+      "token3_token": "b76ba1896c4880998a86b829cf79888a",
+      "token3_dcsm": "3cccc86e021c0ff7827537053ec1b6e4a57cbb49b77c9492257123703c5a6b711000f0842c035fe6d33eb2a947915af53a1ef501916ec7128bff9514d6184e2c",
+      "token3_sm2_public": "qaao4Xh8/eyYGeVOj1K8D7p3+OriP55azWDAbYVoZelMdluNrJuQWM2qPn+hjTHTBnIMAVK2HlHBx4oGfCxGdA==",
+      "token3_sm2_private": "8bSYM8P3b4I94qGt3XVx3bQddNCy/xVKo7o1b5LI4/M=",
+      "token3_sm4": "BIDhFaEu5NILR7byg/JfaPlJEm4dYWC+u9J1IqhtYeYY1AktOxp7cZWqfk/mWjw72pYGT7YRENCULbjZ2bxVG6UUv2pYukZWtYog34Vicu5IgC8ti4VpED9eGzGgtKJ/CT0KtAnjQPQL0PsVbCjTY5M=",
+      "token3_sm4_mw": "bbeb56d247354360",
 
-        //3、警务警情分流查询服务_宜宾市
-        //   send-工单受理
-        //   http://10.12.185.168:8001/service/api/ds/12345To110/chainAlarm
-        "token3_token": "b76ba1896c4880998a86b829cf79888a",
-        "token3_dcsm": "3cccc86e021c0ff7827537053ec1b6e4a57cbb49b77c9492257123703c5a6b711000f0842c035fe6d33eb2a947915af53a1ef501916ec7128bff9514d6184e2c",
-        "token3_sm2_public": "qaao4Xh8/eyYGeVOj1K8D7p3+OriP55azWDAbYVoZelMdluNrJuQWM2qPn+hjTHTBnIMAVK2HlHBx4oGfCxGdA==",
-        "token3_sm2_private": "8bSYM8P3b4I94qGt3XVx3bQddNCy/xVKo7o1b5LI4/M=",
-        "token3_sm4": "BIDhFaEu5NILR7byg/JfaPlJEm4dYWC+u9J1IqhtYeYY1AktOxp7cZWqfk/mWjw72pYGT7YRENCULbjZ2bxVG6UUv2pYukZWtYog34Vicu5IgC8ti4VpED9eGzGgtKJ/CT0KtAnjQPQL0PsVbCjTY5M=",
-        "token3_sm4_mw": "bbeb56d247354360",
+      //2、非警情分流查询服务_宜宾市
+      //   send-工单办结
+      //   http://10.12.185.168:8001/service/api/ds/12345To110/chainDeal
+      "token2_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+      "token2_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+      "token2_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+      "token2_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+      "token2_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+      "token2_sm4_mw": "2938d7acb2754a09",
 
-        //2、非警情分流查询服务_宜宾市
-        //   send-工单办结
-        //   http://10.12.185.168:8001/service/api/ds/12345To110/chainDeal
-        "token2_token": "1fbbac1b09b89d11bc569168aabb3c8b",
-        "token2_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
-        "token2_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
-        "token2_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
-        "token2_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
-        "token2_sm4_mw": "2938d7acb2754a09",
+      //5、从公安网侧获取12345政务服务热线平台知识库列表
+      //   send-知识库列表
+      //   http://10.12.185.168:8001/service/api/ds/get_knowledge_info
+      "token5_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+      "token5_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+      "token5_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+      "token5_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+      "token5_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+      "token5_sm4_mw": "2938d7acb2754a09",
 
-        //5、从公安网侧获取12345政务服务热线平台知识库列表
-        //   send-知识库列表
-        //   http://10.12.185.168:8001/service/api/ds/get_knowledge_info
-        "token5_token": "1fbbac1b09b89d11bc569168aabb3c8b",
-        "token5_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
-        "token5_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
-        "token5_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
-        "token5_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
-        "token5_sm4_mw": "2938d7acb2754a09",
-
-        //6、从公安网侧获取12345政务服务热线平台知识内容
-        //   send-知识库内容
-        //   http://10.12.185.168:8001/service/api/ds/get_knowledge_content
-        "token6_token": "1fbbac1b09b89d11bc569168aabb3c8b",
-        "token6_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
-        "token6_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
-        "token6_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
-        "token6_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
-        "token6_sm4_mw": "2938d7acb2754a09"
-      }
+      //6、从公安网侧获取12345政务服务热线平台知识内容
+      //   send-知识库内容
+      //   http://10.12.185.168:8001/service/api/ds/get_knowledge_content
+      "token6_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+      "token6_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+      "token6_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+      "token6_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+      "token6_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+      "token6_sm4_mw": "2938d7acb2754a09"
+    },
+    //智能质检
+    "AiQuality": {
+      "Url": ""
     }
+  }
 
 }

+ 4 - 0
src/Hotline.Api/config/appsettings.json

@@ -97,5 +97,9 @@
     "Username": "root",
     "Password": "12345678aa",
     "Ip": "222.213.23.229"
+  },
+  //智能质检
+  "AiQuality": {
+    "Url": ""
   }
 }

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

@@ -21,6 +21,7 @@ namespace Hotline.Application.Quality
         private readonly IAiQualityService _aiQualityService;
         private readonly IOrderRepository _orderRepository;
         private readonly IRepository<TrCallRecord> _trCallRecordRepository;
+        private readonly IRepository<QualityTemplate> _qualityTemplate;
 
 		public QualityApplication(
             ISessionContext sessionContext,
@@ -29,6 +30,7 @@ namespace Hotline.Application.Quality
             IQualityRepository qualityRepository,
             IAiQualityService aiQualityService,
             IRepository<TrCallRecord> trCallRecordRepository,
+            IRepository<QualityTemplate> qualityTemplate,
 			IOrderRepository orderRepository
 		)
         {
@@ -38,6 +40,7 @@ namespace Hotline.Application.Quality
             _qualityRepository = qualityRepository;
             _aiQualityService = aiQualityService;
             _trCallRecordRepository = trCallRecordRepository;
+            _qualityTemplate = qualityTemplate;
 			_orderRepository = orderRepository;
 
 		}
@@ -83,12 +86,19 @@ namespace Hotline.Application.Quality
             }
             //受理智能质检
             if (model.Source == EQualitySource.Accepted) {
-                var order = await _orderRepository.GetAsync(model.OrderId);
-				if (order != null  && !string.IsNullOrEmpty(order.CallId))
-	            {
-		            var call = await _trCallRecordRepository.GetAsync(order.CallId);
-                    await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, cancellationToken);
-                }
+                var teAny = await _qualityTemplate.Queryable()
+                    .LeftJoin<QualityTemplateDetail>((x, d) => x.Id == d.TemplateId)
+                    .LeftJoin<QualityItem>((x, d, i) => d.ItemId == i.Id)
+                    .Where((x, d, i) => i.IsIntelligent == 1).AnyAsync();
+                if (teAny)
+                {
+					var order = await _orderRepository.GetAsync(model.OrderId);
+					if (order != null && !string.IsNullOrEmpty(order.CallId))
+					{
+						var call = await _trCallRecordRepository.GetAsync(order.CallId);
+						await _aiQualityService.CreateAiOrderQualityTask(quality, call, order, cancellationToken);
+					}
+				}
             }
         }