瀏覽代碼

完成打印问题

张洋 3 年之前
父節點
當前提交
2bcda0f683

+ 4 - 122
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp

@@ -4289,6 +4289,7 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoTuicai(CZhengcanOrderIte
 
 	CZhengcanOrderItemPrint itemPrint;
 
+	itemPrint.is_tuicai = true;
 	itemPrint.m_quantity = tuicai_num;
 	itemPrint.m_item_price = tuicaiItem.price;
 	itemPrint.m_type_id = tuicaiItem.type_id;
@@ -4326,6 +4327,7 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoTuicai(CZhengcanOrderIte
 
 			CZhengcanOrderItemPrint foodpackageitemPrint;
 
+			foodpackageitemPrint.is_tuicai = true;
 			foodpackageitemPrint.m_food_name = foodinfo.name;
 			foodpackageitemPrint.m_quantity = tuicai_num;
 			foodpackageitemPrint.m_item_price = foodinfo.price;
@@ -4371,67 +4373,7 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoYulan()
 	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);
 
-	//清空之前的打印记录
-	m_cur_diandan_order.m_items_print.clear();
-
-	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++)
-		{
-			CZhengcanOrderItemPrint itemPrint;
-
-			CZhengcanOrderItem tuicaiItem = *it1;
-
-			itemPrint.m_quantity = tuicaiItem.num;
-			itemPrint.m_item_price = tuicaiItem.price;
-			itemPrint.m_type_id = tuicaiItem.type_id;
-
-			if (tuicaiItem.m_is_taocan == true)
-			{
-				itemPrint.is_taocan = true;
-
-				itemPrint.m_food_name = tuicaiItem.foodpackage_name; //不带属性商品
-			}
-			else
-			{
-				itemPrint.m_food_name = tuicaiItem.food_name; //带属性值
-			}
-
-			m_cur_diandan_order.m_items_print.push_back(itemPrint);
-
-			if (tuicaiItem.m_is_taocan == true)
-			{
-				//开始保存套餐里面的商品详情,主要用于厨房打印
-
-				//接下来要把这个套餐的详情也保存下来
-				for (std::vector<CZhengcanOrderItem>::iterator it = tuicaiItem.m_taocan_items.begin(); it != tuicaiItem.m_taocan_items.end(); it++)
-				{
-					std::string food_id = it->food_id;
-
-					//要根据商品ID找出商品的名字
-					CFood foodinfo;
-					CSqlite3 sqlite;
-					bool is_found = sqlite.GetFoodById(food_id, foodinfo);
-					if (!is_found)
-					{
-						continue;
-					}
-
-					CZhengcanOrderItemPrint foodpackageitemPrint;
-
-					foodpackageitemPrint.m_food_name = foodinfo.name;
-					foodpackageitemPrint.m_quantity = tuicaiItem.num;
-					foodpackageitemPrint.m_item_price = foodinfo.price;
-					foodpackageitemPrint.m_type_id = foodinfo.type_id;
-
-					foodpackageitemPrint.is_taocan = false;
-					foodpackageitemPrint.is_taocan_item = true;
-
-					m_cur_diandan_order.m_items_print.push_back(foodpackageitemPrint);
-				}
-			}
-		}
-	}
+	m_cur_diandan_order.UpdateItemPrint();
 
 	return m_cur_diandan_order;
 }
@@ -4498,67 +4440,7 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfoJiesuan(std::string shou
 	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);
 
