张洋 3 лет назад
Родитель
Сommit
35c083ab3f

+ 97 - 100
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp

@@ -3285,7 +3285,7 @@ void CZhengcanDiandanPageUI::ClickYulan()
 	CZhengcanOrder order = this->GetPrintOrderinfoYulan();
 
 	CPosPrinter printer;
-	printer.PrintZhengcanOrderXiadan(order);
+	printer.PrintZhengcanOrderYulan(order);
 }
 
 //获取通用参数,任何支付方式都要用到的参数,个性化参数在弹框里面处理
@@ -3480,7 +3480,7 @@ void CZhengcanDiandanPageUI::StartWeixinzhifuShoukuan(std::string fukuanma)
 			}
 
 			//说明收款成功了,需要进行一些后续的处理
-			this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, zhifu_type);
+			this->StartWorkAfterShoukuan(zhifu_type);
 
 			m_pMainWnd->ShowToast(L"收款成功!");
 
@@ -3540,7 +3540,7 @@ void CZhengcanDiandanPageUI::StartHuiyuanShoukuan()
 			std::string member_number = pShoukuanWnd->m_member_number;
 
 			//说明收款成功了,需要进行一些后续的处理
-			this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "huiyuanzhifu", balance, member_number);
+			this->StartWorkAfterShoukuan("huiyuanzhifu", balance, member_number);
 
 			m_pMainWnd->ShowToast(L"收款成功!");
 
@@ -3601,7 +3601,7 @@ void CZhengcanDiandanPageUI::StartXianjinShoukuan()
 			m_zhaoling_value = pShoukuanWnd->m_zhaoling;
 
 			//说明收款成功了,需要进行一些后续的处理
-			this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "xianjinzhifu");
+			this->StartWorkAfterShoukuan("xianjinzhifu");
 
 			m_pMainWnd->ShowToast(L"收款成功!");
 
@@ -3658,7 +3658,7 @@ void CZhengcanDiandanPageUI::StartFulikaShoukuan()
 		if (ret == IDOK)
 		{
 			//说明收款成功了,需要进行一些后续的处理
-			this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "fulikazhifu");
+			this->StartWorkAfterShoukuan("fulikazhifu");
 
 			m_pMainWnd->ShowToast(L"收款成功!");
 
