Files
Ayay/SHH.CameraDashboard/Services/WebApis/CameraReps/CameraRepositoryPtz.cs
2026-01-01 22:40:32 +08:00

90 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}