schangxiang@126.com
2025-09-19 a68302033da081f9ad5e82268a01892c3e129cc1
增加信标
已添加1个文件
已修改2个文件
292 ■■■■■ 文件已修改
siemenswmssditcode/wmsService/wcftest/BussinessExtension/DeviceGeneralInfoHelper.cs 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
siemenswmssditcode/wmsService/wcftest/Form1.cs 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
siemenswmssditcode/wmsService/wcftest/wmsService.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
siemenswmssditcode/wmsService/wcftest/BussinessExtension/DeviceGeneralInfoHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,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);
        }
    }
}
siemenswmssditcode/wmsService/wcftest/Form1.cs
@@ -66,14 +66,20 @@
        /// è®¾å¤‡è¿è¡Œæ—¶é—´
        /// </summary>
        public static TimeSpan deviceRunTime;
        public static TimeSpan deviceRunTime_Srm1;
        public static TimeSpan deviceRunTime_Srm2;
        /// <summary>设备等待时间
        /// è®¾å¤‡ç­‰å¾…æ—¶é—´
        /// </summary>
        public static TimeSpan deviceWaitTime;
        public static TimeSpan deviceWaitTime_Srm1;
        public static TimeSpan deviceWaitTime_Srm2;
        /// <summary>设备报警时间
        /// è®¾å¤‡æŠ¥è­¦æ—¶é—´
        /// </summary>
        public static TimeSpan deviceAlarmTime;
        public static TimeSpan deviceAlarmTime_Srm1;
        public static TimeSpan deviceAlarmTime_Srm2;
        /// <summary>设备使用率
        /// è®¾å¤‡ä½¿ç”¨çއ
        /// </summary>
@@ -82,10 +88,14 @@
        /// è®¾å¤‡è¿è¡Œè®¡æ—¶å™¨
        /// </summary>
        Stopwatch deviceSw = new Stopwatch();
        Stopwatch deviceSw_Srm1 = new Stopwatch();
        Stopwatch deviceSw_Srm2 = new Stopwatch();
        /// <summary>上一次设备运行状态
        /// ä¸Šä¸€æ¬¡è®¾å¤‡è¿è¡ŒçŠ¶æ€
        /// </summary>
        public string lastStatus = "等待";
        public string lastStatus_Srm1 = "等待";
        public string lastStatus_Srm2 = "等待";
        /// <summary>上一次小时数--每隔一小时保存一次设备状态时间
        /// ä¸Šä¸€æ¬¡å°æ—¶æ•°--每隔一小时保存一次设备状态时间
        /// </summary>
@@ -3122,6 +3132,8 @@
                    string[] containers = new string[19];
                    deviceSw.Start();// è®¾å¤‡è¿è¡Œè®¡ç®—器开始记时
                    deviceSw_Srm1.Start();// è®¾å¤‡è¿è¡Œè®¡ç®—器开始记时
                    deviceSw_Srm2.Start();// è®¾å¤‡è¿è¡Œè®¡ç®—器开始记时
                    #region èŽ·å–è®¾å¤‡ä¿¡æ¯
                    if (allowGetDeviceInfo == true)
@@ -3223,7 +3235,7 @@
                                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);
                                DeviceGeneralInfoHelper.CommonCalcWaitTime(ref todayDeviceInfo);
                                todayDeviceInfo.taskEnterCount = enterTaskCount.Count;//入库任务数
                                todayDeviceInfo.taskOutCount = outTaskCount.Count;//出库任务数
@@ -3232,6 +3244,15 @@
                                todayDeviceInfo.stockProportion = Convert.ToInt32(cout);//已使用的库位
                                todayDeviceInfo.outDate = outTimeStockCount.Count;//过期时间小于一个月的库存数据
                            }
                            DeviceGeneralInfoHelper.HandlerDeviceGeneralInfoForDetail(1, enterTaskCount, outTaskCount, stockUsingCount, outTimeStockCount,
                                mod, lastHour, todayTime,
                                deviceSw_Srm1, deviceRunTime_Srm1, deviceAlarmTime_Srm1, deviceWaitTime_Srm1
                                );
                            DeviceGeneralInfoHelper.HandlerDeviceGeneralInfoForDetail(2, enterTaskCount, outTaskCount, stockUsingCount, outTimeStockCount,
                             mod, lastHour, todayTime,
                             deviceSw_Srm2, deviceRunTime_Srm2, deviceAlarmTime_Srm2, deviceWaitTime_Srm2
                             );
                            int chang = mod.SaveChanges();
                        }
@@ -3261,6 +3282,60 @@
                            if (lastStatus != "运行")
                            {
                                setDeviceStatusTime(lastStatus, "运行");
                            }
                        }
                    }
                    #endregion
                    #region ç»Ÿè®¡è®¾å¤‡è¿è¡Œæ•ˆçŽ‡ï¼ˆè¯¦ç»†ï¼‰ ã€Editby shaocx,2025-09-19】
                    //1号堆垛机
                    if (deviceListInfo.srm1.isAlarm == true)
                    {
                        if (lastStatus_Srm1 != "报警")
                        {
                            setDeviceStatusTimeForDetail(1, lastStatus_Srm1, "报警");
                        }
                    }
                    else
                    {
                        if (deviceListInfo.srm1.status == "空闲")
                        {
                            if (lastStatus_Srm1 != "等待")
                            {
                                setDeviceStatusTimeForDetail(1, lastStatus_Srm1, "等待");
                            }
                        }
                        else
                        {
                            if (lastStatus_Srm1 != "运行")
                            {
                                setDeviceStatusTimeForDetail(1, lastStatus_Srm1, "运行");
                            }
                        }
                    }
                    //2号堆垛机
                    if (deviceListInfo.srm2.isAlarm == true)
                    {
                        if (lastStatus_Srm2 != "报警")
                        {
                            setDeviceStatusTimeForDetail(2, lastStatus_Srm2, "报警");
                        }
                    }
                    else
                    {
                        if (deviceListInfo.srm2.status == "空闲")
                        {
                            if (lastStatus_Srm2 != "等待")
                            {
                                setDeviceStatusTimeForDetail(2, lastStatus_Srm2, "等待");
                            }
                        }
                        else
                        {
                            if (lastStatus_Srm2 != "运行")
                            {
                                setDeviceStatusTimeForDetail(2, lastStatus_Srm2, "运行");
                            }
                        }
                    }
