From 6369114e63e3340c07ad8c124f6ddc611c46ff35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=86=8A=E7=8E=AE?= Date: Tue, 19 Nov 2024 16:13:59 +0800 Subject: [PATCH] fix --- detect.device/DeviceClient.cs | 12 ++++++- detect.device/Utils/JsonUtil.cs | 21 ++++++++++++ .../Services/Detect/DetectDeviceService.cs | 6 ++++ .../Services/Detect/DetectTaskService.cs | 7 ++++ detect.gui/Services/DeviceClientService.cs | 33 +++++++++++++++++-- detect.sln.DotSettings.user | 1 + 6 files changed, 77 insertions(+), 3 deletions(-) diff --git a/detect.device/DeviceClient.cs b/detect.device/DeviceClient.cs index 2d66683..590b87f 100644 --- a/detect.device/DeviceClient.cs +++ b/detect.device/DeviceClient.cs @@ -1,4 +1,5 @@ using detect.device.Utils; +using Newtonsoft.Json; namespace detect.device; @@ -43,12 +44,21 @@ public class DeviceClientRequestBuilder return this; } - public DeviceClientRequestBuilder WithParam(string name, string value) + public DeviceClientRequestBuilder WithParam(string name, object value) { this._params.TryAdd(name, value); return this; } + public DeviceClientRequestBuilder WithParams(Dictionary dictionary) + { + foreach (var (key, value) in dictionary) + { + this._params.TryAdd(key, value); + } + return this; + } + public string Build() { Dictionary request = new() diff --git a/detect.device/Utils/JsonUtil.cs b/detect.device/Utils/JsonUtil.cs index 990a20e..62c98eb 100644 --- a/detect.device/Utils/JsonUtil.cs +++ b/detect.device/Utils/JsonUtil.cs @@ -50,6 +50,25 @@ public class IpEndPointConverter : JsonConverter } } +public class JsonDateTimeConverter(string dateTimeFormat) : JsonConverter +{ + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + var dateTime = (DateTime)value!; + writer.WriteValue(dateTime.ToString(dateTimeFormat)); + } + + public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) + { + return DateTime.Parse((string)reader.Value!); + } + + public override bool CanConvert(Type objectType) + { + return objectType == typeof(DateTime?); + } +} + public static class JsonUtil { @@ -73,6 +92,8 @@ public static class JsonUtil { ContractResolver = new CamelCasePropertyNamesContractResolver() }; + + settings.Converters.Add(new JsonDateTimeConverter("yyyy-MM-dd HH:mm:ss")); settings.Converters.Add(new IpAddressConverter()); settings.Converters.Add(new IpEndPointConverter()); settings.Formatting = formatting; diff --git a/detect.gui/Services/Detect/DetectDeviceService.cs b/detect.gui/Services/Detect/DetectDeviceService.cs index 57c56af..481c4c0 100644 --- a/detect.gui/Services/Detect/DetectDeviceService.cs +++ b/detect.gui/Services/Detect/DetectDeviceService.cs @@ -21,6 +21,12 @@ public class DetectDeviceService : ServiceBase return new ApiResponse(0, "success", item); } + public ApiResponse ListBySn(string deviceSn) + { + var item = Find(x => x.DeviceSn == deviceSn); + return new ApiResponse(0, "success", item); + } + public ApiResponse?> ListAll() { var items = FindList(x => true, "Id", true) diff --git a/detect.gui/Services/Detect/DetectTaskService.cs b/detect.gui/Services/Detect/DetectTaskService.cs index 924ef2b..4caaf07 100644 --- a/detect.gui/Services/Detect/DetectTaskService.cs +++ b/detect.gui/Services/Detect/DetectTaskService.cs @@ -22,6 +22,13 @@ public class DetectTaskService : ServiceBase return new ApiResponse?>(0, "success", items); } + public ApiResponse?> ListByIds(long[] ids) + { + var items = FindList(x => ids.Contains(x.Id!.Value), "Id", true) + .ToList(); + return new ApiResponse?>(0, "success", items); + } + public ApiResponse> Search(string? name = "", int pageNum = 1, int pageSize = 10) { Expression> filter = x => (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(x.Name) || x.Name.Contains(name)); diff --git a/detect.gui/Services/DeviceClientService.cs b/detect.gui/Services/DeviceClientService.cs index aa84516..7101b85 100644 --- a/detect.gui/Services/DeviceClientService.cs +++ b/detect.gui/Services/DeviceClientService.cs @@ -37,8 +37,8 @@ public class DeviceClientService /// public void ConnectAllDevices() { - var eventService = Locator.Current.GetService()!; - var devices = eventService.ListAll().Result!; + var deviceService = Locator.Current.GetService()!; + var devices = deviceService.ListAll().Result!; if (devices.Any()) { devices.ForEach(device => @@ -134,6 +134,8 @@ public class DeviceClientService { var sysInfo = GetDeviceInfo(1).GetAwaiter().GetResult(); Log.Information("device info: {@Info}", sysInfo); + // test + // AssignTasks(new long[] { 1 }).GetAwaiter(); } // var deviceService = Locator.Current.GetService()!; @@ -204,6 +206,33 @@ public class DeviceClientService } return resp.Result; } + + public async Task?> AssignTasks(long[] taskIds) + { + var taskService = Locator.Current.GetService()!; + var deviceService = Locator.Current.GetService()!; + var taskList = taskService.ListByIds(taskIds).Result!; + if (taskList.Count == 0) + { + throw new Exception("未选择需要下发的任务!"); + } + + var deviceSn = taskList[0].DeviceSn!; + var device = deviceService.ListBySn(deviceSn).Result!; + var deviceClient = GetDeviceClient(device.Id!.Value); + if (deviceClient == null) + { + throw new Exception("设备未连接!"); + } + var req = DeviceClientRequestBuilder.Create().WithType("service").WithComponent("dat_task") + .WithMethod("add_server_tasks").WithParam("tasks", taskList); + var resp = await deviceClient.RequestAction>(req); + if (resp.IsFailed) + { + throw new Exception(resp.Message); + } + return resp.Result; + } #endregion } \ No newline at end of file diff --git a/detect.sln.DotSettings.user b/detect.sln.DotSettings.user index 89022d3..24e565a 100644 --- a/detect.sln.DotSettings.user +++ b/detect.sln.DotSettings.user @@ -2,6 +2,7 @@ True ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded