Pārlūkot izejas kodu

继续做打印

zhangyang 3 gadi atpakaļ
vecāks
revīzija
5835442dde

BIN
bin/Win32/Debug/zhipuzi_pos_windows/music/zhengcan_h5_diancai.wav


BIN
res/music/zhengcan_h5_diancai.wav


+ 12 - 0
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -184,6 +184,18 @@ void CPosPrinter::PrintZhengcanOrderXiadan(CZhengcanOrder& order)
 	}
 }
 
+void CPosPrinter::PrintZhengcanOrderXiadan(std::string order_id, std::string jiacai_no)
+{
+	CZhengcanOrder order;
+
+	bool ret = order.InitData(order_id);
+
+	//需要先对order中的itemprint进行处理
+	order.UpdateItemPrint(jiacai_no);
+
+	PrintZhengcanOrderXiadan(order);
+}
+
 void CPosPrinter::PrintZhengcanOrderTuicai(CZhengcanOrder& order)
 {
 	//判断是否进行自动的厨房打印(退菜只打印厨房小票,不打印收银小票)

+ 3 - 0
zhipuzi_pos_windows/print/CPosPrinter.h

@@ -27,6 +27,9 @@ public:
 	//完成所有打印一个正餐下单的打印操作(不等待,立即返回)
 	void PrintZhengcanOrderXiadan(CZhengcanOrder& order);
 
+	//通过商家app加菜成功,或者商家app确认扫码下单加菜,这个时候推送给收银机来打印
+	void PrintZhengcanOrderXiadan(std::string order_id, std::string jiacai_no);
+
 	//完成所有打印一个正餐退菜的打印操作(不等待,立即返回)
 	void PrintZhengcanOrderTuicai(CZhengcanOrder& order);
 

+ 12 - 0
zhipuzi_pos_windows/worker/CMessagePushWorker.cpp

@@ -284,4 +284,16 @@ void CMessagePushWorker::HandelMessage(std::string msg)
 		CPosPrinter printer;
 		printer.PrintDiandanOrder(order_id);
 	}
+	else if (type == MESSAGE_TYPE::NEW_ZHENGCAN_JIACAI)
+	{
+		std::string order_id = document["waimai_order_id"].GetString();
+		std::string jiacai_no = document["jiacai_no"].GetString();
+
+		CPosPrinter printer;
+		printer.PrintZhengcanOrderXiadan(order_id, jiacai_no);
+	}
+	else if (type == MESSAGE_TYPE::NEW_ZHENGCAN_H5_JIACAI)
+	{
+		CVoiceWorker::GetInstance()->AddVoice(6);
+	}
 }

+ 3 - 0
zhipuzi_pos_windows/worker/CMessagePushWorker.h

@@ -24,6 +24,9 @@ enum MESSAGE_TYPE
 
 	NEW_KAUICANTANGSHI_ORDER = 4,
 	NEW_KUAICANSHANGJIAAPP_ORDER = 5, //商家app下单的,自动打印
+	
+	NEW_ZHENGCAN_JIACAI = 6, //正餐加菜成功
+	NEW_ZHENGCAN_H5_JIACAI = 7, //正餐扫码下单加菜
 };
 
 //这个类专门用于接收服务器端的消息推送

+ 5 - 0
zhipuzi_pos_windows/worker/CVoiceWorker.cpp

@@ -78,6 +78,11 @@ void CVoiceWorker::HandleVoice()
 			wstring path = CSystem::GetProgramDir() + L"\\music\\diannei_new.wav";
 			PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
 		}
+		else if (voice_type == 6)
+		{
+			wstring path = CSystem::GetProgramDir() + L"\\music\\zhengcan_h5_diancai.wav";
+			PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
+		}
 
 		//8ÃëÄÚ×î¶à²¥·ÅÒ»´Î
 		CSystem::my_sleep(8);

+ 1 - 1
zhipuzi_pos_windows/worker/CVoiceWorker.h

@@ -25,7 +25,7 @@ public:
 	void HandleVoice();
 
 	/*
-	 *类型 1:新外卖订单 2:新外卖订单自动接单 3:外卖订单取消 4:外卖订单退款 5:新的快餐扫码下单订单
+	 *类型 1:新外卖订单 2:新外卖订单自动接单 3:外卖订单取消 4:外卖订单退款 5:新的快餐扫码下单订单 6:正餐扫码下单H5点菜
 	 **/
 	void AddVoice(int voice_type);
 

+ 82 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.cpp

@@ -758,6 +758,10 @@ bool CZhengcanOrder::InitData(std::string order_id)
 				newItem.is_dabao = false;
 			}
 
+			newItem.is_jiacai = CLewaimaiJson::ToString(cur_foodpackage["is_jiacai"]);
+			newItem.jiacai_no = CLewaimaiJson::ToString(cur_foodpackage["jiacai_no"]);
+			newItem.is_tuicai = CLewaimaiJson::ToString(cur_foodpackage["is_tuicai"]);
+
 			//从数据库读取套餐的打包费信息
 			CFoodpackage foodpackageinfo;
 			CSqlite3 sqlite;
@@ -802,6 +806,10 @@ bool CZhengcanOrder::InitData(std::string order_id)
 					taocanItem.is_dabao = false;
 				}
 
+				newItem.is_jiacai = CLewaimaiJson::ToString(food_item_info["is_jiacai"]);
+				newItem.jiacai_no = CLewaimaiJson::ToString(food_item_info["jiacai_no"]);
+				newItem.is_tuicai = CLewaimaiJson::ToString(food_item_info["is_tuicai"]);
+
 				//目前服务器返回的dabao_money一直为0,是不对的,暂时不用这个,下面从数据库里读取
 				//newItem.dabao_money = CLewaimaiJson::ToString(foodinfo["dabao_money"]);
 
@@ -858,4 +866,78 @@ bool CZhengcanOrder::Refund(std::string order_id)
 	}
 
 	return true;
+}
+
+void CZhengcanOrder::UpdateItemPrint(std::string jiacai_no)
+{
+	//清空之前的打印记录
+	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 (jiacai_no != "-1")
+			{
+				if (it1->jiacai_no != jiacai_no)
+				{
+					//如果jiacai_no不想等,就直接忽略
+					continue;
+				}
+			}
+
+			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_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);
+				}
+			}
+		}
+	}
 }

+ 4 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -193,4 +193,8 @@ public:
 
 	//根据订单ID,进行退款操作
 	bool Refund(std::string order_id);
+
+	//根据服务器获取的订单信息,更新当前order里面的m_items_print,用于打印
+	//jiacai_no 加菜编号,为0表示第一次下单,非0表示第N次加菜,如果为-1表示所有的item都有效
+	void UpdateItemPrint(std::string jiacai_no);
 };