UnlockMissionManager.cs 5.6 KB
using Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    /// <summary>
    ///解绑料架任务管理
    /// </summary>
    public class UnlockMissionManager
    {
        public delegate void MissionChangedHandler(Dictionary<string, UnlockInfo> pairs);
        public event MissionChangedHandler MissionChanged;
        /// <summary>
        /// 任务列表
        /// </summary>
        public Dictionary<string, UnlockedShelf> NodeUnlockMissions { get; private set; }
        Dictionary<string, UnlockInfo> UnlockMissions;
        public UnlockMissionManager(List<ClientNode> clientNodes)
        {
            NodeUnlockMissions = new Dictionary<string, UnlockedShelf>();
            UnlockMissions = new Dictionary<string, UnlockInfo>();
            foreach (ClientNode item in clientNodes)
            {
                if (item.Name.StartsWith("A") || item.Name.Equals(SettingString.RoomCFeederIn) || item.Name.Equals(SettingString.RoomDFeederIn))
                    continue;
                NodeUnlockMissions.Add(item.Name, new UnlockedShelf());
                UnlockMissions = new Dictionary<string, UnlockInfo>();
            }
        }
        public UnlockMissionManager()
        {
            NodeUnlockMissions = new Dictionary<string, UnlockedShelf>();
            UnlockMissions = new Dictionary<string, UnlockInfo>();
        }
        public void Init()
        {
            foreach (var item in NodeUnlockMissions.Keys)
            {
                UnlockMissions.Add(item, new UnlockInfo(item, NodeUnlockMissions[item].EmptyCnt, NodeUnlockMissions[item].GetRfidWithTime()));
            }
            MissionChanged?.Invoke(UnlockMissions);
        }
        public UnlockedShelf GetUnlockInfo(string nodeName)
        {
            if (NodeUnlockMissions.ContainsKey(nodeName))
            {
                return NodeUnlockMissions[nodeName];
            }
            return null;
        }
        public int GetUnlockCnt(string nodeName)
        {
            if (NodeUnlockMissions.ContainsKey(nodeName))
            {
                return NodeUnlockMissions[nodeName].EmptyCnt;
            }
            return -1;
        }
        public List<string> GetUnlockRfids(string nodeName)
        {
            if (NodeUnlockMissions.ContainsKey(nodeName))
            {
                return NodeUnlockMissions[nodeName].GetRfids();
            }
            return new List<string>();
        }
        public bool AddMission(string nodeName, string rfid)
        {
            bool rtn = NodeUnlockMissions[nodeName].Add(rfid);
            if (rtn)
            {
                UnlockMissions[nodeName] = new UnlockInfo(nodeName, NodeUnlockMissions[nodeName].EmptyCnt, NodeUnlockMissions[nodeName].GetRfidWithTime());
                WriteUnlockLineInfo();
                AGVManager.WriteIni(nodeName, SettingString.EmptyShelfCnt, NodeUnlockMissions[nodeName].EmptyCnt.ToString());
                LogUtil.info(string.Format("{0}解绑任务添加成功:RFID={1}", nodeName, rfid));
                MissionChanged?.Invoke(UnlockMissions);
            }
            else
                LogUtil.info(string.Format("{0}解绑任务添加失败:RFID={1}", nodeName, rfid));
            return rtn;
        }
        public bool DelMission(string nodeName, string rfid)
        {
            bool rtn = NodeUnlockMissions[nodeName].Delete(rfid);
            if (rtn)
            {
                UnlockMissions[nodeName] = new UnlockInfo(nodeName, NodeUnlockMissions[nodeName].EmptyCnt, NodeUnlockMissions[nodeName].GetRfidWithTime());
                WriteUnlockLineInfo();
                AGVManager.WriteIni(nodeName, SettingString.EmptyShelfCnt, NodeUnlockMissions[nodeName].EmptyCnt.ToString());
                LogUtil.info(string.Format("{0}解绑任务删除成功:RFID={1}", nodeName, rfid));
                MissionChanged?.Invoke(UnlockMissions);
            }
            else
                LogUtil.info(string.Format("{0}解绑任务删除失败:RFID={1}", nodeName, rfid));
            return rtn;
        }
        /// <summary>
        /// 保存料架解绑信息
        /// </summary>
        void WriteUnlockLineInfo()
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(AGVManager.CONFIG_PATH + "UnlockInfo.json"))
            {
                string s = JsonHelper.SerializeObject(this);
                file.WriteLine(s);
            }
        }
    }

    public class UnlockInfo
    {
        public string Line { get; set; }
        public int Count { get; set; }
        public string RFID { get; set; }
        public List<UnlockRfid> UnlockRfids { get; private set; }
        public UnlockInfo(string nodeName, int count, Dictionary<string, string> rfids)
        {
            if (AGVManager.GetLineNameByNodeName(nodeName, out string line))
            {
                Line = line;
            }
            else
            {
                Line = nodeName;
            }
            Count = count;
            RFID = string.Join(",", rfids.Keys);
            UnlockRfids = new List<UnlockRfid>();
            foreach (var item in rfids.Keys)
            {
                UnlockRfids.Add(new UnlockRfid(nodeName, rfids[item], item));
            }
        }
    }
    public class UnlockRfid
    {
        public String Line { get; set; }
        public string RFID { get; set; }
        public string Time { get; set; }
        public UnlockRfid(string line, string time, string rfid)
        {
            Time = time;
            RFID = rfid;
            Line = line;
        }
    }
}