UpdateAccount.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. const API = require("../../../../lib/API.js")
  2. const db = require("../../../../plugin/DataBase/db.js")
  3. const EmailTemplate = require('../../../../plugin/Email/emailTemplate.js')
  4. const lepao = require("../../../../lib/Lepao/Lepao.js").lepao
  5. const mq = require('../../../../plugin/mq')
  6. const { BaseStdResponse } = require("../../../../BaseStdResponse.js")
  7. const { dataDecrypt } = require('../../../../plugin/Lepao/Crypto')
  8. // 客户端上传数据接口
  9. class UpdateAccount extends API {
  10. constructor() {
  11. super()
  12. this.messageQueue = 'runforge_message_queue'
  13. this.noEncrypt()
  14. this.setPath('/Lepao/UpdateAccount')
  15. this.setMethod('POST')
  16. }
  17. async onRequest(req, res) {
  18. let { reqData, resData } = req.body
  19. if ([reqData, resData].some(value => value === '' || value === null || value === undefined))
  20. return res.json({
  21. ...BaseStdResponse.MISSING_PARAMETER
  22. })
  23. try {
  24. const userData = JSON.parse(dataDecrypt(reqData) || '{}')
  25. if (!userData || Object.keys(userData).length === 0)
  26. return res.json({
  27. ...BaseStdResponse.ERR,
  28. msg: '无法解析用户数据,请重试'
  29. })
  30. const { token } = userData
  31. if ([token].some(value => value === '' || value === null || value === undefined))
  32. return res.json({
  33. ...BaseStdResponse.ERR,
  34. msg: '未提取出用户登录信息,请重试'
  35. })
  36. const userData2 = JSON.parse(dataDecrypt(resData) || '{}')
  37. if (!userData2 || Object.keys(userData2).length === 0)
  38. return res.json({
  39. ...BaseStdResponse.ERR,
  40. msg: '无法解析用户数据,请重试'
  41. })
  42. const { uid, user_avatar, student_num, school_id, grade_id, class_id, sex, name, academy_name } = userData2
  43. if ([uid, student_num, school_id, grade_id, class_id, sex, name, academy_name].some(value => value === '' || value === null || value === undefined))
  44. return res.json({
  45. ...BaseStdResponse.ERR,
  46. msg: '未提取出用户登录信息,请重试'
  47. })
  48. let findSql = `
  49. SELECT
  50. a.email, a.create_user, a.auto_run, a.auto_day, a.notice_type, e.bot_umo
  51. FROM
  52. lepao_account a
  53. LEFT JOIN
  54. lepao_extra e
  55. ON
  56. a.student_num = e.student_num
  57. WHERE
  58. a.student_num = ? AND a.create_user IS NOT NULL
  59. `
  60. let findRows = await db.query(findSql, [student_num])
  61. if (!findRows)
  62. return res.json({
  63. ...BaseStdResponse.ERR,
  64. msg: '无法解析用户数据,请重试'
  65. })
  66. if (findRows.length === 0)
  67. return res.json({
  68. ...BaseStdResponse.ERR,
  69. msg: '该乐跑账号尚未在RunForge系统中添加,请先前往 https://xxoo365.top/ 添加你的账户'
  70. })
  71. const time = new Date().getTime()
  72. let updateSql = 'UPDATE lepao_account SET uid = ?, token = ?, school_id = ?, name = ?, grade_id = ?, class_id = ?, sex = ?, academy_name = ?, update_time = ?, user_avatar = ?, state = 1 WHERE student_num = ?'
  73. 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', student_num])
  74. if (updateRows && updateRows.affectedRows > 0) {
  75. let msg
  76. if (findRows[0].auto_run === 1) {
  77. msg = `当前已开启自动乐跑,系统随后将自动进行乐跑。后续通知将发送到您预留的联系方式,请留意。`
  78. }
  79. else {
  80. msg = `当前未开启自动乐跑,如需进行乐跑,请前往 RunForge 手动执行乐跑操作。后续通知将发送到您预留的联系方式,请留意。`
  81. }
  82. res.json({
  83. ...BaseStdResponse.OK,
  84. data: {
  85. name,
  86. academy_name,
  87. grade_id,
  88. auto_run: findRows[0].auto_run,
  89. account: student_num,
  90. msg
  91. }
  92. })
  93. let emailData = {
  94. name,
  95. type: 'lepao_update',
  96. umo: findRows[0].bot_umo,
  97. account: student_num,
  98. academy_name,
  99. grade_id,
  100. auto_run: findRows[0].auto_run
  101. }
  102. if (findRows[0].notice_type === 'bot' && findRows[0].bot_umo) {
  103. this.logger.info(`${student_num}发送乐跑更新Bot通知,UMO=${rows[0].bot_umo}`)
  104. const ch = await mq.getChannel(this.messageQueue)
  105. await ch.assertQueue(this.messageQueue, {
  106. durable: true
  107. })
  108. ch.sendToQueue(
  109. this.messageQueue,
  110. Buffer.from(JSON.stringify(emailData)),
  111. {
  112. persistent: true,
  113. contentType: 'application/json'
  114. }
  115. )
  116. this.logger.info(`${student_num}乐跑更新Bot通知发送完成`)
  117. } else if (findRows[0].notice_type === 'email' && findRows[0].email) {
  118. await EmailTemplate.updateSuccess(findRows[0].email, emailData)
  119. this.logger.info(`${student_num}乐跑更新邮件发送完成`)
  120. }
  121. if (findRows[0].auto_run === 1 && Array.isArray(findRows[0].auto_day) && findRows[0].auto_day.includes(new Date().getDay())) {
  122. lepao.beginLepao(findRows[0].create_user, student_num, token, uid, school_id, 1)
  123. }
  124. }
  125. // 获取新加账号中存在的路径
  126. // try {
  127. // let sql = 'SELECT id FROM lepao_record WHERE lepao_account = ?'
  128. // let rows = await db.query(sql, [student_num])
  129. // // 不是老帐号就不获取
  130. // if (!rows || rows.length !== 0) return
  131. // const reqData = { uid, token, school_id, student_id: student_num }
  132. // this.logger.info(`开始请求获取跑步记录 uid=${uid} student_id=${student_num}`)
  133. // } catch (error) {
  134. // this.logger.info(`获取跑步记录出错 ${error.stack}`)
  135. // }
  136. } catch (error) {
  137. this.logger.error(`更新用户信息时出错。${error.stack}`)
  138. return res.json({
  139. ...BaseStdResponse.ERR,
  140. msg: '更新用户信息失败,请重试'
  141. })
  142. }
  143. }
  144. }
  145. module.exports.UpdateAccount = UpdateAccount;