GetOrderDetail.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. g.content,
  25. g.icon,
  26. g.isHot,
  27. g.description,
  28. g.category,
  29. g.features
  30. FROM
  31. orders a
  32. LEFT JOIN
  33. goods g
  34. ON
  35. a.goods_id = g.id
  36. WHERE
  37. a.create_user = ?
  38. AND
  39. a.orderId = ?
  40. `;
  41. const rows = await db.query(sql, [uuid, orderId]);
  42. return rows?.[0] || null;
  43. }
  44. async onRequest(req, res) {
  45. const { uuid, session, orderId } = req.query;
  46. if (!uuid || !session || !orderId) {
  47. return res.json({
  48. ...BaseStdResponse.MISSING_PARAMETER,
  49. endpoint: 1513126
  50. });
  51. }
  52. if (!await AccessControl.checkSession(uuid, session)) {
  53. return res.status(401).json({
  54. ...BaseStdResponse.ACCESS_DENIED
  55. });
  56. }
  57. let order = await this.getOrderDetail(uuid, orderId);
  58. if (!order) {
  59. return res.json({
  60. ...BaseStdResponse.ERR,
  61. msg: '订单获取失败!'
  62. });
  63. }
  64. // 订单未支付
  65. if (order.state === 0) {
  66. let payData = await Redis.get(`payData:${order.orderId}`);
  67. if (!payData) {
  68. // 标记为过期订单
  69. await db.query('UPDATE orders SET state = 3 WHERE orderId = ?', [order.orderId]);
  70. // 重新获取订单信息(更新后的)
  71. order = await this.getOrderDetail(uuid, orderId);
  72. if (!order) {
  73. return res.json({
  74. ...BaseStdResponse.ERR,
  75. msg: '订单获取失败!'
  76. });
  77. }
  78. return res.json({
  79. ...BaseStdResponse.OK,
  80. data: order
  81. });
  82. }
  83. return res.json({
  84. ...BaseStdResponse.OK,
  85. data: order,
  86. payData: {
  87. payUrl: `${config.pay.url}/submit.php`,
  88. payData: JSON.parse(payData)
  89. }
  90. });
  91. }
  92. // 订单已支付或其他状态
  93. return res.json({
  94. ...BaseStdResponse.OK,
  95. data: order
  96. });
  97. }
  98. }
  99. module.exports.GetAccount = GetAccount;