mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-12-01 19:51:53 +08:00
code review:商品评价哈
This commit is contained in:
parent
08535d6019
commit
35df912be7
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.product.api.comment;
|
package cn.iocoder.yudao.module.product.api.comment;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.product.api.comment.dto.CommentCreateReqDTO;
|
import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品评论 API 接口
|
* 产品评论 API 接口
|
||||||
@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.product.api.comment.dto.CommentCreateReqDTO;
|
|||||||
*/
|
*/
|
||||||
public interface ProductCommentApi {
|
public interface ProductCommentApi {
|
||||||
|
|
||||||
|
// TODO @puhui:Long orderId 放到 createReqDTO 里噶?
|
||||||
/**
|
/**
|
||||||
* 创建评论
|
* 创建评论
|
||||||
*
|
*
|
||||||
@ -16,6 +17,6 @@ public interface ProductCommentApi {
|
|||||||
* @param orderId 订单 id
|
* @param orderId 订单 id
|
||||||
* @return 返回评论创建后的 id
|
* @return 返回评论创建后的 id
|
||||||
*/
|
*/
|
||||||
Long createComment(CommentCreateReqDTO createReqDTO, Long orderId);
|
Long createComment(ProductCommentCreateReqDTO createReqDTO, Long orderId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,71 +10,64 @@ import java.util.List;
|
|||||||
* @author HUIHUI
|
* @author HUIHUI
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class CommentCreateReqDTO {
|
public class ProductCommentCreateReqDTO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否匿名
|
* 商品 SKU 编号
|
||||||
*/
|
*/
|
||||||
private Boolean anonymous;
|
private Long skuId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 交易订单项编号
|
* 交易订单项编号
|
||||||
*/
|
*/
|
||||||
private Long orderItemId;
|
private Long orderItemId;
|
||||||
|
|
||||||
|
// TODO @huihui:spuId、spuName 去查询哇?通过 skuId
|
||||||
/**
|
/**
|
||||||
* 商品 SPU 编号
|
* 商品 SPU 编号
|
||||||
*/
|
*/
|
||||||
private Long spuId;
|
private Long spuId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品 SPU 名称
|
* 商品 SPU 名称
|
||||||
*/
|
*/
|
||||||
private String spuName;
|
private String spuName;
|
||||||
|
|
||||||
/**
|
|
||||||
* 商品 SKU 编号
|
|
||||||
*/
|
|
||||||
private Long skuId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评分星级 1-5 分
|
* 评分星级 1-5 分
|
||||||
*/
|
*/
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述星级 1-5 分
|
* 描述星级 1-5 分
|
||||||
*/
|
*/
|
||||||
private Integer descriptionScores;
|
private Integer descriptionScores;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务星级 1-5 分
|
* 服务星级 1-5 分
|
||||||
*/
|
*/
|
||||||
private Integer benefitScores;
|
private Integer benefitScores;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评论内容
|
* 评论内容
|
||||||
*/
|
*/
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评论图片地址数组,以逗号分隔最多上传9张
|
* 评论图片地址数组,以逗号分隔最多上传 9 张
|
||||||
*/
|
*/
|
||||||
private List<String> picUrls;
|
private List<String> picUrls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否匿名
|
||||||
|
*/
|
||||||
|
private Boolean anonymous;
|
||||||
|
/**
|
||||||
|
* 评价人
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
// TODO @puhui999:是不是 userNickname、userAvatar 去掉?通过 userId 查询
|
||||||
/**
|
/**
|
||||||
* 评价人名称
|
* 评价人名称
|
||||||
*/
|
*/
|
||||||
private String userNickname;
|
private String userNickname;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评价人头像
|
* 评价人头像
|
||||||
*/
|
*/
|
||||||
private String userAvatar;
|
private String userAvatar;
|
||||||
|
|
||||||
/**
|
|
||||||
* 评价人
|
|
||||||
*/
|
|
||||||
private Long userId;
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.product.api.comment;
|
package cn.iocoder.yudao.module.product.api.comment;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.product.api.comment.dto.CommentCreateReqDTO;
|
import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
||||||
import cn.iocoder.yudao.module.product.convert.comment.ProductCommentConvert;
|
import cn.iocoder.yudao.module.product.convert.comment.ProductCommentConvert;
|
||||||
import cn.iocoder.yudao.module.product.dal.dataobject.comment.ProductCommentDO;
|
import cn.iocoder.yudao.module.product.dal.dataobject.comment.ProductCommentDO;
|
||||||
import cn.iocoder.yudao.module.product.service.comment.ProductCommentService;
|
import cn.iocoder.yudao.module.product.service.comment.ProductCommentService;
|
||||||
@ -17,12 +17,14 @@ import javax.annotation.Resource;
|
|||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
public class ProductCommentApiImpl implements ProductCommentApi {
|
public class ProductCommentApiImpl implements ProductCommentApi {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ProductCommentService productCommentService;
|
private ProductCommentService productCommentService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createComment(CommentCreateReqDTO createReqDTO, Long orderId) {
|
public Long createComment(ProductCommentCreateReqDTO createReqDTO, Long orderId) {
|
||||||
ProductCommentDO commentDO = ProductCommentConvert.INSTANCE.convert(createReqDTO, orderId);
|
ProductCommentDO commentDO = ProductCommentConvert.INSTANCE.convert(createReqDTO, orderId);
|
||||||
return productCommentService.createComment(commentDO);
|
return productCommentService.createComment(commentDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,15 +30,15 @@ public class ProductCommentBaseVO {
|
|||||||
@NotNull(message = "商品 SKU 编号不能为空")
|
@NotNull(message = "商品 SKU 编号不能为空")
|
||||||
private Long skuId;
|
private Long skuId;
|
||||||
|
|
||||||
@Schema(description = "评分星级 1-5分", required = true, example = "5")
|
@Schema(description = "评分星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "评分星级不能为空")
|
@NotNull(message = "评分星级不能为空")
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
|
|
||||||
@Schema(description = "描述星级 1-5分", required = true, example = "5")
|
@Schema(description = "描述星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "描述星级不能为空")
|
@NotNull(message = "描述星级不能为空")
|
||||||
private Integer descriptionScores;
|
private Integer descriptionScores;
|
||||||
|
|
||||||
@Schema(description = "服务星级 1-5分", required = true, example = "5")
|
@Schema(description = "服务星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "服务星级分不能为空")
|
@NotNull(message = "服务星级分不能为空")
|
||||||
private Integer benefitScores;
|
private Integer benefitScores;
|
||||||
|
|
||||||
@ -46,8 +46,8 @@ public class ProductCommentBaseVO {
|
|||||||
@NotNull(message = "评论内容不能为空")
|
@NotNull(message = "评论内容不能为空")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
@Schema(description = "评论图片地址数组,以逗号分隔最多上传9张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
@Schema(description = "评论图片地址数组,以逗号分隔最多上传 9 张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
||||||
@Size(max = 9, message = "评论图片地址数组长度不能超过9张")
|
@Size(max = 9, message = "评论图片地址数组长度不能超过 9 张")
|
||||||
private List<String> picUrls;
|
private List<String> picUrls;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class ProductCommentCreateReqVO extends ProductCommentBaseVO {
|
public class ProductCommentCreateReqVO extends ProductCommentBaseVO {
|
||||||
|
|
||||||
|
// TODO @puhui999:是不是也放到父类里?
|
||||||
@Schema(description = "评价人", required = true, example = "16868")
|
@Schema(description = "评价人", required = true, example = "16868")
|
||||||
@NotNull(message = "评价人不能为空")
|
@NotNull(message = "评价人不能为空")
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
@ -31,7 +31,7 @@ public class ProductCommentPageReqVO extends PageParam {
|
|||||||
@Schema(description = "商品SPU名称", example = "感冒药")
|
@Schema(description = "商品SPU名称", example = "感冒药")
|
||||||
private String spuName;
|
private String spuName;
|
||||||
|
|
||||||
@Schema(description = "评分星级 1-5分", example = "5")
|
@Schema(description = "评分星级 1-5 分", example = "5")
|
||||||
@InEnum(ProductCommentScoresEnum.class)
|
@InEnum(ProductCommentScoresEnum.class)
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ public class ProductCommentRespVO extends ProductCommentBaseVO {
|
|||||||
@Schema(description = "订单项编号", required = true, example = "24965")
|
@Schema(description = "订单项编号", required = true, example = "24965")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@Schema(description = "是否匿名:[false:不匿名 true:匿名]", required = true, example = "false")
|
@Schema(description = "是否匿名", required = true, example = "false")
|
||||||
private Boolean anonymous;
|
private Boolean anonymous;
|
||||||
|
|
||||||
@Schema(description = "交易订单编号", required = true, example = "24428")
|
@Schema(description = "交易订单编号", required = true, example = "24428")
|
||||||
|
@ -36,6 +36,7 @@ public class AppProductCommentController {
|
|||||||
@Resource
|
@Resource
|
||||||
private ProductCommentService productCommentService;
|
private ProductCommentService productCommentService;
|
||||||
|
|
||||||
|
// TODO @puhui999:可以实现下
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@Operation(summary = "获得最近的 n 条商品评价")
|
@Operation(summary = "获得最近的 n 条商品评价")
|
||||||
@Parameters({
|
@Parameters({
|
||||||
@ -44,7 +45,6 @@ public class AppProductCommentController {
|
|||||||
})
|
})
|
||||||
public CommonResult<List<AppProductCommentRespVO>> getCommentList(@RequestParam("spuId") Long spuId,
|
public CommonResult<List<AppProductCommentRespVO>> getCommentList(@RequestParam("spuId") Long spuId,
|
||||||
@RequestParam(value = "count", defaultValue = "10") Integer count) {
|
@RequestParam(value = "count", defaultValue = "10") Integer count) {
|
||||||
|
|
||||||
List<AppProductPropertyValueDetailRespVO> list = new ArrayList<>();
|
List<AppProductPropertyValueDetailRespVO> list = new ArrayList<>();
|
||||||
|
|
||||||
AppProductPropertyValueDetailRespVO item1 = new AppProductPropertyValueDetailRespVO();
|
AppProductPropertyValueDetailRespVO item1 = new AppProductPropertyValueDetailRespVO();
|
||||||
@ -101,6 +101,7 @@ public class AppProductCommentController {
|
|||||||
return success(productCommentService.getCommentPage(pageVO, Boolean.TRUE));
|
return success(productCommentService.getCommentPage(pageVO, Boolean.TRUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO @puhui:get-statistics;方法改成 getCommentStatistics;getCommentPageTabsCount 也改掉哈
|
||||||
@GetMapping("/getCommentStatistics")
|
@GetMapping("/getCommentStatistics")
|
||||||
@Operation(summary = "获得商品的评价统计")
|
@Operation(summary = "获得商品的评价统计")
|
||||||
public CommonResult<AppCommentStatisticsRespVO> getCommentPage(@Valid @RequestParam("spuId") Long spuId) {
|
public CommonResult<AppCommentStatisticsRespVO> getCommentPage(@Valid @RequestParam("spuId") Long spuId) {
|
||||||
|
@ -8,11 +8,6 @@ import lombok.ToString;
|
|||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户 APP - 商品评价分页 Request VO
|
|
||||||
*
|
|
||||||
* @author HUIHUI
|
|
||||||
*/
|
|
||||||
@Schema(description = "用户APP - 商品评价分页 Request VO")
|
@Schema(description = "用户APP - 商品评价分页 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ -23,12 +18,10 @@ public class AppCommentPageReqVO extends PageParam {
|
|||||||
* 好评
|
* 好评
|
||||||
*/
|
*/
|
||||||
public static final Integer GOOD_COMMENT = 1;
|
public static final Integer GOOD_COMMENT = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 中评
|
* 中评
|
||||||
*/
|
*/
|
||||||
public static final Integer MEDIOCRE_COMMENT = 2;
|
public static final Integer MEDIOCRE_COMMENT = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 差评
|
* 差评
|
||||||
*/
|
*/
|
||||||
|
@ -4,11 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
/**
|
|
||||||
* APP 商品评价页评论分类数统计 Response VO
|
|
||||||
*
|
|
||||||
* @author HUIHUI
|
|
||||||
*/
|
|
||||||
@Schema(description = "APP - 商品评价页评论分类数统计 Response VO")
|
@Schema(description = "APP - 商品评价页评论分类数统计 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
|
@ -8,11 +8,6 @@ import javax.validation.constraints.NotNull;
|
|||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户APP - 商品评价创建 Request VO
|
|
||||||
*
|
|
||||||
* @author HUIHUI
|
|
||||||
*/
|
|
||||||
@Schema(description = "用户APP - 商品评价创建 Request VO")
|
@Schema(description = "用户APP - 商品评价创建 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
@ -26,36 +21,36 @@ public class AppProductCommentCreateReqVO {
|
|||||||
@NotNull(message = "交易订单项编号不能为空")
|
@NotNull(message = "交易订单项编号不能为空")
|
||||||
private Long orderItemId;
|
private Long orderItemId;
|
||||||
|
|
||||||
@Schema(description = "商品SPU编号", required = true, example = "91192")
|
@Schema(description = "商品 SPU 编号", required = true, example = "91192")
|
||||||
@NotNull(message = "商品SPU编号不能为空")
|
@NotNull(message = "商品SPU编号不能为空")
|
||||||
private Long spuId;
|
private Long spuId;
|
||||||
|
|
||||||
@Schema(description = "商品SPU名称", required = true, example = "清凉丝滑小短袖")
|
@Schema(description = "商品 SPU 名称", required = true, example = "清凉丝滑小短袖")
|
||||||
@NotNull(message = "商品SPU名称不能为空")
|
@NotNull(message = "商品SPU名称不能为空")
|
||||||
private String spuName;
|
private String spuName;
|
||||||
|
|
||||||
@Schema(description = "商品SKU编号", required = true, example = "81192")
|
@Schema(description = "商品 SKU 编号", required = true, example = "81192")
|
||||||
@NotNull(message = "商品SKU编号不能为空")
|
@NotNull(message = "商品SKU编号不能为空")
|
||||||
private Long skuId;
|
private Long skuId;
|
||||||
|
|
||||||
@Schema(description = "评分星级 1-5分", required = true, example = "5")
|
@Schema(description = "评分星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "评分星级 1-5分不能为空")
|
@NotNull(message = "评分星级 1-5 分不能为空")
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
|
|
||||||
@Schema(description = "描述星级 1-5分", required = true, example = "5")
|
@Schema(description = "描述星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "描述星级 1-5分不能为空")
|
@NotNull(message = "描述星级 1-5 分不能为空")
|
||||||
private Integer descriptionScores;
|
private Integer descriptionScores;
|
||||||
|
|
||||||
@Schema(description = "服务星级 1-5分", required = true, example = "5")
|
@Schema(description = "服务星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "服务星级 1-5分不能为空")
|
@NotNull(message = "服务星级 1-5 分不能为空")
|
||||||
private Integer benefitScores;
|
private Integer benefitScores;
|
||||||
|
|
||||||
@Schema(description = "评论内容", required = true, example = "哇,真的很丝滑凉快诶,好评")
|
@Schema(description = "评论内容", required = true, example = "哇,真的很丝滑凉快诶,好评")
|
||||||
@NotNull(message = "评论内容不能为空")
|
@NotNull(message = "评论内容不能为空")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
@Schema(description = "评论图片地址数组,以逗号分隔最多上传9张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
@Schema(description = "评论图片地址数组,以逗号分隔最多上传 9 张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
||||||
@Size(max = 9, message = "评论图片地址数组长度不能超过9张")
|
@Size(max = 9, message = "评论图片地址数组长度不能超过 9 张")
|
||||||
private List<String> picUrls;
|
private List<String> picUrls;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ public class AppProductCommentRespVO {
|
|||||||
@Schema(description = "追加评价内容", example = "穿了很久都很丝滑诶")
|
@Schema(description = "追加评价内容", example = "穿了很久都很丝滑诶")
|
||||||
private String additionalContent;
|
private String additionalContent;
|
||||||
|
|
||||||
@Schema(description = "追评评价图片地址数组,以逗号分隔最多上传9张", example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
@Schema(description = "追评评价图片地址数组,以逗号分隔最多上传 9 张", example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
||||||
private List<String> additionalPicUrls;
|
private List<String> additionalPicUrls;
|
||||||
|
|
||||||
@Schema(description = "追加评价时间")
|
@Schema(description = "追加评价时间")
|
||||||
@ -86,24 +86,24 @@ public class AppProductCommentRespVO {
|
|||||||
@Schema(description = "商品 SKU 属性", required = true)
|
@Schema(description = "商品 SKU 属性", required = true)
|
||||||
private List<AppProductPropertyValueDetailRespVO> skuProperties;
|
private List<AppProductPropertyValueDetailRespVO> skuProperties;
|
||||||
|
|
||||||
@Schema(description = "评分星级 1-5分", required = true, example = "5")
|
@Schema(description = "评分星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "评分星级 1-5分不能为空")
|
@NotNull(message = "评分星级 1-5 分不能为空")
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
|
|
||||||
@Schema(description = "描述星级 1-5分", required = true, example = "5")
|
@Schema(description = "描述星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "描述星级 1-5分不能为空")
|
@NotNull(message = "描述星级 1-5 分不能为空")
|
||||||
private Integer descriptionScores;
|
private Integer descriptionScores;
|
||||||
|
|
||||||
@Schema(description = "服务星级 1-5分", required = true, example = "5")
|
@Schema(description = "服务星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "服务星级 1-5分不能为空")
|
@NotNull(message = "服务星级 1-5 分不能为空")
|
||||||
private Integer benefitScores;
|
private Integer benefitScores;
|
||||||
|
|
||||||
@Schema(description = "评论内容", required = true, example = "哇,真的很丝滑凉快诶,好评")
|
@Schema(description = "评论内容", required = true, example = "哇,真的很丝滑凉快诶,好评")
|
||||||
@NotNull(message = "评论内容不能为空")
|
@NotNull(message = "评论内容不能为空")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
@Schema(description = "评论图片地址数组,以逗号分隔最多上传9张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
@Schema(description = "评论图片地址数组,以逗号分隔最多上传 9 张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]")
|
||||||
@Size(max = 9, message = "评论图片地址数组长度不能超过9张")
|
@Size(max = 9, message = "评论图片地址数组长度不能超过 9 张")
|
||||||
private List<String> picUrls;
|
private List<String> picUrls;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.product.convert.comment;
|
package cn.iocoder.yudao.module.product.convert.comment;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.product.api.comment.dto.CommentCreateReqDTO;
|
import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentCreateReqVO;
|
import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentRespVO;
|
import cn.iocoder.yudao.module.product.controller.admin.comment.vo.ProductCommentRespVO;
|
||||||
import cn.iocoder.yudao.module.product.controller.app.comment.vo.AppCommentStatisticsRespVO;
|
import cn.iocoder.yudao.module.product.controller.app.comment.vo.AppCommentStatisticsRespVO;
|
||||||
@ -49,7 +49,7 @@ public interface ProductCommentConvert {
|
|||||||
*
|
*
|
||||||
* @param descriptionScores 描述星级
|
* @param descriptionScores 描述星级
|
||||||
* @param benefitScores 服务星级
|
* @param benefitScores 服务星级
|
||||||
* @return {@link Integer}
|
* @return 综合评分
|
||||||
*/
|
*/
|
||||||
@Named("convertScores")
|
@Named("convertScores")
|
||||||
default Integer convertScores(Integer descriptionScores, Integer benefitScores) {
|
default Integer convertScores(Integer descriptionScores, Integer benefitScores) {
|
||||||
@ -61,7 +61,7 @@ public interface ProductCommentConvert {
|
|||||||
|
|
||||||
@Mapping(target = "orderId", source = "orderId")
|
@Mapping(target = "orderId", source = "orderId")
|
||||||
@Mapping(target = "scores", expression = "java(convertScores(createReqDTO.getDescriptionScores(), createReqDTO.getBenefitScores()))")
|
@Mapping(target = "scores", expression = "java(convertScores(createReqDTO.getDescriptionScores(), createReqDTO.getBenefitScores()))")
|
||||||
ProductCommentDO convert(CommentCreateReqDTO createReqDTO, Long orderId);
|
ProductCommentDO convert(ProductCommentCreateReqDTO createReqDTO, Long orderId);
|
||||||
|
|
||||||
@Mapping(target = "userId", constant = "0L")
|
@Mapping(target = "userId", constant = "0L")
|
||||||
@Mapping(target = "orderId", constant = "0L")
|
@Mapping(target = "orderId", constant = "0L")
|
||||||
|
@ -97,7 +97,7 @@ public class ProductCommentDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 评分星级
|
* 评分星级
|
||||||
*
|
*
|
||||||
* 1-5分
|
* 1-5 分
|
||||||
*/
|
*/
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
/**
|
/**
|
||||||
|
@ -25,6 +25,7 @@ public interface ProductCommentMapper extends BaseMapperX<ProductCommentDO> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO 芋艿:在看看这块
|
// TODO 芋艿:在看看这块
|
||||||
|
// TODO @puhui999:直接使用 scores 来算好评、中评、差评
|
||||||
static void appendTabQuery(LambdaQueryWrapperX<ProductCommentDO> queryWrapper, Integer type) {
|
static void appendTabQuery(LambdaQueryWrapperX<ProductCommentDO> queryWrapper, Integer type) {
|
||||||
// 构建好评查询语句:好评计算 (商品评分星级+服务评分星级) >= 8
|
// 构建好评查询语句:好评计算 (商品评分星级+服务评分星级) >= 8
|
||||||
if (ObjectUtil.equal(type, AppCommentPageReqVO.GOOD_COMMENT)) {
|
if (ObjectUtil.equal(type, AppCommentPageReqVO.GOOD_COMMENT)) {
|
||||||
|
@ -54,7 +54,8 @@ public interface ProductCommentService {
|
|||||||
PageResult<AppProductCommentRespVO> getCommentPage(AppCommentPageReqVO pageVO, Boolean visible);
|
PageResult<AppProductCommentRespVO> getCommentPage(AppCommentPageReqVO pageVO, Boolean visible);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建商品评论 后台管理员创建评论使用
|
* 创建商品评论
|
||||||
|
* 后台管理员创建评论使用
|
||||||
*
|
*
|
||||||
* @param createReqVO 商品评价创建 Request VO 对象
|
* @param createReqVO 商品评价创建 Request VO 对象
|
||||||
*/
|
*/
|
||||||
|
@ -86,6 +86,7 @@ public class ProductCommentServiceImpl implements ProductCommentService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void createComment(ProductCommentCreateReqVO createReqVO) {
|
public void createComment(ProductCommentCreateReqVO createReqVO) {
|
||||||
// 校验订单
|
// 校验订单
|
||||||
|
// TODO @puhui999:不校验哈;尽可能解耦
|
||||||
Long orderId = tradeOrderApi.validateOrder(createReqVO.getUserId(), createReqVO.getOrderItemId());
|
Long orderId = tradeOrderApi.validateOrder(createReqVO.getUserId(), createReqVO.getOrderItemId());
|
||||||
// 校验评论
|
// 校验评论
|
||||||
validateComment(createReqVO.getSpuId(), createReqVO.getUserId(), orderId);
|
validateComment(createReqVO.getSpuId(), createReqVO.getUserId(), orderId);
|
||||||
@ -104,8 +105,6 @@ public class ProductCommentServiceImpl implements ProductCommentService {
|
|||||||
return commentDO.getId();
|
return commentDO.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 只有创建和更新诶 要不要删除接口
|
|
||||||
|
|
||||||
private void validateComment(Long spuId, Long userId, Long orderId) {
|
private void validateComment(Long spuId, Long userId, Long orderId) {
|
||||||
ProductSpuDO spu = productSpuService.getSpu(spuId);
|
ProductSpuDO spu = productSpuService.getSpu(spuId);
|
||||||
if (null == spu) {
|
if (null == spu) {
|
||||||
@ -144,6 +143,7 @@ public class ProductCommentServiceImpl implements ProductCommentService {
|
|||||||
public PageResult<AppProductCommentRespVO> getCommentPage(AppCommentPageReqVO pageVO, Boolean visible) {
|
public PageResult<AppProductCommentRespVO> getCommentPage(AppCommentPageReqVO pageVO, Boolean visible) {
|
||||||
PageResult<AppProductCommentRespVO> result = ProductCommentConvert.INSTANCE.convertPage02(
|
PageResult<AppProductCommentRespVO> result = ProductCommentConvert.INSTANCE.convertPage02(
|
||||||
productCommentMapper.selectPage(pageVO, visible));
|
productCommentMapper.selectPage(pageVO, visible));
|
||||||
|
// TODO @puhui999:要不这块放到 controller 里拼接?
|
||||||
Set<Long> skuIds = result.getList().stream().map(AppProductCommentRespVO::getSkuId).collect(Collectors.toSet());
|
Set<Long> skuIds = result.getList().stream().map(AppProductCommentRespVO::getSkuId).collect(Collectors.toSet());
|
||||||
List<ProductSkuDO> skuList = productSkuService.getSkuList(skuIds);
|
List<ProductSkuDO> skuList = productSkuService.getSkuList(skuIds);
|
||||||
Map<Long, ProductSkuDO> skuDOMap = new HashMap<>(skuIds.size());
|
Map<Long, ProductSkuDO> skuDOMap = new HashMap<>(skuIds.size());
|
||||||
|
@ -126,6 +126,7 @@ CREATE TABLE IF NOT EXISTS `product_property_value` (
|
|||||||
PRIMARY KEY("id")
|
PRIMARY KEY("id")
|
||||||
) COMMENT '规格值';
|
) COMMENT '规格值';
|
||||||
|
|
||||||
|
-- TODO @puhui999:格式不太对哈
|
||||||
CREATE TABLE IF NOT EXISTS `product_comment`
|
CREATE TABLE IF NOT EXISTS `product_comment`
|
||||||
(
|
(
|
||||||
`id`
|
`id`
|
||||||
@ -166,7 +167,7 @@ CREATE TABLE IF NOT EXISTS `product_comment`
|
|||||||
(
|
(
|
||||||
1
|
1
|
||||||
) DEFAULT NULL COMMENT '是否可见true:显示false:隐藏',
|
) DEFAULT NULL COMMENT '是否可见true:显示false:隐藏',
|
||||||
`scores` tinyint DEFAULT NULL COMMENT '评分星级1-5分',
|
`scores` tinyint DEFAULT NULL COMMENT '评分星级1-5 分',
|
||||||
`description_scores` tinyint DEFAULT NULL COMMENT '描述星级1-5 星',
|
`description_scores` tinyint DEFAULT NULL COMMENT '描述星级1-5 星',
|
||||||
`benefit_scores` tinyint DEFAULT NULL COMMENT '服务星级1-5 星',
|
`benefit_scores` tinyint DEFAULT NULL COMMENT '服务星级1-5 星',
|
||||||
`content` varchar
|
`content` varchar
|
||||||
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.trade.controller.app.order;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
|
||||||
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
|
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
|
||||||
import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
|
import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
|
||||||
import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
|
import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
|
||||||
@ -49,13 +48,12 @@ public class AppTradeOrderController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ProductPropertyValueApi productPropertyValueApi;
|
private ProductPropertyValueApi productPropertyValueApi;
|
||||||
|
@Resource
|
||||||
|
private ProductCommentApi productCommentApi;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TradeOrderProperties tradeOrderProperties;
|
private TradeOrderProperties tradeOrderProperties;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private ProductCommentApi productCommentApi;
|
|
||||||
|
|
||||||
@GetMapping("/settlement")
|
@GetMapping("/settlement")
|
||||||
@Operation(summary = "获得订单结算信息")
|
@Operation(summary = "获得订单结算信息")
|
||||||
@PreAuthenticated
|
@PreAuthenticated
|
||||||
@ -141,6 +139,7 @@ public class AppTradeOrderController {
|
|||||||
@Operation(summary = "创建交易订单项的评价")
|
@Operation(summary = "创建交易订单项的评价")
|
||||||
public CommonResult<Long> createOrderItemComment(@RequestBody AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
public CommonResult<Long> createOrderItemComment(@RequestBody AppTradeOrderItemCommentCreateReqVO createReqVO) {
|
||||||
// 校验订单项,订单项存在订单就存在
|
// 校验订单项,订单项存在订单就存在
|
||||||
|
// TODO @puhui999:要去查询订单是不是自己的;不然别人模拟请求哈;
|
||||||
TradeOrderItemDO item = tradeOrderService.getOrderItem(createReqVO.getUserId(), createReqVO.getOrderItemId());
|
TradeOrderItemDO item = tradeOrderService.getOrderItem(createReqVO.getUserId(), createReqVO.getOrderItemId());
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
throw exception(ORDER_ITEM_NOT_FOUND);
|
throw exception(ORDER_ITEM_NOT_FOUND);
|
||||||
@ -149,6 +148,6 @@ public class AppTradeOrderController {
|
|||||||
return success(productCommentApi.createComment(TradeOrderConvert.INSTANCE.convert04(createReqVO), item.getOrderId()));
|
return success(productCommentApi.createComment(TradeOrderConvert.INSTANCE.convert04(createReqVO), item.getOrderId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 合并代码后发现只有商家回复功能 用户追评不要了吗?
|
// TODO 合并代码后发现只有商家回复功能 用户追评不要了吗?不要了哈;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,6 @@ import javax.validation.constraints.NotNull;
|
|||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
|
||||||
* 商品评价创建 Request VO
|
|
||||||
*
|
|
||||||
* @author HUIHUI
|
|
||||||
*/
|
|
||||||
@Schema(description = "用户APP - 商品评价创建 Request VO")
|
@Schema(description = "用户APP - 商品评价创建 Request VO")
|
||||||
@Data
|
@Data
|
||||||
public class AppTradeOrderItemCommentCreateReqVO {
|
public class AppTradeOrderItemCommentCreateReqVO {
|
||||||
@ -24,6 +19,7 @@ public class AppTradeOrderItemCommentCreateReqVO {
|
|||||||
@NotNull(message = "交易订单项编号不能为空")
|
@NotNull(message = "交易订单项编号不能为空")
|
||||||
private Long orderItemId;
|
private Long orderItemId;
|
||||||
|
|
||||||
|
// TODO @puhui:spuId、spuName、skuId 直接查询出来;
|
||||||
@Schema(description = "商品SPU编号", required = true, example = "29502")
|
@Schema(description = "商品SPU编号", required = true, example = "29502")
|
||||||
@NotNull(message = "商品SPU编号不能为空")
|
@NotNull(message = "商品SPU编号不能为空")
|
||||||
private Long spuId;
|
private Long spuId;
|
||||||
@ -36,30 +32,32 @@ public class AppTradeOrderItemCommentCreateReqVO {
|
|||||||
@NotNull(message = "商品SKU编号不能为空")
|
@NotNull(message = "商品SKU编号不能为空")
|
||||||
private Long skuId;
|
private Long skuId;
|
||||||
|
|
||||||
@Schema(description = "评分星级 1-5分", required = true, example = "5")
|
@Schema(description = "评分星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "评分星级 1-5分不能为空")
|
@NotNull(message = "评分星级 1-5 分不能为空")
|
||||||
private Integer scores;
|
private Integer scores;
|
||||||
|
|
||||||
@Schema(description = "描述星级 1-5分", required = true, example = "5")
|
@Schema(description = "描述星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "描述星级 1-5分不能为空")
|
@NotNull(message = "描述星级 1-5 分不能为空")
|
||||||
private Integer descriptionScores;
|
private Integer descriptionScores;
|
||||||
|
|
||||||
@Schema(description = "服务星级 1-5分", required = true, example = "5")
|
@Schema(description = "服务星级 1-5 分", required = true, example = "5")
|
||||||
@NotNull(message = "服务星级 1-5分不能为空")
|
@NotNull(message = "服务星级 1-5 分不能为空")
|
||||||
private Integer benefitScores;
|
private Integer benefitScores;
|
||||||
|
|
||||||
@Schema(description = "评论内容", required = true, example = "穿身上很漂亮诶(*^▽^*)")
|
@Schema(description = "评论内容", required = true, example = "穿身上很漂亮诶(*^▽^*)")
|
||||||
@NotNull(message = "评论内容不能为空")
|
@NotNull(message = "评论内容不能为空")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
@Schema(description = "评论图片地址数组,以逗号分隔最多上传9张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xx.png]")
|
@Schema(description = "评论图片地址数组,以逗号分隔最多上传 9 张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xx.png]")
|
||||||
@Size(max = 9, message = "评论图片地址数组长度不能超过9张")
|
@Size(max = 9, message = "评论图片地址数组长度不能超过 9 张")
|
||||||
private List<String> picUrls;
|
private List<String> picUrls;
|
||||||
|
|
||||||
@Schema(description = "评价人名称", required = true, example = "小姑凉")
|
@Schema(description = "评价人名称", required = true, example = "小姑凉")
|
||||||
@NotNull(message = "评价人名称不能为空")
|
@NotNull(message = "评价人名称不能为空")
|
||||||
private String userNickname;
|
private String userNickname;
|
||||||
|
|
||||||
|
// TODO @puhui:userAvatar、userAvatar、userId 直接查询出来;
|
||||||
|
|
||||||
@Schema(description = "评价人头像", required = true, example = "https://www.iocoder.cn/xx.png")
|
@Schema(description = "评价人头像", required = true, example = "https://www.iocoder.cn/xx.png")
|
||||||
@NotNull(message = "评价人头像不能为空")
|
@NotNull(message = "评价人头像不能为空")
|
||||||
private String userAvatar;
|
private String userAvatar;
|
||||||
|
@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
|
|||||||
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
|
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
|
||||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||||
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
|
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
|
||||||
import cn.iocoder.yudao.module.product.api.comment.dto.CommentCreateReqDTO;
|
import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
||||||
import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
|
import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
|
||||||
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
|
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
|
||||||
import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateReqDTO;
|
import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateReqDTO;
|
||||||
@ -227,6 +227,7 @@ public interface TradeOrderConvert {
|
|||||||
|
|
||||||
AppProductPropertyValueDetailRespVO convert02(ProductPropertyValueDetailRespDTO bean);
|
AppProductPropertyValueDetailRespVO convert02(ProductPropertyValueDetailRespDTO bean);
|
||||||
|
|
||||||
|
// TODO 芋艿:可简化
|
||||||
default AppTradeOrderDetailRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
|
default AppTradeOrderDetailRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
|
||||||
List<ProductPropertyValueDetailRespDTO> propertyValueDetails, TradeOrderProperties tradeOrderProperties) {
|
List<ProductPropertyValueDetailRespDTO> propertyValueDetails, TradeOrderProperties tradeOrderProperties) {
|
||||||
AppTradeOrderDetailRespVO orderVO = convert3(order, orderItems);
|
AppTradeOrderDetailRespVO orderVO = convert3(order, orderItems);
|
||||||
@ -258,7 +259,7 @@ public interface TradeOrderConvert {
|
|||||||
|
|
||||||
AppTradeOrderItemRespVO convert03(TradeOrderItemDO bean);
|
AppTradeOrderItemRespVO convert03(TradeOrderItemDO bean);
|
||||||
|
|
||||||
CommentCreateReqDTO convert04(AppTradeOrderItemCommentCreateReqVO createReqVO);
|
ProductCommentCreateReqDTO convert04(AppTradeOrderItemCommentCreateReqVO createReqVO);
|
||||||
|
|
||||||
default TradePriceCalculateReqBO convert(Long userId, AppTradeOrderSettlementReqVO settlementReqVO,
|
default TradePriceCalculateReqBO convert(Long userId, AppTradeOrderSettlementReqVO settlementReqVO,
|
||||||
List<TradeCartDO> cartList) {
|
List<TradeCartDO> cartList) {
|
||||||
@ -302,5 +303,4 @@ public interface TradeOrderConvert {
|
|||||||
|
|
||||||
AppTradeOrderSettlementRespVO convert0(TradePriceCalculateRespBO calculate, AddressRespDTO address);
|
AppTradeOrderSettlementRespVO convert0(TradePriceCalculateRespBO calculate, AddressRespDTO address);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user