From 7804b65c502ac9b2bb93f6f64dff53e2a1322f79 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 23 Jun 2022 10:40:48 +0800 Subject: [PATCH] 20220528 --- src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java | 10 src/main/java/cc/mrbird/febs/mall/dto/ApiMallGoodsCommentDto.java | 20 + src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 42 +++ src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCommentConversion.java | 15 + src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java | 15 + src/main/resources/mapper/modules/MallGoodsCommentMapper.xml | 25 ++ src/main/java/cc/mrbird/febs/mall/vo/MallGoodsCommentVo.java | 35 +++ src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDtos.java | 19 + src/main/java/cc/mrbird/febs/mall/vo/AdminMallGoodsCommentVo.java | 49 ++++ src/main/java/cc/mrbird/febs/mall/entity/MallGoodsComment.java | 47 ++++ src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java | 27 ++ src/main/resources/templates/febs/views/modules/order/commentList.html | 168 +++++++++++++++ src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java | 3 src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java | 9 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java | 31 ++ src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java | 4 src/main/resources/mapper/modules/MallOrderInfoMapper.xml | 1 src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java | 6 src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDto.java | 29 ++ src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java | 3 src/main/resources/mapper/modules/MallGoodsMapper.xml | 19 + src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java | 2 src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java | 11 + src/main/java/cc/mrbird/febs/mall/dto/AdminMallGoodsCommentDto.java | 14 + src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java | 20 + src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java | 10 src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java | 3 27 files changed, 635 insertions(+), 2 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java index aa1317a..fdc382f 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java @@ -360,4 +360,31 @@ return new FebsResponse().success(); } + /** + * 评论列表 + */ + @GetMapping("commentList") + public FebsResponse getCommentList(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request) { + Map<String, Object> data = getDataTable(adminMallOrderService.getCommentListInPage(adminMallGoodsCommentDto, request)); + return new FebsResponse().success().data(data); + } + + /** + * 评论列表-显示评论 + */ + @GetMapping("showStateSwitchOn/{id}") + @ControllerEndpoint(operation = "评论列表-显示评论", exceptionMessage = "设置失败") + public FebsResponse showStateSwitchOn(@NotNull(message = "{required}") @PathVariable Long id) { + return adminMallOrderService.showStateSwitchOn(id); + } + + /** + * 评论列表-不显示评论 + */ + @GetMapping("showStateSwitchOff/{id}") + @ControllerEndpoint(operation = "评论列表-显示评论", exceptionMessage = "设置失败") + public FebsResponse showStateSwitchOff(@NotNull(message = "{required}") @PathVariable Long id) { + return adminMallOrderService.showStateSwitchOff(id); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java index 860e466..01d12fc 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java @@ -1,8 +1,10 @@ package cc.mrbird.febs.mall.controller; import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto; import cc.mrbird.febs.mall.dto.MallGoodsQueryDto; import cc.mrbird.febs.mall.service.IApiMallGoodsService; +import cc.mrbird.febs.mall.vo.MallGoodsCommentVo; import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo; import cc.mrbird.febs.mall.vo.MallGoodsListVo; import io.swagger.annotations.Api; @@ -45,4 +47,13 @@ return new FebsResponse().success().data(mallGoodsService.findMallGoodsDetailsById(id)); } + @ApiOperation(value = "获取商品评价", notes = "获取商品评价") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = MallGoodsCommentVo.class) + }) + @PostMapping(value = "/commentByGoodsId") + public FebsResponse commentByGoodsId(@RequestBody ApiMallGoodsCommentDto queryDto) { + return new FebsResponse().success().data(mallGoodsService.findMallGoodsCommentByGoodsId(queryDto)); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java index 9af4821..0260de6 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java @@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -103,4 +102,12 @@ mallOrderInfoService.refundExpress(refundExpressDto); return new FebsResponse().success().message("提交成功"); } + + @ApiOperation(value = "评价", notes = "评价") + @PostMapping(value = "/goodsComment") + public FebsResponse goodsComment(@RequestBody ApiAddCommentDtos addCommentDtos) { + mallOrderInfoService.goodsComment(addCommentDtos); + return new FebsResponse().success().message("评价成功"); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java index 635b5e5..903ce69 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java @@ -39,6 +39,16 @@ } /** + * 评论列表 + * @return + */ + @GetMapping("commentList") + @RequiresPermissions("commentList:view") + public String commentList() { + return FebsUtil.view("modules/order/commentList"); + } + + /** * 订单-发货 * @param id * @param model diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCommentConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCommentConversion.java new file mode 100644 index 0000000..89ff495 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsCommentConversion.java @@ -0,0 +1,15 @@ +package cc.mrbird.febs.mall.conversion; + +import cc.mrbird.febs.mall.dto.ApiAddCommentDto; +import cc.mrbird.febs.mall.entity.MallGoodsComment; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public abstract class MallGoodsCommentConversion { + + public static final MallGoodsCommentConversion INSTANCE = Mappers.getMapper(MallGoodsCommentConversion.class); + + public abstract MallGoodsComment dtoToEntity(ApiAddCommentDto dto); + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminMallGoodsCommentDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminMallGoodsCommentDto.java new file mode 100644 index 0000000..a48757f --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminMallGoodsCommentDto.java @@ -0,0 +1,14 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@Data +@ApiModel(value = "AdminMallGoodsCommentDto", description = "参数接收类") +public class AdminMallGoodsCommentDto { + + private String goodsName; + + private String name; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDto.java new file mode 100644 index 0000000..1add27e --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDto.java @@ -0,0 +1,29 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "ApiMallActListDto", description = "参数接收类") +public class ApiAddCommentDto { + + @ApiModelProperty(value = "规格ID") + private Long skuId; + + @ApiModelProperty(value = "商品ID") + private Long goodsId; + + @ApiModelProperty(value = "评分 4.0") + private Double star; + + @ApiModelProperty(value = "评论") + private String comment; + + @ApiModelProperty(value = "图片") + private String images; + + @ApiModelProperty(value = "是否匿名评价 1:匿名 2:不匿名") + private Integer anonymousState; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDtos.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDtos.java new file mode 100644 index 0000000..17345c4 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiAddCommentDtos.java @@ -0,0 +1,19 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "ApiAddCommentDtos", description = "参数接收类") +public class ApiAddCommentDtos { + + @ApiModelProperty(value = "订单ID") + private Long orderId; + + @ApiModelProperty(value = "订单ID") + private List<ApiAddCommentDto> apiAddCommentDtos; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiMallGoodsCommentDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallGoodsCommentDto.java new file mode 100644 index 0000000..97a254a --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallGoodsCommentDto.java @@ -0,0 +1,20 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "ApiMallGoodsCommentDto", description = "商品评论接收类") +public class ApiMallGoodsCommentDto { + + @ApiModelProperty(value = "页码", example = "1") + private Integer pageNow; + + @ApiModelProperty(value = "每页数量", example = "10") + private Integer pageSize; + + @ApiModelProperty(value = "商品ID", example = "1") + private Long goodsId; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsComment.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsComment.java new file mode 100644 index 0000000..92cdbd1 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallGoodsComment.java @@ -0,0 +1,47 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("mall_goods_comment") +public class MallGoodsComment extends BaseEntity { + + /** + * 显示 + */ + public static final Integer SHOW_STATE_ENABLE = 1; + /** + * 隐藏 + */ + public static final Integer SHOW_STATE_DISABLED = 2; + + //会员ID + private Long memberId; + //商品ID + private Long goodsId; + //样式ID + private Long styleId; + //规格ID + private Long skuId; + //订单ID + private Long orderId; + //评分 + private Double star; + //评论 + private String comment; + //图片 + private String images; + //展示状态 1:显示 2:隐藏 + private Integer showState; + //匿名状态 1:匿名 2:不匿名 + private Integer anonymousState; + //商品名称 + private String goodsName; + //样式名称 + private String styleName; + //规格名称 + private String skuName; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java index 1950daa..2eedb6d 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java @@ -80,4 +80,14 @@ private Integer orderType; private BigDecimal carriage; + /** + * ALTER TABLE `mall_order_info` + * ADD COLUMN `comment_state` int(11) NULL COMMENT '评价状态 1:待评价 2:已评价' AFTER `carriage`; + */ + private Integer commentState; + /** + * 评价状态 1:待评价 2:已评价 + */ + public static final Integer COMMENT_STATE_NO = 1; + public static final Integer COMMENT_STATE_YES = 2; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java new file mode 100644 index 0000000..145c577 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java @@ -0,0 +1,15 @@ +package cc.mrbird.febs.mall.mapper; + +import cc.mrbird.febs.mall.dto.AdminMallGoodsCommentDto; +import cc.mrbird.febs.mall.entity.MallGoodsComment; +import cc.mrbird.febs.mall.vo.AdminMallGoodsCommentVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +public interface MallGoodsCommentMapper extends BaseMapper<MallGoodsComment> { + + IPage<AdminMallGoodsCommentVo> getCommentListInPage(Page<AdminMallGoodsCommentVo> page, @Param("record")AdminMallGoodsCommentDto adminMallGoodsCommentDto); + +} diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java index 825d50b..59206a4 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java @@ -2,6 +2,7 @@ import cc.mrbird.febs.mall.dto.MallGoodsQueryDto; import cc.mrbird.febs.mall.entity.MallGoods; +import cc.mrbird.febs.mall.entity.MallGoodsComment; import cc.mrbird.febs.mall.vo.*; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -40,4 +41,6 @@ List<AdminMallGoodsTreeVo> getAllGoodsTree(); List<MallGoods> selectOrderGoodsList(@Param("memberId") Long memberId, @Param("date") Date date); + + IPage<MallGoodsCommentVo> selectMallGoodsCommentListQueryInPage(Page<MallGoodsCommentVo> page, @Param("record")MallGoodsComment mallGoodsComment); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java index 03b3e22..cc13c93 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java @@ -60,4 +60,10 @@ FebsResponse cancelOrder(Long id); AdminMallMemberPaymentVo getMallMemberRefundPayInfoByFlowId(long id); + + IPage<AdminMallGoodsCommentVo> getCommentListInPage(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request); + + FebsResponse showStateSwitchOn(Long id); + + FebsResponse showStateSwitchOff(Long id); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java index 58ea980..f5c6b2d 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java @@ -1,7 +1,9 @@ package cc.mrbird.febs.mall.service; +import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto; import cc.mrbird.febs.mall.dto.MallGoodsQueryDto; import cc.mrbird.febs.mall.entity.MallGoods; +import cc.mrbird.febs.mall.vo.MallGoodsCommentVo; import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo; import cc.mrbird.febs.mall.vo.MallGoodsListVo; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -13,4 +15,6 @@ IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto); MallGoodsDetailsVo findMallGoodsDetailsById(@Param("id") Long id); + + IPage<MallGoodsCommentVo> findMallGoodsCommentByGoodsId(ApiMallGoodsCommentDto queryDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java index 3fb971d..8b63908 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java @@ -30,4 +30,6 @@ void refundExpress(RefundExpressDto refundExpressDto); void autoCancelOrder(Long id); + + void goodsComment(ApiAddCommentDtos addCommentDtos); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java index 62111f4..203a7bd 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java @@ -43,6 +43,8 @@ private final MallOrderRefundAddressMapper mallOrderRefundAddressMapper; + private final MallGoodsCommentMapper mallGoodsCommentMapper; + private final MallMoneyFlowMapper mallMoneyFlowMapper; private final IApiMallMemberWalletService iApiMallMemberWalletService; @@ -363,6 +365,35 @@ } @Override + public IPage<AdminMallGoodsCommentVo> getCommentListInPage(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request) { + Page<AdminMallGoodsCommentVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallGoodsCommentVo> adminMallGoodsCommentVos = mallGoodsCommentMapper.getCommentListInPage(page, adminMallGoodsCommentDto); + return adminMallGoodsCommentVos; + } + + @Override + public FebsResponse showStateSwitchOn(Long id) { + MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id); + if (ObjectUtil.isEmpty(mallGoodsComment)) { + return new FebsResponse().fail().message("评论不存在,请刷新当前页面"); + } + mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE); + mallGoodsCommentMapper.updateById(mallGoodsComment); + return new FebsResponse().success(); + } + + @Override + public FebsResponse showStateSwitchOff(Long id) { + MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id); + if (ObjectUtil.isEmpty(mallGoodsComment)) { + return new FebsResponse().fail().message("评论不存在,请刷新当前页面"); + } + mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_DISABLED); + mallGoodsCommentMapper.updateById(mallGoodsComment); + return new FebsResponse().success(); + } + + @Override public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo()); if (mallOrderInfo == null) { diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java index 35dfc36..6135e77 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java @@ -3,14 +3,19 @@ import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.mall.conversion.MallGoodsConversion; import cc.mrbird.febs.mall.conversion.MallMemberConversion; +import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto; import cc.mrbird.febs.mall.dto.MallGoodsQueryDto; import cc.mrbird.febs.mall.entity.MallGoods; +import cc.mrbird.febs.mall.entity.MallGoodsComment; +import cc.mrbird.febs.mall.mapper.MallGoodsCommentMapper; import cc.mrbird.febs.mall.mapper.MallGoodsImagesMapper; import cc.mrbird.febs.mall.mapper.MallGoodsMapper; import cc.mrbird.febs.mall.service.IApiMallGoodsService; +import cc.mrbird.febs.mall.vo.MallGoodsCommentVo; import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo; import cc.mrbird.febs.mall.vo.MallGoodsListVo; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -32,6 +37,8 @@ public class ApiMallGoodsServiceImpl extends ServiceImpl<MallGoodsMapper, MallGoods> implements IApiMallGoodsService { private final MallGoodsImagesMapper goodsImagesMapper; + private final MallGoodsCommentMapper mallGoodsCommentMapper; + @Override public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) { @@ -54,6 +61,19 @@ mallGoodsDetailsVo.setVolume(stockAndVolume.get("volume").intValue()); } mallGoodsDetailsVo.setImages(images); + + QueryWrapper<MallGoodsComment> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("goods_id",id); + Integer commentCount = mallGoodsCommentMapper.selectCount(objectQueryWrapper); + mallGoodsDetailsVo.setCommentCount(commentCount); return mallGoodsDetailsVo; } + + @Override + public IPage<MallGoodsCommentVo> findMallGoodsCommentByGoodsId(ApiMallGoodsCommentDto queryDto) { + Page<MallGoodsCommentVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize()); + MallGoodsComment mallGoodsComment = new MallGoodsComment(); + mallGoodsComment.setGoodsId(queryDto.getGoodsId()); + return this.baseMapper.selectMallGoodsCommentListQueryInPage(page,mallGoodsComment); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index ceee7d3..94472d4 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -6,6 +6,7 @@ import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.common.utils.RedisUtils; +import cc.mrbird.febs.mall.conversion.MallGoodsCommentConversion; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion; import cc.mrbird.febs.mall.dto.*; @@ -31,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.text.SimpleDateFormat; import java.util.*; /** @@ -48,6 +48,7 @@ private final MallAddressInfoMapper mallAddressInfoMapper; private final MallOrderItemMapper mallOrderItemMapper; private final MallMemberMapper memberMapper; + private final MallGoodsCommentMapper mallGoodsCommentMapper; private final IApiMallMemberWalletService memberWalletService; private final MallExpressInfoMapper expressInfoMapper; private final MallOrderRefundMapper mallOrderRefundMapper; @@ -491,4 +492,43 @@ this.baseMapper.updateById(orderInfo); } } + + @Override + public void goodsComment(ApiAddCommentDtos addCommentDtos) { + Long orderId = addCommentDtos.getOrderId(); + MallMember member = LoginUserUtil.getLoginUser(); + MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(orderId); + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { + throw new FebsException("订单不存在"); + } + if (OrderStatusEnum.FINISH.getValue() != orderInfo.getStatus()) { + throw new FebsException("该状态不能评价"); + } + if (MallOrderInfo.COMMENT_STATE_YES == orderInfo.getCommentState()) { + throw new FebsException("该状态不能评价"); + } + + orderInfo.setCommentState(MallOrderInfo.COMMENT_STATE_YES); + this.baseMapper.updateById(orderInfo); + + List<ApiAddCommentDto> apiAddCommentDtos = addCommentDtos.getApiAddCommentDtos(); + if(CollUtil.isNotEmpty(apiAddCommentDtos)){ + for(ApiAddCommentDto apiAddCommentDto : apiAddCommentDtos){ + Long skuId = apiAddCommentDto.getSkuId(); + MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId); + Long goodsId = apiAddCommentDto.getGoodsId(); + MallGoods mallGoods = mallGoodsMapper.selectById(goodsId); + MallGoodsComment mallGoodsComment = MallGoodsCommentConversion.INSTANCE.dtoToEntity(apiAddCommentDto); + mallGoodsComment.setMemberId(member.getId()); + mallGoodsComment.setOrderId(orderId); + mallGoodsComment.setGoodsName(mallGoods.getGoodsName()); + mallGoodsComment.setSkuName(mallGoodsSku.getSkuName()); + mallGoodsComment.setStyleId(mallGoodsSku.getStyleId()); + mallGoodsComment.setStyleName(mallGoodsSku.getStyleName()); + mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE); + mallGoodsCommentMapper.insert(mallGoodsComment); + } + } + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallGoodsCommentVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallGoodsCommentVo.java new file mode 100644 index 0000000..8396420 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallGoodsCommentVo.java @@ -0,0 +1,49 @@ +package cc.mrbird.febs.mall.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(value = "AdminMallGoodsCommentVo", description = "信息返回类") +public class AdminMallGoodsCommentVo { + + private Long id; + + @ApiModelProperty(value = "订单编号") + private String orderNo; + + @ApiModelProperty(value = "姓名") + private String memberName; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "样式名称") + private String styleName; + + @ApiModelProperty(value = "规格名称") + private String skuName; + + @ApiModelProperty(value = "评价时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createdTime; + + @ApiModelProperty(value = "评分 4.0") + private Double star; + + @ApiModelProperty(value = "评论") + private String comment; + + @ApiModelProperty(value = "图片") + private String images; + + @ApiModelProperty(value = "是否匿名评价 1:匿名 2:不匿名") + private Integer anonymousState; + + @ApiModelProperty(value = "展示状态 1:显示 2:隐藏") + private Integer showState; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsCommentVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsCommentVo.java new file mode 100644 index 0000000..8ec1da7 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsCommentVo.java @@ -0,0 +1,35 @@ +package cc.mrbird.febs.mall.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(value = "MallGoodsCommentVo", description = "商品评价列表") +public class MallGoodsCommentVo { + + @ApiModelProperty(value = "头像") + private String avatar; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "评价时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createdTime; + + @ApiModelProperty(value = "评分 4.0") + private Double star; + + @ApiModelProperty(value = "评论") + private String comment; + + @ApiModelProperty(value = "图片") + private String images; + + @ApiModelProperty(value = "是否匿名评价 1:匿名 2:不匿名") + private Integer anonymousState; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java index e258a8d..25eebaa 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java @@ -68,4 +68,7 @@ @ApiModelProperty(value = "样式") private List<GoodsDetailsStyleVo> styles; + + @ApiModelProperty(value = "评论数量") + private Integer commentCount; } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java index 85130e9..78242f6 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java @@ -81,5 +81,8 @@ return 3; } } + + @ApiModelProperty(value = "评价状态 1:待评价 2:已评价") + private Integer commentState; } diff --git a/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml b/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml new file mode 100644 index 0000000..e7221ee --- /dev/null +++ b/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml @@ -0,0 +1,25 @@ +<?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="cc.mrbird.febs.mall.mapper.MallGoodsCommentMapper"> + + <select id="getCommentListInPage" resultType="cc.mrbird.febs.mall.vo.AdminMallGoodsCommentVo"> + select a.*, + b.name memberName, + c.order_no orderNo + from mall_goods_comment a + left join mall_member b on a.member_id = b.id + left join mall_order_info c on a.order_id = c.id + <where> + <if test="record != null"> + <if test="record.goodsName != null and record.goodsName != ''"> + and a.goods_name like CONCAT('%', CONCAT(#{record.goodsName}, '%')) + </if> + <if test="record.name != null and record.name != ''"> + and b.name like CONCAT('%', CONCAT(#{record.name}, '%')) + </if> + </if> + </where> + order by a.created_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml index 1c41a5d..66ce2c7 100644 --- a/src/main/resources/mapper/modules/MallGoodsMapper.xml +++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml @@ -214,4 +214,23 @@ and date_format(c.pay_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d') </if> </select> + + <select id="selectMallGoodsCommentListQueryInPage" resultType="cc.mrbird.febs.mall.vo.MallGoodsCommentVo"> + select + a.*, + b.name name, + b.avatar avatar + from mall_goods_comment a + left join mall_member b on b.id = a.member_id + <where> + <if test="record != null"> + <if test="record.goodsId != null and record.goodsId != ''"> + and a.goods_id=#{record.goodsId} + </if> + </if> + </where> + group by a.id + order by a.created_time desc + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml index 9f83d53..30e7d6e 100644 --- a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml +++ b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml @@ -96,6 +96,7 @@ <result column="longitude" property="longitude" /> <result column="latitude" property="latitude" /> <result column="order_type" property="orderType" /> + <result column="comment_state" property="commentState" /> <result column="carriage" property="carriage" /> <result column="remark" property="remark" /> <result column="del_flag" property="delFlag" /> diff --git a/src/main/resources/templates/febs/views/modules/order/commentList.html b/src/main/resources/templates/febs/views/modules/order/commentList.html new file mode 100644 index 0000000..c0b49e5 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/order/commentList.html @@ -0,0 +1,168 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-comment" lay-title="评论列表"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-form-item"> + <div class="layui-col-md10"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="用户名" name="name" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="商品名" name="goodsName" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="commetTable" lay-data="{id: 'commetTable'}"></table> + <style type="text/css"> + .layui-table-cell{ + text-align:center; + height: auto; + white-space: nowrap; /*文本不会换行,在同一行显示*/ + overflow: hidden; /*超出隐藏*/ + text-overflow: ellipsis; /*省略号显示*/ + } + .layui-table img{ + max-width:100px + } + </style> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="showStateSwitch"> + {{# if(d.showState === 1) { }} + <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="showStateSwitch"> + {{# } else { }} + <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="showStateSwitch"> + {{# } }} +</script> +<script id="showScreenhost" type="text/html"> + {{# var srr=d.images.split(","); + for(var j in srr) { srr[j] }} + <div style="margin:0 10px; display:inline-block !important; display:inline; max-width:100px; max-height:100px;"> + <img style=" max-width:100px; max-height:100px;" src="{{srr[j]}}" alt=""/> + </div> + {{# } }} +</script> + +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-comment'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(commetTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + }); + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'commetTable', + url: ctx + 'admin/order/commentList', + defaultToolbar: [], + toolbar: '#tableToolBar', + cols: [[ + {field: 'memberName', title: '昵称', minWidth: 100,align:'left'}, + {field: 'orderNo', title: '订单编号', minWidth: 80,align:'left'}, + {field: 'goodsName', title: '商品名称', minWidth: 80,align:'left'}, + {field: 'styleName', title: '样式', minWidth: 80,align:'left'}, + {field: 'skuName', title: '规格', minWidth: 80,align:'left'}, + {field: 'showState', title: '是否展示', templet: '#showStateSwitch', minWidth: 80,align:'center'}, + {field: 'images', title: '图片', align: 'center', templet: '#showScreenhost', width: 400}, + {field: 'star', title: '评分', minWidth: 50,align:'left'}, + {field: 'comment', title: '评论', minWidth: 120,align:'left'}, + {field: 'createdTime', title: '评价时间', minWidth: 180,align:'left'}, + {field: 'anonymousState', title: '是否匿名', + templet: function (d) { + if (d.anonymousState === 1) { + return '<span style="color:red;">匿名</span>' + } else if (d.anonymousState === 2) { + return '<span">不匿名</span>' + }else{ + return '' + } + }, minWidth: 80,align:'center'}, + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + name: $searchForm.find('input[name="name"]').val().trim(), + goodsName: $searchForm.find('input[name="goodsName"]').val().trim(), + }; + } + + function showStateSwitchOn(id) { + febs.get(ctx + 'admin/order/showStateSwitchOn/' + id, null, function () { + febs.alert.success('设置成功'); + $query.click(); + }); + } + + function showStateSwitchOff(id) { + febs.get(ctx + 'admin/order/showStateSwitchOff/' + id, null, function () { + febs.alert.success('设置成功'); + $query.click(); + }); + } + + form.on('switch(showStateSwitch)', function (data) { + if (data.elem.checked) { + showStateSwitchOn(data.value); + } else { + showStateSwitchOff(data.value); + } + }) + + }) +</script> \ No newline at end of file -- Gitblit v1.9.1