mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	统计:交易统计定时任务
This commit is contained in:
		@@ -0,0 +1,34 @@
 | 
			
		||||
package cn.iocoder.yudao.module.pay.api.wallet;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.wallet.dto.WalletSummaryRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.enums.member.PayWalletBizTypeEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletRechargeService;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletTransactionService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 钱包 API 接口实现类
 | 
			
		||||
 *
 | 
			
		||||
 * @author owen
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
@Validated
 | 
			
		||||
public class PayWalletApiImpl implements PayWalletApi {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private PayWalletRechargeService payWalletRechargeService;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private PayWalletTransactionService payWalletTransactionService;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public WalletSummaryRespDTO getWalletSummary(LocalDateTime beginTime, LocalDateTime endTime) {
 | 
			
		||||
        WalletSummaryRespDTO walletSummary = payWalletRechargeService.getWalletSummary(beginTime, endTime);
 | 
			
		||||
        walletSummary.setOrderWalletPayPrice(payWalletTransactionService.getPriceSummary(PayWalletBizTypeEnum.PAYMENT, beginTime, endTime));
 | 
			
		||||
        return walletSummary;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,23 +1,48 @@
 | 
			
		||||
package cn.iocoder.yudao.module.pay.dal.mysql.wallet;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.bean.BeanUtil;
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.wallet.dto.WalletSummaryRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletRechargeDO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
 | 
			
