| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- 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 GetTask extends API {
- constructor() {
- super()
- this.setPath('/QK/Task')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const { uuid, status, student_num, name, batch_id, course_name, course } = req.query
- const list = await scheduler.listUserTasks(uuid, { status, student_num, name, batch_id, course_name, course })
- return res.json({ ...BaseStdResponse.OK, data: list })
- } catch (err) {
- this.logger.error(`获取抢课任务失败:${err.stack || err}`)
- return fail(res, err, '获取抢课任务失败')
- }
- }
- }
- class GetTaskDetail extends API {
- constructor() {
- super()
- this.setPath('/QK/Task/Detail')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- try {
- const { uuid, id } = req.query
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- const detail = await scheduler.getTaskDetail(uuid, id)
- if (!detail) {
- return res.json({ ...BaseStdResponse.ERR, msg: '任务不存在' })
- }
- return res.json({ ...BaseStdResponse.OK, data: detail })
- } catch (err) {
- this.logger.error(`获取抢课任务详情失败:${err.stack || err}`)
- return fail(res, err, '获取抢课任务详情失败')
- }
- }
- }
- class SaveTask extends API {
- constructor() {
- super()
- this.setPath('/QK/Task')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { uuid, id, batch_id, jw_account_id } = req.body
- if ([uuid, batch_id, jw_account_id].some(value => value === '' || value === null || value === undefined)) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER, msg: '请选择选课批次和统一身份认证账号' })
- }
- if (id) {
- await scheduler.updateTask(uuid, id, req.body)
- this.logger.info(`[QK][API][SaveTask] 用户更新任务 uuid=${uuid} taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- }
- const taskId = await scheduler.createTask(uuid, req.body)
- this.logger.info(`[QK][API][SaveTask] 用户创建任务 uuid=${uuid} taskId=${taskId} jw_account_id=${jw_account_id}`)
- return res.json({ ...BaseStdResponse.OK, data: { id: taskId } })
- } catch (err) {
- this.logger.error(`保存抢课任务失败:${err.stack || err}`)
- return fail(res, err, '保存抢课任务失败')
- }
- }
- }
- class DeleteTask extends API {
- constructor() {
- super()
- this.setPath('/QK/Task')
- this.setMethod('DELETE')
- }
- async onRequest(req, res) {
- try {
- const { uuid, id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.cancelTask(uuid, id)
- this.logger.info(`[QK][API][DeleteTask] 用户取消任务 uuid=${uuid} 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('/QK/Task/Start')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { uuid, id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.startTask(uuid, id)
- this.logger.info(`[QK][API][StartTask] 用户开启任务 uuid=${uuid} 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('/QK/Task/Pause')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- try {
- const { uuid, id } = req.body
- if (!id) {
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- }
- await scheduler.pauseTask(uuid, id)
- this.logger.info(`[QK][API][PauseTask] 用户暂停任务 uuid=${uuid} taskId=${id}`)
- return res.json({ ...BaseStdResponse.OK })
- } catch (err) {
- this.logger.error(`暂停抢课任务失败:${err.stack || err}`)
- return fail(res, err, '暂停抢课任务失败')
- }
- }
- }
- module.exports = {
- GetTask,
- GetTaskDetail,
- SaveTask,
- DeleteTask,
- StartTask,
- PauseTask
- }
|