AdminList.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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 AdminList extends API {
  6. constructor() {
  7. super()
  8. this.setPath('/Admin/Lepao/Count/Ledger/List')
  9. this.setMethod('GET')
  10. }
  11. async onRequest(req, res) {
  12. let {
  13. uuid,
  14. session,
  15. current = 1,
  16. pagesize = 20,
  17. user_uuid,
  18. username,
  19. student_num,
  20. biz_type,
  21. remark,
  22. operator_uuid,
  23. start_time,
  24. end_time
  25. } = req.query
  26. current = Number(current)
  27. pagesize = Number(pagesize)
  28. const startTimeNum = start_time === undefined || start_time === null || start_time === '' ? null : Number(start_time)
  29. const endTimeNum = end_time === undefined || end_time === null || end_time === '' ? null : Number(end_time)
  30. if ([uuid, session].some(v => v === '' || v === null || v === undefined)) {
  31. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  32. }
  33. if (!Number.isInteger(current) || current < 1 || !Number.isInteger(pagesize) || pagesize < 1 || pagesize > 100) {
  34. return res.json({ ...BaseStdResponse.ERR, msg: '参数错误' })
  35. }
  36. if ((startTimeNum !== null && !Number.isFinite(startTimeNum)) || (endTimeNum !== null && !Number.isFinite(endTimeNum))) {
  37. return res.json({ ...BaseStdResponse.ERR, msg: '时间参数错误' })
  38. }
  39. if (!await AccessControl.checkSession(uuid, session)) {
  40. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  41. }
  42. const permission = await AccessControl.getPermission(uuid)
  43. if (!permission.includes('admin') && !permission.includes('service')) {
  44. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  45. }
  46. const where = ['1 = 1']
  47. const params = []
  48. const offset = (current - 1) * pagesize
  49. if (user_uuid) {
  50. where.push('l.user_uuid COLLATE utf8mb4_general_ci = ?')
  51. params.push(user_uuid)
  52. }
  53. if (username) {
  54. where.push('u.username LIKE ?')
  55. params.push(`%${username}%`)
  56. }
  57. if (student_num) {
  58. where.push('la.student_num LIKE ?')
  59. params.push(`%${student_num}%`)
  60. }
  61. if (biz_type) {
  62. where.push('l.biz_type COLLATE utf8mb4_general_ci = ?')
  63. params.push(biz_type)
  64. }
  65. if (remark) {
  66. where.push('l.remark LIKE ?')
  67. params.push(`%${remark}%`)
  68. }
  69. if (operator_uuid) {
  70. where.push('l.operator_uuid COLLATE utf8mb4_general_ci = ?')
  71. params.push(operator_uuid)
  72. }
  73. if (startTimeNum !== null) {
  74. where.push('l.created_at >= FROM_UNIXTIME(? / 1000)')
  75. params.push(startTimeNum)
  76. }
  77. if (endTimeNum !== null) {
  78. where.push('l.created_at <= FROM_UNIXTIME(? / 1000)')
  79. params.push(endTimeNum)
  80. }
  81. const whereSql = where.join(' AND ')
  82. const listSql = `
  83. SELECT
  84. l.id,
  85. l.user_uuid,
  86. u.username,
  87. u.avatar AS user_avatar,
  88. l.delta,
  89. l.balance_before,
  90. l.balance_after,
  91. l.biz_type,
  92. l.biz_id,
  93. l.operator_uuid,
  94. op.username AS operator_name,
  95. op.avatar AS operator_avatar,
  96. l.remark,
  97. UNIX_TIMESTAMP(l.created_at) * 1000 AS created_at
  98. FROM lepao_count_ledger l
  99. LEFT JOIN users u ON u.uuid = l.user_uuid COLLATE utf8mb4_general_ci
  100. LEFT JOIN users op ON op.uuid = l.operator_uuid COLLATE utf8mb4_general_ci
  101. WHERE ${whereSql}
  102. ORDER BY l.id DESC
  103. LIMIT ${pagesize} OFFSET ${offset}
  104. `
  105. const countSql = `
  106. SELECT COUNT(*) AS total
  107. FROM lepao_count_ledger l
  108. LEFT JOIN users u ON u.uuid = l.user_uuid COLLATE utf8mb4_general_ci
  109. WHERE ${whereSql}
  110. `
  111. const rows = await db.query(listSql, params)
  112. const countRows = await db.query(countSql, params)
  113. if (!rows || !countRows) {
  114. return res.json({ ...BaseStdResponse.DATABASE_ERR })
  115. }
  116. return res.json({
  117. ...BaseStdResponse.OK,
  118. data: rows,
  119. pagination: {
  120. current,
  121. pagesize,
  122. total: Number(countRows[0]?.total || 0)
  123. }
  124. })
  125. }
  126. }
  127. module.exports.AdminList = AdminList