| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- const API = require('../../../lib/API')
- const { BaseStdResponse } = require('../../../BaseStdResponse')
- const { TaskScheduler } = require('../../../lib/QK/TaskScheduler')
- const scheduler = new TaskScheduler()
- function fail(res, err, fallback = '后台抢课管理操作失败') {
- return res.json({
- ...BaseStdResponse.ERR,
- msg: err?.message || fallback
- })
- }
- class ListClient extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Client/List')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const list = await scheduler.listClients()
- return res.json({ ...BaseStdResponse.OK, data: list })
- } catch (err) {
- this.logger.error(`获取抢课客户端列表失败:${err.stack || err}`)
- return fail(res, err, '获取抢课客户端列表失败')
- }
- }
- }
- class DeleteClient extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Client/Delete')
- this.setMethod('DELETE')
- }
- async onRequest(req, res) {
- try {
- const { client_id } = req.body
- if (!client_id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.deleteClient(client_id)
- this.logger.info(`[QK][API][DeleteClient] 已禁用客户端 clientId=${client_id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`禁用抢课客户端失败:${err.stack || err}`)
- return fail(res, err, '禁用抢课客户端失败')
- }
- }
- }
- class ListTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/List')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const result = await scheduler.listAdminTasks(req.query)
- return res.json({ ...BaseStdResponse.OK, data: result })
- } catch (err) {
- this.logger.error(`获取抢课任务列表失败:${err.stack || err}`)
- return fail(res, err, '获取抢课任务列表失败')
- }
- }
- }
- class GetTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/Detail')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const { id } = req.query
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- const task = await scheduler.getAdminTask(id)
- if (!task) {
- return res.json({ ...BaseStdResponse.ERR, msg: '任务不存在' })
- }
- return res.json({ ...BaseStdResponse.OK, data: task })
- } catch (err) {
- this.logger.error(`获取抢课任务详情失败:${err.stack || err}`)
- return fail(res, err, '获取抢课任务详情失败')
- }
- }
- }
- class UpdateTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/Update')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.adminUpdateTask(id, req.body)
- this.logger.info(`[QK][API][AdminUpdateTask] 管理员更新任务 taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`管理员更新抢课任务失败:${err.stack || err}`)
- return fail(res, err, '更新抢课任务失败')
- }
- }
- }
- class CancelTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/Cancel')
- this.setMethod('DELETE')
- }
- async onRequest(req, res) {
- try {
- const { id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.adminCancelTask(id)
- this.logger.info(`[QK][API][AdminCancelTask] 管理员取消任务 taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`管理员取消抢课任务失败:${err.stack || err}`)
- return fail(res, err, '取消抢课任务失败')
- }
- }
- }
- class RetryTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/Retry')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.adminRetryTask(id)
- this.logger.info(`[QK][API][AdminRetryTask] 管理员重试任务 taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`管理员重试抢课任务失败:${err.stack || err}`)
- return fail(res, err, '重试抢课任务失败')
- }
- }
- }
- class StartTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/Start')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.adminStartTask(id)
- this.logger.info(`[QK][API][AdminStartTask] 管理员开启任务 taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`管理员开启抢课任务失败:${err.stack || err}`)
- return fail(res, err, '开启抢课任务失败')
- }
- }
- }
- class PauseTask extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Task/Pause')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.adminPauseTask(id)
- this.logger.info(`[QK][API][AdminPauseTask] 管理员暂停任务 taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`管理员暂停抢课任务失败:${err.stack || err}`)
- return fail(res, err, '暂停抢课任务失败')
- }
- }
- }
- class ListReport extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Report/List')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const result = await scheduler.listAdminReports(req.query)
- return res.json({ ...BaseStdResponse.OK, data: result })
- } catch (err) {
- this.logger.error(`获取抢课回报记录失败:${err.stack || err}`)
- return fail(res, err, '获取抢课回报记录失败')
- }
- }
- }
- class ListBatch extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Batch/List')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const list = await scheduler.listBatches()
- return res.json({ ...BaseStdResponse.OK, data: list })
- } catch (err) {
- this.logger.error(`获取抢课批次列表失败:${err.stack || err}`)
- return fail(res, err, '获取抢课批次列表失败')
- }
- }
- }
- class SaveBatch extends API {
- constructor() {
- super()
- this.setPath('/Admin/QK/Batch/Save')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { id, name, jx0502zbid, enabled } = req.body
- if (!name || !jx0502zbid) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- if (id) {
- await scheduler.updateBatch(id, req.body)
- this.logger.info(`[QK][API][SaveBatch] 更新批次 batchId=${id}`)
- return res.json({ ...BaseStdResponse.OK, data: { id } })
- }
- const batchId = await scheduler.createBatch({ name, jx0502zbid, enabled })
- this.logger.info(`[QK][API][SaveBatch] 创建批次 batchId=${batchId}`)
- return res.json({ ...BaseStdResponse.OK, data: { id: batchId } })
- } catch (err) {
- this.logger.error(`保存抢课批次失败:${err.stack || err}`)
- return fail(res, err, '保存抢课批次失败')
- }
- }
- }
- module.exports = {
- ListClient,
- DeleteClient,
- ListTask,
- GetTask,
- UpdateTask,
- CancelTask,
- RetryTask,
- StartTask,
- PauseTask,
- ListReport,
- ListBatch,
- SaveBatch
- }
|