瀏覽代碼

(1)支持40*60mm标签
(2)标签打印支持分类打印
(3)退款中订单的展示、操作优化
(4)顾客退款,打印小票

zhangyang 3 年之前
父節點
當前提交
349a8bcf75

二進制
bin/Win32/Release/lewaimai_pos_windows/db/pos.db


文件差異過大導致無法顯示
+ 0 - 244
bin/Win32/Release/lewaimai_pos_windows/log/pos.log


+ 0 - 0
bin/Win32/Release/lewaimai_pos_windows/log/pos_error.log


二進制
bin/Win32/Release/setup/lewaimai_pos_windows_setup_1.0.4.1.exe


+ 1 - 1
bin/Win32/Release/setup/乐外卖接单软件安装脚本.nsi

@@ -2,7 +2,7 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "乐外卖接单软件"
-!define PRODUCT_VERSION "1.0.4.1"
+!define PRODUCT_VERSION "1.0.4.2"
 !define PRODUCT_PUBLISHER "深圳市迅享科技有限公司"
 !define PRODUCT_WEB_SITE "https://www.lewaimai.com"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"

+ 93 - 53
lewaimai_pos_windows/control/CWaimaiOrderInfoUI.cpp

@@ -294,6 +294,12 @@ void CWaimaiOrderInfoUI::Refresh(CWaimaiOrder& order)
 	{
 		wsStatus += _T(",失败原因:") + CLewaimaiString::UTF8ToUnicode(order.m_failed_reason);
 	}
+	else if (order.m_is_apply_refund == "1" && order.m_refund_info_status == "1")
+	{
+		//顾客申请退款,等待处理中
+		wsStatus = _T("订单状态:顾客申请退款中,等待商家审核");
+	}
+
 	pStatus->SetText(wsStatus.c_str());
 
 	CLabelUI *pType = static_cast<CLabelUI *>(this->FindSubControl(_T("waimai_order_info_page_type")));
@@ -385,6 +391,49 @@ void CWaimaiOrderInfoUI::Refresh(CWaimaiOrder& order)
 		refund_button->SetVisible(false);
 
 		pRefundStatus->SetVisible(false);
+
+		if (order.m_is_apply_refund == "1")
+		{
+			if (order.m_refund_info_status == "1")
+			{
+				//等待审核
+				confirm_button->SetVisible(false);
+				success_button->SetVisible(false);
+				fail_button->SetVisible(false);
+
+				agree_button->SetVisible(true);
+				disagree_button->SetVisible(true);
+
+				refund_button->SetVisible(false);
+
+				pRefundStatus->SetVisible(true);
+				refundHeight = 30;
+
+				std::wstring refund_status_text = L"退款原因:" + CLewaimaiString::UTF8ToUnicode(order.m_refund_reason_first);
+
+				pRefundStatus->SetText(refund_status_text.c_str());
+			}
+			else if (order.m_refund_info_status == "2")
+			{
+				//拒绝退款
+				pRefundStatus->SetVisible(true);
+				refundHeight = 30;
+
+				std::wstring refund_status_text = L"退款状态:拒绝退款";
+
+				pRefundStatus->SetText(refund_status_text.c_str());
+			}
+			else if (order.m_refund_info_status == "3")
+			{
+				//拒绝退款
+				pRefundStatus->SetVisible(true);
+				refundHeight = 30;
+
+				std::wstring refund_status_text = L"退款状态:已同意退款";
+
+				pRefundStatus->SetText(refund_status_text.c_str());
+			}
+		}
 	}
 	else if (_tcscmp(CLewaimaiString::UTF8ToUnicode(order.m_order_status).c_str(), _T("已确认")) == 0)
 	{
@@ -398,6 +447,49 @@ void CWaimaiOrderInfoUI::Refresh(CWaimaiOrder& order)
 		refund_button->SetVisible(false);
 
 		pRefundStatus->SetVisible(false);
+
+		if (order.m_is_apply_refund == "1")
+		{
+			if (order.m_refund_info_status == "1")
+			{
+				//等待审核
+				confirm_button->SetVisible(false);
+				success_button->SetVisible(false);
+				fail_button->SetVisible(false);
+
+				agree_button->SetVisible(true);
+				disagree_button->SetVisible(true);
+
+				refund_button->SetVisible(false);
+
+				pRefundStatus->SetVisible(true);
+				refundHeight = 30;
+
+				std::wstring refund_status_text = L"退款原因:" + CLewaimaiString::UTF8ToUnicode(order.m_refund_reason_first);
+
+				pRefundStatus->SetText(refund_status_text.c_str());
+			}
+			else if (order.m_refund_info_status == "2")
+			{
+				//拒绝退款
+				pRefundStatus->SetVisible(true);
+				refundHeight = 30;
+
+				std::wstring refund_status_text = L"退款状态:拒绝退款";
+
+				pRefundStatus->SetText(refund_status_text.c_str());
+			}
+			else if (order.m_refund_info_status == "3")
+			{
+				//拒绝退款
+				pRefundStatus->SetVisible(true);
+				refundHeight = 30;
+
+				std::wstring refund_status_text = L"退款状态:已同意退款";
+
+				pRefundStatus->SetText(refund_status_text.c_str());
+			}
+		}
 	}
 	else if (_tcscmp(CLewaimaiString::UTF8ToUnicode(order.m_order_status).c_str(), _T("交易成功")) == 0)
 	{
@@ -472,58 +564,6 @@ void CWaimaiOrderInfoUI::Refresh(CWaimaiOrder& order)
 
 		pRefundStatus->SetVisible(false);
 	}
