EDataManager.cs 4.9 KB
using Asa;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace OnlineStore.DeviceLibrary
{
    public class EDataManager
    {

        /// <summary>
        /// key=设备DeviceId,value=料盘信息
        /// </summary>
        private static ConcurrentDictionary<int, EquipDataInfo> dataMap = new ConcurrentDictionary<int, EquipDataInfo>();

        static EDataManager()
        {
        }
        public static List<EquipDataInfo> getDataList()
        {
            return new List<EquipDataInfo>(dataMap.Values);
        }


        public static EquipDataInfo GetEuipParam(int deviceId)
        {
            if (dataMap.ContainsKey(deviceId))
            {
                return dataMap[deviceId];
            }
            return null;
        }


        public static void UpdateParam(int deviceId, int reelType = 0, InOutParam param = null)
        {
            if (reelType.Equals(0) || param == null)
            {
                EquipDataInfo data = null;
                dataMap.TryRemove(deviceId, out data);
            }
            else
            {
                EquipDataInfo data = new EquipDataInfo(deviceId, reelType, param);
                if (dataMap.ContainsKey(deviceId))
                {
                    dataMap[deviceId] = data;
                }
                else
                {
                    dataMap.TryAdd(deviceId, data);
                }
            }
            SaveMapToFile();
        }



        //public static void ClearInOutParam()
        //{
        //    LogUtil.info("-------------------点击:清空托盘。清空前打印托盘信息:");
        //    List<EquipDataInfo> tray = new List<EquipDataInfo>    (paramdataMap.Values);
        //    foreach (EquipDataInfo t in tray)
        //    {
        //        LogUtil.info(t.ToStr());
        //    }
        //    paramdataMap = new ConcurrentDictionary<int, EquipDataInfo>();
        //    SaveMapToFile();
        //    LogUtil.info("-------------------点击:清空托盘。托盘内容已清空");
        //}


        private static string FilePath = "";
        public static void InitFileData()
        {
            dataMap = new ConcurrentDictionary<int, EquipDataInfo>();

            FilePath = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_TrayList);
            if (File.Exists(FilePath))
            {
                LogUtil.info("开始加载文件设备料盘信息:" + FilePath);
                string[] lines = FileEncoding.GetFileLines(FilePath);
                foreach (string line in lines)
                {
                    EquipDataInfo data = JsonHelper.DeserializeJsonToObject<EquipDataInfo>(line);
                    if (data != null && (data.inouParam != null) && (data.inouParam.WareCode != "") && data.ReelType > 0)
                    {
                        LogUtil.info("加载到设备料盘信息:" + data.ToStr());
                        dataMap.TryAdd(data.DeviceId, data);
                    }
                }
                LogUtil.info("设备料盘加载完成");
            }
        }

        public static void SaveMapToFile()
        {
            try
            {
                List<EquipDataInfo> trayList = new List<EquipDataInfo>(dataMap.Values);
                List<string> lineList = new List<string>();
                foreach (EquipDataInfo tray in trayList)
                {
                    string line = JsonHelper.SerializeObject(tray);
                    if (!string.IsNullOrEmpty(line))
                    {
                        lineList.Add(line);
                    }
                }
                FileEncoding.WritteFile(FilePath, lineList.ToArray());
            }
            catch (Exception ex)
            {
                LogUtil.error("SaveTrayToFile出错:" + ex.ToString());
            }
        }

    }
    public class EquipDataInfo
    {
        public EquipDataInfo()
        {
            this.DeviceId = 0;
            this.inouParam = null;
            this.ReelType = 0;
        }
        public EquipDataInfo(int id, int reelType, InOutParam param)
        {
            this.ReelType = reelType;
            this.DeviceId = id;
            this.inouParam = param;
        }
        public int DeviceId { get; set; }

        public InOutParam inouParam { get; set; }

        /// <summary>
        /// 1=入库,2=出库
        /// </summary>
        public int ReelType { get; set; }

        public string ToStr()
        {
            if (inouParam == null)
            {
                return "设备[" + DeviceId + "]=null";
            }
            return "设备[" + DeviceId + "]=" + inouParam.ToStr();
        }
    }
}