
package com.tmerclub.cloud.product.service;

import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.product.bo.mongo.MongoSpuCommBO;
import com.tmerclub.cloud.product.dto.SpuCommDTO;
import com.tmerclub.cloud.product.vo.SpuCommStatisticsStarVO;
import com.tmerclub.cloud.product.vo.SpuCommStatisticsVO;
import com.tmerclub.cloud.product.vo.SpuCommVO;

import java.util.List;

/**
 * 商品评论
 *
 * @author YXF
 * @date 2021-01-11 13:47:33
 */
public interface SpuCommService {

    /**
     * 分页获取商品评论列表
     *
     * @param pageDTO 分页参数
     * @param spuCommDTO  搜索条件
     * @return 商品评论列表分页数据
     */
    PageVO<SpuCommVO> page(PageDTO pageDTO, SpuCommDTO spuCommDTO);

    /**
     * 根据商品评论id获取商品评论
     *
     * @param spuCommId 商品评论id
     * @return 商品评论
     */
    SpuCommVO getBySpuCommId(Long spuCommId);

    /**
     * 更新商品评论
     *
     * @param mongoSpuCommBO 商品评论
     */
    void save(MongoSpuCommBO mongoSpuCommBO);

    /**
     * 更新商品评论
     *
     * @param spuComm 商品评论
     */
    void update(SpuCommDTO spuComm);

    /**
     * 根据商品评论id删除商品评论
     *
     * @param spuCommId
     */
    void deleteById(Long spuCommId);

    /**
     * 根据商品，获取商品评论分页
     *
     * @param pageDTO
     * @param spuId    商品id
     * @param evaluate 评论类型  null/0 全部，1好评 2中评 3差评 4有图
     * @return
     */
    PageVO<SpuCommVO> spuCommPage(PageDTO pageDTO, Long spuId, Integer evaluate);

    /**
     * 返回商品评论统计数据(好评率 好评数量 中评数 差评数 有图)
     *
     * @param spuId
     * @return
     */
    SpuCommStatisticsVO getProdCommDataBySpuId(Long spuId);

    /**
     * 根据用户，获取商品评论分页
     *
     * @param pageDTO
     * @param userId
     * @return
     */
    PageVO<SpuCommVO> spuCommPageByUserId(PageDTO pageDTO, Long userId);

    /**
     * 根据orderItemId和userId, 获取商品评论信息
     *
     * @param orderItemIds
     * @param userId
     * @return
     */
    List<SpuCommVO> getSpuCommByOrderItemId(List<Long> orderItemIds, Long userId);

    /**
     * 添加商品评论
     *
     * @param spuCommDTO
     */
    void comm(SpuCommDTO spuCommDTO);

    /**
     * @param spuCommDTOList
     */
    void comms(List<SpuCommDTO> spuCommDTOList);

    /**
     * 统计商品好评数量
     *
     * @param spuId
     * @return
     */
    Integer countGoodReview(Long spuId);

    /**
     * 返回商品评论数据(按星数划分数量)(商品)
     * @param spuId
     * @return
     */
    SpuCommStatisticsStarVO getProdCommDataByStar(Long spuId);

    /**
     * 获取时间范围内的销量排序，放入redis并返回当前分页的商品信息
     *
     * @param key
     * @param shopId 店铺id
     * @param time 时间范围内
     * @param expireTime
     * @param esRenovationSpuSort
     * @param primaryCategoryId
     * @return
     */
    List<Long> getCommNumRankShopIdAndTime(String key, Long shopId, Integer time, Integer expireTime, Integer esRenovationSpuSort, Long primaryCategoryId);

}
