zhangyang 3 лет назад
Родитель
Сommit
0a8b2a0a7b

+ 2 - 4
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp

@@ -2034,7 +2034,7 @@ void CZhengcanDiandanPageUI::ClickGuige()
 
 		//弹出属性框,开始重新选择属性
 		CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
-		pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
+		pNatureFrame->SetZhengcanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
 
 		if (pNatureFrame != NULL)
 		{
@@ -2078,7 +2078,7 @@ void CZhengcanDiandanPageUI::ClickGuige()
 
 		//弹出属性框,开始重新选择属性
 		CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
-		pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
+		pNatureFrame->SetZhengcanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
 
 		if (pNatureFrame != NULL)
 		{
@@ -3655,8 +3655,6 @@ CZhengcanOrder CZhengcanDiandanPageUI::GetPrintOrderinfo(std::string take_food_c
 	m_cur_diandan_order.m_dabao_money = CLewaimaiString::DoubleToString(m_cur_diandan_order.getDabaoMoney(), 2);
 	m_cur_diandan_order.m_total_price = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 
-	m_cur_diandan_order.m_canpai = m_canpai;
-
 	for (std::vector<CZhengcanOrderItem>::iterator it = m_cur_diandan_order.m_items.begin(); it != m_cur_diandan_order.m_items.end(); it++)
 	{
 		CZhengcanOrderItemPrint itemPrint;

+ 39 - 6
zhipuzi_pos_windows/wnd/CDiandanNatureWnd.cpp

@@ -22,9 +22,18 @@ void CDiandanNatureWnd::Init()
 	else
 	{
 		//修改规格属性弹框
-		is_taocan = m_DiandanOrderItem.GetIsTaocan();
-		foodinfo = m_DiandanOrderItem.GetFoodInfo();
-		foodpackageinfo = m_DiandanOrderItem.GetFoodpackageInfo();
+		if (m_diandanType == 1)
+		{
+			is_taocan = m_DiandanOrderItem.GetIsTaocan();
+			foodinfo = m_DiandanOrderItem.GetFoodInfo();
+			foodpackageinfo = m_DiandanOrderItem.GetFoodpackageInfo();
+		}
+		else if (m_diandanType == 2)
+		{
+			is_taocan = m_ZhengcanOrderItem.GetIsTaocan();
+			foodinfo = m_ZhengcanOrderItem.GetFoodInfo();
+			foodpackageinfo = m_ZhengcanOrderItem.GetFoodpackageInfo();
+		}
 	}
 
 	if (is_taocan == true)
@@ -47,8 +56,16 @@ void CDiandanNatureWnd::Init()
 		std::vector<FoodNatureSelectValue> natureSelectedArray;
 		if (m_mode == 2)
 		{
-			//这个是修改属性才有,要把属性弹框初始化为这个里面的选项			
-			natureSelectedArray = m_DiandanOrderItem.natureSelectedArray;
+			//这个是修改属性才有,要把属性弹框初始化为这个里面的选项
+			
+			if (m_diandanType == 1)
+			{
+				natureSelectedArray = m_DiandanOrderItem.natureSelectedArray;
+			}
+			else if (m_diandanType == 2)
+			{
+				natureSelectedArray = m_ZhengcanOrderItem.natureSelectedArray;
+			}
 		}
 
 		rapidjson::Value& data = document;
@@ -129,7 +146,14 @@ void CDiandanNatureWnd::Init()
 		if (m_mode == 2)
 		{
 			//这个是修改属性才有,要把属性弹框初始化为这个里面的选项			
-			natureSelectedArray = m_DiandanOrderItem.natureSelectedArray;
+			if (m_diandanType == 1)
+			{
+				natureSelectedArray = m_DiandanOrderItem.natureSelectedArray;
+			}
+			else if (m_diandanType == 2)
+			{
+				natureSelectedArray = m_ZhengcanOrderItem.natureSelectedArray;
+			}
 		}
 
 		rapidjson::Value& data = document;
@@ -194,6 +218,15 @@ void CDiandanNatureWnd::SetFoodItemUI(CDiandanFoodItemUI* item)
 void CDiandanNatureWnd::SetDiandanOrderItem(CDiandanOrderItem item)
 {
 	m_DiandanOrderItem = item;
+
+	m_diandanType = 1;
+}
+
+void CDiandanNatureWnd::SetZhengcanOrderItem(CZhengcanOrderItem item)
+{
+	m_ZhengcanOrderItem = item;
+
+	m_diandanType = 2;
 }
 
 std::vector<FoodNatureSelectValue> CDiandanNatureWnd::GetNatureSelectedArray()

+ 9 - 1
zhipuzi_pos_windows/wnd/CDiandanNatureWnd.h

@@ -6,7 +6,7 @@
 #include "../control/CDiandanFoodItemUI.h"
 #include "../control/CDiandanNatureItemUI.h"
 #include "../zhipuzi/CDiandanOrder.h"
-
+#include "../zhipuzi/CZhengcanOrder.h"
 
 #include "CModalWnd.h"
 
@@ -41,6 +41,8 @@ public:
 
 	void SetDiandanOrderItem(CDiandanOrderItem item);
 
+	void SetZhengcanOrderItem(CZhengcanOrderItem item);
+
 	std::vector<FoodNatureSelectValue> GetNatureSelectedArray();
 
 	void Notify(TNotifyUI& msg);
@@ -78,6 +80,12 @@ public:
 	//这个是点击购物车的某个商品,修改商品规格的时候,保存当前选中的那个item,用来初始化属性窗口,m_mode为2的时候有用
 	CDiandanOrderItem m_DiandanOrderItem;
 
+	//点击正餐购物车时候的item信息
+	CZhengcanOrderItem m_ZhengcanOrderItem;
+
+	//当前是快餐还是正餐的选择属性 1:快餐 2:正餐
+	int m_diandanType;
+
 	//当前弹框下的属性控件数组
 	std::vector<CDiandanNatureItemUI*> m_natureitems;
 

+ 101 - 63
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.cpp

@@ -35,7 +35,6 @@ void CZhengcanOrder::RefreshDiandanInfo()
 	m_zhekou_value = "";
 	m_dabao_money = "";
 	m_total_price = "";
-	m_canpai = "";
 
 	m_items_print.clear();
 
@@ -426,36 +425,27 @@ bool CZhengcanOrder::InitData(std::string order_id)
 
 	m_order_id = data["id"].GetString();
 	show_trade_no = data["show_trade_no"].GetString();
-	m_person_num = CLewaimaiJson::ToString(data["person_num"]);
+	m_renshu = data["person_num"].GetString();
 	m_table_id = CLewaimaiJson::ToString(data["table_id"]);
 	m_table_name = CLewaimaiJson::ToString(data["table_name"]);
 	m_memo = CLewaimaiJson::ToString(data["note"]);
 
+	m_dabao_money = data["dabao_price"].GetString();
+
+	m_zhekou_value = data["discount"].GetString();
+	m_rengong_youhui = data["coupon"].GetString();
 	m_jiajia = data["price_plus"].GetString();
-	m_shishou_value = data["shishou_value"].GetString();
-	m_zhaoling_value = data["zhaoling_value"].GetString();
 	m_moling_youhui = data["price_moling"].GetString();
-	m_rengong_youhui = data["coupon"].GetString();
-	m_zhekou_value = data["discount"].GetString();
-	m_renshu = data["person_num"].GetString();
 	m_total_price = data["yingshou_price"].GetString();
-	init_time = data["init_time"].GetString();
-	m_canpai = data["table_name"].GetString();
+	m_shishou_value = data["shishou_value"].GetString();
+	m_zhaoling_value = data["zhaoling_value"].GetString();
+	
 	shoukuan_type = data["zhifu_type"].GetString();
-	m_dabao_money = data["dabao_price"].GetString();
-	shopname = data["shop_name"].GetString();
-	m_memo = data["note"].GetString();
-	is_refund = data["is_refund"].GetString();
-	refund_time = data["refund_time"].GetString();
+	
 	is_guazhang = data["is_guazhang"].GetString();
 	guazhang = data["guazhang"].GetString();
-	m_youhuiquan_youhui = data["coupon_value"].GetString();
-	m_total_member_youhui = data["member_delete"].GetString();
-	m_manjian_youhui = data["promotion_value"].GetString();
-	m_member_zhekou_youhui = data["member_discount_money"].GetString();
-	m_zhekou_youhui = data["shop_discount_money"].GetString();
-	m_cika_youhui = data["timescoupon_discount_money"].GetString();
-	m_quanyika_youhui = data["eq_card_discount_money"].GetString();
+
+	m_status = data["status"].GetString();
 
 	std::string fromtype = data["from_type"].GetString();
 	if (fromtype == "1")
@@ -470,74 +460,122 @@ bool CZhengcanOrder::InitData(std::string order_id)
 	{
 		order_from = 3;
 	}
+	
+	is_refund = data["is_refund"].GetString();
+	refund_time = data["refund_time"].GetString();
 
-	//开始保存订单详情
-	rapidjson::Value& v_rows = data["order_item"];
+	m_total_member_youhui = data["member_delete"].GetString();
 
-	for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
-	{
+	init_time = data["init_time"].GetString();
 
-		rapidjson::Value& v_row_i = v_rows[i];
+	m_is_clear = data["is_clear"].GetString();
+	
+	
+	m_kaitai_time = data["kaitai_time"].GetString();
+	m_pay_time = data["pay_time"].GetString();
 
-		CZhengcanOrderItemPrint itemPrint;
-		itemPrint.m_food_name = v_row_i["food_name"].GetString();
-		itemPrint.m_quantity = v_row_i["quantity"].GetString();
-		itemPrint.m_item_price = v_row_i["single_price"].GetString();
-		itemPrint.m_type_id = v_row_i["type_id"].GetString();
+	m_youhuiquan_youhui = data["coupon_value"].GetString();
 
-		m_items_print.push_back(itemPrint);
-	}
+	m_manjian_youhui = data["promotion_value"].GetString();	
+	
+	m_member_zhekou_youhui = data["member_discount_money"].GetString();
+	m_zhekou_youhui = data["shop_discount_money"].GetString();
+	m_cika_youhui = data["timescoupon_discount_money"].GetString();
+	m_quanyika_youhui = data["eq_card_discount_money"].GetString();	
 
-	//保存套餐的
-	rapidjson::Value& foodpackage_array = data["foodpackage_array"];
+	//开始保存订单详情
+	rapidjson::Value& v_rows = data["item"];
 
-	for (rapidjson::SizeType i = 0; i < foodpackage_array.Size(); ++i)
+	//这个是已经下单的次数,已经下单N次这里值就是N
+	int nItemNum = v_rows.Size();
+
+	for (rapidjson::SizeType j = 0; j < v_rows.Size(); ++j)
 	{
+		//这里每次循环,就是一次下单的商品信息
+		rapidjson::Value& xiadanInfos = v_rows[j];
 
-		rapidjson::Value& cur_foodpackage = foodpackage_array[i];
+		//先处理非套餐
+		rapidjson::Value& food_list = xiadanInfos["food_list"];
+		for (rapidjson::SizeType i = 0; i < food_list.Size(); ++i)
+		{
+			rapidjson::Value& foodinfo = food_list[i];
+			CZhengcanOrderItem newItem;
 
-		CZhengcanOrderItemPrint itemPrint;
+			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"]);
 
-		std::string taocan_name = cur_foodpackage["food_name"].GetString();
+			if (CLewaimaiJson::ToString(foodinfo["is_dabao"]) == "1")
+			{
+				newItem.is_dabao = true;
+			}
+			else
+			{
+				newItem.is_dabao = false;
+			}
 
-		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.dabao_money = CLewaimaiJson::ToString(foodinfo["dabao_money"]);
+			newItem.is_jiacai = CLewaimaiJson::ToString(foodinfo["is_jiacai"]);
+			newItem.jiacai_no = CLewaimaiJson::ToString(foodinfo["jiacai_no"]);
+			newItem.is_tuicai = CLewaimaiJson::ToString(foodinfo["is_tuicai"]);
+		}
 
-		itemPrint.is_taocan = true;
+		//再处理套餐
+		rapidjson::Value& foodpackage_array = xiadanInfos["foodpackage_array"];
+		for (rapidjson::SizeType i = 0; i < foodpackage_array.Size(); ++i)
+		{
 
-		taocan_name += CLewaimaiString::UnicodeToUTF8(L"【");
+			rapidjson::Value& cur_foodpackage = foodpackage_array[i];
 
-		//接着保存套餐的item
-		rapidjson::Value& food_item = cur_foodpackage["food_item"];
-		for (rapidjson::SizeType j = 0; j < food_item.Size(); ++j)
-		{
-			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();
+			CZhengcanOrderItemPrint itemPrint;
+
+			std::string taocan_name = cur_foodpackage["food_name"].GetString();
 
-			foodpackageitemPrint.is_taocan = false;
-			foodpackageitemPrint.is_taocan_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();
 
-			m_items_print.push_back(foodpackageitemPrint);
+			itemPrint.is_taocan = true;
 
-			taocan_name += foodpackageitemPrint.m_food_name;
+			taocan_name += CLewaimaiString::UnicodeToUTF8(L"【");
 
-			if (j < food_item.Size() - 1)
+			//接着保存套餐的item
+			rapidjson::Value& food_item = cur_foodpackage["food_item"];
+			for (rapidjson::SizeType j = 0; j < food_item.Size(); ++j)
 			{
-				taocan_name += CLewaimaiString::UnicodeToUTF8(L"、");
+				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 += foodpackageitemPrint.m_food_name;
+
+				if (j < food_item.Size() - 1)
+				{
+					taocan_name += CLewaimaiString::UnicodeToUTF8(L"、");
+				}
 			}
-		}
 
-		taocan_name += CLewaimaiString::UnicodeToUTF8(L"】");
+			taocan_name += CLewaimaiString::UnicodeToUTF8(L"】");
 
-		itemPrint.m_food_name = taocan_name;
+			itemPrint.m_food_name = taocan_name;
 
-		m_items_print.push_back(itemPrint);
+			m_items_print.push_back(itemPrint);
+		}
 	}
 
+	//保存套餐的
+	rapidjson::Value& foodpackage_array = data["foodpackage_array"];
+
+	
+
 	return true;
 }
 

+ 15 - 5
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -42,11 +42,25 @@ public:
 	//订单的整单备注
 	std::string m_memo;
 
+	//订单状态
+	std::string m_status;
+
 	//人数
-	std::string m_person_num;
+	std::string m_renshu;
+
+	//绑定的桌子信息
 	std::string m_table_id;
 	std::string m_table_name;
 
+	//是否清零
+	std::string m_is_clear;
+
+	//开台时间
+	std::string m_kaitai_time;
+
+	//支付时间
+	std::string m_pay_time;
+
 	/******  下面这些是专门用于打印的参数,不作为其他用途,点单逻辑中用不到,点单成功后赋值用于打印而已  ***********/
 	std::string shopname;
 	std::string show_trade_no;
@@ -55,8 +69,6 @@ public:
 	std::string balance;
 	std::string member_number;
 
-	std::string m_renshu;
-
 	//微信支付 会员支付 现金支付 福利卡支付 自定义支付
 	std::string shoukuan_type;
 
@@ -88,8 +100,6 @@ public:
 	std::string m_dabao_money;
 	std::string m_total_price;
 
-	std::string m_canpai;
-
 	std::vector<CZhengcanOrderItemPrint> m_items_print;
 
 	//下面是从订单接口从服务端获取的参数,暂时存在这里

+ 359 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrderItem.cpp

@@ -71,4 +71,363 @@ bool CZhengcanOrderItem::operator==(CZhengcanOrderItem& t)
 	}
 
 	return true;
+}
+
+void CZhengcanOrderItem::SetFoodInfo(CFood info)
+{
+	m_foodinfo = info;
+}
+
+void CZhengcanOrderItem::SetFoodpackageInfo(CFoodpackage info)
+{
+	m_foodpackageinfo = info;
+
+	m_is_taocan = true;
+}
+
+void CZhengcanOrderItem::SetIsTaocan(bool is_taocan)
+{
+	m_is_taocan = is_taocan;
+}
+
+void CZhengcanOrderItem::SetDabao()
+{
+	is_dabao = true;
+}
+
+CFood CZhengcanOrderItem::GetFoodInfo()
+{
+	return m_foodinfo;
+}
+
+CFoodpackage CZhengcanOrderItem::GetFoodpackageInfo()
+{
+	return m_foodpackageinfo;
+}
+
+bool CZhengcanOrderItem::GetIsTaocan()
+{
+	return m_is_taocan;
+}
+
+//根据当前选中的商品属性、份数,计算商品的展示价格
+void CZhengcanOrderItem::UpdateShowPrice()
+{
+	if (m_is_taocan == true)
+	{
+		show_price = CLewaimaiString::DoubleToString(std::stod(price) * std::stod(num), 2);
+	}
+	else
+	{
+		if (!is_nature)
+		{
+			show_price = CLewaimaiString::DoubleToString(std::stod(price) * std::stod(num), 2);
+		}
+		else
+		{
+			double nature_price = 0;
+			for (std::vector<FoodNatureSelectValue>::iterator it = this->natureSelectedArray.begin(); it != this->natureSelectedArray.end(); it++)
+			{
+				nature_price += (*it).nature_select_value;
+			}
+
+			double new_price = std::stod(price) + nature_price;
+
+			show_price = CLewaimaiString::DoubleToString(new_price * std::stod(num), 2);
+		}
+	}
+}
+
+std::string CZhengcanOrderItem::getSinglePrice()
+{
+	if (m_is_taocan == true)
+	{
+		return price;
+	}
+	else
+	{
+		if (!is_nature)
+		{
+			return price;
+		}
+		else
+		{
+			double nature_price = 0;
+			for (std::vector<FoodNatureSelectValue>::iterator it = this->natureSelectedArray.begin(); it != this->natureSelectedArray.end(); it++)
+			{
+				nature_price += (*it).nature_select_value;
+			}
+
+			double new_price = std::stod(price) + nature_price;
+
+			show_price = CLewaimaiString::DoubleToString(new_price, 2);
+
+			return show_price;
+		}
+	}
+}
+
+std::string CZhengcanOrderItem::getNameShow()
+{
+	if (m_is_taocan)
+	{
+		if (is_dabao)
+		{
+			return CLewaimaiString::UnicodeToUTF8(L"【打包】") + foodpackage_name;
+		}
+		else
+		{
+			return foodpackage_name;
+		}
+	}
+	else
+	{
+		if (is_dabao)
+		{
+			return CLewaimaiString::UnicodeToUTF8(L"【打包】") + food_name;
+		}
+		else
+		{
+			return food_name;
+		}
+	}
+}
+
+//获取用于展示的属性名字
+std::string CZhengcanOrderItem::getNatureShow()
+{
+	std::string show = "";
+
+	if (m_is_taocan)
+	{
+		size_t i = 0;
+		for (std::vector<FoodNatureSelectValue>::iterator it = this->natureSelectedArray.begin(); it != this->natureSelectedArray.end(); it++)
+		{
+			show += (*it).nature_select_name;
+
+			if (i < natureSelectedArray.size() - 1)
+			{
+				show += CLewaimaiString::UnicodeToUTF8(L"、");
+			}
+
+			i++;
+		}
+	}
+	else
+	{
+		if (!is_nature)
+		{
+			return "";
+		}
+
+		size_t i = 0;
+		for (std::vector<FoodNatureSelectValue>::iterator it = this->natureSelectedArray.begin(); it != this->natureSelectedArray.end(); it++)
+		{
+			show += (*it).nature_select_name;
+
+			if (i < natureSelectedArray.size() - 1)
+			{
+				show += CLewaimaiString::UnicodeToUTF8(L"、");
+			}
+
+			i++;
+		}
+	}
+
+	return show;
+}
+
+//获取用于完整展示的商品名字,包含商品本身的名字和属性,例如“【打包】珍珠奶茶【大杯、热、多糖】”
+std::string CZhengcanOrderItem::getNameWanzhengShow()
+{
+	std::string name_first = getNameShow();
+
+	std::string nature = "";
+
+	//后面再加上属性或者套餐商品名字
+	if (m_is_taocan)
+	{
+		nature = CLewaimaiString::UnicodeToUTF8(L"【") + getNatureShow() + CLewaimaiString::UnicodeToUTF8(L"】");
+	}
+	else
+	{
+		if (is_nature)
+		{
+			nature = CLewaimaiString::UnicodeToUTF8(L"【") + getNatureShow() + CLewaimaiString::UnicodeToUTF8(L"】");
+		}
+		else
+		{
+			nature = "";
+		}
+	}
+
+	std::string total_name = name_first + nature;
+
+	return total_name;
+}
+
+double CZhengcanOrderItem::getMemberYouhui(std::string member_level)
+{
+	if (is_member_price_used == false)
+	{
+		return 0;
+	}
+
+	for (std::vector<MemberPrice>::iterator it = m_member_price.begin(); it != m_member_price.end(); it++)
+	{
+		MemberPrice cur = *it;
+
+		if (cur.level == member_level)
+		{
+			double member_food_price = atof(cur.price.c_str());
+
+			double yuan_price = atof(price.c_str());
+
+			double chajia = (yuan_price - member_food_price) * atof(num.c_str());
+
+			return chajia;
+		}
+	}
+
+	return 0;
+}
+
+double CZhengcanOrderItem::getDabaoMoney()
+{
+	if (is_dabao)
+	{
+		return atof(dabao_money.c_str()) * (int)atof(num.c_str());
+	}
+
+	return 0;
+}
+
+//获取点单相关的参数(仅用于非套餐)
+std::map<string, string> CZhengcanOrderItem::getDiandanParam()
+{
+	std::map<string, string> param;
+
+	if (m_is_taocan)
+	{
+		return param;
+	}
+
+	param["food_id"] = food_id;
+
+	if (is_nature)
+	{
+		param["food_name"] = food_name + CLewaimaiString::UnicodeToUTF8(L"【") + getNatureShow() + CLewaimaiString::UnicodeToUTF8(L"】");
+	}
+	else
+	{
+		param["food_name"] = food_name;
+	}
+
+	param["food_price"] = getSinglePrice();
+
+	if (is_dabao)
+	{
+		param["is_dabao"] = "1";
+	}
+	else
+	{
+		param["is_dabao"] = "0";
+	}
+
+	param["quantity"] = num;
+	param["type_id"] = m_foodinfo.type_id;
+	param["foodpackage_id"] = "0";
+	param["is_foodpackage"] = "0";
+
+	return param;
+}
+
+//获取点单相关的套餐参数(仅用于套餐)
+rapidjson::Document CZhengcanOrderItem::getDiandanTaocanParam(rapidjson::Document::AllocatorType &allocator)
+{
+	rapidjson::Document doc(&allocator);
+
+	doc.SetObject();
+
+	if (m_is_taocan == false)
+	{
+		return doc;
+	}
+
+	Value v_foodpackage_id;
+	v_foodpackage_id.SetString(foodpackage_id.c_str(), foodpackage_id.length(), allocator);
+	doc.AddMember("foodpackage_id", v_foodpackage_id, allocator);
+
+	std::string show_name = foodpackage_name;
+	Value v_show_name;
+	v_show_name.SetString(show_name.c_str(), show_name.length(), allocator);
+	doc.AddMember("food_name", v_show_name, allocator);
+
+	std::string single_price = getSinglePrice();
+	Value v_single_price;
+	v_single_price.SetString(single_price.c_str(), single_price.length(), allocator);
+	doc.AddMember("food_price", v_single_price, allocator);
+
+	if (is_dabao)
+	{
+		doc.AddMember("is_dabao", "0", allocator);
+	}
+	else
+	{
+		doc.AddMember("is_dabao", "1", allocator);
+	}
+
+	Value v_num;
+	v_num.SetString(num.c_str(), num.length(), allocator);
+	doc.AddMember("quantity", v_num, allocator);
+
+	std::vector<std::map<string, string>> item;
+
+	//遍历套餐的每个商品
+	for (std::vector<FoodNatureSelectValue>::iterator it = natureSelectedArray.begin(); it != natureSelectedArray.end(); it++)
+	{
+		std::map<string, string> curFood;
+
+		FoodNatureSelectValue curNature = *it;
+
+		std::string foodpackage_nature = m_foodpackageinfo.nature;
+
+		rapidjson::Document doc_tmp = CLewaimaiJson::StringToJson(foodpackage_nature, allocator);
+
+		std::string food_id = doc_tmp[curNature.nNameIndex]["value"][curNature.nature_select_index].GetString();
+
+		curFood["food_id"] = food_id;
+
+		CFood foodinfo;
+		CSqlite3 sqlite;
+		bool is_found = sqlite.GetFoodById(food_id, foodinfo);
+		if (!is_found)
+		{
+			continue;
+		}
+
+		curFood["food_name"] = foodinfo.name;
+		curFood["food_price"] = foodinfo.price;
+		if (is_dabao)
+		{
+			curFood["is_dabao"] = "1";
+		}
+		else
+		{
+			curFood["is_dabao"] = "0";
+		}
+
+		curFood["quantity"] = num;
+		curFood["type_id"] = foodinfo.type_id;
+		curFood["foodpackage_id"] = foodpackage_id;
+		curFood["is_foodpackage"] = "1";
+
+		item.push_back(curFood);
+	}
+
+	Value& data = CLewaimaiJson::ParamArrayToJson(item, allocator);
+
+	doc.AddMember("item", data, allocator);
+
+	return doc;
 }

+ 83 - 1
zhipuzi_pos_windows/zhipuzi/CZhengcanOrderItem.h

@@ -10,8 +10,90 @@
 /**
  * 订单中的一个商品
  */
-class CZhengcanOrderItem : public CDiandanOrderItem
+class CZhengcanOrderItem
 {
 public:
+	//是否套餐的Item,因为目前套餐和普通商品都是用同一个Item类
+	bool m_is_taocan = false;
+
+	//普通商品才有的信息
+	std::string food_id;
+	std::string food_name;
+	std::string type_id;
+	bool is_weight = false;
+
+	bool is_nature = false;
+
+	std::string is_jiacai;
+	std::string jiacai_no;
+	std::string is_tuicai;
+
+	//会员价
+	bool is_member_price_used;
+	std::vector<MemberPrice> m_member_price;
+
+	//套餐才有的信息
+	std::string foodpackage_id;
+	std::string foodpackage_name;
+
+	//这个是套餐和普通商品共有的信息
+	std::string price;
+	bool is_dabao = false;
+	std::string dabao_money;
+	std::string num;
+
+	//这个用来存储所有属性选择的信息,每个属性选择的是第几个,什么价格等等
+	std::vector<FoodNatureSelectValue> natureSelectedArray;
+
+	//这个是商品对外展示的价格,根据数量和属性来计算的,不包含打包费
+	std::string show_price;
+
+private:
+	CFood m_foodinfo;
+	CFoodpackage m_foodpackageinfo;
+
+public:
+
 	bool operator==(CZhengcanOrderItem& t);
+
+	void SetFoodInfo(CFood info);
+
+	void SetFoodpackageInfo(CFoodpackage info);
+
+	void SetIsTaocan(bool is_taocan);
+
+	void SetDabao();
+
+	CFood GetFoodInfo();
+
+	CFoodpackage GetFoodpackageInfo();
+
+	bool GetIsTaocan();
+
+	//根据当前选中的商品属性、份数,计算商品的展示价格
+	void UpdateShowPrice();
+
+	//这个是单价,包含属性价格,不考虑数量,也就是“1份”的价格
+	std::string getSinglePrice();
+
+	//获取用户展示的商品名字,如果有打包会在前面显示【打包】,不包含商品属性
+	std::string getNameShow();
+
+	//获取用于展示的属性名字,仅仅是属性名字,如“热、多糖、大杯”
+	std::string getNatureShow();
+
+	//获取用于完整展示的商品名字,包含商品本身的名字和属性,例如“【打包】珍珠奶茶【大杯、热、多糖】”
+	std::string getNameWanzhengShow();
+
+	//根据当前会员等级,计算该商品的会员优惠金额
+	double getMemberYouhui(std::string member_level);
+
+	//计算当前这个商品的打包费
+	double getDabaoMoney();
+
+	//获取点单相关的参数(仅用于非套餐)
+	std::map<string, string> getDiandanParam();
+
+	//获取点单相关的套餐参数(仅用于套餐)
+	rapidjson::Document getDiandanTaocanParam(rapidjson::Document::AllocatorType &allocator);
 };