using System.Collections.Concurrent;
using System.Data;
using System.IO;
using System.Threading;
using DotNetCore.CAP;
using Fw.Utility.Client;
using Google.Protobuf.WellKnownTypes;
using Hotline.Ai.Visit;
using Hotline.Application.ExportExcel;
using Hotline.Application.JudicialManagement;
using Hotline.Application.Quality;
using Hotline.CallCenter.BlackLists;
using Hotline.CallCenter.Calls;
using Hotline.CallCenter.Devices;
using Hotline.CallCenter.Ivrs;
using Hotline.FlowEngine.WorkflowModules;
using Hotline.FlowEngine.Workflows;
using Hotline.Identity.Roles;
using Hotline.Import;
using Hotline.Orders;
using Hotline.Push.Notifies;
using Hotline.Realtimes;
using Hotline.Repository.SqlSugar;
using Hotline.Repository.SqlSugar.CallCenter;
using Hotline.Repository.SqlSugar.System;
using Hotline.Repository.SqlSugar.Ts;
using Hotline.Settings;
using Hotline.Settings.TimeLimits;
using Hotline.Share.Dtos;
using Hotline.Share.Dtos.FlowEngine;
using Hotline.Share.Dtos.FlowEngine.Workflow;
using Hotline.Share.Dtos.Order;
using Hotline.Share.Dtos.Realtime;
using Hotline.Share.Dtos.SendSms;
using Hotline.Share.Dtos.TrCallCenter;
using Hotline.Share.Enums.FlowEngine;
using Hotline.Share.Enums.Order;
using Hotline.Share.Enums.Push;
using Hotline.Share.Enums.Quality;
using Hotline.Share.Enums.Settings;
using Hotline.Share.Mq;
using Hotline.Tools;
using Hotline.Users;
using MapsterMapper;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing.Template;
using Microsoft.Extensions.Options;
using MiniExcelLibs;
using NewRock.Sdk;
using NewRock.Sdk.Security;
using SqlSugar;
using SqlSugar.SplitTableExtensions;
using StackExchange.Redis;
using Tr.Sdk;
using XC.RSAUtil;
using XF.Domain.Authentications;
using XF.Domain.Cache;
using XF.Domain.Entities;
using XF.Domain.Exceptions;
using XF.Domain.Filters;
using XF.Domain.Locks;
using XF.Domain.Queues;
using XF.Domain.Repository;
using XF.EasyCaching;
using Order = Hotline.Orders.Order;
namespace Hotline.Api.Controllers;
///
///
///
[AllowAnonymous]
public class TestController : BaseController
{
private readonly ILogger _logger;
private readonly IAuthorizeGenerator _authorizeGenerator;
private readonly IOptionsSnapshot _options;
private readonly ISessionContext _sessionContext;
private readonly IRepository _userRepository;
private readonly ITypedCache _cache;
private readonly IRealtimeService _realtimeService;
private readonly IBlacklistDomainService _blacklistDomainService;
private readonly IIvrDomainService _ivrDomainService;
private readonly ISugarUnitOfWork _uow;
private readonly IRepository _roleRepository;
private readonly IMediator _mediator;
private readonly IDistributedLock _distributedLock;
private readonly IRepository _orderUrgeRepository;
private readonly IRepositoryTextSearch _repositoryts;
private readonly ITimeLimitDomainService _timeLimitDomainService;
private readonly IWfModuleDomainService _wfModuleDomainService;
private readonly IDaySettingRepository _daySettingRepository;
private readonly ITrClient _trClient;
private readonly ICapPublisher _capPublisher;
private readonly IQueue _queue;
private readonly IExportApplication _exportApplication;
private readonly IAiVisitService _aiVisitService;
private readonly IRepository _workflowTraceRepository;
private readonly IRepository _workflowStepRepository;
private readonly IWorkflowRepository _workflowRepository;
//private readonly IRepository _workflowStepHandleRepository;
private readonly IRepository _systemOrganizeRepository;
private readonly IOrderRepository _orderRepository;
private readonly IRepository _trCallRecordRepository;
private readonly IQualityApplication _qualityApplication;
private readonly IEnforcementApplication _enforcementApplication;
private readonly IMapper _mapper;
private readonly IOptionsSnapshot _sendSmsConfiguration;
//private readonly ITypedCache> _cache;
//private readonly ICacheManager _cache;
public TestController(
INewRockClient client,
ILogger logger,
IAuthorizeGenerator authorizeGenerator,
IOptionsSnapshot options,
ISessionContext sessionContext,
IRepository userRepository,
//ICacheManager cache
//ITypedCache> cache
ITypedCache cache,
IRealtimeService realtimeService,
IBlacklistDomainService blacklistDomainService,
IIvrDomainService ivrDomainService,
ISugarUnitOfWork uow,
IRepository roleRepository,
IMediator mediator,
IDistributedLock distributedLock,
IRepository orderUrgeRepository,
IRepositoryTextSearch repositoryts,
ITimeLimitDomainService timeLimitDomainService,
IWfModuleDomainService wfModuleDomainService,
IDaySettingRepository daySettingRepository,
ITrClient trClient,
ICapPublisher capPublisher,
IQueue queue,
IExportApplication exportApplication,
IAiVisitService aiVisitService,
IRepository workflowTraceRepository,
IRepository workflowStepRepository,
IWorkflowRepository workflowRepository,
//IRepository workflowStepHandleRepository,
IRepository systemOrganizeRepository,
IOrderRepository orderRepository,
IRepository trCallRecordRepository,
IQualityApplication qualityApplication,
IEnforcementApplication enforcementApplication,
IMapper mapper,
IOptionsSnapshot sendSmsConfiguration
)
{
_logger = logger;
_authorizeGenerator = authorizeGenerator;
_options = options;
_sessionContext = sessionContext;
_userRepository = userRepository;
_cache = cache;
_realtimeService = realtimeService;
_blacklistDomainService = blacklistDomainService;
_ivrDomainService = ivrDomainService;
_uow = uow;
_roleRepository = roleRepository;
_mediator = mediator;
_distributedLock = distributedLock;
_orderUrgeRepository = orderUrgeRepository;
_repositoryts = repositoryts;
_timeLimitDomainService = timeLimitDomainService;
_wfModuleDomainService = wfModuleDomainService;
_daySettingRepository = daySettingRepository;
_trClient = trClient;
_capPublisher = capPublisher;
_queue = queue;
_exportApplication = exportApplication;
_aiVisitService = aiVisitService;
_workflowTraceRepository = workflowTraceRepository;
_workflowStepRepository = workflowStepRepository;
_workflowRepository = workflowRepository;
//_workflowStepHandleRepository = workflowStepHandleRepository;
_systemOrganizeRepository = systemOrganizeRepository;
_orderRepository = orderRepository;
_trCallRecordRepository = trCallRecordRepository;
_qualityApplication = qualityApplication;
_enforcementApplication = enforcementApplication;
_orderRepository = orderRepository;
_mapper = mapper;
_sendSmsConfiguration = sendSmsConfiguration;
}
[HttpGet("testo111")]
[AllowAnonymous]
public async Task Test111(DateTime StartTime, DateTime? EndTime)
{
var list = await _orderRepository.Queryable()
.Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime && p.Status >= EOrderStatus.Filed)
.Where(p => p.CreationTimeHandleDuration == null || p.CenterToOrgHandleDuration == null)
.ToListAsync();
if (list.Any())
{
foreach (var item in list)
{
var creationTimeHandleDurationWorkday = item.ActualHandleTime.HasValue
? _timeLimitDomainService.CalcWorkTime(item.CreationTime, item.ActualHandleTime.Value,
item.ProcessType is EProcessType.Zhiban)
: 0;
var centerToOrgHandleDurationWorkday = item.ActualHandleTime.HasValue && item.CenterToOrgTime.HasValue
? _timeLimitDomainService.CalcWorkTime(item.CenterToOrgTime.Value, item.ActualHandleTime.Value,
item.ProcessType is EProcessType.Zhiban)
: 0;
item.CreationTimeHandleDurationWorkday = creationTimeHandleDurationWorkday;
item.CenterToOrgHandleDurationWorkday = centerToOrgHandleDurationWorkday;
if (item.ActualHandleTime.HasValue)
{
var count = Math.Round((item.ActualHandleTime - item.CreationTime).Value.TotalSeconds);
item.CreationTimeHandleDuration = count <= 0 ? 1 : count;
}
else
item.CreationTimeHandleDuration = 0;
if (item.ActualHandleTime.HasValue && item.CenterToOrgTime.HasValue)
{
var count = Math.Round((item.ActualHandleTime - item.CenterToOrgTime).Value.TotalSeconds);
item.CenterToOrgHandleDuration = count <= 0 ? 1 : count;
}
else
item.CenterToOrgHandleDuration = 0;
await _orderRepository.UpdateAsync(item, HttpContext.RequestAborted);
}
}
}
[HttpGet("testo")]
[AllowAnonymous]
public async Task TestOrigin()
{
var messageDto = new Share.Dtos.Push.MessageDto
{
PushBusiness = EPushBusiness.OrderAccept,
ExternalId = "123456789",
OrderId = "123456789",
PushPlatform = EPushPlatform.Sms,
Remark = " order.Title",
Name = "张三",
TemplateCode = "1005",
Params = new List() { "20240610000022", "12345" },
TelNumber = "15881689499",
};
await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
var t = _sendSmsConfiguration.Value.Url;
var now = DateTime.Now.ToString();
return OpenResponse.Ok(now);
}
[HttpGet("init-orgname")]
[AllowAnonymous]
public async Task InitUserOrgFullName()
{
var list = await _userRepository.Queryable().Where(x => 1 == 1 && string.IsNullOrEmpty(x.FullOrgName)).ToListAsync();
foreach (var item in list)
{
var orgFullName = "";
var orgFullCode = "";
var orgId = item.OrgId;
int strLength = orgId.Length;
int segmentsCount = strLength / 3;
List strings = new List();
for (int i = 0; i < segmentsCount; i++)
{
int startIndex = i * 3;
int length = Math.Min(3, strLength - startIndex);
strings.Add(orgId.Substring(startIndex, length));
}
if (strLength > 3)
{
orgFullCode = strings[0];
strings.Remove(orgFullCode);
}
foreach (var str in strings)
{
orgFullCode = orgFullCode + str;
var org = await _systemOrganizeRepository.GetAsync(orgFullCode);
if (org != null)
{
orgFullName = orgFullName + org.Name + "/";
}
}
if (orgFullName.Length > 0)
{
orgFullName = orgFullName.Remove(orgFullName.Length - 1);
}
item.FullOrgName = orgFullName;
await _userRepository.UpdateAsync(item);
}
}
[HttpPost("import")]
[AllowAnonymous]
public async Task> Import(IFormFile file)
{
//var FileName = file.FileName;
//var fileExtension = Path.GetExtension(FileName);
////新文件名
//var newFileName = DateTime.Now.ToString("yyyyMMddhhmmss");
////文件保存路径
//var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Upload", newFileName);
////判断路径是否存在
//if (!Directory.Exists(filePath))
//{
// //创建路径
// Directory.CreateDirectory(filePath);
//}
//filePath = Path.Combine(filePath, newFileName+ fileExtension);
using (var stream = new MemoryStream())
{
file.CopyTo(stream);
var list = MiniExcel.Query(stream).ToList();
//Directory.Delete(filePath, true);
return list;
}
}
[AllowAnonymous]
[HttpGet("export")]
public async Task