/// <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;
            }
        }
        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 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);
            }
        }
        /// <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)
            {
                throw;
            }
        }