package cn.iocoder.yudao.module.product.convert.comment; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; 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.dal.dataobject.comment.ProductCommentDO; import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.math.BigDecimal; import java.math.RoundingMode; /** * 商品评价 Convert * * @author wangzhs */ @Mapper public interface ProductCommentConvert { ProductCommentConvert INSTANCE = Mappers.getMapper(ProductCommentConvert.class); default ProductCommentDO convert(ProductCommentCreateReqDTO createReqDTO, ProductSpuDO spu, ProductSkuDO sku, MemberUserRespDTO user) { ProductCommentDO comment = BeanUtils.toBean(createReqDTO, ProductCommentDO.class) .setScores(convertScores(createReqDTO.getDescriptionScores(), createReqDTO.getBenefitScores())); if (user != null) { comment.setUserId(user.getId()).setUserNickname(user.getNickname()).setUserAvatar(user.getAvatar()); } if (spu != null) { comment.setSpuId(spu.getId()).setSpuName(spu.getName()); } if (sku != null) { comment.setSkuPicUrl(sku.getPicUrl()).setSkuProperties(sku.getProperties()); } return comment; } default ProductCommentDO convert(ProductCommentCreateReqVO createReq, ProductSpuDO spu, ProductSkuDO sku) { ProductCommentDO comment = BeanUtils.toBean(createReq, ProductCommentDO.class) .setVisible(true).setUserId(0L).setAnonymous(false) .setScores(convertScores(createReq.getDescriptionScores(), createReq.getBenefitScores())); if (spu != null) { comment.setSpuId(spu.getId()).setSpuName(spu.getName()); } if (sku != null) { comment.setSkuPicUrl(sku.getPicUrl()).setSkuProperties(sku.getProperties()); } return comment; } default Integer convertScores(Integer descriptionScores, Integer benefitScores) { // 计算评价最终综合评分 最终星数 = (商品评星 + 服务评星) / 2 BigDecimal sumScore = new BigDecimal(descriptionScores + benefitScores); BigDecimal divide = sumScore.divide(BigDecimal.valueOf(2L), 0, RoundingMode.DOWN); return divide.intValue(); } }