| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- const API = require("../../../lib/API.js")
- const db = require("../../../plugin/DataBase/db.js")
- const AccessControl = require("../../../lib/AccessControl.js")
- const { BaseStdResponse } = require("../../../BaseStdResponse.js")
- const { fetchJkesMonthKm, fetchJkesTotalKm } = require("../../../plugin/jkes/stats")
- const { readState, writeState } = require("../../../plugin/jkes/monthPolicy")
- /**
- * 使用库内 JKES token 从官方接口同步本月/累计里程到 lepao_account(term_num / total_num)
- */
- class UpdateSelfAccount extends API {
- constructor() {
- super()
- this.setPath('/Lepao/Account/UpdateSelfAccount')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- const { uuid, session, student_num } = req.body
- if ([uuid, session, student_num].some((v) => v === '' || v === null || v === undefined)) {
- return res.json({
- ...BaseStdResponse.MISSING_PARAMETER
- })
- }
- if (!await AccessControl.checkSession(uuid, session)) {
- return res.status(401).json({
- ...BaseStdResponse.ACCESS_DENIED
- })
- }
- try {
- const rows = await db.query(
- 'SELECT token, state FROM lepao_account WHERE student_num = ? AND create_user = ?',
- [student_num, uuid]
- )
- if (!rows || rows.length !== 1) {
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '未找到该乐跑账号或无权限操作'
- })
- }
- const account = rows[0]
- if (!account.token || String(account.token).trim() === '') {
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '账号未登录,请先在客户端更新 JKES 登录信息'
- })
- }
- const now = new Date()
- const y = now.getFullYear()
- const m = now.getMonth() + 1
- const monthKm = await fetchJkesMonthKm(account.token, y, m)
- const totalKm = await fetchJkesTotalKm(account.token)
- const updateTime = Date.now()
- const updateRows = await db.query(
- 'UPDATE lepao_account SET term_num = ?, total_num = ?, state = 1, update_time = ? WHERE student_num = ? AND create_user = ?',
- [monthKm, totalKm, updateTime, student_num, uuid]
- )
- if (!updateRows || updateRows.affectedRows !== 1) {
- return res.json({
- ...BaseStdResponse.DATABASE_ERR
- })
- }
- const prev = await readState(student_num, now)
- await writeState(student_num, { km: monthKm, doubles: prev.doubles }, now)
- return res.json({
- ...BaseStdResponse.OK,
- data: {
- term_num: monthKm,
- total_num: totalKm,
- state: 1
- }
- })
- } catch (error) {
- this.logger.error(`用户自助同步乐跑账号失败: ${error.stack || error}`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '同步失败,请稍后再试'
- })
- }
- }
- }
- module.exports.UpdateSelfAccount = UpdateSelfAccount
|