TANG JIANG 1 year ago
parent
commit
7d8cc3545e

+ 1 - 1
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -1378,7 +1378,7 @@ namespace DataSharing.Application.Receivers
                 {
                     List<FileJson> fileJsons = new() { _mapper.Map<FileJson>(item) };
                     //待推送数据写入待推送表
-                    await InitPushDataAsync("GetCaseMaterialInfo", "get_case_material_info", System.Text.Json.JsonSerializer.Serialize(materialInfo), cancellationToken, fileJson: fileJsons);
+                    await InitPushDataAsync("GetCaseMaterialInfo", "get_case_material_info", System.Text.Json.JsonSerializer.Serialize(materialInfo), cancellationToken, pathType: EPathType.File, fileJson: fileJsons);
                 }
             }
         }

+ 77 - 0
src/DataSharing.Share/Dtos/Enterprise/EnterpriseResponse.cs

@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DataSharing.Share.Dtos.Enterprise
+{
+    /// <summary>
+    /// 接口返回
+    /// </summary>
+    public class EnterpriseResponse
+    {
+        /// <summary>
+        /// 响应码
+        /// </summary>
+        public int code { get; set; }
+
+        /// <summary>
+        /// 是否成功
+        /// </summary>
+        public bool success { get; set; }
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 操作结果
+        /// </summary>
+        public Object data { get; set; }
+    }
+
+    public class EnterpriseDeResponse
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static EnterpriseDeResponse Success(string? description = "")
+        {
+            return new EnterpriseDeResponse
+            {
+                code = "1",
+                msg = (description ?? "您已成功提交数据!")
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static EnterpriseDeResponse Failed(string? code = "0", string? description = "")
+        {
+            return new EnterpriseDeResponse
+            {
+                code = code,
+                msg = (description ?? "接口调用失败!")
+            };
+        }
+
+    }
+}

+ 53 - 0
src/DataSharing.Share/Dtos/Enterprise/TokenEnterprise.cs

@@ -0,0 +1,53 @@
+using System.Text.Json.Serialization;
+
+namespace DataSharing.Share.Dtos.Enterprise
+{
+    /// <summary>
+    /// token 返回值
+    /// </summary>
+    [Serializable]
+    public class TokenEnterprise
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonPropertyName("success")]
+        public bool Success { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonPropertyName("data")]
+        public TokenTokenEnterpriseInfo TokenInfo { get; set; }
+    }
+
+    /// <summary>
+    /// token 内容
+    /// </summary>
+    public class TokenTokenEnterpriseInfo
+    {
+        /// <summary>
+        /// access_token
+        /// </summary>
+        [JsonPropertyName("access_token")]
+        public string AccessToken { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonPropertyName("refresh_token")]
+        public string RefreshToken { get; set; }
+
+        /// <summary>
+        /// token类型
+        /// </summary>
+        [JsonPropertyName("token_type")]
+        public string TokenType { get; set; }
+
+        /// <summary>
+        /// token有效期,单位秒
+        /// </summary>
+        [JsonPropertyName("expires_in")]
+        public string ExpiresIn { get; set; }
+    }
+}

+ 7 - 1
src/DataSharing.Share/Enums/EPathType.cs

@@ -16,10 +16,16 @@ namespace DataSharing.Share.Enums
         [Description("汇聚")]
         HuiJu = 1,
 
+        /// <summary>
+        /// 附件
+        /// </summary>
+        [Description("附件")]
+        File = 2,
+
         /// <summary>
         /// 其他
         /// </summary>
         [Description("其他")]
-        Other = 2,
+        Other = 3,
     }
 }

+ 148 - 0
src/DataSharing/Enterprise/Encoder.cs

