C# 网络打印机ESC指令打印小票

        public void SendSocketMsg(String ip, int port, int times, byte[] data)
        {
            try
            {
                byte[] mData;
                if (times == 1)
                {
                    mData = new byte[data.Length];
                    Array.Copy(data, 0, mData, 0, data.Length);
                }
                else
                {
                    mData = new byte[data.Length * times];
                    byte[][] m = new byte[times][];
                    for (int i = 0; i < times; i++)
                    {
                        m[i] = data;
                    }
                    Array.Copy(PrinterCmdUtils.byteMerger(m), 0, mData, 0, PrinterCmdUtils.byteMerger(m).Length);
                }

                #region 同步 Socket
                Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ipAddress = IPAddress.Parse(ip);
                IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, port);

                mySocket.Connect(ipEndPoint);
                //mySocket.Send(data);
                mySocket.Send(mData);
                mySocket.Close();
                #endregion
            }
            catch (Exception ex)
            {
                Logger.Trace(ex.Message);
                Logger.Trace(ex.StackTrace);
            }
        }
    public class PrintService
    {
        static byte[] b_init = PrinterCmdUtils.init_printer();
        static byte[] b_nextLine = PrinterCmdUtils.nextLine(1);
        static byte[] b_next2Line = PrinterCmdUtils.nextLine(2);
        static byte[] b_next3Line = PrinterCmdUtils.nextLine(3);
        static byte[] b_center = PrinterCmdUtils.alignCenter();
        static byte[] b_left = PrinterCmdUtils.alignLeft();
        static byte[] b_breakPartial = PrinterCmdUtils.feedPaperCutPartial();

        /// <summary>
        /// 会员充值小票
        /// </summary>
        /// <param name="shop"></param>
        /// <param name="num"></param>
        /// <param name="count"></param>
        /// <param name="way"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public static byte[] charge(String shop, String num, String count, String way, String time)
        {
            String shop_f = "   会员充值(" + shop + "";
            String num_f = "   会员号码:" + num;
            String count_f = "   充值金额:" + count;
            String way_f = "   充值方式:" + way;
            String time_f = "   充值时间:" + time;

            try
            {
                byte[] b_title = System.Text.Encoding.GetEncoding("gbk").GetBytes(shop_f); 
                byte[] b_num = System.Text.Encoding.GetEncoding("gbk").GetBytes(num_f);
                byte[] b_count = System.Text.Encoding.GetEncoding("gbk").GetBytes(count_f);
                byte[] b_way = System.Text.Encoding.GetEncoding("gbk").GetBytes(way_f);
                byte[] b_time = System.Text.Encoding.GetEncoding("gbk").GetBytes(time_f);
                byte[] b_no = System.Text.Encoding.GetEncoding("gbk").GetBytes("   ----------------------------------------");
                byte[] b_breakPartial = PrinterCmdUtils.feedPaperCutPartial();

                byte[][] charge_0 = { 
                    b_init, 
                    b_center, b_title,  b_next2Line, 
                    b_left,   b_count,  b_nextLine, 
                    b_way,    b_nextLine, 
                    b_time,   b_nextLine, 
                    b_no,     b_nextLine,
                    b_breakPartial,
                    PrinterCmdUtils.open_money()
                    };

                byte[][] charge_1 = { 
                    b_init, 
                    b_center, b_title,  b_next2Line, 
                    b_left,   b_num,    b_nextLine, 
                    b_count,  b_nextLine, 
                    b_way,    b_nextLine, 
                    b_time,   b_nextLine, 
                    b_no,     b_nextLine,
                    b_breakPartial,
                    PrinterCmdUtils.open_money() 
                    };

                if (String.IsNullOrEmpty(num))
                {
                    return PrinterCmdUtils.byteMerger(charge_0);
                }
                else
                {
                    return PrinterCmdUtils.byteMerger(charge_1);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

/// <summary> /// 收银小票 Json对象拼接 /// </summary> /// <param name="head"></param> /// <param name="recv"></param> /// <param name="foot"></param> /// <returns></returns> public static byte[] jsonParse(String head, String recv, String foot, String url) { try { //二维码生成 EscCommand esc = new EscCommand(); esc.addSelectErrorCorrectionLevelForQRCode((byte)0x31); esc.addSelectSizeOfModuleForQRCode((byte)8); esc.addStoreQRCodeData(url); esc.addPrintQRCode(); ArrayList datas = esc.getCommand(); Byte[] Bytes = new Byte[datas.Count]; for (int i = 0; i < datas.Count; i++) { Bytes[i] = (Byte)datas[i]; } byte[] bytes = EscCommand.toPrimitive(Bytes); //打印小票头部 List<String> headString = new List<String>(); List<TicketHead> mHeads = JsonConvert.DeserializeObject<List<TicketHead>>(head); headString.Add(" " + mHeads[0].Ordertime); headString.Add(" NO." + mHeads[0].Shopno); headString.Add(FileUtils.getFixedWidthString(" 当班人员:" + mHeads[0].Shopuser, 36) + "餐牌号:" + mHeads[0].Card); headString.Add(" ---------------------------------------------"); List<String> newString = new List<String>(); List<Ticket> mTickets = JsonConvert.DeserializeObject<List<Ticket>>(recv); String nameTitle = " 名称 数量 售价 优惠 总额"; newString.Add(nameTitle); for (int i = 0; i < mTickets.Count; i++) { StringBuilder item = new StringBuilder(); if (("1".Equals(mTickets[i].Type) || "2".Equals(mTickets[i].Type))) { if ("".Equals(mTickets[i].Parentid)) { if (mTickets[i].Name.Length > 8) { item.Append(FileUtils.getFixedWidthString(mTickets[i].Name.Substring(0, 8), 19)); item.Append(mTickets[i].Num.PadRight(4)); item.Append(String.Format("{0:F2}", mTickets[i].Price).PadRight(8)); item.Append(String.Format("{0:F2}", mTickets[i].Rebetmoney).PadRight(8)); item.Append(String.Format("{0:F2}", mTickets[i].Money).PadRight(6)); newString.Add(" " + item.ToString()); newString.Add(" " + mTickets[i].Name.Substring(8, mTickets[i].Name.Length - 8)); } else { item.Append(FileUtils.getFixedWidthString(mTickets[i].Name, 19)); item.Append(mTickets[i].Num.PadRight(4)); item.Append(String.Format("{0:F2}", mTickets[i].Price).PadRight(8)); item.Append(String.Format("{0:F2}", mTickets[i].Rebetmoney).PadRight(8)); item.Append(String.Format("{0:F2}", mTickets[i].Money).PadRight(6)); newString.Add(" " + item.ToString()); } } else { newString.Add(" " + mTickets[i].Name); } } } newString.Add(" ---------------------------------------------"); List<String> footString = new List<String>(); List<TicketFoot> mFoots = JsonConvert.DeserializeObject<List<TicketFoot>>(foot); String moneytotal = ((float.Parse(mFoots[0].DecAmmBalance) + float.Parse(mFoots[0].DecGroupBuyMoney))).ToString("f2"); String money = ((float.Parse(mFoots[0].DecRebeatBalance) + float.Parse(mFoots[0].DecGroupBuyMoney))).ToString("f2"); footString.Add(FileUtils.getFixedWidthString(" 餐品数量:", 20) + FileUtils.getFixedWidthString(mFoots[0].Counts, 10) + "点餐金额: " + moneytotal.PadRight(4)); if (float.Parse(mFoots[0].DecWipeMoney) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 抹零优惠:", 40) + mFoots[0].DecWipeMoney); if (float.Parse(mFoots[0].DecMemberCoupon) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 会员优惠:", 40) + mFoots[0].DecMemberCoupon); if (float.Parse(money) != 0.0f) { footString.Add(FileUtils.getFixedWidthString(" 券类优惠:", 40) + money.PadRight(4)); for (int i = 0; i < mTickets.Count; i++) { if (!"1".Equals(mTickets[i].Type) && !"2".Equals(mTickets[i].Type)) { footString.Add(FileUtils.getFixedWidthString(" " + mTickets[i].Name, 20) + mTickets[i].Num); } else { if (!string.IsNullOrEmpty(mTickets[i].RebetName)) footString.Add(FileUtils.getFixedWidthString(" " + mTickets[i].RebetName, 20) + 1); } } } footString.Add(" ---------------------------------------------"); if (float.Parse(mFoots[0].DecPaidBalance) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 折后支付:", 40) + mFoots[0].DecPaidBalance); if (float.Parse(mFoots[0].Membermoney) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 会员支付:", 40) + mFoots[0].Membermoney); if (float.Parse(mFoots[0].Cashmoney) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 现金支付:", 40) + mFoots[0].Cashmoney); if (!string.IsNullOrEmpty(mFoots[0].Bankmoney)) footString.Add(FileUtils.getFixedWidthString(" " + mFoots[0].Bankmoney.Split(':')[0], 40) + mFoots[0].Bankmoney.Split(':')[1]); if (float.Parse(mFoots[0].Givechange) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 现金找零:", 40) + mFoots[0].Givechange); if (float.Parse(mFoots[0].RechMoney) != 0.0f) footString.Add(FileUtils.getFixedWidthString(" 充值金额:", 40) + mFoots[0].RechMoney); ///////////////////////////////////////////////////////////////////////////////////////// byte[][] headByte = new byte[15][]; //头部数组 headByte[0] = b_init; headByte[1] = b_center; headByte[2] = System.Text.Encoding.GetEncoding("gbk").GetBytes("欢迎光临"); headByte[3] = b_nextLine; headByte[4] = System.Text.Encoding.GetEncoding("gbk").GetBytes(mHeads[0].Shopbrand); headByte[5] = b_next2Line; headByte[6] = b_left; for (int i = 0; i < 8; i += 2) { headByte[i + 7] = System.Text.Encoding.GetEncoding("gbk").GetBytes(headString[i / 2]); headByte[i + 8] = b_nextLine; } byte[][] contentByte = new byte[newString.Count * 2][]; //中间体 for (int i = 0; i < newString.Count * 2; i += 2) { contentByte[i] = System.Text.Encoding.GetEncoding("gbk").GetBytes(newString[i / 2]); contentByte[i + 1] = b_nextLine; } byte[][] footByte = new byte[footString.Count * 2 + 23][]; //底部数组 for (int i = 0; i < footString.Count * 2; i += 2) { footByte[i] = System.Text.Encoding.GetEncoding("gbk").GetBytes(footString[i / 2]); footByte[i + 1] = b_nextLine; } footByte[footString.Count * 2] = System.Text.Encoding.GetEncoding("gbk").GetBytes(" ---------------------------------------------"); if (string.IsNullOrEmpty(mHeads[0].Memberid)) { footByte[footString.Count * 2 + 1] = b_center; footByte[footString.Count * 2 + 2] = b_center; } else { footByte[footString.Count * 2 + 1] = b_nextLine; footByte[footString.Count * 2 + 2] = System.Text.Encoding.GetEncoding("gbk").GetBytes(" 会员号:" + mHeads[0].Memberid); } footByte[footString.Count * 2 + 3] = b_next2Line; footByte[footString.Count * 2 + 4] = b_center; footByte[footString.Count * 2 + 5] = System.Text.Encoding.GetEncoding("gbk").GetBytes("谢谢惠顾!欢迎再次光临!"); footByte[footString.Count * 2 + 6] = b_nextLine; footByte[footString.Count * 2 + 7] = System.Text.Encoding.GetEncoding("gbk").GetBytes("如需开发票,请凭小票在一周内到门店开取"); footByte[footString.Count * 2 + 8] = b_next2Line; footByte[footString.Count * 2 + 9] = b_left; footByte[footString.Count * 2 + 10] = System.Text.Encoding.GetEncoding("gbk").GetBytes(" 门店地址:" + mHeads[0].Shopaddress); footByte[footString.Count * 2 + 11] = b_nextLine; footByte[footString.Count * 2 + 12] = System.Text.Encoding.GetEncoding("gbk").GetBytes(" 联系电话:" + mHeads[0].Shoptel); footByte[footString.Count * 2 + 13] = b_nextLine; footByte[footString.Count * 2 + 14] = System.Text.Encoding.GetEncoding("gbk").GetBytes(" 品牌网址:" + mHeads[0].Url); footByte[footString.Count * 2 + 15] = b_next2Line; footByte[footString.Count * 2 + 16] = b_center; footByte[footString.Count * 2 + 17] = b_next2Line; footByte[footString.Count * 2 + 18] = System.Text.Encoding.GetEncoding("gbk").GetBytes("微信扫一扫 畅享免费WiFi"); footByte[footString.Count * 2 + 19] = b_next2Line; footByte[footString.Count * 2 + 20] = bytes; footByte[footString.Count * 2 + 21] = b_breakPartial; footByte[footString.Count * 2 + 22] = PrinterCmdUtils.open_money(); byte[][] totalByte = new byte[38 + newString.Count * 2 + footString.Count * 2][]; Array.Copy(headByte, totalByte, headByte.Length); Array.Copy(contentByte, 0, totalByte, headByte.Length, contentByte.Length); Array.Copy(footByte, 0, totalByte, headByte.Length + contentByte.Length, footByte.Length); return PrinterCmdUtils.byteMerger(totalByte); } catch (Exception) { Logger.Trace("Head:" + head); Logger.Trace("Recv:" + recv); Logger.Trace("Foot:" + foot); Logger.Trace("url:" + url); throw; } } }
    public class PrinterCmdUtils
    {

        public const byte ESC = 27;    // 换码
        public const byte FS = 28;    // 文本分隔符
        public const byte GS = 29;    // 组分隔符
        public const byte DLE = 16;    // 数据连接换码
        public const byte EOT = 4;    // 传输结束
        public const byte ENQ = 5;    // 询问字符
        public const byte SP = 32;    // 空格
        public const byte HT = 9;    // 横向列表
        public const byte LF = 10;    // 打印并换行(水平定位)
        public const byte CR = 13;    // 归位键
        public const byte FF = 12;    // 走纸控制(打印并回到标准模式(在页模式下) )
        public const byte CAN = 24;    // 作废(页模式下取消打印数据 )

        /**
         * 打印纸一行最大的字节
         */
        private const int LINE_BYTE_SIZE = 32;
        /**
         * 分隔符
         */
        private const String SEPARATOR = "$";
        private static StringBuilder sb = new StringBuilder();

        /**
         * 打印机初始化
         * 
         * @return
         */
        public static byte[] init_printer()
        {
            byte[] result = new byte[2];
            result[0] = ESC;
            result[1] = 64;
            return result;
        }

        /**
         * 打开钱箱
         * 
         * @return
         */
        public static byte[] open_money()
        {
            byte[] result = new byte[5];
            result[0] = ESC;
            result[1] = 112;
            result[2] = 48;
            result[3] = 64;
            result[4] = 0;
            return result;
        }

        /**
         * 换行
         * 
         * @param lineNum要换几行
         * @return
         */
        public static byte[] nextLine(int lineNum)
        {
            byte[] result = new byte[lineNum];
            for (int i = 0; i < lineNum; i++)
            {
                result[i] = LF;
            }

            return result;
        }


        /**
         * 绘制下划线(1点宽)
         * 
         * @return
         */
        public static byte[] underlineWithOneDotWidthOn()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 45;
            result[2] = 1;
            return result;
        }

        /**
         * 绘制下划线(2点宽)
         * 
         * @return
         */
        public static byte[] underlineWithTwoDotWidthOn()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 45;
            result[2] = 2;
            return result;
        }

        /**
         * 取消绘制下划线
         * 
         * @return
         */
        public static byte[] underlineOff()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 45;
            result[2] = 0;
            return result;
        }


        /**
         * 选择加粗模式
         * 
         * @return
         */
        public static byte[] boldOn()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 69;
            result[2] = 0xF;
            return result;
        }

        /**
         * 取消加粗模式
         * 
         * @return
         */
        public static byte[] boldOff()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 69;
            result[2] = 0;
            return result;
        }


        /**
         * 左对齐
         * 
         * @return
         */
        public static byte[] alignLeft()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 97;
            result[2] = 0;
            return result;
        }

        /**
         * 居中对齐
         * 
         * @return
         */
        public static byte[] alignCenter()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 97;
            result[2] = 1;
            return result;
        }

        /**
         * 右对齐
         * 
         * @return
         */
        public static byte[] alignRight()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 97;
            result[2] = 2;
            return result;
        }

        /**
         * 水平方向向右移动col列
         * 
         * @param col
         * @return
         */
        public static byte[] set_HT_position(byte col)
        {
            byte[] result = new byte[4];
            result[0] = ESC;
            result[1] = 68;
            result[2] = col;
            result[3] = 0;
            return result;
        }

        /**
         * 字体变大为标准的n倍
         * 
         * @param num
         * @return
         */
        public static byte[] fontSizeSetBig(int num)
        {
            byte realSize = 0;
            switch (num)
            {
                case 1:
                    realSize = 0;
                    break;
                case 2:
                    realSize = 17;
                    break;
                case 3:
                    realSize = 34;
                    break;
                case 4:
                    realSize = 51;
                    break;
                case 5:
                    realSize = 68;
                    break;
                case 6:
                    realSize = 85;
                    break;
                case 7:
                    realSize = 102;
                    break;
                case 8:
                    realSize = 119;
                    break;
            }
            byte[] result = new byte[3];
            result[0] = 29;
            result[1] = 33;
            result[2] = realSize;
            return result;
        }


        /**
         * 字体取消倍宽倍高
         * 
         * @return
         */
        public static byte[] fontSizeSetSmall()
        {
            byte[] result = new byte[3];
            result[0] = ESC;
            result[1] = 33;

            return result;
        }

        /**
         * 进纸并全部切割
         * 
         * @return
         */
        public static byte[] feedPaperCutAll()
        {
            byte[] result = new byte[4];
            result[0] = GS;
            result[1] = 86;
            result[2] = 65;
            result[3] = 0;
            return result;
        }

        /**
         * 进纸并切割(左边留一点不切)
         * 
         * @return
         */
        public static byte[] feedPaperCutPartial()
        {
            byte[] result = new byte[4];
            result[0] = GS;
            result[1] = 86;
            result[2] = 66;
            result[3] = 0;
            return result;
        }

        public static byte[] bmpToByte(Bitmap bmp)
        {
            int h = bmp.Height / 24 + 1;
            int w = bmp.Width;
            byte[][] all = new byte[4 + 2 * h + h * w][];

            all[0] = new byte[] { 0x1B, 0x33, 0x00 };

            Color pixelColor;
            // ESC * m nL nH 点阵图  
            byte[] escBmp = new byte[] { 0x1B, 0x2A, 0x21, (byte)(w % 256), (byte)(w / 256) };

            // 每行进行打印  
            for (int i = 0; i < h; i++)
            {
                all[i * (w + 2) + 1] = escBmp;
                for (int j = 0; j < w; j++)
                {
                    byte[] data = new byte[] { 0x00, 0x00, 0x00 };
                    for (int k = 0; k < 24; k++)
                    {
                        if (((i * 24) + k) < bmp.Height)
                        {
                            pixelColor = bmp.GetPixel(j, (i * 24) + k);
                            if (pixelColor.R == 0)
                            {
                                data[k / 8] += (byte)(128 >> (k % 8));
                            }
                        }
                    }
                    all[i * (w + 2) + j + 2] = data;
                }
                //换行  
                all[(i + 1) * (w + 2)] = PrinterCmdUtils.nextLine(1);
            }
            all[h * (w + 2) + 1] = PrinterCmdUtils.nextLine(2);
            all[h * (w + 2) + 2] = PrinterCmdUtils.feedPaperCutAll();
            all[h * (w + 2) + 3] = PrinterCmdUtils.open_money();

            return PrinterCmdUtils.byteMerger(all);
        }

        // ------------------------切纸-----------------------------
        public static byte[] byteMerger(byte[] byte_1, byte[] byte_2)
        {
            byte[] byte_3 = new byte[byte_1.Length + byte_2.Length];
            System.Array.Copy(byte_1, 0, byte_3, 0, byte_1.Length);
            System.Array.Copy(byte_2, 0, byte_3, byte_1.Length, byte_2.Length);
            return byte_3;
        }

        public static byte[] byteMerger(byte[][] byteList)
        {
            int Length = 0;
            for (int i = 0; i < byteList.Length; i++)
            {
                Length += byteList[i].Length;
            }
            byte[] result = new byte[Length];

            int index = 0;
            for (int i = 0; i < byteList.Length; i++)
            {
                byte[] nowByte = byteList[i];
                for (int k = 0; k < byteList[i].Length; k++)
                {
                    result[index] = nowByte[k];
                    index++;
                }
            }
            return result;
        }

        public static byte[][] byte20Merger(byte[] bytes)
        {
            int size = bytes.Length / 10 + 1;
            byte[][] result = new byte[size][];
            for (int i = 0; i < size; i++)
            {
                byte[] by = new byte[((i + 1) * 10) - (i * 10)];
                //从bytes中的第 i * 10 个位置到第 (i + 1) * 10 个位置;
                System.Array.Copy(bytes, i * 10, by, 0, (i + 1) * 10);
                result[i] = by;
            }
            return result;
        }
    }
    public class TicketHead
    {
        private String memberid;        //会员号

        public String Memberid
        {
            get { return memberid; }
            set { memberid = value; }
        }
        private String card;            //餐牌号

        public String Card
        {
            get { return card; }
            set { card = value; }
        }
        private String shopname;        //店名

        public String Shopname
        {
            get { return shopname; }
            set { shopname = value; }
        }
        private String shopaddress;        //店地址

        public String Shopaddress
        {
            get { return shopaddress; }
            set { shopaddress = value; }
        }
        private String shoptel;            //店电话

        public String Shoptel
        {
            get { return shoptel; }
            set { shoptel = value; }
        }
        private String shopno;            //店编号

        public String Shopno
        {
            get { return shopno; }
            set { shopno = value; }
        }
        private String shopuser;        //当班人员

        public String Shopuser
        {
            get { return shopuser; }
            set { shopuser = value; }
        }
        private String ordertime;        //点单时间

        public String Ordertime
        {
            get { return ordertime; }
            set { ordertime = value; }
        }
        private String url;                //网址

        public String Url
        {
            get { return url; }
            set { url = value; }
        }

        private string shopbrand;

        public string Shopbrand
        {
            get { return shopbrand; }
            set { shopbrand = value; }
        }
    }
    public class Ticket
    {
        private String id;

        public String Id
        {
            get { return id; }
            set { id = value; }
        }
        private String type;

        public String Type
        {
            get { return type; }
            set { type = value; }
        }
        private String parentid;

        public String Parentid
        {
            get { return parentid; }
            set { parentid = value; }
        }
        private String name;

        public String Name
        {
            get { return name; }
            set { name = value; }
        }
        private String num;

        public String Num
        {
            get { return num; }
            set { num = value; }
        }
        private String price;

        public String Price
        {
            get { return price; }
            set { price = value; }
        }
        private String money;

        public String Money
        {
            get { return money; }
            set { money = value; }
        }
        private String rebetmoney;

        public String Rebetmoney
        {
            get { return rebetmoney; }
            set { rebetmoney = value; }
        }
        private String rebetName;

        public String RebetName
        {
            get { return rebetName; }
            set { rebetName = value; }
        }
        private String rebetid;

        public String Rebetid
        {
            get { return rebetid; }
            set { rebetid = value; }
        }
        private String rebetType;

        public String RebetType
        {
            get { return rebetType; }
            set { rebetType = value; }
        }
        private String grouptype;

        public String Grouptype
        {
            get { return grouptype; }
            set { grouptype = value; }
        }
        private String groupid;

        public String Groupid
        {
            get { return groupid; }
            set { groupid = value; }
        }
        private String serialnumber;

        public String Serialnumber
        {
            get { return serialnumber; }
            set { serialnumber = value; }
        }

        private String addonname;

        public String AddOnName
        {
            get { return addonname; }
            set { addonname = value; }
        }

    }
    public class TicketFoot
    {
        private String decAmmBalance;        //点餐总额

        public String DecAmmBalance
        {
            get { return decAmmBalance; }
            set { decAmmBalance = value; }
        }
        private String decRebeatBalance;    //券内优惠

        public String DecRebeatBalance
        {
            get { return decRebeatBalance; }
            set { decRebeatBalance = value; }
        }
        private String decGroupBuyMoney;    //+

        public String DecGroupBuyMoney
        {
            get { return decGroupBuyMoney; }
            set { decGroupBuyMoney = value; }
        }
        private String decPaidBalance;        //折后支付

        public String DecPaidBalance
        {
            get { return decPaidBalance; }
            set { decPaidBalance = value; }
        }
        private String decMemberCoupon;        //会员优惠

        public String DecMemberCoupon
        {
            get { return decMemberCoupon; }
            set { decMemberCoupon = value; }
        }
        private String decWipeMoney;        //抹零优惠

        public String DecWipeMoney
        {
            get { return decWipeMoney; }
            set { decWipeMoney = value; }
        }
        private String wipe;                //

        public String Wipe
        {
            get { return wipe; }
            set { wipe = value; }
        }
        private String cashmoney;            //现金支付

        public String Cashmoney
        {
            get { return cashmoney; }
            set { cashmoney = value; }
        }
        private String bankmoney;            //银行卡支付

        public String Bankmoney
        {
            get { return bankmoney; }
            set { bankmoney = value; }
        }
        private String membermoney;            //会员支付

        public String Membermoney
        {
            get { return membermoney; }
            set { membermoney = value; }
        }
        private String counts;                //餐品数量

        public String Counts
        {
            get { return counts; }
            set { counts = value; }
        }

        private String givechange;            //找零

        public String Givechange
        {
            get { return givechange; }
            set { givechange = value; }
        }

        private string rechMoney;
        /// <summary>
        /// 充值金额
        /// </summary>
        public string RechMoney
        {
            get { return rechMoney; }
            set { rechMoney = value; }
        }
    }

 

    public class EscCommand
    {
        ArrayList Command = null;

        public EscCommand()
        {
            this.Command = new ArrayList();
        }

        public ArrayList getCommand()
        {
            return this.Command;
        }

        private void addArrayToCommand(byte[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                this.Command.Add(array[i]);
            }
        }

        public void addSelectErrorCorrectionLevelForQRCode(byte n)
        {
            byte[] command = { 29, 40, 107, 3, 0, 49, 69,3 };
            command[7] = n;
            addArrayToCommand(command);
        }

        public void addSelectSizeOfModuleForQRCode(byte n)
        {
            byte[] command = { 29, 40, 107, 3, 0, 49, 67, 3 };
            command[7] = n;
            addArrayToCommand(command);
        }

        public void addStoreQRCodeData(String content)
        {
            byte[] command = { 29, 40, 107, 0, 0, 49, 80, 48 };
            command[3] = ((byte)((content.Length + 3) % 256));
            command[4] = ((byte)((content.Length + 3) / 256));
            addArrayToCommand(command);
            addStrToCommand(content, content.Length);
        }

        private void addStrToCommand(String str, int length)
        {
            byte[] bs = null;
            if (!str.Equals(""))
            {
                try
                {
                    bs = System.Text.Encoding.GetEncoding("GB2312").GetBytes(str);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                if (length > bs.Length)
                {
                    length = bs.Length;
                }
                for (int i = 0; i < length; i++)
                {
                    this.Command.Add(bs[i]);
                }
            }
        }

        public void addPrintQRCode()
        {
            byte[] command = { 29, 40, 107, 3, 0, 49, 81, 48 };
            addArrayToCommand(command);
        }

        public static byte[] toPrimitive(Byte[] array)
        {
            if (array == null)
            {
                return null;
            }
            if (array.Length == 0)
            {
                return new byte[]{};
            }
            byte[] result = new byte[array.Length];
            for (int i = 0; i < array.Length; i++)
            {
                result[i] = array[i];
            }
            return result;
        }

    }

 

byte[] data = PrintService.jsonParse(str[4], recv, str[5], str[6]);
SendSocketMsg(str[
1], Convert.ToInt32(str[2]), Convert.ToInt32(str[7]), data);

 

posted @ 2016-02-29 13:08  如.若  阅读(9998)  评论(12编辑  收藏  举报