-	//清空之前的打印记录
-	m_cur_diandan_order.m_items_print.clear();
-
-	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++)
-		{
-			CZhengcanOrderItemPrint itemPrint;
-
-			CZhengcanOrderItem tuicaiItem = *it1;
-
-			itemPrint.m_quantity = tuicaiItem.num;
-			itemPrint.m_item_price = tuicaiItem.price;
-			itemPrint.m_type_id = tuicaiItem.type_id;
-
-			if (tuicaiItem.m_is_taocan == true)
-			{
-				itemPrint.is_taocan = true;
-
-				itemPrint.m_food_name = tuicaiItem.foodpackage_name; //不带属性商品
-			}
-			else
-			{
-				itemPrint.m_food_name = tuicaiItem.food_name; //带属性值
-			}
-
-			m_cur_diandan_order.m_items_print.push_back(itemPrint);
-
-			if (tuicaiItem.m_is_taocan == true)
-			{
-				//开始保存套餐里面的商品详情,主要用于厨房打印
-
-				//接下来要把这个套餐的详情也保存下来
-				for (std::vector<CZhengcanOrderItem>::iterator it = tuicaiItem.m_taocan_items.begin(); it != tuicaiItem.m_taocan_items.end(); it++)
-				{
-					std::string food_id = it->food_id;
-
-					//要根据商品ID找出商品的名字
-					CFood foodinfo;
-					CSqlite3 sqlite;
-					bool is_found = sqlite.GetFoodById(food_id, foodinfo);
-					if (!is_found)
-					{
-						continue;
-					}
-
-					CZhengcanOrderItemPrint foodpackageitemPrint;
-
-					foodpackageitemPrint.m_food_name = foodinfo.name;
-					foodpackageitemPrint.m_quantity = tuicaiItem.num;
-					foodpackageitemPrint.m_item_price = foodinfo.price;
-					foodpackageitemPrint.m_type_id = foodinfo.type_id;
-
-					foodpackageitemPrint.is_taocan = false;
-					foodpackageitemPrint.is_taocan_item = true;
-
-					m_cur_diandan_order.m_items_print.push_back(foodpackageitemPrint);
-				}
-			}
-		}
-	}
+	m_cur_diandan_order.UpdateItemPrint();
 
 	return m_cur_diandan_order;
 }

+ 24 - 1
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -191,7 +191,7 @@ void CPosPrinter::PrintZhengcanOrderXiadan(std::string order_id, std::string jia
 	bool ret = order.InitData(order_id);
 
 	//需要先对order中的itemprint进行处理
-	order.UpdateItemPrint(jiacai_no);
+	order.UpdateItemPrintForJiacai(jiacai_no);
 
 	PrintZhengcanOrderXiadan(order);
 }
@@ -221,6 +221,18 @@ void CPosPrinter::PrintZhengcanOrderTuicai(CZhengcanOrder& order)
 	}
 }
 
+void CPosPrinter::PrintZhengcanOrderTuicai(std::string order_id, std::string tuicai_item_id)
+{
+	CZhengcanOrder order;
+
+	bool ret = order.InitData(order_id);
+
+	//需要先对order中的itemprint进行处理
+	order.UpdateItemPrintForTuicai(tuicai_item_id);
+
+	PrintZhengcanOrderTuicai(order);
+}
+
 void CPosPrinter::PrintZhengcanOrderYulan(CZhengcanOrder& order)
 {
 	if (CSetting::GetInstance()->GetParam("setting_is_new_diannei_printer") == "1")
@@ -254,6 +266,17 @@ void CPosPrinter::PrintZhengcanOrderJiesuan(CZhengcanOrder& order)
 	}
 }
 
