Bladeren bron

风控体系代码提交

zjy 1 maand geleden
bovenliggende
commit
a6f1c3e725
2 gewijzigde bestanden met toevoegingen van 45 en 19 verwijderingen
  1. 6 0
      alien-gateway/pom.xml
  2. 39 19
      alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java

+ 6 - 0
alien-gateway/pom.xml

@@ -196,6 +196,12 @@
             <artifactId>jaxb-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>shop.alien</groupId>
+            <artifactId>alien-config</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 39 - 19
alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java

@@ -6,23 +6,24 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import shop.alien.config.properties.RiskControlProperties;
 import shop.alien.entity.second.LifeUserLog;
+import shop.alien.entity.second.SecondRiskControlRecord;
 import shop.alien.entity.store.LifeUser;
 import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.gateway.config.BaseRedisService;
 import shop.alien.gateway.feign.SecondServiceFeign;
 import shop.alien.gateway.mapper.LifeUserLogGatewayMapper;
 import shop.alien.gateway.mapper.LifeUserGatewayMapper;
+import shop.alien.mapper.second.SecondRiskControlRecordMapper;
 import shop.alien.util.common.JwtUtil;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -38,12 +39,14 @@ public class LifeUserService extends ServiceImpl<LifeUserGatewayMapper, LifeUser
 
     private final BaseRedisService baseRedisService;
 
-    private final SecondServiceFeign secondServiceFeign;
+    private final SecondServiceFeign alienSecondFeign;
 
     private final ActivityInviteConfigService activityInviteConfigService;
 
-    @Value("${risk-control.account-abnormal.reg-count24h:4}")
-    private Integer regCount24h;
+    private final SecondRiskControlRecordMapper secondRiskControlRecordMapper;
+
+    @Autowired
+    private RiskControlProperties riskControlProperties;
 
     @Value("${jwt.expiration-time}")
     private String effectiveTime;
@@ -144,21 +147,38 @@ public class LifeUserService extends ServiceImpl<LifeUserGatewayMapper, LifeUser
             lifeUserLog.setUserName(user.getUserName());
             lifeUserLog.setMacIp(macIp);
             lifeUserLog.setCreatedTime(new Date());
-            lifeUserLogMapper.insert(lifeUserLog);
-
-            String startDate = LocalDateTime.now().minusHours(24L).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-            String endDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-            List<LifeUserLog> lsit = lifeUserLogMapper.getLifeUserLogByDate(startDate, endDate, macIp);
-
-            if (lsit.size() > regCount24h) {
-                String detailInfo = lsit.stream()
-                        .map(row -> row.getUserId().toString())
-                        .collect(Collectors.joining(","));
-                secondServiceFeign.recordRiskControlData(null, 2, "账号异常", macIp, detailInfo);
+            int count = lifeUserLogMapper.insert(lifeUserLog);
+            if (count > 0) {
+                String startDate = LocalDateTime.now().minusHours(24L).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                String endDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                List<LifeUserLog> lsit = lifeUserLogMapper.getLifeUserLogByDate(startDate, endDate, macIp);
+
+                if (lsit.size() > riskControlProperties.getAccountAbnormal().getRegCount24h() && !isViolation(startDate, endDate, macIp, user.getId())) {
+                    String detailInfo = lsit.stream()
+                            .map(row -> row.getUserId().toString())
+                            .collect(Collectors.joining(","));
+                    alienSecondFeign.recordRiskControlData(user.getId(), 2, "账号异常", macIp, detailInfo);
+                }
             }
+            // 第一次登录,添加用户基础积分
+            alienSecondFeign.createPointsRecord(user.getId(), 300, 1);
         } catch (Exception e) {
-            log.error("用户登录log存放异常:{}");
+            log.error("用户登录log存放异常:{}", e);
         }
 
     }
+
+    public boolean isViolation(String startDate, String endDate, String macIp, Integer userId) {
+        List<SecondRiskControlRecord> list = secondRiskControlRecordMapper.selectByBusinessId(startDate, endDate, macIp);
+        for (SecondRiskControlRecord record : list) {
+            // 将数组转换为包含整数的列表
+            List<Integer> userIdList = Arrays.stream(record.getDetailInfo().split(","))
+                    .map(Integer::parseInt)
+                    .collect(Collectors.toList());
+            if (userIdList.contains(userId)) {
+                return true;
+            }
+        }
+        return false;
+    }
 }