Browse Source

✨ feat: 新增安卓APP更新账号信息途径

Pchen. 2 months ago
parent
commit
4c9ffbd63e

+ 6 - 6
apis/Lepao/Account/UpdateAccount.js → apis/Lepao/Account/UpdateAccount/UpdateAccount.js

@@ -1,10 +1,10 @@
-const API = require("../../../lib/API.js")
-const db = require("../../../plugin/DataBase/db.js")
+const API = require("../../../../lib/API.js")
+const db = require("../../../../plugin/DataBase/db.js")
 const axios = require('axios')
 const axios = require('axios')
-const EmailTemplate = require('../../../plugin/Email/emailTemplate.js')
-const config = require('../../../config.json')
-const lepao = require("../../../lib/Lepao/Lepao.js").lepao
-const { BaseStdResponse } = require("../../../BaseStdResponse.js")
+const EmailTemplate = require('../../../../plugin/Email/emailTemplate.js')
+const config = require('../../../../config.json')
+const lepao = require("../../../../lib/Lepao/Lepao.js").lepao
+const { BaseStdResponse } = require("../../../../BaseStdResponse.js")
 
 
 // 客户端上传数据接口
 // 客户端上传数据接口
 class UpdateAccount extends API {
 class UpdateAccount extends API {

+ 136 - 0
apis/Lepao/Account/UpdateAccount/UpdateAccountAndroidApp.js

@@ -0,0 +1,136 @@
+const API = require("../../../../lib/API.js")
+const db = require("../../../../plugin/DataBase/db.js")
+const axios = require('axios')
+const EmailTemplate = require('../../../../plugin/Email/emailTemplate.js')
+const config = require('../../../../config.json')
+const lepao = require("../../../../lib/Lepao/Lepao.js").lepao
+const { BaseStdResponse } = require("../../../../BaseStdResponse.js")
+
+// 客户端上传数据接口
+class UpdateAccountAndroidApp extends API {
+    constructor() {
+        super()
+
+        this.runpy = config.runpy
+
+        this.setPath('/Lepao/UpdateAccountAndroidApp')
+        this.setMethod('POST')
+    }
+
+    async onRequest(req, res) {
+        let { reqData, resData } = req.body
+
+        if ([reqData, resData].some(value => value === '' || value === null || value === undefined))
+            return res.json({
+                ...BaseStdResponse.MISSING_PARAMETER
+            })
+
+        try {
+            const endpoint = config.runpy + '/decrypted_data'
+            const ReqData = await axios.post(endpoint, { data: reqData })
+            let userData = ReqData.data
+            if (userData?.code !== 200 || !userData.data)
+                return res.json({
+                    ...BaseStdResponse.ERR,
+                    msg: '无法解析用户数据,请重试'
+                })
+            const { token } = userData.data
+            if ([token].some(value => value === '' || value === null || value === undefined))
+                return res.json({
+                    ...BaseStdResponse.ERR,
+                    msg: '未提取出用户登录信息,请重试'
+                })
+
+            const ResData = await axios.post(endpoint, { data: resData })
+            let userData2 = ResData.data
+            if (userData2?.code !== 200 || !userData2.data)
+                return res.json({
+                    ...BaseStdResponse.ERR,
+                    msg: '无法解析用户数据,请重试'
+                })
+            const { uid, user_avatar, student_num, school_id, grade_id, class_id, sex, name, academy_name } = userData2.data
+            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 email, create_user, auto_run FROM lepao_account WHERE student_num = ? AND 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 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', student_num])
+
+            if (updateRows && updateRows.affectedRows > 0) {
+                let msg
+                if(findRows[0].auto_run === 1) {
+                    msg = `当前已开启自动乐跑,系统随后将自动进行乐跑。后续通知将发送到您的邮箱:${findRows[0].email}。请留意邮箱提醒。`
+                }
+                else {
+                    msg = `当前未开启自动乐跑,如需进行乐跑,请前往 RunForge 手动执行乐跑操作。后续通知将发送到您的邮箱:${findRows[0].email},请留意邮箱提醒。`
+                }
+                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,
+                    account: student_num,
+                    academy_name,
+                    grade_id,
+                    auto_run: findRows[0].auto_run
+                }
+
+                await EmailTemplate.updateSuccess(findRows[0].email, emailData)
+
+                if (findRows[0].auto_run === 1) {
+                    lepao.beginLepao(findRows[0].create_user, student_num, token, uid, school_id, 1)
+                }
+            }
+
+            // 获取新加账号中存在的路径
+            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}`)
+                const recordUrl = this.runpy + '/get_path_data'
+                await axios.post(recordUrl, reqData)
+            } catch (error) {
+                this.logger.info(`获取跑步记录出错 ${error.stack}`)
+            }
+
+        } catch (error) {
+            this.logger.error(`更新用户信息时出错。${error.stack}`)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '更新用户信息失败,请重试'
+            })
+        }
+    }
+}
+
+module.exports.UpdateAccountAndroidApp = UpdateAccountAndroidApp