TrayDisableManager.cs 2.6 KB
using OnlineStore.Common;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    public class TrayDisableManager
    {
        public static bool ProcessTray = false;
        public static string ProWarnMsg = "拦截到禁用托盘";
        /// <summary>
        /// 托盘集合,key=托盘编号,value=托盘详细信息
        /// </summary>
        private static ConcurrentDictionary<int, TrayDisableInfo> TrayDisableMap = new ConcurrentDictionary<int, TrayDisableInfo>();

        public static void ClearDisableMap()
        {
            List<TrayDisableInfo> tray = GetDisableList();
            LogUtil.info("-------------------点击:清空禁用托盘。清空前打印托盘禁用信息:");
            foreach (TrayDisableInfo t in tray)
            {
                LogUtil.info(t.ToStr());
            }

            TrayDisableMap = new ConcurrentDictionary<int, TrayDisableInfo>();
            LogUtil.info("-------------------点击:清空禁用托盘。托盘禁用列表已清空");
        }

        public static List<TrayDisableInfo> GetDisableList()
        {
            List<TrayDisableInfo> dislist = new List<TrayDisableInfo>(TrayDisableMap.Values);
            return dislist;
        }

        public static void AddDisable(int trayNum, string deviceName, string describle)
        {
            TrayDisableInfo t = new TrayDisableInfo(trayNum, deviceName, describle);
            if (TrayDisableMap.ContainsKey(trayNum))
            {
                TrayDisableMap[trayNum] = t;
            }
            else
            {
                TrayDisableMap.TryAdd(trayNum, t);
            }

            //如果托盘上物料是入库的,直接清理入库 任务
            TrayInfo tray = TrayManager.GetTrayInfo(trayNum);
            if (tray.IsFull && tray.InOrOutStore.Equals(1))
            {
                TrayManager.ClearInstore(tray, "禁用托盘[" + trayNum + "]");
            }
            LogUtil.info("增加托盘禁用:" + t.ToStr() + "");
        }

        public static void RemoveDisable(int trayNum)
        {         
            TrayManager.UpdateTrayInfo(trayNum);

            bool result = TrayDisableMap.TryRemove(trayNum, out TrayDisableInfo removeInfo);
            if (result && removeInfo != null)
            {
                LogUtil.info("启用托盘:" + removeInfo.ToStr());
            }
        }

        internal static bool DisableTray(int currTrayNum)
        {
            return TrayDisableMap.ContainsKey(currTrayNum);
        }
    }
}