package com.yonge.cooleshow.biz.dal.dao;

import java.math.BigDecimal;
import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
import com.yonge.cooleshow.biz.dal.vo.TeacherEarningVo;
import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
import org.apache.ibatis.annotations.Param;
import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
import com.yonge.cooleshow.biz.dal.dto.search.UserAccountRecordSearch;
import org.springframework.security.core.parameters.P;

/**
 * 账户记账规则
 * 陪练课 每次课程结束 记录入账
 * 直播课 每次课程结束，对每个学员都记录一次入账
 * 用户购买老师乐谱后 记录入账
 */
public interface UserAccountRecordDao extends BaseMapper<UserAccountRecord> {
    /**
     * 查询详情
     *
     * @author liweifan
     * @date 2022-03-30 13:53:51
     * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
     */
    UserAccountRecordVo detail(@Param("id") Long id);

    /**
     * 分页查询
     *
     * @author liweifan
     * @date 2022-03-30 13:53:51
     * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
     */
    List<UserAccountRecordVo> selectPage(@Param("page") IPage page, @Param("param") UserAccountRecordSearch userAccountRecord);

    List<UserAccountRecordVo> selectAll(@Param("param") UserAccountRecordSearch userAccountRecord);

    List<UserAccountRecordVo> sharePage(@Param("page") IPage page, @Param("param") UserAccountRecordSearch userAccountRecord);

    UserAccountVo accountTotal(@Param("param") UserAccountRecordSearch param);

    /**
     * app查询详情
     *
     * @author liweifan
     * @date 2022-03-30 13:53:51
     * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
     */
    UserAccountRecordVo appDetail(@Param("id") Long id);

    /**
     * 分页查询
     *
     * @author liweifan
     * @date 2022-03-30 13:53:51
     * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
     */
    List<UserAccountRecordVo> appSelectPage(@Param("page") IPage page, @Param("param") UserAccountRecordSearch userAccountRecord);

    /**
     * 老师本月收入
     *
     * @param userId 老师id
     * @return
     */
    BigDecimal selectMonthDecimal(@Param("userId") Long userId);

    /**
     * 老师当天收入
     *
     * @return
     */
    List<TeacherEarningVo> selectTodayTeacherEarning();

    /**
     * 通过订单详情和业务id查询该详情对应的所有账户记录
     *
     * @param orderNo
     * @param bizType
     * @param bizIds
     * @return
     */
    List<UserAccountRecord> selectRecordByOrderDetail(@Param("orderNo") String orderNo,@Param("bizType")AccountBizTypeEnum bizType , @Param("bizIds") List<Long> bizIds);

    /**
     * 入账记录可以通过以下三个字段确定唯一
     *
     * @param orderNo 订单号
     * @param bizType 业务类型
     * @param bizId   业务id
     * @return
     */
    UserAccountRecordVo detailByBiz(@Param("orderNo") String orderNo,
                                    @Param("bizType") AccountBizTypeEnum bizType,
                                    @Param("bizId") Long bizId);

    /**
     * 查询老师账户中可以入账的分润记录
     *
     * @param bizTypes
     * @return
     */
    List<UserAccountRecord> queryCanAccountByBizType(@Param("bizTypes")List<String> bizTypes);
}