order.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. 'use strict';
  2. import BaseComponent from '../../prototype/baseComponent'
  3. import formidable from 'formidable'
  4. import OrderModel from '../../models/bos/order'
  5. import CartModel from '../../models/v1/cart'
  6. import timestamp from 'time-stamp'
  7. class Order extends BaseComponent{
  8. constructor(){
  9. super()
  10. this.postOrder = this.postOrder.bind(this);
  11. }
  12. async postOrder(req, res, next){
  13. const form = new formidable.IncomingForm();
  14. form.parse(req, async (err, fields, files) => {
  15. if (err) {
  16. console.log('formidable解析出错', err);
  17. res.send({
  18. status: 1,
  19. message: '下单失败'
  20. })
  21. return
  22. }
  23. const {user_id, cart_id} = req.params;
  24. const {address_id, come_from = 'mobile_web', deliver_time = '', description, entities, geohash, paymethod_id = 1} = fields;
  25. try{
  26. if(!(entities instanceof Array) || !entities.length){
  27. throw new Error('entities参数错误')
  28. }else if(!(entities[0] instanceof Array) || !entities[0].length){
  29. throw new Error('entities参数错误')
  30. }else if(!address_id){
  31. throw new Error('address_id参数错误')
  32. }else if(!user_id || !Number(user_id)){
  33. throw new Error('user_id参数错误')
  34. }else if(!cart_id || !Number(cart_id)){
  35. throw new Error('cart_id参数错误')
  36. }else if(!user_id){
  37. throw new Error('未登录')
  38. }
  39. }catch(err){
  40. console.log(err.message, err);
  41. res.send({
  42. status: 0,
  43. type: 'ERROR_PARAMS',
  44. message: err.message
  45. })
  46. return
  47. }
  48. let cart;
  49. let order_id;
  50. try{
  51. cart = await CartModel.findOne({id: cart_id});
  52. order_id = await this.getId('order_id');
  53. }catch(err){
  54. console.log('获取数据失败', err);
  55. res.send({
  56. status: 0,
  57. type: 'ERROR_GET_DATA',
  58. message: '获取订单失败',
  59. })
  60. return
  61. }
  62. const orderObj = {
  63. basket: {
  64. group: entities,
  65. packing_fee: {
  66. name: cart.cart.extra[0].name,
  67. price: cart.cart.extra[0].price,
  68. quantity: cart.cart.extra[0].quantity,
  69. }
  70. },
  71. restaurant_id: cart.cart.restaurant_id,
  72. restaurant_image_url: cart.cart.restaurant_info.image_path,
  73. restaurant_name: cart.cart.restaurant_info.name,
  74. formatted_created_at: new Date().getTime(),
  75. status_bar: {
  76. color: 'f60',
  77. image_type: '',
  78. sub_title: '15分钟内支付',
  79. title: '等待支付',
  80. },
  81. total_amount: cart.cart.total,
  82. total_quantity: entities[0].length,
  83. unique_id: order_id,
  84. id: order_id,
  85. user_id,
  86. address_id,
  87. }
  88. try{
  89. await OrderModel.create(orderObj);
  90. res.send({
  91. need_validation: false,
  92. })
  93. }catch(err){
  94. console.log('保存订单数据失败');
  95. res.send({
  96. status: 0,
  97. type: 'ERROR_SAVE_ORDER',
  98. message: '保存订单失败'
  99. })
  100. }
  101. })
  102. }
  103. async getOrders(req, res, next){
  104. const user_id = req.params.user_id;
  105. const {limit = 0, offset = 0} = req.query;
  106. try{
  107. if(!user_id || !Number(user_id)){
  108. throw new Error('user_id参数错误')
  109. }else if(!Number(limit)){
  110. throw new Error('limit参数错误')
  111. }else if(typeof Number(offset) !== 'number'){
  112. throw new Error('offset参数错误')
  113. }
  114. }catch(err){
  115. console.log(err.message, err);
  116. res.send({
  117. status: 0,
  118. type: 'ERROR_PARAMS',
  119. message: err.message
  120. })
  121. return
  122. }
  123. try{
  124. const orders = await OrderModel.find({user_id}, '-_id').limit(Number(limit)).skip(Number(offset));
  125. res.send(orders);
  126. }catch(err){
  127. console.log('获取订单列表失败', err);
  128. res.send({
  129. status: 0,
  130. type: 'ERROR_GET_ORDER_LIST',
  131. message: '获取订单列表失败'
  132. })
  133. }
  134. }
  135. }
  136. export default new Order()