| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- const EmailTemplate = require('../Email/emailTemplate.js')
- const { enqueueLepaoStartRun } = require('../mq/enqueueLepaoStartRun')
- const mq = require('../mq')
- const { BaseStdResponse } = require('../../BaseStdResponse.js')
- const Redis = require('../DataBase/Redis.js')
- const jkesRedisKeys = require('./redisKeys.js')
- const { syncLepaoAccountFromToken } = require('./syncLepaoAccountFromToken.js')
- async function executeLepaoTokenUpdate(ctx, req, res) {
- const { logger, messageQueue } = ctx
- const { token } = req.body
- if ([token].some((value) => value === '' || value === null || value === undefined)) {
- return res.json({
- ...BaseStdResponse.MISSING_PARAMETER
- })
- }
- try {
- const sync = await syncLepaoAccountFromToken(token)
- if (!sync.ok) {
- logger.error(`获取/更新用户信息失败: ${sync.msg}`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: sync.msg
- })
- }
- const { student_num, findRows, profile } = sync
- try {
- await Redis.set(jkesRedisKeys.runnerFlag(student_num), '1')
- } catch (e) {
- logger.error(`${student_num} 写入 jkes_runner 标记失败:${e.message || e}`)
- }
- let msg
- if (findRows[0].auto_run === 1) {
- msg = `当前已开启自动乐跑,系统将自动进行乐跑。后续通知将发送到您预留的联系方式,请留意。`
- } else {
- msg = `当前未开启自动乐跑,如需进行乐跑,请前往 哪吒乐跑 手动执行乐跑操作。后续通知将发送到您预留的联系方式,请留意。`
- }
- res.json({
- ...BaseStdResponse.OK,
- data: {
- name: profile.name,
- user_avatar: profile.user_avatar,
- sex: profile.sex,
- academy_name: profile.academy_name,
- grade_id: profile.grade_id,
- class_id: profile.class_id,
- auto_run: findRows[0].auto_run,
- account: student_num,
- msg
- }
- })
- const emailData = {
- name: profile.name,
- type: 'lepao_update',
- umo: findRows[0].bot_umo,
- account: student_num,
- academy_name: profile.academy_name,
- grade_id: profile.grade_id,
- auto_run: findRows[0].auto_run
- }
- if (findRows[0].notice_type === 'bot' && findRows[0].bot_umo) {
- logger.info(`${student_num}发送乐跑更新Bot通知,UMO=${findRows[0].bot_umo}`)
- const ch = await mq.getChannel(messageQueue)
- await ch.assertQueue(messageQueue, {
- durable: true
- })
- ch.sendToQueue(messageQueue, Buffer.from(JSON.stringify(emailData)), {
- persistent: true,
- contentType: 'application/json'
- })
- logger.info(`${student_num}乐跑更新Bot通知发送完成`)
- } else if (findRows[0].notice_type === 'email' && findRows[0].email) {
- await EmailTemplate.updateSuccess(findRows[0].email, emailData)
- logger.info(`${student_num}乐跑更新邮件发送完成`)
- }
- if (
- findRows[0].auto_run === 1 &&
- Array.isArray(findRows[0].auto_day) &&
- findRows[0].auto_day.includes(new Date().getDay())
- ) {
- const { planJkesAutoRun } = require('./monthPolicy')
- planJkesAutoRun(student_num, findRows[0].auto_day, token, {
- monthTargetKm: findRows[0].target_count,
- stopAfterMinimum: true
- })
- .then((plan) => {
- if (plan.run) {
- enqueueLepaoStartRun(student_num, logger, {
- targetKm: plan.targetKm,
- autoDoubleSlot: plan.targetKm >= 2
- })
- } else {
- logger.info(`${student_num} 登录后未触发 JKES 自动乐跑:${plan.reason}`)
- }
- })
- .catch((e) => {
- logger.error(`${student_num} JKES 自动乐跑计划失败:${e.message || e}`)
- })
- }
- } catch (error) {
- logger.error(`更新用户信息时出错。${error.stack}`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '更新用户信息失败,请重试'
- })
- }
- }
- module.exports = {
- executeLepaoTokenUpdate
- }
|