Przeglądaj źródła

继续做正餐

张洋 3 lat temu
rodzic
commit
551474d4b1

+ 4 - 16
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcan_diandan_page.xml

@@ -68,22 +68,10 @@
 							<Label name="diandan_page_totalprice" text="总价:¥0.00" font="22" textcolor="#FFFF0000" width="200" align="right" padding="0,0,15,0"></Label>
 						</HorizontalLayout>
 						
-						<HorizontalLayout height="90" name="diandan_pay_layout">
-							<Button name="btn_diandan_weixinzhifu_pay" text="" heiht="75" width="110" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFFF4242"></Button>
-							<Control bkimage="weixinzhifu_icon.png" width="24" height="22" float="true" pos="56,10,80,32" mouse="false"></Control>
-							<Label text="微信支付/支付宝/云闪付" multiline="true" width="110" height="40" font="14" float="true" pos="11,35,121,75" textcolor="#FFFFFFFF" mouse="false"></Label>
-							
-							<Button name="btn_diandan_huiyuanzhifu_pay" text="" heiht="75" width="110" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFFF8910"></Button>
-							<Control bkimage="huiyuanzhifu_icon.png" width="26" height="20" float="true" pos="176,12,202,32" mouse="false"></Control>
-							<Label text="会员支付" width="110" height="35" font="14" float="true" pos="159,35,269,70" textcolor="#FFFFFFFF" mouse="false"></Label>
-						
-							<Button name="btn_diandan_xianjinzhifu_pay" text="" heiht="75" width="110" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FF52CB4B"></Button>
-							<Control bkimage="xianjinzhifu_icon.png" width="21" height="24" float="true" pos="297,10,318,34" mouse="false"></Control>
-							<Label text="现金支付" width="110" height="35" font="14" float="true" pos="279,35,389,70" textcolor="#FFFFFFFF" mouse="false"></Label>
-							
-							<Button name="btn_diandan_gengduozhifu_pay" text="" heiht="75" width="108" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFC1C1C1" bkcolor="#FFF7F7F7"></Button>
-							<Control bkimage="gengduozhifu_icon.png" width="21" height="21" float="true" pos="413,10,434,31" mouse="false"></Control>
-							<Label text="更多支付" width="110" height="35" font="14" float="true" pos="394,35,504,70" mouse="false"></Label>
+						<HorizontalLayout height="75" name="diandan_pay_layout">
+							<Button name="btn_diandan_xiadan" text="下单" heiht="75" width="230" padding="10,0,0,15" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'"></Button>
+
+							<Button name="btn_diandan_pay" text="结账" heiht="75" width="230" padding="10,0,0,15" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'"></Button>
 						</HorizontalLayout>
 						
 						<Button visible="false" name="btn_diandan_jixujiacai" text="继续点单" height="55" padding="20,20,20,15" textcolor="#FFFFFFFF"></Button>

+ 117 - 11
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp

@@ -44,12 +44,16 @@ void CZhengcanDiandanPageUI::InitShow()
 	//先清空旧的订单信息,如果该桌子有订单关联后面会重新获取
 	m_cur_diandan_order.RefreshDiandanInfo();
 
+	this->UpdateShopcartShow();
+
 	//先检查桌子状态,获取桌子信息
 	GetTableInfo();
 }
 
 void CZhengcanDiandanPageUI::InitTableShow()
 {
+	//开始执行这个函数,说明如果订单之前下过单,也已经获取到数据了,需要进行渲染
+
 	//先初始化商品分类
 	this->InitFoodtypeShow();
 
@@ -59,8 +63,8 @@ void CZhengcanDiandanPageUI::InitTableShow()
 	//初始化结算页面相关的展示,把所有活动清零
 	this->InitJiesuanShow();
 
-	//计算所有活动优惠,并且调整所有与价格相关的展示
-	this->UpdateJiesuanInfo();
+	//渲染左侧购物车(包含了调用UpdateJiesuanInfo重新计算价格)
+	this->UpdateShopcartShow();
 
 	//展示选购页面
 	this->ShowXuangouPage();
@@ -82,14 +86,11 @@ void CZhengcanDiandanPageUI::RefreshShow()
 	//初始化商品显示(因为这里要刷新商品库存状态)
 	this->InitFoodShow();
 
-	//清空购物车
-	this->UpdateShopcartShow();
-
 	//初始化结算页面相关的展示,把所有活动清零
 	this->InitJiesuanShow();
 
-	//计算所有活动优惠,并且调整所有与价格相关的展示
-	this->UpdateJiesuanInfo();
+	//渲染左侧购物车(包含了调用UpdateJiesuanInfo重新计算价格)
+	this->UpdateShopcartShow();
 
 	//展示选购页面
 	this->ShowXuangouPage();
@@ -792,10 +793,15 @@ void CZhengcanDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 		this->ClickZhengdanMemo();
 	}
