1
phpcjl
2024-12-18 83751617ac342e4168cb714106bc009e3f25f99c
1
8个文件已修改
3个文件已添加
364 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/AppUser.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/excel/BalanceChangeRecordEX.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopCommissionStatisticsVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopPointMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/AppUser.java
@@ -171,6 +171,22 @@
    @TableField("total_distribution_amount")
    private BigDecimal totalDistributionAmount;
    @ApiModelProperty(value = "拉新人积分总数")
    @TableField("total_invite_point")
    private Integer totalInvitePoint;
    @ApiModelProperty(value = "注册积分总数")
    @TableField("total_register_point")
    private Integer totalRegisterPoint;
    @ApiModelProperty(value = "做工积分总数")
    @TableField("total_work_point")
    private Integer totalWorkPoint;
    @ApiModelProperty(value = "业绩积分总数")
    @TableField("total_performance_point")
    private Integer totalPerformancePoint;
    @ApiModelProperty(value = "剩余积分")
    @TableField("lave_point")
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -36,8 +37,9 @@
    @TableField("shop_id")
    private Integer shopId;
    @ApiModelProperty(value = "变动类型(1=返佣,2=提现)")
    @ApiModelProperty(value = "变动类型(1=门店分佣,2=下级门店分佣,3=门店服务费)")
    @TableField("type")
    @Excel(name = "变更类型",readConverterExp = "1=门店分佣,2=下级门店分佣,3=门店服务费")
    private Integer type;
    @ApiModelProperty(value = "历史余额")
@@ -48,8 +50,14 @@
    @TableField("variable_amount")
    private BigDecimal variableAmount;
    @ApiModelProperty(value = "变动后余额")
    @TableField("balance")
    @Excel(name = "变更后数量")
    private BigDecimal balance;
    @ApiModelProperty(value = "变动时间")
    @TableField("create_time")
    @Excel(name = "变更时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "变动用户id")
@@ -60,5 +68,18 @@
    @TableField("object_id")
    private Long objectId;
    @ApiModelProperty(value = "门店名称")
    @TableField(exist = false)
    @Excel(name = "门店名称")
    private String shopName;
    @ApiModelProperty(value = "店长名称")
    @TableField(exist = false)
    @Excel(name = "店长名称")
    private String shopManagerName;
    @ApiModelProperty(value = "联系电话")
    @TableField(exist = false)
    @Excel(name = "联系电话")
    private String phone;
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -3,17 +3,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.api.model.UserClickLog;
import com.ruoyi.account.api.model.UserPoint;
import com.ruoyi.account.dto.BalanceQuery;
import com.ruoyi.account.dto.UserCancelQuery;
import com.ruoyi.account.excel.UserPointEx;
import com.ruoyi.account.excel.BalanceChangeRecordEX;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.vo.CommissionStatistics;
import com.ruoyi.account.vo.UserPointStatistics;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -52,77 +49,63 @@
        return R.ok(balanceChangeRecordService.pageList(agentQuery));
    }
