Przeglądaj źródła

完成整个快速收银的订单管理

张洋 3 lat temu
rodzic
commit
9a60bd36a5

+ 2 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/dianneiorder_list_page.xml

@@ -20,6 +20,8 @@
 				<Button name="orderlist_diandan_btn" text="点单订单" textcolor="#FFFFFFFF" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FF3CB371"></Button>
 				
 				<Button name="orderlist_zhengcan_btn" text="正餐订单" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFECECEC"></Button>
+				
+				<Button name="orderlist_shoukuan_btn" text="收款订单" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFECECEC"></Button>
 			</HorizontalLayout>
 
 			<HorizontalLayout>										

+ 21 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shoukuan_order_item.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<ShoukuanOrderItem height="170" bkcolor="#FFFFFFFF" padding="15,15,15,0" borderround="10,10">
+		<HorizontalLayout>
+			<Label float="true" name="shoukuan_order_list_order_num" text="订单号:" pos="10,6,320,36" />
+			
+			<Label float="true" name="shoukuan_order_list_price" text="金额:" pos="10,36,500,66" />
+			
+			<Label float="true" name="shoukuan_order_list_init_date" text="下单时间:" pos="10,66,300,96" />
+			
+			<Label float="true" name="shoukuan_order_list_zhifu_type" text="支付方式:" pos="10,96,400,126" />
+			
+			<Label float="true" name="shoukuan_order_list_from" text="订单来源:" pos="10,126,282,156" />
+		</HorizontalLayout>
+		
+		<HorizontalLayout width="200">
+			<Button name="shoukuan_order_list_info" float="true" pos="100,6,180,44" text="详情" normalimage="file='btn_border_white.png' corner='5,5,5,5'" hotimage="file='btn_border_white_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_white_Click.png' corner='5,5,5,5'"/>
+			<Button name="shoukuan_order_list_print" float="true" pos="100,54,180,92" text="打印" normalimage="file='btn_border_white.png' corner='5,5,5,5'" hotimage="file='btn_border_white_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_white_Click.png' corner='5,5,5,5'"/>
+		</HorizontalLayout>
+	</ShoukuanOrderItem>
+</Window>

+ 27 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shoukuanorder_info_page.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<ShoukuanOrderInfoPage>
+		<VerticalLayout>
+			<HorizontalLayout height="44" bkcolor="#FFFFFFFF" padding="0,0,0,0">
+				<Button name="shoukuan_order_info_page_return" float="true" pos="20,6,120,38" text="返回" textcolor="#FFFFFFFF"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout>
+				<VerticalLayout name="shoukuan_order_info_page_orderlayout" padding="20,20,20,20" vscrollbar="true">	
+					<VerticalLayout name="shoukuan_order_info_page_layout_3" bkcolor="#FFFFFFFF" padding="0,0,0,20" inset="20,20,20,20" borderround="10,10">
+						<Label name="shoukuan_order_info_page_order_num" text="订单号:" height="30" />
+						<Label name="shoukuan_order_info_page_order_price" text="金额:" height="30" />
+						<Label name="shoukuan_order_info_page_init_date" text="下单时间:" height="30" />
+						<Label name="shoukuan_order_info_page_type" height="30" text="订单来源:" />
+						<Label name="shoukuan_order_info_page_pay_type" height="30" text="付款方式:" />
+						<Label name="shoukuan_order_info_page_refund_status" height="30" text="退款状态:" />					
+					</VerticalLayout>
+				</VerticalLayout>
+
+				<HorizontalLayout width="250" height="200" bkcolor="#FFFFFFFF" padding="0,20,20,0" borderround="10,10">
+					<Button name="shoukuan_order_info_page_refund" float="true" pos="50,60,200,98" text="退款" textcolor="#FFFFFFFF" normalimage="file='btn_border_red.png' corner='5,5,5,5'" hotimage="file='btn_border_red_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_red_Click.png' corner='5,5,5,5'" />
+				</HorizontalLayout>
+			</HorizontalLayout>
+		</VerticalLayout>
+	</ShoukuanOrderInfoPage>
+</Window>

