const API = require("../../../lib/API.js") const db = require("../../../plugin/DataBase/db.js") const { BaseStdResponse } = require("../../../BaseStdResponse.js") const AccessControl = require("../../../lib/AccessControl.js") class AdminPowerTaskList extends API { constructor() { super() this.setPath('/Admin/Power/Task/List') this.setMethod('GET') } async onRequest(req, res) { let { uuid, session, create_user, username, email, area, building, room, queryTime, pagesize, current } = req.query if ([uuid, session, pagesize, current].some(v => v === '' || v === null || v === undefined)) return res.json({ ...BaseStdResponse.MISSING_PARAMETER }) if (isNaN(pagesize) || Number(pagesize) <= 0 || isNaN(current) || Number(current) <= 0) return res.json({ ...BaseStdResponse.ERR, msg: '参数错误' }) if (!await AccessControl.checkSession(uuid, session)) return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED }) const permission = await AccessControl.getPermission(uuid) if (!permission.includes('admin') && !permission.includes('server') && !permission.includes('service')) return res.json({ ...BaseStdResponse.PERMISSION_DENIED }) const offset = (Number(current) - 1) * Number(pagesize) const where = ['1 = 1'] const params = [] const countParams = [] if (create_user) { where.push('pt.create_user COLLATE utf8mb4_general_ci = (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)') params.push(create_user) countParams.push(create_user) } if (username) { where.push('u.username COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)') params.push(`%${username}%`) countParams.push(`%${username}%`) } if (email) { where.push('pt.email COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)') params.push(`%${email}%`) countParams.push(`%${email}%`) } if (area) { where.push('pt.area COLLATE utf8mb4_general_ci = (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)') params.push(area) countParams.push(area) } if (building) { where.push('pt.building COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)') params.push(`%${building}%`) countParams.push(`%${building}%`) } if (room) { where.push('pt.room COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)') params.push(`%${room}%`) countParams.push(`%${room}%`) } if (Array.isArray(queryTime) && queryTime.length === 2) { where.push('pt.update_time >= ? AND pt.update_time < ?') params.push(queryTime[0], queryTime[1]) countParams.push(queryTime[0], queryTime[1]) } const whereSql = where.join(' AND ') const listSql = ` SELECT pt.id, pt.create_user, pt.create_time, pt.update_time, pt.area, pt.building, pt.room, pt.email, pt.lowest, pt.notes, pt.balance, pt.koufei_date, pt.is_notice, u.username, u.avatar FROM power_task pt LEFT JOIN users u ON u.uuid COLLATE utf8mb4_general_ci = pt.create_user COLLATE utf8mb4_general_ci WHERE ${whereSql} ORDER BY pt.id DESC LIMIT ? OFFSET ? ` const countSql = ` SELECT COUNT(*) AS total FROM power_task pt LEFT JOIN users u ON u.uuid COLLATE utf8mb4_general_ci = pt.create_user COLLATE utf8mb4_general_ci WHERE ${whereSql} ` params.push(String(pagesize), String(offset)) const rows = await db.query(listSql, params) const countRows = await db.query(countSql, countParams) if (!rows || !countRows) return res.json({ ...BaseStdResponse.DATABASE_ERR }) return res.json({ ...BaseStdResponse.OK, data: rows, pagination: { current: Number(current), pagesize: Number(pagesize), total: countRows[0]?.total || 0 } }) } } module.exports.AdminPowerTaskList = AdminPowerTaskList