PartnerWalletServiceImpl.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.ydtech.core.page.HttpResult;
  6. import com.ydtech.modules.admin.dao.PartnerWalletMapper;
  7. import com.ydtech.modules.admin.dao.SysPartnerMapper;
  8. import com.ydtech.modules.admin.dao.SysRelationPersonMapper;
  9. import com.ydtech.modules.admin.model.SysPartner;
  10. import com.ydtech.modules.admin.model.SysRelationPerson;
  11. import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
  12. import com.ydtech.modules.admin.model.dto.partner.CopartnerAndStudioNumberDTO;
  13. import com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO;
  14. import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
  15. import com.ydtech.modules.admin.service.PartnerWalletService;
  16. import com.ydtech.modules.base.controller.BaseController;
  17. import lombok.RequiredArgsConstructor;
  18. import org.springframework.stereotype.Service;
  19. import java.math.BigDecimal;
  20. import java.util.Collections;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.Optional;
  24. import java.util.concurrent.CompletableFuture;
  25. import java.util.stream.Collectors;
  26. import java.util.stream.IntStream;
  27. /**
  28. * @description: 控制台 钱包管理 合伙人
  29. * @author: wenks
  30. * @date: 2025/6/13 15:56
  31. **/
  32. @Service
  33. @RequiredArgsConstructor
  34. public class PartnerWalletServiceImpl implements PartnerWalletService {
  35. private final SysPartnerMapper sysPartnerMapper;
  36. private final PartnerWalletMapper partnerWalletMapper;
  37. private final SysRelationPersonMapper sysRelationPersonMapper;
  38. @Override
  39. public HttpResult<IPage<SysPartnerConsoleDto>> queryPartnerStatistics(DeptBalanceVo deptBalanceVo) {
  40. Page<SysPartnerConsoleDto> page = new Page<>(deptBalanceVo.getPageNum(), deptBalanceVo.getPageSize());
  41. IPage<SysPartnerConsoleDto> sysPartnersPage = sysPartnerMapper.queryPage(page, deptBalanceVo);
  42. List<String> userIdList = sysPartnersPage.getRecords()
  43. .stream()
  44. .map(SysPartnerConsoleDto::getUserId)
  45. .collect(Collectors.toList());
  46. // 并行查询统计数据
  47. CompletableFuture<List<PartnerDataDTO>> memberFuture = CompletableFuture.supplyAsync(
  48. () -> partnerWalletMapper.getMemberNumber(userIdList));
  49. CompletableFuture<List<PartnerDataDTO>> premiumFuture = CompletableFuture.supplyAsync(
  50. () -> partnerWalletMapper.getTotalPremiums(userIdList, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate()));
  51. CompletableFuture<List<PartnerDataDTO>> commissionFuture = CompletableFuture.supplyAsync(
  52. () -> partnerWalletMapper.getCommission(userIdList, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate()));
  53. CompletableFuture<List<CopartnerAndStudioNumberDTO>> studioFuture = CompletableFuture.supplyAsync(
  54. () -> partnerWalletMapper.getCopartnerAndStudioNumber(userIdList));
  55. LambdaQueryWrapper<SysRelationPerson> eq = new LambdaQueryWrapper<SysRelationPerson>()
  56. .eq(SysRelationPerson::getSource, "0")
  57. .eq(SysRelationPerson::getType, "1")
  58. .in(SysRelationPerson::getSuggestId, userIdList);
  59. CompletableFuture<List<SysRelationPerson>> sysRelationPerson = CompletableFuture.supplyAsync(
  60. () -> sysRelationPersonMapper.selectList(eq));
  61. CompletableFuture.allOf(memberFuture, premiumFuture, commissionFuture, studioFuture, sysRelationPerson).join();
  62. // 转换为Map
  63. Map<String, String> memberMap = convertToMap(memberFuture.join());
  64. Map<String, String> premiumMap = convertToMap(premiumFuture.join());
  65. Map<String, String> commissionMap = convertToMap(commissionFuture.join());
  66. Map<String, String> studioMap = studioFuture.join().stream()
  67. .collect(Collectors.toMap(
  68. x -> x.getUserId() + x.getSource() + x.getType(),
  69. CopartnerAndStudioNumberDTO::getCount));
  70. Map<String, List<String>> collect = sysRelationPerson.join()
  71. .stream()
  72. .collect(Collectors.groupingBy(SysRelationPerson::getSuggestId, Collectors.mapping(SysRelationPerson::getAgencyLeaderId, Collectors.toList())));
  73. // 填充统计数据
  74. sysPartnersPage.getRecords().forEach(dto -> {
  75. dto.setLoginUserId(deptBalanceVo.getUserId());
  76. dto.setLeaderIds(collect.get(dto.getUserId()));
  77. dto.setMemberShip(Integer.parseInt(memberMap.getOrDefault(dto.getUserId(), "0")));
  78. dto.setTotalIncome(new BigDecimal(premiumMap.getOrDefault(dto.getUserId(), "0")));
  79. dto.setCommission(new BigDecimal(commissionMap.getOrDefault(dto.getUserId(), "0")));
  80. dto.setNumberPartners(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "00", "0")));
  81. dto.setDirectStudio(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "01", "0")));
  82. dto.setIndirectStudio(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "11", "0")));
  83. });
  84. return HttpResult.ok(sysPartnersPage);
  85. }
  86. private Map<String, String> convertToMap(List<PartnerDataDTO> list) {
  87. return Optional.ofNullable(list)
  88. .orElse(Collections.emptyList())
  89. .stream()
  90. .collect(Collectors.toMap(PartnerDataDTO::getUserId, PartnerDataDTO::getData));
  91. }
  92. }