You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.4 KiB
187 lines
5.4 KiB
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Net.Http.Headers;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using TaskManager.Entity;
|
|
using TaskManager.EntityFramework;
|
|
using TaskManager.EntityFramework;
|
|
|
|
|
|
|
|
|
|
namespace TaskManager.Controllers
|
|
{
|
|
public class RecurringJobBaseController :ControllerBase, IDoExecute
|
|
{
|
|
protected string appKey = "8EG566b9bedd2bf46d";
|
|
protected string appSecret = "48edc4425647425d87f806a1ba492580";
|
|
protected readonly HttpClient _httpClient;
|
|
protected readonly JobDbContext _jobDbContext;
|
|
protected string Path { set; get; } = "/v2/get/supplierProPlaning";
|
|
protected string Url { set; get; } = "/v2/get/supplierProPlaning";
|
|
protected virtual string TaskName { set; get; } = "SupplierProPlaning";
|
|
protected readonly LogController _logger;
|
|
|
|
|
|
|
|
|
|
public RecurringJobBaseController(
|
|
HttpClient httpClient,
|
|
JobDbContext jobDbContext,
|
|
LogController log
|
|
)
|
|
{
|
|
_httpClient = new HttpClient();
|
|
_jobDbContext = jobDbContext;
|
|
_logger = log;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提交给接口
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <param name="jsonData">录入DTOJson</param>
|
|
/// <returns>返回DTOJson</returns>
|
|
protected async Task<string> Post(string url, string path, string jsonData)
|
|
{
|
|
try
|
|
{
|
|
// 生成签名参数
|
|
string timeStamp = GetCurrentTimestamp();
|
|
string nonce = GenerateNonce();
|
|
var sign = GenerateSign(HttpMethod.Post.Method, path, appKey, appSecret, timeStamp, nonce, jsonData);
|
|
// 构建请求
|
|
var request = new HttpRequestMessage(HttpMethod.Post, url);
|
|
request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json");
|
|
request.Headers.Add("appKey", appKey);
|
|
request.Headers.Add("appSecret", appSecret);
|
|
request.Headers.Add("timestamp", timeStamp);
|
|
request.Headers.Add("sign", sign);
|
|
request.Headers.Add("nonce", nonce);
|
|
|
|
// 发送请求
|
|
var response = await _httpClient.SendAsync(request);
|
|
response.EnsureSuccessStatusCode(); // 抛出异常处理状态码
|
|
return await response.Content.ReadAsStringAsync();
|
|
}
|
|
catch (HttpRequestException ex)
|
|
{
|
|
await _logger.AddError(ex.Message, this.TaskName);
|
|
//error = ex.Message;
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
private string GenerateSign(string method, string path, string appKey, string appSecret, string timestamp, string nonce, string jsonBody)
|
|
{
|
|
|
|
string paramStr = $"method={method.ToUpper()}&path={path}&appKey={appKey}&appSecret={appSecret}×tamp={timestamp}&nonce={nonce}&jsonBody={jsonBody}";
|
|
return ComputeSHA512(paramStr);
|
|
|
|
}
|
|
private string ComputeSHA512(string input)
|
|
{
|
|
using (SHA512 sha512 = SHA512.Create())
|
|
{
|
|
byte[] bytes = Encoding.UTF8.GetBytes(input);
|
|
byte[] hash = sha512.ComputeHash(bytes);
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
for (int i = 0; i < hash.Length; i++)
|
|
{
|
|
builder.Append(hash[i].ToString("x2")); // "x2" 表示小写十六进制
|
|
}
|
|
return builder.ToString();
|
|
}
|
|
}
|
|
private string GetCurrentTimestamp()
|
|
{
|
|
return ((long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds).ToString();
|
|
}
|
|
private string GenerateNonce()
|
|
{
|
|
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
Random random = new Random();
|
|
int length = random.Next(10, 51);
|
|
return new string(Enumerable.Repeat(chars, length)
|
|
.Select(s => s[random.Next(s.Length)]).ToArray());
|
|
}
|
|
|
|
|
|
private async Task BeforeExecuteAsync(string uid)
|
|
{
|
|
await _logger.AddInfo($"{TaskName}开始执行作业{uid}", TaskName);
|
|
}
|
|
private async Task AfterExecuteAsync(string uid)
|
|
{
|
|
await _logger.AddInfo($"{TaskName}结束执行作业{uid}", TaskName);
|
|
}
|
|
[HttpGet]
|
|
public async Task ExecuteAsync(string url, string path, string taskName)
|
|
{
|
|
var str = DateTime.Now.ToLongTimeString();
|
|
await BeforeExecuteAsync(str);
|
|
|
|
await DoExecutingAsync(url, path, taskName);
|
|
|
|
await AfterExecuteAsync(str);
|
|
|
|
}
|
|
protected async virtual Task DoExecutingAsync(string url, string path, string takName)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
protected static string RemoveWhitespace(string input)
|
|
{
|
|
if (string.IsNullOrEmpty(input))
|
|
return input;
|
|
// 使用正则表达式移除空格和换行
|
|
return Regex.Replace(input, @"[\s]+", "");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|