1
phpcjl
2024-12-18 dfcbfb5b1f7fd9a44979dd6933593abdf2ed166f
1
7个文件已修改
2个文件已添加
298 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopBalanceStatementClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatistics.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java
@@ -81,4 +81,8 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "门店名称")
    @TableField(exist = false)
    private String shopName;
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopBalanceStatementClient.java
@@ -6,12 +6,13 @@
import com.ruoyi.other.api.factory.ShopBalanceStatementClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(contextId = "ShopBalanceStatementClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = ShopBalanceStatementClientFallbackFactory.class)
public interface ShopBalanceStatementClient {
    @PostMapping()
    R<List<ShopBalanceStatement>> getList(ShopBalanceStatement shopBalanceStatement);
    @PostMapping("/shop-balance-statement/getList")
    R<List<ShopBalanceStatement>> getList(@RequestBody ShopBalanceStatement shopBalanceStatement);
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -6,6 +6,7 @@
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.account.vo.WalletStatistics;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import io.swagger.annotations.ApiOperation;
@@ -23,54 +24,68 @@
@RestController
@RequestMapping("/balanceChangeRecord")
public class BalanceChangeRecordController {
    @Resource
    private BalanceChangeRecordService balanceChangeRecordService;
    /**
     * 保存账户流水记录
     * @param balanceChangeRecord
     * @return
     */
    @PostMapping("/saveBalanceChangeRecord")
    public R saveBalanceChangeRecord(@RequestBody BalanceChangeRecord balanceChangeRecord){
        balanceChangeRecordService.save(balanceChangeRecord);
        return R.ok();
    }
    @PostMapping("/page")
    @ApiOperation(value = "余额变更明细", tags = {"后台"})
    public R<IPage<BalanceChangeRecord>> page(@RequestBody BalanceQuery agentQuery) {
    @Resource
    private BalanceChangeRecordService balanceChangeRecordService;
        return R.ok(balanceChangeRecordService.pageList(agentQuery));
    }
    /**
     * 用户分佣统计
     */
    @GetMapping("/commissionStatistics")
    @ApiOperation(value = "用户分佣统计", tags = "管理后台-财务统计-用户分佣统计")
    public R<CommissionStatistics> commissionStatistics(@ApiParam("页码") @RequestParam Integer pageNum,
                                                        @ApiParam("每一页数据大小") Integer pageSize,
                                                        BalanceChangeRecord balanceChangeRecord) {
        CommissionStatistics commissionStatistics1 = balanceChangeRecordService.commissionStatistics(Page.of(pageNum, pageSize), balanceChangeRecord);
        return R.ok(commissionStatistics1);
    }
//
    /**
     * 保存账户流水记录
     *
     * @param balanceChangeRecord
     * @return
     */
    @PostMapping("/saveBalanceChangeRecord")
    public R saveBalanceChangeRecord(@RequestBody BalanceChangeRecord balanceChangeRecord) {
        balanceChangeRecordService.save(balanceChangeRecord);
        return R.ok();
    }
    @PostMapping("/page")
    @ApiOperation(value = "余额变更明细", tags = {"后台"})
    public R<IPage<BalanceChangeRecord>> page(@RequestBody BalanceQuery agentQuery) {
        return R.ok(balanceChangeRecordService.pageList(agentQuery));
    }
    /**
     * 用户分佣统计
     */
    @GetMapping("/commissionStatistics")
    @ApiOperation(value = "用户分佣统计", tags = "管理后台-财务统计-用户分佣统计")
    public R<CommissionStatistics> commissionStatistics(@ApiParam("页码") @RequestParam Integer pageNum,
                                                        @ApiParam("每一页数据大小") Integer pageSize,
                                                        BalanceChangeRecord balanceChangeRecord) {
        CommissionStatistics commissionStatistics1 = balanceChangeRecordService.commissionStatistics(Page.of(pageNum, pageSize), balanceChangeRecord);
        return R.ok(commissionStatistics1);
    }
    //
//    /**
//     * 导出用户分佣统计
//     */
    @GetMapping("/commissionExport")
    @ApiOperation(value = "用户分佣统计导出", tags = "管理后台-财务统计-用户分佣统计")
    public void commissionExport(HttpServletResponse response, BalanceChangeRecord balanceChangeRecord) {
        CommissionStatistics commissionStatistics1 = balanceChangeRecordService.commissionStatistics(Page.of(1, Integer.MAX_VALUE), balanceChangeRecord);
        IPage<BalanceChangeRecord> userPointPage = commissionStatistics1.getUserPointPage();
        List<BalanceChangeRecord> userPointList = userPointPage.getRecords();
        ExcelUtil<BalanceChangeRecord> util = new ExcelUtil<>(BalanceChangeRecord.class);
        util.exportExcel(response, userPointList, "用户分佣统计");
    }
    @GetMapping("/commissionExport")
    @ApiOperation(value = "用户分佣统计导出", tags = "管理后台-财务统计-用户分佣统计")
    public void commissionExport(HttpServletResponse response, BalanceChangeRecord balanceChangeRecord) {
        CommissionStatistics commissionStatistics1 = balanceChangeRecordService.commissionStatistics(Page.of(1, Integer.MAX_VALUE), balanceChangeRecord);
        IPage<BalanceChangeRecord> userPointPage = commissionStatistics1.getUserPointPage();
        List<BalanceChangeRecord> userPointList = userPointPage.getRecords();
        ExcelUtil<BalanceChangeRecord> util = new ExcelUtil<>(BalanceChangeRecord.class);
        util.exportExcel(response, userPointList, "用户分佣统计");
    }
    /**
     * 钱包统计
     */
    @GetMapping("/walletStatistics")
    @ApiOperation(value = "钱包统计", tags = "管理后台-财务统计-钱包统计")
    public R<WalletStatistics> walletStatistics(@ApiParam("页码") @RequestParam Integer pageNum,
                                                @ApiParam("每一页数据大小") Integer pageSize,
                                                BalanceChangeRecord balanceChangeRecord) {
        WalletStatistics walletStatistics = balanceChangeRecordService.walletStatistics(Page.of(pageNum, pageSize), balanceChangeRecord);
        return R.ok(walletStatistics);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java
@@ -6,9 +6,13 @@
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.account.vo.WalletStatistics;
public interface BalanceChangeRecordService extends IService<BalanceChangeRecord> {
    IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery);
    CommissionStatistics commissionStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord);
    WalletStatistics walletStatistics(Page<BalanceChangeRecord> of, BalanceChangeRecord balanceChangeRecord);
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
@@ -1,26 +1,27 @@
package com.ruoyi.account.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.AppUser;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.api.model.UserClickLog;
import com.ruoyi.account.api.model.WithdrawalRequests;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.mapper.BalanceChangeRecordMapper;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.other.api.domain.ShopPoint;
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.bean.BeanUtils;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import com.ruoyi.other.api.feignClient.ShopBalanceStatementClient;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
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;
@@ -28,7 +29,7 @@
@Service
public class BalanceChangeRecordServiceImpl extends ServiceImpl<BalanceChangeRecordMapper, BalanceChangeRecord> implements BalanceChangeRecordService {
    @Resource
    private AppUserService appUserService;
    private ShopBalanceStatementClient shopBalanceStatementClient;
    @Override
    public IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery) {
@@ -51,4 +52,87 @@
        IPage<BalanceChangeRecord> balanceChangeRecordIPage = this.baseMapper.queryCommissionStatistics(page, balanceChangeRecord);
        return new CommissionStatistics(totalCommission, balanceChangeRecordIPage);
    }
    @Override
    public WalletStatistics walletStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord) {
        ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
        shopBalanceStatement.setType(4);
        R<List<ShopBalanceStatement>> r;
        try {
            r = shopBalanceStatementClient.getList(shopBalanceStatement);
        } catch (Exception e) {
            log.error("获取店铺余额对账单列表时出错", e);
            return null;
        }
        if (R.isError(r)) {
            return null;
        }
        List<BalanceChangeRecord> balanceChangeRecordList = this.baseMapper.selectBalanceChangeRecordList(balanceChangeRecord);
        List<WalletStatisticsDetail> walletStatisticsDetailList = new ArrayList<>();
        for (BalanceChangeRecord changeRecord : balanceChangeRecordList) {
            WalletStatisticsDetail walletStatisticsDetail = new WalletStatisticsDetail();
            BeanUtils.copyBeanProp(walletStatisticsDetail, changeRecord);
            walletStatisticsDetailList.add(walletStatisticsDetail);
        }
        walletStatisticsDetailList.addAll(r.getData().stream().map(this::createWalletStatisticsDetail).collect(Collectors.toList()));
        // 按时间排序(倒序)
        walletStatisticsDetailList.sort(Comparator.comparing(WalletStatisticsDetail::getCreateTime).reversed());
        long current = page.getCurrent();
        long size = page.getSize();
        int fromIndex = (int) (current - 1);
        int toIndex = (int) Math.min(fromIndex + size, walletStatisticsDetailList.size());
        if (fromIndex < 0 || toIndex > walletStatisticsDetailList.size()) {
            throw new ServiceException("页面参数无效");
        }
        List<WalletStatisticsDetail> walletStatisticsDetailList2 = walletStatisticsDetailList.subList(fromIndex, toIndex);
        Map<Integer, BigDecimal> shopCommissionMap = walletStatisticsDetailList.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();
        Page<WalletStatisticsDetail> page1 = new Page<>();
        page1.setRecords(walletStatisticsDetailList2);
        page1.setTotal(walletStatisticsDetailList.size());
        page1.setCurrent(current);
        page1.setSize(size);
        walletStatistics.setPage(page1);
        walletStatistics.setTotalRecharge(totalRecharge);
        walletStatistics.setTotalWithdraw(totalWithdraw);
        walletStatistics.setTotalShopWithdraw(totalShopWithdraw);
        return walletStatistics;
    }
    private WalletStatisticsDetail createWalletStatisticsDetail(ShopBalanceStatement item) {
        WalletStatisticsDetail walletStatisticsDetail = new WalletStatisticsDetail();
        walletStatisticsDetail.setShopName(item.getShopName());
        walletStatisticsDetail.setUserName(item.getShopManagerName());
        walletStatisticsDetail.setUserPhone(item.getPhone());
        walletStatisticsDetail.setChangeType(4);
        walletStatisticsDetail.setCreateTime(item.getCreateTime());
        walletStatisticsDetail.setChangeAmount(item.getVariableAmount());
        return walletStatisticsDetail;
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatistics.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.account.vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class WalletStatistics {
    /**
     * 用户充值总金额
     */
    private BigDecimal totalRecharge;
    /**
     * 用户提现总金额
     */
    private BigDecimal totalWithdraw;
    /**
     * 门店提现总金额
     */
    private BigDecimal totalShopWithdraw;
    private IPage<WalletStatisticsDetail> page;
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java
New file
@@ -0,0 +1,49 @@
package com.ruoyi.account.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class WalletStatisticsDetail {
    /**
     * 门店名称
     */
    @ApiModelProperty(value = "门店名称")
    private String shopName;
    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "用户姓名")
    private String userName;
    /**
     * 联系电话
     */
    @ApiModelProperty(value = "联系电话")
    private String userPhone;
    @ApiModelProperty("类型:1充值2提现3红包4分佣5商城购物6订单取消回退7门店提现")
    @Excel(name = "变更类型", readConverterExp = "1=充值,2=提现,3=红包,4=分佣,5=商城购物,6=订单取消回退,7=门店提现")
    private Integer changeType;
    /**
     * 变更时间
     */
    @ApiModelProperty(value = "变更时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * 变更数量
     */
    @ApiModelProperty(value = "变更数量")
    private BigDecimal changeAmount;
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java
@@ -8,6 +8,7 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import com.ruoyi.other.mapper.ShopBalanceStatementMapper;
import com.ruoyi.other.service.ShopBalanceStatementService;
import com.ruoyi.other.vo.ShopCommissionStatisticsVO;
import io.swagger.annotations.Api;
@@ -33,6 +34,8 @@
public class ShopBalanceStatementController {
    @Resource
    private ShopBalanceStatementService shopBalanceStatementService;
    @Resource
    private ShopBalanceStatementMapper shopBalanceStatementMapper;
    /**
     * 门店分佣统计
@@ -62,7 +65,7 @@
    @PostMapping("/getList")
    public R<List<ShopBalanceStatement>> getList(@RequestBody ShopBalanceStatement shopBalanceStatement){
        return R.ok();
        return R.ok(shopBalanceStatementMapper.selectShopBalanceStatementList(shopBalanceStatement));
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java
@@ -22,5 +22,4 @@
    List<ShopBalanceStatement> selectShopBalanceStatementList(@Param("bs") ShopBalanceStatement shopBalanceStatement);
}