This commit is contained in:
熊玮 2024-11-19 16:13:59 +08:00
parent e5869250a6
commit 6369114e63
6 changed files with 77 additions and 3 deletions

View File

@ -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<string, object> dictionary)
{
foreach (var (key, value) in dictionary)
{
this._params.TryAdd(key, value);
}
return this;
}
public string Build()
{
Dictionary<string, object?> request = new()

View File

@ -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;

View File

@ -21,6 +21,12 @@ public class DetectDeviceService : ServiceBase<DeviceEntity>
return new ApiResponse<DeviceEntity?>(0, "success", item);
}
public ApiResponse<DeviceEntity?> ListBySn(string deviceSn)
{
var item = Find(x => x.DeviceSn == deviceSn);
return new ApiResponse<DeviceEntity?>(0, "success", item);
}
public ApiResponse<List<DeviceEntity>?> ListAll()
{
var items = FindList(x => true, "Id", true)

View File

@ -22,6 +22,13 @@ public class DetectTaskService : ServiceBase<DetectTaskEntity>
return new ApiResponse<List<DetectTaskEntity>?>(0, "success", items);
}
public ApiResponse<List<DetectTaskEntity>?> ListByIds(long[] ids)
{
var items = FindList(x => ids.Contains(x.Id!.Value), "Id", true)
.ToList();
return new ApiResponse<List<DetectTaskEntity>?>(0, "success", items);
}
public ApiResponse<PagedResult<DetectTaskEntity>> Search(string? name = "", int pageNum = 1, int pageSize = 10)
{
Expression<Func<DetectTaskEntity,bool>> filter = x => (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(x.Name) || x.Name.Contains(name));

View File

@ -37,8 +37,8 @@ public class DeviceClientService
/// </summary>
public void ConnectAllDevices()
{
var eventService = Locator.Current.GetService<DetectDeviceService>()!;
var devices = eventService.ListAll().Result!;
var deviceService = Locator.Current.GetService<DetectDeviceService>()!;
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<VapDeviceService>()!;
@ -205,5 +207,32 @@ public class DeviceClientService
return resp.Result;
}
public async Task<Dictionary<string, object>?> AssignTasks(long[] taskIds)
{
var taskService = Locator.Current.GetService<DetectTaskService>()!;
var deviceService = Locator.Current.GetService<DetectDeviceService>()!;
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<Dictionary<string, object>>(req);
if (resp.IsFailed)
{
throw new Exception(resp.Message);
}
return resp.Result;
}
#endregion
}

View File

@ -2,6 +2,7 @@
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=D_003A_005Cxwd_005Ccnnc_005Cdetect_005Cdetect_002Egui_005CLibs_005Cxwd_002Eutils_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControl_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff963a2a29ea2bb2d4ad8737293b45c4edbd94e55219dc42cf68343d6d91d9_003FControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADependencyResolverMixins_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fca0d4592dc494bbaa872fd9db942335922638_003Ff9_003Fb0105fc3_003FDependencyResolverMixins_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AJsonStringEnumConverter_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe8fd44bb4fe5af449849853612f32962e78c0e82a7b6a4307a7bcae61a547a_003FJsonStringEnumConverter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AReactiveUserControl_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F4d7c93652a64ddcaeff466d4c6bae2d847fe753565401deac6d1e5995386b1_003FReactiveUserControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AReactiveWindow_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fxiongwei_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe4ef1a6c8fbf4ab1a0360a42a1854b208c00_003F5d_003Fbfa2c6a3_003FReactiveWindow_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARxApp_002Ecs_002Fl_003AC_0021_003FUsers_003FNick_0020Wang_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F4c75a39152c6ea672be27a386dbf424c0f2d222d51114dffb436ecd6b570ce_003FRxApp_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>