GetOrderDetail.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. const API = require("../../../../lib/API.js");
  2. const db = require("../../../../plugin/DataBase/db.js");
  3. const { BaseStdResponse } = require("../../../../BaseStdResponse.js");
  4. const AccessControl = require("../../../../lib/AccessControl.js");
  5. class GetOrderDetail extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Admin/Kefu/OrderDetail')
  9. this.setMethod('GET')
  10. }
  11. async onRequest(req, res) {
  12. let { uuid, session, id } = req.query
  13. if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
  14. return res.json({
  15. ...BaseStdResponse.MISSING_PARAMETER
  16. })
  17. if (!await AccessControl.checkSession(uuid, session))
  18. return res.status(401).json({
  19. ...BaseStdResponse.ACCESS_DENIED
  20. })
  21. // 检查权限
  22. let permission = await AccessControl.getPermission(uuid)
  23. if (!permission.includes("admin") && !permission.includes("service"))
  24. return res.json({
  25. ...BaseStdResponse.PERMISSION_DENIED
  26. })
  27. let sql = `
  28. SELECT
  29. id,
  30. create_user,
  31. title,
  32. msg,
  33. state,
  34. email,
  35. create_time,
  36. update_time
  37. FROM
  38. work_order
  39. WHERE
  40. id = ?
  41. `
  42. let rows = await db.query(sql, [id])
  43. if (!rows || rows.length !== 1) {
  44. return res.json({
  45. ...BaseStdResponse.DATABASE_ERR,
  46. msg: '工单异常'
  47. })
  48. }
  49. let order = rows[0]
  50. let uuidSet = new Set()
  51. order.msg.forEach(msg => {
  52. if (msg.uuid) uuidSet.add(msg.uuid)
  53. })
  54. let uuidList = [...uuidSet]
  55. if (uuidList.length === 0) {
  56. return res.json({
  57. ...BaseStdResponse.SUCCESS,
  58. data: {
  59. ...order,
  60. userInfo: {}
  61. }
  62. })
  63. }
  64. // 合并查询
  65. const placeholders = uuidList.map(() => '?').join(', ')
  66. const userSql = `SELECT uuid, username, avatar FROM users WHERE uuid IN (${placeholders})`
  67. const userRows = await db.query(userSql, uuidList)
  68. if (!userRows || userRows.length === 0) {
  69. return res.json({
  70. ...BaseStdResponse.DATABASE_ERR,
  71. msg: '用户信息获取失败'
  72. })
  73. }
  74. let userInfo = {}
  75. userRows.forEach(user => {
  76. userInfo[user.uuid] = {
  77. username: user.username,
  78. avatar: user.avatar
  79. }
  80. })
  81. res.json({
  82. ...BaseStdResponse.OK,
  83. data: {
  84. ...order,
  85. userInfo
  86. }
  87. })
  88. }
  89. }
  90. module.exports.GetOrderDetail = GetOrderDetail