using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using HH.WCS.ZCQTJ.Entitys;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Linq;
namespace HH.WCS.Hexafluo.core
{
///
/// 定时轮询任务
///
public class MonitorAgvDate
{
private static object locko4 = new object();
///
/// 统计前一天agv完成时间
///
public static void CheckCamera(int T = 1)
{
try
{
//lock (locko4)
//{
DateTime now = DateTime.Now;
var chi = new SqlHelper().GetInstance();
var newDb2 = chi.CopyNew();
DateTime datt = DateTime.Now;
DateTime yesterdayStart = new DateTime(now.Year, now.Month, now.Day).AddDays(-1);
DateTime yesterdayEnd = new DateTime(now.Year, now.Month, now.Day);
var yesday = new DateTime(now.Year, now.Month, now.Day).AddDays(-1).ToString("yyyy-MM-dd");
if (T > 1)
{
yesterdayStart = new DateTime(now.Year, now.Month, now.Day).AddDays(-T);
yesterdayEnd = new DateTime(now.Year, now.Month, now.Day).AddDays(-(T - 1)); ;
yesday = new DateTime(now.Year, now.Month, now.Day).AddDays(-T).ToString("yyyy-MM-dd");
}
LogHelper.DanInfo("计算AGV时间", $"开始时间{JsonConvert.SerializeObject(yesterdayStart)} 结束时间{JsonConvert.SerializeObject(yesterdayEnd)} ");
var AgvTaskDone = newDb2.Queryable().Where(e => e.D_DATE == yesday)?.First();
LogHelper.DanInfo("计算AGV时间", $"查询 AGV任务每天完成时间统计表 是否有数据 {JsonConvert.SerializeObject(AgvTaskDone)}");
if (AgvTaskDone == null)
{
//计算agv完成时间
var TaskList1 = newDb2.Queryable().Where(e => e.S_NOTE == "agv任务" && e.S_B_STATE == "完成" && yesterdayStart <= e.T_CREATE && e.T_CREATE <= yesterdayEnd).ToList();
LogHelper.DanInfo("计算AGV时间", $"查询 符合条件的任务数 类型agv任务 状态完成 创建时间在{JsonConvert.SerializeObject(yesterdayStart)} 与 {JsonConvert.SerializeObject(yesterdayEnd)} 之间 查询的任务数量为{TaskList1.Count()}");
if (TaskList1.Any())
{
double minutesDifference = 0;
//计算agv完成时间
foreach (var task in TaskList1)
{
if (task.T_END_TIME != null && task.T_START_TIME != null)
{
TimeSpan timeDifference = (TimeSpan)(task.T_END_TIME - task.T_START_TIME);
minutesDifference += timeDifference.Minutes;
LogHelper.DanInfo("计算AGV时间", $"相差分钟数{timeDifference.Minutes} 总时间{minutesDifference}");
}
}
if (minutesDifference != 0)
{
AgvTaskDoneTimeEntitys agvTaskDoneTimeEntitys = new AgvTaskDoneTimeEntitys();
agvTaskDoneTimeEntitys.N_AGV_DONE1 = minutesDifference / (73 * 24 * 60);
agvTaskDoneTimeEntitys.N_AGV_DONE2 = minutesDifference / (19 * 24 * 60);
agvTaskDoneTimeEntitys.D_DATE = yesday;
try
{
newDb2.BeginTran();
var B = newDb2.Insertable(agvTaskDoneTimeEntitys).ExecuteCommand();
newDb2.CommitTran();
}
catch (Exception ex)
{
LogHelper.DanInfo("计算AGV时间", ex.Message);
newDb2.RollbackTran();
}
}
}
}
}
catch (System.Exception ex)
{
LogHelper.DanInfo("计算AGV时间", ex.Message);
}
}
}
}