Browse Source

✨ feat: 从乐跑记录判断当天是否成功跑步

Pchen0 1 month ago
parent
commit
615c78646e
2 changed files with 32 additions and 3 deletions
  1. 1 1
      apis/Lepao/Account/UpdateAccount/UpdateAccountiPhone.js
  2. 31 2
      lib/Lepao/Worker.js

+ 1 - 1
apis/Lepao/Account/UpdateAccount/UpdateAccountiPhone.js

@@ -82,7 +82,7 @@ class UpdateAccountiPhone extends API {
 
             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, userAgent = ?, deviceModel = ?, update_type = "iphone" 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', headers["User-Agent"] ?? 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.29(0x18001d21) NetType/WIFI Language/zh_CN wxwork/5.0.6', 'unknown<iPhone18,3>', 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', headers["User-Agent"] ?? 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.29(0x18001d21) NetType/5G Language/zh_CN wxwork/5.0.6', 'unknown<iPhone18,3>', student_num])
 
             if (updateRows && updateRows.affectedRows > 0) {
                 let msg

+ 31 - 2
lib/Lepao/Worker.js

@@ -79,12 +79,13 @@ class Worker {
         const m = String(msg || '')
         return (
             m.includes('已乐跑成功') ||
+            m.includes('已存在成功跑步记录') ||
             m.includes('不在有效乐跑时间范围内') ||
             m.includes('登录已过期') ||
             m.includes('登录信息失效') ||
             m.includes('登录失效') ||
             m.includes('登录状态异常') ||
-            m.includes('已达上限') ||
+            m.includes('已达上限') ||
             m.includes('次数不足') ||
             m.includes('请重新登录')
         )
@@ -1261,7 +1262,7 @@ class Worker {
 
         /* ---------------- 上传 OSS 文件 ---------------- */
         this.register('lepao.uploadOssFile', async (req, ctx) => {
-            const { pathData, newPathData, ossSts: sts } = req
+            const { account, pathData, newPathData, ossSts: sts } = req
 
             // 处理跑步路径
             const pathResult = dataEncrypt(JSON.stringify(newPathData))
@@ -1291,6 +1292,34 @@ class Worker {
             }
 
             const now = new Date()
+            let day = now.getDay()
+            if (day === 0) day = 7
+
+            // 判断当天是否有成功记录
+            if(!ruleData?.weekData?.list || ruleData?.weekData?.list?.length !== 7) {
+                const err = new Error('获取当天跑步记录失败,请联系客服或稍后再试')
+                err.code = 'DAILY_RECORD_FETCH_FAILED'
+                err.retryable = false
+                throw err
+            }
+
+            const weekData = ruleData?.weekData?.list[day - 1]
+            if (!weekData) {
+                const err = new Error('获取当天跑步记录失败,请联系客服或稍后再试')
+                err.code = 'DAILY_RECORD_FETCH_FAILED'
+                err.retryable = false
+                throw err
+            }
+
+            if(Number(weekData?.distance) > 1.6) {
+                this.logger.warn(`${account}当天已存在成功跑步记录,距离:${weekData?.distance}km,请勿重复跑步`)
+                await this.writeSuccessRedis(account)
+                const err = new Error('当天已存在成功跑步记录,请勿重复跑步')
+                err.code = 'DAILY_ALREADY_COMPLETED'
+                err.retryable = false
+                throw err
+            }
+
             const yyyy = now.getFullYear()
             const mm = String(now.getMonth() + 1).padStart(2, '0')
             const dd = String(now.getDate()).padStart(2, '0')