@@ -0,0 +1,148 @@
+using System.Collections;
+using System.Text;
+
+namespace DataSharing.Enterprise
+{
+    public static class Encoder
+    {
+        /// <summary>
+        /// 对string 进行 Base64 编码 
+        /// </summary>
+        /// <param name="strMessage">string 参数</param>
+        /// <returns> Base64 编码</returns>
+        public static string Base64Code(string strMessage)
+        {
+            bool flag = string.IsNullOrEmpty(strMessage);
+            string result;
+            if (flag)
+            {
+                result = "";
+            }
+            else
+            {
+                char[] array = new char[]
+                {
+            'A',
+            'B',
+            'C',
+            'D',
+            'E',
+            'F',
+            'G',
+            'H',
+            'I',
+            'J',
+            'K',
+            'L',
+            'M',
+            'N',
+            'O',
+            'P',
+            'Q',
+            'R',
+            'S',
+            'T',
+            'U',
+            'V',
+            'W',
+            'X',
+            'Y',
+            'Z',
+            'a',
+            'b',
+            'c',
+            'd',
+            'e',
+            'f',
+            'g',
+            'h',
+            'i',
+            'j',
+            'k',
+            'l',
+            'm',
+            'n',
+            'o',
+            'p',
+            'q',
+            'r',
+            's',
+            't',
+            'u',
+            'v',
+            'w',
+            'x',
+            'y',
+            'z',
+            '0',
+            '1',
+            '2',
+            '3',
+            '4',
+            '5',
+            '6',
+            '7',
+            '8',
+            '9',
+            '+',
+            '/',
+            '='
+                };
+                byte b = 0;
+                ArrayList arrayList = new ArrayList(Encoding.Default.GetBytes(strMessage));
+                int count = arrayList.Count;
+                int num = count / 3;
+                int num2 = count % 3;
+                bool flag2 = num2 > 0;
+                if (flag2)
+                {
+                    for (int i = 0; i < 3 - num2; i++)
+                    {
+                        arrayList.Add(b);
+                    }
+                    num++;
+                }
+                StringBuilder stringBuilder = new StringBuilder(num * 4);
+                for (int i = 0; i < num; i++)
+                {
+                    byte[] array2 = new byte[]
+                    {
+                (byte)arrayList[i * 3],
+                (byte)arrayList[i * 3 + 1],
+                (byte)arrayList[i * 3 + 2]
+                    };
+                    int[] array3 = new int[4];
+                    array3[0] = array2[0] >> 2;
+                    array3[1] = ((int)(array2[0] & 3) << 4 ^ array2[1] >> 4);
+                    bool flag3 = !array2[1].Equals(b);
+                    if (flag3)
+                    {
+                        array3[2] = ((int)(array2[1] & 15) << 2 ^ array2[2] >> 6);
+                    }
+                    else
+                    {
+                        array3[2] = 64;
+                    }
+                    bool flag4 = !array2[2].Equals(b);
+                    if (flag4)
+                    {
+                        array3[3] = (int)(array2[2] & 63);
+                    }
+                    else
+                    {
+                        array3[3] = 64;
+                    }
+                    stringBuilder.Append(array[array3[0]]);
+                    stringBuilder.Append(array[array3[1]]);
+                    stringBuilder.Append(array[array3[2]]);
+                    stringBuilder.Append(array[array3[3]]);
+                }
+                string text = stringBuilder.ToString();
+                text = text.Replace("=", "@");
+                text = text.Replace("+", "%2B");
+                result = text;
+            }
+            return result;
+        }
+    }
+}

+ 120 - 0
src/DataSharing/Enterprise/EnterpriseClient.cs

