V3 基础设施: GatewayClient+3个Quartz Job+Startup注册
This commit is contained in:
73
api_sqlsugar/Warehouse/Services/GatewayClient.cs
Normal file
73
api_sqlsugar/Warehouse/Services/GatewayClient.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace VolPro.Warehouse.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 网关 HTTP 客户端。封装 Vol.Pro 调用 IntegrationGateway B 组接口的逻辑。
|
||||
/// 所有对网关的请求统一经此类发出,便于连接池管理和错误处理。
|
||||
/// </summary>
|
||||
public class GatewayClient
|
||||
{
|
||||
private readonly IHttpClientFactory _httpFactory;
|
||||
private readonly IConfiguration _config;
|
||||
|
||||
public GatewayClient(IHttpClientFactory httpFactory, IConfiguration config)
|
||||
{
|
||||
_httpFactory = httpFactory;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
/// <summary>创建带超时和默认头的 HttpClient</summary>
|
||||
private HttpClient CreateClient()
|
||||
{
|
||||
var client = _httpFactory.CreateClient("VolPro");
|
||||
client.Timeout = TimeSpan.FromSeconds(30);
|
||||
return client;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// B3: 手动触发网关全量设备同步。
|
||||
/// POST {baseUrl}/api/gateway/devices/sync?adapter={adapterTypes}
|
||||
/// </summary>
|
||||
public async Task<JsonDocument?> TriggerFullSyncAsync(string baseUrl, string adapterTypes)
|
||||
{
|
||||
var http = CreateClient();
|
||||
var resp = await http.PostAsync(
|
||||
$"{baseUrl.TrimEnd('/')}/api/gateway/devices/sync?adapter={Uri.EscapeDataString(adapterTypes)}",
|
||||
null);
|
||||
if (!resp.IsSuccessStatusCode) return null;
|
||||
return await resp.Content.ReadFromJsonAsync<JsonDocument>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// B4: 获取设备实时点位值。
|
||||
/// GET {baseUrl}/api/gateway/realtime/{adapter}/{deviceId}
|
||||
/// </summary>
|
||||
public async Task<JsonDocument?> GetRealtimeAsync(string baseUrl, string adapter, string deviceId)
|
||||
{
|
||||
var http = CreateClient();
|
||||
var resp = await http.GetAsync(
|
||||
$"{baseUrl.TrimEnd('/')}/api/gateway/realtime/{Uri.EscapeDataString(adapter)}/{Uri.EscapeDataString(deviceId)}");
|
||||
if (!resp.IsSuccessStatusCode) return null;
|
||||
return await resp.Content.ReadFromJsonAsync<JsonDocument>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// B5: 设备反向控制。
|
||||
/// POST {baseUrl}/api/gateway/realtime/{adapter}/control
|
||||
/// </summary>
|
||||
public async Task<bool> ControlDeviceAsync(string baseUrl, string adapter, string deviceId, int pointIndex, double value)
|
||||
{
|
||||
var http = CreateClient();
|
||||
var resp = await http.PostAsJsonAsync(
|
||||
$"{baseUrl.TrimEnd('/')}/api/gateway/realtime/{adapter}/control",
|
||||
new { deviceId, pointIndex, value });
|
||||
return resp.IsSuccessStatusCode;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user