123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- using Hotline.Enterprise;
- using Hotline.Share.Dtos;
- using RestSharp;
- using System.Collections;
- using System.Text;
- using Hotline.Share.Dtos.Enterprise;
- using XF.Domain.Cache;
- using XF.Domain.Exceptions;
- namespace Hotline.YbEnterprise.Sdk
- {
- public class EnterpriseService : IEnterpriseService
- {
- private readonly RestClient _client;
- private readonly EnterpriseConfig _config;
- public EnterpriseService(EnterpriseConfig config)
- {
- _client = new RestClient();
- _config = config;
- }
- /// <summary>
- /// 获取企业列表
- /// </summary>
- /// <param name="name"></param>
- /// <param name="current"></param>
- /// <param name="size"></param>
- /// <param name="cancellationToken"></param>
- /// <returns></returns>
- public async Task<EnterpriseListData> GetEnterpriseList(string name = "", int current = 1, int size = 10, CancellationToken cancellationToken =default, ITypedCache<EnterpriseVo> cacheResponse = default)
- {
- var request = new EnterpriseListRequest
- {
- EnterpriseName = name,
- Current = current,
- Size = size
- };
- var token = await cacheResponse.GetAsync("EnterpriseResponse", cancellationToken);
- if (token == null || (token != null && token.EndTime > DateTime.Now))
- {
- token = await GetTokenAsync(cancellationToken);
- token.EndTime = DateTime.Now.AddMinutes(45);
- await cacheResponse.SetAsync("EnterpriseResponse",token, cancellationToken: cancellationToken);
- }
- var path = _config.AddressUrl + "platform/12345/selectEnterpriseList";
- var rest = new RestRequest(path, Method.Post);
- rest.AddHeader("content-type", "application/json");
- rest.AddHeader("Blade-Auth", token.TokenType + " " + token.AccessToken);
- var res = await ExecuteAsync<EnterpriseListRequest, EnterpriseListResponse>(path, Method.Post, request, rest, cancellationToken);
- return res == null? null: res.data;
- }
- /// <summary>
- /// 获取TOKEN
- /// </summary>
- /// <param name="cancellationToken"></param>
- /// <returns></returns>
- /// <exception cref="UserFriendlyException"></exception>
- public async Task<EnterpriseVo> GetTokenAsync(CancellationToken cancellationToken) {
- string authorization = _config.ClientId + ":" + _config.ClientSecret;
- authorization = Encoder.Base64Code(authorization);
- authorization = authorization.Replace("@", "=");
- var path = _config.AddressUrl + "blade-auth/oauth/getAccessToken";
- var rest = new RestRequest(path, Method.Post);
- rest.AddHeader("content-type", "application/json");
- rest.AddHeader("Authorization", "Basic " + authorization);
- rest.AddHeader("Tenant-Id", _config.TenantId);
- var res = await ExecuteAsync<string,EnterpriseServiceResponse>(path, Method.Post,"", rest, cancellationToken);
- if (res is null)
- throw new UserFriendlyException("获取token请求失败");
- if (!res.success)
- throw new UserFriendlyException("获取token请求失败");
- return res.data;
- }
- public async Task<TResponse> ExecuteAsync<TRequest, TResponse>(string path, Method httpMethod, TRequest request, RestRequest restRequest = null,
- CancellationToken cancellationToken = default)
- where TRequest : class
- {
- var req = new RestRequest(path, httpMethod);
- if (httpMethod is Method.Get)
- {
- req.AddObject(request);
- }
- else
- {
- req.AddJsonBody(request);
- }
- try
- {
- var response = await _client.ExecuteAsync<TResponse>(req, cancellationToken);
- return response.Data;
- }
- catch (Exception e)
- {
- throw new HttpRequestException($"企业服务数据错误,Error: {e.Message}");
- }
- }
- 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;
- }
- }
- }
- }
|