ApproveSendCountRequest.js 3.3 KB

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