TrayManagerControl.cs 9.0 KB
using OnlineStore;
using DeviceLibrary;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OnlineStore.Common;

namespace TheMachine
{
    public partial class TrayManagerControl : UserControl
    {
        Robot_Config _Config;
        public Robot_Config Config
        {
            get { return _Config; }
            set
            {
                _Config = value;
                Init();
            }
        }
        public TrayManagerControl()
        {
            InitializeComponent();
            crc.LanguageChangeEvent += Crc_LanguageChangeEvent;
        }

        private void Crc_LanguageChangeEvent(object sender, EventArgs e)
        {
            Init();
        }

        private void TrayManagerControl_Load(object sender, EventArgs e)
        {

        }
        void Init() {
            timer1.Stop();
            #region listview初始化
            listView1.Columns.Clear();
            var ColList = new string[] { "RFID", crc.GetString("Res0019", "上次地址"), crc.GetString("Res0020", "更新时间"), crc.GetString("Res0021", "托盘类型"), crc.GetString("Res0022", "物料"), crc.GetString("Res0023", "目的地"),"ID" };
            listView1.View = View.Details;
            foreach (var coltxt in ColList)
            {
                ColumnHeader col1 = new ColumnHeader();
                col1.Text = coltxt;
                col1.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
                col1.Width = 100;
                listView1.Columns.Add(col1);
            }
            listView1.ColumnClick += ListView1_ColumnClick;
            #endregion

            #region listview2初始化
            ListView2.Columns.Clear();
            var ColList2 = new string[] { crc.GetString("Res0053","设备"), crc.GetString("Res0021", "托盘类型"), crc.GetString("Res0054","备注") };
            ListView2.View = View.Details;
            foreach (var coltxt in ColList2)
            {
                ColumnHeader col1 = new ColumnHeader();
                col1.Text = coltxt;
                col1.Width = 100;
                col1.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);                
                ListView2.Columns.Add(col1);
            }
            //ListView2.ColumnClick += ListView1_ColumnClick;
            #endregion
            timer1.Start();
        }
        int sortCol = 0;
        private void ListView1_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            sortCol = e.Column;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!Visible)
                return;

            var traylist = TrayManager.Traylist.Values.ToList();

            traylist.Sort((a, b) => {
                switch (sortCol)
                {
                    case 0:
                        return string.Compare(a.RFID, b.RFID);
                    case 1:
                        return a.LastAddr- b.LastAddr;                       
                    case 2:
                        return (int)(a.LastUpdateTime-b.LastUpdateTime).TotalSeconds;
                    case 3:
                        return string.Compare(a.LoadType.ToString(), b.LoadType.ToString());
                    case 4:
                        return string.Compare(a.LoadType.ToString(), b.LoadType.ToString());
                    case 5:
                        return a.DestinationAddr- b.DestinationAddr;
                    default:
                        return string.Compare(a.RFID, b.RFID);
                }
                
            });
            //listView1.Items.Clear();
            foreach (var ti in traylist) {
                var timego = (DateTime.Now - ti.LastUpdateTime);
                var lasttime = timego.Seconds + crc.GetString("Res0102.cae20b9e","秒前");
                if (timego.Minutes > 0)
                    lasttime = timego.Minutes + crc.GetString("Res0103.4c40da19","分 ") + lasttime;
                if (timego.Hours > 0)
                    lasttime = timego.Hours + crc.GetString("Res0104.481f431e","时 ") + lasttime;
                var traydesc = crc.GetString("TrayType_" + ti.TrayType, TrayManager.TrayTypeDesc[ti.TrayType]);
                var loaddesc = crc.GetString("TrayType_" + ti.LoadType, TrayManager.TrayTypeDesc[ti.LoadType]);
                var lastaddrdesc = TrayManager.AddrDesc[ti.LastAddr];
                var toaddrdesc = TrayManager.AddrDesc[ti.DestinationAddr];
                var reelid = "";
                reelid = ti.TrayParam?.WareCode;
                var items = new string[] {lastaddrdesc.ToString(), lasttime, traydesc, loaddesc, toaddrdesc, reelid };

                if (string.IsNullOrEmpty(ti.RFID))
                    continue;

                if (listView1.Items.ContainsKey(ti.RFID))
                {
                    while (listView1.Items[ti.RFID].SubItems.Count > 1)
                    {
                        listView1.Items[ti.RFID].SubItems.RemoveAt(1);
                    }
                    listView1.Items[ti.RFID].SubItems.AddRange(items);
                }
                else
                {
                    var listviewitem = new ListViewItem();
                    listView1.Items.Add(ti.RFID, ti.RFID,0);
                    listView1.Items[ti.RFID].SubItems.AddRange(items);
                    listView1.Items[ti.RFID].UseItemStyleForSubItems = true;
                }

                if (timego.TotalSeconds < 15)
                    listView1.Items[ti.RFID].ForeColor = Color.DarkGreen;
                else if (timego.TotalSeconds > 30)
                    listView1.Items[ti.RFID].ForeColor = Color.DarkGray;
                else
                    listView1.Items[ti.RFID].ForeColor = Color.Black;
                if (ti.HasLoad && ti.TrayParam.IsNg) {
                    listView1.Items[ti.RFID].ForeColor = Color.Orange;
                }
                if (ti.IsLoadError)
                    listView1.Items[ti.RFID].ForeColor = Color.Red;
                
            }
            ListView2.Items.Clear();
            foreach (var tivk in TrayManager.TrayRequest.ToArray())
            {
                var ti = tivk.Value;
                var traydesc = crc.GetString("TrayType_" + ti.GetTrayType, TrayManager.TrayTypeDesc[ti.GetTrayType]);
                var desc = ti.IsEmpty ? crc.GetString("Res0030","空托盘") :"";
                var items = new string[] { traydesc, desc };

                var listviewitem = new ListViewItem();
                listviewitem.UseItemStyleForSubItems = true;
                listviewitem.Text = tivk.Key;
                listviewitem.SubItems.AddRange(items);
                ListView2.Items.Add(listviewitem);
            }
           

            //listView1.AutoResizeColumn(0, ColumnHeaderAutoResizeStyle.ColumnContent);
            label_Statistics.Text = crc.GetString("Res0027","托盘统计")+":" + "\n"
                + crc.GetString("Res0028","离线总数") + ": " + TrayManager.OfflineCount + "\n"
                + crc.GetString("Res0029","在线总数") + ": " + (TrayManager.TotalCount- TrayManager.OfflineCount) + "\n"
                + crc.GetString("Res0030","空托盘") + ": " + TrayManager.EmptyCount + "\n"
                + crc.GetString("Res0031","入库托盘") + ": " + TrayManager.InStoreCount + "\n"
                + crc.GetString("Res0032","出库托盘") + ": " + TrayManager.OutStoreCount + "\n";
        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count ==0)
            {
                gb_trayinfo.Visible = false;
                return;
            }
            var ti = TrayManager.Traylist[listView1.SelectedItems[0].Text];
            string txt = "RFID" + ": " + listView1.SelectedItems[0].Text;
            txt += "\r\n"+crc.GetString("Res0021","托盘类型") + ": " + listView1.SelectedItems[0].SubItems[2].Text;
            txt += "\r\n"+crc.GetString("Res0055","物料") + ": " + listView1.SelectedItems[0].SubItems[3].Text;
            txt += "\r\n"+crc.GetString("Res0023","目的地") + ": " + listView1.SelectedItems[0].SubItems[4].Text;
            if (listView1.SelectedItems[0].SubItems.Count>6)
                txt += "\r\n"+"Code" + ": " + listView1.SelectedItems[0].SubItems[6].Text;
            if (ti.HasLoad && ti.TrayParam.IsNg) {
                txt += "\r\n" + "NgMsg" + ": " + ti.TrayParam.NgMsg;
            }
            lbl_info.Text = txt;
            gb_trayinfo.Visible = true;
        }

        private void btn_reset_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count != 1)
            {
                gb_trayinfo.Visible = false;
                return;
            }
            TrayManager.SetToEmpty(listView1.SelectedItems[0].Text);
            LogUtil.info("手动清空托盘信息 RFID:" + listView1.SelectedItems[0].Text);
        }
    }
}