-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorder_system.hpp
More file actions
280 lines (274 loc) · 7.43 KB
/
order_system.hpp
File metadata and controls
280 lines (274 loc) · 7.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<mysql/mysql.h>
#include<jsoncpp/json/json.h>
#define MYSQL_SERVER "127.0.0.1"
#define MYSQL_USER "root"
#define MYSQL_PASSWD "123456"
#define MYSQL_DB "db_order_sys"
namespace _order_sys
{
extern void MysqlDestroy(MYSQL* mysql);
//mysql初始化
MYSQL* MysqlInit()
{
MYSQL* mysql=NULL;
//初始化句柄
mysql=mysql_init(NULL);
if(mysql==NULL)
{
printf("mysql init error\n");
return NULL;
}
//连接服务器
if(mysql_real_connect(mysql, MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWD, MYSQL_DB, 0, NULL, 0) == NULL)
{
printf("connect mysql server failed:%s\n",mysql_error(mysql));
MysqlDestroy(mysql);
return NULL;
}
//设置客户端字符集
if(mysql_set_character_set(mysql,"utf8") != 0)
{
printf("set mysql client character failed:%n", mysql_error(mysql));
MysqlDestroy(mysql);
return NULL;
}
return mysql;
}
//mysql销毁
void MysqlDestroy(MYSQL* mysql)
{
if(mysql != NULL)
{
mysql_close(mysql);
}
return ;
}
//mysql执行语句
bool MysqlQuery(MYSQL* mysql, const std::string &sql)
{
int ret = mysql_query(mysql,sql.c_str());
if(ret != 0)
{
printf("sql:[%s] query failed:%s\n",sql.c_str(),mysql_error(mysql));
return false;
}
return true;
}
class DishTable
{
public:
DishTable(MYSQL* mysql):_mysql(mysql)
{}
bool Insert(const Json::Value &dish)
{
#define DISH_INSERT "insert into tb_dishes(id,name,price,uptime) values(null,'%s',%d,now());"
char buf[4096]={0};
sprintf(buf,DISH_INSERT,dish["name"].asCString(),dish["price"].asInt());
if(MysqlQuery(_mysql,buf)==false)
{
return true;
}
}
bool SelectOne(const int dish_id, Json::Value* dish)
{
#define DISH_SELECTONE "select name,price,uptime from tb_dishes where id=%d;"
char buf[4096]={0};
sprintf(buf,DISH_SELECTONE,dish_id);
if(MysqlQuery(_mysql,buf) == false)
{
return false;
}
MYSQL_RES* res = mysql_store_result(_mysql);
if(res == NULL)
{
printf("store one dish result failed:%s\n",mysql_error(_mysql));
return false;
}
int num_row = mysql_num_rows(res);
if(num_row != 1)
{
printf("one dish result errror\n");
return false;
}
for(int i = 0;i < num_row; i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
(*dish)["id"] = dish_id;
(*dish)["name"] = row[0];
(*dish)["price"] = std::stoi(row[1]);
(*dish)["uptime"] = row[2];
}
mysql_free_result(res);
return true;
}
bool SelectAll(Json::Value* dishes)
{
#define DISH_SELECTALL "select id,name,price,uptime from tb_dishes;"
if(MysqlQuery(_mysql, DISH_SELECTALL) == false)
{
return false;
}
MYSQL_RES* res = mysql_store_result(_mysql);
if(res == NULL)
{
printf("store all dish result failed:%s\n",mysql_error(_mysql));
return false;
}
int num_rows = mysql_num_rows(res);
for(int i = 0; i < num_rows; i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
Json::Value dish_val;
dish_val["id"] = std::stoi(row[0]);
dish_val["name"] = row[1];
dish_val["price"] = std::stoi(row[2]);
dish_val["uptime"] = row[3];
dishes->append(dish_val);
}
mysql_free_result(res);
return true;
}
bool Update(const Json::Value &dish)
{
#define DISH_UPDATE "update tb_dishes set name='%s', price=%d,uptime=now() where id=%d;"
char buf[4096] = {0};
sprintf(buf, DISH_UPDATE, dish["name"].asCString(), dish["price"].asInt(), dish["id"].asInt());
if(MysqlQuery(_mysql, buf) == false)
{
return false;
}
return true;
}
bool Delete(const int dish_id)
{
#define DISH_DELETE "delete from tb_dishes where id=%d;"
char buf[4096] = {0};
sprintf(buf,DISH_DELETE, dish_id);
if(MysqlQuery(_mysql, buf) == false)
{
return false;
}
return true;
}
private:
MYSQL* _mysql;
};
class OrderTable
{
public:
OrderTable(MYSQL* mysql):_mysql(mysql)
{}
bool Insert(const Json::Value &order)
{
#define ORDER_INSERT "insert into tb_orders(id, table_id, dishes, status, uptime) values(\
null, %d ,'%s', %d, now());"
char buf[4096] = {0};
Json::FastWriter writer;
std::string dishes = writer.write(order["dishes"]);
sprintf(buf, ORDER_INSERT, order["table_id"].asInt(), dishes.c_str(), order["status"].asInt());
if(MysqlQuery(_mysql, buf) == false)
{
return false;
}
return true;
}
bool SelectOne(const int order_id, Json::Value* order)
{
#define ORDER_SELECTONE "select table_id, dishes, status, uptime from tb_orders where id=%d;"
char buf[4096] = {0};
sprintf(buf, ORDER_SELECTONE, order_id);
if(MysqlQuery(_mysql, buf) == false)
{
return false;
}
MYSQL_RES* res = mysql_store_result(_mysql);
if(res == NULL)
{
printf("store one order result failed:%s\n",mysql_error(_mysql));
return false;
}
int num_rows = mysql_num_rows(res);
if(num_rows != 1)
{
printf("one order result error\n");
return false;
}
for(int i = 0; i < num_rows; i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
(*order)["id"] = order_id;//订单id
(*order)["table_id"] = std::stoi(row[0]);//订单桌号
Json::Value dishes;
Json::Reader reader;
reader.parse(row[1], dishes);//菜品信息的json数组对象
(*order)["dishes"] = dishes;//菜品信息的json数组
(*order)["status"] = std::stoi(row[2]);//订单信息
(*order)["uptime"] = row[3];//更新时间
}
mysql_free_result(res);
}
bool SelectAll(Json::Value* orders)
{
#define ORDER_SELECTALL "select id, table_id, dishes, status, uptime from tb_orders;"
if(MysqlQuery(_mysql, ORDER_SELECTALL) == false)
{
return false;
}
MYSQL_RES* res = mysql_store_result(_mysql);
if(res == NULL)
{
printf("store all order result failed:%s\n",mysql_error(_mysql));
return false;
}
int num_rows = mysql_num_rows(res);
for(int i = 0; i < num_rows; i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
Json::Value order_val;
order_val["id"] = std::stoi(row[0]);//订单id
order_val["table_id"] = std::stoi(row[1]);//订单桌号
Json::Value dishes;
Json::Reader reader;
reader.parse(row[2], dishes);//菜品信息的json数组对象
order_val["dishes"] = dishes;//菜品信息的json数组
order_val["status"] = std::stoi(row[3]);//订单信息
order_val["uptime"] = row[4];//更新时间
orders->append(order_val);
}
mysql_free_result(res);
return true;
}
bool Update(const Json::Value &order)
{
#define ORDER_UPDATE "update tb_orders set table_id=%d, dishes='%s', status=%d,\
uptime=now() where id=%d;"
Json::Value dishes = order["dishes"];
Json::FastWriter writer;
std::string str_dishes = writer.write(dishes);
char buf[4096] = {0};
sprintf(buf, ORDER_UPDATE, order["table_id"].asInt(), str_dishes.c_str(),order["status"].asInt(), order["id"].asInt());
if(MysqlQuery(_mysql, buf) == false)
{
return false;
}
return true;
}
bool Delete(const int order_id)
{
#define ORDER_DELETE "delete from tb_orders where id=%d;"
char buf[4096] = {0};
sprintf(buf,ORDER_DELETE, order_id);
if(MysqlQuery(_mysql, buf) == false)
{
return false;
}
return true;
}
private:
MYSQL* _mysql;
};
}