TrayManagerControl.cs 8.1 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("Res0021", "托盘类型"), "备注" };
            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("Res0024","秒前");
                if (timego.Minutes > 0)
                    lasttime = timego.Minutes + crc.GetString("Res0025","分 ") + lasttime;
                if (timego.Hours > 0)
                    lasttime = timego.Hours + crc.GetString("Res0026","时 ") + lasttime;
                var traydesc = TrayManager.TrayTypeDesc[ti.TrayType];
                var loaddesc = 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 (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;
            }
            ListView2.Items.Clear();
            foreach (var tivk in TrayManager.TrayRequest.ToArray())
            {
                var ti = tivk.Value;
                var traydesc = TrayManager.TrayTypeDesc[ti.GetTrayType];
                var desc = ti.IsEmpty ? "空托盘" :"";
                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);
            }
           TrayManager.Statistics();

            //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;
            }
            
            string txt = "RFID" + ": " + listView1.SelectedItems[0].Text;
            txt += "\r\n"+"托盘类型" + ": " + listView1.SelectedItems[0].SubItems[2].Text;
            txt += "\r\n"+"载荷" + ": " + listView1.SelectedItems[0].SubItems[3].Text;
            txt += "\r\n"+"目的地" + ": " + listView1.SelectedItems[0].SubItems[4].Text;
            txt += "\r\n"+"Code" + ": " + listView1.SelectedItems[0].SubItems[6].Text;

            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);
        }
    }
}