syncLepaoAccountFromToken.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /**
  2. * 用 JKES token 拉取 getMyInfo 并更新 lepao_account(哪吒乐跑 / JKES 唯一数据源)
  3. */
  4. const db = require('../DataBase/db.js')
  5. const { jkesRequest } = require('./request.js')
  6. const DEFAULT_AVATAR =
  7. 'https://lepao-cloud.xxoo365.top/view.php/25aa126dc406974ff3579a99a2c6501a.png'
  8. /**
  9. * @param {string} token
  10. * @param {{ userAgent?: string, deviceModel?: string }} [device]
  11. * @returns {Promise<
  12. * | { ok: false, msg: string, jkesRes?: object }
  13. * | {
  14. * ok: true
  15. * student_num: string
  16. * findRows: object[]
  17. * profile: {
  18. * name: string
  19. * academy_name: string
  20. * grade_id: any
  21. * class_id: any
  22. * sex: number
  23. * user_avatar: string
  24. * }
  25. * }
  26. * >}
  27. */
  28. async function syncLepaoAccountFromToken(token, device = {}) {
  29. const jkesRes = await jkesRequest('/sys/user/getMyInfo', {}, token)
  30. console.log(jkesRes)
  31. if (!jkesRes || jkesRes.code !== 0 || !jkesRes.data || !jkesRes.data.info) {
  32. return {
  33. ok: false,
  34. msg: jkesRes?.message || '获取用户信息失败,请稍后重试或联系客服',
  35. jkesRes
  36. }
  37. }
  38. const {
  39. code,
  40. realName,
  41. identifyCode,
  42. mobileNumber,
  43. gender,
  44. gradeYear,
  45. collegeCode,
  46. classCode,
  47. homeAddr
  48. } = jkesRes.data.info
  49. const sex = gender?.label === '男' ? 1 : 2
  50. const name = realName
  51. const academy_name = collegeCode?.name ?? ''
  52. const grade_id = gradeYear
  53. const class_id = classCode?.className ?? ''
  54. const student_num = code
  55. const user_avatar = DEFAULT_AVATAR
  56. const findSql = `
  57. SELECT
  58. a.email, a.create_user, a.auto_run, a.auto_day, a.notice_type, e.bot_umo
  59. FROM
  60. lepao_account a
  61. LEFT JOIN
  62. lepao_extra e
  63. ON
  64. a.student_num = e.student_num
  65. WHERE
  66. a.student_num = ? AND a.create_user IS NOT NULL
  67. `
  68. const findRows = await db.query(findSql, [student_num])
  69. if (!findRows) {
  70. return { ok: false, msg: '无法获取用户数据,请重试' }
  71. }
  72. if (findRows.length === 0) {
  73. return {
  74. ok: false,
  75. msg: '该乐跑账号尚未在哪吒乐跑中添加,请先前往 https://jkes.xxoo365.top/ 添加你的账户'
  76. }
  77. }
  78. const time = Date.now()
  79. const ua = device.userAgent
  80. const dm = device.deviceModel
  81. let updateSql =
  82. 'UPDATE lepao_account SET token = ?, name = ?, grade_id = ?, class_id = ?, sex = ?, academy_name = ?, update_time = ?, user_avatar = ?, identifyCode = ?, mobileNumber = ?, homeAddr = ?, state = 1'
  83. const params = [
  84. token,
  85. name,
  86. grade_id,
  87. class_id,
  88. sex,
  89. academy_name,
  90. time,
  91. user_avatar,
  92. identifyCode,
  93. mobileNumber,
  94. homeAddr
  95. ]
  96. if (ua != null && ua !== '') {
  97. updateSql += ', userAgent = ?'
  98. params.push(ua)
  99. }
  100. if (dm != null && dm !== '') {
  101. updateSql += ', deviceModel = ?'
  102. params.push(dm)
  103. }
  104. updateSql += ' WHERE student_num = ?'
  105. params.push(student_num)
  106. const updateRows = await db.query(updateSql, params)
  107. if (!updateRows || updateRows.affectedRows < 1) {
  108. return { ok: false, msg: '更新账号信息失败,请重试' }
  109. }
  110. return {
  111. ok: true,
  112. student_num,
  113. findRows,
  114. profile: {
  115. name,
  116. academy_name,
  117. grade_id,
  118. class_id,
  119. sex,
  120. user_avatar
  121. }
  122. }
  123. }
  124. module.exports = {
  125. syncLepaoAccountFromToken,
  126. DEFAULT_AVATAR
  127. }