package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUserApplet; import com.ruoyi.system.mapper.TAppUserMapper; import com.ruoyi.system.model.*; import com.ruoyi.system.query.AppUserListQuery; import com.ruoyi.system.query.PromotionPageListQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.PromotionPageListVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 用户管理 服务实现类 *

* * @author xiaochen * @since 2025-11-06 */ @Slf4j @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class TAppUserServiceImpl extends ServiceImpl implements TAppUserService { private final ISysUserService sysUserService; @Autowired private TBigGiftPackageOrderService tBigGiftPackageOrderService; @Autowired private TPhysicalGoodsOrderService tPhysicalGoodsOrderService; @Autowired private TCommissionTransactionFlowService tCommissionTransactionFlowService; @Autowired private TIntegralSettlementService tIntegralSettlementService; @Override public PageInfo pageList(AppUserListQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.pageList(query,pageInfo); pageInfo.setRecords( list); return pageInfo; } @Override public PageInfo transferPageUserList(AppUserListQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.transferPageUserList(query,pageInfo); pageInfo.setRecords( list); return pageInfo; } @Override public void confirmSuperior(Integer superiorType, Integer superiorId, LoginUserApplet loginUserApplet) { TAppUser appUser = this.lambdaQuery().eq(TAppUser::getId, loginUserApplet.getUserId()).ne(TAppUser::getStatus,3) .last("LIMIT 1").one(); if (Objects.nonNull(appUser)) { if (superiorType.equals(1)) { //查询上级用户所属公司ID SysUser sysUser = sysUserService.selectUserById(superiorId.longValue()); if (Objects.nonNull(sysUser)) { appUser.setReferrerSysUserId(superiorId); } else { log.info("推广员不存在,绑定superiorId={}", superiorId); } } else { if (appUser.getReferrerStatus().equals(1)) { appUser.setReferrerUserId(superiorId); appUser.setReferrerTime(LocalDateTime.now()); } } this.updateById(appUser); } } @Override public List promotionPageList(Page page, PromotionPageListQuery query) { List list = this.baseMapper.promotionPageList(page,query); if (!list.isEmpty()) { List userIds = list.stream().map(PromotionPageListVo::getUserId).collect(Collectors.toList()); // List physicalGoodsOrders = tPhysicalGoodsOrderService.list(new LambdaQueryWrapper().in(TPhysicalGoodsOrder::getAppUserId, userIds).notIn(TPhysicalGoodsOrder::getStatus,Arrays.asList(1,4))); List giftPackageOrders = tBigGiftPackageOrderService.list(new LambdaQueryWrapper().in(TBigGiftPackageOrder::getAppUserId, userIds).notIn(TBigGiftPackageOrder::getStatus,Arrays.asList(1,5))); List flows = tCommissionTransactionFlowService.list(new LambdaQueryWrapper().in(TCommissionTransactionFlow::getAppUserId, userIds)); List settlements = tIntegralSettlementService.list(new LambdaQueryWrapper().in(TIntegralSettlement::getAppUserId, userIds)); for (PromotionPageListVo promotionPageListVo : list) { // BigDecimal total = physicalGoodsOrders.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).map(TPhysicalGoodsOrder::getPaymentPrice).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal totalOne = giftPackageOrders.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).map(TBigGiftPackageOrder::getPaymentPrice).reduce(BigDecimal.ZERO, BigDecimal::add); promotionPageListVo.setTotalConsume(totalOne); Integer totalIncome = flows.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).mapToInt(TCommissionTransactionFlow::getCommissionAmount).sum(); promotionPageListVo.setTotalIncome(totalIncome); Integer totalSettledIncome = settlements.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).mapToInt(TIntegralSettlement::getTotalSettlementIntegral).sum(); promotionPageListVo.setTotalSettledIncome(totalSettledIncome); } } return list; } @Override public List promotionPageListExport(PromotionPageListQuery query) { List list = this.baseMapper.promotionPageListExport(query); if (!list.isEmpty()) { List userIds = list.stream().map(PromotionPageListVo::getUserId).collect(Collectors.toList()); // List physicalGoodsOrders = tPhysicalGoodsOrderService.list(new LambdaQueryWrapper().in(TPhysicalGoodsOrder::getAppUserId, userIds).notIn(TPhysicalGoodsOrder::getStatus,Arrays.asList(1,4))); List giftPackageOrders = tBigGiftPackageOrderService.list(new LambdaQueryWrapper().in(TBigGiftPackageOrder::getAppUserId, userIds).notIn(TBigGiftPackageOrder::getStatus,Arrays.asList(1,5))); List flows = tCommissionTransactionFlowService.list(new LambdaQueryWrapper().in(TCommissionTransactionFlow::getAppUserId, userIds)); List settlements = tIntegralSettlementService.list(new LambdaQueryWrapper().in(TIntegralSettlement::getAppUserId, userIds)); for (PromotionPageListVo promotionPageListVo : list) { // BigDecimal total = physicalGoodsOrders.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).map(TPhysicalGoodsOrder::getPaymentPrice).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal totalOne = giftPackageOrders.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).map(TBigGiftPackageOrder::getPaymentPrice).reduce(BigDecimal.ZERO, BigDecimal::add); promotionPageListVo.setTotalConsume(totalOne); Integer totalIncome = flows.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).mapToInt(TCommissionTransactionFlow::getCommissionAmount).sum(); promotionPageListVo.setTotalIncome(totalIncome); BigDecimal totalSettledIncome = settlements.stream().filter(e -> e.getAppUserId().equals(promotionPageListVo.getUserId())).map(TIntegralSettlement::getTotalSettlementIntegral).reduce(BigDecimal.ZERO, BigDecimal::add); promotionPageListVo.setTotalSettledIncome(totalSettledIncome); } } return list; } @Override public List exportAppUser(AppUserListQuery query) { List list = this.baseMapper.exportAppUser(query); return list; } }