-	else if (name == L"btn_diandan_gengduozhifu_pay")
+	else if (name == L"btn_diandan_xiadan")
 	{
 		//点击更多支付
-		this->ClickGengduoPay();
+		this->ClickXidanBtn();
+	}
+	else if (name == L"btn_diandan_pay")
+	{
+		//点击更多支付
+		this->ClickPayBtn();
 	}
 	else if (name == L"btn_diandan_jixujiacai")
 	{
@@ -1166,6 +1172,44 @@ void CZhengcanDiandanPageUI::UpdateShopcartShow()
 		}
 	}
 
+	int xiadan_cishu = m_cur_diandan_order.m_order_history_array.size();
+
+	//开始处理历史的订单数据渲染
+	for (int i = xiadan_cishu - 1; i >= 0 ; i--)
+	{
+		CLabelUI* attention = new CLabelUI();
+		attention->SetText((L"---------------------  第" + to_wstring(m_cur_diandan_order.m_order_history_array[i].xiadanNum + 1) + L"次下单 --------------------").c_str());
+		attention->SetTextColor(0xFFBBBBBB);
+
+		pList->Add(attention);
+
+		for (std::vector<CZhengcanOrderItem>::iterator it1 = m_cur_diandan_order.m_order_history_array[i].m_items.begin(); it1 != m_cur_diandan_order.m_order_history_array[i].m_items.end(); it1++)
+		{
+			//添加item
+			CDialogBuilder builder;
+			CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("diandan_cart_item.xml"), (UINT)0, NULL, m_pManager));
+
+			pList->Add(pEle);
+
+			CZhengcanOrderItem item = *it1;
+
+			CLabelUI * pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
+			pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
+
+			CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
+			pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
+
+			CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
+			pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
+
+			pName->SetTextColor(0xFFBBBBBB);
+			pNum->SetTextColor(0xFFBBBBBB);
+			pPrice->SetTextColor(0xFFBBBBBB);
+
+			pEle->SetFixedHeight(42);
+		}
+	}
+
 	//更新结算信息
 	UpdateJiesuanInfo();
 }
@@ -2179,11 +2223,73 @@ void CZhengcanDiandanPageUI::ClickZhengdanMemo()
 	}
 }
 
