Kaynağa Gözat

feat(second): 添加举报处理状态字段- 在 SecondReportingVo 中新增 processingStatus 字段- 完善举报信息展示,包含处理状态- 补充处理状态的注释说明

wxd 1 ay önce
ebeveyn
işleme
10347de4f6

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/second/vo/SecondReportingVo.java

@@ -1,5 +1,6 @@
 package shop.alien.entity.second.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
@@ -21,6 +22,9 @@ public class SecondReportingVo{
     @ApiModelProperty(value = "商品标题")
     private String title;
 
+    @ApiModelProperty(value = "处理状态(0:未处理,1:违规,2:未违规)")
+    private String processingStatus;
+
     @ApiModelProperty(value = "商品封面图片")
     private String homeImage;
 

+ 145 - 19
alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java

@@ -44,6 +44,7 @@ import java.util.stream.Collectors;
 
 /**
  * 二手商品服务实现类
+ * 提供二手商品的增删改查、审核、上下架、风控等相关业务逻辑处理
  */
 @Slf4j
 @Service
@@ -51,104 +52,130 @@ import java.util.stream.Collectors;
 public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, SecondGoods> implements SecondGoodsService {
 
 
+    /**
+     * 视频审核功能是否启用的配置项
+     */
     @Value("${video.moderation.enabled}")
     private boolean videoModerationEnabled;
     
+    /**
+     * 视频审核失败时是否阻塞商品发布的配置项
+     */
     @Value("${video.moderation.block-on-failure}")
     private boolean videoModerationBlockOnFailure;
 
     /**
-     * 视频审核服务
+     * 视频审核服务,用于处理商品中视频内容的审核
      */
     private final VideoModerationService videoModerationService;
 
     /**
-     * 视频工具类
+     * 视频工具类,提供视频相关操作功能
      */
     private final VideoUtils videoUtils;
 
     /**
-     * 文本审核工具
+     * 文本审核工具,用于审核商品标题、描述等文本内容
      */
     private final TextModerationUtil textModerationUtil;
 
     /**
-     * 图片审核工具
+     * 图片审核工具,用于审核商品图片内容
      */
     private final ImageModerationUtil imageModerationUtil;
 
     /**
-     * 二手商品Mapper
+     * 二手商品Mapper,用于操作二手商品数据表
      */
     private final SecondGoodsMapper secondGoodsMapper;
 
     /**
-     * 二手商品审核Mapper
+     * 二手商品审核Mapper,用于操作二手商品审核记录表
      */
     private final SecondGoodsAuditMapper secondGoodsAuditMapper;
 
     /**
-     * 用户信息Mapper
+     * 用户信息Mapper,用于操作用户信息表
      */
     private final LifeUserMapper lifeUserMapper;
 
     /**
-     * 公告Mapper
+     * 公告Mapper,用于操作公告信息表
      */
     private final LifeNoticeMapper lifeNoticeMapper;
 
     /**
-     * 店铺信息Mapper
+     * 店铺图片Mapper,用于操作图片信息表
      */
     private final StoreImgMapper storeImgMapper;
 
     /**
-     * 黑名单Mapper
+     * 黑名单Mapper,用于操作用户黑名单表
      */
     private final LifeBlacklistMapper lifeBlacklistMapper;
 
     /**
-     * 点赞记录Mapper
+     * 点赞记录Mapper,用于操作点赞记录表
      */
     private final LifeLikeRecordMapper lifeLikeRecordMapper;
 
     /**
-     * 收藏Mapper
+     * 收藏Mapper,用于操作收藏记录表
      */
     private final LifeCollectMapper lifeCollectMapper;
 
+    /**
+     * 店铺服务Feign接口,用于跨服务调用
+     */
     private final AlienStoreFeign alienStoreFeign;
+
     /**
-     * 商品操作历史记录Mapper
+     * 商品操作历史记录Mapper,用于操作商品操作记录表
      */
     private final SecondGoodsRecordMapper secondGoodsRecordMapper;
 
+    /**
+     * 二手交易记录Mapper,用于操作二手交易记录表
+     */
     @Autowired
     private SecondTradeRecordMapper secondTradeRecordMapper;
 
     /**
-     * 举报信息Mapper
+     * 用户违规举报Mapper,用于操作用户举报记录表
      */
     private final LifeUserViolationMapper lifeUserViolationMapper;
     
     /**
-     * 字典Mapper
+     * 字典Mapper,用于操作数据字典表
      */
     private final StoreDictionaryMapper storeDictionaryMapper;
 
     /**
-     * 交易记录服务
+     * 平台二手交易服务,提供二手交易相关业务逻辑
      */
     private final PlatformSecondTradeService platformSecondTradeService;
 
+    /**
+     * 风控配置属性,包含各种风控规则的配置参数
+     */
     @Autowired
     private RiskControlProperties riskControlProperties;
     
     /**
-     * 风控服务
+     * 风控服务,提供风控相关业务逻辑处理
      */
     private final RiskControlService riskControlService;
 
+    /**
+     * 获取商品操作记录详情(管理后台使用)
+     * @param recordId 商品操作记录ID
+     * @return 商品操作记录详情VO对象
+     */
+    /**
+     * 获取商品操作记录详情(管理后台使用)
+     * @param recordId 商品操作记录ID
+     * @return 商品操作记录详情VO对象
+     */
     @Override
     public SecondGoodsRecordDetailVo getAdminGoodsRecordDetail(Integer recordId) {
         // 1. 获取商品操作记录基本信息
@@ -198,6 +225,18 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         return detailVo;
     }
 
+    /**
+     * 获取商品详情(管理后台使用)
+     * @param goodsId 商品ID
+     * @return 商品详情VO对象
+     * @throws Exception 处理过程中可能抛出的异常
+     */
+    /**
+     * 获取商品详情(管理后台使用)
+     * @param goodsId 商品ID
+     * @return 商品详情VO对象
+     * @throws Exception 处理过程中可能抛出的异常
+     */
     @Override
     public SecondGoodsDetailVo getAdminGoodsDetail(Integer goodsId) throws Exception {
         // 基本信息
@@ -251,6 +290,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         return detailVo;
     }
 
+    /**
+     * 处理商品信息(管理后台使用)
+     * @param goodsId 商品ID
+     * @return 商品详情VO对象
+     */
     @Override
     public SecondGoodsDetailVo dealSecondGoodsInfo(Integer goodsId) {
         SecondGoodsDetailVo SecondGoodsDetailVo = new SecondGoodsDetailVo();
@@ -281,6 +325,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         return SecondGoodsDetailVo;
     }
 
+    /**
+     * 处理商品记录信息
+     * @param goodsId 商品ID
+     * @return 商品VO对象
+     */
     @Override
     public SecondGoodsVo dealSecondGoodsRecordInfo(Integer goodsId) {
         QueryWrapper<SecondGoodsVo> goodsVoQueryWrapper = new QueryWrapper<>();
@@ -311,6 +360,7 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
     /**
      * 记录商品操作历史
      * @param goods 商品信息
+     * @param operationName 操作名称
      */
     @Override
     public void recordGoodsOperation(SecondGoods goods,String operationName) {
@@ -368,6 +418,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
      *
      * @param record 保存后的商品记录
      */
+    /**
+     * 保存二手商品记录图片类型信息
+     *
+     * @param record 保存后的商品记录
+     */
     private void saveRecordGoodsImages(SecondGoodsRecord record ) {
 
         log.info("创建操作历图片史开始: {} ", record);
@@ -400,6 +455,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
      * @param reports 举报信息列表
      * @return SecondReportingVo列表
      */
+    /**
+     * 批量转换举报信息为SecondReportingVo对象
+     * @param reports 举报信息列表
+     * @return SecondReportingVo列表
+     */
     private List<SecondReportingVo> convertReportsToVos(List<LifeUserViolation> reports) {
         List<SecondReportingVo> reportingVos = new ArrayList<>();
         
@@ -443,6 +503,9 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
 
             // 基本信息
             reportingVo.setId(report.getId());
+            // 处理状态
+            reportingVo.setProcessingStatus(report.getProcessingStatus());
+
             // 举报时间
             reportingVo.setReportingTime(report.getCreatedTime());
             // 举报内容补充
@@ -489,6 +552,12 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
      * @param type  类型 1-举报 2-商品
      * @return 图片列表
      */
+    /**
+     * 处理举报凭证图片
+     * @param imageList 图片URL集合
+     * @param type  类型 1-举报 2-商品
+     * @return 图片列表
+     */
     private List<Map<String, Object>> processReportImages(List<StoreImg> imageList, Integer type) {
         List<Map<String, Object>> list = new ArrayList<>();
         List<String> videoFileType = Arrays.asList("mp4", "avi", "flv", "mkv", "rmvb", "wmv", "3gp", "mov");
@@ -541,6 +610,13 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
     }
 
 
+    /**
+     * 创建商品基本信息
+     * @param goodsDTO 商品信息DTO
+     * @param editFlag 编辑标识 1-编辑 0-新增
+     * @return 是否创建成功
+     * @throws Exception 处理过程中可能抛出的异常
+     */
     @Override
     public boolean createBasicInfo(SecondGoodsVo goodsDTO,Integer editFlag) throws Exception {
         try {
@@ -591,6 +667,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
      * @param goods  用户ID,商品ID
      * @return 是否未超过限制
      */
+    /**
+     * 检查用户在24小时内 频繁修改发布商品的数量是否超过限制
+     * @param goods  用户ID,商品ID
+     * @return 是否未超过限制
+     */
     private boolean checkUserPublishLimit(SecondGoods goods) {
         // 获取配置的阈值
         int publishLimit = riskControlProperties.getTradeFraud().getPublishCount24h();
@@ -630,6 +711,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
      * @param goods 商品信息
      * @return 是否未超过限制
      */
+    /**
+     * 检查用户在指定时间窗口内发布同类商品的数量是否超过限制
+     * @param goods 商品信息
+     * @return 是否未超过限制
+     */
     private boolean checkUserPublishSameCategoryLimit(SecondGoods goods) {
         // 获取配置的阈值
         int sameCategoryLimit = riskControlProperties.getAbnormalPublish().getSameCategoryCount24h();
@@ -1082,6 +1168,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         sendNotice("user_"+ phone, lifeNotice);
     }
 
+    /**
+     * 发送通知消息
+     * @param receiverId 接收者ID
+     * @param lifeNotice 通知内容
+     */
     private void sendNotice(String receiverId, LifeNotice lifeNotice) {
         try {
             WebSocketVo webSocketVo = new WebSocketVo();
@@ -1182,19 +1273,31 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
     }
 
     /**
-     * 获取热销商品列表(前10)
-     * @return 热销商品列表
+     * 获取收藏商品列表(前10)
+     * @return 收藏商品列表
      */
     @Override
     public List<SecondGoods> getCollectTop10() {
         return secondGoodsMapper.getCollectTop10();
     }
 
+    /**
+     * 获取热销商品分页列表
+     * @param page 分页参数
+     * @return 热销商品分页列表
+     */
     @Override
     public IPage<SecondGoods> getHotSellingRanking(IPage<SecondGoods> page) {
         return secondGoodsMapper.getHotSellingRanking(page);
     }
 
+    /**
+     * 根据屏蔽类型获取屏蔽商品列表
+     * @param page 分页参数
+     * @param userId 用户ID
+     * @param shieldType 屏蔽类型
+     * @return 屏蔽商品分页列表
+     */
     @Override
     public IPage<SecondGoods> getShieldedGoodsListByType(IPage<SecondGoods> page, Integer userId, Integer shieldType) {
         return secondGoodsMapper.getShieldedGoodsListByType(page, userId, shieldType);
@@ -1383,6 +1486,12 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         return secondGoods;
     }
 
+    /**
+     * 获取屏蔽商品分页列表
+     * @param page 分页参数
+     * @param userId 用户ID
+     * @return 屏蔽商品分页列表
+     */
     @Override
     public IPage<SecondGoodsVo> getShieldedGoodsPage(IPage<SecondGoodsVo> page, Integer userId) {
         QueryWrapper<SecondGoodsVo> queryWrapper = new QueryWrapper<>();
@@ -1549,6 +1658,12 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         return result;
     }
 
+    /**
+     * 根据用户ID和商品状态获取商品列表
+     * @param userId 用户ID
+     * @param goodsStatus 商品状态
+     * @return 商品列表
+     */
     @Override
     public List<SecondGoods> getGoodsListByUserId(Integer userId, Integer goodsStatus) {
         // 获取商品屏蔽列表
@@ -1848,6 +1963,12 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         }
     }
 
+    /**
+     * 获取管理后台商品列表
+     * @param page 分页参数
+     * @param queryDTO 查询参数DTO
+     * @return 商品列表
+     */
     @Override
     public IPage<SecondGoodsVo> getAdminGoodsList(IPage<SecondGoodsVo> page, SecondGoodsAdminQueryDTO queryDTO) {
         // 构建查询条件
@@ -2017,6 +2138,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         }
     }
 
+    /**
+     * 发送下架通知
+     * @param receiverId 接收者ID
+     * @param lifeNotice 通知内容
+     */
     private void sendShelveNotice(String receiverId, LifeNotice lifeNotice) {
         try {
             WebSocketVo webSocketVo = new WebSocketVo();