Browse Source

标签打印机也可以了,最后开始调试厨房打印

张洋 4 years ago
parent
commit
e8ed476c75
1 changed files with 151 additions and 1 deletions
  1. 151 1
      zhipuzi_pos_windows/print/CPosPrinterData.cpp

+ 151 - 1
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -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)