@@ -3310,9 +3385,66 @@
            {
            }
        }
        /// <summary>设备状态变化的时候 ä¿å­˜çŠ¶æ€æ—¶é—´ï¼ˆæ˜Žç»†ï¼‰
        /// è®¾å¤‡çŠ¶æ€å˜åŒ–çš„æ—¶å€™ ä¿å­˜çŠ¶æ€æ—¶é—´
        /// </summary>
        /// <param name="status"></param>
        private void setDeviceStatusTimeForDetail(int srmNo, string lastStatuss, string nowStatus)
        {
            try
            {
                switch (lastStatuss)
                {
                    case "等待":
                        if (srmNo == 1)
                        {
                            deviceWaitTime_Srm1 += deviceSw_Srm1.Elapsed;
                        }
                        else
                        {
                            deviceWaitTime_Srm2 += deviceSw_Srm2.Elapsed;
                        }
                        break;
                    case "运行":
                        if (srmNo == 1)
                        {
                            deviceRunTime_Srm1 += deviceSw_Srm1.Elapsed;
                        }
                        else
                        {
                            deviceRunTime_Srm2 += deviceSw_Srm2.Elapsed;
                        }
                        break;
                    case "报警":
                        if (srmNo == 1)
                        {
                            deviceAlarmTime_Srm1 += deviceSw_Srm1.Elapsed;
                        }
                        else
                        {
                            deviceAlarmTime_Srm2 += deviceSw_Srm2.Elapsed;
                        }
                        break;
                }
                if (srmNo == 1)
                {
                    deviceSw_Srm1.Restart();
                    lastStatus_Srm1 = nowStatus;
                }
                else
                {
                    deviceSw_Srm2.Restart();
                    lastStatus_Srm2 = nowStatus;
                }
            }
            catch (Exception)
            {
            }
        }
        /// <summary>大屏信息初始化
        /// å¤§å±ä¿¡æ¯åˆå§‹åŒ–
@@ -3347,7 +3479,7 @@
                        //设备等待时间
                        //creatTodayDeviceInfo.deviceWaitTime = Convert.ToDecimal(deviceWaitTime.Hours * 60M) + deviceWaitTime.Minutes;//单位分钟
                        //重新计算设备等待时间 ã€Editby shaocx,2024-12-30】
                        CommonCalcWaitTime(ref todayDeviceInfo);
                        DeviceGeneralInfoHelper.CommonCalcWaitTime(ref todayDeviceInfo);
                        creatTodayDeviceInfo.createTime = DateTime.Now;
                        mod.deviceGeneralInfo.Add(creatTodayDeviceInfo);
@@ -3357,6 +3489,10 @@
                    }
                }
                DeviceGeneralInfoHelper.deviceInfoInitForDetails(1, todayTime, lastHour, deviceAlarmTime_Srm1, deviceRunTime_Srm1, deviceWaitTime_Srm1);
                DeviceGeneralInfoHelper.deviceInfoInitForDetails(2, todayTime, lastHour, deviceAlarmTime_Srm2, deviceRunTime_Srm2, deviceWaitTime_Srm2);
                deviceInfos = new Thread(deviceInfo);
                deviceInfos.Start();
            }
@@ -3591,16 +3727,7 @@
            return resultDate;
        }
        private void CommonCalcWaitTime(ref deviceGeneralInfo todayDeviceInfo)
        {
            //重新计算设备等待时间 ã€Editby shaocx,2024-12-30】
            todayDeviceInfo.deviceWaitTime = 1440 - (todayDeviceInfo.deviceRunTime + todayDeviceInfo.deviceAlarmTime);
        }
        private void CommonCalcWaitTime(ref deviceGeneralInfoForDetail todayDeviceInfo)
        {
            //重新计算设备等待时间 ã€Editby shaocx,2024-12-30】
            todayDeviceInfo.deviceWaitTime = 1440 - (todayDeviceInfo.deviceRunTime + todayDeviceInfo.deviceAlarmTime);
        }
        #endregion
siemenswmssditcode/wmsService/wcftest/wmsService.csproj
@@ -96,6 +96,7 @@
    <Compile Include="BussinessExtension\SAP\SAPHelper.cs" />
    <Compile Include="BussinessExtension\SystemHelper.cs" />
    <Compile Include="BussinessExtension\VirtualModeHelper.cs" />
    <Compile Include="BussinessExtension\DeviceGeneralInfoHelper.cs" />
    <Compile Include="BussinessExtension\WcsWcfApiHelper.cs" />
    <Compile Include="deviceorm\ChaiDieTransport.cs" />
    <Compile Include="deviceorm\DevAlert.cs" />