@@ -3718,7 +3718,7 @@ void CZhengcanDiandanPageUI::StartZidingyiShoukuan(std::wstring name, std::wstri
 		if (ret == IDOK)
 		{
 			//说明收款成功了,需要进行一些后续的处理
-			this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "zidingyizhifu");
+			this->StartWorkAfterShoukuan("zidingyizhifu");
 
 			m_pMainWnd->ShowToast(L"收款成功!");
 
@@ -4151,7 +4151,7 @@ void CZhengcanDiandanPageUI::StartWorkAfterTuicai(std::string kucunstring, CZhen
 	CZhengcanOrder order = this->GetPrintOrderinfoTuicai(tuicaiItem, tuicai_num);
 
 	CPosPrinter printer;
-	printer.PrintZhengcanOrderXiadan(order);
+	printer.PrintZhengcanOrderTuicai(order);
 
 	//如果走到这里说明退菜成功了,这个时候刷新显示
 	this->InitShow();
@@ -4173,7 +4173,7 @@ void CZhengcanDiandanPageUI::StartWorkAfterXiadan(std::string kucunstring, std::
 	m_pMainWnd->SwitchPage(CMainWnd::ZHENGCAN);
 }
 
-void CZhengcanDiandanPageUI::StartWorkAfterShoukuan(std::string kucunstring, std::string take_food_code, std::string show_trade_no, std::string shoukuan_type, std::string balance, std::string member_number)
+void CZhengcanDiandanPageUI::StartWorkAfterShoukuan(std::string shoukuan_type, std::string balance, std::string member_number)
 {
 	//针对现金收款成功,单独做一个打开钱箱的判断处理
 	if (shoukuan_type == "xianjinzhifu")
@@ -4187,11 +4187,8 @@ void CZhengcanDiandanPageUI::StartWorkAfterShoukuan(std::string kucunstring, std
 		}
 	}
 
-	//更新商品库存
-	this->UpdateFoodStock(kucunstring);
-
 	//处理打印
-	CZhengcanOrder order = this->GetPrintOrderinfo(take_food_code, show_trade_no, shoukuan_type, balance, member_number);
+	CZhengcanOrder order = this->GetPrintOrderinfoJiesuan(shoukuan_type, balance, member_number);
 
 	CPosPrinter printer;
 	printer.PrintZhengcanOrderXiadan(order);
@@ -4369,68 +4366,68 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoYulan()
 	m_cur_diandan_order.m_zhekou_value = m_zhekou_value;
 
 	m_cur_diandan_order.m_dabao_money = CLewaimaiString::DoubleToString(m_cur_diandan_order.getDabaoMoney(), 2);
+	m_cur_diandan_order.m_chawei_money = CLewaimaiString::DoubleToString(m_chawei, 2);
+	m_cur_diandan_order.m_kaitai_money = CLewaimaiString::DoubleToString(m_kaitai, 2);
 	m_cur_diandan_order.m_total_price = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 
-	for (std::vector<CZhengcanOrderItem>::iterator it = m_cur_diandan_order.m_items.begin(); it != m_cur_diandan_order.m_items.end(); it++)
-	{
-		CZhengcanOrderItemPrint itemPrint;
-
-		itemPrint.m_food_name = it->getNameWanzhengShow();
-		itemPrint.m_quantity = it->num;
-		itemPrint.m_item_price = it->getSinglePrice();
-		itemPrint.m_type_id = it->type_id;
+	//清空之前的打印记录
+	m_cur_diandan_order.m_items_print.clear();
 
-		if (it->m_is_taocan == true)
+	for (std::vector<CZhengcanOrderHistoryXiadan>::iterator it = m_cur_diandan_order.m_order_history_array.begin(); it != m_cur_diandan_order.m_order_history_array.end(); it++)
+	{
+		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
-			itemPrint.is_taocan = true;
-		}
+			CZhengcanOrderItemPrint itemPrint;
 
-		m_cur_diandan_order.m_items_print.push_back(itemPrint);
-
-		if (it->m_is_taocan == true)
-		{
-			//开始保存套餐里面的商品详情,主要用于厨房打印
-			CFoodpackage foodpackageinfo;
-			foodpackageinfo = it->GetFoodpackageInfo();
+			CZhengcanOrderItem tuicaiItem = *it1;
 
-			std::string nature = foodpackageinfo.nature;
+			itemPrint.m_quantity = tuicaiItem.num;
+			itemPrint.m_item_price = tuicaiItem.price;
+			itemPrint.m_type_id = tuicaiItem.type_id;
 
-			rapidjson::Document document;
-			document.Parse(nature.c_str());
+			if (tuicaiItem.m_is_taocan == true)
+			{
+				itemPrint.is_taocan = true;
 
-			if (document.HasParseError())
+				itemPrint.m_food_name = tuicaiItem.foodpackage_name; //不带属性商品
+			}
+			else
 			{
-				//属性json报错,直接不处理了
-				continue;
+				itemPrint.m_food_name = tuicaiItem.food_name; //带属性值
 			}
 
-			rapidjson::Value& data = document;
+			m_cur_diandan_order.m_items_print.push_back(itemPrint);
 
-			//接下来要把这个套餐的详情也保存下来
-			for (std::vector<FoodNatureSelectValue>::iterator it_2 = it->natureSelectedArray.begin(); it_2 != it->natureSelectedArray.end(); it_2++)
+			if (tuicaiItem.m_is_taocan == true)
 			{
-				std::string food_id = data[it_2->nNameIndex]["value"][it_2->nature_select_index].GetString();
+				//开始保存套餐里面的商品详情,主要用于厨房打印
 
-				//要根据商品ID找出商品的名字
-				CFood foodinfo;
-				CSqlite3 sqlite;
-				bool is_found = sqlite.GetFoodById(food_id, foodinfo);
-				if (!is_found)
+				//接下来要把这个套餐的详情也保存下来
+				for (std::vector<CZhengcanOrderItem>::iterator it = tuicaiItem.m_taocan_items.begin(); it != tuicaiItem.m_taocan_items.end(); it++)
 				{
-					continue;
-				}
+					std::string food_id = it->food_id;
 
-				CZhengcanOrderItemPrint foodpackageitemPrint;
+					//要根据商品ID找出商品的名字
+					CFood foodinfo;
+					CSqlite3 sqlite;
+					bool is_found = sqlite.GetFoodById(food_id, foodinfo);
+					if (!is_found)
+					{
+						continue;
+					}
 
-				foodpackageitemPrint.m_food_name = foodinfo.name;
-				foodpackageitemPrint.m_quantity = it->num;
-				foodpackageitemPrint.m_item_price = foodinfo.price;
-				foodpackageitemPrint.m_type_id = foodinfo.type_id;
+					CZhengcanOrderItemPrint foodpackageitemPrint;
 
-				foodpackageitemPrint.is_taocan = false;
-				foodpackageitemPrint.is_taocan_item = true;
+					foodpackageitemPrint.m_food_name = foodinfo.name;
+					foodpackageitemPrint.m_quantity = tuicaiItem.num;
+					foodpackageitemPrint.m_item_price = foodinfo.price;
+					foodpackageitemPrint.m_type_id = foodinfo.type_id;
 
-				m_cur_diandan_order.m_items_print.push_back(foodpackageitemPrint);
+					foodpackageitemPrint.is_taocan = false;
+					foodpackageitemPrint.is_taocan_item = true;
+
+					m_cur_diandan_order.m_items_print.push_back(foodpackageitemPrint);
+				}
 			}
 		}
 	}
@@ -4438,10 +4435,10 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoYulan()
 	return m_cur_diandan_order;
 }
 
-CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfo(std::string take_food_code, std::string show_trade_no, std::string shoukuan_type, std::string balance, std::string member_number)
+CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoJiesuan(std::string shoukuan_type, std::string balance, std::string member_number)
 {
 	m_cur_diandan_order.shopname = CShopinfo::GetInstance()->m_shop_name;
-	m_cur_diandan_order.show_trade_no = show_trade_no;
+
 	m_cur_diandan_order.balance = balance;
 	m_cur_diandan_order.member_number = member_number;
 
@@ -4496,68 +4493,68 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfo(std::string take_food_c
 	m_cur_diandan_order.m_zhekou_value = m_zhekou_value;
 
 	m_cur_diandan_order.m_dabao_money = CLewaimaiString::DoubleToString(m_cur_diandan_order.getDabaoMoney(), 2);
+	m_cur_diandan_order.m_chawei_money = CLewaimaiString::DoubleToString(m_chawei, 2);
+	m_cur_diandan_order.m_kaitai_money = CLewaimaiString::DoubleToString(m_kaitai, 2);
 	m_cur_diandan_order.m_total_price = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 
-	for (std::vector<CZhengcanOrderItem>::iterator it = m_cur_diandan_order.m_items.begin(); it != m_cur_diandan_order.m_items.end(); it++)
-	{
-		CZhengcanOrderItemPrint itemPrint;
-
-		itemPrint.m_food_name = it->getNameWanzhengShow();
-		itemPrint.m_quantity = it->num;
-		itemPrint.m_item_price = it->getSinglePrice();
-		itemPrint.m_type_id = it->type_id;
+	//清空之前的打印记录
+	m_cur_diandan_order.m_items_print.clear();
 
-		if (it->m_is_taocan == true)
+	for (std::vector<CZhengcanOrderHistoryXiadan>::iterator it = m_cur_diandan_order.m_order_history_array.begin(); it != m_cur_diandan_order.m_order_history_array.end(); it++)
+	{
+		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
-			itemPrint.is_taocan = true;
-		}
+			CZhengcanOrderItemPrint itemPrint;
 
-		m_cur_diandan_order.m_items_print.push_back(itemPrint);
-
-		if (it->m_is_taocan == true)
-		{
-			//开始保存套餐里面的商品详情,主要用于厨房打印
-			CFoodpackage foodpackageinfo;
-			foodpackageinfo = it->GetFoodpackageInfo();
+			CZhengcanOrderItem tuicaiItem = *it1;
 
-			std::string nature = foodpackageinfo.nature;
+			itemPrint.m_quantity = tuicaiItem.num;
+			itemPrint.m_item_price = tuicaiItem.price;
+			itemPrint.m_type_id = tuicaiItem.type_id;
 
-			rapidjson::Document document;
-			document.Parse(nature.c_str());
+			if (tuicaiItem.m_is_taocan == true)
+			{
+				itemPrint.is_taocan = true;
 
-			if (document.HasParseError())
+				itemPrint.m_food_name = tuicaiItem.foodpackage_name; //不带属性商品
+			}
+			else
 			{
-				//属性json报错,直接不处理了
-				continue;
+				itemPrint.m_food_name = tuicaiItem.food_name; //带属性值
 			}
 
-			rapidjson::Value& data = document;
+			m_cur_diandan_order.m_items_print.push_back(itemPrint);
 
-			//接下来要把这个套餐的详情也保存下来
-			for (std::vector<FoodNatureSelectValue>::iterator it_2 = it->natureSelectedArray.begin(); it_2 != it->natureSelectedArray.end(); it_2++)
+			if (tuicaiItem.m_is_taocan == true)
 			{
-				std::string food_id = data[it_2->nNameIndex]["value"][it_2->nature_select_index].GetString();
+				//开始保存套餐里面的商品详情,主要用于厨房打印
 
-				//要根据商品ID找出商品的名字
-				CFood foodinfo;
-				CSqlite3 sqlite;
-				bool is_found = sqlite.GetFoodById(food_id, foodinfo);
-				if (!is_found)
+				//接下来要把这个套餐的详情也保存下来
+				for (std::vector<CZhengcanOrderItem>::iterator it = tuicaiItem.m_taocan_items.begin(); it != tuicaiItem.m_taocan_items.end(); it++)
 				{
-					continue;
-				}
+					std::string food_id = it->food_id;
 
-				CZhengcanOrderItemPrint foodpackageitemPrint;
+					//要根据商品ID找出商品的名字
+					CFood foodinfo;
+					CSqlite3 sqlite;
+					bool is_found = sqlite.GetFoodById(food_id, foodinfo);
+					if (!is_found)
+					{
+						continue;
+					}
 
-				foodpackageitemPrint.m_food_name = foodinfo.name;
-				foodpackageitemPrint.m_quantity = it->num;
-				foodpackageitemPrint.m_item_price = foodinfo.price;
-				foodpackageitemPrint.m_type_id = foodinfo.type_id;
+					CZhengcanOrderItemPrint foodpackageitemPrint;
 
-				foodpackageitemPrint.is_taocan = false;
-				foodpackageitemPrint.is_taocan_item = true;
+					foodpackageitemPrint.m_food_name = foodinfo.name;
+					foodpackageitemPrint.m_quantity = tuicaiItem.num;
+					foodpackageitemPrint.m_item_price = foodinfo.price;
+					foodpackageitemPrint.m_type_id = foodinfo.type_id;
 
-				m_cur_diandan_order.m_items_print.push_back(foodpackageitemPrint);
+					foodpackageitemPrint.is_taocan = false;
+					foodpackageitemPrint.is_taocan_item = true;
+
+					m_cur_diandan_order.m_items_print.push_back(foodpackageitemPrint);
+				}
 			}
 		}
 	}

+ 2 - 2
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.h

@@ -201,7 +201,7 @@ public:
 	void StartWorkAfterXiadan(std::string kucunstring, std::string show_trade_no);
 
 	//执行付款成功后的所有操作逻辑
-	void StartWorkAfterShoukuan(std::string kucunstring, std::string take_food_code, std::string show_trade_no, std::string shoukuan_type, std::string balance = "", std::string member_number = "");
+	void StartWorkAfterShoukuan(std::string shoukuan_type, std::string balance = "", std::string member_number = "");
 
 	void SetPos(RECT rc, bool bNeedInvalidate = true);
 
@@ -222,7 +222,7 @@ private:
 	CZhengcanOrder GetPrintOrderinfoYulan();
 
 	//用于支付完成后,获取用于打印的order
-	CZhengcanOrder GetPrintOrderinfo(std::string take_food_code, std::string show_trade_no, std::string shoukuan_type, std::string balance, std::string member_number);
+	CZhengcanOrder GetPrintOrderinfoJiesuan(std::string shoukuan_type, std::string balance, std::string member_number);
 
 private:
 	CTileLayoutUI* m_foodLayout;

+ 16 - 0
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -209,6 +209,22 @@ void CPosPrinter::PrintZhengcanOrderTuicai(CZhengcanOrder& order)
 	}
 }
 