-void CZhengcanDiandanPageUI::ClickGengduoPay()
+void CZhengcanDiandanPageUI::ClickXidanBtn()
 {
 	if (m_cur_diandan_order.getItemNum() == 0)
 	{
-		m_pMainWnd->ShowToast(L"请先选择商品再支付");
+		m_pMainWnd->ShowToast(L"请先选择菜品再下单");
+
+		return;
+	}
+
+	//处理下单加菜逻辑
+	std::map<string, string> params;
+
+	params["order_id"] = m_order_id;
+	params["order_no"] = CRandomHelper::GetRandString(20);
+
+	//构建food_list参数
+	params["food_list"] = m_cur_diandan_order.getDiandanFoodlistParam();
+	params["foodpackage_array"] = m_cur_diandan_order.getDiandanTaocanParam();
+	params["persion_num"] = "1";
+	params["note"] = m_cur_diandan_order.GetMemo();
+	params["table_id"] = m_table_id;
+
+	std::string response;
+
+	std::string url = "/dinnercash/sendorder";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+	if (ret == false)
+	{
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		LOG_INFO("json error!");
+
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		return;
+	}
+
+	if (!document.HasMember("data"))
+	{
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+}
+
+void CZhengcanDiandanPageUI::ClickPayBtn()
+{
+	if (m_cur_diandan_order.getItemNum() > 0)
+	{
+		m_pMainWnd->ShowToast(L"您还有未下单的商品,请先下单再结账");
 
 		return;
 	}

+ 4 - 1
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.h

@@ -107,8 +107,11 @@ public:
 	//点击整单备注之后的逻辑
 	void ClickZhengdanMemo();
 
+	//点击“下单”按钮之后的逻辑
+	void ClickXidanBtn();
+
 	//点击更多支付之后的逻辑
-	void ClickGengduoPay();
+	void ClickPayBtn();
 
 	//点击继续加菜之后的逻辑
 	void JixuJiacai();

+ 41 - 31
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.cpp

@@ -3,10 +3,10 @@
 
 void CZhengcanOrder::RefreshDiandanInfo()
 {
+	m_order_history_array.clear();
 	m_items.clear();
 
 	m_total_price_show = "";
-	m_guadan_time = "";
 	m_memo = "";
 
 	shopname = "";
@@ -353,7 +353,21 @@ std::string CZhengcanOrder::getDiandanFoodlistParam()
 			continue;
 		}
 
-		params.push_back(it->getDiandanParam());
+		std::map<string, string> itemParam = it->getDiandanParam();
+
+		itemParam["is_tuicai"] = "0";
+
+		if (m_order_history_array.size() == 0)
+		{
+			//首单
+			itemParam["is_jiacai"] = "0";
+		}
+		else
+		{
+			itemParam["is_jiacai"] = "1";
+		}		
+
+		params.push_back(itemParam);
 	}
 
 	std::string s_params = CLewaimaiJson::ParamArrayToJsonstring(params);
@@ -491,6 +505,9 @@ bool CZhengcanOrder::InitData(std::string order_id)
 
 	for (rapidjson::SizeType j = 0; j < v_rows.Size(); ++j)
 	{
+		CZhengcanOrderHistoryXiadan newHistoryXiadan;
+		newHistoryXiadan.xiadanNum = j;
+
 		//这里每次循环,就是一次下单的商品信息
 		rapidjson::Value& xiadanInfos = v_rows[j];
 
@@ -499,12 +516,15 @@ bool CZhengcanOrder::InitData(std::string order_id)
 		for (rapidjson::SizeType i = 0; i < food_list.Size(); ++i)
 		{
 			rapidjson::Value& foodinfo = food_list[i];
+
 			CZhengcanOrderItem newItem;
+			newItem.m_is_history_item = true;
 
 			newItem.food_id = CLewaimaiJson::ToString(foodinfo["id"]);
 			newItem.food_name = CLewaimaiJson::ToString(foodinfo["food_name"]);
 			newItem.type_id = CLewaimaiJson::ToString(foodinfo["type_id"]);
 			newItem.price = CLewaimaiJson::ToString(foodinfo["single_price"]);
+			newItem.num = CLewaimaiJson::ToString(foodinfo["quantity"]);
 
 			if (CLewaimaiJson::ToString(foodinfo["is_dabao"]) == "1")
 			{
@@ -519,62 +539,52 @@ bool CZhengcanOrder::InitData(std::string order_id)
 			newItem.is_jiacai = CLewaimaiJson::ToString(foodinfo["is_jiacai"]);
 			newItem.jiacai_no = CLewaimaiJson::ToString(foodinfo["jiacai_no"]);
 			newItem.is_tuicai = CLewaimaiJson::ToString(foodinfo["is_tuicai"]);
+
+			newItem.UpdateShowPrice();
+
+			newHistoryXiadan.m_items.push_back(newItem);
 		}
 
 		//再处理套餐
 		rapidjson::Value& foodpackage_array = xiadanInfos["foodpackage_array"];
 		for (rapidjson::SizeType i = 0; i < foodpackage_array.Size(); ++i)
 		{
-
 			rapidjson::Value& cur_foodpackage = foodpackage_array[i];
 
-			CZhengcanOrderItemPrint itemPrint;
-
-			std::string taocan_name = cur_foodpackage["food_name"].GetString();
+			CZhengcanOrderItem newItem;
+			newItem.m_is_history_item = true;
 
-			itemPrint.m_quantity = cur_foodpackage["quantity"].GetString();
-			itemPrint.m_item_price = cur_foodpackage["single_price"].GetString();
-			itemPrint.m_type_id = cur_foodpackage["type_id"].GetString();
+			newItem.num = cur_foodpackage["quantity"].GetString();
+			newItem.price = cur_foodpackage["single_price"].GetString();
+			newItem.foodpackage_id = cur_foodpackage["foodpackage_id"].GetString();
 
-			itemPrint.is_taocan = true;
+			newItem.m_is_taocan = true;
 
+			std::string taocan_name = cur_foodpackage["food_name"].GetString();
 			taocan_name += CLewaimaiString::UnicodeToUTF8(L"【");
 
 			//接着保存套餐的item
 			rapidjson::Value& food_item = cur_foodpackage["food_item"];
-			for (rapidjson::SizeType j = 0; j < food_item.Size(); ++j)
+			for (rapidjson::SizeType m = 0; m < food_item.Size(); ++m)
 			{
-				CZhengcanOrderItemPrint foodpackageitemPrint;
-				foodpackageitemPrint.m_food_name = food_item[j]["food_name"].GetString();
-				foodpackageitemPrint.m_quantity = food_item[j]["quantity"].GetString();
-				foodpackageitemPrint.m_item_price = food_item[j]["single_price"].GetString();
-				foodpackageitemPrint.m_type_id = food_item[j]["type_id"].GetString();
-
-				foodpackageitemPrint.is_taocan = false;
-				foodpackageitemPrint.is_taocan_item = true;
-
-				m_items_print.push_back(foodpackageitemPrint);
+				taocan_name += food_item[m]["food_name"].GetString();
 
-				taocan_name += foodpackageitemPrint.m_food_name;
-
-				if (j < food_item.Size() - 1)
+				if (m < food_item.Size() - 1)
 				{
 					taocan_name += CLewaimaiString::UnicodeToUTF8(L"、");
 				}
 			}
 
 			taocan_name += CLewaimaiString::UnicodeToUTF8(L"】");
+			newItem.foodpackage_name = taocan_name;
 
-			itemPrint.m_food_name = taocan_name;
+			newItem.UpdateShowPrice();
 
-			m_items_print.push_back(itemPrint);
+			newHistoryXiadan.m_items.push_back(newItem);
 		}
-	}
-
-	//保存套餐的
-	rapidjson::Value& foodpackage_array = data["foodpackage_array"];
 
-	
+		m_order_history_array.push_back(newHistoryXiadan);
+	}
 
 	return true;
 }

