package cn.iocoder.yudao.module.system.dal.mysql.yk;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.yk.vo.YkElderlyPaymentRecordPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.yk.YkElderlyPaymentRecordDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;


/**
 * 颐康长者收款记录信息 Mapper
 *
 * @author 系统管理员
 */
@Mapper
public interface YkElderlyPaymentRecordMapper extends BaseMapperX<YkElderlyPaymentRecordDO> {

    default PageResult<YkElderlyPaymentRecordDO> selectPage(YkElderlyPaymentRecordPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<YkElderlyPaymentRecordDO>()
                .eqIfPresent(YkElderlyPaymentRecordDO::getYkElderId, reqVO.getYkElderId())
                .likeIfPresent(YkElderlyPaymentRecordDO::getElderlyName, reqVO.getElderlyName())
                .eqIfPresent(YkElderlyPaymentRecordDO::getAmount, reqVO.getAmount())
                .eqIfPresent(YkElderlyPaymentRecordDO::getPaymentType, reqVO.getPaymentType())
                .geIfPresent(YkElderlyPaymentRecordDO::getPaymentDateTime, reqVO.getBegin())
                .leIfPresent(YkElderlyPaymentRecordDO::getPaymentDateTime, reqVO.getEnd())
                .eqIfPresent(YkElderlyPaymentRecordDO::getOperator, reqVO.getOperator())
                .eqIfPresent(YkElderlyPaymentRecordDO::getRemark, reqVO.getRemark())
                .eqIfPresent(YkElderlyPaymentRecordDO::getReceiptImage, reqVO.getReceiptImage())
                .orderByDesc(YkElderlyPaymentRecordDO::getPaymentDateTime));
    }

    /**
     * 统计指定日期范围内的现金总金额
     * 
     * @param reqVO 查询条件
     * @return 现金总金额
     */
    default BigDecimal sumCashAmountByDateRange(YkElderlyPaymentRecordPageReqVO reqVO) {
        LambdaQueryWrapperX<YkElderlyPaymentRecordDO> wrapper = new LambdaQueryWrapperX<YkElderlyPaymentRecordDO>()
                .eq(YkElderlyPaymentRecordDO::getPaymentType, "cash")
                .eqIfPresent(YkElderlyPaymentRecordDO::getYkElderId, reqVO.getYkElderId())
                .likeIfPresent(YkElderlyPaymentRecordDO::getElderlyName, reqVO.getElderlyName())
                .geIfPresent(YkElderlyPaymentRecordDO::getPaymentDateTime, reqVO.getBegin())
                .leIfPresent(YkElderlyPaymentRecordDO::getPaymentDateTime, reqVO.getEnd())
                .eqIfPresent(YkElderlyPaymentRecordDO::getOperator, reqVO.getOperator());
        BigDecimal sum = selectList(wrapper).stream()
                .map(YkElderlyPaymentRecordDO::getAmount)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        return sum != null ? sum : BigDecimal.ZERO;
    }

    /**
     * 统计指定日期范围内的微信总金额
     * 
     * @param reqVO 查询条件
     * @return 微信总金额
     */
    default BigDecimal sumWechatAmountByDateRange(YkElderlyPaymentRecordPageReqVO reqVO) {
        LambdaQueryWrapperX<YkElderlyPaymentRecordDO> wrapper = new LambdaQueryWrapperX<YkElderlyPaymentRecordDO>()
                .eq(YkElderlyPaymentRecordDO::getPaymentType, "wechat")
                .eqIfPresent(YkElderlyPaymentRecordDO::getYkElderId, reqVO.getYkElderId())
                .likeIfPresent(YkElderlyPaymentRecordDO::getElderlyName, reqVO.getElderlyName())
                .geIfPresent(YkElderlyPaymentRecordDO::getPaymentDateTime, reqVO.getBegin())
                .leIfPresent(YkElderlyPaymentRecordDO::getPaymentDateTime, reqVO.getEnd())
                .eqIfPresent(YkElderlyPaymentRecordDO::getOperator, reqVO.getOperator());
        BigDecimal sum = selectList(wrapper).stream()
                .map(YkElderlyPaymentRecordDO::getAmount)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        return sum != null ? sum : BigDecimal.ZERO;
    }

}