+ 56 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shoukuanorder_list_page.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<ShoukuanOrderListPage>
+		<VerticalLayout>
+			<HorizontalLayout height="53" padding="0,0,0,0" bkcolor="#FFFFFFFF">
+				<VerticalLayout width="300" height="53">
+					<Button name="orderlist_waimai" text="外卖订单" font="2" height="50" width="200" padding="50,0,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+					<Control name="orderlist_waimai_line" visible="false" height="3" bkcolor="#FF43A947" padding="70,0,70,0"></Control>
+				</VerticalLayout>
+				
+				<VerticalLayout width="300" height="53">
+					<Button name="orderlist_diannei" text="店内订单" textcolor="#FF43A947" font="2" height="50" width="200" padding="50,0,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+					<Control name="orderlist_shoukuan_line" height="3" bkcolor="#FF43A947" padding="70,0,70,0"></Control>
+				</VerticalLayout>
+			</HorizontalLayout>
+			
+			<Control height="1" bkcolor="#FFEAEAEA" padding="0,0,0,0"></Control>
+			
+			<HorizontalLayout bkcolor="#FFFFFFFF" height="70">
+				<Button name="orderlist_diandan_btn" text="点单订单"  font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFECECEC"></Button>
+				
+				<Button name="orderlist_zhengcan_btn" text="正餐订单" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFECECEC"></Button>
+				
+				<Button name="orderlist_shoukuan_btn" text="收款订单" textcolor="#FFFFFFFF" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FF3CB371"></Button>
+			</HorizontalLayout>
+
+			<HorizontalLayout>										
+				<VerticalLayout name="orderlist" vscrollbar="true">
+				
+				</VerticalLayout>
+				
+				<HorizontalLayout name="main_orderlist_loading">
+					<Control></Control>
+					<VerticalLayout width="24">
+						<Control></Control>
+						<HorizontalLayout height="24">
+							<GifAnim bkimage="loading.gif" autosize="true"></GifAnim>
+						</HorizontalLayout>
+						<Control></Control>
+					</VerticalLayout>
+					<Control></Control>
+				</HorizontalLayout>
+			</HorizontalLayout>
+			
+			<Control height="1" bkcolor="#FFEAEAEA"></Control>
+
+			<HorizontalLayout height="52" bkcolor="#FFFFFFFF" >
+				<Control />
+				<Button name="shoukuan_order_list_refresh" width="70" height="44" padding="20,4,0,0" text="刷新" textcolor="#FFFFFFFF" />
+				<Button name="shoukuan_order_list_last" width="70" height="44" padding="20,4,0,0" text="上一页" normalimage="file='btn_border_white.png' corner='5,5,5,5'" hotimage="file='btn_border_white_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_white_Click.png' corner='5,5,5,5'" />
+				<Button name="shoukuan_order_list_next" width="70" height="44" padding="20,4,0,0" text="下一页" normalimage="file='btn_border_white.png' corner='5,5,5,5'" hotimage="file='btn_border_white_Hover.png' corner='5,5,5,5'" pushedimage="file='btn_border_white_Click.png' corner='5,5,5,5'" />
+				<Label name="shoukuan_order_list_page" width="150" height="44" padding="20,4,0,0" />
+			</HorizontalLayout>
+		</VerticalLayout>
+	</ShoukuanOrderListPage>
+</Window>

+ 2 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcanorder_list_page.xml

@@ -20,6 +20,8 @@
 				<Button name="orderlist_diandan_btn" text="点单订单" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFECECEC"></Button>
 				
 				<Button name="orderlist_zhengcan_btn" text="正餐订单" textcolor="#FFFFFFFF" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FF3CB371"></Button>
+				
+				<Button name="orderlist_shoukuan_btn" text="收款订单" font="2" height="50" width="160" padding="20,10,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFECECEC"></Button>
 			</HorizontalLayout>
 
 			<HorizontalLayout>										

+ 56 - 0
zhipuzi_pos_windows/control/CShoukuanOrderItemUI.cpp

@@ -0,0 +1,56 @@
+#include "../pch/pch.h"
+#include "CShoukuanOrderItemUI.h"
+
+
+CShoukuanOrderItemUI::CShoukuanOrderItemUI()
+{
+}
+
+
+CShoukuanOrderItemUI::~CShoukuanOrderItemUI()
+{
+}
+
+void CShoukuanOrderItemUI::SetData(rapidjson::Value& orderinfo)
+{
+	m_orderid = orderinfo["id"].GetString();
+	m_show_trade_no = orderinfo["out_trade_no"].GetString();
+	m_is_refund = orderinfo["is_refund"].GetString();
+	m_init_time = orderinfo["init_time"].GetString();
+	m_zhifu_type = orderinfo["zhifu_name"].GetString();
+	m_shouyin_type = orderinfo["shouyin_type"].GetString();
+	m_yingshou_price = orderinfo["yingshou_value"].GetString();
+
+	std::wstring dingdanhao_show = L"订单号:" + CLewaimaiString::UTF8ToUnicode(m_show_trade_no);
+	this->FindSubControl(L"shoukuan_order_list_order_num")->SetText(dingdanhao_show.c_str());
+
+	std::wstring init_date_show = L"下单时间:" + CLewaimaiString::UTF8ToUnicode(m_init_time);
+	this->FindSubControl(L"shoukuan_order_list_init_date")->SetText(init_date_show.c_str());
+
+	std::wstring price_show = L"金额:" + CLewaimaiString::UTF8ToUnicode(m_yingshou_price);
+	this->FindSubControl(L"shoukuan_order_list_price")->SetText(price_show.c_str());
+
+	std::wstring zhifufangshi_show = L"支付方式:" + CLewaimaiString::UTF8ToUnicode(m_zhifu_type);
+	this->FindSubControl(L"shoukuan_order_list_zhifu_type")->SetText(zhifufangshi_show.c_str());
+
+	std::wstring from_name;
+	if (m_shouyin_type == "1")
+	{
+		from_name = L"收银系统";
+	}
+	else if (m_shouyin_type == "2")
+	{
+		from_name = L"商家app";
+	}
+	else if (m_shouyin_type == "3")
+	{
+		from_name = L"刷脸系统";
+	}
+	else if (m_shouyin_type == "4")
+	{
+		from_name = L"收银台";
+	}
+
+	std::wstring from_show = L"订单来源:" + from_name;
+	this->FindSubControl(L"shoukuan_order_list_from")->SetText(from_show.c_str());
+}