+ 17 - 2
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -25,6 +25,19 @@ public:
 	bool is_taocan_item = false;
 };
 
+//历史下单的类,每下单或加菜一次对应的一个类对象来保存数据
+class CZhengcanOrderHistoryXiadan
+{
+public:
+	std::vector<CZhengcanOrderItem> m_items;
+
+	//下单次数,为0表示首单,为1表示第一次加菜
+	int xiadanNum;
+
+	//下单时间(暂时没用)
+	std::string xiadanTime;
+};
+
 /**
  * 点单里面的一个“订单”,每个选中的商品被加入订单,通过订单数据来计算价格,渲染界面,提交订单也是通过这个数据来提交
  * 挂单、取单操作的也是订单
@@ -32,13 +45,15 @@ public:
 class CZhengcanOrder
 {
 public:
+	//保存历史订单信息的二维数组,每个元素表示对应的一次下单的信息,加起来对应多次下单加菜的信息
+	std::vector<CZhengcanOrderHistoryXiadan> m_order_history_array;
+
+	//这个用来表示当前加菜的商品信息,不是历史已下单的订单信息
 	std::vector<CZhengcanOrderItem> m_items;
 
 	//这个是不包含其他费用的纯商品原价
 	std::string m_total_price_show;
 
-	std::string m_guadan_time;
-
 	//订单的整单备注
 	std::string m_memo;
 

+ 5 - 1
zhipuzi_pos_windows/zhipuzi/CZhengcanOrderItem.h

@@ -13,6 +13,9 @@
 class CZhengcanOrderItem
 {
 public:
+	//是否是历史订单记录里面的item
+	bool m_is_history_item = false;
+
 	//是否套餐的Item,因为目前套餐和普通商品都是用同一个Item类
 	bool m_is_taocan = false;
 
@@ -24,6 +27,7 @@ public:
 
 	bool is_nature = false;
 
+	//这3个对历史订单才有
 	std::string is_jiacai;
 	std::string jiacai_no;
 	std::string is_tuicai;
@@ -40,7 +44,7 @@ public:
 	std::string price;
 	bool is_dabao = false;
 	std::string dabao_money;
-	std::string num;
+	std::string num; //份数
 
 	//这个用来存储所有属性选择的信息,每个属性选择的是第几个,什么价格等等
 	std::vector<FoodNatureSelectValue> natureSelectedArray;