StartLepao.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const API = require("../../lib/API");
  2. const db = require('../../plugin/DataBase/db')
  3. const mq = require('../../plugin/mq')
  4. const {
  5. assertRunforgeTaskIngress,
  6. publishRunforgeTask
  7. } = require('../../plugin/mq/runforgeTaskMq')
  8. const mqNames = require('../../plugin/mq/jkesMqNames')
  9. const { BaseStdResponse } = require("../../BaseStdResponse")
  10. const { prepareAutoRunTask, buildStartRunPayload } = require('../../plugin/jkes/prepareAutoRunTask')
  11. class StartLepao extends API {
  12. constructor() {
  13. super();
  14. this.noEncrypt()
  15. this.setPath('/Corn/StartLepao');
  16. this.setMethod('GET');
  17. }
  18. async onRequest(req, res) {
  19. try {
  20. let { time } = req.query
  21. if ([time].some(value => value === '' || value === null || value === undefined))
  22. return res.json({
  23. ...BaseStdResponse.MISSING_PARAMETER
  24. })
  25. res.json({
  26. ...BaseStdResponse.OK
  27. })
  28. this.logger.info('开始执行补充乐跑任务')
  29. const day = new Date().getDay()
  30. let sql = `
  31. SELECT name, student_num, auto_day, token, target_count,
  32. auto_run_distance_min_km, auto_run_distance_max_km, pace_min_sec_per_km, pace_max_sec_per_km
  33. FROM lepao_account
  34. WHERE auto_run = 1 AND state = 1
  35. AND JSON_CONTAINS(auto_day, CAST(? AS JSON))
  36. AND (auto_time = ? OR (auto_time = -1 AND today_auto_time = ?))
  37. `
  38. let r = await db.query(sql, [day, time, time])
  39. if (!r)
  40. return this.logger.error('获取补充乐跑账号失败!')
  41. for (const item of r) {
  42. const { name, student_num } = item
  43. this.logger.info(`${name}(${student_num})开始补充乐跑`)
  44. const prepared = await prepareAutoRunTask(item)
  45. if (!prepared.run) {
  46. this.logger.info(`${name}(${student_num}) JKES 补充乐跑跳过:${prepared.reason}`)
  47. continue
  48. }
  49. try {
  50. const channel = await mq.getChannel(mqNames.channelLepaoCorn)
  51. await assertRunforgeTaskIngress(channel, this.logger)
  52. const payload = buildStartRunPayload(student_num, prepared.task, { prefix: 'lepao:repair' })
  53. publishRunforgeTask(channel, payload)
  54. this.logger.info(`${name}(${student_num})已投递补充乐跑任务`)
  55. } catch (err) {
  56. this.logger.error(`${name}(${student_num})补充乐跑失败:${err.message || err}`)
  57. }
  58. }
  59. this.logger.info('补充乐跑任务执行完毕')
  60. } catch (error) {
  61. this.logger.error(error)
  62. }
  63. }
  64. }
  65. module.exports.StartLepao = StartLepao