+void CPosPrinter::PrintZhengcanOrderJiesuan(std::string order_id)
+{
+	CZhengcanOrder order;
+
+	bool ret = order.InitData(order_id);
+
+	order.UpdateItemPrint();
+
+	PrintZhengcanOrderJiesuan(order);
+}
+
 void CPosPrinter::PirntJiaobanOrder(CJiaobaoOrder& order)
 {
 	CPosPrinterData printData;

+ 6 - 0
zhipuzi_pos_windows/print/CPosPrinter.h

@@ -33,12 +33,18 @@ public:
 	//完成所有打印一个正餐退菜的打印操作(不等待,立即返回)
 	void PrintZhengcanOrderTuicai(CZhengcanOrder& order);
 
+	//通过商家app退菜成功,这个时候推送给收银机来打印
+	void PrintZhengcanOrderTuicai(std::string order_id, std::string tuicai_item_id);
+
 	//完成所有打印一个正餐预览的打印操作(不等待,立即返回)
 	void PrintZhengcanOrderYulan(CZhengcanOrder& order);
 
 	//完成所有打印一个正餐结算的打印操作(不等待,立即返回)
 	void PrintZhengcanOrderJiesuan(CZhengcanOrder& order);
 
+	//通过H5或者商家app结算成功之后,收银机打印结算单
+	void PrintZhengcanOrderJiesuan(std::string order_id);
+
 	//打印交班单
 	void PirntJiaobanOrder(CJiaobaoOrder& order);
 

+ 12 - 1
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -2943,7 +2943,8 @@ std::vector<ChufangPrinterContent> CPosPrinterData::PrintZhengcanOrderTuicaiChuf
 				//计算总价
 				double item_price = atof(food_price.c_str()) * atof(quantity.c_str());
 				std::string food_total_price = CLewaimaiString::DoubleToString(item_price, 2);
-				food_name = CLewaimaiString::UTF8ToANSI(food_name);
+				food_name = "【退菜】" + CLewaimaiString::UTF8ToANSI(food_name);
+
 				//先输出商品名字
 				std::vector<string> m_names;
 
@@ -3299,6 +3300,11 @@ std::string CPosPrinterData::PrintZhengcanOrderYulanShouyin(CZhengcanOrder& orde
 
 			food_name = CLewaimaiString::UTF8ToANSI(food_name);
 
+			if (it->is_tuicai == true)
+			{
+				food_name = "【退菜】" + food_name;
+			}
+
 			//先输出商品名字
 			std::vector<string> m_names;
 
@@ -3698,6 +3704,11 @@ std::string CPosPrinterData::PrintZhengcanOrderJiesuanShouyin(CZhengcanOrder& or
 
 			food_name = CLewaimaiString::UTF8ToANSI(food_name);
 
+			if (it->is_tuicai == true)
+			{
+				food_name = "【退菜】" + food_name;
+			}
+
 			//先输出商品名字
 			std::vector<string> m_names;
 

+ 16 - 1
zhipuzi_pos_windows/worker/CMessagePushWorker.cpp

@@ -172,7 +172,7 @@ void CMessagePushWorker::ReceiveMessage()
 		catch (std::exception& e)
 		{
 			std::string err = e.what();
-			//LOG_INFO("read err:" << err.c_str());
+			LOG_INFO("read err:" << err.c_str());
 
 			//如果这里异常了,说明socket失效了,等2秒重新读
 			CSystem::my_sleep(2);
@@ -296,4 +296,19 @@ void CMessagePushWorker::HandelMessage(std::string msg)
 	{
 		CVoiceWorker::GetInstance()->AddVoice(6);
 	}
+	else if (type == MESSAGE_TYPE::NEW_ZHENGCAN_TUICAI)
+	{
+		std::string order_id = document["waimai_order_id"].GetString();
+		std::string tuicai_item_id = document["tuicai_item_id"].GetString();
+
+		CPosPrinter printer;
+		printer.PrintZhengcanOrderTuicai(order_id, tuicai_item_id);
+	}
+	else if (type == MESSAGE_TYPE::NEW_ZHENGCAN_JIESUAN)
+	{
+		std::string order_id = document["waimai_order_id"].GetString();
+
+		CPosPrinter printer;
+		printer.PrintZhengcanOrderJiesuan(order_id);
+	}
 }

+ 2 - 0
zhipuzi_pos_windows/worker/CMessagePushWorker.h

@@ -27,6 +27,8 @@ enum MESSAGE_TYPE
 	
 	NEW_ZHENGCAN_JIACAI = 6, //正餐加菜成功
 	NEW_ZHENGCAN_H5_JIACAI = 7, //正餐扫码下单加菜
+	NEW_ZHENGCAN_TUICAI = 8, //正餐通过商家app退菜成功
+	NEW_ZHENGCAN_JIESUAN = 9, //正餐通过H5或者商家app结算成功
 };
 
 //这个类专门用于接收服务器端的消息推送

+ 1 - 1
zhipuzi_pos_windows/zhipuzi/CDiandanOrder.cpp

@@ -451,7 +451,7 @@ bool CDiandanOrder::InitData(std::string order_id)
 		m_total_member_youhui = data["member_delete"].GetString();
 		m_manjian_youhui = data["promotion_value"].GetString();
 		m_member_zhekou_youhui = data["member_discount_money"].GetString();
-		m_zhekou_youhui = data["shop_discount_money"].GetString();
+		m_zhekou_youhui = data["discount_delete"].GetString();
 		m_cika_youhui = data["timescoupon_discount_money"].GetString();
 		m_quanyika_youhui = data["eq_card_discount_money"].GetString();
 

+ 160 - 23
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.cpp

@@ -592,11 +592,27 @@ bool CZhengcanOrder::InitData(std::string order_id)
 	
 	shoukuan_type = data["zhifu_type"].GetString();
 	
+	is_refund = data["is_refund"].GetString();
+	refund_time = CLewaimaiJson::ToString(data["refund_time"]);
 	is_guazhang = data["is_guazhang"].GetString();
 	guazhang = data["guazhang"].GetString();
+	m_youhuiquan_youhui = data["coupon_value"].GetString();
+	m_total_member_youhui = data["member_delete"].GetString();
+	m_manjian_youhui = data["promotion_value"].GetString();
+	m_member_zhekou_youhui = data["member_discount_money"].GetString();
+	m_zhekou_youhui = data["discount_delete"].GetString();
+	m_cika_youhui = data["timescoupon_discount_money"].GetString();
+	m_quanyika_youhui = data["eq_card_discount_money"].GetString();
+
+	init_time = CLewaimaiJson::ToString(data["init_time"]);
+	m_is_clear = CLewaimaiJson::ToString(data["is_clear"]);
+	m_kaitai_time = CLewaimaiJson::ToString(data["kaitai_time"]);
+	m_pay_time = CLewaimaiJson::ToString(data["pay_time"]);
 
 	m_status = data["status"].GetString();
 
+	shoukuan_type = data["zhifu_type"].GetString();
+
 	std::string fromtype = data["from_type"].GetString();
 	if (fromtype == "1")
 	{
@@ -610,28 +626,6 @@ bool CZhengcanOrder::InitData(std::string order_id)
 	{
 		order_from = 3;
 	}
-	
-	is_refund = data["is_refund"].GetString();
-	refund_time = CLewaimaiJson::ToString(data["refund_time"]);
-
-	m_total_member_youhui = CLewaimaiJson::ToString(data["member_delete"]);
-
-	init_time = CLewaimaiJson::ToString(data["init_time"]);
-
-	m_is_clear = CLewaimaiJson::ToString(data["is_clear"]);
-	
-	
-	m_kaitai_time = CLewaimaiJson::ToString(data["kaitai_time"]);
-	m_pay_time = CLewaimaiJson::ToString(data["pay_time"]);
-
-	m_youhuiquan_youhui = CLewaimaiJson::ToString(data["coupon_value"]);
-
-	m_manjian_youhui = CLewaimaiJson::ToString(data["promotion_value"]);
-	
-	m_member_zhekou_youhui = CLewaimaiJson::ToString(data["member_discount_money"]);
-	m_zhekou_youhui = CLewaimaiJson::ToString(data["shop_discount_money"]);
-	m_cika_youhui = CLewaimaiJson::ToString(data["timescoupon_discount_money"]);
-	m_quanyika_youhui = CLewaimaiJson::ToString(data["eq_card_discount_money"]);
 
 	//开始保存订单详情
 	rapidjson::Value& v_rows = data["item"];
@@ -870,7 +864,77 @@ bool CZhengcanOrder::Refund(std::string order_id)
 	return true;
 }
 
-void CZhengcanOrder::UpdateItemPrint(std::string jiacai_no)
+void CZhengcanOrder::UpdateItemPrint()
+{
+	//清空之前的打印记录
+	m_items_print.clear();
+
+	for (std::vector<CZhengcanOrderHistoryXiadan>::iterator it = m_order_history_array.begin(); it != m_order_history_array.end(); it++)
+	{
+		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
+		{
+			CZhengcanOrderItemPrint itemPrint;
+
+			CZhengcanOrderItem tuicaiItem = *it1;
+
+			if (tuicaiItem.is_tuicai == "1")
+			{
+				itemPrint.is_tuicai = true;
+			}
+
+			itemPrint.m_quantity = tuicaiItem.num;
+			itemPrint.m_item_price = tuicaiItem.price;
+			itemPrint.m_type_id = tuicaiItem.type_id;
+
+			if (tuicaiItem.m_is_taocan == true)
+			{
+				itemPrint.is_taocan = true;
+
+				itemPrint.m_food_name = tuicaiItem.foodpackage_name; //不带属性商品
+			}
+			else
+			{
+				itemPrint.m_food_name = tuicaiItem.food_name; //带属性值
+			}
+
+			m_items_print.push_back(itemPrint);
+
+			if (tuicaiItem.m_is_taocan == true)
+			{
+				//开始保存套餐里面的商品详情,主要用于厨房打印
+
+				//接下来要把这个套餐的详情也保存下来
+				for (std::vector<CZhengcanOrderItem>::iterator it = tuicaiItem.m_taocan_items.begin(); it != tuicaiItem.m_taocan_items.end(); it++)
+				{
+					std::string food_id = it->food_id;
+
+					//要根据商品ID找出商品的名字
+					CFood foodinfo;
+					CSqlite3 sqlite;
+					bool is_found = sqlite.GetFoodById(food_id, foodinfo);
+					if (!is_found)
+					{
+						continue;
+					}
+
+					CZhengcanOrderItemPrint foodpackageitemPrint;
+
+					foodpackageitemPrint.m_food_name = foodinfo.name;
+					foodpackageitemPrint.m_quantity = tuicaiItem.num;
+					foodpackageitemPrint.m_item_price = foodinfo.price;
+					foodpackageitemPrint.m_type_id = foodinfo.type_id;
+
+					foodpackageitemPrint.is_taocan = false;
+					foodpackageitemPrint.is_taocan_item = true;
+
+					m_items_print.push_back(foodpackageitemPrint);
+				}
+			}
+		}
+	}
+}
+
+void CZhengcanOrder::UpdateItemPrintForJiacai(std::string jiacai_no)
 {
 	//清空之前的打印记录
 	m_items_print.clear();
@@ -942,4 +1006,77 @@ void CZhengcanOrder::UpdateItemPrint(std::string jiacai_no)
 			}
 		}
 	}
