|
|
@@ -548,17 +548,6 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
|
|
|
SecondGoods goods = new SecondGoods();
|
|
|
BeanUtils.copyProperties(goodsDTO, goods);
|
|
|
|
|
|
- // 检查用户是否在24小时内发布商品超过阈值
|
|
|
- if (!checkUserPublishLimit(goods)) {
|
|
|
- log.warn("用户 {} 在24小时内发布商品次数超过限制", goodsDTO.getUserId());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // 检查用户是否在24小时内发布同类商品超过阈值
|
|
|
- if (!checkUserPublishSameCategoryLimit(goods)) {
|
|
|
- log.warn("用户 {} 在24小时内发布同类商品次数超过限制", goodsDTO.getUserId());
|
|
|
- }
|
|
|
-
|
|
|
boolean saveResult;
|
|
|
if (editFlag == 1) {
|
|
|
goods.setId(goodsDTO.getId());
|
|
|
@@ -580,6 +569,16 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
|
|
|
return false; // 如果获取不到ID,视为操作失败
|
|
|
}
|
|
|
|
|
|
+ // 检查用户是否在24小时内发布同类商品超过阈值
|
|
|
+ if (!checkUserPublishSameCategoryLimit(goods)) {
|
|
|
+ log.warn("用户 {} 在24小时内发布同类商品次数超过限制", goodsDTO.getUserId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查用户是否在24小时内发布商品超过阈值
|
|
|
+ if (!checkUserPublishLimit(goods)) {
|
|
|
+ log.warn("用户 {} 在24小时内发布商品次数超过限制", goodsDTO.getUserId());
|
|
|
+
|
|
|
+ }
|
|
|
// 保存商品图片信息
|
|
|
if (!saveStoreImages(savedGoodsId, goodsDTO )) {
|
|
|
return false;
|
|
|
@@ -614,7 +613,7 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
|
|
|
// 查询用户在24小时内发布的商品数量
|
|
|
LambdaQueryWrapper<SecondGoodsRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
queryWrapper.eq(SecondGoodsRecord::getUserId, goods.getUserId())
|
|
|
- .eq(SecondGoodsRecord::getId, goods.getId())
|
|
|
+ .eq(SecondGoodsRecord::getGoodsId, goods.getId())
|
|
|
.ge(SecondGoodsRecord::getReleaseTime, timeWindowStart)
|
|
|
.in(SecondGoodsRecord::getGoodsStatus,
|
|
|
SecondGoodsStatusEnum.LISTED.getCode(),
|
|
|
@@ -1872,6 +1871,74 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 根据风控记录中的JSON数据批量下架商品
|
|
|
+ * @param goodsIds 商品ID集合
|
|
|
+ * @return 是否下架成功
|
|
|
+ */
|
|
|
+ public boolean batchShelveGoodsByIds(List<Integer> goodsIds) {
|
|
|
+ if (goodsIds == null || goodsIds.isEmpty()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量更新商品状态为下架状态
|
|
|
+ LambdaUpdateWrapper<SecondGoods> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.in(SecondGoods::getId, goodsIds)
|
|
|
+ .set(SecondGoods::getGoodsStatus, SecondGoodsStatusEnum.DELISTED.getCode());
|
|
|
+
|
|
|
+ boolean updateResult = update(updateWrapper);
|
|
|
+
|
|
|
+ if (updateResult) {
|
|
|
+ // 批量查询更新后的商品信息
|
|
|
+ Collection<SecondGoods> updatedGoodsList = listByIds(goodsIds);
|
|
|
+
|
|
|
+ // 为每个商品记录操作历史并发送通知
|
|
|
+ for (SecondGoods goods : updatedGoodsList) {
|
|
|
+ recordGoodsOperation(goods, "风控下架");
|
|
|
+ sendShelveMessage(goods);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return updateResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据风控记录中的JSON数据批量下架商品( ruleType = 4 异常发布场景)
|
|
|
+ * @param ruleType 风控规则类型
|
|
|
+ * @param businessId 业务ID
|
|
|
+ * @return 是否下架成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean batchShelveGoodsByRiskControlRecord(Integer ruleType, String businessId) {
|
|
|
+ try {
|
|
|
+ // 获取相同类型的风控数据
|
|
|
+ List<SecondRiskControlRecord> riskControlRecordList = riskControlService.getSameTypeRiskControlRecords(ruleType, businessId);
|
|
|
+ // 获取风控数据详情
|
|
|
+ List<String> detailInfoList = riskControlRecordList.stream()
|
|
|
+ .map(SecondRiskControlRecord::getDetailInfo)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 声明所有被风控的商品ID
|
|
|
+ List<Integer> goodsIdList = Lists.newArrayList();
|
|
|
+
|
|
|
+ // 循环情信息json 转换为集合
|
|
|
+ for (String detailInfo : detailInfoList){
|
|
|
+ // 解析JSON获取商品ID列表
|
|
|
+ List<Integer> goodsIds = JSON.parseArray(detailInfo, Integer.class);
|
|
|
+ goodsIdList.addAll(goodsIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ // goodsIdList 去重
|
|
|
+ goodsIdList = goodsIdList.stream().distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 调用批量下架方法
|
|
|
+ return batchShelveGoodsByIds(goodsIdList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("根据风控记录批量下架商品失败,详情: {}", ruleType, e);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 下架商品
|
|
|
* @param secondGoods 商品信息
|
|
|
* @return 是否下架成功
|