添加订单评价分页--Mongodb

This commit is contained in:
xiaofeng 2020-05-24 16:23:12 +08:00
parent 76c19d7a75
commit ca0b887c60
9 changed files with 323 additions and 68 deletions

View File

@ -41,66 +41,118 @@ public class OrderCommentPageBO implements Serializable {
// */
// private Integer negativeTotal;
// /**
// * 评论列表
// */
// private List<OrderCommentItem> orderCommentItems;
/**
* 评论列表
* 评论 id
*/
private List<OrderCommentItem> orderCommentItems;
private Integer id;
/**
* 用户头像
*/
private String userAvatar;
/**
* 用户的真实姓名
*/
private String userNickName;
/**
* 评价星
*/
private Integer star;
/**
* 评论的内容
*/
private String commentContent;
/**
* 评论的图片地址
*/
private String commentPics;
/**
* 回复条数
*/
private Integer replayCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 创建时间
*/
private Date createTime;
/**
* 商家回复列表
* 只展示最近的一条
*/
private String replyContent;
@Data
@Accessors(chain = true)
@AllArgsConstructor
public static class OrderCommentItem{
/**
* 评论 id
*/
private Integer id;
/**
* 用户头像
*/
private String userAvatar;
/**
* 用户的真实姓名
*/
private String userNickName;
/**
* 评价星
*/
private Integer star;
/**
* 评论的内容
*/
private String commentContent;
/**
* 评论的图片地址
*/
private String commentPics;
/**
* 回复条数
*/
private Integer replayCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 创建时间
*/
private Date createTime;
/**
* 商家回复列表
* 只展示最近的一条
*/
private String replyContent;
// /**
// * 评论 id
// */
// private Integer id;
//
// /**
// * 用户头像
// */
// private String userAvatar;
//
// /**
// * 用户的真实姓名
// */
// private String userNickName;
//
// /**
// * 评价星
// */
// private Integer star;
//
// /**
// * 评论的内容
// */
// private String commentContent;
//
// /**
// * 评论的图片地址
// */
// private String commentPics;
//
// /**
// * 回复条数
// */
// private Integer replayCount;
//
// /**
// * 点赞数
// */
// private Integer likeCount;
//
// /**
// * 创建时间
// */
// private Date createTime;
//
// /**
// * 商家回复列表
// * 只展示最近的一条
// */
// private String replyContent;
}

View File

@ -1,7 +1,9 @@
package cn.iocoder.mall.order.biz.convert.comment;
import cn.iocoder.mall.order.biz.bo.comment.OrderCommentPageBO;
import cn.iocoder.mall.order.biz.dataobject.comment.OrderCommentDO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentAddDTO;
import java.util.List;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@ -25,4 +27,12 @@ public interface OrderCommentConvert {
*/
OrderCommentDO convert(OrderCommentAddDTO orderCommentAddDTO);
/**
* 参数转成BO
*
* @param orderCommentList
* @return
*/
List<OrderCommentPageBO> convert(List<OrderCommentDO> orderCommentList);
}

View File

@ -1,32 +1,22 @@
package cn.iocoder.mall.order.biz.dto.comment;
import cn.iocoder.common.framework.vo.PageParam;
import java.io.Serializable;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 订单评论 page
*
* 订单评论 query
*
* @author xiaofeng
*/
@Data
@Accessors(chain = true)
public class OrderCommentPageDTO implements Serializable {
public class OrderCommentPageDTO extends PageParam implements Serializable {
/**
* 商品 sku id
*/
private Integer productSkuId;
/**
* 页码
*/
private Integer pageNo;
/**
* 每页条数
*/
private Integer pageSize;
}

View File

@ -1,7 +1,9 @@
package cn.iocoder.mall.order.biz.service.comment;
import cn.iocoder.mall.order.biz.bo.comment.OrderCommentBO;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.order.biz.bo.comment.OrderCommentPageBO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentAddDTO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentPageDTO;
import javax.validation.Valid;
import org.springframework.validation.annotation.Validated;
@ -23,4 +25,11 @@ public interface OrderCommentService {
*/
Boolean addOrderComment(@Valid OrderCommentAddDTO orderCommentAddDTO);
/**
* 分页
*
* @param orderCommentPageDTO
* @return
*/
PageResult<OrderCommentPageBO> page(OrderCommentPageDTO orderCommentPageDTO);
}

View File

@ -1,10 +1,21 @@
package cn.iocoder.mall.order.biz.service.comment;
import cn.iocoder.common.framework.util.CollectionUtil;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.order.biz.bo.comment.OrderCommentPageBO;
import cn.iocoder.mall.order.biz.convert.comment.OrderCommentConvert;
import cn.iocoder.mall.order.biz.dataobject.comment.OrderCommentDO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentAddDTO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentPageDTO;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.validation.Valid;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
/**
@ -31,4 +42,33 @@ public class OrderCommentServiceImpl implements OrderCommentService {
.save(OrderCommentConvert.INSTANCE.convert(orderCommentAddDTO));
return null != orderCommentDO ? Boolean.TRUE : Boolean.FALSE;
}
@Override
public PageResult<OrderCommentPageBO> page(
OrderCommentPageDTO orderCommentPageDTO) {
Query query = new Query();
query.with(Sort.by(Direction.ASC, "_id"));
List<OrderCommentDO> orderCommentList = Collections.EMPTY_LIST;
if (orderCommentPageDTO.getPageNo() == 1) {
query.limit(orderCommentPageDTO.getPageSize());
} else {
final int offset = orderCommentPageDTO.getOffset();
query.limit(offset);
List<OrderCommentDO> list = mongoTemplate.find(query, OrderCommentDO.class);
if (!CollectionUtil.isEmpty(list)) {
// 获取最后一条记录
OrderCommentDO orderCommentDO = list.get(orderCommentList.size() - 1);
final Integer orderCommentId = orderCommentDO.getId();
// 从上一页最后一条开始查
query.addCriteria(Criteria.where("_id").gt(orderCommentId));
// 重新赋值
query.limit(orderCommentPageDTO.getPageSize());
}
}
orderCommentList = mongoTemplate.find(query, OrderCommentDO.class);
PageResult<OrderCommentPageBO> pageResult = new PageResult<>();
pageResult.setList(OrderCommentConvert.INSTANCE.convert(orderCommentList));
return pageResult;
}
}

View File

@ -2,13 +2,18 @@ package cn.iocoder.mall.order.rest.controller.comment;
import cn.iocoder.common.framework.constant.MallConstants;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentPageDTO;
import cn.iocoder.mall.order.biz.service.comment.OrderCommentService;
import cn.iocoder.mall.order.rest.convert.comment.UsersOrderCommentConvert;
import cn.iocoder.mall.order.rest.request.comment.UsersOrderCommentAddRequest;
import cn.iocoder.mall.order.rest.request.comment.UsersOrderCommentPageRequest;
import cn.iocoder.mall.order.rest.response.comment.UsersOrderCommentPageResponse;
import cn.iocoder.mall.security.core.context.UserSecurityContextHolder;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -44,5 +49,15 @@ public class UsersOrderCommentController {
UsersOrderCommentConvert.INSTANCE.convert(request)));
}
@GetMapping("/page")
@ApiOperation(value = "获取订单评论")
public CommonResult<PageResult<UsersOrderCommentPageResponse>> page(
UsersOrderCommentPageRequest request) {
OrderCommentPageDTO orderCommentPageDTO = UsersOrderCommentConvert.INSTANCE
.convert(request);
return CommonResult.success(UsersOrderCommentConvert.INSTANCE
.convert(orderCommentService.page(orderCommentPageDTO)));
}
}

View File

@ -1,7 +1,12 @@
package cn.iocoder.mall.order.rest.convert.comment;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.order.biz.bo.comment.OrderCommentPageBO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentAddDTO;
import cn.iocoder.mall.order.biz.dto.comment.OrderCommentPageDTO;
import cn.iocoder.mall.order.rest.request.comment.UsersOrderCommentAddRequest;
import cn.iocoder.mall.order.rest.request.comment.UsersOrderCommentPageRequest;
import cn.iocoder.mall.order.rest.response.comment.UsersOrderCommentPageResponse;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@ -26,4 +31,20 @@ public interface UsersOrderCommentConvert {
*/
OrderCommentAddDTO convert(UsersOrderCommentAddRequest request);
/**
* 分页参数转换
*
* @param request
* @return
*/
OrderCommentPageDTO convert(UsersOrderCommentPageRequest request);
/**
* 分页转换
*
* @param pageResult
* @return
*/
PageResult<UsersOrderCommentPageResponse> convert(PageResult<OrderCommentPageBO> pageResult);
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.mall.order.rest.request.comment;
import cn.iocoder.common.framework.vo.PageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* UsersOrderCommentPageRequest
*
* @author xiaofeng
* @version 1.0
* @date 2020/05/20 23:21
*/
@ApiModel("用户 - Order 模块 - 订单评论分页")
@Data
@Accessors(chain = true)
public class UsersOrderCommentPageRequest extends PageParam {
/**
* 商品 sku id
*/
@ApiModelProperty(value = "商品 SKU id", required = true)
@NotNull(message = "商品 SKU id 不能为空")
private Integer productSkuId;
}

View File

@ -0,0 +1,90 @@
package cn.iocoder.mall.order.rest.response.comment;
import io.swagger.annotations.ApiModel;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* UsersOrderCommentPageResponse
*
* @author xiaofeng
* @version 1.0
* @date 2020/05/20 23:32
*/
@ApiModel("用户 - Order 模块 - 订单评论分页列表")
@Data
@Accessors(chain = true)
public class UsersOrderCommentPageResponse {
/**
* 总条数
*/
private Integer total;
/**
* 评论列表
*/
private List<UsersOrderCommentPageResponse.OrderCommentItem> orderCommentItems;
@Data
@Accessors(chain = true)
@AllArgsConstructor
public static class OrderCommentItem {
/**
* 评论 id
*/
private Integer id;
/**
* 用户头像
*/
private String userAvatar;
/**
* 用户的真实姓名
*/
private String userNickName;
/**
* 评价星
*/
private Integer star;
/**
* 评论的内容
*/
private String commentContent;
/**
* 评论的图片地址
*/
private String commentPics;
/**
* 回复条数
*/
private Integer replayCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 创建时间
*/
private Date createTime;
/**
* 商家回复列表 只展示最近的一条
*/
private String replyContent;
}
}