feat(mall): 添加商品评论列表功能并优化订单项

- 新增商品评论列表接口和相关服务方法
- 在订单项中添加指导价字段
- 优化商品评论查询条件和排序功能
- 增加评论用户头像和用户名信息
- 更新相关实体类和VO类以支持新功能
This commit is contained in:
清晨
2025-05-16 10:50:23 +08:00
parent b5ce9d4a3d
commit 3f7707f1db
8 changed files with 103 additions and 9 deletions

View File

@@ -263,6 +263,12 @@ public class ApiProdController {
return ServerResponseEntity.success(prodService.getSearchProdPageByProdName(pageQuery, categoryId, prodName, envLevel, fireLevel, trialScenario,floor, sort, orderBy)); return ServerResponseEntity.success(prodService.getSearchProdPageByProdName(pageQuery, categoryId, prodName, envLevel, fireLevel, trialScenario,floor, sort, orderBy));
} }
@GetMapping("/prodCommPage")
@Operation(summary = "商品评论列表", description = "查询商品评论列表")
public ServerResponseEntity<IPage<TzProdCommVo>> getMyWithdrawList(TzProdCommBo bo, PageQuery pageQuery) {
return ServerResponseEntity.success(prodCommService.selectPageList(bo, pageQuery));
}
@PostMapping("/prodCommByProdId") @PostMapping("/prodCommByProdId")
@Operation(summary = "商品评论列表", description = "根据商品IDprodId查询商品评论列表") @Operation(summary = "商品评论列表", description = "根据商品IDprodId查询商品评论列表")
@Parameter(name = "prodId", description = "商品ID", required = true) @Parameter(name = "prodId", description = "商品ID", required = true)

View File

@@ -33,6 +33,11 @@ public class TzProdComm extends TenantEntity {
*/ */
private Long prodId; private Long prodId;
/**
* 商品名称
*/
private String prodName;
/** /**
* 订单 ID * 订单 ID
*/ */
@@ -83,5 +88,10 @@ public class TzProdComm extends TenantEntity {
*/ */
private Long delFlag; private Long delFlag;
/**
* 浏览量
*/
private Long num;
} }

View File

@@ -32,6 +32,11 @@ public class TzProdCommBo extends BaseEntity {
@NotNull(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long prodId; private Long prodId;
/**
* 商品名称
*/
private String prodName;
/** /**
* 订单 ID * 订单 ID
*/ */
@@ -82,5 +87,15 @@ public class TzProdCommBo extends BaseEntity {
*/ */
private Integer delFlag; private Integer delFlag;
/**
* 浏览量
*/
private Long num;
/**
* 排序 1-最新2-最热
*/
private Integer sort;
} }

View File

@@ -153,6 +153,12 @@ public class HyOrderItemVo implements Serializable {
@ExcelProperty(value = "付款金额") @ExcelProperty(value = "付款金额")
private BigDecimal payPrice; private BigDecimal payPrice;
/**
* 指导价
*/
@ExcelProperty(value = "指导价")
private BigDecimal guidingPrice;
/** /**
* 支付状态 1:待支付 2:未付清 3:已付清 * 支付状态 1:待支付 2:未付清 3:已付清
*/ */

View File

@@ -109,5 +109,11 @@ public class TzProdCommVo implements Serializable {
@ExcelProperty(value = "评论时间") @ExcelProperty(value = "评论时间")
private Date createTime; private Date createTime;
/**
* 浏览量
*/
@ExcelProperty(value = "浏览量")
private Long num;
} }

View File

@@ -91,4 +91,12 @@ public interface ITzProdCommService {
* @return 商品评论分页列表 * @return 商品评论分页列表
*/ */
IPage<TzProdCommVo> queryPageListByUser(TzProdCommBo bo, PageQuery pageQuery); IPage<TzProdCommVo> queryPageListByUser(TzProdCommBo bo, PageQuery pageQuery);
/**
* 查询商品评论列表
*
* @param bo 查询条件
* @return 商品评论列表
*/
IPage<TzProdCommVo> selectPageList(TzProdCommBo bo, PageQuery pageQuery);
} }

View File

@@ -147,7 +147,7 @@ public class HyOrderItemServiceImpl extends MPJBaseServiceImpl<HyOrderItemMapper
MPJLambdaWrapper<HyOrderItem> wrapper = buildQueryWrapper(bo) MPJLambdaWrapper<HyOrderItem> wrapper = buildQueryWrapper(bo)
.selectAll(HyOrderItem.class) .selectAll(HyOrderItem.class)
.select(TzProd::getProdName, TzProd::getPic,TzProd::getUnit) .select(TzProd::getProdName, TzProd::getPic,TzProd::getUnit)
.select(TzSku::getSkuName, TzSku::getPrice) .select(TzSku::getSkuName, TzSku::getPrice,TzSku::getGuidingPrice)
.leftJoin(TzProd.class, TzProd::getProdId, HyOrderItem::getProdId) .leftJoin(TzProd.class, TzProd::getProdId, HyOrderItem::getProdId)
.leftJoin(TzSku.class, TzSku::getSkuId, HyOrderItem::getSkuId) .leftJoin(TzSku.class, TzSku::getSkuId, HyOrderItem::getSkuId)
.orderByDesc(HyOrderItem::getCreateTime); .orderByDesc(HyOrderItem::getCreateTime);
@@ -382,7 +382,7 @@ public class HyOrderItemServiceImpl extends MPJBaseServiceImpl<HyOrderItemMapper
MPJLambdaWrapper<HyOrderItem> wrapper = new MPJLambdaWrapper<HyOrderItem>() MPJLambdaWrapper<HyOrderItem> wrapper = new MPJLambdaWrapper<HyOrderItem>()
.selectAll(HyOrderItem.class) .selectAll(HyOrderItem.class)
.select(TzProd::getProdName, TzProd::getPic,TzProd::getUnit) .select(TzProd::getProdName, TzProd::getPic,TzProd::getUnit)
.select(TzSku::getSkuName, TzSku::getPrice) .select(TzSku::getSkuName, TzSku::getPrice, TzSku::getGuidingPrice)
.leftJoin(TzProd.class, TzProd::getProdId, HyOrderItem::getProdId) .leftJoin(TzProd.class, TzProd::getProdId, HyOrderItem::getProdId)
.leftJoin(TzSku.class, TzSku::getSkuId, HyOrderItem::getSkuId) .leftJoin(TzSku.class, TzSku::getSkuId, HyOrderItem::getSkuId)
.eq(HyOrderItem::getId, orderId) .eq(HyOrderItem::getId, orderId)
@@ -526,7 +526,7 @@ public class HyOrderItemServiceImpl extends MPJBaseServiceImpl<HyOrderItemMapper
MPJLambdaWrapper<HyOrderItem> wrapper = new MPJLambdaWrapper<HyOrderItem>() MPJLambdaWrapper<HyOrderItem> wrapper = new MPJLambdaWrapper<HyOrderItem>()
.selectAll(HyOrderItem.class) .selectAll(HyOrderItem.class)
.select(TzProd::getProdName, TzProd::getPic,TzProd::getUnit) .select(TzProd::getProdName, TzProd::getPic,TzProd::getUnit)
.select(TzSku::getSkuName) .select(TzSku::getSkuName, TzSku::getGuidingPrice)
.leftJoin(TzProd.class, TzProd::getProdId, HyOrderItem::getProdId) .leftJoin(TzProd.class, TzProd::getProdId, HyOrderItem::getProdId)
.leftJoin(TzSku.class, TzSku::getSkuId, HyOrderItem::getSkuId) .leftJoin(TzSku.class, TzSku::getSkuId, HyOrderItem::getSkuId)
.eq(HyOrderItem::getOrderId, orderId) .eq(HyOrderItem::getOrderId, orderId)

View File