+ 35 - 0
zhipuzi_pos_windows/control/CShoukuanOrderItemUI.h

@@ -0,0 +1,35 @@
+#pragma once
+
+#include "../pch/pch.h"
+
+class CShoukuanOrderItemUI : public CHorizontalLayoutUI
+{
+public:
+	CShoukuanOrderItemUI();
+	~CShoukuanOrderItemUI();
+
+	void SetData(rapidjson::Value& orderinfo);
+
+	std::string getOrderID()
+	{
+		return m_orderid;
+	}
+
+	void DoEvent(TEventUI& event)
+	{
+		if (event.Type == UIEVENT_BUTTONDOWN)
+		{
+			int a = 1;
+		}
+		CHorizontalLayoutUI::DoEvent(event);
+	}
+
+private:
+	std::string m_orderid;
+	std::string m_show_trade_no;
+	std::string m_is_refund;
+	std::string m_init_time;
+	std::string m_shouyin_type; //收银类型 1:快速收银 2:商家app扫码收银 3:刷脸app扫码收银 4:收银台收银
+	std::string m_zhifu_type;
+	std::string m_yingshou_price;
+};

+ 15 - 0
zhipuzi_pos_windows/control/ControlEx.h

@@ -23,6 +23,8 @@
 #include "../page/CZhengcanOrderListPageUI.h"
 #include "../page/CZhengcanOrderInfoPageUI.h"
 #include "../page/CShoukuanPageUI.h"
+#include "../page/CShoukuanOrderListPageUI.h"
+#include "../page/CShoukuanOrderInfoPageUI.h"
 
 #include "CWaimaiOrderItemUI.h"
 #include "CDianneiOrderItemUI.h"
@@ -33,6 +35,7 @@
 #include "CTabletypeOptionUI.h"
 #include "CZhengcanTableItemUI.h"
 #include "CZhengcanOrderItemUI.h"
+#include "CShoukuanOrderItemUI.h"
 
 class CDialogBuilderCallbackEx : public IDialogBuilderCallback
 {
@@ -124,6 +127,14 @@ public:
 		{
 			return new CShoukuanPageUI;
 		}
+		else if (_tcscmp(pstrClass, _T("ShoukuanOrderListPage")) == 0)
+		{
+			return new CShoukuanOrderListPageUI;
+		}
+		else if (_tcscmp(pstrClass, _T("ShoukuanOrderInfoPage")) == 0)
+		{
+			return new CShoukuanOrderInfoPageUI;
+		}
 
 		//控件相关的
 		else if (_tcscmp(pstrClass, _T("WaimaiOrderItem")) == 0)
@@ -162,6 +173,10 @@ public:
 		{
 			return new CZhengcanOrderItemUI;
 		}
+		else if (_tcscmp(pstrClass, _T("ShoukuanOrderItem")) == 0)
+		{
+			return new CShoukuanOrderItemUI;
+		}
 
 		return NULL;
 	}

+ 4 - 0
zhipuzi_pos_windows/page/CDianneiOrderListPageUI.cpp

@@ -71,6 +71,10 @@ void CDianneiOrderListPageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 		m_pMainWnd->SwitchPage(CMainWnd::ZHENGCANDINGDAN);
 	}
+	else if (name == L"orderlist_shoukuan_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANDINGDAN);
+	}
 }
 
 //´¦ÀíoptionÇл»Ê¼þ

+ 155 - 0
zhipuzi_pos_windows/page/CShoukuanOrderInfoPageUI.cpp

