|
@@ -0,0 +1,128 @@
|
|
|
+using DataSharing.SendTask;
|
|
|
+using DataSharing.Share.Dtos.OtherPlatformsYB;
|
|
|
+using Microsoft.Extensions.Logging;
|
|
|
+using System.Net;
|
|
|
+using System.Text;
|
|
|
+using XF.Domain.Dependency;
|
|
|
+using XF.Domain.Repository;
|
|
|
+
|
|
|
+namespace DataSharing.OtherPlatformsYB
|
|
|
+{
|
|
|
+ public class ZzptPusherProviderService : IZzptPusherProviderService, IScopeDependency
|
|
|
+ {
|
|
|
+ private readonly ILogger<ZzptPusherProviderService> _logger;
|
|
|
+ private readonly IChannelConfigurationManager _channelConfigurationManager;
|
|
|
+ private readonly IRepository<DsSendTask> _dsSendTaskRepository;
|
|
|
+ private readonly IRepository<DsSendTaskInfo> _dsSendTaskInfoRepository;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="logger"></param>
|
|
|
+ /// <param name="channelConfigurationManager"></param>
|
|
|
+ /// <param name="dsSendTaskRepository"></param>
|
|
|
+ /// <param name="dsSendTaskInfoRepository"></param>
|
|
|
+ public ZzptPusherProviderService(ILogger<ZzptPusherProviderService> logger,
|
|
|
+ IChannelConfigurationManager channelConfigurationManager,
|
|
|
+ IRepository<DsSendTask> dsSendTaskRepository,
|
|
|
+ IRepository<DsSendTaskInfo> dsSendTaskInfoRepository)
|
|
|
+ {
|
|
|
+ _logger = logger;
|
|
|
+ _channelConfigurationManager = channelConfigurationManager;
|
|
|
+ _dsSendTaskRepository = dsSendTaskRepository;
|
|
|
+ _dsSendTaskInfoRepository = dsSendTaskInfoRepository;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 综治平台推送数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task SendDataPusher(DsSendTask dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (dto is null || string.IsNullOrEmpty(dto.Request))
|
|
|
+ return;
|
|
|
+
|
|
|
+ var request = dto.Request;
|
|
|
+
|
|
|
+ var dicParam = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, string>>(request);
|
|
|
+ if (dicParam == null || dicParam.Count == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ var config = _channelConfigurationManager.GetConfigurationZzptPlatforms();
|
|
|
+ string baseAddress = config.AddressUrl;
|
|
|
+ if (!baseAddress.EndsWith('/'))
|
|
|
+ baseAddress += "/";
|
|
|
+
|
|
|
+ string strResultJson = PostWebServiceByJson(baseAddress + dto.Path, dto.HttpMethod, dicParam);
|
|
|
+
|
|
|
+ //写入推送明细表
|
|
|
+ DsSendTaskInfo dsSendTaskInfo = new() { TaskId = dto.Id, RequestInfo = strResultJson };
|
|
|
+ if (false == string.IsNullOrEmpty(strResultJson))
|
|
|
+ {
|
|
|
+ var respone = System.Text.Json.JsonSerializer.Deserialize<ZzptDeResponse>(strResultJson);
|
|
|
+ if (respone != null)
|
|
|
+ {
|
|
|
+ #region 处理推送任务表,
|
|
|
+
|
|
|
+ dto.LastTime = DateTime.Now;
|
|
|
+ dto.SendTimes = dto.SendTimes + 1;
|
|
|
+
|
|
|
+ if (dto.FirstTime is null)
|
|
|
+ dto.FirstTime = DateTime.Now;
|
|
|
+
|
|
|
+ if (respone.code)
|
|
|
+ {
|
|
|
+ dto.IsSuccess = true;
|
|
|
+ dsSendTaskInfo.IsSuccess = true;
|
|
|
+ }
|
|
|
+ await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await _dsSendTaskInfoRepository.AddAsync(dsSendTaskInfo, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 需要WebService支持Post调用
|
|
|
+ /// </summary>
|
|
|
+ private string PostWebServiceByJson(string URL, string Method, Dictionary<string, string> Pars)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ string strPars = "";
|
|
|
+ int nIndex = 0;
|
|
|
+ foreach (var item in Pars)
|
|
|
+ {
|
|
|
+ if (0 == nIndex)
|
|
|
+ strPars += "?" + item.Key + "=" + item.Value;
|
|
|
+ else
|
|
|
+ strPars += "&" + item.Key + "=" + item.Value;
|
|
|
+ nIndex++;
|
|
|
+ }
|
|
|
+ string strUrl = URL + strPars;
|
|
|
+ HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);
|
|
|
+ if (Method.ToUpper() == "POST")
|
|
|
+ request.Method = "POST";
|
|
|
+ request.Credentials = CredentialCache.DefaultCredentials;
|
|
|
+ request.Timeout = 10000;
|
|
|
+ byte[] data = Encoding.UTF8.GetBytes(strPars);
|
|
|
+ request.ContentLength = data.Length;
|
|
|
+ Stream writer = request.GetRequestStream();
|
|
|
+ writer.Write(data, 0, data.Length);
|
|
|
+ writer.Close();
|
|
|
+
|
|
|
+ StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
|
|
|
+ String retXml = sr.ReadToEnd();
|
|
|
+ sr.Close();
|
|
|
+ return retXml;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return ex.Message;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|