+void CPosPrinter::PrintZhengcanOrderYulan(CZhengcanOrder& order)
+{
+	if (CSetting::GetInstance()->GetParam("setting_is_new_diannei_printer") == "1")
+	{
+		//Ö´ÐÐÊÕÒøÐ¡Æ±´òÓ¡²Ù×÷
+		CPosPrinterData printData;
+
+		std::string data = printData.PrintZhengcanOrderYulanShouyin(order);
+
+		if (data.length() > 0)
+		{
+			CPosPrinterQueue::GetInstance()->AddShouyinPrinter(data);
+		}
+	}
+}
+
 void CPosPrinter::PirntJiaobanOrder(CJiaobaoOrder& order)
 {
 	CPosPrinterData printData;

+ 3 - 0
zhipuzi_pos_windows/print/CPosPrinter.h

@@ -30,6 +30,9 @@ public:
 	//完成所有打印一个正餐退菜的打印操作(不等待,立即返回)
 	void PrintZhengcanOrderTuicai(CZhengcanOrder& order);
 
+	//完成所有打印一个正餐预览的打印操作(不等待,立即返回)
+	void PrintZhengcanOrderYulan(CZhengcanOrder& order);
+
 	//打印交班单
 	void PirntJiaobanOrder(CJiaobaoOrder& order);
 

+ 400 - 1
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -2883,7 +2883,7 @@ std::vector<ChufangPrinterContent> CPosPrinterData::PrintZhengcanOrderTuicaiChuf
 			POS_TextOut(order_type, false, false, 0);
 			POS_FeedLine();
 
-			string init_time = "下单时间:" + order.init_time;
+			string init_time = "打印时间:" + order.init_time;
 			POS_TextOut(init_time, false, false, 0);
 			POS_FeedLine();
 
@@ -3139,6 +3139,405 @@ std::vector<ChufangPrinterContent> CPosPrinterData::PrintZhengcanOrderTuicaiChuf
 	return datas;
 }
 
