HotlineWebController.cs 80 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742
  1. using DataSharing.CityStateDataExchange;
  2. using DataSharing.FwDataExchange;
  3. using DataSharing.HotlineWeb;
  4. using DataSharing.Police110.DaoShu110;
  5. using DataSharing.Province;
  6. using DataSharing.Province.SendTask;
  7. using DataSharing.Province.SendTask.ProvinceOther;
  8. using DataSharing.Province.SendTask.SubmitCaseInfo;
  9. using DataSharing.Province.SendTask.SubmitCaseProcess;
  10. using DataSharing.Province.SendTask.SubmitCaseRecord;
  11. using DataSharing.Province.SendTask.SubmitCaseResult;
  12. using DataSharing.RawData;
  13. using DataSharing.SendTask;
  14. using DataSharing.SendTask.OtherPlatforms;
  15. using DataSharing.Share.Consts;
  16. using DataSharing.Share.Dtos;
  17. using DataSharing.Share.Dtos.Common;
  18. using DataSharing.Share.Dtos.FwDataExchange;
  19. using DataSharing.Share.Dtos.HotlineSetting;
  20. using DataSharing.Share.Dtos.HotlineWeb;
  21. using DataSharing.Share.Dtos.Statistics;
  22. using DataSharing.Share.Enums;
  23. using DataSharing.Share.Requests;
  24. using DataSharing.YiBin.ConvergenceMedia;
  25. using DataSharing.YiBin.Enterprise;
  26. using DotNetCore.CAP;
  27. using Hotline.Share.Dtos;
  28. using Hotline.Share.Dtos.Order;
  29. using Hotline.Share.Enums.CallCenter;
  30. using MapsterMapper;
  31. using MediatR;
  32. using Microsoft.AspNetCore.Authorization;
  33. using Microsoft.AspNetCore.Mvc;
  34. using Org.BouncyCastle.Utilities;
  35. using Serilog.Filters;
  36. using SqlSugar;
  37. using StackExchange.Redis;
  38. using System.Security.Cryptography;
  39. using System.Text;
  40. using XC.RSAUtil;
  41. using XF.Domain.Cache;
  42. using XF.Domain.Exceptions;
  43. using XF.Domain.Repository;
  44. using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
  45. namespace DataSharing.Host.Controllers
  46. {
  47. /// <summary>
  48. ///
  49. /// </summary>
  50. public class HotlineWebController : BaseController
  51. {
  52. #region 注入
  53. private const string PublicKey = @"-----BEGIN PUBLIC KEY-----
  54. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63j
  55. kLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRW
  56. MONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/v
  57. oVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6
  58. WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+P
  59. Prr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJ
  60. UQIDAQAB
  61. -----END PUBLIC KEY-----";
  62. private const string PrivateKey = @"-----BEGIN RSA PRIVATE KEY-----
  63. MIIEowIBAAKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr
  64. 1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmE
  65. lFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66M
  66. kKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3b
  67. d0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xx
  68. ZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQABAoIBAAe+312BKUbsp0BV
  69. fOyCqoTLqTJHBcBneWY86pte9bjaZQYPU1PsdF452o8a38gXwpErBcwcjwCyWv48
  70. iQKUv8qdiSWGe+Jh3hGM1lKGfsyl3i3wnlJqgcI2U1zc2a4BoREHnmm4yBnfs2lI
  71. HegpRCG7u3cGPZfJtxJyxdHPfsc3wk8sXt+Byqkuym87l0a8wEF7b33f2hP2R7m/
  72. 37qYvTaGX3yN4s1rssQ3wBEfHEsesQmrQrEkRIUnWfgpkH3FdR5T1V4USC6GhM6x
  73. sIxqwBBYLL2LhVcNEifegqHtLZOw0VfUfpvoKnH5omSjUP5X+c8dmY9KPoKGpYFT
  74. l09fiRMCgYEAwSAmJr8G/xOCPtkRZ9qpxOwAeqA9iEhB3ViIydESrYMZGUaIKAWV
  75. ofOuDIdaMgW/2hyQtJasAnlX87Za7iODcBAMMAPSNiLEXk9nHWO+Xw/oMakgS5Dg
  76. uE2J02Bn4KFTCGALtfo70A40kkikkR2UdD4RG6j+DgI2JxxrCgaKiIMCgYEArbrv
  77. cvJs62LlvOFdVCY3mWEJkoBbStHGq2GdtZ5Rx9oNqiy3j/xT7Wav061OPCaC2rcd
  78. ALEH7AA3JJtAMr6QRv3HYyd2NIrlqS6pn4tInIpqlarrnVkkOk0WhsWVkScQJyx6
  79. eLKQ24zEF3wHslrRpHcclCWjtQ52TmWOuUvy9psCgYAWw6BbntbHSFho6hNIJ5kt
  80. Uhg4XB0ErGe/HIl7KH7IHxTdStgPx6C8p0mTxnyWOuFDZ2yTLNN3sy/v1UXgniUH
  81. F40oN7sWkICPEVL5PuGYuPpIqEPbRGeIsfMWDF4SN1HfQdr/h1B3lMUTnSZwyIjQ
  82. LuS7Wu8fXZlegNYJJ3462wKBgE5TSF9vktGw/djhVj15GXoKONGXExGxcDuWQA9A
  83. +Kf81EpT7NJ6tbADquPpb6tIxZgsFGRabDLnifT0FcaLCesnwXwfr3hS4uYaxpjK
  84. qAsDkLg3nhCLvvyWAsDyVdNiZDL1J6ZBA3Qoi8P2xFWSApB+ryDPs3YOtiH0QZui
  85. 9UBfAoGBAIQ2uv4J7ql++EpNNtLzOhTEpyjWS+qRSZRRXfKN2lm7e7czOsSpKIJx
  86. Q9PP8NTEmKqdI3WVFYqW/OlOFC6sjiscTOOn9Tc5Mrcn8ocCjAPjkhkCCVRMiJnv
  87. jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
  88. -----END RSA PRIVATE KEY-----";
  89. private readonly IMapper _mapper;
  90. private readonly IMediator _mediator;
  91. private readonly ICapPublisher _capPublisher;
  92. private readonly IRepository<DsOrderSend> _dsOrderSendRepository;
  93. private readonly IRepository<DsTelCall> _dsTelCallRepository;
  94. private readonly IRepository<ConfigurationInformation> _configurationInformationRepository;
  95. private readonly ITypedCache<ConfigurationInformationDto> _configurationInformationCache;
  96. private readonly IRepository<DsOrderVisitSend> _dsOrderVisitSendRepository;
  97. private readonly IRepository<DsKnowledgeRawData> _knowledgeRawDataRepository;
  98. private readonly IRepository<DsUserTokenInfo> _dsUserTokenInfoRepository;
  99. private readonly IRepository<DsWaitSendTaskProvinceOther> _waitSendTaskProvinceOtherRepository;
  100. private readonly IRepository<DsSendTaskProvinceOther> _sendTaskProvinceOtherRepository;
  101. private readonly IRepository<DsWaitSendTaskSubmitCaseInfo> _waitSendTaskSubmitCaseInfoRepository;
  102. private readonly IRepository<DsSendTaskSubmitCaseInfo> _sendTaskSubmitCaseInfoRepository;
  103. private readonly IRepository<DsWaitSendTaskSubmitCaseProcess> _waitSendTaskSubmitCaseProcessRepository;
  104. private readonly IRepository<DsSendTaskSubmitCaseProcess> _sendTaskSubmitCaseProcessRepository;
  105. private readonly IRepository<DsWaitSendTaskSubmitCaseRecord> _waitSendTaskSubmitCaseRecordRepository;
  106. private readonly IRepository<DsSendTaskSubmitCaseRecord> _sendTaskSubmitCaseRecordRepository;
  107. private readonly IRepository<DsWaitSendTaskSubmitCaseResult> _waitSendTaskSubmitCaseResultRepository;
  108. private readonly IRepository<DsSendTaskSubmitCaseResult> _sendTaskSubmitCaseResultRepository;
  109. private readonly IWaitSendTaskRepository _waitSendTaskRepository;
  110. private readonly IRepository<DsSendTaskDetailInfo> _sendTaskDetailInfoRepository;
  111. private readonly IRepository<DsWaitSendTaskOtherPlatforms> _waitSendTaskOtherPlatformsRepository;
  112. private readonly IRepository<DsSendTaskOtherPlatforms> _sendTaskOtherPlatformsRepository;
  113. private readonly IInitPushDataService _initPushDataService;
  114. private readonly IRepository<DsSendTask> _taskRepository;
  115. private readonly IRepository<DsSendTaskInfo> _taskInfoRepository;
  116. private readonly IRepository<DsOrder> _dsOrderRepository;
  117. private readonly IRepository<SendHotlineErrorData> _sendHotlineErrorDataRepository;
  118. private readonly FwClient _fwClient;
  119. private readonly ISharingConfigurationManager _sharingConfigurationManager;
  120. private readonly IRepository<UserOperationLog> _userOperationLogRepository;
  121. private readonly IRepository<SendFwErrorData> _sendFwErrorDataRepository;
  122. private readonly IRepository<DsGetCaseMaterialInfo> _getCaseMaterialInfoRepository;
  123. private readonly IRepository<DsReceiveDataExchangeData> _dsReceiveDataExchangeDataRepository;
  124. private readonly IRepository<DsReceiveEnterpriseData> _dsReceiveEnterpriseDataRepository;
  125. private readonly IRepository<DsReceiveMediaData> _dsReceiveMediaDataRepository;
  126. private readonly IRepository<DsReceivePoliceData> _dsReceivePoliceDataRepository;
  127. private readonly IRepository<DsReceiveHandleData> _dsReceiveHandleDataRepository;
  128. public HotlineWebController(IMapper mapper,
  129. IMediator mediator,
  130. ICapPublisher capPublisher,
  131. IRepository<DsOrderSend> dsOrderSendRepository,
  132. IRepository<DsTelCall> dsTelCallRepository,
  133. IRepository<ConfigurationInformation> configurationInformationRepository,
  134. ITypedCache<ConfigurationInformationDto> configurationInformationCache,
  135. IRepository<DsOrderVisitSend> dsOrderVisitSendRepository,
  136. IRepository<DsKnowledgeRawData> knowledgeRawDataRepository,
  137. IRepository<DsUserTokenInfo> dsUserTokenInfoRepository,
  138. IRepository<DsWaitSendTaskProvinceOther> waitSendTaskProvinceOtherRepository,
  139. IRepository<DsSendTaskProvinceOther> sendTaskProvinceOtherRepository,
  140. IRepository<DsWaitSendTaskSubmitCaseInfo> waitSendTaskSubmitCaseInfoRepository,
  141. IRepository<DsSendTaskSubmitCaseInfo> sendTaskSubmitCaseInfoRepository,
  142. IRepository<DsWaitSendTaskSubmitCaseProcess> waitSendTaskSubmitCaseProcessRepository,
  143. IRepository<DsSendTaskSubmitCaseProcess> sendTaskSubmitCaseProcessRepository,
  144. IRepository<DsWaitSendTaskSubmitCaseRecord> waitSendTaskSubmitCaseRecordRepository,
  145. IRepository<DsSendTaskSubmitCaseRecord> sendTaskSubmitCaseRecordRepository,
  146. IRepository<DsWaitSendTaskSubmitCaseResult> waitSendTaskSubmitCaseResultRepository,
  147. IRepository<DsSendTaskSubmitCaseResult> sendTaskSubmitCaseResultRepository,
  148. IWaitSendTaskRepository waitSendTaskRepository,
  149. IRepository<DsSendTaskDetailInfo> sendTaskDetailInfoRepository,
  150. IRepository<DsWaitSendTaskOtherPlatforms> waitSendTaskOtherPlatformsRepository,
  151. IRepository<DsSendTaskOtherPlatforms> sendTaskOtherPlatformsRepository,
  152. IInitPushDataService initPushDataService,
  153. IRepository<DsSendTask> taskRepository,
  154. IRepository<DsSendTaskInfo> taskInfoRepository,
  155. IRepository<DsOrder> dsOrderRepository,
  156. IRepository<SendHotlineErrorData> sendHotlineErrorDataRepository,
  157. FwClient fwClient,
  158. ISharingConfigurationManager sharingConfigurationManager,
  159. IRepository<UserOperationLog> userOperationLogRepository,
  160. IRepository<SendFwErrorData> sendFwErrorDataRepository,
  161. IRepository<DsGetCaseMaterialInfo> getCaseMaterialInfoRepository,
  162. IRepository<DsReceiveDataExchangeData> dsReceiveDataExchangeDataRepository,
  163. IRepository<DsReceiveEnterpriseData> dsReceiveEnterpriseDataRepository,
  164. IRepository<DsReceiveMediaData> dsReceiveMediaDataRepository,
  165. IRepository<DsReceivePoliceData> dsReceivePoliceDataRepository,
  166. IRepository<DsReceiveHandleData> dsReceiveHandleDataRepository
  167. )
  168. {
  169. _mapper = mapper;
  170. _mediator = mediator;
  171. _capPublisher = capPublisher;
  172. _dsOrderSendRepository = dsOrderSendRepository;
  173. _dsTelCallRepository = dsTelCallRepository;
  174. _configurationInformationRepository = configurationInformationRepository;
  175. _configurationInformationCache = configurationInformationCache;
  176. _dsOrderVisitSendRepository = dsOrderVisitSendRepository;
  177. _knowledgeRawDataRepository = knowledgeRawDataRepository;
  178. _dsUserTokenInfoRepository = dsUserTokenInfoRepository;
  179. _waitSendTaskProvinceOtherRepository = waitSendTaskProvinceOtherRepository;
  180. _sendTaskProvinceOtherRepository = sendTaskProvinceOtherRepository;
  181. _waitSendTaskSubmitCaseInfoRepository = waitSendTaskSubmitCaseInfoRepository;
  182. _sendTaskSubmitCaseInfoRepository = sendTaskSubmitCaseInfoRepository;
  183. _waitSendTaskSubmitCaseProcessRepository = waitSendTaskSubmitCaseProcessRepository;
  184. _sendTaskSubmitCaseProcessRepository = sendTaskSubmitCaseProcessRepository;
  185. _waitSendTaskSubmitCaseRecordRepository = waitSendTaskSubmitCaseRecordRepository;
  186. _sendTaskSubmitCaseRecordRepository = sendTaskSubmitCaseRecordRepository;
  187. _waitSendTaskSubmitCaseResultRepository = waitSendTaskSubmitCaseResultRepository;
  188. _sendTaskSubmitCaseResultRepository = sendTaskSubmitCaseResultRepository;
  189. _waitSendTaskRepository = waitSendTaskRepository;
  190. _sendTaskDetailInfoRepository = sendTaskDetailInfoRepository;
  191. _waitSendTaskOtherPlatformsRepository = waitSendTaskOtherPlatformsRepository;
  192. _sendTaskOtherPlatformsRepository = sendTaskOtherPlatformsRepository;
  193. _initPushDataService = initPushDataService;
  194. _taskRepository = taskRepository;
  195. _taskInfoRepository = taskInfoRepository;
  196. _dsOrderRepository = dsOrderRepository;
  197. _sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
  198. _fwClient = fwClient;
  199. _sharingConfigurationManager = sharingConfigurationManager;
  200. _userOperationLogRepository = userOperationLogRepository;
  201. _sendFwErrorDataRepository = sendFwErrorDataRepository;
  202. _getCaseMaterialInfoRepository = getCaseMaterialInfoRepository;
  203. _dsReceiveDataExchangeDataRepository = dsReceiveDataExchangeDataRepository;
  204. _dsReceiveEnterpriseDataRepository = dsReceiveEnterpriseDataRepository;
  205. _dsReceiveMediaDataRepository = dsReceiveMediaDataRepository;
  206. _dsReceivePoliceDataRepository = dsReceivePoliceDataRepository;
  207. _dsReceiveHandleDataRepository = dsReceiveHandleDataRepository;
  208. }
  209. #endregion
  210. #region 数据推送查询统计---最新
  211. #region 推送任务
  212. /// <summary>
  213. /// 省平台待推送数据
  214. /// </summary>
  215. /// <param name="dto"></param>
  216. /// <returns></returns>
  217. [HttpGet("getprovincewaitsendtasklist")]
  218. [AllowAnonymous]
  219. public async Task<PagedDto<DsWaitSendTaskDto>> GetProvinceWaitSendTaskList([FromQuery] QuerySendTaskDto dto)
  220. {
  221. if (!dto.StartTime.HasValue)
  222. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  223. if (!dto.EndTime.HasValue)
  224. dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  225. #region 其他接口
  226. //其他接口
  227. var waitSendTaskProvinceOther = _waitSendTaskProvinceOtherRepository.Queryable()
  228. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  229. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  230. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  231. .Select(p => new DsWaitSendTaskDto
  232. {
  233. Id = p.Id,
  234. ProvinceNo = p.ProvinceNo,
  235. FirstTime = p.FirstTime,
  236. LastTime = p.LastTime,
  237. SendTimes = p.SendTimes,
  238. PlatformSource = EPlatformSource.Province,
  239. TaskType = p.TaskType,
  240. HttpMethod = p.HttpMethod,
  241. Path = p.Path,
  242. Request = p.Request,
  243. PathType = p.PathType,
  244. GenerationTime = p.GenerationTime,
  245. CreationTime = p.CreationTime,
  246. State = p.State
  247. })
  248. .MergeTable();
  249. #endregion
  250. #region 服务工单受理
  251. //服务工单受理
  252. var waitSendTaskSubmitCaseInfo = _waitSendTaskSubmitCaseInfoRepository.Queryable()
  253. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  254. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  255. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  256. .Select(p => new DsWaitSendTaskDto
  257. {
  258. Id = p.Id,
  259. ProvinceNo = p.ProvinceNo,
  260. FirstTime = p.FirstTime,
  261. LastTime = p.LastTime,
  262. SendTimes = p.SendTimes,
  263. PlatformSource = EPlatformSource.Province,
  264. TaskType = p.TaskType,
  265. HttpMethod = p.HttpMethod,
  266. Path = p.Path,
  267. Request = p.Request,
  268. PathType = p.PathType,
  269. GenerationTime = p.GenerationTime,
  270. CreationTime = p.CreationTime,
  271. State = p.State
  272. })
  273. .MergeTable();
  274. #endregion
  275. #region 服务工单处理过程
  276. //服务工单处理过程
  277. var waitSendTaskSubmitCaseProcess = _waitSendTaskSubmitCaseProcessRepository.Queryable()
  278. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  279. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  280. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  281. .Select(p => new DsWaitSendTaskDto
  282. {
  283. Id = p.Id,
  284. ProvinceNo = p.ProvinceNo,
  285. FirstTime = p.FirstTime,
  286. LastTime = p.LastTime,
  287. SendTimes = p.SendTimes,
  288. PlatformSource = EPlatformSource.Province,
  289. TaskType = p.TaskType,
  290. HttpMethod = p.HttpMethod,
  291. Path = p.Path,
  292. Request = p.Request,
  293. PathType = p.PathType,
  294. GenerationTime = p.GenerationTime,
  295. CreationTime = p.CreationTime,
  296. State = p.State
  297. })
  298. .MergeTable();
  299. #endregion
  300. #region 电话记录
  301. //电话记录
  302. var waitSendTaskSubmitCaseRecord = _waitSendTaskSubmitCaseRecordRepository.Queryable()
  303. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  304. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  305. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  306. .Select(p => new DsWaitSendTaskDto
  307. {
  308. Id = p.Id,
  309. ProvinceNo = p.ProvinceNo,
  310. FirstTime = p.FirstTime,
  311. LastTime = p.LastTime,
  312. SendTimes = p.SendTimes,
  313. PlatformSource = EPlatformSource.Province,
  314. TaskType = p.TaskType,
  315. HttpMethod = p.HttpMethod,
  316. Path = p.Path,
  317. Request = p.Request,
  318. PathType = p.PathType,
  319. GenerationTime = p.GenerationTime,
  320. CreationTime = p.CreationTime,
  321. State = p.State
  322. })
  323. .MergeTable();
  324. #endregion
  325. #region 服务工单处理结果
  326. //服务工单处理结果
  327. var waitSendTaskSubmitCaseResult = _waitSendTaskSubmitCaseResultRepository.Queryable()
  328. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  329. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  330. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  331. .Select(p => new DsWaitSendTaskDto
  332. {
  333. Id = p.Id,
  334. ProvinceNo = p.ProvinceNo,
  335. FirstTime = p.FirstTime,
  336. LastTime = p.LastTime,
  337. SendTimes = p.SendTimes,
  338. PlatformSource = EPlatformSource.Province,
  339. TaskType = p.TaskType,
  340. HttpMethod = p.HttpMethod,
  341. Path = p.Path,
  342. Request = p.Request,
  343. PathType = p.PathType,
  344. GenerationTime = p.GenerationTime,
  345. CreationTime = p.CreationTime,
  346. State = p.State
  347. })
  348. .MergeTable();
  349. #endregion
  350. //连表查询数据
  351. RefAsync<int> total = 0;
  352. var items = await _waitSendTaskRepository.UnionAll(waitSendTaskProvinceOther, waitSendTaskSubmitCaseInfo, waitSendTaskSubmitCaseProcess,
  353. waitSendTaskSubmitCaseRecord, waitSendTaskSubmitCaseResult).MergeTable()
  354. .OrderBy(p => p.CreationTime)
  355. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  356. return new PagedDto<DsWaitSendTaskDto>(total, _mapper.Map<List<DsWaitSendTaskDto>>(items));
  357. }
  358. /// <summary>
  359. /// 其他平台待推送数据
  360. /// </summary>
  361. /// <param name="dto"></param>
  362. /// <returns></returns>
  363. [HttpGet("getotherplatformswaitsendtasklist")]
  364. [AllowAnonymous]
  365. public async Task<PagedDto<DsWaitSendTaskDto>> GetOtherPlatformsWaitSendTaskList([FromQuery] QuerySendTaskDto dto)
  366. {
  367. if (!dto.StartTime.HasValue)
  368. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  369. if (!dto.EndTime.HasValue)
  370. dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  371. RefAsync<int> total = 0;
  372. //其他平台
  373. var items = await _waitSendTaskOtherPlatformsRepository.Queryable()
  374. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  375. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  376. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  377. .Select(p => new DsWaitSendTaskDto
  378. {
  379. Id = p.Id,
  380. ProvinceNo = p.ProvinceNo,
  381. FirstTime = p.FirstTime,
  382. LastTime = p.LastTime,
  383. SendTimes = p.SendTimes,
  384. PlatformSource = p.PlatformSource,
  385. TaskType = p.TaskType,
  386. HttpMethod = p.HttpMethod,
  387. Path = p.Path,
  388. Request = p.Request,
  389. PathType = p.PathType,
  390. GenerationTime = p.GenerationTime,
  391. CreationTime = p.CreationTime
  392. })
  393. .MergeTable()
  394. .OrderBy(p => p.CreationTime)
  395. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  396. return new PagedDto<DsWaitSendTaskDto>(total, _mapper.Map<List<DsWaitSendTaskDto>>(items));
  397. }
  398. /// <summary>
  399. /// 查询任务推送明细
  400. /// </summary>
  401. /// <param name="dto"></param>
  402. /// <returns></returns>
  403. [HttpGet("getdssenddetailtaskinfo")]
  404. [AllowAnonymous]
  405. public async Task<PagedDto<DsSendTaskDetailInfo>> GetDsSendDetailTaskInfo([FromQuery] QuerySendTaskDto dto)
  406. {
  407. //数据查询
  408. RefAsync<int> total = 0;
  409. var items = await _sendTaskDetailInfoRepository.Queryable()
  410. .WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
  411. .WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
  412. .WhereIF(!string.IsNullOrEmpty(dto.Id), p => p.TaskId == dto.Id)
  413. .WhereIF(dto.IsSuccess.HasValue, p => p.IsSuccess == dto.IsSuccess)
  414. .OrderByDescending(p => p.CreationTime)
  415. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  416. return new PagedDto<DsSendTaskDetailInfo>(total, items);
  417. }
  418. /// <summary>
  419. /// 查询已推送任务 查询类型 1:服务工单受理,2、电话记录,3、服务工单处理过程,4、服务工单处理结果,5、省平台其他推送,6、其他平台
  420. /// </summary>
  421. /// <param name="dto"></param>
  422. /// <returns></returns>
  423. [HttpGet("getdssendendtask")]
  424. [AllowAnonymous]
  425. public async Task<PagedDto<DsEndSendTaskDto>> GetDsSendEndTask([FromQuery] QuerySendTaskDto dto)
  426. {
  427. if (!dto.StartTime.HasValue)
  428. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  429. if (!dto.EndTime.HasValue)
  430. dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  431. //数据查询
  432. RefAsync<int> total = 0;
  433. //服务工单受理
  434. if (dto.SelectType == "1")
  435. {
  436. //服务工单受理
  437. var items = await _sendTaskSubmitCaseInfoRepository.Queryable()
  438. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  439. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  440. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  441. .Select(p => new DsEndSendTaskDto
  442. {
  443. Id = p.Id,
  444. ProvinceNo = p.ProvinceNo,
  445. FirstTime = p.FirstTime,
  446. LastTime = p.LastTime,
  447. SendTimes = p.SendTimes,
  448. PlatformSource = EPlatformSource.Province,
  449. TaskType = p.TaskType,
  450. HttpMethod = p.HttpMethod,
  451. Path = p.Path,
  452. Request = p.Request,
  453. PathType = p.PathType,
  454. GenerationTime = p.GenerationTime,
  455. CreationTime = p.CreationTime,
  456. IsSuccess = p.IsSuccess,
  457. ExpiredTime = p.ExpiredTime
  458. })
  459. .MergeTable()
  460. .OrderByDescending(p => p.CreationTime)
  461. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  462. return new PagedDto<DsEndSendTaskDto>(total, _mapper.Map<List<DsEndSendTaskDto>>(items));
  463. }
  464. //电话记录
  465. if (dto.SelectType == "2")
  466. {
  467. //电话记录
  468. var items = await _sendTaskSubmitCaseRecordRepository.Queryable()
  469. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  470. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  471. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  472. .Select(p => new DsEndSendTaskDto
  473. {
  474. Id = p.Id,
  475. ProvinceNo = p.ProvinceNo,
  476. FirstTime = p.FirstTime,
  477. LastTime = p.LastTime,
  478. SendTimes = p.SendTimes,
  479. PlatformSource = EPlatformSource.Province,
  480. TaskType = p.TaskType,
  481. HttpMethod = p.HttpMethod,
  482. Path = p.Path,
  483. Request = p.Request,
  484. PathType = p.PathType,
  485. GenerationTime = p.GenerationTime,
  486. CreationTime = p.CreationTime,
  487. IsSuccess = p.IsSuccess
  488. })
  489. .MergeTable()
  490. .OrderByDescending(p => p.CreationTime)
  491. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  492. return new PagedDto<DsEndSendTaskDto>(total, _mapper.Map<List<DsEndSendTaskDto>>(items));
  493. }
  494. //服务工单处理过程
  495. if (dto.SelectType == "3")
  496. {
  497. //服务工单处理过程
  498. var items = await _sendTaskSubmitCaseProcessRepository.Queryable()
  499. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  500. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  501. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  502. .Select(p => new DsEndSendTaskDto
  503. {
  504. Id = p.Id,
  505. ProvinceNo = p.ProvinceNo,
  506. FirstTime = p.FirstTime,
  507. LastTime = p.LastTime,
  508. SendTimes = p.SendTimes,
  509. PlatformSource = EPlatformSource.Province,
  510. TaskType = p.TaskType,
  511. HttpMethod = p.HttpMethod,
  512. Path = p.Path,
  513. Request = p.Request,
  514. PathType = p.PathType,
  515. GenerationTime = p.GenerationTime,
  516. CreationTime = p.CreationTime,
  517. IsSuccess = p.IsSuccess
  518. })
  519. .OrderByDescending(p => p.CreationTime)
  520. .MergeTable().ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  521. return new PagedDto<DsEndSendTaskDto>(total, _mapper.Map<List<DsEndSendTaskDto>>(items));
  522. }
  523. //服务工单处理结果
  524. if (dto.SelectType == "4")
  525. {
  526. //服务工单处理结果
  527. var items = await _sendTaskSubmitCaseResultRepository.Queryable()
  528. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  529. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  530. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  531. .Select(p => new DsEndSendTaskDto
  532. {
  533. Id = p.Id,
  534. ProvinceNo = p.ProvinceNo,
  535. FirstTime = p.FirstTime,
  536. LastTime = p.LastTime,
  537. SendTimes = p.SendTimes,
  538. PlatformSource = EPlatformSource.Province,
  539. TaskType = p.TaskType,
  540. HttpMethod = p.HttpMethod,
  541. Path = p.Path,
  542. Request = p.Request,
  543. PathType = p.PathType,
  544. GenerationTime = p.GenerationTime,
  545. CreationTime = p.CreationTime,
  546. IsSuccess = p.IsSuccess,
  547. FiledTime = p.FiledTime,
  548. ExpiredTime = SqlFunc.Subqueryable<DsSendTaskSubmitCaseInfo>().Where(s => s.ProvinceNo == p.ProvinceNo).OrderByDesc(s => s.LastTime).Select(s => s.ExpiredTime)
  549. })
  550. .OrderByDescending(p => p.CreationTime)
  551. .MergeTable().ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  552. return new PagedDto<DsEndSendTaskDto>(total, _mapper.Map<List<DsEndSendTaskDto>>(items));
  553. }
  554. //其他接口
  555. if (dto.SelectType == "5")
  556. {
  557. //其他接口
  558. var items = await _sendTaskProvinceOtherRepository.Queryable()
  559. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  560. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  561. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  562. .Select(p => new DsEndSendTaskDto
  563. {
  564. Id = p.Id,
  565. ProvinceNo = p.ProvinceNo,
  566. FirstTime = p.FirstTime,
  567. LastTime = p.LastTime,
  568. SendTimes = p.SendTimes,
  569. PlatformSource = EPlatformSource.Province,
  570. TaskType = p.TaskType,
  571. HttpMethod = p.HttpMethod,
  572. Path = p.Path,
  573. Request = p.Request,
  574. PathType = p.PathType,
  575. GenerationTime = p.GenerationTime,
  576. CreationTime = p.CreationTime,
  577. IsSuccess = p.IsSuccess
  578. })
  579. .OrderByDescending(p => p.CreationTime)
  580. .MergeTable().ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  581. return new PagedDto<DsEndSendTaskDto>(total, _mapper.Map<List<DsEndSendTaskDto>>(items));
  582. }
  583. //其他平台
  584. if (dto.SelectType == "6")
  585. {
  586. //其他平台
  587. var items = await _sendTaskOtherPlatformsRepository.Queryable()
  588. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  589. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.ProvinceNo == dto.CaseSerial)
  590. .WhereIF(!string.IsNullOrEmpty(dto.Path), p => p.Path == dto.Path)
  591. .Select(p => new DsEndSendTaskDto
  592. {
  593. Id = p.Id,
  594. ProvinceNo = p.ProvinceNo,
  595. FirstTime = p.FirstTime,
  596. LastTime = p.LastTime,
  597. SendTimes = p.SendTimes,
  598. PlatformSource = p.PlatformSource,
  599. TaskType = p.TaskType,
  600. HttpMethod = p.HttpMethod,
  601. Path = p.Path,
  602. Request = p.Request,
  603. PathType = p.PathType,
  604. GenerationTime = p.GenerationTime,
  605. CreationTime = p.CreationTime,
  606. IsSuccess = p.IsSuccess
  607. })
  608. .MergeTable()
  609. .OrderBy(p => p.CreationTime)
  610. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  611. return new PagedDto<DsEndSendTaskDto>(total, _mapper.Map<List<DsEndSendTaskDto>>(items));
  612. }
  613. return new PagedDto<DsEndSendTaskDto>(total, null);
  614. }
  615. /// <summary>
  616. /// 根据ID从新推送
  617. /// </summary>
  618. /// <param name="Id">推送任务Id</param>
  619. /// <param name="Type">类型 1:服务工单受理,2、电话记录,3、服务工单处理过程,4、服务工单处理结果,5、省平台其他推送,6、其他平台</param>
  620. /// <returns></returns>
  621. [HttpGet("addnewtasksendbyid")]
  622. [AllowAnonymous]
  623. public async Task AddNewTaskSendById(string Id, string Type)
  624. {
  625. if (string.IsNullOrEmpty(Id) || string.IsNullOrEmpty(Type))
  626. throw UserFriendlyException.SameMessage("参数无效");
  627. var userInfo = Request.Headers["userinfo"].ToString();
  628. if (string.IsNullOrEmpty(userInfo))
  629. throw UserFriendlyException.SameMessage("用户信息获取失败");
  630. var pkcs1 = new RsaPkcs1Util(Encoding.UTF8, PublicKey, PrivateKey);
  631. var info = pkcs1.Decrypt(userInfo, RSAEncryptionPadding.Pkcs1);
  632. if (info == null)
  633. throw UserFriendlyException.SameMessage("用户信息获取失败");
  634. var user = System.Text.Json.JsonSerializer.Deserialize<UserInfo>(info);
  635. if (user == null)
  636. throw UserFriendlyException.SameMessage("用户信息获取失败");
  637. //写入操作记录
  638. UserOperationLog operationLog = new()
  639. {
  640. DataId = Id,
  641. PlatformSource = EPlatformSource.Province,
  642. UserId = user.UserId,
  643. UserName = user.UserName,
  644. OrgCode = user.OrgCode,
  645. OrgName = user.OrgName
  646. };
  647. string resultId = "";
  648. //服务工单受理
  649. if (Type == "1")
  650. {
  651. var data = await _sendTaskSubmitCaseInfoRepository.GetAsync(Id, HttpContext.RequestAborted);
  652. if (data != null)
  653. {
  654. operationLog.ReceiveServiceInterface = data.TaskType;
  655. operationLog.Path = data.Path;
  656. operationLog.RequestData = data.Request;
  657. resultId = await _initPushDataService.InitDsSendTaskSubmitCaseInfo(data.OrderId, data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
  658. }
  659. }
  660. //电话记录
  661. if (Type == "2")
  662. {
  663. var data = await _sendTaskSubmitCaseRecordRepository.GetAsync(Id, HttpContext.RequestAborted);
  664. if (data != null)
  665. {
  666. operationLog.ReceiveServiceInterface = data.TaskType;
  667. operationLog.Path = data.Path;
  668. operationLog.RequestData = data.Request;
  669. resultId = await _initPushDataService.InitDsSendTaskSubmitCaseRecord(data.ProvinceNo, data.CallId, data.CallLogId, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
  670. }
  671. }
  672. //服务工单处理过程
  673. if (Type == "3")
  674. {
  675. var data = await _sendTaskSubmitCaseProcessRepository.GetAsync(Id, HttpContext.RequestAborted);
  676. if (data != null)
  677. {
  678. operationLog.ReceiveServiceInterface = data.TaskType;
  679. operationLog.Path = data.Path;
  680. operationLog.RequestData = data.Request;
  681. resultId = await _initPushDataService.InitDsSendTaskSubmitCaseProcess(data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
  682. }
  683. }
  684. //服务工单处理结果
  685. if (Type == "4")
  686. {
  687. var data = await _sendTaskSubmitCaseResultRepository.GetAsync(Id, HttpContext.RequestAborted);
  688. if (data != null)
  689. {
  690. operationLog.ReceiveServiceInterface = data.TaskType;
  691. operationLog.Path = data.Path;
  692. operationLog.RequestData = data.Request;
  693. resultId = await _initPushDataService.InitDsSendTaskSubmitCaseResult(data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
  694. }
  695. }
  696. //其他接口
  697. if (Type == "5")
  698. {
  699. var data = await _sendTaskProvinceOtherRepository.GetAsync(Id, HttpContext.RequestAborted);
  700. if (data != null)
  701. {
  702. operationLog.ReceiveServiceInterface = data.TaskType;
  703. operationLog.Path = data.Path;
  704. operationLog.RequestData = data.Request;
  705. resultId = await _initPushDataService.InitDsSendTaskProvinceOther(data.TaskType, data.Path, data.ProvinceNo, data.Request, data.RequestData, data.HttpMethod, data.PathType.Value, data.FileJson, data.GenerationTime, cancellationToken: HttpContext.RequestAborted);
  706. }
  707. }
  708. //其他平台
  709. if (Type == "6")
  710. {
  711. var data = await _sendTaskOtherPlatformsRepository.GetAsync(Id, HttpContext.RequestAborted);
  712. if (data != null)
  713. {
  714. operationLog.ReceiveServiceInterface = data.TaskType;
  715. operationLog.Path = data.Path;
  716. operationLog.RequestData = data.Request;
  717. resultId = await _initPushDataService.InitDsSendTaskOtherPlatforms(data.TaskType, data.Path, data.ProvinceNo, data.Request, data.RequestData, data.PlatformSource, data.HttpMethod, data.PathType.Value, data.FileJson, data.GenerationTime, HttpContext.RequestAborted);
  718. }
  719. }
  720. operationLog.NewDataId = resultId;
  721. await _userOperationLogRepository.AddAsync(operationLog, HttpContext.RequestAborted);
  722. if (string.IsNullOrEmpty(resultId))
  723. throw UserFriendlyException.SameMessage("重新推送失败");
  724. }
  725. #endregion
  726. #region 及时性
  727. /// <summary>
  728. /// 查询工单及时上传列表
  729. /// </summary>
  730. /// <param name="dto"></param>
  731. /// <returns></returns>
  732. [HttpGet("getordertimelylist")]
  733. [AllowAnonymous]
  734. public async Task<PagedDto<object>> GetOrderTimelyList([FromQuery] QuerySendTaskDto dto)
  735. {
  736. if (!dto.StartTime.HasValue)
  737. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  738. if (!dto.EndTime.HasValue)
  739. dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  740. //数据查询
  741. RefAsync<int> total = 0;
  742. var items = await _sendTaskSubmitCaseInfoRepository.Queryable()
  743. .Where(p => p.GenerationTime >= dto.StartTime && p.GenerationTime <= dto.EndTime)
  744. .Where(p => p.LastTime >= dto.StartTime && p.LastTime <= dto.EndTime && p.IsSuccess == ESendTaskState.PushSuccess)
  745. .Select(p => new
  746. {
  747. index = SqlFunc.RowNumber($"{p.LastTime} asc ", $"{p.ProvinceNo}"),
  748. ProvinceNo = p.ProvinceNo,
  749. FirstTime = p.FirstTime,
  750. LastTime = p.LastTime,
  751. SendTimes = p.SendTimes,
  752. StartTime = p.GenerationTime,
  753. CreationTime = p.CreationTime,
  754. IntervalTime = SqlFunc.DateDiff(DateType.Second, p.GenerationTime.Value, p.LastTime.Value),
  755. CaseSource = p.CaseSource,
  756. p.RequestData,
  757. p.OrderId
  758. })
  759. .MergeTable()
  760. .Where(d => d.index == 1)
  761. .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == true, d => SqlFunc.DateDiff(DateType.Second, d.StartTime.Value, d.LastTime.Value) <= 180)//及时上传
  762. .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == false, d => SqlFunc.DateDiff(DateType.Second, d.StartTime.Value, d.LastTime.Value) > 180)//不及时上传
  763. .OrderByDescending(d => d.CreationTime)
  764. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  765. return new PagedDto<object>(total, items);
  766. }
  767. /// <summary>
  768. /// 查询通话记录及时上传列表
  769. /// </summary>
  770. /// <param name="dto"></param>
  771. /// <returns></returns>
  772. [HttpGet("getcalllist")]
  773. [AllowAnonymous]
  774. public async Task<PagedDto<object>> GetCalllist([FromQuery] QuerySendTaskDto dto)
  775. {
  776. if (!dto.StartTime.HasValue)
  777. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  778. if (!dto.EndTime.HasValue)
  779. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  780. RefAsync<int> total = 0;
  781. var items = await _sendTaskSubmitCaseRecordRepository.Queryable()
  782. .Where(p => p.GenerationTime >= dto.StartTime && p.GenerationTime <= dto.EndTime)
  783. .Where(p => p.LastTime >= dto.StartTime && p.LastTime <= dto.EndTime && p.IsSuccess == ESendTaskState.PushSuccess)
  784. .Select(p => new
  785. {
  786. index = SqlFunc.RowNumber($"{p.LastTime} asc ", $"{p.CallLogId}"),
  787. ProvinceNo = p.ProvinceNo,
  788. FirstTime = p.FirstTime,
  789. LastTime = p.LastTime,
  790. SendTimes = p.SendTimes,
  791. StartTime = p.GenerationTime,
  792. CreationTime = p.CreationTime,
  793. IntervalTime = SqlFunc.DateDiff(DateType.Second, p.GenerationTime.Value, p.LastTime.Value),
  794. CallId = p.CallId,
  795. CallLogId = p.CallLogId,
  796. CallDirection = p.CallDirection,
  797. OnState = p.OnState,
  798. p.RequestData
  799. })
  800. .MergeTable()
  801. .Where(d => d.index == 1)
  802. .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == true, d => SqlFunc.DateDiff(DateType.Second, d.StartTime.Value, d.LastTime.Value) <= 180)//及时上传
  803. .WhereIF(dto.IsSuccess.HasValue && dto.IsSuccess == false, d => SqlFunc.DateDiff(DateType.Second, d.StartTime.Value, d.LastTime.Value) > 180)//不及时上传
  804. .OrderByDescending(d => d.CreationTime)
  805. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  806. return new PagedDto<object>(total, items);
  807. }
  808. /// <summary>
  809. /// 查询没匹配到通话记录的电话来源工单
  810. /// </summary>
  811. /// <param name="dto"></param>
  812. /// <returns></returns>
  813. [HttpGet("getordermatchingcalllist")]
  814. [AllowAnonymous]
  815. public async Task<PagedDto<object>> GetOrderMatchingCallList([FromQuery] QuerySendTaskDto dto)
  816. {
  817. if (!dto.StartTime.HasValue)
  818. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  819. if (!dto.EndTime.HasValue)
  820. dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  821. RefAsync<int> total = 0;
  822. string strSql = @"SELECT ""SCO"".""ProvinceNo"",""FirstTime"",
  823. ""LastTime"",""SendTimes"", ""StartTime"",""CreationTime"",""RequestData"",""ExpiredTime"", ""CaseSource"",""OrderId""
  824. FROM(
  825. SELECT *
  826. FROM
  827. (
  828. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" DESC) AS ""newIndex"",""ProvinceNo"",""FirstTime"",""OrderId"",
  829. ""LastTime"",""SendTimes"",""GenerationTime""AS ""StartTime"",""CreationTime"",""RequestData"",""ExpiredTime"",""RequestData""->>'CaseSource' AS ""CaseSource""
  830. FROM ""ds_send_task_submit_case_info""
  831. where ""GenerationTime"" >= '{0}' AND ""GenerationTime"" <= '{1}'
  832. AND ""LastTime"" >= '{0}' AND ""LastTime"" <= '{1}' AND ""IsSuccess"" = 1
  833. ) ""SCI"" WHERE ""newIndex""=1 AND ""CaseSource"" = 'RGDH'
  834. ) ""SCO""
  835. LEFT JOIN
  836. (
  837. SELECT * FROM (
  838. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""ProvinceNo"",""CallId"",""CallLogId""
  839. FROM
  840. ""ds_send_task_submit_case_record""
  841. WHERE
  842. ""GenerationTime"" >= '{0}' AND ""GenerationTime"" <= '{1}'
  843. AND ""LastTime"" >= '{0}' AND ""LastTime"" <= '{1}' AND ""IsSuccess"" = 1
  844. ) ""SCR"" WHERE ""newIndex""=1
  845. )""SCRC""
  846. ON ""SCO"".""ProvinceNo""=""SCRC"".""ProvinceNo""
  847. WHERE ""SCRC"".""ProvinceNo"" IS NULL ";
  848. strSql = string.Format(strSql, dto.StartTime, dto.EndTime);
  849. return await _waitSendTaskRepository.GetDataBySql(strSql, dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
  850. }
  851. /// <summary>
  852. /// 及时率查询
  853. /// </summary>
  854. /// <param name="dto"></param>
  855. /// <returns></returns>
  856. [HttpGet("getcalculateuploadrate")]
  857. [AllowAnonymous]
  858. public async Task<CalculateUploadRateDto> GetCalculateUploadRate([FromQuery] QuerySendTaskDto dto)
  859. {
  860. if (!dto.StartTime.HasValue)
  861. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  862. if (!dto.EndTime.HasValue)
  863. dto.EndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  864. CalculateUploadRateDto calculateUploadRateDto = new();
  865. //工单
  866. var orderRate = await _dsOrderSendRepository.Queryable()
  867. .LeftJoin<DsTelCall>((p, o) => p.CallId == o.CallId)
  868. .Where((p, o) => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime && p.FirstSendProvinceTime >= dto.StartTime && p.FirstSendProvinceTime <= dto.EndTime)
  869. .Where((p, o) => p.FirstSendProvinceTime.HasValue && p.StartTime.HasValue)
  870. .Select((p, o) => new
  871. {
  872. p.OrderId,
  873. p.StartTime,
  874. p.FirstSendProvinceTime,
  875. p.CaseSourceCode,
  876. o.CallId,
  877. p.HandleState,
  878. p.ExpiredTime,
  879. p.ActualHandleTime
  880. }).MergeTable()
  881. .Select(p => new CalculateUploadRateDto
  882. {
  883. OrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.OrderId != null, 1, 0)),//总工单数
  884. OrderTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) <= 180, 1, 0)),//及时
  885. OrderNotTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.StartTime.Value, p.FirstSendProvinceTime.Value) > 180, 1, 0)),//为及时
  886. RGDHOrderCount = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH", 1, 0)),
  887. ContainTel = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH" && p.CallId != null, 1, 0)),//匹配数
  888. NotContainTel = SqlFunc.AggregateSum(SqlFunc.IIF(p.CaseSourceCode == "RGDH" && p.CallId == null, 1, 0)),//未匹配数
  889. HandleEndOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.HandleState == "办理完成", 1, 0)),//办结件数
  890. HandleEndOrderOnTime = SqlFunc.AggregateSum(SqlFunc.IIF(p.HandleState == "办理完成" && p.ExpiredTime > p.ActualHandleTime, 1, 0)),//按时办结件数
  891. })
  892. .FirstAsync();
  893. //电话
  894. var callRate = await _dsTelCallRepository.Queryable()
  895. .Where(p => p.OverTime >= dto.StartTime && p.OverTime <= dto.EndTime && p.FirstSendProvinceTime >= dto.StartTime && p.FirstSendProvinceTime <= dto.EndTime)
  896. .Where(p => p.FirstSendProvinceTime.HasValue && p.OverTime.HasValue)
  897. .Select(p => new
  898. {
  899. p.CallId,
  900. p.OverTime,
  901. p.FirstSendProvinceTime,
  902. p.OnState
  903. })
  904. .MergeTable()
  905. .Select(p => new CalculateUploadRateDto
  906. {
  907. TelCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.CallId != null, 1, 0)),//总电话数
  908. TelTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) <= 180, 1, 0)),//及时
  909. TelNotTimely = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.DateDiff(DateType.Second, p.OverTime.Value, p.FirstSendProvinceTime.Value) > 180, 1, 0)),//为及时
  910. TelConnectCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.OnState == "On", 1, 0)),//接通数量
  911. TelNotConnectCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.OnState != "On", 1, 0)),//未接通数量
  912. })
  913. .FirstAsync();
  914. //回访
  915. var visitList = await _dsOrderVisitSendRepository.Queryable()
  916. .Where(p => p.VisitTime >= dto.StartTime && p.VisitTime <= dto.EndTime && p.IsProvince == false && p.FirstSendProvinceTime >= dto.StartTime && p.FirstSendProvinceTime <= dto.EndTime)
  917. .Select(p => new
  918. {
  919. p.SubjectResultSatifyCode,
  920. p.VisitTime,
  921. p.IsProvince,
  922. p.Source,
  923. p.ProvinceNo
  924. })
  925. .MergeTable()
  926. .Select(p => new CalculateUploadRateDto
  927. {
  928. VisitCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.SubjectResultSatifyCode != null, 1, 0)),//回访总量
  929. SatisfactionCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.SubjectResultSatifyCode != null && p.SubjectResultSatifyCode != "2", 1, 0)),//满意数量
  930. NotSatisfiedCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(p.SubjectResultSatifyCode != null && p.SubjectResultSatifyCode == "2", 1, 0)),//不满意数量
  931. })
  932. .FirstAsync();
  933. //查询知识总量
  934. calculateUploadRateDto.KnowledgeCount = await _knowledgeRawDataRepository.Queryable()
  935. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  936. .CountAsync();
  937. //修改知识库量-以第一次上传成功的记录为准
  938. calculateUploadRateDto.UpdateKnowledgeCount = await _waitSendTaskProvinceOtherRepository.Queryable()
  939. .Where(p => p.FirstTime >= dto.StartTime && p.FirstTime <= dto.EndTime && p.TaskType == "GetKnowledgeInfoUpdate")
  940. .Select(p => new
  941. {
  942. p.Id,
  943. RowID = SqlFunc.RowNumber($"{p.CreationTime} asc ")
  944. })
  945. .MergeTable()
  946. .Where(p => p.RowID == 1)
  947. .CountAsync();
  948. //工单
  949. if (orderRate != null)
  950. {
  951. calculateUploadRateDto.OrderCountNum = orderRate.OrderCountNum;
  952. calculateUploadRateDto.OrderTimely = orderRate.OrderTimely;
  953. calculateUploadRateDto.OrderNotTimely = orderRate.OrderNotTimely;
  954. calculateUploadRateDto.RGDHOrderCount = orderRate.RGDHOrderCount;
  955. calculateUploadRateDto.ContainTel = orderRate.ContainTel;
  956. calculateUploadRateDto.NotContainTel = orderRate.NotContainTel;
  957. calculateUploadRateDto.HandleEndOrderNum = orderRate.HandleEndOrderNum;
  958. calculateUploadRateDto.HandleEndOrderOnTime = orderRate.HandleEndOrderOnTime;
  959. }
  960. //电话
  961. if (callRate != null)
  962. {
  963. calculateUploadRateDto.TelCountNum = callRate.TelCountNum;
  964. calculateUploadRateDto.TelTimely = callRate.TelTimely;
  965. calculateUploadRateDto.TelNotTimely = callRate.TelNotTimely;
  966. calculateUploadRateDto.TelConnectCountNum = callRate.TelConnectCountNum;
  967. calculateUploadRateDto.TelNotConnectCountNum = callRate.TelNotConnectCountNum;
  968. }
  969. //回访
  970. if (visitList != null)
  971. {
  972. calculateUploadRateDto.VisitCountNum = visitList.VisitCountNum;
  973. calculateUploadRateDto.SatisfactionCountNum = visitList.SatisfactionCountNum;
  974. calculateUploadRateDto.NotSatisfiedCountNum = visitList.NotSatisfiedCountNum;
  975. }
  976. return calculateUploadRateDto;
  977. }
  978. #endregion
  979. #endregion
  980. #region 系统配置
  981. /// <summary>
  982. /// 上传数据系统配置-查询详情
  983. /// </summary>
  984. /// <returns></returns>
  985. [AllowAnonymous]
  986. [HttpGet("info-configurationinformation")]
  987. public async Task<ConfigurationInformation> GetStandard()
  988. {
  989. var sandard = await _configurationInformationRepository.Queryable().FirstAsync();
  990. if (sandard == null)
  991. {
  992. ConfigurationInformation configuration = new()
  993. {
  994. CrntSeatNum = 0,
  995. CrntTelNum = 0,
  996. SeatNum = 0,
  997. SeatHwyNum = 0,
  998. MissedCallCount = 0
  999. };
  1000. var Id = await _configurationInformationRepository.AddAsync(configuration, HttpContext.RequestAborted);
  1001. return await _configurationInformationRepository.GetAsync(Id, HttpContext.RequestAborted);
  1002. }
  1003. return sandard;
  1004. }
  1005. /// <summary>
  1006. /// 上传数据系统配置-修改
  1007. /// </summary>
  1008. /// <param name="dto"></param>
  1009. /// <returns></returns>
  1010. [AllowAnonymous]
  1011. [HttpPut("update-configurationinformation")]
  1012. public async Task UpdateStandard([FromBody] ConfigurationInformationDto dto)
  1013. {
  1014. var standard = await _configurationInformationRepository.GetAsync(dto.Id);
  1015. if (standard != null)
  1016. {
  1017. _mapper.Map(dto, standard);
  1018. await _configurationInformationRepository.UpdateAsync(standard, HttpContext.RequestAborted);
  1019. await _configurationInformationCache.GetOrSetAsync(ConstantSettings.ConfigurationInformationCacheKey, dto, cancellationToken: HttpContext.RequestAborted);
  1020. }
  1021. }
  1022. #endregion
  1023. #region 对接平台用户管理
  1024. /// <summary>
  1025. /// 对接平台用户管理
  1026. /// </summary>
  1027. /// <param name="dto"></param>
  1028. /// <returns></returns>
  1029. [HttpPost("adduserinfo")]
  1030. [AllowAnonymous]
  1031. public async Task AddUserInfo([FromBody] AddUserInfoDto dto)
  1032. {
  1033. var tokenInfo = _mapper.Map<DsUserTokenInfo>(dto);
  1034. if (string.IsNullOrEmpty(tokenInfo.AuthIP))
  1035. tokenInfo.AuthIP = "*";
  1036. await _dsUserTokenInfoRepository.AddAsync(tokenInfo, HttpContext.RequestAborted);
  1037. }
  1038. /// <summary>
  1039. /// 查询对接平台用户信息
  1040. /// </summary>
  1041. /// <param name="dto"></param>
  1042. /// <returns></returns>
  1043. [HttpGet("get-user-info-list")]
  1044. [AllowAnonymous]
  1045. public async Task<PagedDto<DsUserTokenInfo>> GetUserInfoList([FromQuery] PagedKeywordRequest dto)
  1046. {
  1047. RefAsync<int> total = 0;
  1048. var items = await _dsUserTokenInfoRepository.Queryable()
  1049. .WhereIF(!string.IsNullOrEmpty(dto.Keyword), p => p.PlatformSourceName.Contains(dto.Keyword))
  1050. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  1051. return new PagedDto<DsUserTokenInfo>(total, items);
  1052. }
  1053. #endregion
  1054. #region 推送业务系统失败
  1055. /// <summary>
  1056. /// 查询推送业务系统失败数据
  1057. /// </summary>
  1058. /// <param name="dto"></param>
  1059. /// <returns></returns>
  1060. [HttpGet("getsendhotlineerrordata")]
  1061. [AllowAnonymous]
  1062. public async Task<PagedDto<SendHotlineErrorData>> GetSendHotlineErrorData([FromQuery] QuerySendTaskDto dto)
  1063. {
  1064. if (!dto.StartTime.HasValue)
  1065. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  1066. if (!dto.EndTime.HasValue)
  1067. dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  1068. //数据查询
  1069. RefAsync<int> total = 0;
  1070. var items = await _sendHotlineErrorDataRepository.Queryable()
  1071. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  1072. .OrderBy(p => p.CreationTime)
  1073. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  1074. return new PagedDto<SendHotlineErrorData>(total, items);
  1075. }
  1076. /// <summary>
  1077. /// 从新推送
  1078. /// </summary>
  1079. /// <param name="Id"></param>
  1080. /// <returns></returns>
  1081. [HttpGet("pushfromhotlinedata")]
  1082. [AllowAnonymous]
  1083. public async Task PushFromHotlineData(string Id)
  1084. {
  1085. var data = await _sendHotlineErrorDataRepository.GetAsync(p => p.Id == Id, HttpContext.RequestAborted);
  1086. if (data == null)
  1087. throw UserFriendlyException.SameMessage("重新推送失败");
  1088. var userInfo = Request.Headers["userinfo"].ToString();
  1089. if (string.IsNullOrEmpty(userInfo))
  1090. throw UserFriendlyException.SameMessage("用户信息获取失败");
  1091. var pkcs1 = new RsaPkcs1Util(Encoding.UTF8, PublicKey, PrivateKey);
  1092. var info = pkcs1.Decrypt(userInfo, RSAEncryptionPadding.Pkcs1);
  1093. if (info == null)
  1094. throw UserFriendlyException.SameMessage("用户信息获取失败");
  1095. var user = System.Text.Json.JsonSerializer.Deserialize<UserInfo>(info);
  1096. if (user == null)
  1097. throw UserFriendlyException.SameMessage("用户信息获取失败");
  1098. bool isSuccess = true;
  1099. string error = "";
  1100. //调用工单创建接口
  1101. try
  1102. {
  1103. //推业务系统
  1104. if (data.ReceiveServiceInterface == "rest/receive_case_info")
  1105. {
  1106. var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>(data.Path, data.HttpMethod, data.RequestData);
  1107. if (result == null || result.code != 0)
  1108. {
  1109. isSuccess = false;
  1110. error = result?.message;
  1111. }
  1112. }
  1113. //推旧系统
  1114. if (data.ReceiveServiceInterface == "SendOldHotlineData")
  1115. {
  1116. ConfigurationSendDataOld configSendDataOld = new();
  1117. if (_sharingConfigurationManager.IsCity(ConfigurationConsts.YiBin))
  1118. configSendDataOld = _sharingConfigurationManager.GetYiBinConfig().SendDataOld;
  1119. else if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
  1120. configSendDataOld = _sharingConfigurationManager.GetZiGongConfig().SendDataOld;
  1121. else if (_sharingConfigurationManager.IsCity(ConfigurationConsts.LuZhou))
  1122. configSendDataOld = _sharingConfigurationManager.GetLuZhouConfig().SendDataOld;
  1123. //var configSendDataOld = _sharingConfigurationManager.GetYiBinConfig().SendDataOld;
  1124. //先验证是否开启推送
  1125. if (configSendDataOld == null || !configSendDataOld.IsSend)
  1126. return;
  1127. var url = configSendDataOld.AddressUrl + data.Path;
  1128. var response = await _fwClient.RequestAsync<FwResponse>(url, data.HttpMethod, data.RequestData, HttpContext.RequestAborted);
  1129. if (response == null && response.code != 1)
  1130. {
  1131. isSuccess = false;
  1132. error = response?.msg;
  1133. }
  1134. }
  1135. }
  1136. catch (Exception ex)
  1137. {
  1138. isSuccess = false;
  1139. error = ex.Message;
  1140. }
  1141. //写入操作记录
  1142. UserOperationLog operationLog = new()
  1143. {
  1144. DataId = data.Id,
  1145. NewDataId = data.Id,
  1146. PlatformSource = EPlatformSource.Hotline,
  1147. ReceiveServiceInterface = data.ReceiveServiceInterface,
  1148. Path = data.Path,
  1149. RequestData = data.RequestData,
  1150. UserId = user.UserId,
  1151. UserName = user.UserName,
  1152. OrgCode = user.OrgCode,
  1153. OrgName = user.OrgName
  1154. };
  1155. await _userOperationLogRepository.AddAsync(operationLog, HttpContext.RequestAborted);
  1156. //推送失败添加
  1157. if (!isSuccess)
  1158. {
  1159. data.SendTimes = data.SendTimes + 1;
  1160. data.ErrorMessage = error;
  1161. await _sendHotlineErrorDataRepository.UpdateAsync(data, HttpContext.RequestAborted);
  1162. }
  1163. else
  1164. {
  1165. await _sendHotlineErrorDataRepository.RemoveAsync(data, cancellationToken: HttpContext.RequestAborted);
  1166. await _sendFwErrorDataRepository.RemoveAsync(p => p.Id == data.DataId, cancellationToken: HttpContext.RequestAborted);
  1167. }
  1168. }
  1169. #endregion
  1170. #region 省查询
  1171. /// <summary>
  1172. /// 查询附件信息
  1173. /// </summary>
  1174. /// <param name="dto"></param>
  1175. /// <returns></returns>
  1176. [HttpGet("getcasematerialinfolist")]
  1177. [AllowAnonymous]
  1178. public async Task<PagedDto<DsGetCaseMaterialInfo>> GetCaseMaterialInfoList([FromQuery] QueryCaseMaterialInfoDto dto)
  1179. {
  1180. RefAsync<int> total = 0;
  1181. var items = await _getCaseMaterialInfoRepository.Queryable()
  1182. .WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime.Value)
  1183. .WhereIF(dto.EndTime.HasValue, p => p.CreationTime >= dto.EndTime.Value)
  1184. .WhereIF(!string.IsNullOrEmpty(dto.CaseSerial), p => p.CaseSerial == dto.CaseSerial)
  1185. .OrderByDescending(p => p.CreationTime)
  1186. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  1187. return new PagedDto<DsGetCaseMaterialInfo>(total, items);
  1188. }
  1189. /// <summary>
  1190. /// 修改工单来源推送省平台
  1191. /// </summary>
  1192. /// <returns></returns>
  1193. [HttpGet("updateordersource")]
  1194. [AllowAnonymous]
  1195. public async Task UpdateOrderSourceAsync()
  1196. {
  1197. //查询数据
  1198. var items = await _dsOrderSendRepository.Queryable()
  1199. .LeftJoin<DsTelCall>((p, o) => p.CallId == o.CallId)
  1200. .Where((p, o) => p.FirstSendProvinceTime >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"))
  1201. && p.FirstSendProvinceTime <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")) && p.CaseSourceCode == "RGDH")
  1202. .Where((p, o) => p.FirstSendProvinceTime.HasValue && p.HandleState == "办理完成")
  1203. .Where((p, o) => o.CallId == null || o.CallId == "")
  1204. .OrderByDescending((p, o) => p.CreationTime)
  1205. .ToListAsync();
  1206. //处理数据
  1207. if (items != null && items.Any())
  1208. {
  1209. // _logger.LogWarning("读取到条数:" + "--------------" + items.Count);
  1210. List<string> Ids = [];
  1211. foreach (var item in items)
  1212. {
  1213. Ids.Add(item.OrderId);
  1214. }
  1215. //推送数据
  1216. if (Ids != null && Ids.Count > 0)
  1217. {
  1218. UpdateOrderSourceChannelDto data = new()
  1219. {
  1220. Ids = Ids,
  1221. IsPush = true
  1222. };
  1223. await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/update-order-sourcechannel", "Post", System.Text.Json.JsonSerializer.Serialize(data));
  1224. }
  1225. }
  1226. }
  1227. #endregion
  1228. /// <summary>
  1229. /// 查询接收到的原始数据
  1230. /// </summary>
  1231. /// <param name="dto"></param>
  1232. /// <returns></returns>
  1233. [HttpGet("get_receive_raw_data")]
  1234. [AllowAnonymous]
  1235. public async Task<PagedDto<DsReceiveHandleData>> GetReceiveRawData([FromQuery] ReportPagedRequest dto)
  1236. {
  1237. RefAsync<int> total = 0;
  1238. var items = await _dsReceiveHandleDataRepository.Queryable()
  1239. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
  1240. .WhereIF(!string.IsNullOrEmpty(dto.Keyword), p => p.OrderNo.Contains(dto.Keyword))
  1241. .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
  1242. if (items != null)
  1243. {
  1244. foreach (var item in items)
  1245. {
  1246. item.ReceiveData = System.Text.RegularExpressions.Regex.Unescape(item.ReceiveData);
  1247. }
  1248. }
  1249. return new PagedDto<DsReceiveHandleData>(total, items);
  1250. }
  1251. /// <summary>
  1252. /// 数据汇聚情况
  1253. /// </summary>
  1254. /// <param name="dto"></param>
  1255. /// <returns></returns>
  1256. [HttpGet("get_data_aggregation_situation")]
  1257. [AllowAnonymous]
  1258. public List<DataAggregationSituationDto> GetDataAggregationSituation([FromQuery] ReportPagedRequest dto)
  1259. {
  1260. string strsql = @"
  1261. /*临时表对象*/
  1262. /*呼入记录 - 以最后同步成功时间为准*/
  1263. CREATE TEMPORARY TABLE ""CASE_RECORD_LAST"" (
  1264. ""OnState"" varchar(16),""CallLogId"" varchar(50)
  1265. ) ON COMMIT PRESERVE ROWS ;
  1266. /*呼入总量、呼入接通量*/
  1267. INSERT INTO ""CASE_RECORD_LAST""(""OnState"",""CallLogId"")
  1268. SELECT ""OnState"",""CallLogId""
  1269. FROM
  1270. (
  1271. SELECT ROW_NUMBER() OVER(PARTITION BY ""CallLogId"" ORDER BY ""LastTime"" DESC) as ""newIndex"",""Id"",""OnState"",""CallLogId""
  1272. FROM ""ds_send_task_submit_case_record""
  1273. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
  1274. ""IsSuccess""=1 AND ""CallDirection""='0'
  1275. ) SCR WHERE ""newIndex""=1 ;
  1276. /*呼入记录 - 以第一次同步成功时间为准*/
  1277. CREATE TEMPORARY TABLE ""CASE_RECORD_FIRST"" (
  1278. ""CallLogId"" varchar(50) ,""GenerationTime"" timestamp,""LastTime"" timestamp
  1279. ) ON COMMIT PRESERVE ROWS ;
  1280. /*呼入上传话务数据总量、呼入及时上传话务数据量*/
  1281. INSERT INTO ""CASE_RECORD_FIRST""(""CallLogId"",""GenerationTime"",""LastTime"")
  1282. SELECT ""CallLogId"",""GenerationTime"",""LastTime""
  1283. FROM
  1284. (
  1285. SELECT ROW_NUMBER() OVER(PARTITION BY ""CallLogId"" ORDER BY ""LastTime"" asc) as ""newIndex"",""GenerationTime"",""LastTime"",""CallLogId""
  1286. FROM ""ds_send_task_submit_case_record""
  1287. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
  1288. ""IsSuccess""=1 AND ""CallDirection""='0'
  1289. ) SCR WHERE ""newIndex""=1 ;
  1290. /*服务工单受理记录 - 以第一次同步成功时间为准*/
  1291. CREATE TEMPORARY TABLE ""CASE_INFO_FIRST"" (
  1292. ""ProvinceNo"" varchar(50) ,""GenerationTime"" timestamp,""LastTime"" timestamp,""CaseSource"" varchar(20)
  1293. )ON COMMIT PRESERVE ROWS ;
  1294. /*上传工单数据总量、及时上传工单数据总量*/
  1295. INSERT INTO ""CASE_INFO_FIRST""(""ProvinceNo"",""GenerationTime"",""LastTime"",""CaseSource"")
  1296. SELECT ""ProvinceNo"",""GenerationTime"",""LastTime"",""CaseSource""
  1297. FROM
  1298. (
  1299. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" asc) as ""newIndex"",""Id"",""GenerationTime"",""LastTime"",""ProvinceNo"", ""CaseSource""
  1300. FROM ""ds_send_task_submit_case_info""
  1301. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
  1302. ""IsSuccess""=1
  1303. ) SCR WHERE ""newIndex""=1 ;
  1304. /*服务工单受理记录 - 以最后一次同步成功时间为准*/
  1305. CREATE TEMPORARY TABLE ""CASE_INFO_LAST"" (
  1306. ""CaseSource"" varchar(50),
  1307. ""ProvinceNo"" varchar(50) ,
  1308. ""TfdBackTimeBf"" timestamp,
  1309. ""CaseProcessType"" varchar(20),
  1310. ""LastTime"" timestamp
  1311. )ON COMMIT PRESERVE ROWS ;
  1312. /*电话工单量、与电话工单匹配的话务数据量*/
  1313. INSERT INTO ""CASE_INFO_LAST""(""CaseSource"",""ProvinceNo"",""TfdBackTimeBf"",""CaseProcessType"",""LastTime"")
  1314. select ""CaseSource"",""ProvinceNo"",(SELECT ""TfdBackTimeBf"" ::timestamp) AS ""TfdBackTimeBf"",""CaseProcessType"",""LastTime""
  1315. from
  1316. (
  1317. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" DESC) as ""newIndex"",""Id"",""CaseSource"",""ProvinceNo"",
  1318. ""RequestData""->> 'TfdBackTimeBf' AS ""TfdBackTimeBf""
  1319. ,""RequestData""->> 'CaseProcessType' ""CaseProcessType"",""LastTime""
  1320. FROM ""ds_send_task_submit_case_info""
  1321. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND
  1322. ""IsSuccess""=1
  1323. ) SCR WHERE ""newIndex""=1 ;
  1324. /*服务工单结果记录 - 以第一次同步成功时间为准*/
  1325. CREATE TEMPORARY TABLE ""CASE_RESULT_FIRST"" (
  1326. ""ProvinceNo"" varchar(50) ,
  1327. ""FiledTime"" timestamp
  1328. )ON COMMIT PRESERVE ROWS ;
  1329. INSERT INTO ""CASE_RESULT_FIRST""(""ProvinceNo"",""FiledTime"")
  1330. SELECT ""ProvinceNo"",(SELECT ""FiledTime"" ::timestamp) AS""FiledTime""
  1331. FROM
  1332. (
  1333. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo"",""RequestData""->> 'FinishTime' AS""FiledTime""
  1334. FROM ""ds_send_task_submit_case_result""
  1335. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""FiledTime"">='{0}' AND ""FiledTime""<='{1}' AND
  1336. ""IsSuccess""=1
  1337. ) SCR WHERE ""newIndex""=1 ;
  1338. /*服务工单结果记录 - 以最后一次同步成功时间为准*/
  1339. CREATE TEMPORARY TABLE ""CASE_RESULT_LAST"" (
  1340. ""ProvinceNo"" varchar(50) ,
  1341. ""FiledTime"" timestamp
  1342. )ON COMMIT PRESERVE ROWS ;
  1343. INSERT INTO ""CASE_RESULT_LAST""(""ProvinceNo"",""FiledTime"")
  1344. SELECT ""ProvinceNo"",(SELECT ""FiledTime"" ::timestamp) AS ""FiledTime""
  1345. FROM
  1346. (
  1347. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""LastTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo"",""RequestData""->> 'FinishTime' AS ""FiledTime""
  1348. FROM ""ds_send_task_submit_case_result""
  1349. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""FiledTime"">='{0}' AND ""FiledTime""<='{1}' AND
  1350. ""IsSuccess""=1
  1351. ) SCR WHERE ""newIndex""=1 ;
  1352. /*结转工单记录*/
  1353. CREATE TEMPORARY TABLE ""CASE_RELAY"" (
  1354. ""ProvinceNo"" varchar(50) ,
  1355. ""TfdBackTimeBf"" timestamp
  1356. )ON COMMIT PRESERVE ROWS ;
  1357. INSERT INTO ""CASE_RELAY""(""ProvinceNo"",""TfdBackTimeBf"")
  1358. SELECT ""ProvinceNo"",(SELECT ""TfdBackTimeBf"" ::timestamp) AS""TfdBackTimeBf""
  1359. FROM
  1360. (
  1361. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""Id"",""ProvinceNo"",
  1362. ""RequestData""->> 'TfdBackTimeBf' AS ""TfdBackTimeBf"", ""RequestData""->> 'CaseProcessType' ""CaseProcessType""
  1363. FROM ""ds_send_task_submit_case_info""
  1364. WHERE ""GenerationTime"">='{2}' AND ""GenerationTime""<='{0}' AND ""IsSuccess""=1
  1365. ) SCR WHERE ""newIndex""=1 ;
  1366. select
  1367. CASE WHEN ""呼入总量"">0 THEN CAST(CAST(((""呼入接通量""*1.0)/""呼入总量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""CalConnectionRate"" ,
  1368. CASE WHEN ""电话工单量"">0 THEN CAST(CAST(((""与电话工单匹配的话务数据量""*1.0)/""电话工单量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""MatchingRateOfCallData"" ,
  1369. CASE WHEN ""呼入上传话务数据总量"">0 THEN CAST(CAST(((""呼入及时上传话务数据量""*1.0)/""呼入上传话务数据总量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""TimelyUploadRateOfCallData"" ,
  1370. CASE WHEN ""上传工单数据总量"">0 THEN CAST(CAST(((""及时上传工单数据总量""*1.0)/""上传工单数据总量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""TimelyUploadRateOfOrderData"" ,
  1371. (""上传工单数据总量""+""结转已办件量""+""结转待办件量"") AS ""AcceptanceQuantity"",
  1372. ""办结件数""AS ""NumbeOfCompletedCases"",
  1373. CASE WHEN (""时间范围按时办结量""+""结转按时已办结量""+""时间范围超期办结量""+""结转超期已办结量""+""时间范围超期未办量""+""结转超期未办量"")>0
  1374. THEN CAST(CAST((((""时间范围按时办结量""+""结转按时已办结量"")*1.0)/(""时间范围按时办结量""+""结转按时已办结量""+""时间范围超期办结量""+""结转超期已办结量""+""时间范围超期未办量""+""结转超期未办量"")) as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""OnTimeCompletionRate"" ,
  1375. ""回访量"" AS ""FollowUpVolume"",
  1376. ""不满意件"" AS ""DissatisfiedItems"",
  1377. CASE WHEN ""回访量"">0 THEN CAST(CAST(((""不满意件""*1.0)/""回访量"") as decimal(10,5))*100 as decimal(10,3)) ELSE 0 END AS ""DissatisfactionRate"" ,
  1378. ""知识库总量"" AS ""KnowledgeTotalNum"",
  1379. ""更新知识量"" AS ""KnowledgeUpdateTotalNum"",
  1380. ""省交办单超期量"" as ""OverdueDeliveryOrder""
  1381. FROM (
  1382. SELECT
  1383. (
  1384. SELECT COUNT(0) ""呼入总量"" FROM ""CASE_RECORD_LAST""
  1385. ) ""呼入总量"",
  1386. (
  1387. SELECT COUNT(0) ""呼入接通量"" FROM ""CASE_RECORD_LAST"" WHERE ""OnState""='1'
  1388. ) ""呼入接通量"",
  1389. (
  1390. SELECT COUNT(0) ""呼入上传话务数据总量"" FROM ""CASE_RECORD_FIRST""
  1391. ) ""呼入上传话务数据总量"",
  1392. (
  1393. SELECT COUNT(0) ""呼入及时上传话务数据量"" FROM ""CASE_RECORD_FIRST"" WHERE EXTRACT(EPOCH FROM (""GenerationTime"" - ""LastTime"")) < 180
  1394. ) ""呼入及时上传话务数据量"",
  1395. (
  1396. SELECT COUNT(0) ""上传工单数据总量"" FROM ""CASE_INFO_FIRST""
  1397. ) ""上传工单数据总量"",
  1398. (
  1399. SELECT COUNT(0) ""及时上传工单数据总量"" FROM ""CASE_INFO_FIRST"" WHERE EXTRACT(EPOCH FROM (""GenerationTime"" - ""LastTime"")) < 180
  1400. ) ""及时上传工单数据总量"",
  1401. (
  1402. select COUNT(0) ""电话工单量"" from ""CASE_INFO_LAST"" where ""CaseSource""='RGDH'
  1403. ) ""电话工单量"",
  1404. (
  1405. SELECT COUNT(0) ""与电话工单匹配的话务数据量"" FROM
  1406. (
  1407. select ""ProvinceNo"" from ""CASE_INFO_LAST"" where ""CaseSource""='RGDH'
  1408. ) ""SCI"" INNER JOIN
  1409. (
  1410. SELECT ""Id"",""ProvinceNo"" FROM
  1411. (
  1412. SELECT ROW_NUMBER() OVER(PARTITION BY ""CallId"",""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""Id"",""ProvinceNo""
  1413. FROM ""ds_send_task_submit_case_record""
  1414. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""GenerationTime"">='{0}' AND ""GenerationTime""<='{1}' AND ""IsSuccess""=1
  1415. ) SCR WHERE ""newIndex""=1
  1416. ) ""SCR"" ON ""SCI"".""ProvinceNo"" = ""SCR"".""ProvinceNo""
  1417. ) ""与电话工单匹配的话务数据量"",
  1418. (
  1419. SELECT COUNT(0) ""结转已办件量"" FROM
  1420. (
  1421. SELECT ""ProvinceNo"" from ""CASE_RESULT_FIRST""
  1422. )""SCR""
  1423. INNER JOIN ""CASE_RELAY"" ""SCI"" ON ""SCR"".""ProvinceNo"" = ""SCI"".""ProvinceNo""
  1424. ) ""结转已办件量"",
  1425. (
  1426. SELECT COUNT(0) ""结转待办件量"" FROM ""CASE_RELAY"" ""CR""
  1427. WHERE NOT EXISTS(SELECT ""Id"" FROM ""ds_send_task_submit_case_result"" WHERE ""ProvinceNo"" = ""CR"".""ProvinceNo"" AND ""IsSuccess""=1)
  1428. ) ""结转待办件量"",
  1429. (
  1430. SELECT COUNT(0) ""办结件数"" FROM ""CASE_RESULT_FIRST"" ""CRF""
  1431. WHERE EXISTS (SELECT ""Id"" FROM ""ds_send_task_submit_case_info"" WHERE ""ProvinceNo"" = ""CRF"".""ProvinceNo"" AND ""IsSuccess""=1)
  1432. ) ""办结件数"",
  1433. (
  1434. SELECT COUNT(0) ""时间范围按时办结量"" FROM ""CASE_INFO_LAST"" ""SCI""
  1435. INNER JOIN ""CASE_RESULT_LAST"" ""SCR"" ON ""SCI"".""ProvinceNo"" = ""SCR"".""ProvinceNo""
  1436. WHERE ""TfdBackTimeBf"" >= ""FiledTime""
  1437. ) ""时间范围按时办结量"",
  1438. (
  1439. SELECT COUNT(0) ""结转按时已办结量"" FROM ""CASE_RESULT_FIRST"" ""SCR""
  1440. INNER JOIN ""CASE_RELAY"" ""SCI"" ON ""SCR"".""ProvinceNo"" = ""SCI"".""ProvinceNo""
  1441. WHERE ""TfdBackTimeBf"" >= ""FiledTime""
  1442. ) ""结转按时已办结量"",
  1443. (
  1444. SELECT COUNT(0) ""时间范围超期办结量"" FROM ""CASE_INFO_LAST"" ""SCI""
  1445. INNER JOIN ""CASE_RESULT_LAST"" ""SCR"" ON ""SCI"".""ProvinceNo"" = ""SCR"".""ProvinceNo""
  1446. WHERE ""FiledTime"" > ""TfdBackTimeBf""
  1447. ) ""时间范围超期办结量"",
  1448. (
  1449. SELECT COUNT(0) ""结转超期已办结量"" FROM ""CASE_RESULT_FIRST"" ""SCR""
  1450. INNER JOIN ""CASE_RELAY"" ""SCI"" ON ""SCR"".""ProvinceNo"" = ""SCI"".""ProvinceNo""
  1451. WHERE ""FiledTime"" > ""TfdBackTimeBf""
  1452. ) ""结转超期已办结量"",
  1453. (
  1454. SELECT COUNT(0) ""时间范围超期未办量"" FROM ""CASE_INFO_LAST"" ""CIL""
  1455. WHERE '{1}' > ""TfdBackTimeBf"" AND
  1456. NOT EXISTS(SELECT ""Id"" FROM ""ds_send_task_submit_case_result"" WHERE ""CIL"".""ProvinceNo"" = ""ProvinceNo"" AND ""LastTime""<='{1}' AND ""IsSuccess""=1)
  1457. ) ""时间范围超期未办量"",
  1458. (
  1459. SELECT COUNT(0) ""结转超期未办量"" FROM ""CASE_RELAY"" ""CR""
  1460. WHERE NOT EXISTS(SELECT ""Id"" FROM ""ds_send_task_submit_case_result"" WHERE ""CR"".""ProvinceNo"" = ""ProvinceNo"" AND ""IsSuccess""=1) AND now() > ""TfdBackTimeBf""
  1461. ) ""结转超期未办量"",
  1462. (
  1463. SELECT COUNT(0) ""回访量"" FROM
  1464. (
  1465. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo"" FROM ""ds_send_task_province_other""
  1466. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""VisitTime""='{0}' AND ""VisitTime""<='{1}' AND ""IsSuccess""=1
  1467. ) ""SVI"" WHERE ""newIndex""=1
  1468. AND EXISTS (SELECT ""Id"" FROM ""ds_send_task_submit_case_info""
  1469. WHERE ""ProvinceNo"" = ""ProvinceNo"" AND ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""IsSuccess""=1 )
  1470. ) ""回访量"",
  1471. (
  1472. SELECT COUNT(0) ""不满意件""FROM
  1473. (
  1474. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" DESC) as ""newIndex"",""Id"",""ProvinceNo"",""SubjectResultSatify"" FROM ""ds_send_task_province_other""
  1475. WHERE ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""VisitTime"">='{0}' AND ""VisitTime""<='{1}' AND ""IsSuccess""=1
  1476. ) ""SVI""
  1477. WHERE ""newIndex""=1 AND (""SubjectResultSatify""='1' OR ""SubjectResultSatify""='2') AND EXISTS (
  1478. SELECT ""Id"" FROM ""ds_send_task_submit_case_info""
  1479. WHERE ""ProvinceNo"" = ""ProvinceNo"" AND ""LastTime"">='{0}' AND ""LastTime""<='{1}' AND ""IsSuccess""=1 )
  1480. ) ""不满意件"",
  1481. (
  1482. SELECT COUNT(0) ""知识库总量"" FROM ""ds_send_task_province_other"" WHERE ""CreationTime"" <= '{1}' and ""IsSuccess""=1 and ""Path""='get_knowledge_info_send'
  1483. ) ""知识库总量"",
  1484. (
  1485. SELECT COUNT(0) ""更新知识量"" FROM
  1486. (
  1487. SELECT ROW_NUMBER() OVER(PARTITION BY ""ProvinceNo"" ORDER BY ""CreationTime"" ASC) as ""newIndex"",""Id"",""ProvinceNo""
  1488. FROM ""ds_send_task_province_other""
  1489. WHERE ""CreationTime"">='{0}' AND ""CreationTime""<='{1}' and ""IsSuccess""=1 and ""Path""='get_knowledge_info_update'
  1490. ) ""GKIU"" WHERE ""newIndex""=1
  1491. ) ""更新知识量"",
  1492. (
  1493. 0
  1494. ) ""省交办单超期量""
  1495. )""_data""
  1496. ";
  1497. strsql = string.Format(strsql, dto.StartTime, dto.EndTime, dto.StartTime.Value.AddMonths(-3));
  1498. return _waitSendTaskRepository.GetDataAggregationSituation(strsql);
  1499. }
  1500. }
  1501. }