Przeglądaj źródła

完成热键同步,修复会员折扣问题

zhangyang 4 lat temu
rodzic
commit
ae7ad10254

+ 4 - 4
bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_page.xml

@@ -16,11 +16,11 @@
 					<VerticalLayout width="400" padding="0,0,0,0">
 						<HorizontalLayout name="btn_diandan_qingkong" height="60">
 							<Control bkimage="member_login.png" width="32" height="32" padding="10,14,0,0"></Control>
-							<Button name="btn_diandan_member_login" text="会员登录" heiht="38" width="100" padding="0,0,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
-							<Label name="diandan_page_member_info" text="" heiht="30" padding="10,10,10,10" visible="false"></Label>
+							<Button name="btn_diandan_member_login" align="left" text="会员登录" heiht="38" width="100" padding="10,2,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+							<Label name="diandan_page_member_info" text="" width="130" heiht="30" padding="10,10,10,10" visible="false"></Label>
 							<Control></Control>
-							<Button name="btn_diandan_canpaihao" text="输入餐牌号" heiht="38" width="150" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
-							<Control width="1" bkcolor="#FFEBE8E8" padding="15,15,15,15"></Control>
+							<Button name="btn_diandan_canpaihao" text="输入餐牌号" heiht="38" width="100" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+							<Control width="1" bkcolor="#FFEBE8E8" padding="5,15,15,15"></Control>
 							<Control bkimage="order_delete.png" width="20" height="20" padding="0,20,0,0"></Control>
 							<Button name="btn_diandan_qingkong" text="清空" heiht="38" width="40" padding="0,0,10,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
 						</HorizontalLayout>

+ 13 - 3
bin/Win32/Debug/zhipuzi_pos_windows/skin/setting_tiaomacheng.xml

@@ -22,7 +22,7 @@
 	
 	<Control height="1" bkcolor="#FFEAEAEA" padding="0,20,0,0"></Control>
 	
-	<HorizontalLayout height="44">
+	<HorizontalLayout height="44" padding="0,10,0,0">
 		<Label text="条码秤型号" width="260"/>
 		<Combo name="setting_tiaomacheng_xinghao" padding="0,9,0,0" width="140" height="26" tooltip="请点击这里选择您的打印机纸张宽度规格" normalimage="file='Setting_Combox_Normal.png' corner='2,2,24,2'" hotimage="file='Setting_Combox_Hover.png' corner='2,2,24,2'" pushedimage="Setting_Combox_Click.png' corner='2,2,24,2'" textpadding="10,1,1,1" >
 			<ListLabelElement text="大华TM系列" selected="true" />
@@ -34,8 +34,18 @@
 		<Edit name="setting_tiaomacheng_ip" width="200" height="32" padding="0,12,0,12" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
 
 		<Button name="setting_tiaomacheng_saveip" align="center" width="100" height="38" padding="20,8,0,3" text="保存" 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 name="setting_tiaomacheng_tongbushangpin" align="center" width="300" height="38" padding="20,8,0,3" text="同步最新商品信息到条码秤" 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'" />
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="52">
+		<Button name="setting_tiaomacheng_tongbushangpin" align="center" width="300" height="44" padding="0,8,0,3" text="同步最新商品信息到条码秤" 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'" />
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="52">		
+		<Button name="setting_tiaomacheng_tongburejian" align="center" width="300" height="44" padding="0,8,0,3" text="自动生成快捷热键到条码秤" 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'" />
+	</HorizontalLayout>
+	
+	<HorizontalLayout height="44">
+		<Label text="自动同步快捷热键将根据商品PLU编码生成,比如PLU编码为1,则热键为1,编码为10,则热键为10" width="900"/>
 	</HorizontalLayout>
 	
 	<HorizontalLayout height="50" padding="0,20,0,0">

+ 2 - 3
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -1021,14 +1021,13 @@ void CDiandanPageUI::UpdateJiesuanInfo()
 
 	//再判断分等级会员折扣
 	m_member_zhekou_youhui = 0;
