TestController.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. using DotNetCore.CAP;
  2. using Hotline.CallCenter.BlackLists;
  3. using Hotline.CallCenter.Devices;
  4. using Hotline.CallCenter.Ivrs;
  5. using Hotline.FlowEngine.WorkflowModules;
  6. using Hotline.Identity.Roles;
  7. using Hotline.Orders;
  8. using Hotline.Realtimes;
  9. using Hotline.Repository.SqlSugar;
  10. using Hotline.Repository.SqlSugar.Ts;
  11. using Hotline.Settings.TimeLimits;
  12. using Hotline.Share.Dtos.Realtime;
  13. using Hotline.Users;
  14. using MediatR;
  15. using Microsoft.AspNetCore.Authorization;
  16. using Microsoft.AspNetCore.Mvc;
  17. using Microsoft.Extensions.Options;
  18. using NewRock.Sdk;
  19. using NewRock.Sdk.Security;
  20. using SqlSugar;
  21. using Tr.Sdk;
  22. using XC.RSAUtil;
  23. using XF.Domain.Authentications;
  24. using XF.Domain.Cache;
  25. using XF.Domain.Exceptions;
  26. using XF.Domain.Filters;
  27. using XF.Domain.Locks;
  28. using XF.Domain.Repository;
  29. namespace Hotline.Api.Controllers;
  30. /// <summary>
  31. ///
  32. /// </summary>
  33. [AllowAnonymous]
  34. public class TestController : BaseController
  35. {
  36. private readonly ILogger<TestController> _logger;
  37. private readonly IAuthorizeGenerator _authorizeGenerator;
  38. private readonly IOptionsSnapshot<CallCenterConfiguration> _options;
  39. private readonly ISessionContext _sessionContext;
  40. private readonly IRepository<User> _userRepository;
  41. private readonly ITypedCache<User> _cache;
  42. private readonly IRealtimeService _realtimeService;
  43. private readonly IBlacklistDomainService _blacklistDomainService;
  44. private readonly IIvrDomainService _ivrDomainService;
  45. private readonly ISugarUnitOfWork<HotlineDbContext> _uow;
  46. private readonly IRepository<Role> _roleRepository;
  47. private readonly IMediator _mediator;
  48. private readonly IDistributedLock _distributedLock;
  49. private readonly IRepository<OrderUrge> _orderUrgeRepository;
  50. private readonly IRepositoryTextSearch<OrderTs> _repositoryts;
  51. private readonly ITimeLimitDomainService _timeLimitDomainService;
  52. private readonly IWfModuleDomainService _wfModuleDomainService;
  53. private readonly IDaySettingRepository _daySettingRepository;
  54. private readonly ITrClient _trClient;
  55. private readonly ICapPublisher _capPublisher;
  56. //private readonly ITypedCache<List<User>> _cache;
  57. //private readonly ICacheManager<User> _cache;
  58. public TestController(
  59. INewRockClient client,
  60. ILogger<TestController> logger,
  61. IAuthorizeGenerator authorizeGenerator,
  62. IOptionsSnapshot<CallCenterConfiguration> options,
  63. ISessionContext sessionContext,
  64. IRepository<User> userRepository,
  65. //ICacheManager<User> cache
  66. //ITypedCache<List<User>> cache
  67. ITypedCache<User> cache,
  68. IRealtimeService realtimeService,
  69. IBlacklistDomainService blacklistDomainService,
  70. IIvrDomainService ivrDomainService,
  71. ISugarUnitOfWork<HotlineDbContext> uow,
  72. IRepository<Role> roleRepository,
  73. IMediator mediator,
  74. IDistributedLock distributedLock,
  75. IRepository<OrderUrge> orderUrgeRepository,
  76. IRepositoryTextSearch<OrderTs> repositoryts,
  77. ITimeLimitDomainService timeLimitDomainService,
  78. IWfModuleDomainService wfModuleDomainService,
  79. IDaySettingRepository daySettingRepository,
  80. ITrClient trClient,
  81. ICapPublisher capPublisher
  82. )
  83. {
  84. _logger = logger;
  85. _authorizeGenerator = authorizeGenerator;
  86. _options = options;
  87. _sessionContext = sessionContext;
  88. _userRepository = userRepository;
  89. _cache = cache;
  90. _realtimeService = realtimeService;
  91. _blacklistDomainService = blacklistDomainService;
  92. _ivrDomainService = ivrDomainService;
  93. _uow = uow;
  94. _roleRepository = roleRepository;
  95. _mediator = mediator;
  96. _distributedLock = distributedLock;
  97. _orderUrgeRepository = orderUrgeRepository;
  98. _repositoryts = repositoryts;
  99. _timeLimitDomainService = timeLimitDomainService;
  100. _wfModuleDomainService = wfModuleDomainService;
  101. _daySettingRepository = daySettingRepository;
  102. _trClient = trClient;
  103. _capPublisher = capPublisher;
  104. }
  105. [HttpGet("testo")]
  106. public async Task<OpenResponse> TestOrigin()
  107. {
  108. var today = DateTime.Today.ToString();
  109. await _capPublisher.PublishAsync("test.today", today, cancellationToken: HttpContext.RequestAborted);
  110. return OpenResponse.Ok(today);
  111. }
  112. [HttpGet("time")]
  113. public async Task<OpenResponse> GetTime()
  114. {
  115. //await _repositoryts.AddVectorAsync("f595e730-909a-45e4-9138-a84bf15f4662", DateTime.Now,
  116. // new List<string> { "xx", "bb" }, HttpContext.RequestAborted);
  117. //var result = await _repositoryts.SearchAsync(new List<string> { "bb" }, HttpContext.RequestAborted);
  118. //await _repositoryts.UpdateVectorAsync("f595e730-909a-45e4-9138-a84bf15f4662",
  119. // new List<string> { "ss", "bb" }, HttpContext.RequestAborted);
  120. //_uow.Db.Ado.SqlQueryAsync<OrderUrge>("SELECT to_tsvector('fat cats ate fat rats') @@ to_tsquery('fat & rat')")
  121. //var tests = _uowWex.Db.Ado.SqlQuery<Test>("select * from view_telinfo_full where IsSynch=@IsSynch", new { IsSynch = 0 });
  122. //var a = _uowWex.Db.Ado.ExecuteCommand("update telinfo set IsSynch=1 where GUID=@CallId", new { CallId = "b1f97f3c-88b6-4f42-b8de-83ed448854b0" });
  123. //var rsp = await _wexClient.QueryTelsAsync(new QueryTelRequest { }, HttpContext.RequestAborted);
  124. //int a = _timeLimitDomainService.CalcWorkTime(DateTime.Now, DateTime.Parse("2023-09-11 16:21:00"));
  125. //int m = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2023-09-19 12:00:00"), DateTime.Parse("2023-09-20 18:00:00"), false);
  126. //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2023-09-19 18:00:00"), "35", false);
  127. //await _wfModuleDomainService.PersistenceModulesAsync(HttpContext.RequestAborted);
  128. //var rsp = await _daprClient.InvokeMethodAsync<ApiResponse<string>>(HttpMethod.Get, "identity", "api/v1/Test/time", HttpContext.RequestAborted);
  129. //var rsp1 = await _daprClient.InvokeMethodAsync<int, ApiResponse<string>>(HttpMethod.Post, "identity", "api/v1/Test/time1", 222, HttpContext.RequestAborted);
  130. //var a = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { }, HttpContext.RequestAborted);
  131. await _daySettingRepository.IsWorkDay(DateTime.Now);
  132. return OpenResponse.Ok(DateTime.Now.ToString("F"));
  133. }
  134. [HttpGet("pgsql")]
  135. public async Task<string> Pgsql()
  136. {
  137. var role = new Role
  138. {
  139. Name = $"test_role_{TimeOnly.FromDateTime(DateTime.Now)}",
  140. DisplayName = "test_role_display",
  141. ClientId = "test"
  142. };
  143. var roleId = await _roleRepository.AddAsync(role, HttpContext.RequestAborted);
  144. role.Description = "Description";
  145. await _roleRepository.UpdateAsync(role, HttpContext.RequestAborted);
  146. return roleId;
  147. }
  148. [AllowAnonymous]
  149. [HttpGet("roles")]
  150. public async Task<List<Role>> GetRoles()
  151. {
  152. using var lockManager = new LockManager(_distributedLock, $"{nameof(TestController)}.{nameof(GetRoles)}");
  153. lockManager.InvokeInLock(() => { Console.WriteLine("do something"); }, TimeSpan.FromSeconds(10));
  154. await lockManager.InvokeInLockAsync(
  155. d => _roleRepository.Queryable(includeDeleted: true).ToListAsync(),
  156. TimeSpan.FromSeconds(10),
  157. HttpContext.RequestAborted);
  158. var a = await _roleRepository.Queryable()
  159. //.Where(d => !d.IsDeleted)
  160. .ToListAsync();
  161. //var a = await db.Queryable<Role>().ToListAsync();
  162. var b = await _roleRepository.Queryable(includeDeleted: true).ToListAsync();
  163. return a;
  164. }
  165. //[AllowAnonymous]
  166. [HttpGet("hash")]
  167. public async Task Hash()
  168. {
  169. var s = _sessionContext;
  170. }
  171. /// <summary>
  172. /// signalR测试(method: Ring)
  173. /// </summary>
  174. /// <returns></returns>
  175. [HttpGet("ring")]
  176. public async Task RingTest()
  177. {
  178. await _realtimeService.RingAsync(_sessionContext.RequiredUserId,
  179. new RingDto { Id = new Guid().ToString(), From = _sessionContext.Phone ?? "未知号码", To = "12345" },
  180. HttpContext.RequestAborted);
  181. }
  182. /// <summary>
  183. /// signalR测试(method: Answered)
  184. /// </summary>
  185. /// <returns></returns>
  186. [HttpGet("answered")]
  187. public async Task AnsweredTest()
  188. {
  189. await _realtimeService.AnsweredAsync(_sessionContext.RequiredUserId,
  190. new AnsweredDto() { Id = new Guid().ToString(), From = _sessionContext.Phone ?? "未知号码", To = "12345" },
  191. HttpContext.RequestAborted);
  192. }
  193. /// <summary>
  194. /// signalR测试(method: Bye)
  195. /// </summary>
  196. /// <returns></returns>
  197. [HttpGet("bye")]
  198. public async Task ByeTest()
  199. {
  200. await _realtimeService.ByeAsync(_sessionContext.RequiredUserId, new ByeDto() { Id = new Guid().ToString() },
  201. HttpContext.RequestAborted);
  202. }
  203. /// <summary>
  204. ///
  205. /// </summary>
  206. /// <returns></returns>
  207. [AllowAnonymous]
  208. [HttpGet("t2")]
  209. public async Task GetVoiceEndAnswerAsyncTest()
  210. {
  211. //var answer = await _ivrDomainService.GetVoiceEndAnswerAsync("3", HttpContext.RequestAborted);
  212. //Console.WriteLine(answer.Content);
  213. throw new UserFriendlyException(2001, "test");
  214. }
  215. [AllowAnonymous]
  216. [HttpGet("wfdefine")]
  217. public async Task GetWorkflowDefine()
  218. {
  219. }
  220. [AllowAnonymous]
  221. [HttpPost("t3")]
  222. public Task<int> TestDaprPubsub(int data)
  223. {
  224. _logger.LogDebug("receive dapr event, params: {0}", data);
  225. return Task.FromResult(data);
  226. }
  227. [HttpGet("rsa")]
  228. public async Task<string> Rsa()
  229. {
  230. var keyList = RsaKeyGenerator.Pkcs1Key(2048, true);
  231. var privateKey = keyList[0];
  232. var publicKey = keyList[1];
  233. return $"{publicKey} \r\n {privateKey}";
  234. }
  235. }
  236. public class Test
  237. {
  238. [SugarColumn(ColumnName = "CallID")] public string CallId { get; set; }
  239. [SugarColumn(ColumnName = "IVR")] public string Ivr { get; set; }
  240. }