Commit fc7bfe9f by guanghui.cui

套餐菜单缓存

parent c345f981
......@@ -70,6 +70,7 @@ struct TakeawayOrder
struct PrinterMenu
{
std::string strMenuId; //菜品ID
std::string strMenuName; //菜品名称
int iPrinterId; //打印机ID(厨房)
std::string strDevice; //打印机端口(厨房)
int iBaud; //波特率(厨房)
......@@ -89,4 +90,11 @@ struct PrintDevice
std::string strTitle; //打印标题
};
//套餐中 单项菜品属性
struct SetMenuItem
{
std::string strMenuId; //菜品id
int num; //数量
};
#endif
\ No newline at end of file
#ifndef IOPERATION_H
#define IOPERATION_H
#include <iostream>
#include <map>
#include "BaseDefine.h"
#include "CommonStruct.h"
......@@ -49,6 +50,9 @@ public:
//获取POS菜单
virtual std::vector<PrinterMenu>& GetPOSMenu()=0;
//获取套餐信息(套餐包含项目)
virtual std::map<std::string, std::vector<SetMenuItem>>& GetSetMenu()=0;
};
#ifdef WIN32
......
......@@ -516,6 +516,7 @@ bool COrderInfo::GetMenuPrinter()
{
LOG(INFO)<<"---------------------get printer service--------------------";
vecPrinterMenus.clear();
vecSetMenu.clear();
std::vector<PrintDevice> vecDevices;
int nErrCode=0;
......@@ -570,11 +571,12 @@ bool COrderInfo::GetMenuPrinter()
//查询菜单数据
//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();
while ((mysql->_row = mysql_fetch_row(mysql->_result)) != NULL){
PrinterMenu menu;
menu.strMenuId=mysql->_row[0];
menu.strMenuName=mysql->_row[3];
menu.iPrinterId=atoi(mysql->_row[1]);
for(auto dev:vecDevices){
if(menu.iPrinterId==dev.iPrintQ){
......@@ -595,6 +597,11 @@ bool COrderInfo::GetMenuPrinter()
}
}
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);
if(nErrCode==-1)
......@@ -612,6 +619,25 @@ std::vector<PrinterMenu>& COrderInfo::GetPOSMenu()
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()
{
sprintf(mysql->sqlStr,"%s","DELETE FROM fmTakeaway WHERE insert_time < DATE_SUB(CURDATE(),INTERVAL 6 MONTH);");
......
......@@ -68,6 +68,8 @@ public:
//////////////////////////////////////////////////////////////////////////
std::vector<PrinterMenu>& GetPOSMenu();
//获取套餐信息
std::map<std::string, std::vector<SetMenuItem>>& GetSetMenu();
std::string m_FMPay;
......@@ -81,6 +83,8 @@ private:
std::vector<fmPOSType> vecPayTypes; //非码-商户 支付类型对应表
std::vector<fmPOSType> vecTakewayTypes; //非码-商户 外卖类型对应表
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);
void CleanOldData(); //清理超过六个月数据
......
......@@ -330,10 +330,11 @@ void *FunTakeaway(void* lpParamter)
else if(order.fm_cmd == "get_menu"){
LOG(INFO)<<"------get pos menu------";
std::vector<PrinterMenu> &vecMenu = dbOperation->GetPOSMenu();
std::map<std::string, std::vector<SetMenuItem>> &mapSetMenu = dbOperation->GetSetMenu();
// for(auto menu:vecMenu){
// 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();
// statusCode=1001;
// msg="hello world";
......
......@@ -202,7 +202,7 @@ std::string GetTakeawayResultJson(const int statuscode,const char* msg)
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;
document.SetObject();
......@@ -214,6 +214,7 @@ std::string GetPOSMenuJson(std::vector<PrinterMenu> &vecMenu)
rapidjson::Value obj(rapidjson::kObjectType);
obj.AddMember("iPrinterId", vecMenu[i].iPrinterId, 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("iBaud", vecMenu[i].iBaud, 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)
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::Writer<rapidjson::StringBuffer> writer(buffer);
document.Accept(writer);
......
#ifndef JSON_H
#define JSON_H
#include <map>
#include "rapidjsonheader.h"
#include "../base/CommonStruct.h"
......@@ -14,6 +15,6 @@ bool GetTakeawayOrder(const char* json, TakeawayOrder &order);
//获取外卖订单返回结果的json字串
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
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