@@ -0,0 +1,155 @@
+#include "../pch/pch.h"
+#include "CShoukuanOrderInfoPageUI.h"
+
+#include "../control/ControlEx.h"
+
+#include "../wnd/CMainWnd.h"
+
+#include "../print/CPosPrinter.h"
+
+CShoukuanOrderInfoPageUI::CShoukuanOrderInfoPageUI()
+{
+
+}
+
+CShoukuanOrderInfoPageUI::~CShoukuanOrderInfoPageUI()
+{
+
+}
+
+//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
+void CShoukuanOrderInfoPageUI::InitShow()
+{
+	//请求服务器,获取订单数据
+	CShoukuanOrder order;
+	order.InitData(m_order_id);
+
+	//刷新订单详情页数据
+	this->SetDate(order);
+	this->Refresh(order);
+}
+
+//处理按钮点击类事件
+void CShoukuanOrderInfoPageUI::HandleClickMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	if (name == _T("shoukuan_order_info_page_return"))
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANDINGDAN);
+	}
+	else if (name == _T("shoukuan_order_info_page_refund"))
+	{
+		std::string shoukuan_order_id = this->m_order.m_order_id;
+
+		CShoukuanOrder order;
+		bool ret = order.Refund(shoukuan_order_id);
+
+		if (ret)
+		{
+			//订单设为成功,这里怎么处理
+			//请求服务器,获取订单数据
+			CShoukuanOrder new_order;
+			new_order.InitData(shoukuan_order_id);
+
+			//刷新订单详情页数据
+			this->SetDate(new_order);
+			this->Refresh(new_order);
+		}
+	}
+}
+
+//处理option切换事件
+void CShoukuanOrderInfoPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理下拉框、radio的切换事件
+void CShoukuanOrderInfoPageUI::HandleItemSelectMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理编辑框输入内容改变事件
+void CShoukuanOrderInfoPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理扫码枪捕捉到的扫码信息
+void CShoukuanOrderInfoPageUI::HandleTextCapture(std::string content)
+{
+
+}
+
+//刷新当前页面的内容,注意这个函数不会改变当前的订单状态以及“页数”
+void CShoukuanOrderInfoPageUI::SetDate(CShoukuanOrder& order)
+{
+	m_order = order;
+}
+
+void CShoukuanOrderInfoPageUI::Refresh(CShoukuanOrder& order)
+{
+	std::wstring order_no_show = L"订单号:" + CLewaimaiString::UTF8ToUnicode(order.show_trade_no);
+	this->FindSubControl(_T("shoukuan_order_info_page_order_num"))->SetText(order_no_show.c_str());
+
+	std::wstring price_show = L"金额:" + CLewaimaiString::UTF8ToUnicode(order.m_money);
+	this->FindSubControl(_T("shoukuan_order_info_page_order_price"))->SetText(price_show.c_str());
+
+	std::wstring order_date_show = L"下单时间:" + CLewaimaiString::UTF8ToUnicode(order.init_time);
+	this->FindSubControl(_T("shoukuan_order_info_page_init_date"))->SetText(order_date_show.c_str());
+
+	//开始处理订单信息
+	std::wstring laiyuan;
+	if (order.order_from == 1)
+	{
+		laiyuan = L"收银机下单";
+	}
+	else if (order.order_from == 2)
+	{
+		laiyuan = L"商家app下单";
+	}
+	else if (order.order_from == 3)
+	{
+		laiyuan = L"刷脸app";
+	}
+	else if (order.order_from == 4)
+	{
+		laiyuan = L"收银台";
+	}
+
+	CLabelUI *pType = static_cast<CLabelUI *>(this->FindSubControl(_T("shoukuan_order_info_page_type")));
+	wstring wsType = _T("订单来源:") + laiyuan;
+	pType->SetText(wsType.c_str());
+
+	CLabelUI *pPayType = static_cast<CLabelUI *>(this->FindSubControl(_T("shoukuan_order_info_page_pay_type")));
+	wstring wsPayType = _T("付款方式:") + CLewaimaiString::UTF8ToUnicode(order.shoukuan_type);
+	pPayType->SetText(wsPayType.c_str());
+
+	CLabelUI *pRefund = static_cast<CLabelUI *>(this->FindSubControl(_T("shoukuan_order_info_page_refund_status")));
+	if (order.is_refund == "1")
+	{
+		wstring wsPayType = _T("退款状态:已退款");
+		pRefund->SetText(wsPayType.c_str());
+	}
+	else
+	{
+		wstring wsPayType = _T("退款状态:未退款");
+		pRefund->SetText(wsPayType.c_str());
+	}
+
+	this->FindSubControl(_T("shoukuan_order_info_page_layout_3"))->SetFixedHeight(221);
+
+	//退款按钮
+	CButtonUI* refund_button = static_cast<CButtonUI *>(m_pManager->FindControl(_T("shoukuan_order_info_page_refund")));
+
+	if (order.is_refund == "1")
+	{
+		refund_button->SetVisible(false);
+	}
+	else
+	{
+		refund_button->SetVisible(true);
+	}
+}

+ 49 - 0
zhipuzi_pos_windows/page/CShoukuanOrderInfoPageUI.h

@@ -0,0 +1,49 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CBasePageUI.h"
+
+#include "../zhipuzi/CShoukuanOrder.h"
+
+class CShoukuanOrderInfoPageUI : public CBasePageUI
+{
+public:
+	CShoukuanOrderInfoPageUI();
+
+	~CShoukuanOrderInfoPageUI();
+
+	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
+	void InitShow();
+
+	//处理按钮点击类事件
+	void HandleClickMsg(TNotifyUI& msg);
+
+	//处理option切换事件
+	void HandleSelectChangeMsg(TNotifyUI& msg);
+
+	//处理下拉框、radio的切换事件
+	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
+	//处理扫码枪捕捉到的扫码信息
+	void HandleTextCapture(std::string content);
+
+	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+	{
+		return false;
+	}
+
+	//刷新当前页面的内容,注意这个函数不会改变当前的订单状态以及“页数”
+	void SetDate(CShoukuanOrder& order);
+
+	//根据外卖订单数据,刷新订单详情页的显示
+	void Refresh(CShoukuanOrder& order);
+
+public:
+	CShoukuanOrder m_order;
+
+	std::string m_order_id;
+};

+ 312 - 0
zhipuzi_pos_windows/page/CShoukuanOrderListPageUI.cpp

