Browse Source

审核我那本处理,添加商品记录

wxd 4 months ago
parent
commit
c4420e4406

+ 121 - 0
alien-entity/src/main/java/shop/alien/entity/second/SecondGoodsRecord.java

@@ -0,0 +1,121 @@
+package shop.alien.entity.second;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@JsonInclude
+@TableName("second_goods_record")
+public class SecondGoodsRecord implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键ID")
+    private Integer id;
+
+    @TableField("goods_id")
+    @ApiModelProperty(value = "商品ID")
+    private Integer goodsId;
+
+    @TableField("title")
+    @ApiModelProperty(value = "商品标题")
+    private String title;
+
+    @TableField("description")
+    @ApiModelProperty(value = "商品描述")
+    private String description;
+
+    @TableField("price")
+    @ApiModelProperty(value = "商品价格(元,保留小数后两位)")
+    private BigDecimal price;
+
+    @TableField("position")
+    @ApiModelProperty(value = "商品位置")
+    private String position;
+
+    @TableField("like_count")
+    @ApiModelProperty(value = "点赞数量")
+    private Integer likeCount;
+
+    @TableField("collect_count")
+    @ApiModelProperty(value = "收藏数量")
+    private Integer collectCount;
+
+    @TableField("category_one_id")
+    @ApiModelProperty(value = "一级类别ID")
+    private Integer categoryOneId;
+
+    @TableField("category_two_id")
+    @ApiModelProperty(value = "二级类别ID")
+    private Integer categoryTwoId;
+
+    @TableField("label")
+    @ApiModelProperty(value = "标签")
+    private String label;
+
+    @TableField("topic")
+    @ApiModelProperty(value = "话题(以逗号分隔)")
+    private String topic;
+
+    @TableField("trade_id")
+    @ApiModelProperty(value = "交易ID")
+    private Integer tradeId;
+
+    @TableField("release_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "发布时间")
+    private Date releaseTime;
+
+    @TableField("goods_status")
+    @ApiModelProperty(value = "商品状态 0:草稿 1:审核中 2:审核失败 3:已上架 4:已下架 5:已售出")
+    private Integer goodsStatus;
+
+    @TableField("failed_reason")
+    @ApiModelProperty(value = "审核失败原因")
+    private String failedReason;
+
+    @TableField("home_image")
+    @ApiModelProperty(value = "首页图")
+    private String homeImage;
+
+    @TableField("video_task_id")
+    @ApiModelProperty(value = "视频审核任务id")
+    private String videoTaskId;
+
+    @TableField("video_first_frame")
+    @ApiModelProperty(value = "视频第一帧图片")
+    private String videoFirstFrame;
+
+    @TableField("delete_flag")
+    @ApiModelProperty(value = "删除标记 0:未删除 1:已删除")
+    private Integer deleteFlag;
+
+    @TableField("created_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+
+    @TableField("created_user_id")
+    @ApiModelProperty(value = "创建人ID")
+    private Integer createdUserId;
+
+    @TableField("updated_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "修改时间")
+    private Date updatedTime;
+
+    @TableField("updated_user_id")
+    @ApiModelProperty(value = "修改人ID")
+    private Integer updatedUserId;
+
+    @TableField("address_text")
+    @ApiModelProperty(value = "地址文本")
+    private String addressText;
+}

+ 7 - 0
alien-entity/src/main/java/shop/alien/mapper/second/SecondGoodsRecordMapper.java

@@ -0,0 +1,7 @@
+package shop.alien.mapper.second;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.second.SecondGoodsRecord;
+
+public interface SecondGoodsRecordMapper extends BaseMapper<SecondGoodsRecord> {
+}

+ 5 - 0
alien-entity/src/main/resources/mapper/second/SecondGoodsRecordMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.second.SecondGoodsRecordMapper">
+
+</mapper>

+ 23 - 4
alien-second/src/main/java/shop/alien/second/controller/SecondGoodsController.java

@@ -119,8 +119,15 @@ public class SecondGoodsController {
         log.info("SecondGoodsController.shelveSecondGoods?secondGoods={}", secondGoods.toString());
         // 修改商品状态为4 - 已下架
         secondGoods.setGoodsStatus(4);
-        secondGoodsService.updateById(secondGoods);
-        return R.success("上架成功");
+        boolean updateResult = secondGoodsService.updateById(secondGoods);
+        if (updateResult) {
+            // 获取最新的商品信息并记录操作历史
+            SecondGoods updatedGoods = secondGoodsService.getById(secondGoods.getId());
+            secondGoodsService.recordGoodsOperation(updatedGoods);
+            return R.success("下架成功");
+        } else {
+            return R.fail("下架失败");
+        }
     }
 
     /**
@@ -131,8 +138,20 @@ public class SecondGoodsController {
     @NoRepeatSubmit(expireTime = 3, message = "请勿重复提交删除商品请求")
     public R<Void> deleteSecondGoods(@ApiParam("删除二手商品") @RequestBody SecondGoodsVo secondGoods) {
         log.info("SecondGoodsController.deleteSecondGoods?secondGoods={}", secondGoods.toString());
-        secondGoodsService.removeById(secondGoods.getId());
-        return R.success("删除成功");
+        SecondGoods goods = secondGoodsService.getById(secondGoods.getId());
+        if (goods != null) {
+            boolean removeResult = secondGoodsService.removeById(secondGoods.getId());
+            if (removeResult) {
+                // 设置删除标记并记录操作历史
+                goods.setDeleteFlag(1);
+                secondGoodsService.recordGoodsOperation(goods);
+                return R.success("删除成功");
+            } else {
+                return R.fail("删除失败");
+            }
+        } else {
+            return R.fail("商品不存在");
+        }
     }
 
     /**

+ 7 - 0
alien-second/src/main/java/shop/alien/second/service/SecondGoodsService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.springframework.transaction.annotation.Transactional;
 import shop.alien.entity.SecondVideoTask;
 import shop.alien.entity.second.SecondGoods;
+import shop.alien.entity.second.SecondGoodsRecord;
 import shop.alien.entity.second.vo.SecondGoodsVo;
 import shop.alien.entity.second.vo.SellGoodsVo;
 
@@ -155,4 +156,10 @@ public interface SecondGoodsService extends IService<SecondGoods> {
      * @param task 视频审核任务
      */
     void processVideoModerationResult(SecondVideoTask task);
+    
+    /**
+     * 记录商品操作历史
+     * @param goods 商品信息
+     */
+    void recordGoodsOperation(SecondGoods goods);
 }

+ 71 - 10
alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.util.StringUtils;
 import shop.alien.entity.SecondVideoTask;
 import shop.alien.entity.second.SecondGoods;
 import shop.alien.entity.second.SecondGoodsAudit;
+import shop.alien.entity.second.SecondGoodsRecord;
 import shop.alien.entity.second.enums.SecondGoodsStatusEnum;
 import shop.alien.entity.second.vo.SecondGoodsVo;
 import shop.alien.entity.second.vo.SellGoodsVo;
@@ -31,6 +32,7 @@ import shop.alien.entity.store.vo.WebSocketVo;
 import shop.alien.mapper.*;
 import shop.alien.mapper.second.SecondGoodsAuditMapper;
 import shop.alien.mapper.second.SecondGoodsMapper;
+import shop.alien.mapper.second.SecondGoodsRecordMapper;
 import shop.alien.second.feign.AlienStoreFeign;
 import shop.alien.second.service.SecondGoodsService;
 import shop.alien.second.service.VideoModerationService;
@@ -38,6 +40,7 @@ import shop.alien.util.common.Constants;
 import shop.alien.util.common.VideoUtils;
 import shop.alien.util.common.safe.*;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -122,6 +125,59 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
 
     private final AlienStoreFeign alienStoreFeign;
     /**
+     * 商品操作历史记录Mapper
+     */
+    private final SecondGoodsRecordMapper secondGoodsRecordMapper;
+
+    /**
+     * 记录商品操作历史
+     * @param goods 商品信息
+     */
+    @Override
+    public void recordGoodsOperation(SecondGoods goods) {
+        try {
+            SecondGoodsRecord record = new SecondGoodsRecord();
+            record.setGoodsId(goods.getId());
+            record.setTitle(goods.getTitle());
+            record.setDescription(goods.getDescription());
+            // 价格转换
+            if (goods.getAmount() != null) {
+                record.setPrice(goods.getAmount());
+            } else if (goods.getPrice() != null && !goods.getPrice().isEmpty()) {
+                try {
+                    record.setPrice(new BigDecimal(goods.getPrice()));
+                } catch (Exception e) {
+                    log.warn("转换商品价格时出错: {}", e.getMessage());
+                }
+            }
+            record.setPosition(goods.getPosition());
+            record.setLikeCount(goods.getLikeCount());
+            record.setCollectCount(goods.getCollectCount());
+            record.setCategoryOneId(goods.getCategoryOneId());
+            record.setCategoryTwoId(goods.getCategoryTwoId());
+            record.setLabel(goods.getLabel());
+            record.setTopic(goods.getTopic());
+            record.setTradeId(goods.getTradeId());
+            record.setReleaseTime(goods.getReleaseTime());
+            record.setGoodsStatus(goods.getGoodsStatus());
+            record.setFailedReason(goods.getFailedReason());
+            record.setHomeImage(goods.getHomeImage());
+            record.setVideoTaskId(goods.getVideoTaskId());
+            record.setVideoFirstFrame(goods.getVideoFirstFrame());
+            record.setDeleteFlag(goods.getDeleteFlag());
+            record.setCreatedTime(goods.getCreatedTime());
+            record.setCreatedUserId(goods.getCreatedUserId());
+            record.setUpdatedTime(goods.getUpdatedTime());
+            record.setUpdatedUserId(goods.getUpdatedUserId());
+            record.setAddressText(goods.getAddressText());
+            
+            secondGoodsRecordMapper.insert(record);
+        } catch (Exception e) {
+            log.error("记录商品操作历史时发生异常", e);
+        }
+    }
+    
+    /**
      * 保存商品为草稿状态
      * @param goods 商品实体
      * @return 是否成功保存
@@ -158,18 +214,19 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
             SecondGoods goods = new SecondGoods();
             BeanUtils.copyProperties(goodsDTO, goods);
 
+            boolean saveResult;
             if (editFlag == 1) {
                 goods.setId(goodsDTO.getId());
 //                goods = secondGoodsMapper.selectById(goodsDTO.getId());
                 // 保存商品基本信息
-                if (!updateById(goods)) {
-                    return false; // 保存失败直接返回
-                }
+                saveResult = updateById(goods);
             } else {
                 // 保存商品基本信息
-                if (!save(goods)) {
-                    return false; // 保存失败直接返回
-                }
+                saveResult = save(goods);
+            }
+            
+            if (!saveResult) {
+                return false; // 保存失败直接返回
             }
 
             // 获取保存后的商品ID,用于后续业务处理
@@ -185,12 +242,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
             goods = secondGoodsMapper.selectById(savedGoodsId);
             // 执行内容审核(图片和文本)
             if (!performContentReviews(goods, goodsDTO)) {
+                // 审核不通过,记录操作历史
+                recordGoodsOperation(goods);
                 return true; // 审核不通过时已设置状态,返回成功但标记为审核失败
             }
 
-
-
-
             return true;
         } catch (Exception e) {
             // 记录异常日志
@@ -209,7 +265,8 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         servicesList.add(TextReviewServiceEnum.AD_COMPLIANCE_DETECTION_PRO.getService());
         servicesList.add(TextReviewServiceEnum.LLM_QUERY_MODERATION.getService());
         // 使用商品发布场景的审核服务
-        TextModerationResultVO textCheckResult = textModerationUtil.invokeFunction(goodsDTO.getDescription(), servicesList);
+        String test = goodsDTO.getDescription() + goodsDTO.getTitle() + goods.getLabel() + goods.getTopic();
+        TextModerationResultVO textCheckResult = textModerationUtil.invokeFunction(test, servicesList);
         
         if ("high".equals(textCheckResult.getRiskLevel())) {
             // 文本审核不通过或存在高风险
@@ -279,6 +336,8 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
                     goods.setFailedReason("");
                     updateById(goods);
                     createGoodsAudit(goods, "", SecondGoodsStatusEnum.UNDER_REVIEW.getCode());
+                    // 审核中,记录操作历史
+                    recordGoodsOperation(goods);
                     return true; // 异步处理,直接返回
                 }
             }
@@ -293,6 +352,8 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         createGoodsAudit(goods, "", Constants.AuditStatus.PASSED);
         // 发送审核成功消息
         sendMessage(goods);
+        // 审核成功,记录操作历史
+        recordGoodsOperation(goods);
         return true;
     }