-	else if (_tcscmp(CLewaimaiString::UTF8ToUnicode(order.m_order_status).c_str(), _T("退款中")) == 0)
-	{
-		confirm_button->SetVisible(false);
-		success_button->SetVisible(false);
-		fail_button->SetVisible(false);
-
-		std::string refund_status = m_order.m_refund_status;
-		if (refund_status == "1")
-		{
-			agree_button->SetVisible(true);
-			disagree_button->SetVisible(true);
-		}
-		else if (refund_status == "5")
-		{
-			agree_button->SetVisible(true);
-			disagree_button->SetVisible(false);
-		}
-		else
-		{
-			agree_button->SetVisible(false);
-			disagree_button->SetVisible(false);
-		}
-
-		refund_button->SetVisible(false);
-
-		pRefundStatus->SetVisible(true);
-		refundHeight = 30;
-
-		std::wstring refund_status_text = L"退款状态:";
-		if (refund_status == "1")
-		{
-			refund_status_text += L"顾客申请退款,等待商家处理";
-		}
-		else if (refund_status == "2")
-		{
-			refund_status_text += L"退款成功,订单失败";
-		}
-		else if (refund_status == "3")
-		{
-			refund_status_text += L"商家已拒绝退款,等待顾客受理";
-		}
-		else if (refund_status == "4")
-		{
-			refund_status_text += L"退款失败,订单变为已确认";
-		}
-		else if (refund_status == "5")
-		{
-			refund_status_text += L"顾客再次发起退款,等待客服介入处理中";
-		}
-
-		pRefundStatus->SetText(refund_status_text.c_str());
-	}
 
 	//如果是平台专送模式,商家不能设为成功和失败
 	if (order.m_is_selftake == "0" && order.m_delivery_mode == "1")
@@ -550,5 +590,5 @@ void CWaimaiOrderInfoUI::Refresh(CWaimaiOrder& order)
 		pConfigmemo->SetVisible(false);
 	}
 
-	this->FindSubControl(_T("waimai_order_info_page_layout_3"))->SetFixedHeight(order_filed_height + refundHeight + configMemoHeight + 181);
+	this->FindSubControl(_T("waimai_order_info_page_layout_3"))->SetFixedHeight(order_filed_height + refundHeight + configMemoHeight + 211);
 }

