| | |
| | | import com.ruoyi.order.feignClient.RemoteOrderGoodsClient; |
| | | import com.ruoyi.order.model.Order; |
| | | import com.ruoyi.other.api.domain.Shop; |
| | | import com.ruoyi.other.api.domain.ShopBalanceStatement; |
| | | import com.ruoyi.other.api.domain.VipSetting; |
| | | import com.ruoyi.other.api.factory.ShopBalanceStatementClientFallbackFactory; |
| | | import com.ruoyi.other.api.feignClient.ShopBalanceStatementClient; |
| | | import com.ruoyi.other.api.feignClient.ShopClient; |
| | | import com.ruoyi.other.api.feignClient.StoreClient; |
| | | import com.ruoyi.other.api.feignClient.VipSettingClient; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import io.swagger.annotations.*; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | |
| | | 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; |
| | |
| | | private SysUserClient sysUserClient; |
| | | @Resource |
| | | private OrderClient orderClient; |
| | | @Resource |
| | | private ShopBalanceStatementClient shopBalanceStatementClient; |
| | | @Resource |
| | | private UserCancellationLogService userCancellationLogService; |
| | | @Resource |
| | | private BalanceChangeRecordService balanceChangeRecordService; |
| | | |
| | | |
| | | @ResponseBody |
| | |
| | | return R.ok(user); |
| | | } |
| | | |
| | | @Resource |
| | | private UserCancellationLogService userCancellationLogService; |
| | | |
| | | |
| | | @ResponseBody |
| | | @GetMapping("/unregis") |
| | |
| | | if (user.getShopId() != null) { |
| | | R<Shop> storeById = shopClient.getShopById(user.getShopId()); |
| | | if (storeById.getData() != null) { |
| | | user.setShopName(storeById.getData().getName()); |
| | | Shop shop = storeById.getData(); |
| | | user.setShopName(shop.getName()); |
| | | } |
| | | } |
| | | Long count1 = appUserService.lambdaQuery().eq(AppUser::getVipId, 1).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count(); |
| | |
| | | @GetMapping("/select") |
| | | @ApiOperation(value = "用户列表-查询绑定人", tags = {"管理后台"}) |
| | | public R<AppUser> select(String phone) { |
| | | AppUser byId = appUserService.lambdaQuery().eq(AppUser::getPhone, phone).one(); |
| | | AppUser byId = appUserService.lambdaQuery() |
| | | .eq(AppUser::getPhone, phone) |
| | | .eq(AppUser::getDelFlag,0) |
| | | .eq(AppUser::getStatus,1) |
| | | .one(); |
| | | if (byId == null) { |
| | | return R.fail("搜索失败,手机号错误。"); |
| | | } |
| | |
| | | */ |
| | | @GetMapping("/commissionDetail") |
| | | @ApiOperation(value = "分佣统计", tags = "管理后台-首页统计") |
| | | public R<CommissionDetail> commissionDetail(CommissionDetail commissionDetail) { |
| | | public R<CommissionDetail> commissionDetail(CommissionDetail cd) { |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userid).getData(); |
| | | LambdaQueryWrapper<AppUser> queryWrapper = new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0); |
| | | if(sysUser.getRoleType() == 2){ |
| | | queryWrapper.eq(AppUser::getShopId, sysUser.getObjectId()); |
| | | } |
| | | LocalDateTime startTime = cd.getStartTime(); |
| | | LocalDateTime endTime = cd.getEndTime(); |
| | | queryWrapper.ge(null != startTime, AppUser::getCreateTime, startTime); |
| | | queryWrapper.le(null != endTime, AppUser::getCreateTime, endTime); |
| | | queryWrapper.orderByAsc(AppUser::getCreateTime); |
| | |
| | | totalUserCommission = totalUserCommission.add(shop.getGiveawayMoney()); |
| | | } |
| | | |
| | | R<List<ShopBalanceStatement>> r = shopBalanceStatementClient.getShopBalanceStatementList(Arrays.asList(1, 2, 3), null); |
| | | List<ShopBalanceStatement> data1 = r.getData(); |
| | | if (!CollectionUtils.isEmpty(data1)){ |
| | | for (ShopBalanceStatement shopBalanceStatement : data1) { |
| | | String dateKey = shopBalanceStatement.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | Integer type = shopBalanceStatement.getType(); |
| | | if (type == 1){ |
| | | type = 8; |
| | | }else if (type == 2){ |
| | | type = 9; |
| | | }else { |
| | | type = 10; |
| | | } |
| | | dailyVipCommissions.computeIfAbsent(dateKey, k -> new HashMap<>()) |
| | | .merge(type, shopBalanceStatement.getVariableAmount(), BigDecimal::add); |
| | | } |
| | | } |
| | | |
| | | |
| | | CommissionDetail commissionDetail = new CommissionDetail(); |
| | | commissionDetail.setTotalCommission(totalCommission); |
| | | commissionDetail.setTotalServiceFee(totalServiceFee); |
| | |
| | | BigDecimal add = commissionDate.getNormalCommission().add(commissionDate.getGoldCommission()).add(commissionDate.getDiamondCommission()).add(commissionDate.getAgentCommission()) |
| | | .add(commissionDate.getSuperAgentCommission()).add(commissionDate.getTopAgentCommission()).add(commissionDate.getPartnerCommission()); |
| | | commissionDate.setTotalCommission(add); |
| | | |
| | | commissionDate.setServiceChargeCommission(dailyCommissions.getOrDefault(10, BigDecimal.ZERO)); |
| | | commissionDate.setAssociatedUserCommission(dailyCommissions.getOrDefault(8, BigDecimal.ZERO)); |
| | | commissionDate.setBindLowerLevelStoresCommission(dailyCommissions.getOrDefault(9, BigDecimal.ZERO)); |
| | | return commissionDate; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | |
| | | 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()); |
| | | } |
| | | |
| | | |
| | | /** |