package com.ylx.order.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ylx.merchant.domain.dto.MerchantCommentDTO;
import com.ylx.merchant.domain.vo.MerchantCommentVO;
import org.apache.ibatis.annotations.Param;
import com.ylx.order.domain.TCommentUser;
import com.ylx.order.domain.vo.MerchantCompositeScoreVO;
import com.ylx.order.domain.vo.MerchantMyCommentVO;
import com.ylx.order.domain.vo.TCommentUserAuditStatusCountVO;

import java.util.List;

/**
 * 用户评论表(TCommentUser)表数据库访问层
 *
 * @author makejava
 * @since 2024-08-08 10:32:07
 */
public interface TCommentUserMapper extends BaseMapper<TCommentUser> {

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<TCommentUser> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<TCommentUser> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<TCommentUser> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
     */
    int insertOrUpdateBatch(@Param("entities") List<TCommentUser> entities);

    /**
     * 分页查询用户评论
     *
     * @param tCommentUser
     * @return Page<TCommentUser>
     */
    Page<TCommentUser> selectAll(Page<TCommentUser> page, @Param("tCommentUser") TCommentUser tCommentUser);

    /**
     * 查询用户评论审核状态统计。
     *
     * @param tCommentUser 查询参数
     * @return 用户评论审核状态统计
     */
    TCommentUserAuditStatusCountVO selectAuditStatusCount(@Param("tCommentUser") TCommentUser tCommentUser);

    Page<MerchantCommentVO> getMerchantComment(Page<MerchantCommentVO> page, @Param("dto") MerchantCommentDTO dto);

    /**
     * 商户端查询我的评分分页列表。
     *
     * @param page       分页参数
     * @param merchantId 当前登录商户ID
     * @return Page<MerchantMyCommentVO> 我的评分分页列表
     */
    Page<MerchantMyCommentVO> selectMerchantMyCommentPage(Page<MerchantMyCommentVO> page, @Param("merchantId") Integer merchantId);

    /**
     * 查询商户评分总和和订单量。
     *
     * @param merchantId 商户ID
     * @return MerchantCompositeScoreVO 商户评分统计
     */
    MerchantCompositeScoreVO selectMerchantScoreStatistics(@Param("merchantId") Integer merchantId);
}