-	m_member_level_id = "3138";
 
 	std::vector<DiscountInfo> member_discount_info = CShopinfo::m_shopinfo.m_discount_info;
 
 	for (std::vector<DiscountInfo>::iterator it = member_discount_info.begin(); it != member_discount_info.end(); it++)
 	{
 		DiscountInfo info = *it;
-		if (info.level_id == m_member_level_id)
+		if (info.member_level == m_member_level)
 		{
 			if (info.is_discount == "1")
 			{
@@ -2145,7 +2144,7 @@ void CDiandanPageUI::ClickMemberLogin()
 			pMemberLoginBtn->SetVisible(false);
 
 			CLabelUI* pMemberInfo = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_member_info")));
-			std::wstring memberInfo = L"会员:" + CLewaimaiString::UTF8ToUnicode(m_member_name) + L"【" + CLewaimaiString::UTF8ToUnicode(m_member_level_name) + L"】";
+			std::wstring memberInfo = CLewaimaiString::UTF8ToUnicode(m_member_name) + L"【" + CLewaimaiString::UTF8ToUnicode(m_member_level_name) + L"】";
 			pMemberInfo->SetText(memberInfo.c_str());
 			pMemberInfo->SetVisible(true);
 

+ 0 - 1
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -274,7 +274,6 @@ private:
 	std::string m_member_name;
 	std::string m_member_level;
 	std::string m_member_level_name;
-	std::string m_member_level_id;
 
 	double m_total_member_youhui; //»áÔ±ÉÌÆ·ÓÅ»Ý
 

+ 184 - 0
zhipuzi_pos_windows/page/CSettingPageUI.cpp

@@ -1314,6 +1314,10 @@ void CSettingPageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 		this->StartTongbuBiaoqiancheng();
 	}
+	else if (name == L"setting_tiaomacheng_tongburejian")
+	{
+		this->StartTongbuRejian();
+	}
 	else if (name == _T("setting_logout"))
 	{
 		//退出登录
@@ -1824,4 +1828,184 @@ void CSettingPageUI::HandleTongbuBiaoqiancheng()
 	std::string result = buf.begin();
 
 	m_socket.close();
+}
+
+void CSettingPageUI::StartTongbuRejian()
+{
+	std::thread(&CSettingPageUI::HandleTongbuRejian, this).detach();
+}
+
+void CSettingPageUI::HandleTongbuRejian()
+{
+	boost::asio::io_service m_io;
+	boost::asio::ip::tcp::socket m_socket(m_io);
+
+	//读取厨房打印机信息
+	std::string ip = CSetting::GetParam("setting_tiaomacheng_ip");
+
+	//初始化连接
+	try
+	{
+		boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string(ip.c_str()), 4001);
+		m_socket.connect(ep);
+	}
+	catch (std::exception& e)
+	{
+		std::string err = e.what();
+		LOG_INFO("条码秤连接失败,IP地址:" << ip.c_str() << ",错误信息:" << err.c_str());
+
+		m_errinfo = L"条码秤连接失败,请检查IP设置,IP地址:" + CLewaimaiString::UTF8ToUnicode(ip);
+		MessageBoxW(NULL, m_errinfo.c_str(), L"条码秤连接失败", MB_OK);
+
+		return;
+	}
+
+	std::string data = "";
+
+	std::map<int, std::string> pluMap;
+
+	CSqlite3 sqlite;
+	std::vector<CFood> foods = sqlite.GetFoodForTiaomacheng();
+	for (std::vector<CFood>::iterator it = foods.begin(); it != foods.end(); it++)
+	{
+		//处理PLU;
+		int n_plu = atoi(it->weight_plu_code.c_str());
+		if (n_plu < 1)
+		{
+			//无效的plu
+			continue;;
+		}
+
+		if (n_plu > 142)
+		{
+			//也不处理
+			continue;
+		}
+
+		string plu = to_string(n_plu);
+		plu = CLewaimaiString::BuZifuLeft(plu, 4 - plu.length(), '0');
+		
+		pluMap[n_plu] = plu;
+	}
+	
+	//前36个
+	data += "!0L00A";
+
+	for (int i = 1; i <= 36; i++)
+	{
+		std::string s_i = to_string(i);
+
+		std::string buqi_i = CLewaimaiString::BuZifuLeft(s_i, 4 - s_i.length(), '0');
+
+		if (pluMap.find(i) != pluMap.end())
+		{
+			//说明有这个plu的
+			data += pluMap[i];
+		}
+		else
+		{
+			//没找到这个plu
+			data += buqi_i;
+		}
+	}
+
+	data += "B";
+	data += 0x0d;
+	data += 0x0a;
+
+	//37到72
+	data += "!0L01A";
+
+	for (int i = 37; i <= 72; i++)
+	{
+		std::string s_i = to_string(i);
+
+		std::string buqi_i = CLewaimaiString::BuZifuLeft(s_i, 4 - s_i.length(), '0');
+
+		if (pluMap.find(i) != pluMap.end())
+		{
+			//说明有这个plu的
+			data += pluMap[i];
+		}
+		else
+		{
+			//没找到这个plu
+			data += buqi_i;
+		}
+	}
+
+	data += "B";
+	data += 0x0d;
+	data += 0x0a;
+
+	//73到108
+	data += "!0L02A";
+
+	for (int i = 73; i <= 108; i++)
+	{
+		std::string s_i = to_string(i);
+
+		std::string buqi_i = CLewaimaiString::BuZifuLeft(s_i, 4 - s_i.length(), '0');
+
+		if (pluMap.find(i) != pluMap.end())
+		{
+			//说明有这个plu的
+			data += pluMap[i];
+		}
+		else
+		{
+			//没找到这个plu
+			data += buqi_i;
+		}
+	}
+
+	data += "B";
+	data += 0x0d;
+	data += 0x0a;
+
+	//109到142(108+36=144,最后2个空着)
+	data += "!0L03A";
+
+	for (int i = 109; i <= 142; i++)
+	{
+		std::string s_i = to_string(i);
+
+		std::string buqi_i = CLewaimaiString::BuZifuLeft(s_i, 4 - s_i.length(), '0');
+
+		if (pluMap.find(i) != pluMap.end())
+		{
+			//说明有这个plu的
+			data += pluMap[i];
+		}
+		else
+		{
+			//没找到这个plu
+			data += buqi_i;
+		}
+	}
+
+	//完了这里要补最后的0
+	data += "00000000";
+
+	data += "B";
+	data += 0x0d;
+	data += 0x0a;
+
+	//网口走这里
+	try
+	{
+		m_socket.write_some(boost::asio::buffer(data.c_str(), data.length()));
+	}
+	catch (const std::exception& e)
+	{
+		LOG_INFO("条码秤发送消息失败,错误信息:" << e.what());
+	}
+
+	boost::array<char, 128> buf;
+	boost::system::error_code error;
+
+	size_t len = m_socket.read_some(boost::asio::buffer(buf), error);
+	std::string result = buf.begin();
+
+	m_socket.close();
 }

+ 4 - 0
zhipuzi_pos_windows/page/CSettingPageUI.h

@@ -27,10 +27,14 @@ public:
 	//处理扫码枪捕捉到的扫码信息
 	void HandleTextCapture(std::string content);
 
+	//开始同步商品到标签秤
 	void StartTongbuBiaoqiancheng();
 
 	void HandleTongbuBiaoqiancheng();
 
+	void StartTongbuRejian();
+
+	void HandleTongbuRejian();
 private:
 	std::wstring m_errinfo;
 };

+ 2 - 0
zhipuzi_pos_windows/zhipuzi/CShopinfo.cpp

@@ -146,6 +146,8 @@ void CShopinfo::InitShopinfoByGetshopinfo(rapidjson::Value& data)
 			newDiscount.is_discount = discountinfo["is_discount"].GetString();
 		}
 
+		newDiscount.member_level = discountinfo["vip_level"].GetString();
+
 		m_discount_info.push_back(newDiscount);
 	}
 

+ 1 - 0
zhipuzi_pos_windows/zhipuzi/CShopinfo.h

@@ -22,6 +22,7 @@ public:
 	std::string level_id;
 	std::string discount_value;
 	std::string is_discount;
+	std::string member_level;
 };
 
 class SelfPay