Browse Source

✨ feat: 获取官方乐跑记录后自动同步

Pchen. 3 weeks ago
parent
commit
238f3f7536

+ 5 - 2
apis/Lepao/Record/Admin/GetOfficialTermRecords.js

@@ -5,7 +5,8 @@ const { getCurrentTerm, getTermRunRecord } = require('../../../../lib/Lepao/lepa
 const {
     isMissing,
     loadAdminOfficialAccount,
-    mapOfficialError
+    mapOfficialError,
+    syncOfficialTotalNum
 } = require('../../../../lib/Lepao/officialAccountAccess')
 
 class AdminGetOfficialTermRecords extends API {
@@ -49,6 +50,8 @@ class AdminGetOfficialTermRecords extends API {
                 { termId: currentTerm.term_id, page },
                 { logger: this.logger }
             )
+            const recordData = recordResult.data || {}
+            await syncOfficialTotalNum(student_num, recordData, this.logger)
 
             return res.json({
                 ...BaseStdResponse.OK,
@@ -56,7 +59,7 @@ class AdminGetOfficialTermRecords extends API {
                     term_id: currentTerm.term_id,
                     term_name: currentTerm.term_name,
                     page,
-                    ...(recordResult.data || {})
+                    ...recordData
                 }
             })
         } catch (error) {

+ 5 - 2
apis/Lepao/Record/GetOfficialTermRecords.js

@@ -5,7 +5,8 @@ const { getCurrentTerm, getTermRunRecord } = require('../../../lib/Lepao/lepaoOf
 const {
     isMissing,
     loadUserOfficialAccount,
-    mapOfficialError
+    mapOfficialError,
+    syncOfficialTotalNum
 } = require('../../../lib/Lepao/officialAccountAccess')
 
 class GetOfficialTermRecords extends API {
@@ -49,6 +50,8 @@ class GetOfficialTermRecords extends API {
                 { termId: currentTerm.term_id, page },
                 { logger: this.logger }
             )
+            const recordData = recordResult.data || {}
+            await syncOfficialTotalNum(student_num, recordData, this.logger)
 
             return res.json({
                 ...BaseStdResponse.OK,
@@ -56,7 +59,7 @@ class GetOfficialTermRecords extends API {
                     term_id: currentTerm.term_id,
                     term_name: currentTerm.term_name,
                     page,
-                    ...(recordResult.data || {})
+                    ...recordData
                 }
             })
         } catch (error) {

+ 18 - 1
lib/Lepao/officialAccountAccess.js

@@ -94,11 +94,28 @@ async function mapOfficialError(error, studentNum, logger) {
     return errorResponse(BaseStdResponse.ERR, msg)
 }
 
+/** 官方学期记录接口返回的 total_score_num 同步到 lepao_account.total_num */
+async function syncOfficialTotalNum(studentNum, officialData, logger) {
+    if (!studentNum || !officialData) return
+    const totalScoreNum = Number(officialData.total_score_num)
+    if (!Number.isFinite(totalScoreNum)) return
+
+    try {
+        const rows = await db.query(
+            'UPDATE lepao_account SET total_num = ? WHERE student_num = ?',
+            [totalScoreNum, studentNum]
+        )
+    } catch (error) {
+        logger?.error?.(`同步官方 total_num 失败 ${studentNum}: ${error.stack || error}`)
+    }
+}
+
 module.exports = {
     isMissing,
     loadUserOfficialAccount,
     loadAdminOfficialAccount,
     isLoginExpiredError,
     markAccountLoginExpired,
-    mapOfficialError
+    mapOfficialError,
+    syncOfficialTotalNum
 }