+}
+
+void CZhengcanOrder::UpdateItemPrintForTuicai(std::string tuicai_item_id)
+{
+	//清空之前的打印记录
+	m_items_print.clear();
+
+	for (std::vector<CZhengcanOrderHistoryXiadan>::iterator it = m_order_history_array.begin(); it != m_order_history_array.end(); it++)
+	{
+		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
+		{
+			if (it1->item_id != tuicai_item_id)
+			{
+				//如果jiacai_no不想等,就直接忽略
+				continue;
+			}
+
+			CZhengcanOrderItemPrint itemPrint;
+
+			itemPrint.is_tuicai = true;
+
+			CZhengcanOrderItem tuicaiItem = *it1;
+
+			itemPrint.m_quantity = tuicaiItem.num;
+			itemPrint.m_item_price = tuicaiItem.price;
+			itemPrint.m_type_id = tuicaiItem.type_id;
+
+			if (tuicaiItem.m_is_taocan == true)
+			{
+				itemPrint.is_taocan = true;
+
+				itemPrint.m_food_name = tuicaiItem.foodpackage_name; //不带属性商品
+			}
+			else
+			{
+				itemPrint.m_food_name = tuicaiItem.food_name; //带属性值
+			}
+
+			m_items_print.push_back(itemPrint);
+
+			if (tuicaiItem.m_is_taocan == true)
+			{
+				//开始保存套餐里面的商品详情,主要用于厨房打印
+
+				//接下来要把这个套餐的详情也保存下来
+				for (std::vector<CZhengcanOrderItem>::iterator it = tuicaiItem.m_taocan_items.begin(); it != tuicaiItem.m_taocan_items.end(); it++)
+				{
+					std::string food_id = it->food_id;
+
+					//要根据商品ID找出商品的名字
+					CFood foodinfo;
+					CSqlite3 sqlite;
+					bool is_found = sqlite.GetFoodById(food_id, foodinfo);
+					if (!is_found)
+					{
+						continue;
+					}
+
+					CZhengcanOrderItemPrint foodpackageitemPrint;
+
+					foodpackageitemPrint.m_food_name = foodinfo.name;
+					foodpackageitemPrint.m_quantity = tuicaiItem.num;
+					foodpackageitemPrint.m_item_price = foodinfo.price;
+					foodpackageitemPrint.m_type_id = foodinfo.type_id;
+
+					foodpackageitemPrint.is_taocan = false;
+					foodpackageitemPrint.is_taocan_item = true;
+
+					m_items_print.push_back(foodpackageitemPrint);
+				}
+			}
+		}
+	}
 }

