Przeglądaj źródła

feat: ip登陆限制提示语指定

hidewnd 1 miesiąc temu
rodzic
commit
e460f63d5f

+ 1 - 0
ReadMe.md

@@ -1397,6 +1397,7 @@ lemonios-service.jar > spellios.log 2>&1 &
 
 ```shell
 # 10.206.0.13
+# 10.206.16.11
 
 nohup java -jar -Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=256M -XX:+UseCompressedOops \
 -XX:+UseG1GC -XX:ConcGCThreads=2 -XX:InitiatingHeapOccupancyPercent=35 \

+ 5 - 1
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/WxController.java

@@ -280,7 +280,11 @@ public class WxController {
         dyzUser.setRiskCode("313");
         Result<?> result = riskFeign.checkRisk(dyzUser);
         if (result.getCode() != 200) {
-            return new Result<>(StatusCode.ACCESS_ERR, result.getMessage());
+            String errorMessage = result.getMessage();
+            if (RepMessage.RISK_VISITOR_LOWER_VALUE.equals(errorMessage)) {
+                errorMessage = StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), errorMessage);
+            }
+            return new Result<>(StatusCode.ACCESS_ERR, errorMessage);
         }
         if (dyzUser.getLastLoginTime() != null && dyzUser.getRegistryTime() != null) {
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

+ 23 - 18
yt-ios-lemon/lemon-ios-service/src/main/resources/mapper/AppUserMapper.xml

@@ -1069,26 +1069,31 @@
         </foreach>
     </update>
     <update id="updateTotal">
+        SET @four_days_ago = DATE_SUB(DATE(NOW()), INTERVAL 4 DAY), @current_time = NOW();
         UPDATE yt_dyz_user
         SET
-            -- 处理近4天未登录 或间隔时间超过4天
-            nearly_income = (
-                CASE
-                    WHEN last_login_time <![CDATA[ < ]]> DATE_SUB(DATE(NOW()), INTERVAL 4 DAY)
-                         OR IFNULL(nearly_begin_time, NOW()) <![CDATA[ < ]]> DATE_SUB(DATE(NOW()), INTERVAL 4 DAY)
-                        THEN #{revenue}
-                    ELSE COALESCE(nearly_income, 0) + #{revenue}
-                END
-            ),
-            nearly_begin_time = CASE
-                WHEN last_login_time <![CDATA[ < ]]> DATE_SUB(DATE(NOW()), INTERVAL 4 DAY)
-                    OR IFNULL(nearly_begin_time, NOW()) <![CDATA[ < ]]> DATE_SUB(DATE(NOW()), INTERVAL 4 DAY)
-                    THEN NOW()
-                WHEN nearly_begin_time IS NULL THEN NOW()
-                ELSE nearly_begin_time
-            END,
-            total_video = COALESCE(total_video, 0) + #{videoCount},
-            total_income = COALESCE(total_income, 0) + #{revenue}
+        -- 近4天收入更新逻辑:
+        -- 1. 最后登录时间早于4天前 或 近收入开始时间早于4天前 → 重置为当前收入
+        -- 2. 否则 → 原有近收入(为空则0)累加当前收入
+        nearly_income = CASE
+        WHEN last_login_time <![CDATA[ < ]]> @four_days_ago
+        OR COALESCE(nearly_begin_time, @current_time) <![CDATA[ < ]]> @four_days_ago
+        THEN #{revenue}
+        ELSE COALESCE(nearly_income, 0) + #{revenue}
+        END,
+        -- 近收入开始时间更新逻辑:
+        -- 1. 满足重置条件 → 设为当前时间
+        -- 2. 未满足则若为空值 → 设为当前时间,否则保留原值
+        nearly_begin_time = CASE
+        WHEN last_login_time <![CDATA[ < ]]> @four_days_ago
+        OR COALESCE(nearly_begin_time, @current_time) <![CDATA[ < ]]> @four_days_ago
+        THEN @current_time
+        ELSE COALESCE(nearly_begin_time, @current_time)
+        END,
+        -- 累计视频数:空值处理后累加新增数量
+        total_video = COALESCE(total_video, 0) + #{videoCount},
+        -- 累计收入:空值处理后累加新增收入
+        total_income = COALESCE(total_income, 0) + #{revenue}
         WHERE user_id = #{userId};
     </update>
 </mapper>

+ 7 - 7
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -427,12 +427,8 @@ public class RiskServiceImpl implements RiskService {
             return;
         }
         // 白名单放行
-        String whiteKey = "riskPass:334:white";
-        if (redisService.hasKey(whiteKey)) {
-            List<String> list = Arrays.asList(redisService.getStr(whiteKey).split(","));
-            if (list.contains(lastLoginIp)) {
-                return;
-            }
+        if (checkDyzUserIp(dyzUser)) {
+            return;
         }
         // 已通过的用户放行
         String passkey = StrUtil.format("riskPass:334:{}:{}", userApp.getAppId(), dyzUser.getLastLoginIp());
@@ -453,7 +449,11 @@ public class RiskServiceImpl implements RiskService {
         if (redisService.hasKey(passkey) && limitCount <= userCount) {
             log.warn(StrUtil.format("[risk 334] superiorId:{} appId:{} userId:{} limitCount:{}",
                     userApp.getAppId(), dyzUser.getAppId(), dyzUser.getUserId(), limitCount));
-            riskLockUser(dyzUser, "334", "同IP24小时内登陆多个账号", getTipsMsg());
+            try {
+                riskLockUser(dyzUser, "334", "同IP24小时内登陆多个账号", getTipsMsg());
+            } catch (Exception e) {
+                throw new CustomerException("visitor_lower_value");
+            }
         }
         redisService.setTimeOutHoursStr(passkey, dyzUser.getUserId(), 24);
     }