@@ -0,0 +1,120 @@
+using DataSharing.Share.Dtos.Enterprise;
+using DataSharing.Share.Dtos.Province;
+using IdentityModel.Client;
+using Microsoft.Extensions.DependencyInjection;
+using System.Net.Http.Headers;
+using XF.Domain.Cache;
+using XF.Domain.Exceptions;
+
+namespace DataSharing.Enterprise
+{
+    public abstract class EnterpriseClient
+    {
+
+        private static readonly string KeyToken = "EnterpriseKeyToken";
+        private readonly IServiceScopeFactory _scopeFactory;
+        public EnterpriseClient(IServiceScopeFactory scopeFactory)
+        {
+            _scopeFactory = scopeFactory;
+        }
+
+        public async Task<TResponse?> RequestAsync<TRequest, TResponse>(TRequest request, CancellationToken cancellationToken)
+            where TRequest : ISharingRequest, new()
+        {
+            using var scope = _scopeFactory.CreateScope();
+            var provider = scope.ServiceProvider;
+            var channelconfigManager = provider.GetRequiredService<IChannelConfigurationManager>();
+            var httpInvoker = provider.GetRequiredService<IHttpInvoker>();
+            var cacheToken = provider.GetRequiredService<ITypedCache<TokenTokenEnterpriseInfo>>();
+
+            var token = cacheToken.GetOrSet(KeyToken,
+                d => GetTokenAsync(cancellationToken).GetAwaiter().GetResult(),
+                TimeSpan.FromMinutes(28));
+            var configEnterprise = channelconfigManager.GetConfigurationEnterprise();
+
+            return await httpInvoker.RequestAsync<TRequest, TResponse>(request,
+                d => d.SetHttpClient(configEnterprise.AddressUrl, token),
+                cancellationToken);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="TResponse"></typeparam>
+        /// <param name="url"></param>
+        /// <param name="httpMethod"></param>
+        /// <param name="stringContent"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<TResponse?> RequestAsync<TResponse>(
+        string url,
+        string httpMethod,
+        string? stringContent = null,
+        CancellationToken cancellationToken = default)
+        {
+            using var scope = _scopeFactory.CreateScope();
+            var provider = scope.ServiceProvider;
+            var channelconfigManager = provider.GetRequiredService<IChannelConfigurationManager>();
+            var httpInvoker = provider.GetRequiredService<IHttpInvoker>();
+            var cacheToken = provider.GetRequiredService<ITypedCache<TokenTokenEnterpriseInfo>>();
+
+            var token = cacheToken.GetOrSet(KeyToken,
+                   d => GetTokenAsync(cancellationToken).GetAwaiter().GetResult(),
+                   TimeSpan.FromMinutes(28));
+
+            var configEnterprise = channelconfigManager.GetConfigurationEnterprise();
+            return await httpInvoker.RequestStringContentAsync<TResponse>(url, httpMethod, stringContent,
+                d => d.SetHttpClient(configEnterprise.AddressUrl, token), cancellationToken);
+        }
+
+        /// <summary>
+        /// 获取Token
+        /// </summary>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        private async Task<TokenTokenEnterpriseInfo> GetTokenAsync(CancellationToken cancellationToken)
+        {
+            using var scope = _scopeFactory.CreateScope();
+            var provider = scope.ServiceProvider;
+            var channelconfigManager = provider.GetRequiredService<IChannelConfigurationManager>();
+            var httpInvoker = provider.GetRequiredService<IHttpInvoker>();
+
+            var configEnterprise = channelconfigManager.GetConfigurationEnterprise();
+            var baseAddress = configEnterprise.AddressUrl;
+            if (!baseAddress.EndsWith('/'))
+                baseAddress += "/";
+
+            string authorization = configEnterprise.ClientId + ":" + configEnterprise.ClientSecret;
+            authorization = Encoder.Base64Code(authorization);
+            authorization = authorization.Replace("@", "=");
+
+            var request = new ClientCredentialsTokenRequest
+            {
+                Address = $"{baseAddress}blade-auth/oauth/getAccessToken",
+                Headers =
+                {
+                    Accept =
+                    {
+                        MediaTypeWithQualityHeaderValue.Parse("application/json")
+                    }
+                },
+                Method = HttpMethod.Post
+            };
+            request.Headers.Add("Authorization", "Basic " + authorization);
+            request.Headers.Add("Tenant-Id", configEnterprise.TenantId);
+            var tokenResponse = await httpInvoker.GetTokenAsync(request, cancellationToken);
+            if (tokenResponse is null)
+                throw new UserFriendlyException("获取token请求失败");
+            if (tokenResponse.IsError)
+                throw new UserFriendlyException("获取token请求失败");
+
+            var tokenInfo = System.Text.Json.JsonSerializer.Deserialize<TokenEnterprise>(tokenResponse.Raw);
+            if (tokenInfo is null || !tokenInfo.Success || tokenInfo?.TokenInfo is null)
+                throw new UserFriendlyException("token解析失败");
+            return tokenInfo.TokenInfo;
+        }
+
+
+    }
+}

