CZhengcanOrder.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #pragma once
  2. #include <string>
  3. #include <vector>
  4. #include "../control/CDiandanNatureItemUI.h"
  5. #include "../zhipuzi/CFood.h"
  6. #include "../zhipuzi/CFoodpackage.h"
  7. #include "CZhengcanOrderItem.h"
  8. class CZhengcanOrderItemPrint
  9. {
  10. public:
  11. std::string m_food_name; //这个是完整展示的名字
  12. std::string m_quantity;
  13. std::string m_item_price; //注意这个是单价,不是总价
  14. std::string m_type_id;
  15. //表示这个Item是否是套餐的名字
  16. bool is_taocan = false;
  17. //表示这个是否是套餐下面的商品详情,主要用于厨房打印的时候,一个套餐下面的每个商品都会生成一个CZhengcanOrderItemPrint对象
  18. bool is_taocan_item = false;
  19. };
  20. /**
  21. * 点单里面的一个“订单”,每个选中的商品被加入订单,通过订单数据来计算价格,渲染界面,提交订单也是通过这个数据来提交
  22. * 挂单、取单操作的也是订单
  23. */
  24. class CZhengcanOrder
  25. {
  26. public:
  27. std::vector<CZhengcanOrderItem> m_items;
  28. //这个是不包含其他费用的纯商品原价
  29. std::string m_total_price_show;
  30. std::string m_guadan_time;
  31. //订单的整单备注
  32. std::string m_memo;
  33. //订单状态
  34. std::string m_status;
  35. //人数
  36. std::string m_renshu;
  37. //绑定的桌子信息
  38. std::string m_table_id;
  39. std::string m_table_name;
  40. //是否清零
  41. std::string m_is_clear;
  42. //开台时间
  43. std::string m_kaitai_time;
  44. //支付时间
  45. std::string m_pay_time;
  46. /****** 下面这些是专门用于打印的参数,不作为其他用途,点单逻辑中用不到,点单成功后赋值用于打印而已 ***********/
  47. std::string shopname;
  48. std::string show_trade_no;
  49. //会员余额和会员卡号,仅会员支付时有用
  50. std::string balance;
  51. std::string member_number;
  52. //微信支付 会员支付 现金支付 福利卡支付 自定义支付
  53. std::string shoukuan_type;
  54. int order_from; //1 收银机下单 2 商家app下单 3 扫码下单
  55. std::string init_time;
  56. //各种优惠
  57. std::string m_shangpinquan_youhui;
  58. std::string m_cika_youhui;
  59. std::string m_total_member_youhui;
  60. std::string m_zhekou_youhui;
  61. std::string m_member_zhekou_youhui;
  62. std::string m_quanyika_youhui;
  63. std::string m_manjian_youhui;
  64. std::string m_youhuiquan_youhui;
  65. std::string m_rengong_youhui;
  66. std::string m_moling_youhui;
  67. //加价金额
  68. std::string m_jiajia;
  69. std::string m_shishou_value;
  70. std::string m_zhaoling_value;
  71. //折扣值(1-100)
  72. std::string m_zhekou_value;
  73. //实际最终总价
  74. std::string m_dabao_money;
  75. std::string m_total_price;
  76. std::vector<CZhengcanOrderItemPrint> m_items_print;
  77. //下面是从订单接口从服务端获取的参数,暂时存在这里
  78. std::string m_order_id;
  79. std::string is_refund;
  80. std::string refund_time;
  81. std::string is_guazhang;
  82. std::string guazhang;
  83. public:
  84. //刷新点单相关的参数,比如一个订单收银成功后准备开始收银下一个订单时,清空之前的信息
  85. void RefreshDiandanInfo();
  86. int getItemNum();
  87. std::string getTotalPriceShow();
  88. double getTotalPrice();
  89. CZhengcanOrderItem getDiandanOrderItem(int index);
  90. //这个函数的逻辑是选择一个新商品的时候,与已有商品进行对比,看看是加一个新的商品,还是对已有商品增加数量
  91. //返回值是表示新加的item,在第几个元素,方便刷新显示
  92. int AddItem(CZhengcanOrderItem newitem, bool& is_add_new);
  93. void UpdateItemGuige(int index, std::vector<FoodNatureSelectValue>& natureSelectedArray);
  94. //给某一项添加一个数量
  95. void AddNum(int index);
  96. //给某一项减少一个数量,返回值为true表示商品本删掉了,也就是为0份;如果为false表示没被删掉
  97. bool DelNum(int index);
  98. //删除某一项
  99. void Remove(int index);
  100. //更新了某项的规格,那么重新刷新显示和价格
  101. void UpdateGuigePrice(int index);
  102. //打包
  103. void SetDabao(int index);
  104. //清空商品
  105. void Clear();
  106. void SetMemo(std::string memo);
  107. std::string GetMemo();
  108. //判断某个商品券是否能使用,如果可以返回true,如果不行返回false,youhui_value是对应的商品券优惠金额
  109. bool UseShangpinquan(std::string shangpinquan_food_id, double& youhui_value);
  110. //判断某个次卡是否能使用,如果可以返回true,如果不行返回false,youhui_value是对应的商品券优惠金额
  111. //is_shangpinquan_dikou 同一个商品,是否被商品券抵扣过了,用于商品券和次卡抵扣同一个商品时候的处理
  112. bool UseCikaDikou(std::string cika_food_id, double& youhui_value, bool is_shangpinquan_dikou);
  113. //计算所有商品的总的会员优惠金额
  114. double getTotalMemberYouhui(std::string member_level);
  115. //计算所有商品的总的打包费
  116. double getDabaoMoney();
  117. //获取点单相关的参数(仅用于非套餐)
  118. std::string getDiandanFoodlistParam();
  119. //获取点单相关的套餐参数(仅用于套餐)
  120. std::string getDiandanTaocanParam();
  121. /****************************下面这里开始,用于与服务器交互的函数*/
  122. //根据订单ID,从服务器获取订单的数据,主要用于打印和展示订单详情
  123. bool InitData(std::string order_id);
  124. //根据订单ID,进行退款操作
  125. bool Refund(std::string order_id);
  126. };