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