+std::string CPosPrinterData::PrintZhengcanOrderYulanShouyin(CZhengcanOrder& order)
+{
+	//读取当前收银打印机的设置
+	std::string guige = CSetting::GetInstance()->GetParam("setting_printer_guige");
+	std::string lianshu = CSetting::GetInstance()->GetParam("setting_printer_lianshu");
+	int n_lianshu = atoi(lianshu.c_str());
+
+	//正式开始打印
+	for (int i = 0; i < n_lianshu; i++)
+	{
+		POS_Reset();
+
+		//判断是否打印顶部logo
+		if (CShopinfo::GetInstance()->m_machine_logo_open == "1")
+		{
+			std::wstring imagePath = CShopinfo::GetInstance()->GetImageTmpPathFromUrl(CShopinfo::GetInstance()->m_machine_logo_url);
+
+			POS_OutBmp(imagePath);
+			POS_FeedLine();
+		}
+
+		//打印店铺名字
+		string shop_name = CLewaimaiString::UTF8ToANSI(order.shopname);
+		POS_TextOut(shop_name, true, true, 1);
+
+		POS_FeedLine();
+		POS_FeedLine();
+
+		//打印点菜单
+		string diancaidan = "预览单";
+		POS_TextOut(diancaidan, false, false, 1);
+
+		POS_FeedLine();
+		POS_FeedLine();
+
+		//打印桌位
+		string date = "桌位:" + CLewaimaiString::UTF8ToANSI(order.table_name);
+		POS_TextOut(date, true, true, 0);
+
+		POS_FeedLine();
+		POS_FeedLine();
+
+		//订单号
+		bool setting_printer_dingdanhao_big = false;
+		if (CSetting::GetInstance()->GetParam("setting_printer_dingdanhao_big") == "1")
+		{
+			setting_printer_dingdanhao_big = true;
+		}
+
+		string order_num = "订 单 号:" + CLewaimaiString::UTF8ToANSI(order.show_trade_no);
+		POS_TextOut(order_num, false, setting_printer_dingdanhao_big);
+		POS_FeedLine();
+
+		//订单来源
+		if (order.order_from == 1)
+		{
+			string from_type = "订单来源:收银系统";
+			POS_TextOut(from_type);
+			POS_FeedLine();
+		}
+		else if (order.order_from == 2)
+		{
+			string from_type = "订单来源:商家app";
+			POS_TextOut(from_type);
+			POS_FeedLine();
+		}
+		else if (order.order_from == 3)
+		{
+			string from_type = "订单来源:扫码下单";
+			POS_TextOut(from_type);
+			POS_FeedLine();
+		}
+
+		//下单时间
+		bool setting_printer_xiadanshijian_big = false;
+
+		if (CSetting::GetInstance()->GetParam("setting_printer_xiadanshijian_big") == "1")
+		{
+			setting_printer_xiadanshijian_big = true;
+		}
+
+		string order_date = "打印时间:" + CLewaimaiString::UTF8ToANSI(order.init_time);
+		POS_TextOut(order_date, false, setting_printer_xiadanshijian_big);
+		POS_FeedLine();
+
+		string shouyinyuan = "收银员:" + CLewaimaiString::UTF8ToANSI(CSetting::GetInstance()->getUsername());
+		POS_TextOut(shouyinyuan, false, false);
+		POS_FeedLine();
+
+		//准备开始打印商品详情
+		string lines;
+
+		if (guige == "58")
+		{
+			lines = "--------------------------------";
+		}
+		else
+		{
+			lines = "------------------------------------------------";
+		}
+
+		POS_TextOut(lines);
+		POS_FeedLine();
+
+		//商品标题
+		bool setting_printer_shangpin_big = false;
+
+		if (CSetting::GetInstance()->GetParam("setting_printer_shangpin_big") == "1")
+		{
+			setting_printer_shangpin_big = true;
+		}
+
+		if (guige == "58")
+		{
+			POS_TextOut("商品           单价   数量  金额", false, setting_printer_shangpin_big);
+		}
+		else
+		{
+			POS_TextOut("商品                         单价    数量   金额", false, setting_printer_shangpin_big);
+		}
+
+		POS_FeedLine();
+
+		int n_fenshu = 0;
+
+		//商品内容
+		for (std::vector<CZhengcanOrderItemPrint>::iterator it = order.m_items_print.begin(); it != order.m_items_print.end(); it++)
+		{
+			if (it->is_taocan_item == true)
+			{
+				//套餐的item,收银小票不打印
+				continue;
+			}
+
+			std::string food_name = (*it).m_food_name;
+			std::string food_price = (*it).m_item_price;
+			std::string quantity = (*it).m_quantity;
+
+			if (atof(quantity.c_str()) - atoi(quantity.c_str()) > 0.00001)
+			{
+				//数量为小数,称重商品
+				n_fenshu += 1;
+			}
+			else
+			{
+				n_fenshu += atoi(quantity.c_str());
+			}
+
+			//计算总价
+			double item_price = atof(food_price.c_str()) * atof(quantity.c_str());
+			std::string food_total_price = CLewaimaiString::DoubleToString(item_price, 2);
+
+			if (food_total_price == "0.00")
+			{
+				//这里是特殊处理满赠的展示
+				food_total_price = "";
+			}
+
+			food_name = CLewaimaiString::UTF8ToANSI(food_name);
+
+			//先输出商品名字
+			std::vector<string> m_names;
+
+			if (guige == "58")
+			{
+				m_names = HandleFoodname(food_name, 1);
+			}
+			else
+			{
+				m_names = HandleFoodname(food_name, 2);
+			}
+
+			std::string firstLine = m_names[0];
+			int nGuige;
+
+			if (guige == "58")
+			{
+				nGuige = 1;
+			}
+			else
+			{
+				nGuige = 2;
+			}
+
+			std::string priceShow = HandleFoodItemPrice(food_price, nGuige);
+			std::string quantityShow = HandleFoodQuantity(quantity, nGuige);
+			std::string priceTotalShow = HandleFoodTotalPrice(food_total_price, nGuige);
+			std::string firstLineShow = firstLine + priceShow + quantityShow + priceTotalShow;
+
+			POS_TextOut(firstLineShow, false, setting_printer_shangpin_big);
+			POS_FeedLine();
+
+			for (std::vector<string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
+			{
+				POS_TextOut((*it), false, setting_printer_shangpin_big);
+				POS_FeedLine();
+			}
+		}
+
+		//判断是否有备注
+		if (order.m_memo.length() > 0)
+		{
+			bool setting_printer_memo_big = false;
+
+			if (CSetting::GetInstance()->GetParam("setting_printer_memo_big") == "1")
+			{
+				setting_printer_memo_big = true;
+			}
+
+			POS_FeedLine();
+			string address = "整单备注:" + CLewaimaiString::UTF8ToANSI(order.m_memo);
+			POS_TextOut(address, false, setting_printer_memo_big);
+			POS_FeedLine();
+		}
+
+		//结束商品详情打印
+		POS_TextOut(lines);
+		POS_FeedLine();
+
+		//开始打印其他的费用
+		bool is_other_money = false;
+		bool setting_printer_price_big = false;
+
+		if (CSetting::GetInstance()->GetParam("setting_printer_price_big") == "1")
+		{
+			setting_printer_price_big = true;
+		}
+
+		if (atof(order.m_dabao_money.c_str()) > 0)
+		{
+			string dabao = "打包费:" + CLewaimaiString::UTF8ToANSI(order.m_dabao_money);
+			POS_TextOut(dabao, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_chawei_money.c_str()) > 0)
+		{
+			string dabao = "茶位费:" + CLewaimaiString::UTF8ToANSI(order.m_chawei_money);
+			POS_TextOut(dabao, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_kaitai_money.c_str()) > 0)
+		{
+			string dabao = "开台费:" + CLewaimaiString::UTF8ToANSI(order.m_kaitai_money);
+			POS_TextOut(dabao, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		//开始显示增值服务费
+		/*
+		if (order.m_addservie.size() > 0)
+		{
+			for (std::vector<CWaimaiOrderField>::iterator it = order.m_addservie.begin(); it != order.m_addservie.end(); it++)
+			{
+				string addservice = CLewaimaiString::UTF8ToANSI((*it).name) + ":" + CLewaimaiString::DoubleToString((double)atof((*it).value.c_str()), 2);
+				POS_TextOut(addservice, false, setting_printer_price_big);
+				POS_FeedLine();
+				is_other_money = true;
+			}
+
+			is_other_money = true;
+		}
+		}*/
+
+		if (atof(order.m_shangpinquan_youhui.c_str()) > 0)
+		{
+			string youhui = "商品券优惠:" + order.m_shangpinquan_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_cika_youhui.c_str()) > 0)
+		{
+			string youhui = "次卡优惠:" + order.m_cika_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_total_member_youhui.c_str()) > 0)
+		{
+			string youhui = "商品会员价优惠:" + order.m_total_member_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_zhekou_youhui.c_str()) > 0)
+		{
+			string youhui = "整单折扣优惠:" + order.m_zhekou_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_member_zhekou_youhui.c_str()) > 0)
+		{
+			string youhui = "会员整单折扣优惠:" + order.m_member_zhekou_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_quanyika_youhui.c_str()) > 0)
+		{
+			string youhui = "权益卡优惠:" + order.m_quanyika_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_manjian_youhui.c_str()) > 0)
+		{
+			string youhui = "满减优惠:" + order.m_manjian_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_youhuiquan_youhui.c_str()) > 0)
+		{
+			string youhui = "优惠券优惠:" + order.m_youhuiquan_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_rengong_youhui.c_str()) > 0)
+		{
+			string youhui = "人工优惠:" + order.m_rengong_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (atof(order.m_moling_youhui.c_str()) > 0)
+		{
+			string youhui = "抹零优惠:" + order.m_moling_youhui + "元";
+			POS_TextOut(youhui, false, setting_printer_price_big);
+			POS_FeedLine();
+			is_other_money = true;
+		}
+
+		if (is_other_money)
+		{
+			POS_TextOut(lines);
+			POS_FeedLine();
+		}
+
+		//最后显示总价
+		POS_TextOut("总计:" + order.m_total_price + "元", false, setting_printer_price_big, 2);
+		POS_FeedLine();
+
+		POS_FeedLine();
+		POS_FeedLine();
+
+		//是否打印底部二维码
+		if (CShopinfo::GetInstance()->m_machine_qrcode_open == "1")
+		{
+			POS_OutQRCode(CLewaimaiString::UTF8ToANSI(CShopinfo::GetInstance()->m_machine_qrcode_url));
+			POS_FeedLine();
+
+			POS_TextOut(CLewaimaiString::UTF8ToANSI(CShopinfo::GetInstance()->m_machine_qrcode_title), false, false, 1);
+			POS_FeedLine();
+			POS_FeedLine();
+		}
+
+		if (CShopinfo::GetInstance()->m_self_defined_open == "1")
+		{
+			POS_TextOut(CLewaimaiString::UTF8ToANSI(CShopinfo::GetInstance()->m_self_defined_content1), false, false, 1);
+			POS_FeedLine();
+			POS_FeedLine();
+
+			POS_TextOut(CLewaimaiString::UTF8ToANSI(CShopinfo::GetInstance()->m_self_defined_content2), false, false, 1);
+			POS_FeedLine();
+			POS_FeedLine();
+		}
+
+		//走纸几行再切
+		POS_FeedLine();
+		POS_FeedLine();
+		POS_FeedLine();
+		POS_FeedLine();
+		POS_FeedLine();
+
+		POS_CutPaper();
+	}
+
+	//还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+	POS_Reset();
+
+	return m_print_content;
+}
+
 std::string CPosPrinterData::PrintJiaobanOrder(CJiaobaoOrder& order)
 {
 	//读取当前收银打印机的设置

+ 3 - 0
zhipuzi_pos_windows/print/CPosPrinterData.h

@@ -35,6 +35,9 @@ public:
 
 	std::vector<ChufangPrinterContent> PrintZhengcanOrderTuicaiChufang(CZhengcanOrder& order);
 
+	//预览单小票
+	std::string PrintZhengcanOrderYulanShouyin(CZhengcanOrder& order);
+
 	std::string PrintJiaobanOrder(CJiaobaoOrder& order);
 
 	std::string PrintHuiyuanchongzhiOrder(CHuiyuanchongzhiOrder& order);

+ 2 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -113,6 +113,8 @@ public:
 
 	//实际最终总价
 	std::string m_dabao_money;
+	std::string m_chawei_money;
+	std::string m_kaitai_money;
 	std::string m_total_price;
 
 	//这个用于保存这个订单的打印详情,主要用于打印,不用于别的地方