瀏覽代碼

feat(gateway): 新增用户信用积分扣减逻辑

- 在注册风控检查中增加对异常账号的信用积分扣减
- 引入SecondUserCredit和SecondUserCreditRecord相关实体与Mapper
- 当检测到24小时内注册数量超过阈值且未违规时,为每个关联用户扣除10分信用积分
- 记录信用积分变动历史,确保每条记录仅扣减一次
- 将原有的风险控制数据上报逻辑注释掉,改为本地处理

fix(entity): 修改平台权益查询SQL连接方式

- 将store_platform_benefits表与life_coupon及store_virtual_currency表的left join改为inner join
- 确保只有存在对应业务ID的数据才会被查询出来,提高数据准确性
zjy 4 天之前
父節點
當前提交
f9c0d7e76e

+ 2 - 2
alien-entity/src/main/java/shop/alien/mapper/StorePlatformBenefitsMapper.java

@@ -29,11 +29,11 @@ public interface StorePlatformBenefitsMapper extends BaseMapper<StorePlatformBen
             " select * from ( " +
             " select spb.id, spb.type, spb.business_id, spb.usage_conditions, lc.name  " +
             " from store_platform_benefits spb  " +
-            " left join life_coupon lc on spb.business_id = lc.id  " +
+            " inner join life_coupon lc on spb.business_id = lc.id  " +
             " union all " +
             " select spb.id, spb.type, spb.business_id, spb.usage_conditions, svc.name  " +
             " from store_platform_benefits spb " +
-            " left join store_virtual_currency svc on spb.business_id = svc.id ) a " +
+            " inner join store_virtual_currency svc on spb.business_id = svc.id ) a " +
             " ${ew.customSqlSegment}" +
             "</script>")
     IPage<StorePlatformBenefitsVo> getPlatformBenefitsPage(

+ 41 - 4
alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java

@@ -13,7 +13,11 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import shop.alien.entity.second.LifeUserLog;
 import shop.alien.entity.second.SecondRiskControlRecord;
+import shop.alien.entity.second.SecondUserCredit;
+import shop.alien.entity.second.SecondUserCreditRecord;
 import shop.alien.entity.store.LifeUser;
+import shop.alien.entity.store.StoreImg;
+import shop.alien.entity.store.StoreUser;
 import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.gateway.config.BaseRedisService;
 import shop.alien.gateway.config.RiskControlProperties;
@@ -21,6 +25,8 @@ 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.mapper.second.SecondUserCreditMapper;
+import shop.alien.mapper.second.SecondUserCreditRecordMapper;
 import shop.alien.util.common.JwtUtil;
 
 import java.time.LocalDateTime;
@@ -50,6 +56,12 @@ public class LifeUserService extends ServiceImpl<LifeUserGatewayMapper, LifeUser
     private final LifeUserLogTransactionService lifeUserLogTransactionService;
 
     @Autowired
+    private final SecondUserCreditMapper secondUserCreditMapper;
+
+    @Autowired
+    private final SecondUserCreditRecordMapper secondUserCreditRecordMapper;
+
+    @Autowired
     private RiskControlProperties riskControlProperties;
 
     @Value("${jwt.expiration-time}")
@@ -156,10 +168,35 @@ public class LifeUserService extends ServiceImpl<LifeUserGatewayMapper, LifeUser
                 List<LifeUserLog> lsit = lifeUserLogTransactionService.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);
+
+                    for (LifeUserLog row: lsit) {
+                        List<SecondUserCreditRecord> num = secondUserCreditRecordMapper.selectList(new LambdaQueryWrapper<SecondUserCreditRecord>()
+                                .eq(SecondUserCreditRecord::getUserId, row.getUserId())
+                                .eq(SecondUserCreditRecord::getPointsType, 5)
+                                .ge(SecondUserCreditRecord::getCreatedTime, startDate)
+                                .le(SecondUserCreditRecord::getCreatedTime, endDate));
+
+                        if (num.size() <= 0) {
+                            SecondUserCreditRecord record = new SecondUserCreditRecord();
+                            record.setUserId(row.getUserId());
+                            record.setPointsType(5);
+                            record.setPoints(-10);
+                            record.setCreatedTime(new Date());
+                            secondUserCreditRecordMapper.insert(record);
+
+                            LambdaQueryWrapper<SecondUserCredit> queryWrapper = new LambdaQueryWrapper<>();
+                            queryWrapper.eq(SecondUserCredit::getUserId, row.getUserId())
+                                    .orderByDesc(SecondUserCredit::getCreatedTime).last("LIMIT 1");
+                            SecondUserCredit secondUserCredit = secondUserCreditMapper.selectOne(queryWrapper);
+                            secondUserCredit.setUserPoints(secondUserCredit.getUserPoints() - 10);
+                            secondUserCreditMapper.updateById(secondUserCredit);
+                        }
+                    }
+
+//                    String detailInfo = lsit.stream()
+//                            .map(row -> row.getUserId().toString())
+//                            .collect(Collectors.joining(","));
+//                    alienSecondFeign.recordRiskControlData(user.getId(), 2, "账号异常", macIp, detailInfo);
                 }
             }
             // 第一次登录,添加用户基础积分