		||||
import com.github.yulichang.toolkit.MPJWrappers;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface PayWalletRechargeMapper extends BaseMapperX<PayWalletRechargeDO> {
 | 
			
		||||
 | 
			
		||||
    default  int updateByIdAndPaid(Long id, boolean wherePayStatus, PayWalletRechargeDO updateObj){
 | 
			
		||||
    default int updateByIdAndPaid(Long id, boolean wherePayStatus, PayWalletRechargeDO updateObj) {
 | 
			
		||||
        return update(updateObj, new LambdaQueryWrapperX<PayWalletRechargeDO>()
 | 
			
		||||
                .eq(PayWalletRechargeDO::getId, id).eq(PayWalletRechargeDO::getPayStatus, wherePayStatus));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default  int updateByIdAndRefunded(Long id, Integer whereRefundStatus, PayWalletRechargeDO updateObj){
 | 
			
		||||
    default int updateByIdAndRefunded(Long id, Integer whereRefundStatus, PayWalletRechargeDO updateObj) {
 | 
			
		||||
        return update(updateObj, new LambdaQueryWrapperX<PayWalletRechargeDO>()
 | 
			
		||||
                .eq(PayWalletRechargeDO::getId, id).eq(PayWalletRechargeDO::getRefundStatus, whereRefundStatus));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default WalletSummaryRespDTO selectRechargeSummaryByPayTimeBetween(LocalDateTime beginTime, LocalDateTime endTime) {
 | 
			
		||||
        return BeanUtil.copyProperties(CollUtil.get(selectMaps(MPJWrappers.<PayWalletRechargeDO>lambdaJoin()
 | 
			
		||||
                        .selectCount(PayWalletRechargeDO::getId, WalletSummaryRespDTO::getRechargePayCount)
 | 
			
		||||
                        .selectSum(PayWalletRechargeDO::getPayPrice, WalletSummaryRespDTO::getRechargePayPrice)
 | 
			
		||||
                        .eq(PayWalletRechargeDO::getPayStatus, true)
 | 
			
		||||
                        .between(PayWalletRechargeDO::getPayTime, beginTime, endTime)), 0),
 | 
			
		||||
                WalletSummaryRespDTO.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default WalletSummaryRespDTO selectRechargeSummaryByRefundTimeBetween(LocalDateTime beginTime, LocalDateTime endTime) {
 | 
			
		||||
        return BeanUtil.copyProperties(CollUtil.get(selectMaps(MPJWrappers.<PayWalletRechargeDO>lambdaJoin()
 | 
			
		||||
                        .selectCount(PayWalletRechargeDO::getId, WalletSummaryRespDTO::getRechargeRefundCount)
 | 
			
		||||
                        .selectSum(PayWalletRechargeDO::getRefundPayPrice, WalletSummaryRespDTO::getRechargeRefundPrice)
 | 
			
		||||
                        .eq(PayWalletRechargeDO::getRefundStatus, PayRefundStatusEnum.SUCCESS.getStatus())
 | 
			
		||||
                        .between(PayWalletRechargeDO::getRefundTime, beginTime, endTime)), 0),
 | 
			
		||||
                WalletSummaryRespDTO.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,12 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 | 
			
		||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.transaction.AppPayWalletTransactionPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO;
 | 
			
		||||
import com.github.yulichang.toolkit.MPJWrappers;
 | 
			
		||||
import org.apache.ibatis.annotations.Mapper;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface PayWalletTransactionMapper extends BaseMapperX<PayWalletTransactionDO> {
 | 
			
		||||
@@ -35,6 +38,15 @@ public interface PayWalletTransactionMapper extends BaseMapperX<PayWalletTransac
 | 
			
		||||
                PayWalletTransactionDO::getBizType, bizType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    default Integer selectSummaryByBizTypeAndCreateTimeBetween(Integer type, LocalDateTime beginTime, LocalDateTime endTime) {
 | 
			
		||||
        return Optional.ofNullable(selectOne(MPJWrappers.<PayWalletTransactionDO>lambdaJoin()
 | 
			
		||||
                        .selectSum(PayWalletTransactionDO::getPrice)
 | 
			
		||||
                        .eq(PayWalletTransactionDO::getBizType, type)
 | 
			
		||||
                        .between(PayWalletTransactionDO::getCreateTime, beginTime, endTime)))
 | 
			
		||||
                .map(PayWalletTransactionDO::getPrice)
 | 
			
		||||
                .orElse(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
package cn.iocoder.yudao.module.pay.service.wallet;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.wallet.dto.WalletSummaryRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletRechargeDO;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 钱包充值 Service 接口
 | 
			
		||||
 *
 | 
			
		||||
@@ -42,4 +45,14 @@ public interface PayWalletRechargeService {
 | 
			
		||||
     * @param payRefundId 退款单id
 | 
			
		||||
     */
 | 
			
		||||
    void updateWalletRechargeRefunded(Long id, Long payRefundId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取钱包统计
 | 
			
		||||
     *
 | 
			
		||||
     * @param beginTime 起始时间
 | 
			
		||||
     * @param endTime   截止时间
 | 
			
		||||
     * @return 钱包统计
 | 
			
		||||
     */
 | 
			
		||||
    WalletSummaryRespDTO getWalletSummary(LocalDateTime beginTime, LocalDateTime endTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import cn.hutool.core.lang.Assert;
 | 
			
		||||
import cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.wallet.dto.WalletSummaryRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletRechargeConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
 | 
			
		||||
@@ -40,7 +41,7 @@ import static cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum.*;
 | 
			
		||||
@Service
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * TODO 放到 配置文件中
 | 
			
		||||
     */
 | 
			
		||||
@@ -94,9 +95,9 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
 | 
			
		||||
        PayOrderDO payOrderDO = validateWalletRechargerCanPaid(walletRecharge, payOrderId);
 | 
			
		||||
 | 
			
		||||
        // 2. 更新钱包充值的支付状态
 | 
			
		||||
        int updateCount = walletRechargeMapper.updateByIdAndPaid(id,false,
 | 
			
		||||
        int updateCount = walletRechargeMapper.updateByIdAndPaid(id, false,
 | 
			
		||||
                new PayWalletRechargeDO().setId(id).setPayStatus(true).setPayTime(LocalDateTime.now())
 | 
			
		||||
                .setPayChannelCode(payOrderDO.getChannelCode()));
 | 
			
		||||
                        .setPayChannelCode(payOrderDO.getChannelCode()));
 | 
			
		||||
        if (updateCount == 0) {
 | 
			
		||||
            throw exception(WALLET_RECHARGE_UPDATE_PAID_STATUS_NOT_UNPAID);
 | 
			
		||||
        }
 | 
			
		||||
@@ -124,7 +125,7 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
 | 
			
		||||
        // 3 创建退款单
 | 
			
		||||
        String walletRechargeId = String.valueOf(id);
 | 
			
		||||
        String refundId = walletRechargeId + "-refund";
 | 
			
		||||
        Long payRefundId =  payRefundService.createPayRefund(new PayRefundCreateReqDTO()
 | 
			
		||||
        Long payRefundId = payRefundService.createPayRefund(new PayRefundCreateReqDTO()
 | 
			
		||||
                .setAppId(WALLET_PAY_APP_ID).setUserIp(userIp)
 | 
			
		||||
                .setMerchantOrderId(walletRechargeId)
 | 
			
		||||
                .setMerchantRefundId(refundId)
 | 
			
		||||
@@ -257,4 +258,15 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
 | 
			
		||||
        return payOrder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public WalletSummaryRespDTO getWalletSummary(LocalDateTime beginTime, LocalDateTime endTime) {
 | 
			
		||||
        WalletSummaryRespDTO paySummary = walletRechargeMapper.selectRechargeSummaryByPayTimeBetween(beginTime, endTime);
 | 
			
		||||
        WalletSummaryRespDTO refundSummary = walletRechargeMapper.selectRechargeSummaryByRefundTimeBetween(beginTime, endTime);
 | 
			
		||||
 | 
			
		||||
        paySummary.setRechargeRefundCount(refundSummary.getRechargeRefundCount());
 | 
			
		||||
        paySummary.setRechargeRefundPrice(refundSummary.getRechargeRefundPrice());
 | 
			
		||||
 | 
			
		||||
        return paySummary;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,12 @@
 | 
			
		||||
package cn.iocoder.yudao.module.pay.service.wallet;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.wallet.dto.WalletSummaryRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.enums.member.PayWalletBizTypeEnum;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 钱包 Service 接口
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package cn.iocoder.yudao.module.pay.service.wallet;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.lang.Assert;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.wallet.dto.WalletSummaryRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.pay.enums.member.PayWalletBizTypeEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.service.wallet.bo.WalletTransactionCreateReqBO;
 | 
			
		||||
 | 
			
		||||
import javax.validation.Valid;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 钱包余额流水 Service 接口
 | 
			
		||||
@@ -43,10 +44,20 @@ public interface PayWalletTransactionService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取钱包流水
 | 
			
		||||
     *
 | 
			
		||||
     * @param bizId  业务编号
 | 
			
		||||
     * @param bizId 业务编号
 | 
			
		||||
     * @param type  业务类型
 | 
			
		||||
     * @return 钱包流水
 | 
			
		||||
     */
 | 
			
		||||
    PayWalletTransactionDO getWalletTransaction(String bizId, PayWalletBizTypeEnum type);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取支付金额合计
 | 
			
		||||
     *
 | 
			
		||||
     * @param bizType   业务类型
 | 
			
		||||
     * @param beginTime 开始时间
 | 
			
		||||
     * @param endTime   结束时间
 | 
			
		||||
     * @return 支付金额合计
 | 
			
		||||
     */
 | 
			
		||||
    Integer getPriceSummary(PayWalletBizTypeEnum bizType, LocalDateTime beginTime, LocalDateTime endTime);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 钱包流水 Service 实现类
 | 
			
		||||
@@ -60,4 +61,9 @@ public class PayWalletTransactionServiceImpl implements PayWalletTransactionServ
 | 
			
		||||
        return payWalletTransactionMapper.selectByBiz(bizId, type.getType());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Integer getPriceSummary(PayWalletBizTypeEnum bizType, LocalDateTime beginTime, LocalDateTime endTime) {
 | 
			
		||||
        return payWalletTransactionMapper.selectSummaryByBizTypeAndCreateTimeBetween(bizType.getType(), beginTime, endTime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user