+ 1 - 1
lewaimai_pos_windows/control/OrderListUI.cpp

@@ -60,7 +60,7 @@ void OrderListUI::HandleRefresh(OrderListStatus* status)
 	}
 	else if (status->m_status == 7)
 	{
-		url = "/order/getrefundlist";
+		url = "/order/getrefundorderlist";
 	}
 
 	//请求外卖的未处理订单,直接用当前的page值去请求

+ 64 - 39
lewaimai_pos_windows/network/CMessagePush.cpp

@@ -264,6 +264,11 @@ void CMessagePush::ReceiveMessage()
 			else if (type == "3")
 			{
 				AddVoice(4);
+
+				std::string order_id = document["waimai_order_id"].GetString();
+				std::string order_no = document["waimai_order_no"].GetString();
+
+				AddPinter(order_id, order_no, 1, 3);
 			}
 			else if (type == "0")
 			{
@@ -309,7 +314,7 @@ void CMessagePush::AddConfirm(std::string order_id)
     m_confirm_mutex.unlock();
 }
 
-void CMessagePush::AddPinter(std::string order_id, std::string order_no, int print_type)
+void CMessagePush::AddPinter(std::string order_id, std::string order_no, int print_type, int order_type)
 {
     m_printer_mutex.lock();
 
@@ -317,6 +322,7 @@ void CMessagePush::AddPinter(std::string order_id, std::string order_no, int pri
     newPrinter.order_id = order_id;
     newPrinter.order_no = order_no;
 	newPrinter.print_type = print_type;
+	newPrinter.order_type = order_type;
 
     m_printer_queue.push(newPrinter);
 
@@ -441,15 +447,47 @@ void CMessagePush::HandlePrinter()
         std::string order_id = printerInfo.order_id;
         std::string order_no = printerInfo.order_no;
 		int print_type = printerInfo.print_type;
+		int order_type = printerInfo.order_type;
 
         m_printer_queue.pop();
 
         m_printer_mutex.unlock();
 
-        CWaimaiOrder order;
-		if (print_type == 1)
+		if (order_type == 1)
 		{
-			if (CSetting::GetParam("setting_is_new_waimai_printer") == "1" || CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1" || CSetting::GetParam("setting_is_new_waimai_chufang_printer") == "1")
+			CWaimaiOrder order;
+			if (print_type == 1)
+			{
+				if (CSetting::GetParam("setting_is_new_waimai_printer") == "1" || CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1" || CSetting::GetParam("setting_is_new_waimai_chufang_printer") == "1")
+				{
+					bool ret = order.InitData(order_id, order_no);
+
+					if (ret == false)
+					{
+						this->AddPinter(order_id, order_no, print_type);
+						continue;
+					}
+				}
+
+				//判断是否自动打印收银小票
+				if (CSetting::GetParam("setting_is_new_waimai_printer") == "1")
+				{
+					AddShouyinPrinter(order);
+				}
+
+				//判断是否自动打印标签小票
+				if (CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1")
+				{
+					AddBiaoqianPrinter(order);
+				}
+
+				//判断是否进行自动的厨房打印
+				if (CSetting::GetParam("setting_is_new_waimai_chufang_printer") == "1")
+				{
+					AddChufangPrinter(order);
+				}
+			}
+			else
 			{
 				bool ret = order.InitData(order_id, order_no);
 
@@ -458,55 +496,42 @@ void CMessagePush::HandlePrinter()
 					this->AddPinter(order_id, order_no, print_type);
 					continue;
 				}
-			}
 
-			//判断是否自动打印收银小票
-			if (CSetting::GetParam("setting_is_new_waimai_printer") == "1")
-			{
+				//手动打印的模式下,收银小票一定打印,标签如果没开就不打印
 				AddShouyinPrinter(order);
-			}
-
-			//判断是否自动打印标签小票
-			if (CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1")
-			{
-				AddBiaoqianPrinter(order);
-			}
 
-			//判断是否进行自动的厨房打印
-			if (CSetting::GetParam("setting_is_new_waimai_chufang_printer") == "1")
-			{
+				//手动打印的模式下,厨房小票一定打印
 				AddChufangPrinter(order);
+
+				//判断是否进行自动的厨房打印
+				/*
+				if (CSetting::GetParam("setting_is_new_waimai_chufang_printer") == "1")
+				{
+					AddChufangPrinter(order);
+				}
+				}*/
+
+				//判断是否自动打印标签小票
+				if (CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1")
+				{
+					AddBiaoqianPrinter(order);
+				}
 			}
 		}
-		else
+		else if (order_type == 3)
 		{
+			//顾客申请退款的
+			CWaimaiOrder order;
 			bool ret = order.InitData(order_id, order_no);
 
 			if (ret == false)
 			{
-				this->AddPinter(order_id, order_no, print_type);
+				this->AddPinter(order_id, order_no, print_type, order_type);
 				continue;
 			}
 
-			//手动打印的模式下,收银小票一定打印,标签如果没开就不打印
-			AddShouyinPrinter(order);
-
-			//手动打印的模式下,厨房小票一定打印
-			AddChufangPrinter(order);
-
-			//判断是否进行自动的厨房打印
-			/*
-			if (CSetting::GetParam("setting_is_new_waimai_chufang_printer") == "1")
-			{
-				AddChufangPrinter(order);
-			}
-			}*/
-
-			//判断是否自动打印标签小票
-			if (CSetting::GetParam("setting_is_new_waimai_biaoqian_printer") == "1")
-			{
-				AddBiaoqianPrinter(order);
-			}
+			CPosPrinter printer;
+			printer.PrintWaimaiOrderTuikuan(order);
 		}
     }
 

+ 2 - 1
lewaimai_pos_windows/network/CMessagePush.h

@@ -21,6 +21,7 @@ public:
 	std::string order_id;
 	std::string order_no;
 	int print_type; //打印类型 1:新订单自动打印 2:手动打印
+	int order_type = 1; // 订单类型:1 新订单 2 顾客取消订单 3顾客主动退款
 };
 
 class CMessagePush
@@ -57,7 +58,7 @@ public:
 
 	void AddVoice(int voice_type);
 	void AddConfirm(std::string order_id);
-	void AddPinter(std::string order_id, std::string order_no, int print_type);
+	void AddPinter(std::string order_id, std::string order_no, int print_type, int order_type = 1);
 	void AddShouyinPrinter(CWaimaiOrder order);
 	void AddBiaoqianPrinter(CWaimaiOrder order);
 	void AddChufangPrinter(CWaimaiOrder order);

+ 10 - 6
lewaimai_pos_windows/order/CWaimaiOrder.cpp

@@ -164,6 +164,14 @@ bool CWaimaiOrder::InitData(std::string order_id, std::string order_no)
 			m_manzeng_name = data["manzeng_name"].GetString();
 
 			m_show_whole_phone = data["show_whole_phone"].GetString();
+
+			m_is_apply_refund = data["is_apply_refund"].GetString();
+
+			if (m_is_apply_refund == "1")
+			{
+				m_refund_reason_first = data["refundInfo"]["first_refund_reason"].GetString();
+				m_refund_info_status = data["refundInfo"]["refund_status"].GetString();
+			}
 		}
 	}
 
@@ -299,7 +307,7 @@ bool CWaimaiOrder::FailOrder(std::string order_id, std::string reason)
 
 bool CWaimaiOrder::AgreeRefund(std::string order_id)
 {
-	std::string url = "/order/agreerefund";
+	std::string url = "/order/refundorder";
 
 	//请求外卖的未处理订单
 	std::map<string, string> params;
@@ -334,14 +342,12 @@ bool CWaimaiOrder::AgreeRefund(std::string order_id)
 	//获得数据成功
 	rapidjson::Value& data = document["data"];
 
-	order_id = data["order_id"].GetString();
-
 	return true;
 }
 
 bool CWaimaiOrder::DisagreeRefund(std::string order_id)
 {
-	std::string url = "/order/disagreerefund";
+	std::string url = "/order/refuserefundorder";
 
 	//请求外卖的未处理订单
 	std::map<string, string> params;
@@ -375,8 +381,6 @@ bool CWaimaiOrder::DisagreeRefund(std::string order_id)
 
 	//获得数据成功
 	rapidjson::Value& data = document["data"];
-	
-	order_id = data["order_id"].GetString();
 
 	return true;
 }

+ 6 - 0
lewaimai_pos_windows/order/CWaimaiOrder.h

@@ -111,5 +111,11 @@ public:
 	std::string m_manzeng_name;
 
 	std::string m_show_whole_phone;
+
+	std::string m_is_apply_refund; // 1:顾客申请了退款 0:顾客没申请退款
+
+	std::string m_refund_reason_first; //顾客申请退款的理由
+
+	std::string m_refund_info_status; //最新的退款状态 1顾客申请,等待处理 2:拒绝退款 3:同意退款
 };
 

二進制
lewaimai_pos_windows/resource/lewaimai_pos_windows.aps


二進制
lewaimai_pos_windows/resource/lewaimai_pos_windows.rc


+ 428 - 0
lewaimai_pos_windows/tool/CPosPrinter.cpp

@@ -1634,6 +1634,434 @@ void CPosPrinter::PrintWaimaiOrderChufang(CWaimaiOrder& order)
 	LOG_INFO("_______________________________结束打印厨房小票,订单编号:" << order.m_order_num.c_str() << "_________________________");
 }
 
