LabelMachine.print.cs 4.1 KB
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    public partial class LabelMachine
    {
        public void InitPrint()
        {
            RobotManage.PrintBean.PrintStatusChanged += Print_PrintStatusChanged;
            RobotManage.LoadPrintSetting();
        }

        public Asa.PrintLabel.PrinterStatus LastPrintStatus = Asa.PrintLabel.PrinterStatus.Unknown;
        void Print_PrintStatusChanged(Asa.PrintLabel.PrinterStatus sta, string msg)
        {
            if (sta.Equals(LastPrintStatus).Equals(false))
            {
                LogUtil.info("PrintLabel 收到打印机新状态:【" + sta + "】【" + msg + "】,替换原来的状态【" + LastPrintStatus + "】 ");
            }
            else
            {
                if (sta == Asa.PrintLabel.PrinterStatus.Idle)
                {
                    Task.Run(() => {
                        while (true)
                        {
                            if (MoveInfo.IsStep(MoveStep.Lbl_WaitPrint))
                            {
                                MoveInfo.NextMoveStep(MoveStep.Lbl_Printted);
                                break;
                            }
                            Task.Delay(500).Wait();
                        }
                    });
                }
                LogUtil.info(" PrintLabel 收到打印机新状态:【" + sta + "】【" + msg + "】,与之前状态一样 ");
            }
            LastPrintStatus = sta;
        }
        public string LastPrintLabel = "";
        void StartPrintLabel(string wareCode, string wareCount, bool ReverseLabel=false)
        {
            try
            {
                LastPrintStatus = Asa.PrintLabel.PrinterStatus.Unknown;
                LogUtil.info("调用 PrintLabel 打印标签 StartPrintLabel  ,[" + wareCode + "] [" + wareCount + "]  开始");
                Dictionary<string, string> text = new Dictionary<string, string>();
                text.Add("Code", wareCode);
                text.Add("Count", wareCount);
                text.Add("DateTime", System.DateTime.Now.ToString("F"));
                text.Add("FactoryCode", "");

                LastPrintLabel = wareCode;
                RobotManage.PrintBean.Rotate180 = ReverseLabel;
                RobotManage.PrintBean.Print(text);
                LogUtil.info("PrintLabel 打印标签 StartPrintLabel 结束  ");
            }
            catch (Exception ex)
            {
                LogUtil.error("PrintLabel 打印标签 StartPrintLabel 错误:" + ex.ToString());
            }
        }

        public Task DoPrint(ReelParam labelParam, bool ReverseLabel = false)
        {
            LogUtil.info($"调用 PrintLabel 打印标签 WareCode:{labelParam.WareCode}, QTY:{labelParam.QTY}, ReverseLabel:{ReverseLabel}");
            StartPrintLabel(labelParam.WareCode, labelParam.QTY.ToString(), ReverseLabel);
            return Task.Run(() =>
            { });
        }

        /// <summary>
        /// 扫码线程
        /// </summary>
        Task<List<CodeInfo>> ScanTask;
        Task<List<CodeInfo>> ScanCode()
        {
            MoveInfo.log("开始贴标扫码线程");
            return Task.Run(new Func<List<CodeInfo>>(() =>
            {
                try
                {
                    IOMove(IO_Label_Type.Camera_Led, IO_VALUE.HIGH);
                    Task.Delay(10).Wait();
                    List<CodeInfo> LastCodeList = CodeManager.CameraScan(new List<string> { Config.CameraName });

                    if (LastCodeList.Count <= 0)
                    {
                        Task.Delay(500).Wait();
                        LastCodeList = CodeManager.CameraScan(new List<string> { Config.CameraName });
                    }
                    IOMove(IO_Label_Type.Camera_Led, IO_VALUE.LOW);

                    return LastCodeList;
                }
                catch {
                    return new List<CodeInfo>();
                }
            }));

        }
    }
}