schangxiang@126.com
2025-09-19 a68302033da081f9ad5e82268a01892c3e129cc1
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using logtxtWrite;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using wcftest.orm;
 
namespace wcftest.BussinessExtension
{
    public class DeviceGeneralInfoHelper
    {
 
        /// <summary>
        /// 处理 
        /// </summary>
        /// <param name="srmNo"></param>
        /// <param name="enterTaskCount"></param>
        /// <param name="outTaskCount"></param>
        /// <param name="stockUsingCount"></param>
        /// <param name="outTimeStockCount"></param>
        /// <param name="mod"></param>
        /// <param name="lastHour"></param>
        /// <param name="todayTime"></param>
        /// <param name="deviceSwForDetail"></param>
        /// <param name="deviceRunTime"></param>
        /// <param name="deviceAlarmTime"></param>
        /// <param name="deviceWaitTime"></param>
        public static void HandlerDeviceGeneralInfoForDetail(
            int srmNo,
             List<Task_Queue> enterTaskCount,
            List<Task_Queue> outTaskCount,
            List<Base_Position> stockUsingCount,
            List<Base_ProductPosition> outTimeStockCount,
            dbModel mod, int lastHour, DateTime todayTime,
            Stopwatch deviceSwForDetail,
            TimeSpan deviceRunTime,
            TimeSpan deviceAlarmTime,
             TimeSpan deviceWaitTime
            )
        {
            try
            {
                //重新组织数据
                enterTaskCount = enterTaskCount.Where(x => x.DoCount == srmNo).ToList();
                outTaskCount = outTaskCount.Where(x => x.DoCount == srmNo).ToList();
 
 
                //每隔一小时保存一次设备状态时间
                var str_srmNo = srmNo.ToString();
                deviceGeneralInfoForDetail todayDeviceInfo = null;
                todayDeviceInfo = mod.deviceGeneralInfoForDetail.FirstOrDefault(x => x.createTime > todayTime && x.ext1 == str_srmNo);
                if (todayDeviceInfo == null)
                {
                    todayDeviceInfo = new deviceGeneralInfoForDetail();
                    todayDeviceInfo.ext1 = str_srmNo;//赋值 机号
                    todayDeviceInfo.createTime = DateTime.Now;
                    mod.deviceGeneralInfoForDetail.Add(todayDeviceInfo);
                    //计时复位
                    deviceSwForDetail.Reset();
                    deviceAlarmTime = deviceSwForDetail.Elapsed;
                    deviceRunTime = deviceSwForDetail.Elapsed;
                    deviceWaitTime = deviceSwForDetail.Elapsed;
 
                }
                else
                {
 
                    todayDeviceInfo.deviceRunTime = deviceRunTime.TotalMinutes > 0 ? Convert.ToDecimal(deviceRunTime.TotalMinutes) : 0M;
                    todayDeviceInfo.deviceAlarmTime = deviceAlarmTime.TotalMinutes > 0 ? Convert.ToDecimal(deviceAlarmTime.TotalMinutes) : 0M;
                    //重新计算设备等待时间 【Editby shaocx,2024-12-30】
                    CommonCalcWaitTime(ref todayDeviceInfo);
 
                    todayDeviceInfo.taskEnterCount = enterTaskCount.Count;//入库任务数
                    todayDeviceInfo.taskOutCount = outTaskCount.Count;//出库任务数
                    //更改数量 【Editby shaocx,2024-11-22】
                    decimal cout = stockUsingCount.Count / 1152M * 100;
                    todayDeviceInfo.stockProportion = Convert.ToInt32(cout);//已使用的库位
                    todayDeviceInfo.outDate = outTimeStockCount.Count;//过期时间小于一个月的库存数据
                }
            }
            catch (Exception ex)
            {
 
            }
        }
 
        public static void deviceInfoInitForDetails(int srmNo, DateTime todayTime, int lastHour, TimeSpan deviceAlarmTime, TimeSpan deviceRunTime, TimeSpan deviceWaitTime)
        {
            var str_srmNo = srmNo.ToString();
            using (dbModel mod = new dbModel())
            {
                deviceGeneralInfoForDetail todayDeviceInfo = mod.deviceGeneralInfoForDetail.FirstOrDefault(x => x.createTime > todayTime && x.ext1 == str_srmNo);
                if (todayDeviceInfo != null)
                {
                    TimeSpan alarmTime = new TimeSpan(Convert.ToInt32(Math.Floor((decimal)todayDeviceInfo.deviceAlarmTime / 60M)), Convert.ToInt32((decimal)todayDeviceInfo.deviceAlarmTime % 60), 0);
                    deviceAlarmTime = alarmTime;
                    TimeSpan runTime = new TimeSpan(Convert.ToInt32(Math.Floor((decimal)todayDeviceInfo.deviceRunTime / 60M)), Convert.ToInt32((decimal)todayDeviceInfo.deviceRunTime % 60), 0);
                    deviceRunTime = runTime;
                    TimeSpan waitTime = new TimeSpan(Convert.ToInt32(Math.Floor((decimal)todayDeviceInfo.deviceWaitTime / 60M)), Convert.ToInt32((decimal)todayDeviceInfo.deviceWaitTime % 60), 0);
                    deviceWaitTime = waitTime;
 
                }
                else
                {
                    deviceGeneralInfoForDetail creatTodayDeviceInfo = new deviceGeneralInfoForDetail();
                    creatTodayDeviceInfo.ext1 = str_srmNo;//机号赋值
                    //设备报警时间
                    creatTodayDeviceInfo.deviceAlarmTime = Convert.ToDecimal(deviceAlarmTime.Hours * 60M) + deviceAlarmTime.Minutes;//单位分钟
                    //设备运行时间
                    creatTodayDeviceInfo.deviceRunTime = Convert.ToDecimal(deviceRunTime.Hours * 60M) + deviceRunTime.Minutes;//单位分钟
                    //设备等待时间
                    //creatTodayDeviceInfo.deviceWaitTime = Convert.ToDecimal(deviceWaitTime.Hours * 60M) + deviceWaitTime.Minutes;//单位分钟
                    //重新计算设备等待时间 【Editby shaocx,2024-12-30】
                    DeviceGeneralInfoHelper.CommonCalcWaitTime(ref todayDeviceInfo);
 
                    creatTodayDeviceInfo.createTime = DateTime.Now;
                    mod.deviceGeneralInfoForDetail.Add(creatTodayDeviceInfo);
                    mod.SaveChanges();
                    //计时复位
 
                }
 
            }
        }
 
 
        public static void CommonCalcWaitTime(ref deviceGeneralInfo todayDeviceInfo)
        {
            //重新计算设备等待时间 【Editby shaocx,2024-12-30】
            todayDeviceInfo.deviceWaitTime = 1440 - (todayDeviceInfo.deviceRunTime + todayDeviceInfo.deviceAlarmTime);
        }
        public static void CommonCalcWaitTime(ref deviceGeneralInfoForDetail todayDeviceInfo)
        {
            //重新计算设备等待时间 【Editby shaocx,2024-12-30】
            todayDeviceInfo.deviceWaitTime = 1440 - (todayDeviceInfo.deviceRunTime + todayDeviceInfo.deviceAlarmTime);
        }
    }
}