GetOrderDetail.js 2.7 KB

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