GetOrderDetail.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const API = require("../../lib/API.js");
  2. const db = require("../../plugin/DataBase/db.js");
  3. const Redis = require('../../plugin/DataBase/Redis');
  4. const config = require('../../config.json');
  5. const { BaseStdResponse } = require("../../BaseStdResponse.js");
  6. const AccessControl = require("../../lib/AccessControl.js");
  7. class GetAccount extends API {
  8. constructor() {
  9. super();
  10. this.setPath('/Order/Detail');
  11. this.setMethod('GET');
  12. }
  13. async getOrderDetail(uuid, orderId) {
  14. const sql = `
  15. SELECT
  16. a.orderId,
  17. a.create_time,
  18. a.price,
  19. a.state,
  20. a.pay_id,
  21. a.pay_type,
  22. a.pay_time,
  23. g.name
  24. FROM
  25. orders a
  26. LEFT JOIN
  27. goods g
  28. ON
  29. a.goods_id = g.id
  30. WHERE
  31. a.create_user = ?
  32. AND
  33. a.orderId = ?
  34. `;
  35. const rows = await db.query(sql, [uuid, orderId]);
  36. return rows?.[0] || null;
  37. }
  38. async onRequest(req, res) {
  39. const { uuid, session, orderId } = req.query;
  40. if (!uuid || !session || !orderId) {
  41. return res.json({
  42. ...BaseStdResponse.MISSING_PARAMETER,
  43. endpoint: 1513126
  44. });
  45. }
  46. if (!await AccessControl.checkSession(uuid, session)) {
  47. return res.status(401).json({
  48. ...BaseStdResponse.ACCESS_DENIED
  49. });
  50. }
  51. let order = await this.getOrderDetail(uuid, orderId);
  52. if (!order) {
  53. return res.json({
  54. ...BaseStdResponse.ERR,
  55. msg: '订单获取失败!'
  56. });
  57. }
  58. // 订单未支付
  59. if (order.state === 0) {
  60. let payData = await Redis.get(`payData:${order.orderId}`);
  61. if (!payData) {
  62. // 标记为过期订单
  63. await db.query('UPDATE orders SET state = 3 WHERE orderId = ?', [order.orderId]);
  64. // 重新获取订单信息(更新后的)
  65. order = await this.getOrderDetail(uuid, orderId);
  66. if (!order) {
  67. return res.json({
  68. ...BaseStdResponse.ERR,
  69. msg: '订单获取失败!'
  70. });
  71. }
  72. return res.json({
  73. ...BaseStdResponse.OK,
  74. data: order
  75. });
  76. }
  77. const payUrl = config.pay.url
  78. return res.json({
  79. ...BaseStdResponse.OK,
  80. data: order,
  81. payData: {
  82. payUrl,
  83. payData: JSON.parse(payData)
  84. }
  85. });
  86. }
  87. // 订单已支付或其他状态
  88. return res.json({
  89. ...BaseStdResponse.OK,
  90. data: order
  91. });
  92. }
  93. }
  94. module.exports.GetAccount = GetAccount;