TestController.cs 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961
  1. using DotNetCore.CAP;
  2. using Hotline.Ai.Visit;
  3. using Hotline.Application.CallCenter;
  4. using Hotline.Application.ExportExcel;
  5. using Hotline.Application.FlowEngine;
  6. using Hotline.Application.JudicialManagement;
  7. using Hotline.Application.Orders;
  8. using Hotline.Application.Quality;
  9. using Hotline.Application.StatisticalReport;
  10. using Hotline.Authentications;
  11. using Hotline.Caching.Interfaces;
  12. using Hotline.CallCenter.BlackLists;
  13. using Hotline.CallCenter.Calls;
  14. using Hotline.CallCenter.Configs;
  15. using Hotline.CallCenter.Ivrs;
  16. using Hotline.CallCenter.Tels;
  17. using Hotline.Configurations;
  18. using Hotline.ContingencyManagement;
  19. using Hotline.FlowEngine;
  20. using Hotline.FlowEngine.Definitions;
  21. using Hotline.FlowEngine.Notifications;
  22. using Hotline.FlowEngine.WorkflowModules;
  23. using Hotline.FlowEngine.Workflows;
  24. using Hotline.Import;
  25. using Hotline.JudicialManagement;
  26. using Hotline.Orders;
  27. using Hotline.Realtimes;
  28. using Hotline.Repository.SqlSugar;
  29. using Hotline.Repository.SqlSugar.Ts;
  30. using Hotline.Settings;
  31. using Hotline.Settings.Hotspots;
  32. using Hotline.Settings.TimeLimitDomain;
  33. using Hotline.Settings.TimeLimits;
  34. using Hotline.Share.Dtos;
  35. using Hotline.Share.Dtos.FlowEngine;
  36. using Hotline.Share.Dtos.FlowEngine.Workflow;
  37. using Hotline.Share.Dtos.Order;
  38. using Hotline.Share.Dtos.Realtime;
  39. using Hotline.Share.Dtos.TrCallCenter;
  40. using Hotline.Share.Enums.FlowEngine;
  41. using Hotline.Share.Enums.JudicialManagement;
  42. using Hotline.Share.Enums.Order;
  43. using Hotline.Share.Enums.Quality;
  44. using Hotline.Users;
  45. using MapsterMapper;
  46. using MediatR;
  47. using Microsoft.AspNetCore.Authorization;
  48. using Microsoft.AspNetCore.Builder.Extensions;
  49. using Microsoft.AspNetCore.Mvc;
  50. using Microsoft.Extensions.Options;
  51. using MiniExcelLibs;
  52. using SqlSugar;
  53. using XC.RSAUtil;
  54. using XF.Domain.Authentications;
  55. using XF.Domain.Cache;
  56. using XF.Domain.Exceptions;
  57. using XF.Domain.Filters;
  58. using XF.Domain.Locks;
  59. using XF.Domain.Queues;
  60. using XF.Domain.Repository;
  61. using Order = Hotline.Orders.Order;
  62. namespace Hotline.Api.Controllers;
  63. /// <summary>
  64. ///
  65. /// </summary>
  66. //[AllowAnonymous]
  67. public class TestController : BaseController
  68. {
  69. private readonly ILogger<TestController> _logger;
  70. //private readonly IAuthorizeGenerator _authorizeGenerator;
  71. private readonly IOptionsSnapshot<CallCenterConfiguration> _options;
  72. private readonly ISessionContext _sessionContext;
  73. private readonly IRepository<User> _userRepository;
  74. private readonly ITypedCache<User> _cache;
  75. private readonly IRealtimeService _realtimeService;
  76. private readonly IBlacklistDomainService _blacklistDomainService;
  77. private readonly IIvrDomainService _ivrDomainService;
  78. private readonly ISugarUnitOfWork<HotlineDbContext> _uow;
  79. private readonly IRepository<Identity.Roles.Role> _roleRepository;
  80. private readonly IMediator _mediator;
  81. private readonly IDistributedLock _distributedLock;
  82. private readonly IRepository<OrderUrge> _orderUrgeRepository;
  83. private readonly IRepositoryTextSearch<OrderTs> _repositoryts;
  84. private readonly ITimeLimitDomainService _timeLimitDomainService;
  85. private readonly IWfModuleDomainService _wfModuleDomainService;
  86. private readonly IDaySettingRepository _daySettingRepository;
  87. //private readonly ITrClient _trClient;
  88. private readonly ICapPublisher _capPublisher;
  89. private readonly IQueue _queue;
  90. private readonly IExportApplication _exportApplication;
  91. private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
  92. private readonly IRepository<WorkflowStep> _workflowStepRepository;
  93. private readonly IWorkflowRepository _workflowRepository;
  94. //private readonly IRepository<WorkflowStepHandler> _workflowStepHandleRepository;
  95. private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
  96. private readonly IOrderRepository _orderRepository;
  97. private readonly IRepository<TrCallRecord> _trCallRecordRepository;
  98. private readonly IQualityApplication _qualityApplication;
  99. private readonly IEnforcementApplication _enforcementApplication;
  100. private readonly IWorkflowDomainService _workflowDomainService;
  101. private readonly IMapper _mapper;
  102. private readonly IOrderReportApplication _orderReportApplication;
  103. private readonly IRepository<EnforcementOrders> _enforcementOrdersRepository;
  104. private readonly IRepository<JudicialManagementOrders> _judicialManagementOrdersRepository;
  105. private readonly IRepository<EnforcementOrdersHandler> _enforcementOrdersHandlerRepository;
  106. private readonly IWorkflowApplication _workflowApplication;
  107. private readonly IRepository<ContingencyManagementHotspot> _contingencyManagementHotspotRepository;
  108. private readonly IRepository<Hotspot> _hotspotRepository;
  109. private readonly IOrderApplication _orderApplication;
  110. private readonly IRepository<Tel> _telRepository;
  111. private readonly IOrderDomainService _orderDomainService;
  112. private readonly ICallApplication _callApplication;
  113. private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
  114. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  115. //private readonly ITypedCache<List<User>> _cache;
  116. //private readonly ICacheManager<User> _cache;
  117. private readonly ICalcExpireTime _expireTime;
  118. public TestController(
  119. //INewRockClient client,
  120. ILogger<TestController> logger,
  121. //IAuthorizeGenerator authorizeGenerator,
  122. IOptionsSnapshot<CallCenterConfiguration> options,
  123. ISessionContext sessionContext,
  124. IRepository<User> userRepository,
  125. //ICacheManager<User> cache
  126. //ITypedCache<List<User>> cache
  127. ITypedCache<User> cache,
  128. IRealtimeService realtimeService,
  129. IBlacklistDomainService blacklistDomainService,
  130. IIvrDomainService ivrDomainService,
  131. ISugarUnitOfWork<HotlineDbContext> uow,
  132. IRepository<Identity.Roles.Role> roleRepository,
  133. IMediator mediator,
  134. IDistributedLock distributedLock,
  135. IRepository<OrderUrge> orderUrgeRepository,
  136. IRepositoryTextSearch<OrderTs> repositoryts,
  137. //ITimeLimitDomainService timeLimitDomainService,
  138. IWfModuleDomainService wfModuleDomainService,
  139. IDaySettingRepository daySettingRepository,
  140. //ITrClient trClient,
  141. ICapPublisher capPublisher,
  142. IQueue queue,
  143. IExportApplication exportApplication,
  144. IRepository<WorkflowTrace> workflowTraceRepository,
  145. IRepository<WorkflowStep> workflowStepRepository,
  146. IWorkflowRepository workflowRepository,
  147. //IRepository<WorkflowStepHandler> workflowStepHandleRepository,
  148. IRepository<SystemOrganize> systemOrganizeRepository,
  149. IOrderRepository orderRepository,
  150. IRepository<TrCallRecord> trCallRecordRepository,
  151. IQualityApplication qualityApplication,
  152. IEnforcementApplication enforcementApplication,
  153. IWorkflowDomainService workflowDomainService,
  154. IMapper mapper,
  155. IOrderApplication orderApplication,
  156. IRepository<Tel> telRepository,
  157. IOrderReportApplication orderReportApplication,
  158. IRepository<EnforcementOrders> enforcementOrdersRepository,
  159. IRepository<JudicialManagementOrders> judicialManagementOrdersRepository,
  160. IRepository<EnforcementOrdersHandler> enforcementOrdersHandlerRepository,
  161. IRepository<ContingencyManagementHotspot> contingencyManagementHotspotRepository,
  162. IRepository<Hotspot> hotspotRepository,
  163. IOrderDomainService orderDomainService,
  164. ICallApplication callApplication,
  165. IOptionsSnapshot<AppConfiguration> appOptions,
  166. ISystemSettingCacheManager systemSettingCacheManager
  167. )
  168. {
  169. _logger = logger;
  170. //_authorizeGenerator = authorizeGenerator;
  171. _options = options;
  172. _sessionContext = sessionContext;
  173. _userRepository = userRepository;
  174. _cache = cache;
  175. _realtimeService = realtimeService;
  176. _blacklistDomainService = blacklistDomainService;
  177. _ivrDomainService = ivrDomainService;
  178. _uow = uow;
  179. _roleRepository = roleRepository;
  180. _mediator = mediator;
  181. _distributedLock = distributedLock;
  182. _orderUrgeRepository = orderUrgeRepository;
  183. _repositoryts = repositoryts;
  184. //_timeLimitDomainService = timeLimitDomainService;
  185. _wfModuleDomainService = wfModuleDomainService;
  186. _daySettingRepository = daySettingRepository;
  187. //_trClient = trClient;
  188. _capPublisher = capPublisher;
  189. _queue = queue;
  190. _exportApplication = exportApplication;
  191. _workflowTraceRepository = workflowTraceRepository;
  192. _workflowStepRepository = workflowStepRepository;
  193. _workflowRepository = workflowRepository;
  194. //_workflowStepHandleRepository = workflowStepHandleRepository;
  195. _systemOrganizeRepository = systemOrganizeRepository;
  196. _orderRepository = orderRepository;
  197. _trCallRecordRepository = trCallRecordRepository;
  198. _qualityApplication = qualityApplication;
  199. _enforcementApplication = enforcementApplication;
  200. _workflowDomainService = workflowDomainService;
  201. _orderRepository = orderRepository;
  202. _mapper = mapper;
  203. _orderReportApplication = orderReportApplication;
  204. _enforcementOrdersRepository = enforcementOrdersRepository;
  205. _judicialManagementOrdersRepository = judicialManagementOrdersRepository;
  206. _enforcementOrdersHandlerRepository = enforcementOrdersHandlerRepository;
  207. _contingencyManagementHotspotRepository = contingencyManagementHotspotRepository;
  208. _hotspotRepository = hotspotRepository;
  209. _orderApplication = orderApplication;
  210. _telRepository = telRepository;
  211. _orderDomainService = orderDomainService;
  212. _callApplication = callApplication;
  213. _appOptions = appOptions;
  214. _systemSettingCacheManager = systemSettingCacheManager;
  215. }
  216. [HttpGet("time")]
  217. [AllowAnonymous]
  218. public async Task<OpenResponse> GetTime(string batchId, string taskId)
  219. {
  220. //await _repositoryts.AddVectorAsync("f595e730-909a-45e4-9138-a84bf15f4662", DateTime.Now,
  221. // new List<string> { "xx", "bb" }, HttpContext.RequestAborted);
  222. //await _repositoryts.AddVectorAsync("f595e730-909a-45e4-9138-a84bf15f4663", DateTime.Now,
  223. // new List<string> { "aa", "bb", "cc" }, HttpContext.RequestAborted);
  224. var result0 = await _repositoryts.SearchAsync(new List<string> { "xx", "aa" }, HttpContext.RequestAborted);
  225. var result = await _repositoryts.SearchAsync(new List<string> { "bb" }, HttpContext.RequestAborted);
  226. var result1 = await _repositoryts.SearchAsync(new List<string> { "cc", "bb" }, HttpContext.RequestAborted);
  227. var result2 = await _repositoryts.SearchAsync(new List<string> { "cc", "xx" }, HttpContext.RequestAborted);
  228. var result3 = await _repositoryts.SearchAsync(new List<string> { "aa", "bb", "ss" }, HttpContext.RequestAborted);
  229. //await _orderDomainService.SendOverTimeSms(HttpContext.RequestAborted);
  230. //await _repositoryts.UpdateVectorAsync("f595e730-909a-45e4-9138-a84bf15f4662",
  231. // new List<string> { "ss", "bb" }, HttpContext.RequestAborted);
  232. //_uow.Db.Ado.SqlQueryAsync<OrderUrge>("SELECT to_tsvector('fat cats ate fat rats') @@ to_tsquery('fat & rat')")
  233. //var tests = _uowWex.Db.Ado.SqlQuery<Test>("select * from view_telinfo_full where IsSynch=@IsSynch", new { IsSynch = 0 });
  234. //var a = _uowWex.Db.Ado.ExecuteCommand("update telinfo set IsSynch=1 where GUID=@CallId", new { CallId = "b1f97f3c-88b6-4f42-b8de-83ed448854b0" });
  235. //var rsp = await _wexClient.QueryTelsAsync(new QueryTelRequest { }, HttpContext.RequestAborted);
  236. //int a = _timeLimitDomainService.CalcWorkTime(DateTime.Now, DateTime.Parse("2023-09-11 16:21:00"));
  237. //int m = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2023-09-19 12:00:00"), DateTime.Parse("2023-09-20 18:00:00"), false);
  238. //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-6-06 14:32:47"),"40");
  239. //var r = _timeLimitDomainService.CalcExpiredTime(DateTime.Parse("2024-02-29 10:12:33"), Share.Enums.FlowEngine.EFlowDirection.OrgToCenter, "10");
  240. //await _wfModuleDomainService.PersistenceModulesAsync(HttpContext.RequestAborted);
  241. //var rsp = await _daprClient.InvokeMethodAsync<ApiResponse<string>>(HttpMethod.Get, "identity", "api/v1/Test/time", HttpContext.RequestAborted);
  242. //var rsp1 = await _daprClient.InvokeMethodAsync<int, ApiResponse<string>>(HttpMethod.Post, "identity", "api/v1/Test/time1", 222, HttpContext.RequestAborted);
  243. //var a = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { }, HttpContext.RequestAborted);
  244. //await _daySettingRepository.IsWorkDay(DateTime.Now);
  245. //var r = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2024-6-06 14:32:47"), DateTime.Parse("2024-3-22 06:00:00"), false);
  246. //var r = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2024-3-24 17:20:00"), DateTime.Parse("2024-3-24 17:21:00"), false);
  247. //await _aiVisitService.QueryAiVisitTask(batchId, taskId, HttpContext.RequestAborted);
  248. //var r = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
  249. //var r = _timeLimitDomainService.CalcWorkTimeToDecimal(DateTime.Parse("2024-07-09 14:57:51"), DateTime.Parse("2024-07-10 14:20:42"), false);
  250. //var endTime = _timeLimitDomainService
  251. //.CalcEndTime(DateTime.Parse("2024-07-09 14:57:51"), ETimeType.WorkDay, -3, 0, 0);///.EndTime;
  252. //var timeResult = _timeLimitDomainService.CalcEndTime(DateTime.Now, ETimeType.WorkDay, 3, 80, 50);
  253. //var t = _timeLimitDomainService.CalcWorkTimeEx(DateTime.Parse("2024-07-22 11:30:00"), DateTime.Parse("2024-07-23 14:00:00"), false);
  254. //var r = await _aiVisitService.QueryAiVisitTaskEx("MTAwMDAx173ASS0kSUAqK2rl2sFGME", "", HttpContext.RequestAborted);
  255. //var r = await _aiVisitService.QueryAiVisitTaskResult(batchId, DateTime.Parse("2024-07-28"), DateTime.Parse("2024-08-01"), HttpContext.RequestAborted);
  256. //var r = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToCenter, batchId);
  257. return OpenResponse.Ok(DateTime.Now.ToString("F"));
  258. }
  259. /// <summary>
  260. /// 推送回访到省上
  261. /// </summary>
  262. /// <returns></returns>
  263. [HttpPost("publishVisitToProvince")]
  264. [AllowAnonymous]
  265. public async Task PublsihVisitToProvince([FromBody] DateTime date)
  266. {
  267. //查询需要推送的数据
  268. var list = await _orderRepository.Queryable()
  269. .Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).ToList())
  270. .Where(x => x.CreationTime.Date == date.Date && x.Status == EOrderStatus.Visited && x.ProcessType == EProcessType.Zhiban && x.CounterSignType == null).ToListAsync();
  271. foreach (var item in list)
  272. {
  273. var visit = item.OrderVisits.FirstOrDefault();
  274. if (visit != null)
  275. {
  276. //推省上
  277. await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
  278. new PublishVisitDto()
  279. {
  280. Order = _mapper.Map<OrderDto>(item),
  281. No = visit.No,
  282. VisitType = visit.VisitType,
  283. VisitName = visit.CreatorName,
  284. VisitTime = visit.VisitTime,
  285. VisitRemark = "满意",
  286. AreaCode = item.AreaCode!,
  287. SubjectResultSatifyCode = "4",
  288. FirstSatisfactionCode = "4",
  289. ClientGuid = ""
  290. }, cancellationToken: HttpContext.RequestAborted);
  291. }
  292. }
  293. }
  294. [HttpGet("addcontingencymanagementhotspot")]
  295. [AllowAnonymous]
  296. public async Task AddContingencyManagementHotspot([FromQuery] string? Id, string? ParentId)
  297. {
  298. if (!string.IsNullOrWhiteSpace(Id))
  299. {
  300. var data = await _hotspotRepository.GetAsync(Id, HttpContext.RequestAborted);
  301. if (data != null)
  302. {
  303. var newdata = _mapper.Map<ContingencyManagementHotspot>(data);
  304. newdata.Id = data.Id;
  305. await _contingencyManagementHotspotRepository.AddAsync(newdata, HttpContext.RequestAborted);
  306. }
  307. }
  308. if (!string.IsNullOrEmpty(ParentId))
  309. {
  310. var data = await _hotspotRepository.Queryable().Where(p => p.ParentId == ParentId).ToListAsync();
  311. if (data != null && data.Count > 0)
  312. {
  313. foreach (var item in data)
  314. {
  315. var newdata = _mapper.Map<ContingencyManagementHotspot>(item);
  316. newdata.Id = item.Id;
  317. await _contingencyManagementHotspotRepository.AddAsync(newdata, HttpContext.RequestAborted);
  318. }
  319. }
  320. }
  321. }
  322. /// <summary>
  323. /// 处理司法工单数据
  324. /// </summary>
  325. /// <param name="StartTime"></param>
  326. /// <param name="EndTime"></param>
  327. /// <returns></returns>
  328. [HttpGet("addjudicial_management_orders")]
  329. [AllowAnonymous]
  330. public async Task AddJudicialManagementOrders(DateTime StartTime, DateTime? EndTime)
  331. {
  332. var list = await _enforcementOrdersRepository.Queryable()
  333. .Includes(x => x.Order)
  334. .Where(x => x.CreationTime >= StartTime && x.CreationTime <= EndTime && x.Order.AcceptTypeCode == "35")
  335. .ToListAsync();
  336. foreach (var item in list)
  337. {
  338. var order = item.Order;
  339. if (order != null)
  340. {
  341. var orderData = await _judicialManagementOrdersRepository.GetAsync(p => p.Id == order.Id, HttpContext.RequestAborted);
  342. if (orderData == null)
  343. {
  344. orderData = new JudicialManagementOrders();
  345. //处理工单
  346. _mapper.Map(order, orderData);
  347. orderData.Id = order.Id;
  348. orderData.IsEnforcementOrder = order.IsEnforcementOrder.HasValue ? order.IsEnforcementOrder.Value : false;
  349. orderData.IsTheClueTrue = item.IsTheClueTrue;
  350. orderData.IsPassTheBuckOrder = item.IsPassTheBuckOrder;
  351. orderData.OrderSoure = EOrderSoure.Hotline;
  352. orderData.CreationTime = item.CreationTime;
  353. if (item.EventTypeId == "04" || item.EventTypeId == "05" || item.EventTypeId == "06" || item.EventTypeId == "07" || item.EventTypeId == "08" ||
  354. item.EventTypeId == "0401" || item.EventTypeId == "0501" || item.EventTypeId == "0601" || item.EventTypeId == "0701" || item.EventTypeId == "0801")
  355. {
  356. orderData.EventTypeId = "0901";
  357. orderData.EventTypeName = "其他情形";
  358. orderData.EventTypeSpliceName = "其他类-其他情形";
  359. orderData.EventTypeOneLevelId = "09";
  360. }
  361. else
  362. {
  363. orderData.EventTypeId = item.EventTypeId;
  364. orderData.EventTypeName = item.EventTypeName;
  365. orderData.EventTypeSpliceName = item.EventTypeSpliceName;
  366. orderData.EventTypeOneLevelId = item.EventTypeOneLevelId;
  367. }
  368. List<Kv> kvs = new List<Kv>
  369. {
  370. new Kv { Key = order.OrgLevelOneName, Value = order.OrgLevelOneCode }
  371. };
  372. orderData.EnforcementOrdersHandler = kvs;
  373. await _judicialManagementOrdersRepository.AddAsync(orderData, HttpContext.RequestAborted);
  374. //处理部门
  375. EnforcementOrdersHandler enforcementOrdersHandler = new EnforcementOrdersHandler()
  376. {
  377. OrderId = order.Id,
  378. OrderNo = order.No,
  379. OrderSoure = EOrderSoure.Hotline,
  380. OrgCode = order.OrgLevelOneCode,
  381. OrgName = order.OrgLevelOneName,
  382. CreationTime = order.CreationTime
  383. };
  384. await _enforcementOrdersHandlerRepository.AddAsync(enforcementOrdersHandler, HttpContext.RequestAborted);
  385. }
  386. }
  387. }
  388. }
  389. /// <summary>
  390. /// 计算工单的办理时长
  391. /// </summary>
  392. /// <param name="StartTime"></param>
  393. /// <param name="EndTime"></param>
  394. /// <returns></returns>
  395. [HttpGet("update_order_handle_time")]
  396. [AllowAnonymous]
  397. public async Task UpdateOrderHandleTime(DateTime StartTime, DateTime? EndTime)
  398. {
  399. var list = await _orderRepository.Queryable()
  400. .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime && p.Status >= EOrderStatus.Filed)
  401. .Where(p => p.CreationTimeHandleDuration == null || p.CenterToOrgHandleDuration == null)
  402. .ToListAsync();
  403. if (list.Any())
  404. {
  405. foreach (var item in list)
  406. {
  407. var creationTimeHandleDurationWorkday = item.FiledTime.HasValue
  408. ?
  409. //_timeLimitDomainService.CalcWorkTimeEx(
  410. await _expireTime.CalcWorkTimeEx(
  411. item.CreationTime, item.FiledTime.Value,
  412. item.ProcessType is EProcessType.Zhiban)
  413. : 0;
  414. var centerToOrgHandleDurationWorkday = item.FiledTime.HasValue && item.CenterToOrgTime.HasValue
  415. ?
  416. //_timeLimitDomainService.CalcWorkTimeEx(
  417. await _expireTime.CalcWorkTimeEx(
  418. item.CenterToOrgTime.Value, item.FiledTime.Value,
  419. item.ProcessType is EProcessType.Zhiban)
  420. : 0;
  421. item.CreationTimeHandleDurationWorkday = creationTimeHandleDurationWorkday;
  422. item.CenterToOrgHandleDurationWorkday = centerToOrgHandleDurationWorkday;
  423. if (item.FiledTime.HasValue)
  424. {
  425. var count = Math.Round((item.FiledTime - item.CreationTime).Value.TotalSeconds);
  426. item.CreationTimeHandleDuration = count <= 0 ? 1 : count;
  427. }
  428. else
  429. item.CreationTimeHandleDuration = 0;
  430. if (item.FiledTime.HasValue && item.CenterToOrgTime.HasValue)
  431. {
  432. var count = Math.Round((item.FiledTime - item.CenterToOrgTime).Value.TotalSeconds);
  433. item.CenterToOrgHandleDuration = count <= 0 ? 1 : count;
  434. }
  435. else
  436. item.CenterToOrgHandleDuration = 0;
  437. await _orderRepository.UpdateAsync(item, HttpContext.RequestAborted);
  438. }
  439. }
  440. }
  441. [HttpGet("testo")]
  442. [AllowAnonymous]
  443. public async Task<OpenResponse> TestOrigin()
  444. {
  445. var now = DateTime.Now.ToString();
  446. return OpenResponse.Ok(now);
  447. }
  448. [HttpGet("init-orgname")]
  449. [AllowAnonymous]
  450. public async Task InitUserOrgFullName()
  451. {
  452. var list = await _userRepository.Queryable().Where(x => 1 == 1 && string.IsNullOrEmpty(x.FullOrgName)).ToListAsync();
  453. foreach (var item in list)
  454. {
  455. var orgFullName = "";
  456. var orgFullCode = "";
  457. var orgId = item.OrgId;
  458. int strLength = orgId.Length;
  459. int segmentsCount = strLength / 3;
  460. List<string> strings = new List<string>();
  461. for (int i = 0; i < segmentsCount; i++)
  462. {
  463. int startIndex = i * 3;
  464. int length = Math.Min(3, strLength - startIndex);
  465. strings.Add(orgId.Substring(startIndex, length));
  466. }
  467. if (strLength > 3)
  468. {
  469. orgFullCode = strings[0];
  470. strings.Remove(orgFullCode);
  471. }
  472. foreach (var str in strings)
  473. {
  474. orgFullCode = orgFullCode + str;
  475. var org = await _systemOrganizeRepository.GetAsync(orgFullCode);
  476. if (org != null)
  477. {
  478. orgFullName = orgFullName + org.Name + "/";
  479. }
  480. }
  481. if (orgFullName.Length > 0)
  482. {
  483. orgFullName = orgFullName.Remove(orgFullName.Length - 1);
  484. }
  485. item.FullOrgName = orgFullName;
  486. await _userRepository.UpdateAsync(item);
  487. }
  488. }
  489. [HttpPost("import")]
  490. [AllowAnonymous]
  491. public async Task<List<ExcelContent>> Import(IFormFile file)
  492. {
  493. //var FileName = file.FileName;
  494. //var fileExtension = Path.GetExtension(FileName);
  495. ////新文件名
  496. //var newFileName = DateTime.Now.ToString("yyyyMMddhhmmss");
  497. ////文件保存路径
  498. //var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Upload", newFileName);
  499. ////判断路径是否存在
  500. //if (!Directory.Exists(filePath))
  501. //{
  502. // //创建路径
  503. // Directory.CreateDirectory(filePath);
  504. //}
  505. //filePath = Path.Combine(filePath, newFileName+ fileExtension);
  506. using (var stream = new MemoryStream())
  507. {
  508. file.CopyTo(stream);
  509. var list = MiniExcel.Query<ExcelContent>(stream).ToList();
  510. //Directory.Delete(filePath, true);
  511. return list;
  512. }
  513. }
  514. [AllowAnonymous]
  515. [HttpGet("export")]
  516. public async Task<object> Export()
  517. {
  518. List<ExcelContent> list = new List<ExcelContent>();
  519. ExcelContent excelContent = new ExcelContent() { ExternalId = "123123" };
  520. list.Add(excelContent);
  521. return _exportApplication.ExportData<ExcelContent>(list, "demo.xlsx");
  522. }
  523. [HttpGet("pgsql")]
  524. public async Task<string> Pgsql()
  525. {
  526. var role = new Identity.Roles.Role
  527. {
  528. Name = $"test_role_{TimeOnly.FromDateTime(DateTime.Now)}",
  529. DisplayName = "test_role_display",
  530. ClientId = "test"
  531. };
  532. var roleId = await _roleRepository.AddAsync(role, HttpContext.RequestAborted);
  533. role.Description = "Description";
  534. await _roleRepository.UpdateAsync(role, HttpContext.RequestAborted);
  535. return roleId;
  536. }
  537. [AllowAnonymous]
  538. [HttpGet("roles")]
  539. public async Task<List<Identity.Roles.Role>> GetRoles()
  540. {
  541. using var lockManager = new LockManager(_distributedLock, $"{nameof(TestController)}.{nameof(GetRoles)}");
  542. lockManager.InvokeInLock(() => { Console.WriteLine("do something"); }, TimeSpan.FromSeconds(10));
  543. await lockManager.InvokeInLockAsync(
  544. d => _roleRepository.Queryable(includeDeleted: true).ToListAsync(),
  545. TimeSpan.FromSeconds(10),
  546. HttpContext.RequestAborted);
  547. var a = await _roleRepository.Queryable()
  548. //.Where(d => !d.IsDeleted)
  549. .ToListAsync();
  550. //var a = await db.Queryable<Role>().ToListAsync();
  551. var b = await _roleRepository.Queryable(includeDeleted: true).ToListAsync();
  552. return a;
  553. }
  554. //[AllowAnonymous]
  555. [HttpGet("hash")]
  556. public async Task Hash()
  557. {
  558. var s = _sessionContext;
  559. }
  560. /// <summary>
  561. /// signalR测试(method: Ring)
  562. /// </summary>
  563. /// <returns></returns>
  564. [HttpGet("ring")]
  565. public async Task RingTest()
  566. {
  567. await _realtimeService.RingAsync(_sessionContext.RequiredUserId,
  568. new RingDto { Id = new Guid().ToString(), From = _sessionContext.Phone ?? "未知号码", To = "12345" },
  569. HttpContext.RequestAborted);
  570. }
  571. /// <summary>
  572. /// signalR测试(method: Answered)
  573. /// </summary>
  574. /// <returns></returns>
  575. [HttpGet("answered")]
  576. public async Task AnsweredTest()
  577. {
  578. await _realtimeService.AnsweredAsync(_sessionContext.RequiredUserId,
  579. new AnsweredDto() { Id = new Guid().ToString(), From = _sessionContext.Phone ?? "未知号码", To = "12345" },
  580. HttpContext.RequestAborted);
  581. }
  582. /// <summary>
  583. /// signalR测试(method: Bye)
  584. /// </summary>
  585. /// <returns></returns>
  586. [HttpGet("bye")]
  587. public async Task ByeTest()
  588. {
  589. await _realtimeService.ByeAsync(_sessionContext.RequiredUserId, new ByeDto() { Id = new Guid().ToString() },
  590. HttpContext.RequestAborted);
  591. }
  592. [AllowAnonymous]
  593. [HttpGet("t2")]
  594. public async Task<string> GetCacheAllowAnonymous()
  595. {
  596. var systemAdministrator = _systemSettingCacheManager.GetSetting(SettingConstants.SystemAdministrator)?.SettingValue[0];
  597. return systemAdministrator;
  598. }
  599. [HttpGet("t3")]
  600. public async Task<string> GetCacheWithAuth()
  601. {
  602. var systemAdministrator = _systemSettingCacheManager.GetSetting(SettingConstants.SystemAdministrator)?.SettingValue[0];
  603. return systemAdministrator;
  604. }
  605. [HttpGet("t4")]
  606. public async Task<string> Test4()
  607. {
  608. return DateTime.Now.ToString("O");
  609. }
  610. [AllowAnonymous]
  611. [HttpGet("t5")]
  612. public async Task<string> GetUserAllowAnonymous()
  613. {
  614. var users = await _userRepository.Queryable()
  615. .FirstAsync(d => d.Name == "xf", HttpContext.RequestAborted);
  616. return users.Id;
  617. }
  618. [HttpGet("t6")]
  619. public async Task<string> GetUserWithAuth()
  620. {
  621. var users = await _userRepository.Queryable()
  622. .FirstAsync(d => d.Name == "xf", HttpContext.RequestAborted);
  623. return users.Id;
  624. }
  625. [HttpGet("rsa")]
  626. public async Task<string> Rsa()
  627. {
  628. var keyList = RsaKeyGenerator.Pkcs1Key(2048, true);
  629. var privateKey = keyList[0];
  630. var publicKey = keyList[1];
  631. return $"{publicKey} \r\n {privateKey}";
  632. }
  633. [AllowAnonymous]
  634. [HttpGet("republish")]
  635. public async Task Republish()
  636. {
  637. var provinceNos = new List<string>
  638. {
  639. "RGDH9951150024082950312",
  640. "RGDH9951150024080750198",
  641. "RGDH9951150024083050009",
  642. "RGDH9951150024083150167",
  643. "RGDH9951150024083150102",
  644. "RGDH9951150024083050052",
  645. "RGDH9951150024080750184",
  646. "RGDH9951150024083050108",
  647. "RGDH9951150024083050314",
  648. "RGDH9951150024083050363",
  649. "RGDH9951150024083150243",
  650. "RGDH9951150024082850303",
  651. "QT9951150024082150023",
  652. "RGDH9951150024080750185",
  653. "RGDH9951150024083150065",
  654. "RGDH9951150024082850032",
  655. "RGDH9951150024082950295",
  656. "RGDH9951150024080750189",
  657. "RGDH9951150024082650189",
  658. "RGDH9951150024083050008",
  659. "RGDH9951150024082950036",
  660. "RGDH9951150024082850341",
  661. "RGDH9951150024080750215",
  662. "RGDH9951150024081450005",
  663. "RGDH9951150024080750212",
  664. "RGDH9951150024083050137",
  665. "RGDH9951150024082450124",
  666. "RGDH9951150024083150188",
  667. "RGDH9951150024083150083",
  668. "RGDH9951150024082850082",
  669. "RGDH9951150024080750174",
  670. "RGDH9951150024082950371",
  671. "RGDH9951150024082950114",
  672. "RGDH9951150024083050339",
  673. "RGDH9951150024080750217",
  674. "RGDH9951150024082950040",
  675. "RGDH9951150024083050031",
  676. "RGDH9951150024083150267",
  677. "RGDH9951150024083050064",
  678. "RGDH9951150024072650086",
  679. "RGDH9951150024082950360",
  680. "RGDH9951150024080750195",
  681. "RGDH9951150024080750210",
  682. "RGDH9951150024082950250",
  683. "RGDH9951150024083050145",
  684. "RGDH9951150024083050356",
  685. "RGDH9951150024080750194",
  686. "RGDH9951150024080750173",
  687. "RGDH9951150024080750213",
  688. "RGDH9951150024080750218",
  689. "RGDH9951150024083150271",
  690. "RGDH9951150024083150134",
  691. "RGDH9951150024080750179",
  692. "RGDH9951150024083050140",
  693. "RGDH9951150024083150262",
  694. "RGDH9951150024083050119",
  695. "RGDH9951150024083150177",
  696. "RGDH9951150024083050146",
  697. "RGDH9951150024080750223",
  698. "RGDH9951150024080750221",
  699. "RGDH9951150024083150130",
  700. "RGDH9951150024080750209",
  701. "RGDH9951150024083150237",
  702. "RGDH9951150024082850095",
  703. "RGDH9951150024082850223",
  704. "RGDH9951150024083050077",
  705. "RGDH9951150024082950118",
  706. "RGDH9951150024082850056",
  707. "RGDH9951150024082550177",
  708. "RGDH9951150024083050358",
  709. "RGDH9951150024080750193",
  710. "RGDH9951150024082150011",
  711. "RGDH9951150024082950167",
  712. "RGDH9951150024083050201",
  713. "RGDH9951150024082850048",
  714. "RGDH9951150024083150161",
  715. "RGDH9951150024083050300",
  716. "RGDH9951150024083150016",
  717. "RGDH9951150024083150101",
  718. "RGDH9951150024082850207",
  719. "RGDH9951150024083150144",
  720. "RGDH9951150024082750300",
  721. "RGDH9951150024083050230",
  722. "RGDH9951150024080750211",
  723. "RGDH9951150024082750379",
  724. "RGDH9951150024082850252",
  725. "RGDH9951150024083050204",
  726. "RGDH9951150024080750176",
  727. "RGDH9951150024080750190",
  728. "RGDH9951150024083150027",
  729. "RGDH9951150024082850308",
  730. "RGDH9951150024082850070",
  731. "RGDH9951150024082950068",
  732. "RGDH9951150024083050002",
  733. "RGDH9951150024083050130",
  734. "RGDH9951150024083050060",
  735. "RGDH9951150024082950282",
  736. "RGDH9951150024082950320",
  737. "RGDH9951150024082850312",
  738. "RGDH9951150024083150040",
  739. "RGDH9951150024080750202",
  740. "RGDH9951150024083150216",
  741. "RGDH9951150024082750156",
  742. "RGDH9951150024082850224",
  743. "RGDH9951150024083150238",
  744. "RGDH9951150024083050327",
  745. "RGDH9951150024082950090",
  746. "RGDH9951150024083150131",
  747. "RGDH9951150024080750187",
  748. "RGDH9951150024082350072",
  749. "RGDH9951150024080750177",
  750. "RGDH9951150024082950010",
  751. "RGDH9951150024082850263",
  752. "RGDH9951150024082850087",
  753. "RGDH9951150024083050234",
  754. "RGDH9951150024083150098",
  755. "RGDH9951150024083050166",
  756. "RGDH9951150024082850339",
  757. "RGDH9951150024083150157",
  758. "RGDH9951150024080150214",
  759. "RGDH9951150024083150149",
  760. "RGDH9951150024083150264",
  761. "RGDH9951150024080750200",
  762. "RGDH9951150024083150116",
  763. "RGDH9951150024082950188",
  764. "RGDH9951150024083050148",
  765. "RGDH9951150024082750338",
  766. "RGDH9951150024082950268",
  767. "RGDH9951150024083050337",
  768. "RGDH9951150024082250263",
  769. "RGDH9951150024080750196",
  770. "RGDH9951150024080750192",
  771. "RGDH9951150024082850272",
  772. "RGDH9951150024082650290",
  773. "RGDH9951150024083150117",
  774. "RGDH9951150024080750207",
  775. "RGDH9951150024080750201",
  776. "RGDH9951150024080750188",
  777. "RGDH9951150024083050011",
  778. "RGDH9951150024083050067",
  779. "RGDH9951150024083050193",
  780. "RGDH9951150024082850242",
  781. "RGDH9951150024082950121",
  782. "RGDH9951150024080750222",
  783. "RGDH9951150024082950280",
  784. "RGDH9951150024080750205",
  785. "RGDH9951150024083050334",
  786. "RGDH9951150024083150235",
  787. "RGDH9951150024082950156",
  788. "RGDH9951150024080750220",
  789. "RGDH9951150024082750209",
  790. "RGDH9951150024083150046",
  791. "RGDH9951150024080750214",
  792. "RGDH9951150024082850116",
  793. "RGDH9951150024083050082",
  794. "RGDH9951150024083150118",
  795. "RGDH9951150024082950338",
  796. "RGDH9951150024082950359",
  797. "RGDH9951150024083150156",
  798. "RGDH9951150024083150072",
  799. "RGDH9951150024082150001",
  800. "RGDH9951150024082850186",
  801. "RGDH9951150024082750377",
  802. "RGDH9951150024083150166",
  803. "RGDH9951150024083050255",
  804. "RGDH9951150024083050190",
  805. "RGDH9951150024080750175",
  806. "RGDH9951150024083050184",
  807. "RGDH9951150024083050021",
  808. "RGDH9951150024082850317",
  809. "RGDH9951150024082950146",
  810. "RGDH9951150024083150172",
  811. "RGDH9951150024083050354",
  812. "RGDH9951150024082850305",
  813. "RGDH9951150024082850351",
  814. "RGDH9951150024082950340",
  815. "RGDH9951150024083150273",
  816. "RGDH9951150024080750208",
  817. "RGDH9951150024083150053",
  818. "RGDH9951150024082850291",
  819. "RGDH9951150024082950104",
  820. "RGDH9951150024082850247",
  821. "RGDH9951150024082850320",
  822. "RGDH9951150024083050285",
  823. "RGDH9951150024082850011",
  824. "RGDH9951150024083050174",
  825. "RGDH9951150024083150212",
  826. "RGDH9951150024083050323",
  827. "RGDH9951150024080750224",
  828. "RGDH9951150024083150244",
  829. "RGDH9951150024080750199",
  830. "RGDH9951150024082850269",
  831. "RGDH9951150024082850053",
  832. "RGDH9951150024082950342",
  833. "RGDH9951150024082950046",
  834. "RGDH9951150024082950194"
  835. };
  836. _logger.LogWarning($"推送数据共:{provinceNos.Count}");
  837. var unpublishOrders = await _orderRepository.Queryable()
  838. .Where(d => provinceNos.Contains(d.ProvinceNo) &&
  839. !string.IsNullOrEmpty(d.ProvinceNo) &&
  840. d.Status >= EOrderStatus.Filed)
  841. .ToListAsync(HttpContext.RequestAborted);
  842. _logger.LogWarning($"准备开始推送:{unpublishOrders.Count}");
  843. foreach (var order in unpublishOrders)
  844. {
  845. var trace = await _workflowTraceRepository.Queryable()
  846. .FirstAsync(d => d.WorkflowId == order.WorkflowId && d.StepType == EStepType.End,
  847. HttpContext.RequestAborted);
  848. var orderFlowDto = new OrderFlowDto
  849. {
  850. Order = _mapper.Map<OrderDto>(order),
  851. WorkflowTrace = _mapper.Map<WorkflowTraceDto>(trace)
  852. };
  853. if (order.SourceChannelCode == AppDefaults.SourceChannel.DianHua &&
  854. !string.IsNullOrEmpty(order.CallId))
  855. {
  856. if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
  857. {
  858. var callRecord = await _callApplication.GetTianrunCallAsync(order.CallId, HttpContext.RequestAborted);
  859. if (callRecord != null)
  860. {
  861. orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);
  862. }
  863. }
  864. else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang)
  865. {
  866. var call = await _callApplication.GetCallAsync(order.CallId, HttpContext.RequestAborted);
  867. if (call is not null)
  868. orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(call);
  869. }
  870. }
  871. //这里需要判断是否是警情退回
  872. orderFlowDto.IsNonPoliceReturn = false;
  873. await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: HttpContext.RequestAborted);
  874. _logger.LogWarning($"推送完成: {order.ProvinceNo}");
  875. }
  876. _logger.LogWarning($"推送完成");
  877. }
  878. }