Przeglądaj źródła

点单功能全部开发好了

张洋 4 lat temu
rodzic
commit
b5481fd147
40 zmienionych plików z 313 dodań i 7 usunięć
  1. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-18-20-07-20.dmp
  2. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-25-10-32-09.dmp
  3. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-26-23-57-16.dmp
  4. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-26-23-58-37.dmp
  5. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-27-00-40-59.dmp
  6. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-15-30-59.dmp
  7. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-17-39-32.dmp
  8. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-17-39-34.dmp
  9. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-21-21-44.dmp
  10. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-13-15-35-12.dmp
  11. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-13-15-37-19.dmp
  12. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-18-37-04.dmp
  13. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-18-40-15.dmp
  14. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-18-56-05.dmp
  15. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-20-15-39.dmp
  16. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-21-03-09.dmp
  17. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-17-20-09-46.dmp
  18. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-17-20-11-13.dmp
  19. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-18-12-54-47.dmp
  20. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-18-18-53-47.dmp
  21. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-19-17-43-42.dmp
  22. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-19-23-01-40.dmp
  23. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-20-18-42-33.dmp
  24. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-20-18-42-43.dmp
  25. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-22-19-14-08.dmp
  26. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-23-14-27-33.dmp
  27. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-24-20-03-44.dmp
  28. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-24-20-27-42.dmp
  29. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-00-50-39.dmp
  30. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-12-52-24.dmp
  31. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-17-35-47.dmp
  32. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-22-36-45.dmp
  33. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-28-00-43-55.dmp
  34. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-29-20-09-52.dmp
  35. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-29-20-27-30.dmp
  36. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-30-17-47-09.dmp
  37. 251 5
      zhipuzi_pos_windows/page/CDiandanPageUI.cpp
  38. 5 2
      zhipuzi_pos_windows/page/CDiandanPageUI.h
  39. 54 0
      zhipuzi_pos_windows/tool/CSqlite3.cpp
  40. 3 0
      zhipuzi_pos_windows/tool/CSqlite3.h

BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-18-20-07-20.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-25-10-32-09.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-26-23-57-16.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-26-23-58-37.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-27-00-40-59.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-15-30-59.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-17-39-32.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-17-39-34.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-08-29-21-21-44.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-13-15-35-12.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-13-15-37-19.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-18-37-04.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-18-40-15.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-18-56-05.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-20-15-39.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-16-21-03-09.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-17-20-09-46.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-17-20-11-13.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-18-12-54-47.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-18-18-53-47.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-19-17-43-42.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-19-23-01-40.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-20-18-42-33.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-20-18-42-43.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-22-19-14-08.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-23-14-27-33.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-24-20-03-44.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-24-20-27-42.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-00-50-39.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-12-52-24.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-17-35-47.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-27-22-36-45.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-28-00-43-55.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-29-20-09-52.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-29-20-27-30.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-30-17-47-09.dmp


+ 251 - 5
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -799,7 +799,20 @@ void CDiandanPageUI::HandleTextCapture(std::string content)
 	else
 	{
 		//没有任何弹框,那么就是按扫描商品条码来处理
-		this->SaomiaoBarcode(content);
+		bool ret = this->SaomiaoBarcode(content);
+		if (ret == true)
+		{
+			//已经找到了条码,就不接着处理了
+		}
+		else
+		{
+			//如果没有找到条码,就找一下是不是称重的标签秤的码,这个时候要对码进行各种分析了
+			ret = this->BiaoqianchengSaomaBarcode(content);
+			if (ret == false)
+			{
+				m_pMainWnd->ShowToast(L"该条码对应的商品不存在!");
+			}
+		}
 	}
 }
 
@@ -2944,7 +2957,7 @@ void CDiandanPageUI::UpdateFoodStock(std::string food_stock)
 }
 
 //扫描了商品条码的逻辑处理
