using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using WCS.Entity.Protocol; using WCS.Service.Extensions; using WCS.Service.Log; namespace WCS.Service.Helpers { /// /// 设备任务时长统计 /// public static class DeviceTaskTimeHelper { public static List deviceTaskTimes = new List(); /// /// 添加AGV开始记录 /// public static void Add(this RGVDevice rgv) { if (deviceTaskTimes.Any(v => v.DeviceCode == rgv.Entity.CODE)) return; deviceTaskTimes.Add(new DeviceTaskTimeViewModel { DeviceCode = rgv.Entity.CODE, StartTime = DateTime.Now, TaskType = rgv.Data.TaskType_1.ToString(), StartAdd = rgv.CurrentStation().Entity.CODE, EndAdd = rgv.Data.DestPosition_1.ToString(), }); } /// /// 添加AGV开始记录 /// public static void End(this RGVDevice rgv) { if (rgv.Data2.Status_1.HasFlag(RGVStatus.RGV到站) && rgv.Data2.Status_1.HasFlag(RGVStatus.任务完成) && deviceTaskTimes.Any(v => v.DeviceCode == rgv.Entity.CODE && v.TaskType == rgv.Data2.TaskType_1.ToString())) { var deviceTaskTime= deviceTaskTimes.Find(v => v.DeviceCode == rgv.Entity.CODE); deviceTaskTime.EndTime= DateTime.Now; deviceTaskTime.SumTime = (deviceTaskTime.StartTime - deviceTaskTime.EndTime).TotalSeconds; InfoLog.INFO_DEVICETASKTIME(JsonConvert.SerializeObject(deviceTaskTime)); deviceTaskTimes.Remove(deviceTaskTime); } } } /// /// /// public class DeviceTaskTimeViewModel { /// /// 设备号 /// public string DeviceCode { get; set; } /// /// 开始时间 /// public DateTime StartTime { get; set; } /// /// 结束时间 /// public DateTime EndTime { get; set; } /// /// 总计时间 /// public double SumTime { get; set; } /// /// 任务类型 /// public string TaskType { get; set; } /// /// 起始地址 /// public string StartAdd { get; set; } /// /// 目标地址 /// public string EndAdd { get; set; } } }