using DataSharing.FwDataExchange;
using DataSharing.HotlineWeb;
using DataSharing.Province;
using DataSharing.Province.SendTask;
using DataSharing.Province.SendTask.ProvinceOther;
using DataSharing.Province.SendTask.SubmitCaseInfo;
using DataSharing.Province.SendTask.SubmitCaseProcess;
using DataSharing.Province.SendTask.SubmitCaseRecord;
using DataSharing.Province.SendTask.SubmitCaseResult;
using DataSharing.RawData;
using DataSharing.Repository.Extensions;
using DataSharing.SendTask;
using DataSharing.SendTask.OtherPlatforms;
using DataSharing.Share.Consts;
using DataSharing.Share.Dtos;
using DataSharing.Share.Dtos.Common;
using DataSharing.Share.Dtos.FwDataExchange;
using DataSharing.Share.Dtos.HotlineSetting;
using DataSharing.Share.Dtos.HotlineWeb;
using DataSharing.Share.Dtos.Statistics;
using DataSharing.Share.Enums;
using DataSharing.Share.Requests;
using DotNetCore.CAP;
using Hotline.Share.Dtos;
using Hotline.Share.Dtos.Order;
using MapsterMapper;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System.Security.Cryptography;
using System.Text;
using XC.RSAUtil;
using XF.Domain.Cache;
using XF.Domain.Exceptions;
using XF.Domain.Repository;
using XF.Utility.EnumExtensions;
namespace DataSharing.Host.Controllers
{
///
///
///
public class HotlineWebController : BaseController
{
#region 注入
private const string PublicKey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63j
kLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRW
MONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/v
oVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6
WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+P
Prr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJ
UQIDAQAB
-----END PUBLIC KEY-----";
private const string PrivateKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr
1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmE
lFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66M
kKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3b
d0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xx
ZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQABAoIBAAe+312BKUbsp0BV
fOyCqoTLqTJHBcBneWY86pte9bjaZQYPU1PsdF452o8a38gXwpErBcwcjwCyWv48
iQKUv8qdiSWGe+Jh3hGM1lKGfsyl3i3wnlJqgcI2U1zc2a4BoREHnmm4yBnfs2lI
HegpRCG7u3cGPZfJtxJyxdHPfsc3wk8sXt+Byqkuym87l0a8wEF7b33f2hP2R7m/
37qYvTaGX3yN4s1rssQ3wBEfHEsesQmrQrEkRIUnWfgpkH3FdR5T1V4USC6GhM6x
sIxqwBBYLL2LhVcNEifegqHtLZOw0VfUfpvoKnH5omSjUP5X+c8dmY9KPoKGpYFT
l09fiRMCgYEAwSAmJr8G/xOCPtkRZ9qpxOwAeqA9iEhB3ViIydESrYMZGUaIKAWV
ofOuDIdaMgW/2hyQtJasAnlX87Za7iODcBAMMAPSNiLEXk9nHWO+Xw/oMakgS5Dg
uE2J02Bn4KFTCGALtfo70A40kkikkR2UdD4RG6j+DgI2JxxrCgaKiIMCgYEArbrv
cvJs62LlvOFdVCY3mWEJkoBbStHGq2GdtZ5Rx9oNqiy3j/xT7Wav061OPCaC2rcd
ALEH7AA3JJtAMr6QRv3HYyd2NIrlqS6pn4tInIpqlarrnVkkOk0WhsWVkScQJyx6
eLKQ24zEF3wHslrRpHcclCWjtQ52TmWOuUvy9psCgYAWw6BbntbHSFho6hNIJ5kt
Uhg4XB0ErGe/HIl7KH7IHxTdStgPx6C8p0mTxnyWOuFDZ2yTLNN3sy/v1UXgniUH
F40oN7sWkICPEVL5PuGYuPpIqEPbRGeIsfMWDF4SN1HfQdr/h1B3lMUTnSZwyIjQ
LuS7Wu8fXZlegNYJJ3462wKBgE5TSF9vktGw/djhVj15GXoKONGXExGxcDuWQA9A
+Kf81EpT7NJ6tbADquPpb6tIxZgsFGRabDLnifT0FcaLCesnwXwfr3hS4uYaxpjK
qAsDkLg3nhCLvvyWAsDyVdNiZDL1J6ZBA3Qoi8P2xFWSApB+ryDPs3YOtiH0QZui
9UBfAoGBAIQ2uv4J7ql++EpNNtLzOhTEpyjWS+qRSZRRXfKN2lm7e7czOsSpKIJx
Q9PP8NTEmKqdI3WVFYqW/OlOFC6sjiscTOOn9Tc5Mrcn8ocCjAPjkhkCCVRMiJnv
jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
-----END RSA PRIVATE KEY-----";
private readonly IMapper _mapper;
private readonly IMediator _mediator;
private readonly ICapPublisher _capPublisher;
private readonly IRepository _dsOrderSendRepository;
private readonly IRepository _dsTelCallRepository;
private readonly IRepository _configurationInformationRepository;
private readonly ITypedCache _configurationInformationCache;
private readonly IRepository _dsOrderVisitSendRepository;
private readonly IRepository _knowledgeRawDataRepository;
private readonly IRepository _dsUserTokenInfoRepository;
private readonly IRepository _waitSendTaskProvinceOtherRepository;
private readonly IRepository _sendTaskProvinceOtherRepository;
private readonly IRepository _waitSendTaskSubmitCaseInfoRepository;
private readonly IRepository _sendTaskSubmitCaseInfoRepository;
private readonly IRepository _waitSendTaskSubmitCaseProcessRepository;
private readonly IRepository _sendTaskSubmitCaseProcessRepository;
private readonly IRepository _waitSendTaskSubmitCaseRecordRepository;
private readonly IRepository _sendTaskSubmitCaseRecordRepository;
private readonly IRepository _waitSendTaskSubmitCaseResultRepository;
private readonly IRepository _sendTaskSubmitCaseResultRepository;
private readonly IWaitSendTaskRepository _waitSendTaskRepository;
private readonly IRepository _sendTaskDetailInfoRepository;
private readonly IRepository _waitSendTaskOtherPlatformsRepository;
private readonly IRepository _sendTaskOtherPlatformsRepository;
private readonly IInitPushDataService _initPushDataService;
private readonly IRepository _sendHotlineErrorDataRepository;
private readonly FwClient _fwClient;
private readonly ISharingConfigurationManager _sharingConfigurationManager;
private readonly IRepository _userOperationLogRepository;
private readonly IRepository _sendFwErrorDataRepository;
private readonly IRepository _getCaseMaterialInfoRepository;
private readonly IRepository _dsReceiveHandleDataRepository;
private readonly IRepository _getCaseDistrecordSendRepository;
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
public HotlineWebController(IMapper mapper,
IMediator mediator,
ICapPublisher capPublisher,
IRepository dsOrderSendRepository,
IRepository dsTelCallRepository,
IRepository configurationInformationRepository,
ITypedCache configurationInformationCache,
IRepository dsOrderVisitSendRepository,
IRepository knowledgeRawDataRepository,
IRepository dsUserTokenInfoRepository,
IRepository waitSendTaskProvinceOtherRepository,
IRepository sendTaskProvinceOtherRepository,
IRepository waitSendTaskSubmitCaseInfoRepository,
IRepository sendTaskSubmitCaseInfoRepository,
IRepository waitSendTaskSubmitCaseProcessRepository,
IRepository sendTaskSubmitCaseProcessRepository,
IRepository waitSendTaskSubmitCaseRecordRepository,
IRepository sendTaskSubmitCaseRecordRepository,
IRepository waitSendTaskSubmitCaseResultRepository,
IRepository sendTaskSubmitCaseResultRepository,
IWaitSendTaskRepository waitSendTaskRepository,
IRepository sendTaskDetailInfoRepository,
IRepository waitSendTaskOtherPlatformsRepository,
IRepository sendTaskOtherPlatformsRepository,
IInitPushDataService initPushDataService,
IRepository sendHotlineErrorDataRepository,
FwClient fwClient,
ISharingConfigurationManager sharingConfigurationManager,
IRepository userOperationLogRepository,
IRepository sendFwErrorDataRepository,
IRepository getCaseMaterialInfoRepository,
IRepository dsReceiveHandleDataRepository,
IRepository getCaseDistrecordSendRepository
)
{
_mapper = mapper;
_mediator = mediator;
_capPublisher = capPublisher;
_dsOrderSendRepository = dsOrderSendRepository;
_dsTelCallRepository = dsTelCallRepository;
_configurationInformationRepository = configurationInformationRepository;
_configurationInformationCache = configurationInformationCache;
_dsOrderVisitSendRepository = dsOrderVisitSendRepository;
_knowledgeRawDataRepository = knowledgeRawDataRepository;
_dsUserTokenInfoRepository = dsUserTokenInfoRepository;
_waitSendTaskProvinceOtherRepository = waitSendTaskProvinceOtherRepository;
_sendTaskProvinceOtherRepository = sendTaskProvinceOtherRepository;
_waitSendTaskSubmitCaseInfoRepository = waitSendTaskSubmitCaseInfoRepository;
_sendTaskSubmitCaseInfoRepository = sendTaskSubmitCaseInfoRepository;
_waitSendTaskSubmitCaseProcessRepository = waitSendTaskSubmitCaseProcessRepository;
_sendTaskSubmitCaseProcessRepository = sendTaskSubmitCaseProcessRepository;
_waitSendTaskSubmitCaseRecordRepository = waitSendTaskSubmitCaseRecordRepository;
_sendTaskSubmitCaseRecordRepository = sendTaskSubmitCaseRecordRepository;
_waitSendTaskSubmitCaseResultRepository = waitSendTaskSubmitCaseResultRepository;
_sendTaskSubmitCaseResultRepository = sendTaskSubmitCaseResultRepository;
_waitSendTaskRepository = waitSendTaskRepository;
_sendTaskDetailInfoRepository = sendTaskDetailInfoRepository;
_waitSendTaskOtherPlatformsRepository = waitSendTaskOtherPlatformsRepository;
_sendTaskOtherPlatformsRepository = sendTaskOtherPlatformsRepository;
_initPushDataService = initPushDataService;
_sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
_fwClient = fwClient;
_sharingConfigurationManager = sharingConfigurationManager;
_userOperationLogRepository = userOperationLogRepository;
_sendFwErrorDataRepository = sendFwErrorDataRepository;
_getCaseMaterialInfoRepository = getCaseMaterialInfoRepository;
_dsReceiveHandleDataRepository = dsReceiveHandleDataRepository;
_getCaseDistrecordSendRepository = getCaseDistrecordSendRepository;
}
#endregion
#region 数据推送查询统计---最新
#region 推送任务
///
/// 省平台待推送数据
///
///
///
[HttpGet("getprovincewaitsendtasklist")]
[AllowAnonymous]
public async Task> GetProvinceWaitSendTaskList([FromQuery] QuerySendTaskDto dto)
{
if (!dto.StartTime.HasValue)
dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
if (!dto.EndTime.HasValue)
dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
#region 其他接口
//其他接口
var waitSendTaskProvinceOther = _waitSendTaskProvinceOtherRepository.Queryable()
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
.WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
.Select(p => new DsWaitSendTaskDto
{
Id = p.Id,
ProvinceNo = p.ProvinceNo,
FirstTime = p.FirstTime,
LastTime = p.LastTime,
SendTimes = p.SendTimes,
PlatformSource = EPlatformSource.Province,
TaskType = p.TaskType,
HttpMethod = p.HttpMethod,
Path = p.Path,
Request = p.Request,
PathType = p.PathType,
GenerationTime = p.GenerationTime,
CreationTime = p.CreationTime,
State = p.State
})
.MergeTable();
#endregion
#region 服务工单受理
//服务工单受理
var waitSendTaskSubmitCaseInfo = _waitSendTaskSubmitCaseInfoRepository.Queryable()
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
.WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
.Select(p => new DsWaitSendTaskDto
{
Id = p.Id,
ProvinceNo = p.ProvinceNo,
FirstTime = p.FirstTime,
LastTime = p.LastTime,
SendTimes = p.SendTimes,
PlatformSource = EPlatformSource.Province,
TaskType = p.TaskType,
HttpMethod = p.HttpMethod,
Path = p.Path,
Request = p.Request,
PathType = p.PathType,
GenerationTime = p.GenerationTime,
CreationTime = p.CreationTime,
State = p.State
})
.MergeTable();
#endregion
#region 服务工单处理过程
//服务工单处理过程
var waitSendTaskSubmitCaseProcess = _waitSendTaskSubmitCaseProcessRepository.Queryable()
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
.WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
.Select(p => new DsWaitSendTaskDto
{
Id = p.Id,
ProvinceNo = p.ProvinceNo,
FirstTime = p.FirstTime,
LastTime = p.LastTime,
SendTimes = p.SendTimes,
PlatformSource = EPlatformSource.Province,
TaskType = p.TaskType,
HttpMethod = p.HttpMethod,
Path = p.Path,
Request = p.Request,
PathType = p.PathType,
GenerationTime = p.GenerationTime,
CreationTime = p.CreationTime,
State = p.State
})
.MergeTable();
#endregion
#region 电话记录
//电话记录
var waitSendTaskSubmitCaseRecord = _waitSendTaskSubmitCaseRecordRepository.Queryable()
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
.WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
.Select(p => new DsWaitSendTaskDto
{
Id = p.Id,
ProvinceNo = p.ProvinceNo,
FirstTime = p.FirstTime,
LastTime = p.LastTime,
SendTimes = p.SendTimes,
PlatformSource = EPlatformSource.Province,
TaskType = p.TaskType,
HttpMethod = p.HttpMethod,
Path = p.Path,
Request = p.Request,
PathType = p.PathType,
GenerationTime = p.GenerationTime,
CreationTime = p.CreationTime,
State = p.State
})
.MergeTable();
#endregion
#region 服务工单处理结果
//服务工单处理结果
var waitSendTaskSubmitCaseResult = _waitSendTaskSubmitCaseResultRepository.Queryable()
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
.WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
.Select(p => new DsWaitSendTaskDto
{
Id = p.Id,
ProvinceNo = p.ProvinceNo,
FirstTime = p.FirstTime,
LastTime = p.LastTime,
SendTimes = p.SendTimes,
PlatformSource = EPlatformSource.Province,
TaskType = p.TaskType,
HttpMethod = p.HttpMethod,
Path = p.Path,
Request = p.Request,
PathType = p.PathType,
GenerationTime = p.GenerationTime,
CreationTime = p.CreationTime,
State = p.State
})
.MergeTable();
#endregion
//连表查询数据
RefAsync total = 0;
var items = await _waitSendTaskRepository.UnionAll(waitSendTaskProvinceOther, waitSendTaskSubmitCaseInfo, waitSendTaskSubmitCaseProcess,
waitSendTaskSubmitCaseRecord, waitSendTaskSubmitCaseResult).MergeTable()
.OrderBy(p => p.CreationTime)
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
return new PagedDto(total, _mapper.Map>(items));
}
///
/// 其他平台待推送数据
///
///
///
[HttpGet("getotherplatformswaitsendtasklist")]
[AllowAnonymous]
public async Task> GetOtherPlatformsWaitSendTaskList([FromQuery] QuerySendTaskDto dto)
{
if (!dto.StartTime.HasValue)
dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
if (!dto.EndTime.HasValue)
dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
RefAsync total = 0;
//其他平台
var items = await _waitSendTaskOtherPlatformsRepository.Queryable()
.Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
.WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
.WhereIF(dto.PlatformSource.HasValue, p => p.PlatformSource == dto.PlatformSource)
.Select(p => new DsWaitSendTaskDto
{
Id = p.Id,
ProvinceNo = p.ProvinceNo,
FirstTime = p.FirstTime,
LastTime = p.LastTime,
SendTimes = p.SendTimes,
PlatformSource = p.PlatformSource,
TaskType = p.TaskType,
HttpMethod = p.HttpMethod,
Path = p.Path,
Request = p.Request,
PathType = p.PathType,
GenerationTime = p.GenerationTime,
CreationTime = p.CreationTime
})
.MergeTable()
.OrderBy(p => p.CreationTime)
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
return new PagedDto(total, _mapper.Map>(items));
}
///
/// 查询任务推送明细
///
///
///
[HttpGet("getdssenddetailtaskinfo")]
[AllowAnonymous]
public async Task> GetDsSendDetailTaskInfo([FromQuery] QuerySendTaskDto dto)
{
//数据查询
RefAsync total = 0;
var items = await _sendTaskDetailInfoRepository.Queryable()
.WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
.WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
.WhereIF(!string.IsNullOrEmpty(dto.Id), p => p.TaskId == dto.Id)
.WhereIF(dto.IsSuccess.HasValue, p => p.IsSuccess == dto.IsSuccess)
.OrderByDescending(p => p.CreationTime)
.ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
return new PagedDto(total, items);
}
///
///
///
///
[HttpGet("getbaseinfo")]
[AllowAnonymous]
public async Task