@@ -0,0 +1,312 @@
+#include "../pch/pch.h"
+#include "CShoukuanOrderListPageUI.h"
+
+#include "../control/CShoukuanOrderItemUI.h"
+
+#include "../control/ControlEx.h"
+
+#include "../wnd/CWaimaiOrderFailReasonWnd.h"
+
+#include "../print/CPosPrinter.h"
+
+#include "../wnd/CMainWnd.h"
+
+CShoukuanOrderListPageUI::CShoukuanOrderListPageUI()
+{
+
+}
+
+
+CShoukuanOrderListPageUI::~CShoukuanOrderListPageUI()
+{
+}
+
+//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
+void CShoukuanOrderListPageUI::InitShow()
+{
+	SetPage(1);
+	Refresh();
+}
+
+//处理按钮点击类事件
+void CShoukuanOrderListPageUI::HandleClickMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	if (name == _T("shoukuan_order_list_print"))
+	{
+		CShoukuanOrderItemUI* item = static_cast<CShoukuanOrderItemUI*>(msg.pSender->GetParent()->GetParent());
+		std::string shoukuan_order_id = item->getOrderID();
+
+		CPosPrinter printer;
+		printer.PrintShoukuanOrder(shoukuan_order_id);
+	}
+	else if (name == _T("shoukuan_order_list_info"))
+	{
+		CShoukuanOrderItemUI* item = static_cast<CShoukuanOrderItemUI*>(msg.pSender->GetParent()->GetParent());
+		std::string shoukuan_order_id = item->getOrderID();
+
+		CShoukuanOrderInfoPageUI* page = static_cast<CShoukuanOrderInfoPageUI*>(m_pMainWnd->GetPage(CMainWnd::SHOUKUANINFO));
+		page->m_order_id = shoukuan_order_id;
+
+		m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANINFO);
+	}
+	else if (name == _T("shoukuan_order_list_last"))
+	{
+		this->LastPage();
+	}
+	else if (name == _T("shoukuan_order_list_next"))
+	{
+		this->NextPage();
+	}
+	else if (name == _T("shoukuan_order_list_refresh"))
+	{
+		this->Refresh();
+	}
+	else if (name == L"orderlist_waimai")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::DINGDAN);
+	}
+	else if (name == L"orderlist_diandan_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::DIANNEIDINGDAN);
+	}
+	else if (name == L"orderlist_zhengcan_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::ZHENGCANDINGDAN);
+	}
+	else if (name == L"orderlist_shoukuan_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANDINGDAN);
+	}
+}
+
+//处理option切换事件
+void CShoukuanOrderListPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+
+}
+
+//处理下拉框、radio的切换事件
+void CShoukuanOrderListPageUI::HandleItemSelectMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理编辑框输入内容改变事件
+void CShoukuanOrderListPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理扫码枪捕捉到的扫码信息
+void CShoukuanOrderListPageUI::HandleTextCapture(std::string content)
+{
+
+}
+
+bool CShoukuanOrderListPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	if (uMsg == WM_ORDERLIST_REFRESH)
+	{
+		DoRefresh();
+
+		return true;
+	}
+
+	return false;
+}
+
+void CShoukuanOrderListPageUI::Refresh()
+{
+	//开始转菊花
+	CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("orderlist")));
+	pOrderListLayout->SetVisible(false);
+
+	this->FindSubControl(_T("main_orderlist_loading"))->SetVisible(true);
+
+	//启动一个线程,进行网络请求操作
+	ShoukuanOrderListStatus* status = new ShoukuanOrderListStatus;
+	status->m_page = m_page;
+
+	std::thread t(&CShoukuanOrderListPageUI::HandleRefresh, this, status);
+	t.detach();
+}
+
+void CShoukuanOrderListPageUI::HandleRefresh(ShoukuanOrderListStatus* status)
+{
+	std::string url = "/shouyin/getoldorderlist";
+
+	//请求外卖的未处理订单,直接用当前的page值去请求
+	std::map<string, string> params;
+	params["page"] = to_string(status->m_page);
+	params["content"] = "";
+	params["ordercode"] = "";
+	std::string response;
+
+	CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	//走到这里,网络请求结束了,对比状态是否发生了改变
+	if (status->m_page != m_page)
+	{
+		//用户已经点击了其他状态,这个状态结果无效了,直接返回
+		delete status;
+		return;
+	}
+
+	//将网络返回结果保存起来,等待消息处理重新渲染页面
+	m_response = response;
+
+	::PostMessage(m_pManager->GetPaintWindow(), WM_ORDERLIST_REFRESH, 0, 0);
+
+	delete status;
+}
+
+void CShoukuanOrderListPageUI::DoRefresh()
+{
+	//请求成功之后,清空之前的数据
+	CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("orderlist")));
+	pOrderListLayout->RemoveAll();
+
+	rapidjson::Document document;
+	document.Parse(m_response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+	{
+		LOG_INFO("json error!");
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+		return;
+	}
+
+	//获得数据成功
+	rapidjson::Value& data = document["data"];
+
+	rapidjson::Value& v_count = data["count"];
+	string count = v_count.GetString();
+
+	//处理页数
+	int nCount = atoi(count.c_str());
+	m_total_page = (int)ceil(nCount / 20.0);
+	if (m_total_page < 1)
+	{
+		m_total_page = 1;
+	}
+
+	if (m_page <= 1)
+	{
+		m_page = 1;
+		CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_last")));
+		pControl->SetEnabled(false);
+	}
+	if (m_page >= m_total_page)
+	{
+		m_page = m_total_page;
+		CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_next")));
+		pControl->SetEnabled(false);
+	}
+
+	if (m_page > 1)
+	{
+		CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_last")));
+		pControl->SetEnabled(true);
+	}
+	if (m_page < m_total_page)
+	{
+		CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_next")));
+		pControl->SetEnabled(true);
+	}
+
+	CLabelUI* pControl = static_cast<CLabelUI*>(this->FindSubControl(_T("shoukuan_order_list_page")));
+	wstring pageinfo = _T("第 ") + CLewaimaiString::ANSIToUnicode(to_string(m_page)) + _T("页/共 ") + CLewaimaiString::ANSIToUnicode(to_string(m_total_page)) + _T("页");
+	pControl->SetText(pageinfo.c_str());
+
+	rapidjson::Value& v_rows = data["rows"];
+
+	for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
+	{
+		rapidjson::Value& v_row_i = v_rows[i];
+
+		//创建一个对象
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+
+		CShoukuanOrderItemUI* pItem = static_cast<CShoukuanOrderItemUI*>(builder.Create(_T("shoukuan_order_item.xml"), (UINT)0, &cb, m_pManager));
+		if (pItem != NULL)
+		{
+			//初始化该对应的数据
+			pItem->SetData(v_row_i);
+
+			pOrderListLayout->Add(pItem);
+
+			pItem = NULL;
+		}
+		else
+		{
+			LOG_INFO("create shoukuan_order_item fail!");
+		}
+	}
+
+	//重置滚动条的位置
+	tagSIZE size;
+	size.cx = 0;
+	size.cy = 0;
+	pOrderListLayout->SetScrollPos(size);
+
+	pOrderListLayout->SetVisible(true);
+
+	this->FindSubControl(_T("main_orderlist_loading"))->SetVisible(false);
+}
+
+void CShoukuanOrderListPageUI::LastPage()
+{
+	m_page--;
+	if (m_page < 1)
+	{
+		m_page = 1;
+	}
+
+	if (m_page == 1)
+	{
+		CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_last")));
+		pControl->SetEnabled(false);
+	}
+
+	Refresh();
+}
+
+void CShoukuanOrderListPageUI::NextPage()
+{
+	m_page++;
+	if (m_page > m_total_page)
+	{
+		m_page = m_total_page;
+	}
+
+	if (m_page == m_total_page)
+	{
+		CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_next")));
+		pControl->SetEnabled(false);
+	}
+
+	Refresh();
+}
+
+void CShoukuanOrderListPageUI::SetPage(int n)
+{
+	m_page = n;
+}

+ 60 - 0
zhipuzi_pos_windows/page/CShoukuanOrderListPageUI.h

