GetOrderDetail.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. const API = require("../../../lib/API")
  2. const db = require("../../../plugin/DataBase/db")
  3. const AccessControl = require("../../../lib/AccessControl")
  4. const { BaseStdResponse } = require("../../../BaseStdResponse")
  5. const { evaluateRefundEligibility } = require("../../../lib/OrderRefundService")
  6. class GetOrderDetail extends API {
  7. constructor() {
  8. super()
  9. this.setPath('/Admin/Order/Detail')
  10. this.setMethod('get')
  11. }
  12. async onRequest(req, res) {
  13. const { uuid, session, orderId } = req.query
  14. if (!uuid || !session || !orderId) {
  15. return res.json({
  16. ...BaseStdResponse.MISSING_PARAMETER
  17. })
  18. }
  19. if (!await AccessControl.checkSession(uuid, session)) {
  20. return res.status(401).json({
  21. ...BaseStdResponse.ACCESS_DENIED
  22. })
  23. }
  24. let permission = await AccessControl.getPermission(uuid)
  25. if (!permission.includes("admin") && !permission.includes("product")) {
  26. return res.json({
  27. ...BaseStdResponse.PERMISSION_DENIED
  28. })
  29. }
  30. const sql = `
  31. SELECT
  32. o.orderId,
  33. o.create_time,
  34. o.pay_time,
  35. o.price,
  36. o.original_price,
  37. o.discount_amount,
  38. o.coupon_code,
  39. o.state,
  40. o.pay_id,
  41. o.pay_type,
  42. o.goods_id,
  43. o.create_user,
  44. g.name,
  45. g.content,
  46. g.icon,
  47. g.isHot,
  48. g.description,
  49. g.category,
  50. g.features,
  51. g.lepao_count,
  52. g.ic_count,
  53. g.vip,
  54. g.vip_validity_type,
  55. g.vip_valid_days,
  56. g.vip_fixed_expire_time,
  57. g.allow_refund,
  58. u.username,
  59. u.avatar,
  60. u.email AS user_email
  61. FROM
  62. orders o
  63. LEFT JOIN
  64. goods g ON o.goods_id = g.id
  65. LEFT JOIN
  66. users u ON o.create_user = u.uuid
  67. WHERE
  68. o.orderId = ?
  69. `
  70. const rows = await db.query(sql, [orderId])
  71. if (!rows || rows.length !== 1) {
  72. return res.json({
  73. ...BaseStdResponse.ERR,
  74. msg: '订单不存在'
  75. })
  76. }
  77. const order = rows[0]
  78. const userRows = await db.query(
  79. 'SELECT lepao_count FROM users WHERE uuid = ? LIMIT 1',
  80. [order.create_user]
  81. )
  82. const userLepaoCount = userRows?.[0]?.lepao_count ?? 0
  83. const refundEligibility = evaluateRefundEligibility({
  84. state: order.state,
  85. payTime: order.pay_time,
  86. userLepaoCount,
  87. goodsLepaoCount: order.lepao_count,
  88. allowRefund: 1,
  89. skipTimeLimit: true
  90. })
  91. order.canRefund = refundEligibility.canRefund
  92. order.refundDisabledReason = refundEligibility.reason
  93. order.user_lepao_count = Number(userLepaoCount || 0)
  94. res.json({
  95. ...BaseStdResponse.OK,
  96. data: order
  97. })
  98. }
  99. }
  100. module.exports.GetOrderDetail = GetOrderDetail