ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java
@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; @@ -61,4 +63,16 @@ @ApiModelProperty("消费金额") private BigDecimal amount; @ApiModelProperty(value = "开始时间") @TableField(exist = false) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; @ApiModelProperty(value = "结束时间") @TableField(exist = false) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -1,19 +1,26 @@ package com.ruoyi.account.controller; 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.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 org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; /** * @author zhibing.pu @@ -45,6 +52,78 @@ 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("/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, "用户分佣统计"); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.account.excel.UserPointEx; import com.ruoyi.account.service.AppUserService; import com.ruoyi.account.service.UserPointService; import com.ruoyi.account.vo.CommissionStatistics; import com.ruoyi.account.vo.UserPointDetailVO; import com.ruoyi.account.vo.UserPointStatistics; import com.ruoyi.account.vo.UserPointVO; @@ -30,8 +28,6 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; /** @@ -145,78 +141,6 @@ List<UserPoint> userPointList = userPointPage.getRecords(); ExcelUtil<UserPoint> util = new ExcelUtil<>(UserPoint.class); util.exportExcel(response, userPointList, "用户积分统计"); } /** * 用户分佣统计 */ @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("/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, "用户分佣统计"); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java
@@ -1,10 +1,14 @@ package com.ruoyi.account.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.account.dto.BalanceQuery; import com.ruoyi.account.vo.CommissionStatistics; public interface BalanceChangeRecordService extends IService<BalanceChangeRecord> { IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery); CommissionStatistics commissionStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
@@ -1,17 +1,32 @@ 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 org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @Service public class BalanceChangeRecordServiceImpl extends ServiceImpl<BalanceChangeRecordMapper, BalanceChangeRecord> implements BalanceChangeRecordService { @Resource private AppUserService appUserService; @Override public IPage<BalanceChangeRecord> pageList(BalanceQuery agentQuery) { Page<BalanceChangeRecord> page = new Page<>(); @@ -20,4 +35,28 @@ IPage<BalanceChangeRecord> shopIPage = this.baseMapper.pageList(page, agentQuery); return shopIPage; } @Override public CommissionStatistics commissionStatistics(Page<BalanceChangeRecord> page, BalanceChangeRecord balanceChangeRecord) { List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>() .like(StringUtils.isNotEmpty(balanceChangeRecord.getUserName()), AppUser::getName, balanceChangeRecord.getUserName()) .like(StringUtils.isNotEmpty(balanceChangeRecord.getUserPhone()), AppUser::getPhone, balanceChangeRecord.getUserPhone())); if (CollectionUtils.isEmpty(appUserList)){ return new CommissionStatistics(); } List<Long> appUserIds = appUserList.stream().map(AppUser::getId).collect(Collectors.toList()); BigDecimal totalCommission = appUserList.stream() .map(AppUser::getTotalDistributionAmount) .reduce(BigDecimal.ZERO, BigDecimal::add); Page<BalanceChangeRecord> changeRecordPage = page(page, new LambdaQueryWrapper<BalanceChangeRecord>() .in(BalanceChangeRecord::getAppUserId, appUserIds) .between(balanceChangeRecord.getStartTime() != null && balanceChangeRecord.getEndTime() != null, BalanceChangeRecord::getCreateTime, balanceChangeRecord.getStartTime(), balanceChangeRecord.getEndTime())); return new CommissionStatistics(totalCommission, changeRecordPage); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -218,10 +218,14 @@ List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>() .eq(AppUser::getPhone, userPoint.getPhone()) .like(AppUser::getName, userPoint.getUserName())); if (appUserList.isEmpty()){ return page; } List<Long> userIds = appUserList.stream().map(AppUser::getId).collect(Collectors.toList()); Page<UserPoint> userPointPage = page(page, new LambdaQueryWrapper<UserPoint>() .in(!CollectionUtils.isEmpty(userIds), UserPoint::getAppUserId, userIds) .in(UserPoint::getAppUserId, userIds) .eq(userPoint.getType() != null, UserPoint::getType, userPoint.getType()) .between( userPoint.getStartTime()!= null && userPoint.getEndTime() !=null,UserPoint::getCreateTime, userPoint.getStartTime(), userPoint.getEndTime()) .orderByDesc(UserPoint::getCreateTime)); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java
@@ -1,18 +1,27 @@ package com.ruoyi.account.vo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.account.api.model.UserPoint; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.model.BalanceChangeRecord; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @ApiModel(description = "用户分佣统计响应") @Data public class CommissionStatistics { @ApiModelProperty(value = "统计数据", required = true) private UserPointStatistics statistics; @ApiModelProperty(value = "分佣总计") private Integer totalCommission; @ApiModelProperty(value = "分页数据", required = true) private IPage<UserPoint> userPointPage; private IPage<BalanceChangeRecord> userPointPage; public CommissionStatistics() { } public CommissionStatistics(BigDecimal totalCommission, Page<BalanceChangeRecord> changeRecordPage) { } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java
@@ -40,17 +40,18 @@ String shopName = shopPoint.getShopName(); String phone = shopPoint.getPhone(); String shopLeaderName = shopPoint.getShopLeaderName(); if (StringUtils.isNotEmpty(shopName) || StringUtils.isNotEmpty(phone) || StringUtils.isNotEmpty(shopLeaderName)) { List<Integer> shopIds = shopService.listObjs(new LambdaQueryWrapper<Shop>() .select(Shop::getId) .like(StringUtils.isNotEmpty(shopName), Shop::getName, shopName) .like(StringUtils.isNotEmpty(phone), Shop::getPhone, phone) .like(StringUtils.isNotEmpty(shopLeaderName), Shop::getShopManager, shopLeaderName)) .stream().map(o -> (Integer) o).collect(Collectors.toList()); shopPoint.setShopIds(shopIds); List<Integer> shopIds = shopService.listObjs(new LambdaQueryWrapper<Shop>() .select(Shop::getId) .like(StringUtils.isNotEmpty(shopName), Shop::getName, shopName) .like(StringUtils.isNotEmpty(phone), Shop::getPhone, phone) .like(StringUtils.isNotEmpty(shopLeaderName), Shop::getShopManager, shopLeaderName)) .stream().map(o -> (Integer) o).collect(Collectors.toList()); if (CollectionUtils.isEmpty(shopIds)) { return new ShopPointStatistics(); } shopPoint.setShopIds(shopIds); ShopPointStatistics shopPointStatistics = new ShopPointStatistics(); List<ShopPoint> latestChangeByType = shopPointMapper.findLatestChangeByType(shopPoint);