@@ -0,0 +1,60 @@
+#pragma once
+
+#include "../pch/pch.h"
+
+#include "CBasePageUI.h"
+
+class ShoukuanOrderListStatus
+{
+public:
+	int m_page;
+};
+
+class CShoukuanOrderListPageUI : public CBasePageUI
+{
+public:
+	CShoukuanOrderListPageUI();
+	~CShoukuanOrderListPageUI();
+
+	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
+	void InitShow();
+
+	//处理按钮点击类事件
+	void HandleClickMsg(TNotifyUI& msg);
+
+	//处理option切换事件
+	void HandleSelectChangeMsg(TNotifyUI& msg);
+
+	//处理下拉框、radio的切换事件
+	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
+	//处理扫码枪捕捉到的扫码信息
+	void HandleTextCapture(std::string content);
+
+	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	//刷新当前页面的内容,注意这个函数不会改变当前的订单状态以及“页数”
+	void Refresh();
+
+	void LastPage();
+
+	void NextPage();
+
+	void SetPage(int n);
+
+	void HandleRefresh(ShoukuanOrderListStatus* status);
+
+	void DoRefresh();
+
+private:
+	int m_page = 1;
+
+	int m_total_page; //总页数
+
+	std::string m_response;
+};
+

+ 2 - 0
zhipuzi_pos_windows/page/CShoukuanPageUI.cpp

@@ -871,6 +871,8 @@ CShoukuanOrder CShoukuanPageUI::GetPrintOrderinfo(std::string show_trade_no, std
 	newOrder.order_from = 1;
 	newOrder.init_time = CLewaimaiTime::DatetimeToString(time(NULL));
 
+	newOrder.employee_name = CSetting::GetInstance()->getUsername();
+
 	return newOrder;
 }
 

+ 4 - 0
zhipuzi_pos_windows/page/CZhengcanOrderListPageUI.cpp

@@ -71,6 +71,10 @@ void CZhengcanOrderListPageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 		m_pMainWnd->SwitchPage(CMainWnd::DIANNEIDINGDAN);
 	}
+	else if (name == L"orderlist_shoukuan_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANDINGDAN);
+	}
 }
 
 //´¦ÀíoptionÇл»Ê¼þ

+ 1 - 1
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -299,7 +299,7 @@ void CPosPrinter::PrintShoukuanOrder(std::string order_id)
 {
 	CShoukuanOrder order;
 
-	//bool ret = order.InitData(order_id);
+	bool ret = order.InitData(order_id);
 
 	PrintShoukuanOrder(order);
 }

+ 8 - 2
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -4040,7 +4040,13 @@ std::string CPosPrinterData::PrintShoukuanOrderShouyin(CShoukuanOrder& order)
 		}
 		else if (order.order_from == 3)
 		{
-			string from_type = "订单来源:扫码下单";
+			string from_type = "订单来源:刷脸app";
+			POS_TextOut(from_type);
+			POS_FeedLine();
+		}
+		else if (order.order_from == 4)
+		{
+			string from_type = "订单来源:收银台";
 			POS_TextOut(from_type);
 			POS_FeedLine();
 		}
@@ -4057,7 +4063,7 @@ std::string CPosPrinterData::PrintShoukuanOrderShouyin(CShoukuanOrder& order)
 		POS_TextOut(order_date, false, setting_printer_xiadanshijian_big);
 		POS_FeedLine();
 
-		string shouyinyuan = "收银员:" + CLewaimaiString::UTF8ToANSI(CSetting::GetInstance()->getUsername());
+		string shouyinyuan = "收银员:" + CLewaimaiString::UTF8ToANSI(order.employee_name);
 		POS_TextOut(shouyinyuan, false, false);
 		POS_FeedLine();
 

+ 14 - 0
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -1443,6 +1443,20 @@ void CMainWnd::CreatePages()
 		m_pages[SHOUKUAN] = pChildContainer;
 	}
 
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shoukuanorder_list_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[SHOUKUANDINGDAN] = pChildContainer;
+	}
+
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shoukuanorder_info_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[SHOUKUANINFO] = pChildContainer;
+	}
+
 	//这里纯粹只是创建对象,不做任何初始化等处理
 }
 

+ 2 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -36,6 +36,8 @@ public:
 		ZHENGCANDINGDAN, //正餐订单列表
 		ZHENGCANINFO, //正餐订单详情
 		SHOUKUAN, //快速收银页面
+		SHOUKUANDINGDAN, //收款订单列表
+		SHOUKUANINFO, //收款订单详情
 	};
 
     LPCTSTR GetWindowClassName() const

+ 91 - 0
zhipuzi_pos_windows/zhipuzi/CShoukuanOrder.cpp

@@ -1,3 +1,4 @@
+#include "../pch/pch.h"
 #include "CShoukuanOrder.h"
 
 
