| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- const API = require("../../../../lib/API.js")
- const db = require("../../../../plugin/DataBase/db.js")
- const EmailTemplate = require('../../../../plugin/Email/emailTemplate.js')
- const { enqueueLepaoStartRun } = require('../../../../plugin/mq/enqueueLepaoStartRun')
- const mq = require('../../../../plugin/mq')
- const { mq: mqName } = require('../../../../plugin/mq/mqPrefix')
- const { BaseStdResponse } = require("../../../../BaseStdResponse.js")
- const { dataDecrypt } = require('../../../../plugin/Lepao/Crypto')
- const { enqueueLepaoSyncAccountInfo } = require('../../../../plugin/mq/enqueueLepaoSyncAccountInfo')
- // 客户端上传数据接口
- class UpdateAccountAndroidApp extends API {
- constructor() {
- super()
- this.messageQueue = mqName('runforge_message_queue')
- this.setPath('/Lepao/UpdateAccountAndroidApp')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- let { reqData, resData, userAgent, deviceModel } = req.body
- if ([reqData, resData, userAgent, deviceModel].some(value => value === '' || value === null || value === undefined))
- return res.json({
- ...BaseStdResponse.MISSING_PARAMETER,
- msg: '账号信息不完整,请稍后再试获联系客服处理'
- })
- try {
- const userData = JSON.parse(dataDecrypt(reqData) || '{}')
- if (!userData || Object.keys(userData).length === 0)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '无法解析用户数据,请重试'
- })
- const { token } = userData
- if ([token].some(value => value === '' || value === null || value === undefined))
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '未提取出用户登录信息,请重试'
- })
- const userData2 = JSON.parse(dataDecrypt(resData) || '{}')
- if (!userData2 || Object.keys(userData2).length === 0)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '无法解析用户数据,请重试'
- })
- const { uid, user_avatar, student_num, school_id, grade_id, class_id, sex, name, academy_name } = userData2
- if ([uid, student_num, school_id, grade_id, class_id, sex, name, academy_name].some(value => value === '' || value === null || value === undefined))
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '未提取出用户登录信息,请重试'
- })
- let findSql = `
- SELECT
- a.email, a.create_user, a.auto_run, a.auto_day, a.notice_type, e.bot_umo
- FROM
- lepao_account a
- LEFT JOIN
- lepao_extra e
- ON
- a.student_num = e.student_num
- WHERE
- a.student_num = ? AND a.create_user IS NOT NULL
- `
- let findRows = await db.query(findSql, [student_num])
- if (!findRows)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '无法解析用户数据,请重试'
- })
- if (findRows.length === 0)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '该乐跑账号尚未在RunForge系统中添加,请先添加你的账户'
- })
- const time = new Date().getTime()
- let updateSql = 'UPDATE lepao_account SET uid = ?, token = ?, school_id = ?, name = ?, grade_id = ?, class_id = ?, sex = ?, academy_name = ?, update_time = ?, user_avatar = ?, state = 1, userAgent = ?, deviceModel = ? WHERE student_num = ?'
- let updateRows = await db.query(updateSql, [uid, token, school_id, name, grade_id, class_id, sex, academy_name, time, user_avatar ?? 'https://lepao-cloud.xxoo365.top/view.php/25aa126dc406974ff3579a99a2c6501a.png', userAgent ?? '', deviceModel ?? '', student_num])
- if (updateRows && updateRows.affectedRows > 0) {
- let msg
- if (findRows[0].auto_run === 1) {
- msg = `当前已开启自动乐跑,系统将自动进行乐跑。后续通知将发送到您预留的联系方式,请留意。`
- }
- else {
- msg = `当前未开启自动乐跑,如需进行乐跑,请前往 RunForge 手动执行乐跑操作。后续通知将发送到您预留的联系方式,请留意。`
- }
- res.json({
- ...BaseStdResponse.OK,
- data: {
- name,
- user_avatar,
- sex,
- academy_name,
- grade_id,
- auto_run: findRows[0].auto_run,
- account: student_num,
- msg
- }
- })
- let emailData = {
- name,
- type: 'lepao_update',
- umo: findRows[0].bot_umo,
- account: student_num,
- academy_name,
- grade_id,
- auto_run: findRows[0].auto_run
- }
- if (findRows[0].notice_type === 'bot' && findRows[0].bot_umo) {
- this.logger.info(`${student_num}发送乐跑更新Bot通知,UMO=${findRows[0].bot_umo}`)
- const ch = await mq.getChannel(this.messageQueue)
- await ch.assertQueue(this.messageQueue, {
- durable: true
- })
- ch.sendToQueue(
- this.messageQueue,
- Buffer.from(JSON.stringify(emailData)),
- {
- persistent: true,
- contentType: 'application/json'
- }
- )
- this.logger.info(`${student_num}乐跑更新Bot通知发送完成`)
- } else if (findRows[0].notice_type === 'email' && findRows[0].email) {
- await EmailTemplate.updateSuccess(findRows[0].email, emailData)
- this.logger.info(`${student_num}乐跑更新邮件发送完成`)
- }
- if (findRows[0].auto_run === 1 && Array.isArray(findRows[0].auto_day) && findRows[0].auto_day.includes(new Date().getDay())) {
- enqueueLepaoStartRun(student_num, this.logger)
- }
- enqueueLepaoSyncAccountInfo(student_num, this.logger)
- }
- // 获取新加账号中存在的路径
- // try {
- // let sql = 'SELECT id FROM lepao_record WHERE lepao_account = ?'
- // let rows = await db.query(sql, [student_num])
- // // 不是老帐号就不获取
- // if (!rows || rows.length !== 0) return
- // const reqData = { uid, token, school_id, student_id: student_num }
- // this.logger.info(`开始请求获取跑步记录 uid=${uid} student_id=${student_num}`)
-
- // } catch (error) {
- // this.logger.info(`获取跑步记录出错 ${error.stack}`)
- // }
- } catch (error) {
- this.logger.error(`更新用户信息时出错。${error.stack}`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '更新用户信息失败,请重试'
- })
- }
- }
- }
- module.exports.UpdateAccountAndroidApp = UpdateAccountAndroidApp
|