@@ -1,6 +1,7 @@
package org.dromara.mall.service.impl; package org.dromara.mall.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -41,7 +42,6 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
private final HyOrderMapper orderMapper; private final HyOrderMapper orderMapper;
/** /**
* 查询商品评论 * 查询商品评论
* *
@@ -50,7 +50,16 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
*/ */
@Override @Override
public TzProdCommVo queryById(Long id){ public TzProdCommVo queryById(Long id){
return baseMapper.selectVoById(id); TzProdCommVo tzProdCommVo = baseMapper.selectVoById(id);
TzUser user = userMapper.selectById(tzProdCommVo.getUserId());
if(user != null) {
tzProdCommVo.setUserAvatar(user.getPic());
tzProdCommVo.setUserName(user.getRealName());
}
//设置浏览量+1
baseMapper.update(new LambdaUpdateWrapper<TzProdComm>().eq(TzProdComm::getId, id).setIncrBy(TzProdComm::getNum, 1));
return tzProdCommVo;
} }
/** /**
@@ -68,6 +77,31 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
/**
* 查询商品评论列表
*
* @param bo 查询条件
* @param pageQuery
* @return 商品评论列表
*/
@Override
public IPage<TzProdCommVo> selectPageList(TzProdCommBo bo, PageQuery pageQuery) {
bo.setDelFlag(1);
bo.setStatus(1);
LambdaQueryWrapper<TzProdComm> lqw = buildQueryWrapper(bo);
IPage<TzProdCommVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 获取评论用户头像
for(TzProdCommVo vo : page.getRecords()) {
TzUser user = userMapper.selectById(vo.getUserId());
if(user != null) {
vo.setUserAvatar(user.getPic());
vo.setUserName(user.getRealName());
}
}
return page;
}
/** /**
* 查询符合条件的商品评论列表 * 查询符合条件的商品评论列表
* *
@@ -111,6 +145,7 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<TzProdComm> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<TzProdComm> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getProdId() != null, TzProdComm::getProdId, bo.getProdId()); lqw.eq(bo.getProdId() != null, TzProdComm::getProdId, bo.getProdId());
lqw.like(StringUtils.isNotBlank(bo.getProdName()), TzProdComm::getProdName, bo.getProdName());
lqw.eq(bo.getOrderId() != null, TzProdComm::getOrderId, bo.getOrderId()); lqw.eq(bo.getOrderId() != null, TzProdComm::getOrderId, bo.getOrderId());
lqw.eq(bo.getOrderItemId() != null, TzProdComm::getOrderItemId, bo.getOrderItemId()); lqw.eq(bo.getOrderItemId() != null, TzProdComm::getOrderItemId, bo.getOrderItemId());
lqw.eq(bo.getUserId() != null, TzProdComm::getUserId, bo.getUserId()); lqw.eq(bo.getUserId() != null, TzProdComm::getUserId, bo.getUserId());
@@ -121,7 +156,13 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
lqw.eq(bo.getIsAnonymous() != null, TzProdComm::getIsAnonymous, bo.getIsAnonymous()); lqw.eq(bo.getIsAnonymous() != null, TzProdComm::getIsAnonymous, bo.getIsAnonymous());
lqw.eq(bo.getStatus() != null, TzProdComm::getStatus, bo.getStatus()); lqw.eq(bo.getStatus() != null, TzProdComm::getStatus, bo.getStatus());
lqw.eq(bo.getDelFlag() != null, TzProdComm::getDelFlag, bo.getDelFlag()); lqw.eq(bo.getDelFlag() != null, TzProdComm::getDelFlag, bo.getDelFlag());
lqw.orderByDesc(TzProdComm::getId); if(bo.getSort() != null){
if(bo.getSort() == 1){
lqw.orderByDesc(TzProdComm::getCreateTime);
}else if (bo.getSort() == 2){
lqw.orderByDesc(TzProdComm::getNum);
}
}
return lqw; return lqw;
} }
@@ -145,6 +186,9 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
order.setStatus(5); order.setStatus(5);
orderMapper.updateById(order); orderMapper.updateById(order);
} }
// 根据商品ID查询商品信息
TzProd prod = prodMapper.selectById(bo.getProdId());
bo.setProdName(prod.getProdName());
TzProdComm add = MapstructUtils.convert(bo, TzProdComm.class); TzProdComm add = MapstructUtils.convert(bo, TzProdComm.class);
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
@@ -189,14 +233,13 @@ public class TzProdCommServiceImpl implements ITzProdCommService {
IPage<TzProdCommVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw); IPage<TzProdCommVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 获取评论列表中的商品信息 // 获取评论列表中的商品信息
page.getRecords().forEach(comment -> { /*page.getRecords().forEach(comment -> {
// 根据商品ID查询商品信息 // 根据商品ID查询商品信息
TzProd prod = prodMapper.selectById(comment.getProdId()); TzProd prod = prodMapper.selectById(comment.getProdId());
if (prod != null) { if (prod != null) {
comment.setProdName(prod.getProdName()); comment.setProdName(prod.getProdName());
} }
}); });*/
return page; return page;
} }
} }