+ 23 - 0
src/DataSharing/Enterprise/EnterpriseHttpClientExtensions.cs

@@ -0,0 +1,23 @@
+using DataSharing.Share.Dtos.Enterprise;
+using IdentityModel.Client;
+using System.Net.Http.Headers;
+using XF.Domain.Exceptions;
+
+namespace DataSharing.Enterprise
+{
+    public static class EnterpriseHttpClientExtensions
+    {
+        public static HttpClient BuildHeader(this HttpClient httpClient, TokenTokenEnterpriseInfo tokenInfo)
+        {
+            if (tokenInfo == null || string.IsNullOrEmpty(tokenInfo.AccessToken))
+                throw new UserFriendlyException("无效token");
+            httpClient.SetToken(tokenInfo.TokenType, tokenInfo.AccessToken);
+            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
+
+            return httpClient;
+        }
+
+        public static HttpClient SetHttpClient(this HttpClient httpClient, string baseAddress, TokenTokenEnterpriseInfo tokenInfo) =>
+            httpClient.SetBaseAddress(baseAddress).BuildHeader(tokenInfo);
+    }
+}

+ 74 - 0
src/DataSharing/Enterprise/EnterprisePusherProviderService.cs

@@ -0,0 +1,74 @@
+using DataSharing.Province;
+using DataSharing.SendTask;
+using DataSharing.Share.Dtos.Enterprise;
+using MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+using XF.Domain.Repository;
+
+namespace DataSharing.Enterprise
+{
+    public class EnterprisePusherProviderService : IEnterprisePusherProviderService, IScopeDependency
+    {
+        private readonly IMediator _mediator;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IHttpClientFactory _httpClientFactory;
+        private readonly EnterpriseClient _enterpriseClient;
+        private readonly IRepository<DsSendTask> _dsSendTaskRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mediator"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="httpClientFactory"></param>
+        /// <param name="enterpriseClient"></param>
+        /// <param name="dsSendTaskRepository"></param>
+        public EnterprisePusherProviderService(IMediator mediator,
+            IChannelConfigurationManager channelConfigurationManager,
+            IHttpClientFactory httpClientFactory,
+           EnterpriseClient enterpriseClient,
+            IRepository<DsSendTask> dsSendTaskRepository)
+        {
+            _mediator = mediator;
+            _channelConfigurationManager = channelConfigurationManager;
+            _httpClientFactory = httpClientFactory;
+            _enterpriseClient = enterpriseClient;
+            _dsSendTaskRepository = dsSendTaskRepository;
+        }
+
+        /// <summary>
+        /// 企业服务推送数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task SendEnterpriseDataPusher(DsSendTask dto, CancellationToken cancellationToken)
+        {
+            if (dto is null)
+                return;
+
+            var response = await _enterpriseClient.RequestAsync<EnterpriseResponse>(dto.Path, dto.HttpMethod, dto.Request, cancellationToken);
+
+            //如果推送成功修改数据状态
+            if (response != null)
+            {
+                //看看需不需要处理一些信息
+                dto.LastTime = DateTime.Now;
+                dto.SendTimes = dto.SendTimes++;
+
+                if (dto.FirstTime is null)
+                    dto.FirstTime = DateTime.Now;
+
+                if (response.code == 200 && response.success)
+                    dto.IsSuccess = true;
+
+                await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
+            }
+        }
+    }
+}

+ 15 - 0
src/DataSharing/Enterprise/IEnterprisePusherProviderService.cs

@@ -0,0 +1,15 @@
+using DataSharing.SendTask;
+
+namespace DataSharing.Enterprise
+{
+    public interface IEnterprisePusherProviderService
+    {
+        /// <summary>
+        /// 企业服务推送数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task SendEnterpriseDataPusher(DsSendTask dto, CancellationToken cancellationToken);
+    }
+}

+ 0 - 215
src/DataSharing/Province/IProvincePusher.cs

