package cn.iocoder.yudao.module.pay.dal.mysql.wallet; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.pojo.PageParam; 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.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Consumer; import static cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO.*; @Mapper public interface PayWalletTransactionMapper extends BaseMapperX { default PageResult selectPage(Long walletId, Integer type, PageParam pageParam, LocalDateTime[] createTime) { LambdaQueryWrapperX query = new LambdaQueryWrapperX() .eqIfPresent(PayWalletTransactionDO::getWalletId, walletId); if (Objects.equals(type, TYPE_INCOME)) { query.gt(PayWalletTransactionDO::getPrice, 0); } else if (Objects.equals(type, TYPE_EXPENSE)) { query.lt(PayWalletTransactionDO::getPrice, 0); } query.betweenIfPresent(PayWalletTransactionDO::getCreateTime, createTime); query.orderByDesc(PayWalletTransactionDO::getId); return selectPage(pageParam, query); } default Integer selectPriceSum(Long walletId, Integer type, LocalDateTime[] createTime) { // SQL sum 查询 List> result = selectMaps(new QueryWrapperX() .select("SUM(price) AS priceSum") .gt(Objects.equals(type, TYPE_INCOME), "price", 0) // 收入 .lt(Objects.equals(type, TYPE_EXPENSE), "price", 0) // 支出 .eq("wallet_id", walletId) .between("create_time", createTime[0], createTime[1])); // 获得 sum 结果 Map first = CollUtil.getFirst(result); return MapUtil.getInt(first, "priceSum", 0); } default PayWalletTransactionDO selectByNo(String no) { return selectOne(PayWalletTransactionDO::getNo, no); } default PayWalletTransactionDO selectByBiz(String bizId, Integer bizType) { return selectOne(PayWalletTransactionDO::getBizId, bizId, PayWalletTransactionDO::getBizType, bizType); } }