|
|
@@ -1280,7 +1280,157 @@ std::string CPosPrinterData::PrintDiandanOrderShouyin(CDiandanOrder& order)
|
|
|
|
|
|
std::string CPosPrinterData::PrintDiandanOrderBiaoqian(CDiandanOrder& order)
|
|
|
{
|
|
|
- return "";
|
|
|
+ std::string printer_usb = CSetting::GetParam("setting_biaoqian_printer_usb");
|
|
|
+ std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
|
|
|
+
|
|
|
+ //读取标签纸的规格和方向
|
|
|
+ int biaoqian_width, biaoqian_height;
|
|
|
+ std::string printer_guige = CSetting::GetParam("setting_biaoqian_printer_guige");
|
|
|
+ if (printer_guige == "40*30mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 40;
|
|
|
+ biaoqian_height = 30;
|
|
|
+ }
|
|
|
+ else if (printer_guige == "35*25mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 35;
|
|
|
+ biaoqian_height = 25;
|
|
|
+ }
|
|
|
+ else if (printer_guige == "30*25mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 30;
|
|
|
+ biaoqian_height = 25;
|
|
|
+ }
|
|
|
+ else if (printer_guige == "30*20mm")
|
|
|
+ {
|
|
|
+ biaoqian_width = 30;
|
|
|
+ biaoqian_height = 20;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ biaoqian_width = 40;
|
|
|
+ biaoqian_height = 30;
|
|
|
+ }
|
|
|
+
|
|
|
+ int nDIRECTION;
|
|
|
+ std::string printer_fangxiang = CSetting::GetParam("setting_biaoqian_printer_fangxiang");
|
|
|
+ if (printer_fangxiang == "1")
|
|
|
+ {
|
|
|
+ nDIRECTION = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ nDIRECTION = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ //初始化标签打印机
|
|
|
+ BIAOQIAN_Reset(biaoqian_width, biaoqian_height, nDIRECTION);
|
|
|
+
|
|
|
+ std::vector<CDiandanOrderItemPrint> cur_printer_use = order.m_items_print;
|
|
|
+
|
|
|
+ //先计算商品的总数量
|
|
|
+ int foodNum = 0;
|
|
|
+
|
|
|
+ for (std::vector<CDiandanOrderItemPrint>::iterator it = cur_printer_use.begin(); it != cur_printer_use.end(); it++)
|
|
|
+ {
|
|
|
+ std::string quantity = (*it).m_quantity;
|
|
|
+
|
|
|
+ foodNum += atoi(quantity.c_str());
|
|
|
+ }
|
|
|
+
|
|
|
+ //商品内容
|
|
|
+ int curFoodNum = 0;
|
|
|
+
|
|
|
+ for (std::vector<CDiandanOrderItemPrint>::iterator it = cur_printer_use.begin(); it != cur_printer_use.end(); it++)
|
|
|
+ {
|
|
|
+ std::string food_name = (*it).m_food_name;
|
|
|
+ std::string food_price = (*it).m_item_price;
|
|
|
+ std::string quantity = (*it).m_quantity;
|
|
|
+
|
|
|
+ //每份商品打印一个标签
|
|
|
+ int nQuantity = atoi(quantity.c_str());
|
|
|
+
|
|
|
+ for (int i = 0; i < nQuantity; i++)
|
|
|
+ {
|
|
|
+ std::string textData = "";
|
|
|
+
|
|
|
+ curFoodNum++;
|
|
|
+
|
|
|
+ std::string order_num_info = "取餐码:" + CLewaimaiString::UTF8ToANSI(order.take_food_code);
|
|
|
+
|
|
|
+ //纸张宽度40mm的,是 320个点位(每mm8个),刚好可以放13个汉字,每个汉字宽度差不多是24,商品换行显示的时候,
|
|
|
+ //每行最多12个汉字,也就是空24个,因此这里设置12,刚好左右各空一半
|
|
|
+ textData += BIAOQIAN_TEXTGet(order_num_info, 12, 6, 1, 1);
|
|
|
+
|
|
|
+ //打印份数
|
|
|
+ std::string numInfo = to_string(curFoodNum) + "/" + to_string(foodNum);
|
|
|
+ textData += BIAOQIAN_TEXTGet(numInfo, 180, 6, 1, 1);
|
|
|
+
|
|
|
+ //每行最多显示12个汉字,这里要计算一下换行(要先转成ANSI格式)
|
|
|
+ std::string handle_food_name = CLewaimaiString::UTF8ToANSI(food_name);
|
|
|
+ std::vector<std::string> foodNameVector = HandleBiaoqianFoodname(handle_food_name, biaoqian_width);
|
|
|
+
|
|
|
+ int nRow = 0;
|
|
|
+
|
|
|
+ //考虑是否用大号字体
|
|
|
+ bool is_big_name = false;
|
|
|
+
|
|
|
+ /*暂时全部打印小字,这里注释掉
|
|
|
+ if(foodNameVector.size() <= 2)
|
|
|
+ {
|
|
|
+ //不超过2行,可以用大的字体
|
|
|
+ is_big_name = true;
|
|
|
+ }*/
|
|
|
+
|
|
|
+ //LOG_INFO("foodNameVector size:" << foodNameVector.size());
|
|
|
+
|
|
|
+ for (std::vector<std::string>::iterator it = foodNameVector.begin(); it != foodNameVector.end(); it++)
|
|
|
+ {
|
|
|
+ LOG_INFO("nRow:" << nRow << ", 准备打印商品名字:" << (*it).c_str());
|
|
|
+
|
|
|
+ if (is_big_name)
|
|
|
+ {
|
|
|
+ textData += BIAOQIAN_TEXTGet(*it, 12, 42 + 60 * nRow, 1, 2);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ textData += BIAOQIAN_TEXTGet(*it, 12, 42 + 30 * nRow, 1, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ nRow++;
|
|
|
+ }
|
|
|
+
|
|
|
+ int nPriceY;
|
|
|
+ if (biaoqian_height == 30)
|
|
|
+ {
|
|
|
+ nPriceY = 180;
|
|
|
+ }
|
|
|
+ else if (biaoqian_height == 25)
|
|
|
+ {
|
|
|
+ nPriceY = 140;
|
|
|
+ }
|
|
|
+ else if (biaoqian_height == 20)
|
|
|
+ {
|
|
|
+ nPriceY = 100;
|
|
|
+ }
|
|
|
+
|
|
|
+ //打印价格
|
|
|
+ std::string priceInfo = CLewaimaiString::UTF8ToANSI(food_price) + "元";
|
|
|
+ textData += BIAOQIAN_TEXTGet(priceInfo, 12, nPriceY, 1, 1);
|
|
|
+
|
|
|
+ //打印订单号
|
|
|
+ std::string order_num = "订单号:" + CLewaimaiString::UTF8ToANSI(order.show_trade_no);
|
|
|
+ textData += BIAOQIAN_TEXTGet(order_num, 12, nPriceY + 30, 1, 1);
|
|
|
+
|
|
|
+ WriteData(textData);
|
|
|
+
|
|
|
+ BIAOQIAN_PRINT();
|
|
|
+
|
|
|
+ BIAOQIAN_CLS();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return m_print_content;
|
|
|
}
|
|
|
|
|
|
std::vector<ChufangPrinterContent> CPosPrinterData::PrintDiandanOrderChufang(CDiandanOrder& order)
|