From f6c948f093a35f20e8fc94b5d0f893c5647c41b7 Mon Sep 17 00:00:00 2001 From: phpcjl <phpcjl@gmail.com> Date: 星期二, 17 十二月 2024 14:57:47 +0800 Subject: [PATCH] 1 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java | 6 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java | 87 ++++++++++++++++ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java | 14 ++ ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java | 19 ++- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java | 76 --------------- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java | 17 ++ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java | 39 +++++++ 8 files changed, 168 insertions(+), 94 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java index f3d999c..1b8ccc4 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java +++ b/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; + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java index 3ed2f97..7750928 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java +++ b/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, "用户分佣统计"); + } + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java index 3b282f2..adff1d8 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java +++ b/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, "用户分佣统计"); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java index 4a8a9d3..a1cf54f 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/BalanceChangeRecordService.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java index 8291e71..828b2a5 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java +++ b/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); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java index 5751140..61c0ede 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java +++ b/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)); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java index 720a03b..7233cd7 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java +++ b/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) { + + } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java index 9e2354a..cfc5e09 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopPointServiceImpl.java +++ b/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); -- Gitblit v1.7.1