package com.ruoyi.account.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.account.api.model.BalanceChangeRecord;
|
import com.ruoyi.account.dto.BalanceQuery;
|
import com.ruoyi.account.mapper.BalanceChangeRecordMapper;
|
import com.ruoyi.account.service.BalanceChangeRecordService;
|
import com.ruoyi.account.vo.CommissionStatistics;
|
import com.ruoyi.account.vo.WalletStatistics;
|
import com.ruoyi.account.vo.WalletStatisticsDetail;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.bean.BeanUtils;
|
import com.ruoyi.other.api.domain.ShopBalanceStatement;
|
import com.ruoyi.other.api.feignClient.ShopClient;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class BalanceChangeRecordServiceImpl extends ServiceImpl<BalanceChangeRecordMapper, BalanceChangeRecord> implements BalanceChangeRecordService {
|
@Resource
|
private ShopClient shopClient;
|
|
@Override
|
public IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery) {
|
Page<BalanceChangeRecord> page = new Page<>();
|
page.setCurrent(agentQuery.getPageNum());
|
page.setSize(agentQuery.getPageSize());
|
return this.baseMapper.pageList(page, agentQuery);
|
}
|
|
@Override
|
public CommissionStatistics commissionStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord) {
|
List<BalanceChangeRecord> balanceChangeRecordList = this.baseMapper.selectBalanceChangeRecordList(balanceChangeRecord);
|
|
BigDecimal totalCommission = balanceChangeRecordList.stream()
|
.filter(item -> !(item.getChangeType().equals(2) && item.getChangeType().equals(5)))
|
.map(BalanceChangeRecord::getChangeAmount)
|
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
.setScale(2, RoundingMode.HALF_UP);
|
|
IPage<BalanceChangeRecord> balanceChangeRecordIPage = this.baseMapper.queryCommissionStatistics(page, balanceChangeRecord);
|
// 过滤商城购物
|
List<BalanceChangeRecord> collect = balanceChangeRecordIPage.getRecords().stream().filter(e -> e.getChangeType() != 5).collect(Collectors.toList());
|
balanceChangeRecordIPage.setRecords(collect);
|
return new CommissionStatistics(totalCommission, balanceChangeRecordIPage);
|
}
|
|
@Override
|
public WalletStatistics walletStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord) {
|
ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
|
shopBalanceStatement.setType(1);
|
|
IPage<BalanceChangeRecord> balanceChangeRecordIPage = this.baseMapper.queryCommissionStatistics(page, balanceChangeRecord);
|
IPage<WalletStatisticsDetail> walletStatisticsDetailIPage = balanceChangeRecordIPage.convert(changeRecord -> {
|
WalletStatisticsDetail walletStatisticsDetail = new WalletStatisticsDetail();
|
BeanUtils.copyBeanProp(walletStatisticsDetail, changeRecord);
|
return walletStatisticsDetail;
|
});
|
|
Map<Integer, BigDecimal> shopCommissionMap = walletStatisticsDetailIPage.getRecords().stream()
|
.collect(Collectors.groupingBy(
|
WalletStatisticsDetail::getChangeType,
|
Collectors.reducing(
|
BigDecimal.ZERO,
|
WalletStatisticsDetail::getChangeAmount,
|
BigDecimal::add
|
)
|
));
|
|
BigDecimal totalRecharge = shopCommissionMap.get(1);
|
BigDecimal totalWithdraw = shopCommissionMap.get(2);
|
BigDecimal totalShopWithdraw = shopCommissionMap.get(7);
|
|
|
WalletStatistics walletStatistics = new WalletStatistics();
|
walletStatistics.setPage(walletStatisticsDetailIPage);
|
walletStatistics.setTotalRecharge(totalRecharge);
|
walletStatistics.setTotalWithdraw(totalWithdraw);
|
walletStatistics.setTotalShopWithdraw(totalShopWithdraw);
|
return walletStatistics;
|
}
|
|
}
|