@@ -1,215 +0,0 @@
-namespace DataSharing.Province
-{
-    public interface IProvincePusher
-    {
-        //#region 协同-第一批次
-        ///// <summary>
-        ///// 服务工单交办处理
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetCaseResultReceiveAsync(GetCaseResultReceiveRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单交办处理过程
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetCaseProcessReceiveAsync(GetCaseProcessReceiveRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单交办评价
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetVisitInfoReceiveAsync(GetVisitInfoReceiveRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 退回申请
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetCaseBackApplyAsync(GetCaseBackApplyRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单申请延时
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushDelayCaseInfoSendAsync(DelayCaseInfoSendRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单督办过程
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSendSuperviseProcessInfoAsync(SendSuperviseProcessInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单督办结果
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSendSuperviseResultInfoAsync(SendSuperviseResultInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 工单发起甄别接
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushScreenCaseInfoSendAsync(ScreenCaseInfoSendRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 政民互动提交公开
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushZMHDCaseInfoPublicAsync(ZmhdCaseInfoPublicRequest request, CancellationToken cancellationToken);
-
-        //#endregion
-
-        //#region 汇聚-第二批次
-        ///// <summary>
-        ///// 服务工单受理
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushOrderCreatedAsync(SubmitCaseInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单处理结果
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSubmitCaseResultAsync(SubmitCaseResultRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单处理过程
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSubmitCaseProcessAsync(SubmitCaseProcessRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单回访评价
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSubmitVisitInfoAsync(SubmitVisitInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 电话记录
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSubmitCaseRecordAsync(SubmitCaseRecordRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 统计数据
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSubmitCaseTotalAsync(SubmitCaseTotalRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单拓展信息
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSubmitCaseExtendsAsync(SubmitCaseExtendsRequest request, CancellationToken cancellationToken);
-
-        //#endregion
-
-        //#region 协同-第三批次
-        ///// <summary>
-        ///// 服务工单上报
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSendCaseInfoAsync(SendCaseInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 上报补充诉求
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSupplyCaseInfoSendAsync(SupplyCaseInfoSendRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单撤单
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushRevokeCaseInfoAsync(SendRevokeCaseInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单催单
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSendRemindCaseInfoAsync(SendRemindCaseInfoRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 服务工单上报12315过程信息查询
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<ProvinceDistrecordResponse> PushGetCaseDistrecordSendAsync(GetCaseDistrecordSendRequest request, CancellationToken cancellationToken);
-        //#endregion
-
-        //#region 协同-第四批次
-        ///// <summary>
-        ///// 知识库上报
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetKnowledgeInfoSendAsync(GetKnowledgeInfoSendRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 知识库变更
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetKnowledgeInfoUpdateAsync(GetKnowledgeInfoUpdateRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 知识库下架
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushGetKnowledgeInfoAbandonAsync(GetKnowledgeInfoAbandonRequest request, CancellationToken cancellationToken);
-
-        ///// <summary>
-        ///// 实时服务上报
-        ///// </summary>
-        ///// <param name="request"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //Task<BaseProvinceResponse> PushSendRealTimeStatusAsync(SendRealTimeStatusRequest request, CancellationToken cancellationToken);
-        //#endregion
-    }
-}

+ 8 - 5
src/DataSharing/Province/IPusherProviderService.cs

@@ -1,12 +1,15 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using DataSharing.SendTask;
 
 namespace DataSharing.Province
 {
     public interface IPusherProviderService
     {
+        /// <summary>
+        /// 省平台推送数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task SendProvinceDataPusher(DsSendTask dto, CancellationToken cancellationToken);
     }
 }

+ 38 - 24
src/DataSharing/Province/PusherProviderService.cs

@@ -1,8 +1,5 @@
-using DataSharing.RawData;
-using DataSharing.SendTask;
-using DataSharing.Share.Dtos.Province;
-using DataSharing.Share.Dtos.Province.XieTong.Receive;
-using MapsterMapper;
+using DataSharing.SendTask;
+using DataSharing.Share.Enums;
 using MediatR;
 using Newtonsoft.Json;
 using System.Net;
@@ -13,65 +10,82 @@ namespace DataSharing.Province
 {
     public class PusherProviderService : IPusherProviderService, IScopeDependency
     {
-        private readonly IMapper _mapper;
         private readonly IMediator _mediator;
         private readonly IChannelConfigurationManager _channelConfigurationManager;
         private readonly IHttpClientFactory _httpClientFactory;
         private readonly XieTongClient _xieTongClient;
-        private readonly IRepository<DsOrder> _dsOrderRepository;
+        private readonly HuiJuClient _huiJuClient;
         private readonly IRepository<DsSendTask> _dsSendTaskRepository;
 
         /// <summary>
         /// 
         /// </summary>
-        /// <param name="mapper"></param>
         /// <param name="mediator"></param>
         /// <param name="channelConfigurationManager"></param>
         /// <param name="httpClientFactory"></param>
         /// <param name="xieTongClient"></param>
-        /// <param name="dsOrderRepository"></param>
+        /// <param name="huiJuClient"></param>
         /// <param name="dsSendTaskRepository"></param>
-        public PusherProviderService(IMapper mapper, IMediator mediator,
+        public PusherProviderService(IMediator mediator,
             IChannelConfigurationManager channelConfigurationManager,
             IHttpClientFactory httpClientFactory,
             XieTongClient xieTongClient,
-            IRepository<DsOrder> dsOrderRepository,
+            HuiJuClient huiJuClient,
             IRepository<DsSendTask> dsSendTaskRepository)
         {
-            _mapper = mapper;
             _mediator = mediator;
             _channelConfigurationManager = channelConfigurationManager;
             _httpClientFactory = httpClientFactory;
             _xieTongClient = xieTongClient;
-            _dsOrderRepository = dsOrderRepository;
+            _huiJuClient = huiJuClient;
             _dsSendTaskRepository = dsSendTaskRepository;
         }
 
-
         /// <summary>
-        ///附件上传处理
+        /// 省平台推送数据
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        public async Task GetCaseMaterialInfoPusher(DsSendTask dto, CancellationToken cancellationToken)
+        public async Task SendProvinceDataPusher(DsSendTask dto, CancellationToken cancellationToken)
         {
-            if (dto != null && dto.FileJson != null && dto.FileJson.Count > 0)
+            if (dto is null)
                 return;
 
-            var itemFile = dto.FileJson[0];
-            var result = await SendFileData(dto.Request, itemFile.FileId, itemFile.FileId, cancellationToken);
-            if (result != null && result.ReturnInfo != null)
+            ProvinceResponse result=null;
+
+            if (dto.PathType == EPathType.HuiJu) //汇聚推送
+                result = await _huiJuClient.RequestAsync<ProvinceResponse>(dto.Path, dto.HttpMethod, dto.Request, cancellationToken);
+
+            else if (dto.PathType == EPathType.XieTong)//协同推送
+                result = await _xieTongClient.RequestAsync<ProvinceResponse>(dto.Path, dto.HttpMethod, dto.Request, cancellationToken);
+
+            else if (dto.PathType == EPathType.XieTong)  //附件
             {
-                //结果处理
-                if (result.ReturnInfo.Code == "1")
+                if (dto != null && dto.FileJson != null && dto.FileJson.Count > 0)
                 {
-                    dto.IsSuccess = true;
-                    await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
+                    var itemFile = dto.FileJson[0];
+                    result = await SendFileData(dto.Request, itemFile.FileId, itemFile.FileId, cancellationToken);
                 }
             }
+
+            if (result is not null)
+            {
+                //看看需不需要处理一些信息
+                dto.LastTime = DateTime.Now;
+                dto.SendTimes = dto.SendTimes++;
+
+                if (dto.FirstTime is null)
+                    dto.FirstTime = DateTime.Now;
+                
+                if (result.ReturnInfo is not null && result.ReturnInfo.Code == "1")
+                    dto.IsSuccess = true;
+
+                await _dsSendTaskRepository.UpdateAsync(dto, cancellationToken);
+            }
         }
 
+
         /// <summary>
         /// 附件读取以及附件上传 
         /// </summary>