ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/BalanceChangeRecord.java
@@ -31,6 +31,9 @@ @ApiModelProperty("用户id") private Long appUserId; @ApiModelProperty("vip等级id") private Integer vipId; @ApiModelProperty("订单id") private Long orderId; ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopBalanceStatementClientFallbackFactory.java
@@ -6,6 +6,7 @@ import com.ruoyi.other.api.feignClient.ShopBalanceStatementClient; import org.springframework.cloud.openfeign.FallbackFactory; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -27,6 +28,11 @@ public R<List<ShopBalanceStatement>> getShopBalanceStatementList(Collection<Integer> types, Long objectId) { return R.fail("获取门店余额流水失败:" + cause.getMessage()); } @Override public R<List<ShopBalanceStatement>> getShopBalanceStatementList2(Integer type, LocalDateTime date) { return R.fail(); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopBalanceStatementClient.java
@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -35,4 +36,8 @@ */ @PostMapping("/shop-balance-statement/getShopBalanceStatementList") R<List<ShopBalanceStatement>> getShopBalanceStatementList(@RequestParam("types") Collection<Integer> types, @RequestParam(value = "objectId",required = false) Long objectId); @PostMapping("/shop-balance-statement/getShopBalanceStatementList2") R<List<ShopBalanceStatement>> getShopBalanceStatementList2(@RequestParam("type") Integer type, @RequestParam(value = "date") LocalDateTime date); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -52,8 +52,10 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import com.ruoyi.account.vo.*; import com.ruoyi.common.core.web.controller.BaseController; @@ -106,6 +108,8 @@ private ShopBalanceStatementClient shopBalanceStatementClient; @Resource private UserCancellationLogService userCancellationLogService; @Resource private BalanceChangeRecordService balanceChangeRecordService; @ResponseBody @@ -835,6 +839,69 @@ commissionDetail.setCommissionDateList(commissionDateList); return R.ok(commissionDetail); } public R<CommissionDetail> commissionDetail2(CommissionDetail cd) { if (cd.getStartTime() == null || cd.getEndTime() == null) { return R.fail("请选择时间"); } if (cd.getStartTime().isAfter(cd.getEndTime())) { return R.fail("开始时间不能大于结束时间"); } Map<String, Map<Integer, BigDecimal>> dailyVipCommissions = new TreeMap<>(); getDatesBetween(cd.getStartTime(), cd.getEndTime()).forEach(date -> { for (int i = 1; i < 8; i++){ List<BalanceChangeRecord> list = balanceChangeRecordService.list(new LambdaQueryWrapper<BalanceChangeRecord>() .eq(BalanceChangeRecord::getCreateTime, date) .eq(BalanceChangeRecord::getChangeType,4) .eq(BalanceChangeRecord::getVipId, i)); BigDecimal reduce = list.stream().map(BalanceChangeRecord::getChangeAmount).reduce(BigDecimal.ZERO, BigDecimal::add); String dateKey = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); dailyVipCommissions.computeIfAbsent(dateKey, k -> new HashMap<>()) .merge(i, reduce, BigDecimal::add); } for (int i = 1; i < 4; i++){ R<List<ShopBalanceStatement>> r = shopBalanceStatementClient.getShopBalanceStatementList2(i, date); if (!CollectionUtils.isEmpty(r.getData())){ List<ShopBalanceStatement> list = r.getData(); BigDecimal reduce = list.stream().map(ShopBalanceStatement::getVariableAmount).reduce(BigDecimal.ZERO, BigDecimal::add); String dateKey = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); int type; if (i == 1){ type = 8; }else if (i == 2){ type = 9; }else { type = 10; } dailyVipCommissions.computeIfAbsent(dateKey, k -> new HashMap<>()) .merge(type, reduce, BigDecimal::add); } } }); return null; } /** * 获取指定时间段内每一天的列表 * * @param startDate 开始日期时间 * @param endDate 结束日期时间 * @return 包含每天日期时间的列表 */ private static List<LocalDateTime> getDatesBetween(LocalDateTime startDate, LocalDateTime endDate) { // 计算开始日期和结束日期之间的天数差(忽略时间部分) long daysBetween = ChronoUnit.DAYS.between(startDate.toLocalDate(), endDate.toLocalDate()); // 使用Stream.iterate从开始日期开始迭代,每次增加一天,直到达到天数差+1 return Stream.iterate(startDate, date -> date.plus(1, ChronoUnit.DAYS)) .limit(daysBetween + 1) .collect(Collectors.toList()); } /** ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
@@ -187,6 +187,7 @@ //流水 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(balanceChangeRecord.getId()); balanceChangeRecord.setChangeType(1); balanceChangeRecord.setBeforeAmount(balance); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -134,6 +134,7 @@ //添加变动明细 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(withdrawal.getId()); balanceChangeRecord.setChangeType(2); balanceChangeRecord.setBeforeAmount(balance); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/WithdrawalRequestsServiceImpl.java
@@ -109,6 +109,7 @@ //添加变动明细 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(withdrawalRequests.getId()); balanceChangeRecord.setChangeType(2); balanceChangeRecord.setBeforeAmount(balance); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -287,8 +287,10 @@ Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserClient.getSysUser(userid).getData(); List<Order> orderList = orderService.list(new LambdaQueryWrapper<Order>().eq(sysUser.getRoleType() == 2, Order::getShopId, sysUser.getObjectId()) .between(Order::getCreateTime, LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); List<Order> orderList = orderService.list(new LambdaQueryWrapper<Order>() .eq(sysUser.getRoleType() == 2, Order::getShopId, sysUser.getObjectId()) .between(Order::getCreateTime, LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) .orderByAsc(Order::getCreateTime)); Map<String, List<Order>> map = orderList.stream().collect(Collectors.groupingBy(item -> item.getCreateTime() ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -174,6 +174,7 @@ if(!inviteUser.getBalance().equals(balance)){ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(inviteUser.getId()); balanceChangeRecord.setVipId(inviteUser.getVipId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(4); balanceChangeRecord.setBeforeAmount(balance); @@ -232,6 +233,7 @@ if(!superiorLeader.getBalance().equals(balance)){ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(superiorLeader.getId()); balanceChangeRecord.setVipId(superiorLeader.getVipId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(4); balanceChangeRecord.setBeforeAmount(balance); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -449,6 +449,7 @@ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setAppUserId(order.getAppUserId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setChangeType(6); balanceChangeRecord.setBeforeAmount(balance); balanceChangeRecord.setChangeAmount(paymentAmount); @@ -529,6 +530,7 @@ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setAppUserId(order.getAppUserId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setChangeType(6); balanceChangeRecord.setBeforeAmount(balance); balanceChangeRecord.setChangeAmount(expressAmount); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -1239,6 +1239,7 @@ //构建余额明细变动记录 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(5); balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney)); @@ -1362,6 +1363,7 @@ //构建余额明细变动记录 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setAppUserId(appUser.getId()); balanceChangeRecord.setVipId(appUser.getVipId()); balanceChangeRecord.setOrderId(order.getId()); balanceChangeRecord.setChangeType(5); balanceChangeRecord.setBeforeAmount(balance.add(expressFee)); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java
@@ -25,6 +25,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.List; @@ -171,5 +172,14 @@ .in(types !=null && !types.isEmpty(),ShopBalanceStatement::getType, types)); return R.ok(list); } @PostMapping("/getShopBalanceStatementList2") public R<List<ShopBalanceStatement>> getShopBalanceStatementList2(@RequestParam("type") Integer type, @RequestParam(value = "date") LocalDateTime date){ List<ShopBalanceStatement> list = shopBalanceStatementService.list(new LambdaQueryWrapper<ShopBalanceStatement>() .eq(ShopBalanceStatement::getType, type) .in(ShopBalanceStatement::getCreateTime, date)); return R.ok(list); } }