carts.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. 'use strict';
  2. import AddressComponent from '../../prototype/addressComponent'
  3. import formidable from 'formidable'
  4. import PaymentsModel from '../../models/v1/payments'
  5. import ShopModel from '../../models/shopping/shop'
  6. class Carts extends AddressComponent{
  7. constructor(){
  8. super();
  9. this.extra = [{
  10. description: '',
  11. name: '餐盒',
  12. price: 2,
  13. quantity: 1,
  14. type: 0,
  15. }]
  16. this.checkout = this.checkout.bind(this);
  17. }
  18. async checkout(req, res, next){
  19. const UID = req.session.UID;
  20. const form = new formidable.IncomingForm();
  21. form.parse(req, async (err, fields, files) => {
  22. const {come_from, geohash, entities = [], restaurant_id} = fields;
  23. try{
  24. if(!(entities instanceof Array) || !entities.length){
  25. throw new Error('entities参数错误')
  26. }else if(!(entities[0] instanceof Array) || !entities[0].length){
  27. throw new Error('entities参数错误')
  28. }else if(!restaurant_id){
  29. throw new Error('restaurant_id参数错误')
  30. }
  31. }catch(err){
  32. console.log(err);
  33. res.send({
  34. status: 0,
  35. type: 'ERROR_PARAMS',
  36. message: err.message
  37. })
  38. return
  39. }
  40. let payments; //付款方式
  41. let cart_id; //购物车id
  42. let restaurant; //餐馆详情
  43. let deliver_time; //配送时间
  44. let delivery_reach_time; //到达时间
  45. let from = geohash.split(',')[0] + ',' + geohash.split(',')[1];
  46. try{
  47. payments = await PaymentsModel.find({}, '-_id');
  48. cart_id = await this.getId('cart_id');
  49. restaurant = await ShopModel.findOne({id: restaurant_id});
  50. const to = restaurant.latitude+ ',' + restaurant.longitude;
  51. deliver_time = await this.getDistance(from, to, 'tiemvalue');
  52. let time = new Date().getTime() + deliver_time*1000;
  53. let hour = ('0' + new Date(time).getHours()).substr(-2);
  54. let minute = ('0' + new Date(time).getMinutes()).substr(-2);
  55. delivery_reach_time = hour + ':' + minute;
  56. }catch(err){
  57. console.log('获取数据数据失败', err);
  58. res.send({
  59. status: 0,
  60. type: 'ERROR_DATA',
  61. message: '添加购物车失败',
  62. })
  63. return
  64. }
  65. let deliver_amount = 0; //食品价格
  66. entities[0].map(item => {
  67. deliver_amount += item.price * item.quantity;
  68. if (item.specs[0]) {
  69. return item.name = item.name + '-' + item.specs[0];
  70. }
  71. })
  72. //食品总价格
  73. const total = deliver_amount + this.extra[0].price * this.extra[0].quantity;
  74. //是否支持发票
  75. let invoice = {
  76. is_available: false,
  77. status_text: "商家不支持开发票",
  78. };
  79. restaurant.supports.forEach(item => {
  80. if (item.icon_name == '票') {
  81. invoice = {
  82. is_available: true,
  83. status_text: "不需要开发票",
  84. };
  85. }
  86. })
  87. const checkoutInfo = {
  88. cart: {
  89. id: cart_id,
  90. groups: entities,
  91. extra: this.extra,
  92. deliver_amount,
  93. deliver_time: '',
  94. discount_amount: '',
  95. dist_info: '',
  96. is_address_too_far: false,
  97. is_deliver_by_fengniao: !!restaurant.delivery_mode,
  98. is_online_paid: 1,
  99. is_ontime_available: 0,
  100. must_new_user: 0,
  101. must_pay_online: 0,
  102. ontime_status: 0,
  103. ontime_unavailable_reason: '',
  104. original_total: total,
  105. phone: restaurant.phone,
  106. promise_delivery_time: 0,
  107. restaurant_id,
  108. restaurant_info: restaurant,
  109. restaurant_minimum_order_amount: restaurant.float_minimum_order_amount,
  110. restaurant_name_for_url: '',
  111. restaurant_status: 1,
  112. service_fee_explanation: 0,
  113. total,
  114. user_id: UID,
  115. },
  116. delivery_reach_time,
  117. invoice,
  118. sig: "8d65fd81cb962c1f64cd162c6ac5728f",
  119. current_address: {},
  120. payments,
  121. deliver_times: [],
  122. deliver_times_v2: [],
  123. merchant_coupon_info: {},
  124. number_of_meals: {},
  125. discount_rule: {},
  126. hongbao_info: {},
  127. is_support_coupon: false,
  128. is_support_ninja: 1,
  129. }
  130. res.send(checkoutInfo)
  131. })
  132. }
  133. }
  134. export default new Carts()