Browse Source

增加了取消订单的打印

张洋 1 month ago
parent
commit
dbf8c1cc7b

BIN
bin/Win32/Release/zhipuzi_pos_windows/zhipuzi_pos_windows.exe


+ 47 - 0
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -73,6 +73,53 @@ void CPosPrinter::PrintWaimaiOrder(std::string order_id, std::string order_no)
 	PrintWaimaiOrder(order);
 }
 
+void CPosPrinter::PrintWaimaiOrderCancel(CWaimaiOrder& order)
+{
+	if (CSetting::GetInstance()->GetParam("setting_is_new_waimai_printer") == "1")
+	{
+		//执行收银小票打印操作
+		CPosPrinterData printData;
+
+		std::string data = printData.PrintWaimaiOrderShouyin(order);
+
+		if (data.length() > 0)
+		{
+			CPosPrinterWorker::GetInstance()->AddShouyinPrinter(data);
+		}
+	}
+
+	//判断是否进行自动的厨房打印
+	if (CSetting::GetInstance()->GetParam("setting_is_new_waimai_chufang_printer") == "1")
+	{
+		//进行厨房打印
+		CPosPrinterData printData;
+
+		std::vector<ChufangPrinterContent> datas = printData.PrintWaimaiOrderChufang(order);
+
+		if (datas.size() > 0)
+		{
+			for (std::vector<ChufangPrinterContent>::iterator it = datas.begin(); it != datas.end(); it++)
+			{
+				ChufangPrinterContent content = *it;
+
+				if (content.data.length() > 0)
+				{
+					CPosPrinterWorker::GetInstance()->AddChufangPrinter(content);
+				}
+			}
+		}
+	}
+}
+
+void CPosPrinter::PrintWaimaiOrderCancel(std::string order_id, std::string order_no)
+{
+	CWaimaiOrder order;
+
+	bool ret = order.InitData(order_id, order_no);
+
+	PrintWaimaiOrderCancel(order);
+}
+
 //完成所有打印一个点单订单的操作
 void CPosPrinter::PrintDiandanOrder(CDiandanOrder& order)
 {

+ 6 - 0
zhipuzi_pos_windows/print/CPosPrinter.h

@@ -14,6 +14,12 @@ public:
 	//通过订单号打印订单,后面要改成异步才行
 	void PrintWaimaiOrder(std::string order_id, std::string order_no);
 
+	//打印外卖订单被取消的小票,主要是给收银机打印,告诉收银机这个订单被取消了
+	void PrintWaimaiOrderCancel(CWaimaiOrder& order);
+
+	//打印外卖订单被取消的小票,主要是给收银机打印,告诉收银机这个订单被取消了
+	void PrintWaimaiOrderCancel(std::string order_id, std::string order_no);
+
 	//完成所有打印一个点单订单的操作(不等待,立即返回)
 	void PrintDiandanOrder(CDiandanOrder& order);
 

+ 688 - 0
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -1130,6 +1130,694 @@ std::vector<ChufangPrinterContent> CPosPrinterData::PrintWaimaiOrderChufang(CWai
 	return datas;
 }
 
+std::string CPosPrinterData::PrintWaimaiOrderCancelShouyin(CWaimaiOrder& order)
+{
+	//读取当前收银打印机的设置
+	std::string guige = CSetting::GetInstance()->GetParam("setting_printer_guige");
+
+	//正式开始打印
+	POS_Reset();
+
+	POS_TextOut(CLewaimaiString::UnicodeToGBK(L"外卖订单取消通知"), true, true, 1);
+
+	POS_FeedLine();
+	POS_FeedLine();
+
+	//打印店铺名字
+	std::string shop_name = CLewaimaiString::UTF8ToGBK(order.m_shop_name);
+	POS_TextOut(shop_name, true, true, 1);
+
+	POS_FeedLine();
+	POS_FeedLine();
+
+	//打印预约、即时配送的提醒
+
+	/*
+	bool setting_printer_peisongshijian_big = false;
+
+	if (CSetting::GetInstance()->GetParam("setting_printer_peisongshijian_big") == "1")
+	{
+		setting_printer_peisongshijian_big = true;
+	}
+	}*/
+
+	if (order.m_is_selftake == "1")
+	{
+		std::string date = CLewaimaiString::UnicodeToGBK(L"【自取单】") + CLewaimaiString::UTF8ToGBK(order.m_delivery_date);
+		POS_TextOut(date, false, true);
+		POS_TextOut(CLewaimaiString::UnicodeToGBK(L"取货"), false, false);
+
+		POS_FeedLine();
+
+		//自取单打印取餐码
+		if (CShopinfo::GetInstance()->m_version_type == "1")
+		{
+			//餐饮
+			std::string date = CLewaimaiString::UnicodeToGBK(L"取餐号:") + CLewaimaiString::UTF8ToGBK(order.m_take_food_code);
+			POS_TextOut(date, true, true, 1);
+			POS_FeedLine();
+		}
+		else
+		{
+			//零售
+			std::string date = CLewaimaiString::UnicodeToGBK(L"取货号:") + CLewaimaiString::UTF8ToGBK(order.m_take_food_code);
+			POS_TextOut(date, true, true, 1);
+			POS_FeedLine();
+		}
+	}
+	else
+	{
+		if (order.m_delivertime == CLewaimaiString::UnicodeToUTF8(L"尽快送达"))
+		{
+			//非预约单
+			std::string date = CLewaimaiString::UnicodeToGBK(L"【即时单】立即送达");
+			POS_TextOut(date, false, true, 1);
+
+			POS_FeedLine();
+		}
+		else
+		{
+			//预约单
+			std::string date = CLewaimaiString::UnicodeToGBK(L"【预约单】") + CLewaimaiString::UTF8ToGBK(order.m_delivery_date);
+			POS_TextOut(date, false, true);
+			POS_TextOut(CLewaimaiString::UnicodeToGBK(L"送达"), false, false);
+
+			POS_FeedLine();
+		}
+	}
+
+	POS_FeedLine();
+
+	//打印取货方式
+	/*
+	bool setting_printer_quhuo_big = false;
+
+	if(CSetting::GetInstance()->GetParam("setting_printer_quhuo_big") == "1")
+	{
+		setting_printer_quhuo_big = true;
+	}
+
+	if(order.m_is_selftake == "1")
+	{
+		POS_TextOut(CLewaimaiString::UnicodeToGBK(L"到店自取订单"), false, setting_printer_quhuo_big, 1);
+		POS_FeedLine();
+		POS_FeedLine();
+	}
+	else
+	{
+		POS_TextOut(CLewaimaiString::UnicodeToGBK(L"外卖订单"), false, setting_printer_quhuo_big, 1);
+		POS_FeedLine();
+	}
+
+	POS_FeedLine();
+	*/
+
+	//订单来源
+	std::string from_type = CLewaimaiString::UnicodeToGBK(L"订单来源:#") + order.m_restaurant_number + CLewaimaiString::UnicodeToGBK(L" ") + CLewaimaiString::UTF8ToGBK(order.m_from_type);
+	POS_TextOut(from_type);
+	POS_FeedLine();
+
+	//订单号
+	bool setting_printer_dingdanhao_big = false;
+
+	if (CSetting::GetInstance()->GetParam("setting_printer_dingdanhao_big") == "1")
+	{
+		setting_printer_dingdanhao_big = true;
+	}
+
+	std::string order_num = CLewaimaiString::UnicodeToGBK(L"订 单 号:") + CLewaimaiString::UTF8ToGBK(order.m_order_num);
+	POS_TextOut(order_num, false, setting_printer_dingdanhao_big);
+	POS_FeedLine();
+
+	//下单时间
+	bool setting_printer_xiadanshijian_big = false;
+
+	if (CSetting::GetInstance()->GetParam("setting_printer_xiadanshijian_big") == "1")
+	{
+		setting_printer_xiadanshijian_big = true;
+	}
+
+	std::string order_date = CLewaimaiString::UnicodeToGBK(L"下单时间:") + CLewaimaiString::UTF8ToGBK(order.m_order_date);
+	POS_TextOut(order_date, false, setting_printer_xiadanshijian_big);
+	POS_FeedLine();
+
+	//姓名
+	bool setting_printer_name_big = false;
+
+	if (CSetting::GetInstance()->GetParam("setting_printer_name_big") == "1")
+	{
+		setting_printer_name_big = true;
+	}
+
+	if (order.m_is_selftake != "1")
+	{
+		std::string name = CLewaimaiString::UnicodeToGBK(L"姓名:") + CLewaimaiString::UTF8ToGBK(order.m_customer_name);
+
+		//把下单次数也一起打印
+		if (order.m_showordernum == "1")
+		{
+			name += CLewaimaiString::UnicodeToGBK(L"(第 ") + CLewaimaiString::UTF8ToGBK(order.m_customer_order_total) + CLewaimaiString::UnicodeToGBK(L" 次下单)");
+		}
+
+		POS_TextOut(name, false, setting_printer_name_big);
+		POS_FeedLine();
+	}
+
+	//电话
+	bool setting_printer_phone_big = false;
+
+	if (CSetting::GetInstance()->GetParam("setting_printer_phone_big") == "1")
+	{
+		setting_printer_phone_big = true;
+	}
+
+	std::string phone = CLewaimaiString::UnicodeToGBK(L"电话:") + CLewaimaiString::UTF8ToGBK(order.m_phone);
+	POS_TextOut(phone, false, setting_printer_phone_big);
+	POS_FeedLine();
+
+	//地址
+	bool setting_printer_address_big = false;
+
+	if (CSetting::GetInstance()->GetParam("setting_printer_address_big") == "1")
+	{
+		setting_printer_address_big = true;
+	}
+
+	if (order.m_is_selftake != "1")
+	{
+		std::string address = CLewaimaiString::UnicodeToGBK(L"地址:") + CLewaimaiString::UTF8ToGBK(order.m_address);
+		POS_TextOut(address, false, setting_printer_address_big);
+		POS_FeedLine();
+	}
+
+	//预设选项
+	if (order.m_order_field.size() > 1)
+	{
+		if (order.m_is_selftake == "0")
+		{
+			//如果是外卖配送订单,移除最后的配送时间
+			order.m_order_field.pop_back();
+		}
+
+		for (std::vector<CWaimaiOrderField>::iterator it = order.m_order_field.begin(); it != order.m_order_field.end(); it++)
+		{
+			std::string order_field = CLewaimaiString::UTF8ToGBK((*it).name) + CLewaimaiString::UnicodeToGBK(L":") + CLewaimaiString::UTF8ToGBK((*it).value);
+			POS_TextOut(order_field, false, false, 0);
+			POS_FeedLine();
+		}
+	}
+
+	//准备开始打印商品详情
+	std::string lines;
+
+	if (guige == "58")
+	{
+		lines = CLewaimaiString::UnicodeToGBK(L"--------------------------------");
+	}
+	else
+	{
+		lines = CLewaimaiString::UnicodeToGBK(L"------------------------------------------------");
+	}
+
+	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(CLewaimaiString::UnicodeToGBK(L"商品           单价   数量  金额"), false, setting_printer_shangpin_big);
+	}
+	else
+	{
+		POS_TextOut(CLewaimaiString::UnicodeToGBK(L"商品                         单价    数量   金额"), false, setting_printer_shangpin_big);
+	}
+
+	POS_FeedLine();
+
+	if (order.m_manzeng_name.length() > 0)
+	{
+		CWaimaiOrderItem manzengItem;
+		manzengItem.m_food_name = CLewaimaiString::GBKToUTF8(CLewaimaiString::UnicodeToGBK(L"【满赠】") + CLewaimaiString::UTF8ToGBK(order.m_manzeng_name));
+
+		order.m_order_items.push_back(manzengItem);
+	}
+
+	//商品内容
+	for (std::vector<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.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;
+
+		//计算总价
+		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::UTF8ToGBK(food_name);
+
+		//先输出商品名字
+		std::vector<std::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<std::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();
+		std::string address = CLewaimaiString::UnicodeToGBK(L"顾客备注:") + CLewaimaiString::UTF8ToGBK(order.m_memo);
+		POS_TextOut(address, false, setting_printer_memo_big);
+		POS_FeedLine();
+	}
+
+	//结束商品详情打印
+	POS_TextOut(lines);
+	POS_FeedLine();
+
+	POS_TextOut(CLewaimaiString::UnicodeToGBK(L"该订单已被顾客取消,请停止出餐配送!!!"), true, true, 2);
+
+	POS_FeedLine();
+	POS_FeedLine();
+
+	//走纸几行再切
+	POS_FeedLine();
+	POS_FeedLine();
+	POS_FeedLine();
+	POS_FeedLine();
+	POS_FeedLine();
+
+	POS_CutPaper();
+
+	//还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+	POS_Reset();
+
+	return m_print_content;
+}
+
+std::vector<ChufangPrinterContent> CPosPrinterData::PrintWaimaiOrderCancelChufang(CWaimaiOrder& order)
+{
+	std::vector<ChufangPrinterContent> datas;
+
+	//读取厨房打印机信息
+	std::vector<ChufangPrinter> total_printers = CSetting::GetInstance()->getChufangPrints();
+
+	for (std::vector<ChufangPrinter>::iterator it = total_printers.begin(); it != total_printers.end(); it++)
+	{
+		//清空每个厨房打印机的打印内容
+		m_print_content = "";
+
+		ChufangPrinter printer = *it;
+		std::string ip = printer.ip;
+
+		std::string guige = printer.guige;
+		std::string fendan = printer.fendan;
+		std::string fenlei = printer.fenlei;
+		std::string fenlei_ids = printer.fenlei_ids;
+
+		std::vector<CWaimaiOrderItem> cur_printer_use;
+		if (fenlei == "0")
+		{
+			cur_printer_use = order.m_order_items;
+		}
+		else
+		{
+			//如果开启了分类打印,就要比对了
+			std::map<std::string, bool> ids_map;
+			std::vector<std::string> ids = CLewaimaiString::Split(fenlei_ids, ",");
+
+			for (std::vector<std::string>::iterator it = ids.begin(); it != ids.end(); it++)
+			{
+				ids_map[(*it)] = true;
+			}
+
+			for (std::vector<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.end(); it++)
+			{
+				if (ids_map.find((*it).m_type_id) != ids_map.end())
+				{
+					//如果当前商品的分类,在厨房打印机设置的分类里面,才加入
+					cur_printer_use.push_back(*it);
+				}
+			}
+		}
+
+		if (cur_printer_use.size() == 0)
+		{
+			//如果这个厨房打印机没有商品可以打印(开启了商品分类打印可能出现),就直接跳过
+			continue;
+		}
+
+		if (fendan == "0")
+		{
+			POS_Reset();
+			POS_TextOut(CLewaimaiString::UnicodeToGBK(L"外卖订单取消通知"), true, true, 1);
+			POS_FeedLine();
+
+			POS_FeedLine();
+
+			std::string order_type = CLewaimaiString::UnicodeToGBK(L"#") + order.m_restaurant_number + CLewaimaiString::UnicodeToGBK(L"  ");
+
+			if (order.m_is_selftake == "1")
+			{
+				POS_TextOut(order_type + CLewaimaiString::UnicodeToGBK(L"到店自取订单"), false, true, 1);
+				POS_FeedLine();
+
+				POS_FeedLine();
+			}
+			else
+			{
+				POS_TextOut(order_type + CLewaimaiString::UnicodeToGBK(L"外卖订单"), false, true, 1);
+				POS_FeedLine();
+
+				POS_FeedLine();
+			}
+
+			//预设选项
+			if (order.m_order_field.size() > 1)
+			{
+				for (std::vector<CWaimaiOrderField>::iterator it = order.m_order_field.begin(); it != order.m_order_field.end() - 1; it++)
+				{
+					std::string order_field = CLewaimaiString::UTF8ToGBK((*it).name) + CLewaimaiString::UnicodeToGBK(L":") + CLewaimaiString::UTF8ToGBK((*it).value);
+					POS_TextOut(order_field, false, true, 0);
+					POS_FeedLine();
+				}
+			}
+
+			//准备开始打印商品详情
+			std::string lines;
+
+			if (guige == "58")
+			{
+				lines = CLewaimaiString::UnicodeToGBK(L"--------------------------------");
+			}
+			else
+			{
+				lines = CLewaimaiString::UnicodeToGBK(L"------------------------------------------------");
+			}
+
+			POS_TextOut(lines);
+			POS_FeedLine();
+
+			//商品标题
+			if (guige == "58")
+			{
+				POS_TextOut(CLewaimaiString::UnicodeToGBK(L"商品           单价   数量  金额"), false, true);
+			}
+			else
+			{
+				POS_TextOut(CLewaimaiString::UnicodeToGBK(L"商品                         单价    数量   金额"), false, true);
+			}
+
+			POS_FeedLine();
+
+			//商品内容
+			for (std::vector<CWaimaiOrderItem>::iterator it = cur_printer_use.begin(); it != cur_printer_use.end(); it++)
+			{
+				if (it->is_taocan == true)
+				{
+					//套餐的名字,厨房打印不打印
+					continue;
+				}
+
+				std::string food_name = (*it).m_food_name;
+				std::string food_price = (*it).m_item_price;
+				std::string quantity = (*it).m_quantity;
+
+				//计算总价
+				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::UTF8ToGBK(food_name);
+				//先输出商品名字
+				std::vector<std::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, true, 0);
+				POS_FeedLine();
+
+				for (std::vector<std::string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
+				{
+					POS_TextOut((*it), false, true, 0);
+					POS_FeedLine();
+				}
+			}
+
+			//判断是否有备注
+			if (order.m_memo.length() > 0)
+			{
+				POS_FeedLine();
+				std::string address = CLewaimaiString::UnicodeToGBK(L"顾客备注:") + CLewaimaiString::UTF8ToGBK(order.m_memo);
+				POS_TextOut(address, false, true, 0);
+				POS_FeedLine();
+			}
+
+			//结束商品详情打印
+			POS_TextOut(lines);
+			POS_FeedLine();
+
+			POS_TextOut(CLewaimaiString::UnicodeToGBK(L"该订单已被顾客取消,请停止出餐配送!!!"), true, true, 2);
+
+			POS_FeedLine();
+			POS_FeedLine();
+
+			POS_FeedLine();
+			POS_FeedLine();
+			POS_FeedLine();
+			POS_FeedLine();
+			POS_FeedLine();
+
+			POS_CutPaper();
+
+			//还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+			POS_Reset();
+		}
+		else
+		{
+			POS_Reset();
+
+			//分单模式下,每个商品打印一张单
+			for (std::vector<CWaimaiOrderItem>::iterator it = cur_printer_use.begin(); it != cur_printer_use.end(); it++)
+			{
+				if (it->is_taocan == true)
+				{
+					//套餐的名字,厨房打印不打印
+					continue;
+				}
+
+				POS_TextOut(CLewaimaiString::UnicodeToGBK(L"外卖订单取消通知"), true, true, 1);
+				POS_FeedLine();
+
+				POS_FeedLine();
+
+				std::string order_type = CLewaimaiString::UnicodeToGBK(L"#") + order.m_restaurant_number + CLewaimaiString::UnicodeToGBK(L"  ");
+
+				if (order.m_is_selftake == "1")
+				{
+					POS_TextOut(order_type + CLewaimaiString::UnicodeToGBK(L"到店自取订单"), false, true, 1);
+					POS_FeedLine();
+
+					POS_FeedLine();
+				}
+				else
+				{
+					POS_TextOut(order_type + CLewaimaiString::UnicodeToGBK(L"外卖订单"), false, true, 1);
+					POS_FeedLine();
+
+					POS_FeedLine();
+				}
+
+				//预设选项
+				if (order.m_order_field.size() > 1)
+				{
+					for (std::vector<CWaimaiOrderField>::iterator it = order.m_order_field.begin(); it != order.m_order_field.end() - 1; it++)
+					{
+						std::string order_field = CLewaimaiString::UTF8ToGBK((*it).name) + ":" + CLewaimaiString::UTF8ToGBK((*it).value);
+						POS_TextOut(order_field, false, true, 0);
+						POS_FeedLine();
+					}
+				}
+
+				//准备开始打印商品详情
+				std::string lines;
+
+				if (guige == "58")
+				{
+					lines = CLewaimaiString::UnicodeToGBK(L"--------------------------------");
+				}
+				else
+				{
+					lines = CLewaimaiString::UnicodeToGBK(L"------------------------------------------------");
+				}
+
+				POS_TextOut(lines);
+				POS_FeedLine();
+
+				//商品标题
+				if (guige == "58")
+				{
+					POS_TextOut(CLewaimaiString::UnicodeToGBK(L"商品           单价   数量  金额"), false, true);
+				}
+				else
+				{
+					POS_TextOut(CLewaimaiString::UnicodeToGBK(L"商品                         单价    数量   金额"), false, true);
+				}
+
+				POS_FeedLine();
+				std::string food_name = (*it).m_food_name;
+				std::string food_price = (*it).m_item_price;
+				std::string quantity = (*it).m_quantity;
+				//计算总价
+				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::UTF8ToGBK(food_name);
+				//先输出商品名字
+				std::vector<std::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];
+				std::string priceShow = HandleFoodItemPrice(food_price, 2);
+				std::string quantityShow = HandleFoodQuantity(quantity, 2);
+				std::string priceTotalShow = HandleFoodTotalPrice(food_total_price, 2);
+				std::string firstLineShow = firstLine + priceShow + quantityShow + priceTotalShow;
+				POS_TextOut(firstLineShow, false, true, 0);
+				POS_FeedLine();
+
+				for (std::vector<std::string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
+				{
+					POS_TextOut((*it), false, true, 0);
+					POS_FeedLine();
+				}
+
+				//判断是否有备注
+				if (order.m_memo.length() > 0)
+				{
+					POS_FeedLine();
+					std::string address = CLewaimaiString::UnicodeToGBK(L"顾客备注:") + CLewaimaiString::UTF8ToGBK(order.m_memo);
+					POS_TextOut(address, false, true, 0);
+					POS_FeedLine();
+				}
+
+				//结束商品详情打印
+				POS_TextOut(lines);
+				POS_FeedLine();
+
+				POS_TextOut(CLewaimaiString::UnicodeToGBK(L"该订单已被顾客取消,请停止出餐配送!!!"), true, true, 2);
+
+				POS_FeedLine();
+				POS_FeedLine();
+
+				POS_FeedLine();
+				POS_FeedLine();
+				POS_FeedLine();
+				POS_FeedLine();
+				POS_FeedLine();
+
+				POS_CutPaper();
+			}
+
+			//还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+			POS_Reset();
+		}
+
+		ChufangPrinterContent newData;
+		newData.ip = ip;
+		newData.data = m_print_content;
+
+		datas.push_back(newData);
+	}
+
+	return datas;
+}
+
 std::string CPosPrinterData::PrintDiandanOrderShouyin(CDiandanOrder& order)
 {
 	//读取当前收银打印机的设置

+ 3 - 0
zhipuzi_pos_windows/print/CPosPrinterData.h

@@ -25,6 +25,9 @@ public:
 	std::string PrintWaimaiOrderBiaoqian(CWaimaiOrder& order);
 	std::vector<ChufangPrinterContent> PrintWaimaiOrderChufang(CWaimaiOrder& order);
 
+	std::string PrintWaimaiOrderCancelShouyin(CWaimaiOrder& order);
+	std::vector<ChufangPrinterContent> PrintWaimaiOrderCancelChufang(CWaimaiOrder& order);
+
 	std::string PrintDiandanOrderShouyin(CDiandanOrder& order);
 	std::string PrintDiandanOrderBiaoqian(CDiandanOrder& order);
 	std::vector<ChufangPrinterContent> PrintDiandanOrderChufang(CDiandanOrder& order);

BIN
zhipuzi_pos_windows/resource/skin.zip


+ 6 - 0
zhipuzi_pos_windows/worker/CMqttClientWorker.cpp

@@ -404,8 +404,14 @@ void CMqttClientWorker::HandleMessage(std::string message)
 	}
 	else if (type == "waimai_cancel")
 	{
+		std::string order_id = CLewaimaiJson::ToString(data["order_id"]);
+		std::string order_no = CLewaimaiJson::ToString(data["order_no"]);
+
 		//取消外卖订单
 		CVoiceWorker::GetInstance()->AddVoice(3);
+
+		CPosPrinter printer;
+		printer.PrintWaimaiOrder(order_id, order_no);
 	}
 	else if (type == "waimai_order_refund")
 	{