GetOrderDetail.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. if (!await AccessControl.canAccess(uuid, ['page.admin.service.orderList']))
  23. return res.json({
  24. ...BaseStdResponse.PERMISSION_DENIED
  25. })
  26. let sql = `
  27. SELECT
  28. id,
  29. create_user,
  30. title,
  31. msg,
  32. state,
  33. email,
  34. create_time,
  35. update_time
  36. FROM
  37. work_order
  38. WHERE
  39. id = ?
  40. `
  41. let rows = await db.query(sql, [id])
  42. if (!rows || rows.length !== 1) {
  43. return res.json({
  44. ...BaseStdResponse.DATABASE_ERR,
  45. msg: '工单异常'
  46. })
  47. }
  48. let order = rows[0]
  49. let uuidSet = new Set()
  50. order.msg.forEach(msg => {
  51. if (msg.uuid) uuidSet.add(msg.uuid)
  52. })
  53. let uuidList = [...uuidSet]
  54. if (uuidList.length === 0) {
  55. return res.json({
  56. ...BaseStdResponse.SUCCESS,
  57. data: {
  58. ...order,
  59. userInfo: {}
  60. }
  61. })
  62. }
  63. // 合并查询
  64. const placeholders = uuidList.map(() => '?').join(', ')
  65. const userSql = `SELECT uuid, username, avatar FROM users WHERE uuid IN (${placeholders})`
  66. const userRows = await db.query(userSql, uuidList)
  67. if (!userRows || userRows.length === 0) {
  68. return res.json({
  69. ...BaseStdResponse.DATABASE_ERR,
  70. msg: '用户信息获取失败'
  71. })
  72. }
  73. let userInfo = {}
  74. userRows.forEach(user => {
  75. userInfo[user.uuid] = {
  76. username: user.username,
  77. avatar: user.avatar
  78. }
  79. })
  80. res.json({
  81. ...BaseStdResponse.OK,
  82. data: {
  83. ...order,
  84. userInfo
  85. }
  86. })
  87. }
  88. }
  89. module.exports.GetOrderDetail = GetOrderDetail