RejectSendCountRequest.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. class RejectSendCountRequest extends API {
  6. constructor() {
  7. super()
  8. this.setPath("/Admin/Goods/SendCountRequest/Reject")
  9. this.setMethod("POST")
  10. }
  11. async onRequest(req, res) {
  12. let { uuid, session, id, reject_reason } = req.body
  13. id = Number(id)
  14. reject_reason = typeof reject_reason === "string" ? reject_reason.trim() : ""
  15. if ([uuid, session, id].some(value => value === "" || value === null || value === undefined || Number.isNaN(id)))
  16. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  17. if (!Number.isInteger(id) || id <= 0)
  18. return res.json({ ...BaseStdResponse.ERR, msg: "参数错误" })
  19. if (reject_reason.length > 255)
  20. return res.json({ ...BaseStdResponse.ERR, msg: "拒绝原因过长,请控制在255字以内!" })
  21. if (!await AccessControl.checkSession(uuid, session))
  22. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  23. let permission = await AccessControl.getPermission(uuid)
  24. if (!permission.includes("admin") && !permission.includes("service"))
  25. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  26. const conn = await db.connect()
  27. try {
  28. await conn.beginTransaction()
  29. const [requestRows] = await conn.execute(
  30. `SELECT id, sender_uuid, count, status
  31. FROM lepao_send_count_request
  32. WHERE id = ?
  33. FOR UPDATE`,
  34. [id]
  35. )
  36. if (!requestRows || requestRows.length !== 1) {
  37. await conn.rollback()
  38. return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "未找到赠送申请记录!" })
  39. }
  40. const request = requestRows[0]
  41. if (request.status !== "pending") {
  42. await conn.rollback()
  43. return res.json({ ...BaseStdResponse.ERR, msg: "该申请已审核,请刷新后重试!" })
  44. }
  45. const [refundResult] = await conn.execute(
  46. "UPDATE users SET lepao_count = lepao_count + ? WHERE uuid = ?",
  47. [request.count, request.sender_uuid]
  48. )
  49. if (!refundResult || refundResult.affectedRows !== 1) {
  50. await conn.rollback()
  51. return res.json({ ...BaseStdResponse.ERR, msg: "赠送人不存在,退回次数失败!" })
  52. }
  53. const [updateResult] = await conn.execute(
  54. `UPDATE lepao_send_count_request
  55. SET status = 'rejected', reviewer_uuid = ?, reviewed_at = NOW(), reject_reason = ?
  56. WHERE id = ?`,
  57. [uuid, reject_reason || null, id]
  58. )
  59. if (!updateResult || updateResult.affectedRows !== 1) {
  60. await conn.rollback()
  61. return res.json({ ...BaseStdResponse.ERR, msg: "更新审核状态失败,请稍后再试!" })
  62. }
  63. await conn.commit()
  64. return res.json({ ...BaseStdResponse.OK, msg: "已拒绝该赠送申请" })
  65. } catch (err) {
  66. try { await conn.rollback() } catch (_) { }
  67. this.logger.error(`拒绝赠送申请失败!${err.message || "未知错误"}`)
  68. return res.json({ ...BaseStdResponse.ERR, msg: "拒绝申请失败,请稍后再试!" })
  69. }
  70. }
  71. }
  72. module.exports.RejectSendCountRequest = RejectSendCountRequest