Commit fc7bfe9f by guanghui.cui

套餐菜单缓存

parent c345f981
...@@ -70,6 +70,7 @@ struct TakeawayOrder ...@@ -70,6 +70,7 @@ struct TakeawayOrder
struct PrinterMenu struct PrinterMenu
{ {
std::string strMenuId; //菜品ID std::string strMenuId; //菜品ID
std::string strMenuName; //菜品名称
int iPrinterId; //打印机ID(厨房) int iPrinterId; //打印机ID(厨房)
std::string strDevice; //打印机端口(厨房) std::string strDevice; //打印机端口(厨房)
int iBaud; //波特率(厨房) int iBaud; //波特率(厨房)
...@@ -89,4 +90,11 @@ struct PrintDevice ...@@ -89,4 +90,11 @@ struct PrintDevice
std::string strTitle; //打印标题 std::string strTitle; //打印标题
}; };
//套餐中 单项菜品属性
struct SetMenuItem
{
std::string strMenuId; //菜品id
int num; //数量
};
#endif #endif
\ No newline at end of file
#ifndef IOPERATION_H #ifndef IOPERATION_H
#define IOPERATION_H #define IOPERATION_H
#include <iostream> #include <iostream>
#include <map>
#include "BaseDefine.h" #include "BaseDefine.h"
#include "CommonStruct.h" #include "CommonStruct.h"
...@@ -49,6 +50,9 @@ public: ...@@ -49,6 +50,9 @@ public:
//获取POS菜单 //获取POS菜单
virtual std::vector<PrinterMenu>& GetPOSMenu()=0; virtual std::vector<PrinterMenu>& GetPOSMenu()=0;
//获取套餐信息(套餐包含项目)
virtual std::map<std::string, std::vector<SetMenuItem>>& GetSetMenu()=0;
}; };
#ifdef WIN32 #ifdef WIN32
......
...@@ -516,6 +516,7 @@ bool COrderInfo::GetMenuPrinter() ...@@ -516,6 +516,7 @@ bool COrderInfo::GetMenuPrinter()
{ {
LOG(INFO)<<"---------------------get printer service--------------------"; LOG(INFO)<<"---------------------get printer service--------------------";
vecPrinterMenus.clear(); vecPrinterMenus.clear();
vecSetMenu.clear();
std::vector<PrintDevice> vecDevices; std::vector<PrintDevice> vecDevices;
int nErrCode=0; int nErrCode=0;
...@@ -570,11 +571,12 @@ bool COrderInfo::GetMenuPrinter() ...@@ -570,11 +571,12 @@ bool COrderInfo::GetMenuPrinter()
//查询菜单数据 //查询菜单数据
//PrintQ1:厨房打印机 PrintQ5:上菜单打印机 //PrintQ1:厨房打印机 PrintQ5:上菜单打印机
sprintf(mysql->sqlStr,"%s","SELECT Item,PrintQ1,PrintQ5 FROM tbl_Menu;"); sprintf(mysql->sqlStr,"%s","SELECT Item,PrintQ1,PrintQ5,Name3,IsSetMenu FROM tbl_Menu;");
nErrCode = mysql->query(); nErrCode = mysql->query();
while ((mysql->_row = mysql_fetch_row(mysql->_result)) != NULL){ while ((mysql->_row = mysql_fetch_row(mysql->_result)) != NULL){
PrinterMenu menu; PrinterMenu menu;
menu.strMenuId=mysql->_row[0]; menu.strMenuId=mysql->_row[0];
menu.strMenuName=mysql->_row[3];
menu.iPrinterId=atoi(mysql->_row[1]); menu.iPrinterId=atoi(mysql->_row[1]);
for(auto dev:vecDevices){ for(auto dev:vecDevices){
if(menu.iPrinterId==dev.iPrintQ){ if(menu.iPrinterId==dev.iPrintQ){
...@@ -595,6 +597,11 @@ bool COrderInfo::GetMenuPrinter() ...@@ -595,6 +597,11 @@ bool COrderInfo::GetMenuPrinter()
} }
} }
vecPrinterMenus.push_back(menu); vecPrinterMenus.push_back(menu);
//如果是套餐,id存入vecSetMenu
int setMenu=atoi(mysql->_row[4]);
if(1==setMenu)
vecSetMenu.push_back(menu.strMenuId);
} }
mysql_free_result(mysql->_result); mysql_free_result(mysql->_result);
if(nErrCode==-1) if(nErrCode==-1)
...@@ -612,6 +619,25 @@ std::vector<PrinterMenu>& COrderInfo::GetPOSMenu() ...@@ -612,6 +619,25 @@ std::vector<PrinterMenu>& COrderInfo::GetPOSMenu()
return vecPrinterMenus; return vecPrinterMenus;
} }
std::map<std::string, std::vector<SetMenuItem>>& COrderInfo::GetSetMenu()
{
mapSetMenu.clear();
for(auto id:vecSetMenu){
std::vector<SetMenuItem> vecItem;
snprintf(mysql->sqlStr,SQL_BUFFER_SIZE,"SELECT ChildItem,UnitQty FROM tbl_SetMenu WHERE ParentItem='%s';",id.data());
mysql->query();
while ((mysql->_row = mysql_fetch_row(mysql->_result)) != NULL){
SetMenuItem item;
item.strMenuId=mysql->_row[0];
item.num=atoi(mysql->_row[1]);
vecItem.push_back(item);
}
mysql_free_result(mysql->_result);
mapSetMenu.insert(make_pair(id,vecItem));
}
return mapSetMenu;
}
void COrderInfo::CleanOldData() void COrderInfo::CleanOldData()
{ {
sprintf(mysql->sqlStr,"%s","DELETE FROM fmTakeaway WHERE insert_time < DATE_SUB(CURDATE(),INTERVAL 6 MONTH);"); sprintf(mysql->sqlStr,"%s","DELETE FROM fmTakeaway WHERE insert_time < DATE_SUB(CURDATE(),INTERVAL 6 MONTH);");
......
...@@ -68,6 +68,8 @@ public: ...@@ -68,6 +68,8 @@ public:
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
std::vector<PrinterMenu>& GetPOSMenu(); std::vector<PrinterMenu>& GetPOSMenu();
//获取套餐信息
std::map<std::string, std::vector<SetMenuItem>>& GetSetMenu();
std::string m_FMPay; std::string m_FMPay;
...@@ -81,6 +83,8 @@ private: ...@@ -81,6 +83,8 @@ private:
std::vector<fmPOSType> vecPayTypes; //非码-商户 支付类型对应表 std::vector<fmPOSType> vecPayTypes; //非码-商户 支付类型对应表
std::vector<fmPOSType> vecTakewayTypes; //非码-商户 外卖类型对应表 std::vector<fmPOSType> vecTakewayTypes; //非码-商户 外卖类型对应表
std::vector<PrinterMenu> vecPrinterMenus; //菜单-打印机 类型对应表 std::vector<PrinterMenu> vecPrinterMenus; //菜单-打印机 类型对应表
std::vector<std::string> vecSetMenu; //菜单中是套餐的项目
std::map<std::string, std::vector<SetMenuItem>> mapSetMenu; //套餐(key:套餐id、value:套餐条目)
char* UTF8ToLatin1(const char *str); char* UTF8ToLatin1(const char *str);
void CleanOldData(); //清理超过六个月数据 void CleanOldData(); //清理超过六个月数据
......
...@@ -330,10 +330,11 @@ void *FunTakeaway(void* lpParamter) ...@@ -330,10 +330,11 @@ void *FunTakeaway(void* lpParamter)
else if(order.fm_cmd == "get_menu"){ else if(order.fm_cmd == "get_menu"){
LOG(INFO)<<"------get pos menu------"; LOG(INFO)<<"------get pos menu------";
std::vector<PrinterMenu> &vecMenu = dbOperation->GetPOSMenu(); std::vector<PrinterMenu> &vecMenu = dbOperation->GetPOSMenu();
std::map<std::string, std::vector<SetMenuItem>> &mapSetMenu = dbOperation->GetSetMenu();
// for(auto menu:vecMenu){ // for(auto menu:vecMenu){
// LOG(INFO)<<"idMenu"<<menu.idMenu<<" idPrinter:"<<menu.idPrinter<<" device:"<<menu.device; // LOG(INFO)<<"idMenu"<<menu.idMenu<<" idPrinter:"<<menu.idPrinter<<" device:"<<menu.device;
// } // }
std::string resJson = GetPOSMenuJson(vecMenu); std::string resJson = GetPOSMenuJson(vecMenu,mapSetMenu);
//LOG(INFO)<<"res JOSN"<<resJson.data(); //LOG(INFO)<<"res JOSN"<<resJson.data();
// statusCode=1001; // statusCode=1001;
// msg="hello world"; // msg="hello world";
......
...@@ -202,7 +202,7 @@ std::string GetTakeawayResultJson(const int statuscode,const char* msg) ...@@ -202,7 +202,7 @@ std::string GetTakeawayResultJson(const int statuscode,const char* msg)
return buffer.GetString(); return buffer.GetString();
} }
std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu) std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu,std::map<std::string, std::vector<SetMenuItem>> &mapSetMenu)
{ {
rapidjson::Document document; rapidjson::Document document;
document.SetObject(); document.SetObject();
...@@ -214,6 +214,7 @@ std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu) ...@@ -214,6 +214,7 @@ std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu)
rapidjson::Value obj(rapidjson::kObjectType); rapidjson::Value obj(rapidjson::kObjectType);
obj.AddMember("iPrinterId", vecMenu[i].iPrinterId, allocator); obj.AddMember("iPrinterId", vecMenu[i].iPrinterId, allocator);
obj.AddMember("strMenuId", rapidjson::Value(vecMenu[i].strMenuId.c_str(), document.GetAllocator()), allocator); obj.AddMember("strMenuId", rapidjson::Value(vecMenu[i].strMenuId.c_str(), document.GetAllocator()), allocator);
obj.AddMember("strMenuName", rapidjson::Value(vecMenu[i].strMenuName.c_str(), document.GetAllocator()), allocator);
obj.AddMember("strDevice", rapidjson::Value(vecMenu[i].strDevice.c_str(), document.GetAllocator()), allocator); obj.AddMember("strDevice", rapidjson::Value(vecMenu[i].strDevice.c_str(), document.GetAllocator()), allocator);
obj.AddMember("iBaud", vecMenu[i].iBaud, allocator); obj.AddMember("iBaud", vecMenu[i].iBaud, allocator);
obj.AddMember("strTitle", rapidjson::Value(vecMenu[i].strTitle.c_str(), document.GetAllocator()), allocator); obj.AddMember("strTitle", rapidjson::Value(vecMenu[i].strTitle.c_str(), document.GetAllocator()), allocator);
...@@ -226,6 +227,31 @@ std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu) ...@@ -226,6 +227,31 @@ std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu)
document.AddMember("MenuList", arrayJson, allocator); document.AddMember("MenuList", arrayJson, allocator);
//套餐转换为JSON
//{"SetMenuMap":[{"strSetMenuId":"123456","arrayItems":[{"strMenuId":"2356","iNum":1},{}},{}]}
rapidjson::Value arraySetMenu(rapidjson::kArrayType);
std::map<std::string, std::vector<SetMenuItem>>::iterator iter;
LOG(INFO) << "set menu start";
for(iter=mapSetMenu.begin();iter!=mapSetMenu.end();iter++){
rapidjson::Value obj(rapidjson::kObjectType);
obj.AddMember("strSetMenuId", rapidjson::Value(iter->first.c_str(), document.GetAllocator()), allocator);
rapidjson::Value arrayMenu(rapidjson::kArrayType);
for(auto menu:iter->second){
rapidjson::Value objMenu(rapidjson::kObjectType);
objMenu.AddMember("strMenuId", rapidjson::Value(menu.strMenuId.c_str(), document.GetAllocator()), allocator);
objMenu.AddMember("iNum", menu.num, allocator);
arrayMenu.PushBack(objMenu, allocator);
}
obj.AddMember("arrayItems", arrayMenu, allocator);
arraySetMenu.PushBack(obj, allocator);
//cout<<"| "<<iter->first<<" | "<<iter->second<<" |"<<endl;
}
document.AddMember("SetMenuMap", arraySetMenu, allocator);
rapidjson::StringBuffer buffer; rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
document.Accept(writer); document.Accept(writer);
......
#ifndef JSON_H #ifndef JSON_H
#define JSON_H #define JSON_H
#include <map>
#include "rapidjsonheader.h" #include "rapidjsonheader.h"
#include "../base/CommonStruct.h" #include "../base/CommonStruct.h"
...@@ -14,6 +15,6 @@ bool GetTakeawayOrder(const char* json, TakeawayOrder &order); ...@@ -14,6 +15,6 @@ bool GetTakeawayOrder(const char* json, TakeawayOrder &order);
//获取外卖订单返回结果的json字串 //获取外卖订单返回结果的json字串
std::string GetTakeawayResultJson(const int statuscode,const char* msg); std::string GetTakeawayResultJson(const int statuscode,const char* msg);
std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu); std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu,std::map<std::string, std::vector<SetMenuItem>> &mapSetMenu);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment