Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

orderController.js 3.3 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * @Description: 订单模块控制器
  3. * @Author: hai-27
  4. * @Date: 2020-02-24 16:35:22
  5. * @LastEditors: hai-27
  6. * @LastEditTime: 2020-02-27 14:32:16
  7. */
  8. const orderDao = require('../models/dao/orderDao');
  9. const shoppingCartDao = require('../models/dao/shoppingCartDao');
  10. const productDao = require('../models/dao/productDao');
  11. const checkLogin = require('../middleware/checkLogin');
  12. module.exports = {
  13. /**
  14. * 获取用户的所有订单信息
  15. * @param {Object} ctx
  16. */
  17. GetOrder: async ctx => {
  18. let { user_id } = ctx.request.body;
  19. // 校验用户是否登录
  20. if (!checkLogin(ctx, user_id)) {
  21. return;
  22. }
  23. // 获取所有的订单id
  24. const ordersGroup = await orderDao.GetOrderGroup(user_id);
  25. // 该用户没有订单,直接返回信息
  26. if (ordersGroup.length == 0) {
  27. ctx.body = {
  28. code: '002',
  29. msg: '该用户没有订单信息'
  30. }
  31. return;
  32. }
  33. // 获取所有的订单详细信息
  34. const orders = await orderDao.GetOrder(user_id);
  35. let ordersList = [];
  36. // 生成每个订单的详细信息列表
  37. for (let i = 0; i < ordersGroup.length; i++) {
  38. const orderID = ordersGroup[i];
  39. let tempOrder = [];
  40. for (let j = 0; j < orders.length; j++) {
  41. const order = orders[j];
  42. if (orderID.order_id == order.order_id) {
  43. // 获取每个商品详细信息
  44. const product = await productDao.GetProductById(order.product_id);
  45. order.product_name = product[0].product_name;
  46. order.product_picture = product[0].product_picture;
  47. tempOrder.push(order);
  48. }
  49. }
  50. ordersList.push(tempOrder);
  51. }
  52. ctx.body = {
  53. code: '001',
  54. orders: ordersList
  55. }
  56. },
  57. /**
  58. * 添加用户订单信息
  59. * @param {Object} ctx
  60. */
  61. AddOrder: async (ctx) => {
  62. let { user_id, products } = ctx.request.body;
  63. // 校验用户是否登录
  64. if (!checkLogin(ctx, user_id)) {
  65. return;
  66. }
  67. // 获取当前时间戳
  68. const timeTemp = new Date().getTime();
  69. // 生成订单id:用户id+时间戳(string)
  70. const orderID = +("" + user_id + timeTemp);
  71. let data = [];
  72. // 根据数据库表结构生成字段信息
  73. for (let i = 0; i < products.length; i++) {
  74. const temp = products[i];
  75. let product = [orderID, user_id, temp.productID, temp.num, temp.price, timeTemp];
  76. data.push(...product);
  77. }
  78. try {
  79. // 把订单信息插入数据库
  80. const result = await orderDao.AddOrder(products.length, data);
  81. // 插入成功
  82. if (result.affectedRows == products.length) {
  83. //删除购物车
  84. let rows = 0;
  85. for (let i = 0; i < products.length; i++) {
  86. const temp = products[i];
  87. const res = await shoppingCartDao.DeleteShoppingCart(user_id, temp.productID);
  88. rows += res.affectedRows;
  89. }
  90. //判断删除购物车是否成功
  91. if (rows != products.length) {
  92. ctx.body = {
  93. code: '002',
  94. msg: '购买成功,但购物车没有更新成功'
  95. }
  96. return;
  97. }
  98. ctx.body = {
  99. code: '001',
  100. msg: '购买成功'
  101. }
  102. } else {
  103. ctx.body = {
  104. code: '004',
  105. msg: '购买失败,未知原因'
  106. }
  107. }
  108. } catch (error) {
  109. reject(error);
  110. }
  111. }
  112. }