+ 12 - 2
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -23,6 +23,9 @@ public:
 
 	//表示这个是否是套餐下面的商品详情,主要用于厨房打印的时候,一个套餐下面的每个商品都会生成一个CZhengcanOrderItemPrint对象
 	bool is_taocan_item = false;
+
+	//是否是退菜的item
+	bool is_tuicai = false;
 };
 
 //历史下单的类,每下单或加菜一次对应的一个类对象来保存数据
@@ -194,7 +197,14 @@ public:
 	//根据订单ID,进行退款操作
 	bool Refund(std::string order_id);
 
-	//根据服务器获取的订单信息,更新当前order里面的m_items_print,用于打印
+	//根据服务器获取的订单信息,更新当前order里面的m_items_print,用于结算单打印
+	void UpdateItemPrint();
+
+	//根据服务器获取的订单信息,更新当前order里面的m_items_print,用于加菜打印
 	//jiacai_no 加菜编号,为0表示第一次下单,非0表示第N次加菜,如果为-1表示所有的item都有效
-	void UpdateItemPrint(std::string jiacai_no);
+	void UpdateItemPrintForJiacai(std::string jiacai_no);
+
+	//根据服务器获取的订单信息,更新当前order里面的m_items_print,用于退菜打印
+	//tuicai_item_id 退菜的item_id
+	void UpdateItemPrintForTuicai(std::string tuicai_item_id);
 };