CWaimaiOrder.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. #include "../pch/pch.h"
  2. #include "CWaimaiOrder.h"
  3. CWaimaiOrder::CWaimaiOrder()
  4. {
  5. }
  6. CWaimaiOrder::~CWaimaiOrder()
  7. {
  8. }
  9. //通过订单ID,获取订单详情
  10. bool CWaimaiOrder::InitData(std::string order_id, std::string order_no)
  11. {
  12. std::map<string, string> params;
  13. params["id"] = order_id;
  14. params["order_no"] = order_no;
  15. std::string response;
  16. bool ret = CLewaimaiHttpClient::Request("/order/getorderrow", params, response);
  17. if (!ret)
  18. {
  19. LOG_INFO("网络请求出错");
  20. return false;
  21. }
  22. rapidjson::Document document;
  23. document.Parse(response.c_str());
  24. if (document.HasParseError())
  25. {
  26. LOG_INFO("parse response error!");
  27. return false;
  28. }
  29. else
  30. {
  31. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  32. {
  33. LOG_INFO("json error!");
  34. return false;
  35. }
  36. rapidjson::Value& v_errcode = document["errcode"];
  37. int errcode = v_errcode.GetInt();
  38. if (errcode != 0)
  39. {
  40. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  41. return false;
  42. }
  43. {
  44. //获得数据成功
  45. rapidjson::Value& data = document["data"];
  46. m_order_id = CLewaimaiJson::ToString(data["id"]);
  47. m_shop_id = CLewaimaiJson::ToString(data["shop_id"]);
  48. m_restaurant_number = CLewaimaiJson::ToString(data["restaurant_number"]);
  49. m_customer_id = CLewaimaiJson::ToString(data["customer_id"]);
  50. m_customer_name = CLewaimaiJson::ToString(data["customer_name"]);
  51. m_phone = CLewaimaiJson::ToString(data["phone"]);
  52. m_address = CLewaimaiJson::ToString(data["address"]);
  53. m_memo = CLewaimaiJson::ToString(data["memo"]);
  54. m_pay_type = CLewaimaiJson::ToString(data["pay_type"]);
  55. m_promotion = CLewaimaiJson::ToString(data["promotion"]);
  56. m_is_member_discount = CLewaimaiJson::ToString(data["is_member_discount"]);
  57. m_member_discount = CLewaimaiJson::ToString(data["member_discount"]);
  58. m_discount = atof(CLewaimaiJson::ToString(data["discount"]).c_str());
  59. m_coupon = atof(CLewaimaiJson::ToString(data["coupon"]).c_str());
  60. m_delivery = atof(CLewaimaiJson::ToString(data["delivery"]).c_str());
  61. m_price = atof(CLewaimaiJson::ToString(data["price"]).c_str());
  62. m_order_date = CLewaimaiJson::ToString(data["order_date"]);
  63. m_order_status = CLewaimaiJson::ToString(data["order_status"]);
  64. m_courier_id = CLewaimaiJson::ToString(data["courier_id"]);
  65. m_is_selftake = CLewaimaiJson::ToString(data["is_selftake"]);
  66. m_delivery_mode = CLewaimaiJson::ToString(data["delivery_mode"]);
  67. m_is_dabao = CLewaimaiJson::ToString(data["is_dabao"]);
  68. m_dabao_money = CLewaimaiJson::ToString(data["dabao_money"]);
  69. m_order_num = CLewaimaiJson::ToString(data["order_num"]);
  70. m_from_type = CLewaimaiJson::ToString(data["from_type"]);
  71. m_is_refund = CLewaimaiJson::ToString(data["is_refund"]);
  72. m_refund_status = CLewaimaiJson::ToString(data["refund_status"]);
  73. m_is_pickup = CLewaimaiJson::ToString(data["is_pickup"]);
  74. m_pickup_time = CLewaimaiJson::ToString(data["pickup_time"]);
  75. m_refund_failed_reason = CLewaimaiJson::ToString(data["refund_failed_reason"]);
  76. m_refund_time = CLewaimaiJson::ToString(data["refund_time"]);
  77. m_failed_reason = CLewaimaiJson::ToString(data["failed_reason"]);
  78. m_configmemo = CLewaimaiJson::ToString(data["configmemo"]);
  79. m_courier_name = CLewaimaiJson::ToString(data["courier_name"]);
  80. m_courier_phone = CLewaimaiJson::ToString(data["courier_phone"]);
  81. m_order_no = CLewaimaiJson::ToString(data["order_no"]);
  82. m_is_firstcut = CLewaimaiJson::ToString(data["is_firstcut"]);
  83. m_firstcut_value = CLewaimaiJson::ToString(data["firstcut_value"]);
  84. m_need_to_refund = CLewaimaiJson::ToString(data["need_to_refund"]);
  85. m_shop_name = CLewaimaiJson::ToString(data["shop_name"]);
  86. m_longitude = CLewaimaiJson::ToString(data["longitude"]);
  87. m_latitude = CLewaimaiJson::ToString(data["latitude"]);
  88. m_open_selftake = CLewaimaiJson::ToString(data["open_selftake"]);
  89. m_delivery_date = CLewaimaiJson::ToString(data["delivery_date"]);
  90. m_showordernum = CLewaimaiJson::ToString(data["showordernum"]);
  91. m_customer_order_total = CLewaimaiJson::ToString(data["customer_order_total"]);
  92. m_printer_tip_name = CLewaimaiJson::ToString(data["printer_tip_name"]);
  93. m_is_book = CLewaimaiJson::ToString(data["is_book"]);
  94. m_is_upstairs = CLewaimaiJson::ToString(data["spread_info"]["is_upstairs"]);
  95. m_is_delivery_upstairs = CLewaimaiJson::ToString(data["spread_info"]["is_delivery_upstairs"]);
  96. //开始保存订单详情
  97. rapidjson::Value& v_rows = data["order_item"];
  98. for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
  99. {
  100. rapidjson::Value& v_row_i = v_rows[i];
  101. CWaimaiOrderItem newItem;
  102. newItem.m_food_name = CLewaimaiJson::ToString(v_row_i["food_name"]);
  103. newItem.m_item_price = CLewaimaiJson::ToString(v_row_i["item_price"]);
  104. newItem.m_quantity = CLewaimaiJson::ToString(v_row_i["quantity"]);
  105. newItem.m_type_id = CLewaimaiJson::ToString(v_row_i["type_id"]);
  106. newItem.m_foodpackage_id = CLewaimaiJson::ToString(v_row_i["foodpackage_id"]);
  107. newItem.m_is_foodpackage = CLewaimaiJson::ToString(v_row_i["is_foodpackage"]);
  108. newItem.m_pocket_id = CLewaimaiJson::ToString(v_row_i["pocket_id"]);
  109. m_order_items.push_back(newItem);
  110. }
  111. this->UpdateKoudaiItems();
  112. //开始保存预设选项
  113. v_rows = data["order_field"];
  114. for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
  115. {
  116. rapidjson::Value& v_row_i = v_rows[i];
  117. CWaimaiOrderField newItem;
  118. newItem.name = CLewaimaiJson::ToString(v_row_i["name"]);
  119. newItem.value = CLewaimaiJson::ToString(v_row_i["value"]);
  120. m_order_field.push_back(newItem);
  121. }
  122. //开始保存增值服务费
  123. v_rows = data["addservice"];
  124. for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
  125. {
  126. rapidjson::Value& v_row_i = v_rows[i];
  127. CWaimaiOrderField newItem;
  128. newItem.name = CLewaimaiJson::ToString(v_row_i["name"]);
  129. newItem.value = CLewaimaiJson::ToString(v_row_i["value"]);
  130. m_addservie.push_back(newItem);
  131. }
  132. m_show_qiangdan_qrcode = CLewaimaiJson::ToString(data["show_qiangdan_qrcode"]);
  133. m_manzeng_name = CLewaimaiJson::ToString(data["manzeng_name"]);
  134. m_show_whole_phone = CLewaimaiJson::ToString(data["show_whole_phone"]);
  135. m_is_apply_refund = CLewaimaiJson::ToString(data["is_apply_refund"]);
  136. if (m_is_apply_refund == "1")
  137. {
  138. m_refund_reason_first = CLewaimaiJson::ToString(data["refundInfo"]["first_refund_reason"]);
  139. m_refund_info_status = CLewaimaiJson::ToString(data["refundInfo"]["refund_status"]);
  140. }
  141. }
  142. }
  143. return true;
  144. }
  145. bool CWaimaiOrder::ConfirmeOrder(std::string order_id)
  146. {
  147. std::string url = "/order/orderconfirm";
  148. //请求外卖的未处理订单
  149. std::map<string, string> params;
  150. params["ids"] = order_id;
  151. std::string response;
  152. CLewaimaiHttpClient::Request(url.c_str(), params, response);
  153. rapidjson::Document document;
  154. document.Parse(response.c_str());
  155. if (document.HasParseError())
  156. {
  157. LOG_INFO("parse response error!");
  158. return false;
  159. }
  160. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  161. {
  162. LOG_INFO("json error!");
  163. return false;
  164. }
  165. rapidjson::Value& v_errcode = document["errcode"];
  166. int errcode = v_errcode.GetInt();
  167. if (errcode != 0)
  168. {
  169. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  170. return false;
  171. }
  172. //获得数据成功
  173. rapidjson::Value& data = document["data"];
  174. rapidjson::Value& v_count = data["count"];
  175. string count = CLewaimaiJson::ToString(v_count);
  176. return true;
  177. }
  178. bool CWaimaiOrder::SuccessOrder(std::string order_id)
  179. {
  180. std::string url = "/order/ordersucceeded";
  181. //请求外卖的未处理订单
  182. std::map<string, string> params;
  183. params["ids"] = order_id;
  184. std::string response;
  185. CLewaimaiHttpClient::Request(url.c_str(), params, response);
  186. rapidjson::Document document;
  187. document.Parse(response.c_str());
  188. if (document.HasParseError())
  189. {
  190. LOG_INFO("parse response error!");
  191. return false;
  192. }
  193. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  194. {
  195. LOG_INFO("json error!");
  196. return false;
  197. }
  198. rapidjson::Value& v_errcode = document["errcode"];
  199. int errcode = v_errcode.GetInt();
  200. if (errcode != 0)
  201. {
  202. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  203. return false;
  204. }
  205. //获得数据成功
  206. rapidjson::Value& data = document["data"];
  207. rapidjson::Value& v_count = data["count"];
  208. string count = CLewaimaiJson::ToString(v_count);
  209. return true;
  210. }
  211. bool CWaimaiOrder::FailOrder(std::string order_id, std::string reason)
  212. {
  213. std::string url = "/order/orderfail";
  214. //请求外卖的未处理订单
  215. std::map<string, string> params;
  216. params["ids"] = order_id;
  217. params["failed_reason"] = reason;
  218. std::string response;
  219. CLewaimaiHttpClient::Request(url.c_str(), params, response);
  220. rapidjson::Document document;
  221. document.Parse(response.c_str());
  222. if (document.HasParseError())
  223. {
  224. LOG_INFO("parse response error!");
  225. return false;
  226. }
  227. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  228. {
  229. LOG_INFO("json error!");
  230. return false;
  231. }
  232. rapidjson::Value& v_errcode = document["errcode"];
  233. int errcode = v_errcode.GetInt();
  234. if (errcode != 0)
  235. {
  236. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  237. return false;
  238. }
  239. //获得数据成功
  240. rapidjson::Value& data = document["data"];
  241. rapidjson::Value& v_count = data["count"];
  242. string count = CLewaimaiJson::ToString(v_count);
  243. return true;
  244. }
  245. bool CWaimaiOrder::AgreeRefund(std::string order_id)
  246. {
  247. std::string url = "/order/refundorder";
  248. //请求外卖的未处理订单
  249. std::map<string, string> params;
  250. params["order_id"] = order_id;
  251. std::string response;
  252. CLewaimaiHttpClient::Request(url.c_str(), params, response);
  253. rapidjson::Document document;
  254. document.Parse(response.c_str());
  255. if (document.HasParseError())
  256. {
  257. LOG_INFO("parse response error!");
  258. return false;
  259. }
  260. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  261. {
  262. LOG_INFO("json error!");
  263. return false;
  264. }
  265. rapidjson::Value& v_errcode = document["errcode"];
  266. int errcode = v_errcode.GetInt();
  267. if (errcode != 0)
  268. {
  269. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  270. return false;
  271. }
  272. //获得数据成功
  273. rapidjson::Value& data = document["data"];
  274. return true;
  275. }
  276. bool CWaimaiOrder::DisagreeRefund(std::string order_id)
  277. {
  278. std::string url = "/order/refuserefundorder";
  279. //请求外卖的未处理订单
  280. std::map<string, string> params;
  281. params["order_id"] = order_id;
  282. std::string response;
  283. CLewaimaiHttpClient::Request(url.c_str(), params, response);
  284. rapidjson::Document document;
  285. document.Parse(response.c_str());
  286. if (document.HasParseError())
  287. {
  288. LOG_INFO("parse response error!");
  289. return false;
  290. }
  291. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  292. {
  293. LOG_INFO("json error!");
  294. return false;
  295. }
  296. rapidjson::Value& v_errcode = document["errcode"];
  297. int errcode = v_errcode.GetInt();
  298. if (errcode != 0)
  299. {
  300. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  301. return false;
  302. }
  303. //获得数据成功
  304. rapidjson::Value& data = document["data"];
  305. return true;
  306. }
  307. bool CWaimaiOrder::Refund(std::string order_id)
  308. {
  309. std::string url = "/order/lewaimairefund";
  310. //请求外卖的未处理订单
  311. std::map<string, string> params;
  312. params["order_id"] = order_id;
  313. std::string response;
  314. CLewaimaiHttpClient::Request(url.c_str(), params, response);
  315. rapidjson::Document document;
  316. document.Parse(response.c_str());
  317. if (document.HasParseError())
  318. {
  319. LOG_INFO("parse response error!");
  320. return false;
  321. }
  322. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  323. {
  324. LOG_INFO("json error!");
  325. return false;
  326. }
  327. rapidjson::Value& v_errcode = document["errcode"];
  328. int errcode = v_errcode.GetInt();
  329. if (errcode != 0)
  330. {
  331. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  332. return false;
  333. }
  334. //获得数据成功
  335. rapidjson::Value& data = document["data"];
  336. order_id = CLewaimaiJson::ToString(data["order_id"]);
  337. return true;
  338. }
  339. void CWaimaiOrder::UpdateKoudaiItems()
  340. {
  341. m_order_koudai_items.clear();
  342. m_order_koudai_items = this->UpdateKoudaiItems(m_order_items);
  343. }
  344. std::map<std::string, std::vector<CWaimaiOrderItem>> CWaimaiOrder::UpdateKoudaiItems(std::vector<CWaimaiOrderItem> order_items)
  345. {
  346. std::map<std::string, std::vector<CWaimaiOrderItem>> order_koudai_items;
  347. order_koudai_items.clear();
  348. for (std::vector<CWaimaiOrderItem>::iterator it = order_items.begin(); it != order_items.end(); it++)
  349. {
  350. std::string koudai_id = it->m_pocket_id;
  351. if (order_koudai_items.find(koudai_id) == order_koudai_items.end())
  352. {
  353. //说明还没这个口袋ID
  354. std::vector<CWaimaiOrderItem> newItemVector;
  355. newItemVector.push_back(*it);
  356. order_koudai_items[koudai_id] = newItemVector;
  357. }
  358. else
  359. {
  360. //说明已经有过这个口袋ID了
  361. order_koudai_items[koudai_id].push_back(*it);
  362. }
  363. }
  364. return order_koudai_items;
  365. }