-void CDiandanPageUI::SaomiaoBarcode(std::string barcode)
+bool CDiandanPageUI::SaomiaoBarcode(std::string barcode)
 {
 	CSqlite3 sqlite;
 
@@ -2954,8 +2967,7 @@ void CDiandanPageUI::SaomiaoBarcode(std::string barcode)
 	if (ret == false)
 	{
 		//说明没找到对应的商品条码
-		m_pMainWnd->ShowToast(L"未找到对应的商品条码");
-		return;
+		return false;
 	}
 
 	//这里说明找到了,那么处理添加购物车逻辑,扫码的情况下,这里不管有没有属性,都按没属性处理,不管有没有称重都按没称重处理(以后标签秤可能会修改)
@@ -2964,7 +2976,9 @@ void CDiandanPageUI::SaomiaoBarcode(std::string barcode)
 	{
 		//库存为0了,不做任何处理
 		m_pMainWnd->ShowToast(L"该商品已售完");
-		return;
+
+		//只要找到了就返回true
+		return true;
 	}
 
 	CDiandanOrderItem clickItem;
@@ -3027,6 +3041,238 @@ void CDiandanPageUI::SaomiaoBarcode(std::string barcode)
 		//没有新增,而是修改了一项
 		this->UpdateDiandanOrderItemShow(index);
 	}
