| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package com.ydtech.modules.admin.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.ydtech.core.page.HttpResult;
- import com.ydtech.modules.admin.dao.PartnerWalletMapper;
- import com.ydtech.modules.admin.dao.SysPartnerMapper;
- import com.ydtech.modules.admin.dao.SysRelationPersonMapper;
- import com.ydtech.modules.admin.model.SysPartner;
- import com.ydtech.modules.admin.model.SysRelationPerson;
- import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
- import com.ydtech.modules.admin.model.dto.partner.CopartnerAndStudioNumberDTO;
- import com.ydtech.modules.admin.model.dto.partner.PartnerDataDTO;
- import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
- import com.ydtech.modules.admin.service.PartnerWalletService;
- import com.ydtech.modules.base.controller.BaseController;
- import lombok.RequiredArgsConstructor;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.util.Collections;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.concurrent.CompletableFuture;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- /**
- * @description: 控制台 钱包管理 合伙人
- * @author: wenks
- * @date: 2025/6/13 15:56
- **/
- @Service
- @RequiredArgsConstructor
- public class PartnerWalletServiceImpl implements PartnerWalletService {
- private final SysPartnerMapper sysPartnerMapper;
- private final PartnerWalletMapper partnerWalletMapper;
- private final SysRelationPersonMapper sysRelationPersonMapper;
- @Override
- public HttpResult<IPage<SysPartnerConsoleDto>> queryPartnerStatistics(DeptBalanceVo deptBalanceVo) {
- Page<SysPartnerConsoleDto> page = new Page<>(deptBalanceVo.getPageNum(), deptBalanceVo.getPageSize());
- IPage<SysPartnerConsoleDto> sysPartnersPage = sysPartnerMapper.queryPage(page, deptBalanceVo);
- List<String> userIdList = sysPartnersPage.getRecords()
- .stream()
- .map(SysPartnerConsoleDto::getUserId)
- .collect(Collectors.toList());
- // 并行查询统计数据
- CompletableFuture<List<PartnerDataDTO>> memberFuture = CompletableFuture.supplyAsync(
- () -> partnerWalletMapper.getMemberNumber(userIdList));
- CompletableFuture<List<PartnerDataDTO>> premiumFuture = CompletableFuture.supplyAsync(
- () -> partnerWalletMapper.getTotalPremiums(userIdList, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate()));
- CompletableFuture<List<PartnerDataDTO>> commissionFuture = CompletableFuture.supplyAsync(
- () -> partnerWalletMapper.getCommission(userIdList, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate()));
- CompletableFuture<List<CopartnerAndStudioNumberDTO>> studioFuture = CompletableFuture.supplyAsync(
- () -> partnerWalletMapper.getCopartnerAndStudioNumber(userIdList));
- LambdaQueryWrapper<SysRelationPerson> eq = new LambdaQueryWrapper<SysRelationPerson>()
- .eq(SysRelationPerson::getSource, "0")
- .eq(SysRelationPerson::getType, "1")
- .in(SysRelationPerson::getSuggestId, userIdList);
- CompletableFuture<List<SysRelationPerson>> sysRelationPerson = CompletableFuture.supplyAsync(
- () -> sysRelationPersonMapper.selectList(eq));
- CompletableFuture.allOf(memberFuture, premiumFuture, commissionFuture, studioFuture, sysRelationPerson).join();
- // 转换为Map
- Map<String, String> memberMap = convertToMap(memberFuture.join());
- Map<String, String> premiumMap = convertToMap(premiumFuture.join());
- Map<String, String> commissionMap = convertToMap(commissionFuture.join());
- Map<String, String> studioMap = studioFuture.join().stream()
- .collect(Collectors.toMap(
- x -> x.getUserId() + x.getSource() + x.getType(),
- CopartnerAndStudioNumberDTO::getCount));
- Map<String, List<String>> collect = sysRelationPerson.join()
- .stream()
- .collect(Collectors.groupingBy(SysRelationPerson::getSuggestId, Collectors.mapping(SysRelationPerson::getAgencyLeaderId, Collectors.toList())));
- // 填充统计数据
- sysPartnersPage.getRecords().forEach(dto -> {
- dto.setLoginUserId(deptBalanceVo.getUserId());
- dto.setLeaderIds(collect.get(dto.getUserId()));
- dto.setMemberShip(Integer.parseInt(memberMap.getOrDefault(dto.getUserId(), "0")));
- dto.setTotalIncome(new BigDecimal(premiumMap.getOrDefault(dto.getUserId(), "0")));
- dto.setCommission(new BigDecimal(commissionMap.getOrDefault(dto.getUserId(), "0")));
- dto.setNumberPartners(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "00", "0")));
- dto.setDirectStudio(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "01", "0")));
- dto.setIndirectStudio(Integer.parseInt(studioMap.getOrDefault(dto.getUserId() + "11", "0")));
- });
- return HttpResult.ok(sysPartnersPage);
- }
- private Map<String, String> convertToMap(List<PartnerDataDTO> list) {
- return Optional.ofNullable(list)
- .orElse(Collections.emptyList())
- .stream()
- .collect(Collectors.toMap(PartnerDataDTO::getUserId, PartnerDataDTO::getData));
- }
- }
|