@@ -13,12 +14,102 @@ CShoukuanOrder::~CShoukuanOrder()
 
 bool CShoukuanOrder::InitData(std::string order_id)
 {
+	std::map<string, string> params;
+	params["id"] = order_id;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::GetInstance()->Request("/shouyin/getorderdetail", params, response);
+	if (!ret)
+	{
+		LOG_INFO("网络请求出错");
+		return false;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return false;
+	}
+	else
+	{
+		if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+		{
+			LOG_INFO("json error!");
+			return false;
+		}
+
+		rapidjson::Value& v_errcode = document["errcode"];
+		int errcode = v_errcode.GetInt();
+		if (errcode != 0)
+		{
+			LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+			return false;
+		}
+
+		//获得数据成功
+		rapidjson::Value& data = document["data"];
+
+		m_order_id = data["id"].GetString();
+		show_trade_no = data["out_trade_no"].GetString();
+		m_shishou_value = data["shishou_value"].GetString();
+		m_zhaoling_value = data["zhaoling_value"].GetString();
+		m_money = data["yingshou_value"].GetString();
+		init_time = data["init_time"].GetString();
+		shoukuan_type = data["zhifu_type"].GetString();
+		shopname = data["shop_name"].GetString();
+		is_refund = data["is_refund"].GetString();
+		refund_time = data["refund_time"].GetString();
+		is_guazhang = data["is_guazhang"].GetString();
+		guazhang = data["guazhang"].GetString();
+		balance = data["member_balance"].GetString();
+		member_number = data["member_number"].GetString();
+		employee_name = data["employee_name"].GetString();
+
+		std::string shouyin_type = data["shouyin_type"].GetString();
+		order_from = atoi(shouyin_type.c_str());
+	}
+
 	return true;
 }
 
 //根据订单ID,进行退款操作
 bool CShoukuanOrder::Refund(std::string order_id)
 {
+	std::string url = "/shouyin/refund";
+
+	//请求外卖的未处理订单
+	std::map<string, string> params;
+	params["id"] = order_id;
+	std::string response;
+
+	CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return false;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+	{
+		LOG_INFO("json error!");
+		return false;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+		return false;
+	}
+
 	return true;
 }
 

+ 6 - 1
zhipuzi_pos_windows/zhipuzi/CShoukuanOrder.h

@@ -16,6 +16,8 @@ public:
 	std::string shopname;
 	std::string show_trade_no;
 
+	std::string employee_name;
+
 	//会员余额和会员卡号,仅会员支付时有用
 	std::string balance;
 	std::string member_number;
@@ -23,7 +25,7 @@ public:
 	//微信支付 会员支付 现金支付 福利卡支付 自定义支付
 	std::string shoukuan_type;
 
-	int order_from; //1 收银机下单 2 商家app下单 3 扫码下单
+	int order_from; //1 收银机下单 2 商家app下单 3 刷脸app 4收银台
 	std::string init_time;
 
 	//下面是从订单接口从服务端获取的参数,暂时存在这里
@@ -33,6 +35,9 @@ public:
 	std::string is_guazhang;
 	std::string guazhang;
 
+	std::string m_shishou_value;
+	std::string m_zhaoling_value;
+
 public:
 	/****************************下面这里开始,用于与服务器交互的函数*/
 

+ 6 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -229,6 +229,9 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="control\CShoukuanOrderItemUI.h" />
+    <ClInclude Include="page\CShoukuanOrderInfoPageUI.h" />
+    <ClInclude Include="page\CShoukuanOrderListPageUI.h" />
     <ClInclude Include="zhipuzi\CShoukuanOrder.h" />
     <ClInclude Include="page\CShoukuanPageUI.h" />
     <ClInclude Include="wnd\CThirdDeliverySelectWnd.h" />
@@ -341,6 +344,9 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="helper\CSystem.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="control\CShoukuanOrderItemUI.cpp" />
+    <ClCompile Include="page\CShoukuanOrderInfoPageUI.cpp" />
+    <ClCompile Include="page\CShoukuanOrderListPageUI.cpp" />
     <ClCompile Include="zhipuzi\CShoukuanOrder.cpp" />
     <ClCompile Include="page\CShoukuanPageUI.cpp" />
     <ClCompile Include="wnd\CThirdDeliverySelectWnd.cpp" />

+ 18 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -345,6 +345,15 @@
     <ClInclude Include="zhipuzi\CShoukuanOrder.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="page\CShoukuanOrderListPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="control\CShoukuanOrderItemUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="page\CShoukuanOrderInfoPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -650,6 +659,15 @@
     <ClCompile Include="zhipuzi\CShoukuanOrder.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="page\CShoukuanOrderListPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="control\CShoukuanOrderItemUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="page\CShoukuanOrderInfoPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">