//    /**
//     * 用户分佣统计
//     */
//    @GetMapping("/commissionStatistics")
//    @ApiOperation(value = "用户分佣统计", tags = "管理后台-财务统计-用户分佣统计")
//    public R<CommissionStatistics> commissionStatistics(UserPoint userPoint) {
//        userPoint.setType(2);
//        IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(userPoint.getPageNum(), userPoint.getPageSize()), userPoint);
//        UserPointStatistics statistics = userPointService.getStatistics(userPoint);
//        CommissionStatistics commissionStatistics = new CommissionStatistics();
//        commissionStatistics.setStatistics(statistics);
//        commissionStatistics.setUserPointPage(userPointPage);
//        return R.ok(commissionStatistics);
//    }
    /**
     * 用户分佣统计
     */
    @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, UserPoint userPoint) {
//        userPoint.setType(2);
//        IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(1, Integer.MAX_VALUE), userPoint);
//        List<UserPoint> userPointList = userPointPage.getRecords();
//        List<UserPointEx> userPointExList = new ArrayList<>();
//        for (UserPoint point : userPointList) {
//            UserPointEx userPointEx = new UserPointEx();
//            userPointEx.setUserName(point.getUserName());
//            userPointEx.setPhone(point.getPhone());
//            userPointEx.setChangeTime(point.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//            userPointEx.setChangeNum(point.getVariablePoint().toString());
//            Integer type = point.getType();
//            switch (type) {
//                case 1:
//                    userPointEx.setType("消费积分");
//                    break;
//                case 2:
//                    userPointEx.setType("返佣积分");
//                    break;
//                case 3:
//                    userPointEx.setType("拉新人积分");
//                    break;
//                case 4:
//                    userPointEx.setType("兑换商品");
//                    break;
//                case 5:
//                    userPointEx.setType("门店业绩");
//                    break;
//                case 6:
//                    userPointEx.setType("门店返佣");
//                    break;
//                case 7:
//                    userPointEx.setType("技师业绩");
//                    break;
//                case 8:
//                    userPointEx.setType("转赠积分");
//                    break;
//                case 9:
//                    userPointEx.setType("做工积分");
//                    break;
//                case 10:
//                    userPointEx.setType("注册积分");
//                    break;
//                default:
//                    userPointEx.setType("未知积分");
//            }
//            userPointExList.add(userPointEx);
//        }
//        ExcelUtil<UserPointEx> util = new ExcelUtil<>(UserPointEx.class);
//        util.exportExcel(response, userPointExList, "用户分佣统计");
//    }
    @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();
        List<BalanceChangeRecordEX> userPointExList = new ArrayList<>();
        for (BalanceChangeRecord balanceChangeRecord1 : userPointList) {
            BalanceChangeRecordEX balanceChangeRecordEX = new BalanceChangeRecordEX();
            balanceChangeRecordEX.setUserName(balanceChangeRecord1.getUserName());
            balanceChangeRecordEX.setPhone(balanceChangeRecord1.getUserPhone());
            balanceChangeRecordEX.setChangeTime(balanceChangeRecord1.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            balanceChangeRecordEX.setChangeNum(balanceChangeRecord1.getAfterAmount().toString());
            Integer type = balanceChangeRecord1.getChangeType();
            // 类型:1充值2提现3红包4分佣5商城购物6订单取消回退
            switch (type) {
                case 1:
                    balanceChangeRecordEX.setType("充值");
                    break;
                case 2:
                    balanceChangeRecordEX.setType("提现");
                    break;
                case 3:
                    balanceChangeRecordEX.setType("红包");
                    break;
                case 4:
                    balanceChangeRecordEX.setType("分佣");
                    break;
                case 5:
                    balanceChangeRecordEX.setType("商城购物");
                    break;
                case 6:
                    balanceChangeRecordEX.setType("订单取消回退");
                    break;
                default:
                    balanceChangeRecordEX.setType("未知积分");
            }
            userPointExList.add(balanceChangeRecordEX);
        }
        ExcelUtil<BalanceChangeRecordEX> util = new ExcelUtil<>(BalanceChangeRecordEX.class);
        util.exportExcel(response, userPointExList, "用户分佣统计");
    }
    
    
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/excel/BalanceChangeRecordEX.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.account.excel;
import com.ruoyi.common.core.annotation.Excel;
import lombok.Data;
@Data
public class BalanceChangeRecordEX {
    @Excel(name = "用户名称")
    private String userName;
    @Excel(name = "联系电话")
    private String phone;
    @Excel(name = "变更类型")
    private String type;
    @Excel(name = "变更时间")
    private String changeTime;
    @Excel(name = "变更数量")
    private String changeNum;
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java
@@ -1,8 +1,23 @@
package com.ruoyi.other.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import com.ruoyi.other.service.ShopBalanceStatementService;
import com.ruoyi.other.vo.ShopCommissionStatisticsVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
@@ -14,7 +29,34 @@
 */
@RestController
@RequestMapping("/shop-balance-statement")
@Api(tags = "管理后台-财务统计-门店分佣统计")
public class ShopBalanceStatementController {
    @Resource
    private ShopBalanceStatementService shopBalanceStatementService;
    /**
     * 门店分佣统计
     */
    @GetMapping("/commissionStatistics")
    @ApiOperation("门店分佣统计")
    public R<ShopCommissionStatisticsVO> shopCommissionStatistics(@ApiParam("页码") @RequestParam Integer pageNum,
                                                                  @ApiParam("每一页数据大小") Integer pageSize,
                                                                  ShopBalanceStatement shopBalanceStatement){
        ShopCommissionStatisticsVO shopCommissionStatisticsVO = shopBalanceStatementService.shopCommissionStatistics(Page.of(pageNum, pageSize), shopBalanceStatement);
        return R.ok(shopCommissionStatisticsVO);
    }
    /**
     * 导出门店分佣统计
     */
    @GetMapping("/export")
    @ApiOperation("导出门店分佣统计")
    public void export(HttpServletResponse response , ShopBalanceStatement shopBalanceStatement){
        ShopCommissionStatisticsVO shopCommissionStatisticsVO = shopBalanceStatementService.shopCommissionStatistics(Page.of(1, Integer.MAX_VALUE), shopBalanceStatement);
        IPage<ShopBalanceStatement> statementIPage = shopCommissionStatisticsVO.getStatementIPage();
        ExcelUtil<ShopBalanceStatement> util = new ExcelUtil<>(ShopBalanceStatement.class);
        util.exportExcel(response, statementIPage.getRecords(), "用户积分统计");
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java
@@ -1,7 +1,11 @@
package com.ruoyi.other.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -12,5 +16,5 @@
 * @since 2024-11-20
 */
public interface ShopBalanceStatementMapper extends BaseMapper<ShopBalanceStatement> {
    List<ShopBalanceStatement> findLatestChangeByType(ShopBalanceStatement shopBalanceStatement);
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java
@@ -1,7 +1,9 @@
package com.ruoyi.other.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import com.ruoyi.other.vo.ShopCommissionStatisticsVO;
/**
 * <p>
@@ -12,5 +14,5 @@
 * @since 2024-11-20
 */
public interface ShopBalanceStatementService extends IService<ShopBalanceStatement> {
    ShopCommissionStatisticsVO shopCommissionStatistics(IPage<ShopBalanceStatement> page, ShopBalanceStatement shopBalanceStatement);
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java
@@ -1,10 +1,19 @@
package com.ruoyi.other.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.other.api.domain.Shop;
import com.ruoyi.other.mapper.ShopBalanceStatementMapper;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import com.ruoyi.other.service.ShopBalanceStatementService;
import com.ruoyi.other.service.ShopService;
import com.ruoyi.other.vo.ShopCommissionStatisticsVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -16,5 +25,45 @@
 */
@Service
public class ShopBalanceStatementServiceImpl extends ServiceImpl<ShopBalanceStatementMapper, ShopBalanceStatement> implements ShopBalanceStatementService {
    @Resource
    private ShopBalanceStatementMapper shopBalanceStatementMapper;
    @Resource
    private ShopService shopService;
    @Override
    public ShopCommissionStatisticsVO shopCommissionStatistics(IPage<ShopBalanceStatement> page, ShopBalanceStatement shopBalanceStatement) {
        List<ShopBalanceStatement> latestChangeByType = shopBalanceStatementMapper.findLatestChangeByType(shopBalanceStatement);
        ShopCommissionStatisticsVO shopCommissionStatisticsVO = new ShopCommissionStatisticsVO();
        for (ShopBalanceStatement sp : latestChangeByType) {
            switch (sp.getType()) {
                case 1:
                    shopCommissionStatisticsVO.setTotalCommission(sp.getBalance());
                    break;
                case 2:
                    shopCommissionStatisticsVO.setTotalSubordinateCommission(sp.getBalance());
                    break;
                case 3:
                    shopCommissionStatisticsVO.setTotalServiceCharge(sp.getBalance());
                    break;
           }
        }
        shopCommissionStatisticsVO.setTotalAmount(shopCommissionStatisticsVO.getTotalCommission()
                .add(shopCommissionStatisticsVO.getTotalSubordinateCommission())
                .add(shopCommissionStatisticsVO.getTotalServiceCharge()));
        IPage<ShopBalanceStatement> statementIPage = page(page, new LambdaQueryWrapper<ShopBalanceStatement>());
        List<ShopBalanceStatement> records = statementIPage.getRecords();
        List<Integer> shopIds = records.stream().map(ShopBalanceStatement::getShopId).collect(Collectors.toList());
        List<Shop> shopList = shopService.listByIds(shopIds);
        records.forEach(st -> {
            shopList.stream().filter(shop -> shop.getId().equals(st.getShopId())).findFirst().ifPresent(shop -> {
                st.setShopName(shop.getName());
                st.setShopManagerName(shop.getShopManager());
                st.setPhone(shop.getPhone());
            });
        });
        shopCommissionStatisticsVO.setStatementIPage(statementIPage);
        return shopCommissionStatisticsVO;
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopCommissionStatisticsVO.java
New file
@@ -0,0 +1,40 @@
package com.ruoyi.other.vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.other.api.domain.ShopBalanceStatement;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel("门店分佣统计")
public class ShopCommissionStatisticsVO {
    /**
     * 总金额
     */
    @ApiModelProperty(value = "总金额")
    private BigDecimal totalAmount;
    /**
     * 分佣总金额
     */
    @ApiModelProperty(value = "分佣总金额")
    private BigDecimal totalCommission;
    /**
     * 服务费总计
     */
    @ApiModelProperty(value = "服务费总计")
    private BigDecimal totalServiceCharge;
    /**
     * 下级门店分佣总金额
     */
    @ApiModelProperty(value = "下级门店分佣总金额")
    private BigDecimal totalSubordinateCommission;
    private IPage<ShopBalanceStatement> statementIPage;
}
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml
New file
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.other.mapper.ShopBalanceStatementMapper">
    <select id="findLatestChangeByType" resultType="com.ruoyi.other.api.domain.ShopBalanceStatement">
        SELECT
            id,
            shop_id,
            type,
            historical_balance,
            variable_amount,
            balance,
            create_time,
            create_user_id,
            object_id
        FROM
            (
                SELECT
                    id,
                    shop_id,
                    type,
                    historical_balance,
                    variable_amount,
                    balance,
                    create_time,
                    create_user_id,
                    object_id,
                    ROW_NUMBER() OVER ( PARTITION BY type, create_user_id ORDER BY create_time DESC ) AS rn
                FROM
                    t_shop_balance_statement
            ) AS subquery
    </select>
</mapper>
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopPointMapper.xml
@@ -23,7 +23,7 @@
                    create_time,
                    create_user_id,
                    object_id,
                    ROW_NUMBER() OVER ( PARTITION BY type ORDER BY create_time DESC ) AS rn
                    ROW_NUMBER() OVER ( PARTITION BY type,create_user_id ORDER BY create_time DESC ) AS rn
                FROM
                    t_shop_point