UpdateAccountAndroidApp.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. const API = require("../../../../lib/API.js")
  2. const db = require("../../../../plugin/DataBase/db.js")
  3. const axios = require('axios')
  4. const EmailTemplate = require('../../../../plugin/Email/emailTemplate.js')
  5. const config = require('../../../../config.json')
  6. const lepao = require("../../../../lib/Lepao/Lepao.js").lepao
  7. const { BaseStdResponse } = require("../../../../BaseStdResponse.js")
  8. // 客户端上传数据接口
  9. class UpdateAccountAndroidApp extends API {
  10. constructor() {
  11. super()
  12. this.runpy = config.runpy
  13. this.setPath('/Lepao/UpdateAccountAndroidApp')
  14. this.setMethod('POST')
  15. }
  16. async onRequest(req, res) {
  17. let { reqData, resData, userAgent, deviceModel } = req.body
  18. if ([reqData, resData, userAgent, deviceModel].some(value => value === '' || value === null || value === undefined))
  19. return res.json({
  20. ...BaseStdResponse.MISSING_PARAMETER,
  21. msg: '账号信息不完整,请稍后再试获联系客服处理'
  22. })
  23. try {
  24. const endpoint = config.runpy + '/decrypted_data'
  25. const ReqData = await axios.post(endpoint, { data: reqData })
  26. let userData = ReqData.data
  27. if (userData?.code !== 200 || !userData.data)
  28. return res.json({
  29. ...BaseStdResponse.ERR,
  30. msg: '无法解析用户数据,请重试'
  31. })
  32. const { token } = userData.data
  33. if ([token].some(value => value === '' || value === null || value === undefined))
  34. return res.json({
  35. ...BaseStdResponse.ERR,
  36. msg: '未提取出用户登录信息,请重试'
  37. })
  38. const ResData = await axios.post(endpoint, { data: resData })
  39. let userData2 = ResData.data
  40. if (userData2?.code !== 200 || !userData2.data)
  41. return res.json({
  42. ...BaseStdResponse.ERR,
  43. msg: '无法解析用户数据,请重试'
  44. })
  45. const { uid, user_avatar, student_num, school_id, grade_id, class_id, sex, name, academy_name } = userData2.data
  46. if ([uid, student_num, school_id, grade_id, class_id, sex, name, academy_name].some(value => value === '' || value === null || value === undefined))
  47. return res.json({
  48. ...BaseStdResponse.ERR,
  49. msg: '未提取出用户登录信息,请重试'
  50. })
  51. let findSql = 'SELECT email, create_user, auto_run FROM lepao_account WHERE student_num = ? AND create_user IS NOT NULL'
  52. let findRows = await db.query(findSql, [student_num])
  53. if (!findRows)
  54. return res.json({
  55. ...BaseStdResponse.ERR,
  56. msg: '无法解析用户数据,请重试'
  57. })
  58. if (findRows.length === 0)
  59. return res.json({
  60. ...BaseStdResponse.ERR,
  61. msg: '该乐跑账号尚未在RunForge系统中添加,请先添加你的账户'
  62. })
  63. const time = new Date().getTime()
  64. 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 = ?'
  65. 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])
  66. if (updateRows && updateRows.affectedRows > 0) {
  67. let msg
  68. if(findRows[0].auto_run === 1) {
  69. msg = `当前已开启自动乐跑,系统随后将自动进行乐跑。后续通知将发送到您的邮箱:${findRows[0].email}。请留意邮箱提醒。`
  70. }
  71. else {
  72. msg = `当前未开启自动乐跑,如需进行乐跑,请前往 RunForge 手动执行乐跑操作。后续通知将发送到您的邮箱:${findRows[0].email},请留意邮箱提醒。`
  73. }
  74. res.json({
  75. ...BaseStdResponse.OK,
  76. data: {
  77. name,
  78. user_avatar,
  79. sex,
  80. academy_name,
  81. grade_id,
  82. auto_run: findRows[0].auto_run,
  83. account: student_num,
  84. msg
  85. }
  86. })
  87. let emailData = {
  88. name,
  89. account: student_num,
  90. academy_name,
  91. grade_id,
  92. auto_run: findRows[0].auto_run
  93. }
  94. await EmailTemplate.updateSuccess(findRows[0].email, emailData)
  95. if (findRows[0].auto_run === 1) {
  96. lepao.beginLepao(findRows[0].create_user, student_num, token, uid, school_id, 1)
  97. }
  98. }
  99. // 获取新加账号中存在的路径
  100. try {
  101. let sql = 'SELECT id FROM lepao_record WHERE lepao_account = ?'
  102. let rows = await db.query(sql, [student_num])
  103. // 不是老帐号就不获取
  104. if (!rows || rows.length !== 0) return
  105. const reqData = { uid, token, school_id, student_id: student_num }
  106. this.logger.info(`开始请求获取跑步记录 uid=${uid} student_id=${student_num}`)
  107. const recordUrl = this.runpy + '/get_path_data'
  108. await axios.post(recordUrl, reqData)
  109. } catch (error) {
  110. this.logger.info(`获取跑步记录出错 ${error.stack}`)
  111. }
  112. } catch (error) {
  113. this.logger.error(`更新用户信息时出错。${error.stack}`)
  114. return res.json({
  115. ...BaseStdResponse.ERR,
  116. msg: '更新用户信息失败,请重试'
  117. })
  118. }
  119. }
  120. }
  121. module.exports.UpdateAccountAndroidApp = UpdateAccountAndroidApp