GetOrderDetail.js 3.0 KB

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