package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.dto.sale.ApiSaleListInfoDto; import cc.mrbird.febs.mall.dto.sale.ApiTeamListInfoDto; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.ApiSaleService; import cc.mrbird.febs.mall.vo.sale.*; import cn.hutool.core.collection.CollUtil; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor public class ApiSaleServiceImpl extends ServiceImpl implements ApiSaleService { private final HappySaleLevelMapper happySaleLevelMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final MallOrderInfoMapper mallOrderInfoMapper; private final MallAchieveRecordMapper mallAchieveRecordMapper; @Override public FebsResponse saleInfo() { ApiSaleInfoVo apiSaleInfoVo = new ApiSaleInfoVo(); Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); apiSaleInfoVo.setId(mallMember.getId()); apiSaleInfoVo.setName(mallMember.getName()); apiSaleInfoVo.setAvatar(mallMember.getAvatar()); apiSaleInfoVo.setInviteId(mallMember.getInviteId()); HappySaleLevel happySaleLevel = happySaleLevelMapper.selectOne( new LambdaQueryWrapper() .eq(HappySaleLevel::getCode, mallMember.getStoreMaster()) .last("limit 1") ); if (happySaleLevel != null) { apiSaleInfoVo.setStoreMasterName(happySaleLevel.getName()); apiSaleInfoVo.setStoreMasterPng(happySaleLevel.getIconPng()); } List mallMembers = this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()); apiSaleInfoVo.setTotalCnt(CollUtil.isNotEmpty(mallMembers) ? mallMembers.size() : 0); List mallMoneyFlows = mallMoneyFlowMapper.selectList( new LambdaQueryWrapper() .eq(MallMoneyFlow::getMemberId, id) .eq(MallMoneyFlow::getType, ScoreFlowTypeEnum.SALE_RECOMMEND.getValue()) ); apiSaleInfoVo.setTotalSaleAmount( CollUtil.isNotEmpty(mallMoneyFlows) ? mallMoneyFlows.stream().map(MallMoneyFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add) : BigDecimal.ZERO); apiSaleInfoVo.setOrderCnt(CollUtil.isNotEmpty(mallMoneyFlows) ? mallMoneyFlows.size() : 0); // todo 提现部分暂无 return new FebsResponse().success().data(apiSaleInfoVo); } @Override public FebsResponse teamHeader() { ApiTeamHeaderInfoVo apiTeamHeaderInfoVo = new ApiTeamHeaderInfoVo(); Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); List mallMembers = this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()); if(CollUtil.isEmpty(mallMembers)){ apiTeamHeaderInfoVo.setTotalCnt(0); apiTeamHeaderInfoVo.setTotalAmount(BigDecimal.ZERO); }else{ apiTeamHeaderInfoVo.setTotalCnt(mallMembers.size()); //stream流获取mallMembers的全部id的set集合 Set memberIds = mallMembers.stream().map(MallMember::getId).collect(Collectors.toSet()); List mallOrderInfos = mallOrderInfoMapper.selectList( new LambdaQueryWrapper() .select(MallOrderInfo::getAmount) .in(MallOrderInfo::getMemberId, memberIds) .eq(MallOrderInfo::getStatus, OrderStatusEnum.FINISH.getValue()) ); if(CollUtil.isEmpty(mallOrderInfos)){ apiTeamHeaderInfoVo.setTotalAmount(BigDecimal.ZERO); }else{ apiTeamHeaderInfoVo.setTotalAmount( mallOrderInfos.stream().map(MallOrderInfo::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add) ); } } return new FebsResponse().success().data(apiTeamHeaderInfoVo); } @Override public FebsResponse teamList(ApiTeamListInfoDto dto) { Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); dto.setInviteId(mallMember.getInviteId()); Page page = new Page<>(dto.getPageNow(), dto.getPageSize()); IPage apiTeamListInfoVoIPage = this.baseMapper.selectTeamPage(page, dto); return new FebsResponse().success().data(apiTeamListInfoVoIPage); } @Override public FebsResponse saleHeader() { ApiSaleHeaderInfoVo apiSaleHeaderInfoVo = new ApiSaleHeaderInfoVo(); Long id = LoginUserUtil.getLoginUser().getId(); List mallMoneyFlows = mallMoneyFlowMapper.selectList( new LambdaQueryWrapper() .eq(MallMoneyFlow::getMemberId, id) .eq(MallMoneyFlow::getType, ScoreFlowTypeEnum.SALE_RECOMMEND.getValue()) ); apiSaleHeaderInfoVo.setTotalSaleAmount( CollUtil.isNotEmpty(mallMoneyFlows) ? mallMoneyFlows.stream().map(MallMoneyFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add) : BigDecimal.ZERO); apiSaleHeaderInfoVo.setOrderCnt(CollUtil.isNotEmpty(mallMoneyFlows) ? mallMoneyFlows.size() : 0); return new FebsResponse().success().data(apiSaleHeaderInfoVo); } @Override public FebsResponse saleList(ApiSaleListInfoDto dto) { Long id = LoginUserUtil.getLoginUser().getId(); Page objectPage = new Page<>(dto.getPageNow(), dto.getPageSize()); dto.setMemberId(id); Page mallAchieveRecordPage = this.baseMapper.selectSalePage(objectPage, dto); return new FebsResponse().success().data(mallAchieveRecordPage); } }