1
pulg
2025-06-17 03f92b99d7f00b728dccd409863c38d1191a4c60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
{
    /// <summary>
    /// 定时轮询任务
    /// </summary>
    public class MonitorAgvDate
    {
        private static object locko4 = new object();
        /// <summary>
        /// 统计前一天agv完成时间
        /// </summary>
        public static void CheckCamera(int T = 1)
        {
            try
            {
                //lock (locko4)
                //{
                DateTime now = DateTime.Now;
                var chi = new SqlHelper<object>().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<AgvTaskDoneTimeEntitys>().Where(e => e.D_DATE == yesday)?.First();
                LogHelper.DanInfo("计算AGV时间", $"查询 AGV任务每天完成时间统计表 是否有数据 {JsonConvert.SerializeObject(AgvTaskDone)}");
                if (AgvTaskDone == null)
                {
                    //计算agv完成时间
                    var TaskList1 = newDb2.Queryable<WMSTask>().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);
            }
        }
    }
}