+void CPosPrinter::PrintWaimaiOrderTuikuan(CWaimaiOrder& order)
+{
+	LOG_INFO("_______________________________开始打印退款小票,订单编号:"<<order.m_order_num.c_str()<<"_________________________");
+
+    //设置模式,后面输出数据不会错
+    m_type = 1;
+
+    std::string printer_leixing = CSetting::GetParam("setting_printer_leixing");
+
+    if(printer_leixing == "auto")
+    {
+        InitShouyin();
+    }
+    else if(printer_leixing == "usb")
+    {
+        std::string printer_usb = CSetting::GetParam("setting_printer_usb");
+        std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
+
+        bool ret = InitOneUsb(ws_printer_usb);
+		if (ret == false)
+		{
+			return;
+		}
+    }
+    else if(printer_leixing == "bingkou")
+    {
+        bool ret = InitBingkou();
+		if (ret == false)
+		{
+			return;
+		}
+    }
+    else if(printer_leixing == "chuankou")
+    {
+        InitCom();
+    }
+    else if(printer_leixing == "wangkou")
+    {
+        m_type = 2;
+
+        std::string wangkou_ip = CSetting::GetParam("setting_printer_wangkou_ip");
+
+        //初始化连接
+        try
+        {
+            boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string(wangkou_ip.c_str()), 9100);
+            m_socket.connect(ep);
+        }
+        catch(std::exception& e)
+        {
+            std::string err = e.what();
+            LOG_INFO("网口打印机连接失败,IP地址:" << wangkou_ip.c_str() << ",错误信息:" << err.c_str());
+
+			MessageBoxW(NULL, (L"厨房网口打印机连接失败,IP地址:" + CLewaimaiString::UTF8ToUnicode(wangkou_ip)).c_str(), L"打印机连接失败", MB_OK);
+
+			return;
+        }
+    }
+
+    //读取当前收银打印机的设置
+    std::string guige = CSetting::GetParam("setting_printer_guige");
+    std::string lianshu = CSetting::GetParam("setting_printer_lianshu");
+    int n_lianshu = atoi(lianshu.c_str());
+
+    //正式开始打印
+    for(int i = 0; i < n_lianshu; i++)
+    {
+        POS_Reset();
+
+		//打印退款信息
+		string tuikuan_info = "该订单顾客申请退款,请及时处理";
+		POS_TextOut(tuikuan_info, true, true, 1);
+
+		POS_FeedLine();
+
+		//打印店铺名字
+        string shop_name = "#" + order.m_restaurant_number + "  " + CLewaimaiString::UTF8ToANSI(order.m_shop_name);
+        POS_TextOut(shop_name, true, true, 1);
+
+        POS_FeedLine();
+        POS_FeedLine();
+
+		//打印小票自定义名称
+		string printer_tip_name = CLewaimaiString::UTF8ToANSI(order.m_printer_tip_name);
+		if (printer_tip_name.length() > 0)
+		{
+			POS_TextOut(printer_tip_name, false, true, 1);
+
+			POS_FeedLine();
+			POS_FeedLine();
+		}
+
+		//打印预约、即时配送的提醒
+
+		/*
+		bool setting_printer_peisongshijian_big = false;
+
+		if (CSetting::GetParam("setting_printer_peisongshijian_big") == "1")
+		{
+			setting_printer_peisongshijian_big = true;
+		}
+		}*/
+
+		if (order.m_is_selftake == "1")
+		{
+			string date = "【自取单】" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
+			POS_TextOut(date, false, true);
+			POS_TextOut("取货", false, false);
+
+			POS_FeedLine();
+		}
+		else
+		{
+			if (order.m_is_book == "1")
+			{
+				//预约单
+				string date = "【预约单】" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
+				POS_TextOut(date, false, true);
+				POS_TextOut("送达", false, false);
+
+				POS_FeedLine();
+			}
+			else
+			{
+				//非预约单
+				string date = "【即时单】立即送达";
+				POS_TextOut(date, false, true, 1);
+
+				POS_FeedLine();
+			}
+		}
+
+		POS_FeedLine();
+
+		//打印取货方式
+		/*
+        bool setting_printer_quhuo_big = false;
+
+        if(CSetting::GetParam("setting_printer_quhuo_big") == "1")
+        {
+            setting_printer_quhuo_big = true;
+        }
+
+        if(order.m_is_selftake == "1")
+        {
+            POS_TextOut("到店自取订单", false, setting_printer_quhuo_big, 1);
+            POS_FeedLine();
+            POS_FeedLine();
+        }
+        else
+        {
+            POS_TextOut("外卖订单", false, setting_printer_quhuo_big, 1);
+            POS_FeedLine();
+        }
+
+        POS_FeedLine();
+		*/
+
+        //订单来源
+        string from_type = "订单来源:" + CLewaimaiString::UTF8ToANSI(order.m_from_type);
+        POS_TextOut(from_type);
+        POS_FeedLine();
+
+        //订单号
+        bool setting_printer_dingdanhao_big = false;
+
+        if(CSetting::GetParam("setting_printer_dingdanhao_big") == "1")
+        {
+            setting_printer_dingdanhao_big = true;
+        }
+
+        string order_num = "订 单 号:" + CLewaimaiString::UTF8ToANSI(order.m_order_num);
+        POS_TextOut(order_num, false, setting_printer_dingdanhao_big);
+        POS_FeedLine();
+
+        //下单时间
+        bool setting_printer_xiadanshijian_big = false;
+
+        if(CSetting::GetParam("setting_printer_xiadanshijian_big") == "1")
+        {
+            setting_printer_xiadanshijian_big = true;
+        }
+
+        string order_date = "下单时间:" + CLewaimaiString::UTF8ToANSI(order.m_order_date);
+        POS_TextOut(order_date, false, setting_printer_xiadanshijian_big);
+        POS_FeedLine();
+
+        //姓名
+        bool setting_printer_name_big = false;
+
+        if(CSetting::GetParam("setting_printer_name_big") == "1")
+        {
+            setting_printer_name_big = true;
+        }
+
+        if(order.m_is_selftake != "1")
+        {
+            string name = "姓名:" + CLewaimaiString::UTF8ToANSI(order.m_customer_name);
+			
+			//把下单次数也一起打印
+			if (order.m_showordernum == "1")
+			{
+				name += "(第 " + CLewaimaiString::UTF8ToANSI(order.m_customer_order_total) + " 次下单)";
+			}
+
+            POS_TextOut(name, false, setting_printer_name_big);
+            POS_FeedLine();
+        }
+
+        //电话
+        bool setting_printer_phone_big = false;
+
+        if(CSetting::GetParam("setting_printer_phone_big") == "1")
+        {
+            setting_printer_phone_big = true;
+        }
+
+		//看看电话是否要脱敏
+		if (order.m_show_whole_phone == "0")
+		{
+			order.m_phone.replace(3, 4, 4, '*');
+		}
+
+        string phone = "电话:" + CLewaimaiString::UTF8ToANSI(order.m_phone);
+        POS_TextOut(phone, false, setting_printer_phone_big);
+        POS_FeedLine();
+
+        //地址
+        bool setting_printer_address_big = false;
+
+        if(CSetting::GetParam("setting_printer_address_big") == "1")
+        {
+            setting_printer_address_big = true;
+        }
+
+        if(order.m_is_selftake != "1")
+        {
+            string address = "地址:" + CLewaimaiString::UTF8ToANSI(order.m_address);
+            POS_TextOut(address, false, setting_printer_address_big);
+            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++)
+            {
+                string order_field = CLewaimaiString::UTF8ToANSI((*it).name) + ":" + CLewaimaiString::UTF8ToANSI((*it).value);
+                POS_TextOut(order_field, false, false, 0);
+                POS_FeedLine();
+            }
+        }
+
+        //准备开始打印商品详情
+        string lines;
+
+        if(guige == "58")
+        {
+            lines = "--------------------------------";
+        }
+        else
+        {
+            lines = "------------------------------------------------";
+        }
+
+        POS_TextOut(lines);
+        POS_FeedLine();
+
+		//打印退款信息
+		POS_TextOut(tuikuan_info, true, true, 1);
+
+		POS_FeedLine();
+
+        //结束商品详情打印
+        POS_TextOut(lines);
+        POS_FeedLine();
+
+        //开始打印其他的费用
+        bool is_other_money = false;
+        bool setting_printer_price_big = false;
+
+        if(CSetting::GetParam("setting_printer_price_big") == "1")
+        {
+            setting_printer_price_big = true;
+        }
+
+        if(order.m_delivery > 0)
+        {
+            string delivery = "配送费:" + CLewaimaiString::DoubleToString((double)order.m_delivery, 2);
+            POS_TextOut(delivery, false, setting_printer_price_big);
+            POS_FeedLine();
+            is_other_money = true;
+        }
+
+        if(order.m_is_dabao == "1")
+        {
+            string dabao = "打包费:" + CLewaimaiString::UTF8ToANSI(order.m_dabao_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(order.m_discount < 10)
+        {
+            string discount = "打折:" + CLewaimaiString::DoubleToString((double)order.m_discount, 2) + "折";
+            POS_TextOut(discount, false, setting_printer_price_big);
+            POS_FeedLine();
+            is_other_money = true;
+        }
+
+        if(order.m_is_member_discount == "1")
+        {
+            string member_discount = "会员优惠:-" + order.m_member_discount;
+            POS_TextOut(member_discount, false, setting_printer_price_big);
+            POS_FeedLine();
+            is_other_money = true;
+        }
+
+        if(order.m_is_firstcut == "1")
+        {
+            string firstcut = "首单优惠:-" + order.m_firstcut_value;
+            POS_TextOut(firstcut, false, setting_printer_price_big);
+            POS_FeedLine();
+            is_other_money = true;
+        }
+
+        //满减
+        string::size_type position = order.m_promotion.find(":");
+
+        if(position != order.m_promotion.npos)
+        {
+            string promotion_value;
+            promotion_value.assign(order.m_promotion, position + 1);
+            string promotion = "满减优惠:-" + CLewaimaiString::DoubleToString((double)(atof(promotion_value.c_str())), 2);
+            POS_TextOut(promotion, false, setting_printer_price_big);
+            POS_FeedLine();
+            is_other_money = true;
+        }
+
+        if(order.m_coupon > 0)
+        {
+            string coupon = "优惠券:-" + CLewaimaiString::DoubleToString((double)order.m_coupon, 2);
+            POS_TextOut(coupon, false, setting_printer_price_big);
+            POS_FeedLine();
+            is_other_money = true;
+        }
+
+        if(is_other_money)
+        {
+            POS_TextOut(lines);
+            POS_FeedLine();
+        }
+
+        //最后显示总价
+        POS_TextOut("总计:¥" + CLewaimaiString::DoubleToString(order.m_price, 2), false, setting_printer_price_big, 2);
+        POS_FeedLine();
+
+        //显示付款方式
+        bool setting_printer_pay_big = false;
+
+        if(CSetting::GetParam("setting_printer_pay_big") == "1")
+        {
+            setting_printer_pay_big = true;
+        }
+
+        POS_TextOut("支付方式:" + CLewaimaiString::UTF8ToANSI(order.m_pay_type), false, setting_printer_pay_big, 2);
+
+        POS_FeedLine();
+
+		POS_FeedLine();;
+		POS_FeedLine();
+
+        //准备开始打印二维码
+        std::string order_no = order.m_order_no;
+        order_no = CLewaimaiString::UTF8ToANSI(order_no);
+
+		if (order.m_show_qiangdan_qrcode == "1")
+		{
+			POS_OutQRCode(order_no);
+
+			POS_FeedLine();
+			POS_FeedLine();
+
+			POS_TextOut("请使用配送员app扫码绑定订单", false, false, 1);
+		}
+
+        //走纸几行再切
+        POS_FeedLine();
+        POS_FeedLine();
+        POS_FeedLine();
+        POS_FeedLine();
+        POS_FeedLine();
+
+        POS_CutPaper();
+    }
+
+    //还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
+    POS_Reset();
+
+    //关闭设备
+    for(std::vector<PrinterHandle>::iterator it = m_hPorts.begin(); it != m_hPorts.end(); it++)
+    {
+        CloseHandle((*it).hPort);
+    }
+
+	if (m_type == 2)
+	{
+		m_socket.close();
+	}
+
+	LOG_INFO("_______________________________结束打印退款小票,订单编号:" << order.m_order_num.c_str() << "_________________________");
+	LOG_INFO("                                                                                                              ");
+}
+
 std::vector<std::wstring> CPosPrinter::getUsbDevices()
 {
     return m_usb_devices;

+ 2 - 0
lewaimai_pos_windows/tool/CPosPrinter.h

@@ -30,6 +30,8 @@ public:
 	void PrintWaimaiOrderBiaoqian(CWaimaiOrder& order);
 	void PrintWaimaiOrderChufang(CWaimaiOrder& order);
 
+	void PrintWaimaiOrderTuikuan(CWaimaiOrder& order);
+
 	//usb打印机的类型 1:收银小票打印机 2:标签打印机
 	void InitUsb(int usbType = 1);
 	std::vector<std::wstring> getUsbDevices();

+ 3 - 3
lewaimai_pos_windows/wnd/CMainWnd.cpp

@@ -203,9 +203,9 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
         if(ret)
         {
             //不同意退款,订单还是退款中,等待第三方客服处理
-            //OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
-            //int index = orderlist->GetItemIndex(item);
-            //orderlist->RemoveAt(index);
+			OrderListUI* orderlist = static_cast<OrderListUI*>(m_pm.FindControl(_T("orderlist")));
+			int index = orderlist->GetItemIndex(item);
+			orderlist->RemoveAt(index);
         }
     }
     else if(name == _T("waimai_order_list_info"))