| package com.mzl.flower.service.impl.comment; | 
|   | 
| import cn.hutool.core.util.IdUtil; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
| import com.mzl.flower.config.exception.ValidationException; | 
| import com.mzl.flower.config.security.SecurityUtils; | 
| import com.mzl.flower.dto.request.comment.*; | 
| import com.mzl.flower.dto.response.comment.FlowerCommentStatisVO; | 
| import com.mzl.flower.dto.response.comment.FlowerCommentVO; | 
| import com.mzl.flower.entity.FlowerCommentDO; | 
| import com.mzl.flower.entity.customer.Customer; | 
| import com.mzl.flower.entity.payment.Order; | 
| import com.mzl.flower.entity.payment.OrderItem; | 
| import com.mzl.flower.entity.supplier.Supplier; | 
| import com.mzl.flower.enums.FlowerCommentShowEnum; | 
| import com.mzl.flower.enums.TrueOrFalseEnum; | 
| import com.mzl.flower.mapper.comment.FlowerCommentMapper; | 
| import com.mzl.flower.mapper.comment.FlowerCommentMapperCustom; | 
| import com.mzl.flower.mapper.customer.CustomerMapper; | 
| import com.mzl.flower.mapper.payment.OrderItemMapper; | 
| import com.mzl.flower.mapper.payment.OrderMapper; | 
| import com.mzl.flower.mapper.supplier.SupplierMapper; | 
| import com.mzl.flower.service.comment.FlowerCommentService; | 
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
| import org.apache.commons.collections4.CollectionUtils; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.BeanUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.math.BigDecimal; | 
| import java.time.LocalDateTime; | 
| import java.util.List; | 
|   | 
| /** | 
|  * <p> | 
|  * 商品评论表 服务实现类 | 
|  * </p> | 
|  * | 
|  * @author @TaoJie | 
|  * @since 2024-09-29 | 
|  */ | 
| @Service | 
| public class FlowerCommentServiceImpl extends ServiceImpl<FlowerCommentMapper, FlowerCommentDO> implements FlowerCommentService { | 
|   | 
|     @Autowired | 
|     private FlowerCommentMapperCustom flowerCommentMapperCustom; | 
|   | 
|     @Autowired | 
|     private OrderItemMapper orderItemMapper; | 
|   | 
|     @Autowired | 
|     private SupplierMapper supplierMapper; | 
|   | 
|     @Autowired | 
|     private CustomerMapper customerMapper; | 
|   | 
|     @Autowired | 
|     private OrderMapper orderMapper; | 
|   | 
|   | 
|     @Transactional | 
|     @Override | 
|     public boolean createFlowerComment(CreateFlowerCommentDTO dto) { | 
|         final FlowerCommentVO byOrderItemId = getByOrderItemId(dto.getOrderItemId()); | 
|         if(null!=byOrderItemId){ | 
|             throw new ValidationException("当前商品已经评论过!"); | 
|         } | 
|   | 
|         FlowerCommentDO flowerCommentDO=new FlowerCommentDO(); | 
|         BeanUtils.copyProperties(dto,flowerCommentDO); | 
|         flowerCommentDO.setId(IdUtil.simpleUUID()); | 
|         flowerCommentDO.create(SecurityUtils.getUserId()); | 
|   | 
|         final OrderItem orderItem = orderItemMapper.selectById(dto.getOrderItemId()); | 
|         if(null==orderItem){ | 
|             throw new ValidationException("当前订单项目不存在!"); | 
|         } | 
|         flowerCommentDO.setOrderId(orderItem.getOrderId()); | 
|         flowerCommentDO.setCustomerUserId(orderItem.getCreateBy()); | 
|         flowerCommentDO.setSupplierId(orderItem.getSupplierId()); | 
|         flowerCommentDO.setFlowerId(orderItem.getFlowerId()); | 
|         flowerCommentDO.setFlowerCover(orderItem.getFlowerCover()); | 
|   | 
|         // 补充商户信息 | 
|         Customer customer = customerMapper.selectOne(new QueryWrapper<Customer>() | 
|                 .eq("user_id", orderItem.getCreateBy())); | 
|         if(null!=customer && null!=customer.getId()){ | 
|             flowerCommentDO.setCustomerId(customer.getId()); | 
|         } | 
|   | 
|   | 
|         // 补充供应商信息 | 
|         Supplier supplier = supplierMapper.selectById(orderItem.getSupplierId()); | 
|         if(null!=supplier && StringUtils.isNotBlank(supplier.getUserId())){ | 
|             flowerCommentDO.setSupplierUserId(supplier.getUserId()); | 
|         } | 
|   | 
|         // 设置显示状态为显示 | 
|         flowerCommentDO.setShowFlag(FlowerCommentShowEnum.SHOW.getFlag()); | 
|         return baseMapper.insert(flowerCommentDO)>0; | 
|     } | 
|   | 
|     @Transactional | 
|     @Override | 
|     public boolean updateFlowerComment(UpdateFlowerCommentDTO dto) { | 
|         FlowerCommentDO flowerCommentDO=baseMapper.selectById(dto.getId()); | 
|         BeanUtils.copyProperties(dto,flowerCommentDO); | 
|         flowerCommentDO.update(SecurityUtils.getUserId()); | 
|          | 
|         return baseMapper.updateById(flowerCommentDO)>0; | 
|     } | 
|   | 
|     @Override | 
|     public boolean deleteFlowerComment(String id) { | 
|         return baseMapper.deleteById(id)>0; | 
|     } | 
|   | 
|     @Override | 
|     public FlowerCommentVO getDetailById(String id) { | 
|         QueryFlowerCommentDTO dto=new QueryFlowerCommentDTO(); | 
|         dto.setId(id); | 
|         final List<FlowerCommentVO> list = getList(dto); | 
|         if(CollectionUtils.isNotEmpty(list)){ | 
|             return list.get(0); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     @Override | 
|     public Page<FlowerCommentVO> getPage(Page page, QueryFlowerCommentDTO dto) { | 
|         List<FlowerCommentVO> list=flowerCommentMapperCustom.getPage(page,dto); | 
|         return page.setRecords(list); | 
|     } | 
|   | 
|     @Override | 
|     public List<FlowerCommentVO> getList(QueryFlowerCommentDTO dto) { | 
|         return flowerCommentMapperCustom.getList(dto); | 
|     } | 
|   | 
|     @Override | 
|     public FlowerCommentVO getByOrderItemId(String orderItemId) { | 
|         QueryFlowerCommentDTO dto=new QueryFlowerCommentDTO(); | 
|         dto.setOrderItemId(orderItemId); | 
|         final List<FlowerCommentVO> list = getList(dto); | 
|         if(CollectionUtils.isNotEmpty(list)){ | 
|             return list.get(0); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     @Override | 
|     public BigDecimal getSupplierAvgScore(Long supplierId) { | 
|         return flowerCommentMapperCustom.getSupplierAvgScore(supplierId); | 
|     } | 
|   | 
|     @Transactional | 
|     @Override | 
|     public boolean createFlowerCommentBatch(CreateFlowerCommentBatchDTO dto) { | 
|         if(CollectionUtils.isNotEmpty(dto.getList())){ | 
|             dto.getList().forEach(item->{ | 
|                 // 保存评论信息 | 
|                 final FlowerCommentVO byOrderItemId = getByOrderItemId(item.getOrderItemId()); | 
|                 if(null!=byOrderItemId){ | 
|                     // 更新 | 
|                     UpdateFlowerCommentDTO updateFlowerCommentDTO=new UpdateFlowerCommentDTO(); | 
|                     BeanUtils.copyProperties(item,updateFlowerCommentDTO); | 
|                     updateFlowerCommentDTO.setId(byOrderItemId.getId()); | 
|                     updateFlowerComment(updateFlowerCommentDTO); | 
|                 }else{ | 
|                     createFlowerComment(item); | 
|                 } | 
|   | 
|             }); | 
|             // 设置订单的评论状态为评论的下个阶段 | 
|             Order order=orderMapper.selectById(dto.getOrderId()); | 
|   | 
|             return true; | 
|         } | 
|         return false; | 
|     } | 
|   | 
|     @Override | 
|     public FlowerCommentStatisVO getSupplierStatis(Long supplierId) { | 
|         FlowerCommentStatisVO vo=new FlowerCommentStatisVO(); | 
|   | 
|         // 获取平均分 | 
|         final BigDecimal supplierAvgScore = flowerCommentMapperCustom.getSupplierAvgScore(supplierId); | 
|         vo.setAvg(supplierAvgScore); | 
|   | 
|         //当前商家评论总数 | 
|         final Integer amount = baseMapper.selectCount(new QueryWrapper<FlowerCommentDO>().lambda() | 
|                         .eq(FlowerCommentDO::getDeleted, TrueOrFalseEnum.FALSE) | 
|                         .eq(FlowerCommentDO::getShowFlag,FlowerCommentShowEnum.SHOW.getFlag()) | 
|                         .eq(FlowerCommentDO::getSupplierId, supplierId)); | 
|         vo.setCommentAmount(amount); | 
|         return vo; | 
|     } | 
|   | 
|     @Override | 
|     public boolean updateShowFlowerComment(ShowFlowerCommentDTO dto) { | 
|         FlowerCommentDO flowerCommentDO = baseMapper.selectById(dto.getId()); | 
|         if (null == flowerCommentDO) { | 
|             throw new ValidationException("评论不存在"); | 
|         } | 
|         flowerCommentDO.setShowFlag(dto.getShowFalg()); | 
|         flowerCommentDO.setUpdateBy(SecurityUtils.getUserId()); | 
|         return baseMapper.updateById(flowerCommentDO)>0; | 
|     } | 
|   | 
|     @Override | 
|     public boolean updateReplayFlowerComment(ReplayFlowerCommentDTO dto) { | 
|         FlowerCommentDO flowerCommentDO = baseMapper.selectById(dto.getId()); | 
|         if (null == flowerCommentDO) { | 
|             throw new ValidationException("评论不存在"); | 
|         } | 
|         flowerCommentDO.setReplayContent(dto.getReplayContent()); | 
|         flowerCommentDO.setReplayBy(SecurityUtils.getUserId()); | 
|         flowerCommentDO.setReplayTime(LocalDateTime.now()); | 
|         flowerCommentDO.setUpdateBy(SecurityUtils.getUserId()); | 
|         return baseMapper.updateById(flowerCommentDO)>0; | 
|     } | 
|   | 
|   | 
| } |