Explorar el Código

feat(risk): 调整风控业务ID为字符串类型

- 修改 RiskControlController 中 businessId 参数类型为 String
- 更新 RiskControlService 接口中的 businessId 类型- 调整 RiskControlServiceImpl 实现中 businessId 类型
- 引入 RiskControlRuleTypeEnum 枚举优化风控记录调用- 完善商品发布风控逻辑,增加风控记录插入
- 修改 SecondRiskControlRecord 实体类中 businessId为 String 类型- 更新 SecondServiceFeign 接口中的 businessId 类型及配置引用路径
wxd hace 1 mes
padre
commit
20ab9ddf8a

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/second/SecondRiskControlRecord.java

@@ -54,7 +54,7 @@ public class SecondRiskControlRecord implements Serializable {
 
     @TableField("business_id")
     @ApiModelProperty(value = "业务ID(如商品ID、交易ID等)")
-    private Integer businessId;
+    private String businessId;
 
 //    @TableField("business_type")
 //    @ApiModelProperty(value = "业务类型 1:二手商品 2:交易记录")

+ 2 - 2
alien-gateway/src/main/java/shop/alien/gateway/feign/SecondServiceFeign.java

@@ -4,7 +4,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-@FeignClient(name = "alien-second", url = "${feign.second.url:}")
+@FeignClient(name = "alien-second", url = "${feign.alienSecond.url}")
 public interface SecondServiceFeign {
     
     /**
@@ -20,6 +20,6 @@ public interface SecondServiceFeign {
     void recordRiskControlData(@RequestParam("userId") Integer userId,
                                @RequestParam("ruleType") Integer ruleType,
                                @RequestParam("ruleName") String ruleName,
-                               @RequestParam("businessId") Integer businessId,
+                               @RequestParam("businessId") String businessId,
                                @RequestParam("detailInfo") String detailInfo);
 }

+ 1 - 1
alien-second/src/main/java/shop/alien/second/controller/RiskControlController.java

@@ -27,7 +27,7 @@ public class RiskControlController {
     public void recordRiskControlData(@RequestParam("userId") Integer userId,
                                       @RequestParam("ruleType") Integer ruleType,
                                       @RequestParam("ruleName") String ruleName,
-                                      @RequestParam("businessId") Integer businessId,
+                                      @RequestParam("businessId") String businessId,
                                       @RequestParam("detailInfo") String detailInfo) {
         riskControlService.recordRiskControlData(userId, ruleType, ruleName, businessId, detailInfo);
     }

+ 1 - 1
alien-second/src/main/java/shop/alien/second/service/RiskControlService.java

@@ -20,6 +20,6 @@ public interface RiskControlService extends IService<SecondRiskControlRecord> {
     void recordRiskControlData(Integer userId,
                                Integer ruleType,
                                String ruleName,
-                               Integer businessId,
+                               String businessId,
                                String detailInfo);
 }

+ 1 - 1
alien-second/src/main/java/shop/alien/second/service/impl/RiskControlServiceImpl.java

@@ -33,7 +33,7 @@ public class RiskControlServiceImpl extends ServiceImpl<SecondRiskControlRecordM
     public void recordRiskControlData(Integer userId,
                                        Integer ruleType,
                                        String ruleName,
-                                       Integer businessId,
+                                      String businessId,
                                        String detailInfo) {
         try {
             SecondRiskControlRecord record = new SecondRiskControlRecord();

+ 18 - 8
alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java

@@ -21,6 +21,7 @@ import org.springframework.util.StringUtils;
 import shop.alien.config.properties.RiskControlProperties;
 import shop.alien.entity.SecondVideoTask;
 import shop.alien.entity.second.*;
+import shop.alien.entity.second.enums.RiskControlRuleTypeEnum;
 import shop.alien.entity.second.enums.SecondGoodsStatusEnum;
 import shop.alien.entity.second.vo.*;
 import shop.alien.entity.store.*;
@@ -550,14 +551,12 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
             // 检查用户是否在24小时内发布商品超过阈值
             if (!checkUserPublishLimit(goods)) {
                 log.warn("用户 {} 在24小时内发布商品次数超过限制", goodsDTO.getUserId());
-                // TODO 插入风控记录
 
             }
 
             // 检查用户是否在24小时内发布同类商品超过阈值
             if (!checkUserPublishSameCategoryLimit(goods)) {
                 log.warn("用户 {} 在24小时内发布同类商品次数超过限制", goodsDTO.getUserId());
-                // TODO 插入风控记录
             }
 
             boolean saveResult;
@@ -620,11 +619,21 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
                 .in(SecondGoodsRecord::getGoodsStatus,
                         SecondGoodsStatusEnum.LISTED.getCode(),
                         SecondGoodsStatusEnum.SOLD.getCode());
-
-        int publishCount = secondGoodsRecordMapper.selectCount(queryWrapper);
-
-        // 如果发布数量超过限制,返回false
-        return publishCount < publishLimit;
+        // 获取发布
+        List<SecondGoodsRecord> secondGoodsRecordList = secondGoodsRecordMapper.selectList(queryWrapper);
+        // 提取商品id集合
+        List<Integer> secondGoodsRecordIdList = secondGoodsRecordList.stream().map(SecondGoodsRecord::getId).collect(Collectors.toList());
+        // 转成json
+        String json = JSON.toJSONString(secondGoodsRecordIdList);
+        // 获取实际发布数量
+        int sameCategoryCount = secondGoodsRecordList.size();
+        // 如果发布数量超过限制,记录风控数据
+        if (sameCategoryCount >= publishLimit) {
+            // "异常发布-同类商品发布频率"
+            riskControlService.recordRiskControlData(goods.getUserId(), RiskControlRuleTypeEnum.TRANSACTION_FRAUD.getRuleType(), RiskControlRuleTypeEnum.TRANSACTION_FRAUD.getDescription(), goods.getId().toString(),json);
+            return false;
+        }
+        return true;
     }
 
     /**
@@ -660,7 +669,8 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         int sameCategoryCount = secondGoodsList.size();
         // 如果发布数量超过限制,记录风控数据
         if (sameCategoryCount >= sameCategoryLimit) {
-            riskControlService.recordRiskControlData(goods.getUserId(), 4, "异常发布-同类商品发布频率", goods.getId(),json);
+            // "异常发布-同类商品发布频率"
+            riskControlService.recordRiskControlData(goods.getUserId(), RiskControlRuleTypeEnum.ABNORMAL_PUBLISH.getRuleType(), RiskControlRuleTypeEnum.ABNORMAL_PUBLISH.getDescription(), goods.getId().toString(),json);
             return false;
         }
         return true;