90 lines
3.0 KiB
C#
90 lines
3.0 KiB
C#
namespace SHH.CameraDashboard;
|
||
|
||
public partial class CameraRepository
|
||
{
|
||
#region PtzControlAsync
|
||
|
||
/// <summary>
|
||
/// 发送 PTZ 控制指令
|
||
/// </summary>
|
||
public async Task<bool> PtzControlAsync(long cameraId, PtzControlDto payload)
|
||
{
|
||
var serviceNode = AppGlobal.UseServiceNode;
|
||
if (serviceNode == null) return false;
|
||
|
||
string requestUrl = $"http://{serviceNode.ServiceNodeIp}:{serviceNode.ServiceNodePort}{WebApiRoutes.Cameras.Ptz(cameraId.ToString())}";
|
||
|
||
try
|
||
{
|
||
string json = JsonHelper.Serialize(payload);
|
||
await WebApiService.Instance.PostAsync(requestUrl, json, "PTZ控制");
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
System.Diagnostics.Debug.WriteLine($"PTZ控制失败: {ex.Message}");
|
||
return false;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
#region 运维指令 (Maintenance)
|
||
|
||
/// <summary>
|
||
/// [修正] 发送校时指令
|
||
/// 修正点:后端 [FromBody] DateTime 需要接收带双引号的标准 ISO 时间字符串
|
||
/// </summary>
|
||
public async Task<bool> SyncTimeAsync(long cameraId)
|
||
{
|
||
var serviceNode = AppGlobal.UseServiceNode;
|
||
if (serviceNode == null) return false;
|
||
|
||
string requestUrl = $"http://{serviceNode.ServiceNodeIp}:{serviceNode.ServiceNodePort}{WebApiRoutes.Cameras.Time(cameraId.ToString())}";
|
||
|
||
try
|
||
{
|
||
// 1. 获取当前时间,格式化为标准 ISO 8601 (yyyy-MM-ddTHH:mm:ss)
|
||
string timeStr = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
|
||
|
||
// 2. [关键] 手动构造 JSON Body,必须包含双引号
|
||
// 例如发送的内容应该是: "2025-01-01T12:00:00"
|
||
string jsonBody = $"\"{timeStr}\"";
|
||
|
||
// 3. 发送请求
|
||
// 确保你的 WebApiService.PostAsync 会设置 Content-Type: application/json
|
||
await WebApiService.Instance.PostAsync(requestUrl, jsonBody, "设备校时");
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
System.Diagnostics.Debug.WriteLine($"校时失败: {ex.Message}");
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 发送远程重启指令
|
||
/// 接口定义: [HttpPost("{id}/reboot")] public async Task<IActionResult> RebootDevice(long id)
|
||
/// 该接口没有 [FromBody] 参数,Body 可以为空或空 JSON
|
||
/// </summary>
|
||
public async Task<bool> RebootCameraAsync(long cameraId)
|
||
{
|
||
var serviceNode = AppGlobal.UseServiceNode;
|
||
if (serviceNode == null) return false;
|
||
|
||
string requestUrl = $"http://{serviceNode.ServiceNodeIp}:{serviceNode.ServiceNodePort}{WebApiRoutes.Cameras.Reboot(cameraId.ToString())}";
|
||
|
||
try
|
||
{
|
||
await WebApiService.Instance.PostAsync(requestUrl, "{}", "远程重启");
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
System.Diagnostics.Debug.WriteLine($"重启失败: {ex.Message}");
|
||
return false;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
} |