+
+	return true;
+}
+
+bool CDiandanPageUI::BiaoqianchengSaomaBarcode(std::string barcode)
+{
+	//先根据设置,分辨条码格式
+	std::string bianma;
+	std::string money;
+	std::string weight;
+	std::string jiaoyan;
+
+	std::string setting_tiaomacheng_geshi = CSetting::GetParam("setting_tiaomacheng_geshi");
+	if (setting_tiaomacheng_geshi == "1")
+	{
+		if (barcode.length() == 12)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//13位【FWWWWWWEEEEEC】
+		bianma = barcode.substr(1, 6);
+		money = barcode.substr(7, 5);
+		jiaoyan = barcode.substr(12, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "2")
+	{
+		if (barcode.length() == 12)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//13位【FWWWWWWNNNNNC】
+		bianma = barcode.substr(1, 6);
+		weight = barcode.substr(7, 5);
+		jiaoyan = barcode.substr(12, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "3")
+	{
+		if (barcode.length() == 12)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//13位【FFWWWWWEEEEEC】
+		bianma = barcode.substr(2, 5);
+		money = barcode.substr(7, 5);
+		jiaoyan = barcode.substr(12, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "4")
+	{
+		if (barcode.length() == 12)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//13位【FFWWWWWNNNNNC】
+		bianma = barcode.substr(2, 5);
+		weight = barcode.substr(7, 5);
+		jiaoyan = barcode.substr(12, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "5")
+	{
+		if (barcode.length() == 17)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//18位【FWWWWWWEEEEENNNNNC】
+		bianma = barcode.substr(1, 6);
+		money = barcode.substr(7, 5);
+		weight = barcode.substr(12, 5);
+		jiaoyan = barcode.substr(17, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "6")
+	{
+		if (barcode.length() == 17)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//18位【FWWWWWWNNNNNEEEEEC】
+		bianma = barcode.substr(1, 6);
+		weight = barcode.substr(7, 5);
+		money = barcode.substr(12, 5);
+		jiaoyan = barcode.substr(17, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "7")
+	{
+		if (barcode.length() == 17)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//18位【FFWWWWWEEEEENNNNNC】
+		bianma = barcode.substr(2, 5);
+		money = barcode.substr(7, 5);
+		weight = barcode.substr(12, 5);
+		jiaoyan = barcode.substr(17, 1);
+	}
+	else if (setting_tiaomacheng_geshi == "8")
+	{
+		if (barcode.length() == 17)
+		{
+			barcode = CLewaimaiString::BuZifuLeft(barcode, 1, '0');
+		}
+
+		//18位【FFWWWWWNNNNNEEEEEC】
+		bianma = barcode.substr(2, 5);
+		weight = barcode.substr(7, 5);
+		money = barcode.substr(12, 5);
+		jiaoyan = barcode.substr(17, 1);
+	}
+	
+	//先检查编码是否存在,如果编码不存在直接返回false
+	int i_bianma = atoi(bianma.c_str());
+	if (i_bianma < 1)
+	{
+		return false;
+	}
+	
+	CFood foodinfo;
+
+	CSqlite3 sqlite;
+	bool ret = sqlite.GetFoodByPluBianma(to_string(i_bianma), foodinfo);
+	if (ret == false)
+	{
+		//没找到这个商品
+		return false;
+	}
+
+	//走到这里是找到商品了,那么就开始计算价格和重量
+	double d_money = 0;
+	double d_weight = 0;
+
+	//如果有价格,优先用价格
+	if (money.length() > 0)
+	{
+		//这个出来的单位是分,要把单位转成员
+		d_money = atof(money.c_str());
+
+		d_money = d_money / 100;
+
+		//根据价格计算重量
+		d_weight = d_money / atof(foodinfo.price.c_str());
+	}
+	else if (weight.length() > 0)
+	{
+		//这个单位是克,要转化成千克
+		d_weight = atof(weight.c_str());
+
+		d_weight = d_weight / 1000;
+
+		//有重量了,其实不需要计算价格,价格加到购物车的时候会自己计算
+	}
+	else
+	{
+		//价格和重量都没有,这是异常情况
+		return false;
+	}
+
+	if (foodinfo.stockvalid == "1" && atof(foodinfo.stock.c_str()) < d_weight)
+	{
+		//库存为0了,不做任何处理
+		m_pMainWnd->ShowToast(L"该商品已售完");
+
+		//只要找到了就返回true
+		return true;
+	}
+
+	CDiandanOrderItem clickItem;
+
+	clickItem.food_id = foodinfo.id;
+	clickItem.food_name = foodinfo.name;
+	clickItem.type_id = foodinfo.type_id;
+	clickItem.price = foodinfo.price;
+	clickItem.is_dabao = false;
+	clickItem.dabao_money = foodinfo.dabao_money;
+	clickItem.num = CLewaimaiString::DoubleToString(d_weight, 3); //重量保留3位小数
+
+	if (foodinfo.member_price_used == "1")
+	{
+		clickItem.is_member_price_used = true;
+	}
+	else
+	{
+		clickItem.is_member_price_used = false;
+	}
+
+	//处理会员价的json
+	std::string member_price_json = foodinfo.member_price_json;
+
+	rapidjson::Document document;
+	document.Parse(member_price_json.c_str());
+
+	rapidjson::Value& member_price = document;
+	for (rapidjson::SizeType i = 0; i < member_price.Size(); ++i)
+	{
+		rapidjson::Value& member_price_info = member_price[i];
+
+		MemberPrice newPirce;
+		newPirce.id = member_price_info["id"].GetString();
+		newPirce.level = member_price_info["level"].GetString();
+		newPirce.price = member_price_info["price"].GetString();
+
+		clickItem.m_member_price.push_back(newPirce);
+	}
+
+	//把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
+	clickItem.SetFoodInfo(foodinfo);
+	clickItem.SetIsTaocan(false);
+
+	clickItem.is_weight = true;
+	clickItem.is_nature = false;
+
+	//商品没有商品属性
+	bool is_add_new = false;
+
+	int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
+
+	if (is_add_new)
+	{
+		//说明是新增了一项,要刷新一下购物车展示
+		this->AddDiandanOrderItemShow(index);
+	}
+	else
+	{
+		//没有新增,而是修改了一项
+		this->UpdateDiandanOrderItemShow(index);
+	}
+
+	return true;
 }
 
 //开始搜索某个商品名字

+ 5 - 2
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -162,8 +162,11 @@ public:
 	//支付成功后,更新商品库存
 	void UpdateFoodStock(std::string food_stock);
 
-	//扫描了商品条码的逻辑处理
-	void SaomiaoBarcode(std::string barcode);
+	//扫描了商品条码的逻辑处理,如果找到了这个条码的商品就返回true,如果没找到就返回false
+	bool SaomiaoBarcode(std::string barcode);
+
+	//判断是不是标签秤的条码,并进行处理,返回true表示是标签秤的条码,返回false表示不是
+	bool BiaoqianchengSaomaBarcode(std::string barcode);
 
 	//开始搜索某个商品名字
 	void StartSearchFood(std::string foodname);

+ 54 - 0
zhipuzi_pos_windows/tool/CSqlite3.cpp

@@ -1444,6 +1444,60 @@ bool CSqlite3::GetFoodByBarcode(std::string barcode, CFood& newFood)
 	return is_found;
 }
 
+bool CSqlite3::GetFoodByPluBianma(std::string barcode, CFood& newFood)
+{
+	bool is_found = false;
+
+	std::string sql = "SELECT * FROM pos_food WHERE is_weight = '1' AND weight_food_code = '" + barcode + "'";
+
+	sqlite3_stmt * stmt = NULL;
+
+	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+	{
+		while (sqlite3_step(stmt) == SQLITE_ROW)
+		{
+			is_found = true;
+
+			newFood.id = (char*)sqlite3_column_text(stmt, 0);
+			newFood.shop_id = (char*)sqlite3_column_text(stmt, 1);
+			newFood.name = (char*)sqlite3_column_text(stmt, 2);
+			newFood.price = (char*)sqlite3_column_text(stmt, 3);
+			newFood.tag = (char*)sqlite3_column_text(stmt, 4);
+			newFood.status = (char*)sqlite3_column_text(stmt, 5);
+			newFood.type_id = (char*)sqlite3_column_text(stmt, 6);
+			newFood.is_dabao = (char*)sqlite3_column_text(stmt, 7);
+			newFood.dabao_money = (char*)sqlite3_column_text(stmt, 8);
+			newFood.is_nature = (char*)sqlite3_column_text(stmt, 9);
+			newFood.nature = (char*)sqlite3_column_text(stmt, 10);
+			newFood.autostocknum = (char*)sqlite3_column_text(stmt, 11);
+			newFood.goods_img = (char*)sqlite3_column_text(stmt, 12);
+			newFood.unit = (char*)sqlite3_column_text(stmt, 13);
+			newFood.barcode = (char*)sqlite3_column_text(stmt, 14);
+			newFood.member_price_used = (char*)sqlite3_column_text(stmt, 15);
+			newFood.member_price = (char*)sqlite3_column_text(stmt, 16);
+			newFood.buying_price = (char*)sqlite3_column_text(stmt, 17);
+			newFood.stock = (char*)sqlite3_column_text(stmt, 18);
+			newFood.stockvalid = (char*)sqlite3_column_text(stmt, 19);
+			newFood.stock_warning = (char*)sqlite3_column_text(stmt, 20);
+			newFood.is_shouyinji_show = (char*)sqlite3_column_text(stmt, 21);
+			newFood.expiration_date = (char*)sqlite3_column_text(stmt, 22);
+			newFood.is_weight = (char*)sqlite3_column_text(stmt, 23);
+			newFood.weight_plu_code = (char*)sqlite3_column_text(stmt, 24);
+			newFood.weight_food_code = (char*)sqlite3_column_text(stmt, 25);
+			newFood.member_price_json = (char*)sqlite3_column_text(stmt, 26);
+		}
+
+		sqlite3_finalize(stmt);
+	}
+	else
+	{
+		//异常情况
+		sqlite3_finalize(stmt);
+	}
+
+	return is_found;
+}
+
 //更新商品ID的库存
 void CSqlite3::UpdateFoodStock(std::string food_id, std::string stock)
 {

+ 3 - 0
zhipuzi_pos_windows/tool/CSqlite3.h

@@ -59,6 +59,9 @@ public:
 	//通过商品条码查找商品,如果找到返回true,找不到返回false
 	bool GetFoodByBarcode(std::string barcode, CFood& newFood);
 
+	//通过PLU商品编码查找商品,如果找到返回true,找不到返回false
+	bool GetFoodByPluBianma(std::string barcode, CFood& newFood);
+
 	//更新商品ID的库存
 	void UpdateFoodStock(std::string food_id, std::string stock);
 private: