GetOrderDetail.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. u.username,
  55. u.avatar,
  56. u.email AS user_email
  57. FROM
  58. orders o
  59. LEFT JOIN
  60. goods g ON o.goods_id = g.id
  61. LEFT JOIN
  62. users u ON o.create_user = u.uuid
  63. WHERE
  64. o.orderId = ?
  65. `
  66. const rows = await db.query(sql, [orderId])
  67. if (!rows || rows.length !== 1) {
  68. return res.json({
  69. ...BaseStdResponse.ERR,
  70. msg: '订单不存在'
  71. })
  72. }
  73. const order = rows[0]
  74. const userRows = await db.query(
  75. 'SELECT lepao_count FROM users WHERE uuid = ? LIMIT 1',
  76. [order.create_user]
  77. )
  78. const userLepaoCount = userRows?.[0]?.lepao_count ?? 0
  79. const refundEligibility = evaluateRefundEligibility({
  80. state: order.state,
  81. payTime: order.pay_time,
  82. userLepaoCount,
  83. goodsLepaoCount: order.lepao_count,
  84. skipTimeLimit: true
  85. })
  86. order.canRefund = refundEligibility.canRefund
  87. order.refundDisabledReason = refundEligibility.reason
  88. order.user_lepao_count = Number(userLepaoCount || 0)
  89. res.json({
  90. ...BaseStdResponse.OK,
  91. data: order
  92. })
  93. }
  94. }
  95. module.exports.GetOrderDetail = GetOrderDetail