| | |
| | | package cc.mrbird.febs.mall.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.configure.FebsConfigure; |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.entity.QueryRequest; |
| | | import cc.mrbird.febs.common.enumerates.AgentLevelEnum; |
| | | import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; |
| | | import cc.mrbird.febs.common.enumerates.YesOrNoEnum; |
| | | import cc.mrbird.febs.common.enumerates.*; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.utils.AppContants; |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | |
| | | import cc.mrbird.febs.pay.model.MemberWithdrawalDto; |
| | | import cc.mrbird.febs.pay.service.IXcxPayService; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.IdUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.crypto.SecureUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author wzy |
| | |
| | | private final SalemanCouponMapper salemanCouponMapper; |
| | | private final MallMemberCouponMapper mallMemberCouponMapper; |
| | | private final MallGoodsCouponMapper mallGoodsCouponMapper; |
| | | private final FebsConfigure febsConfigure; |
| | | private final MallChargeMapper mallChargeMapper; |
| | | |
| | | @Override |
| | | public IPage<MallMember> getMallMemberList(MallMember mallMember, QueryRequest request) { |
| | | Page<MallMember> page = new Page<>(request.getPageNum(), request.getPageSize()); |
| | | IPage<MallMember> mallMembers = this.baseMapper.selectMallMemberListInPage(page, mallMember); |
| | | List<MallMember> records = mallMembers.getRecords(); |
| | | if(CollUtil.isNotEmpty(records)){ |
| | | List<CompletableFuture<Void>> futures = new ArrayList<>(); |
| | | DateTime endTime = DateUtil.date(); |
| | | records.forEach(item -> { |
| | | CompletableFuture<Void> uCompletableFuture = CompletableFuture.runAsync(() -> { |
| | | List<MallMember> directMembers = mallMemberMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .eq(MallMember::getReferrerId, item.getInviteId()) |
| | | ); |
| | | //获取直推 |
| | | Set<String> directInviteIds = directMembers.stream() |
| | | .map(MallMember::getInviteId) |
| | | .collect(Collectors.toSet()); |
| | | Set<String> directCntAvailableInviteIds = directMembers.stream() |
| | | .filter(member -> !"YOUKE".equals(member.getLevel())) |
| | | .map(MallMember::getInviteId) |
| | | .collect(Collectors.toSet()); |
| | | if(CollUtil.isNotEmpty(directInviteIds)){ |
| | | item.setDirectCnt(directInviteIds.size()); |
| | | item.setDirectCntAvailable(directCntAvailableInviteIds.size()); |
| | | //获取团队 |
| | | List<MallMember> allMembers = mallMemberMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .eq(MallMember::getReferrerId, item.getInviteId()) |
| | | .or() |
| | | .in(MallMember::getReferrerId, directInviteIds) |
| | | ); |
| | | |
| | | |
| | | if(CollUtil.isNotEmpty(allMembers)){ |
| | | item.setTeamCnt(allMembers.size()); |
| | | // 获取团队业绩(不包含本人业绩) |
| | | List<MallCharge> mallCharges = mallChargeMapper.selectList( |
| | | new LambdaQueryWrapper<MallCharge>() |
| | | .in(MallCharge::getMemberId, allMembers.stream().map(MallMember::getId).collect(Collectors.toSet())) |
| | | .eq(MallCharge::getState, YesOrNoEnum.YES.getValue()) |
| | | .ge(MallCharge::getCreatedTime, item.getDirectorTime()) |
| | | .lt(MallCharge::getCreatedTime, endTime) |
| | | ); |
| | | if (CollUtil.isNotEmpty(mallCharges)) { |
| | | item.setAchieveCnt(mallCharges.stream() |
| | | .map(MallCharge::getAmount) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add)); |
| | | } |
| | | } |
| | | } |
| | | }, febsConfigure.asyncThreadPoolTaskExecutor()); |
| | | futures.add(uCompletableFuture); |
| | | }); |
| | | // 等待所有任务完成 |
| | | CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); |
| | | allOf.join(); // 阻塞直到所有任务完成 |
| | | } |
| | | return mallMembers; |
| | | } |
| | | |
| | |
| | | } |
| | | mallMember.setAccountStatus(YesOrNoEnum.NO.getValue()); |
| | | mallMemberMapper.updateById(mallMember); |
| | | |
| | | String redisKey = AppContants.APP_LOGIN_PREFIX + mallMember.getId(); |
| | | String existToken = redisUtils.getString(redisKey); |
| | | if (StrUtil.isNotBlank(existToken)) { |
| | | Object o = redisUtils.get(existToken); |
| | | if (ObjectUtil.isNotEmpty(o)) { |
| | | redisUtils.del(existToken); |
| | | } |
| | | } |
| | | redisUtils.del(AppContants.APP_LOGIN_PREFIX + id); |
| | | redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id); |
| | | return new FebsResponse().success(); |
| | | } |
| | | |
| | |
| | | |
| | | if (type == 1) { |
| | | mallMember.setDirector(value); |
| | | mallMember.setDirectorTime(DateUtil.date()); |
| | | } else if (type == 2){ |
| | | mallMember.setStoreMaster(value); |
| | | } else { |
| | |
| | | } |
| | | |
| | | Integer type = mallSystemPayDto.getType(); |
| | | Integer flowType = 0; |
| | | Integer moneyType = 0; |
| | | String moneyTypeDec = ""; |
| | | String filedType = ""; |
| | | if (type == 1) { |
| | | filedType = "balance"; |
| | | flowType = FlowTypeEnum.BALANCE.getValue(); |
| | | moneyType = RunVipMoneyFlowTypeEnum.SYS_BALANCE.getValue(); |
| | | moneyTypeDec = RunVipMoneyFlowTypeEnum.SYS_BALANCE.getDescription(); |
| | | } else if (type == 2) { |
| | | filedType = "score"; |
| | | flowType = FlowTypeEnum.SCORE.getValue(); |
| | | moneyType = RunVipMoneyFlowTypeEnum.SYS_SCORE.getValue(); |
| | | moneyTypeDec = RunVipMoneyFlowTypeEnum.SYS_SCORE.getDescription(); |
| | | } else if (type == 3) { |
| | | filedType = "prizeScore"; |
| | | } else { |
| | |
| | | } else { |
| | | iApiMallMemberWalletService.add(mallSystemPayDto.getAddBalance(), mallSystemPayDto.getId(), filedType); |
| | | } |
| | | mallMoneyFlowService.addMoneyFlow(memberId, bigDecimal, MoneyFlowTypeEnum.SYSTEM.getValue(), MallUtils.getOrderNum(), type, null,2); |
| | | String orderNo = MallUtils.getOrderNum("SYS"); |
| | | mallMoneyFlowService.runVipMoneyFlowAdd( |
| | | mallMember.getId(), |
| | | mallMember.getId(), |
| | | orderNo, |
| | | flowType, |
| | | moneyType, |
| | | bigDecimal, |
| | | StrUtil.format(moneyTypeDec,bigDecimal), |
| | | YesOrNoEnum.YES.getValue() |
| | | ); |
| | | return new FebsResponse().success(); |
| | | } |
| | | |