CancelOrder.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const API = require('../../lib/API')
  2. const db = require('../../plugin/DataBase/db')
  3. const { BaseStdResponse } = require('../../BaseStdResponse')
  4. const AccessControl = require('../../lib/AccessControl')
  5. const { closePendingOrder } = require('../../lib/OrderSettlement')
  6. class CancelOrder extends API {
  7. constructor() {
  8. super()
  9. this.setPath('/Order/CancelOrder')
  10. this.setMethod('POST')
  11. }
  12. async onRequest(req, res) {
  13. const { uuid, session, orderId } = req.body
  14. if ([uuid, session, orderId].some(v => v === '' || v === null || v === undefined)) {
  15. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  16. }
  17. if (!await AccessControl.checkSession(uuid, session)) {
  18. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  19. }
  20. try {
  21. const rows = await db.query(
  22. 'SELECT state FROM orders WHERE orderId = ? AND create_user = ? LIMIT 1',
  23. [orderId, uuid]
  24. )
  25. if (!rows || rows.length !== 1) {
  26. return res.json({ ...BaseStdResponse.ERR, msg: '订单不存在' })
  27. }
  28. if (Number(rows[0].state) !== 0) {
  29. return res.json({ ...BaseStdResponse.ERR, msg: '仅未支付订单可取消' })
  30. }
  31. const closeResult = await closePendingOrder({ orderId, operatorUuid: uuid, logger: this.logger })
  32. if (!closeResult.closed) {
  33. return res.json({ ...BaseStdResponse.ERR, msg: '取消订单失败,订单状态可能已变更' })
  34. }
  35. this.logger.info(`用户取消订单成功,订单号:${orderId}`)
  36. return res.json({ ...BaseStdResponse.OK, msg: '订单已取消' })
  37. } catch (error) {
  38. this.logger.error(`取消订单失败 ${orderId}: ${error.stack || error}`)
  39. return res.json({ ...BaseStdResponse.ERR, msg: '取消订单失败,请稍后再试' })
  40. }
  41. }
  42. }
  43. module.exports.CancelOrder = CancelOrder