KKSU
2024-01-02 26eb548e4ce72a10b4b694852e0640fb76651655
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -13,15 +13,13 @@
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.mall.service.ICommonService;
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -30,6 +28,8 @@
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.json.JSONUtil;
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -69,6 +69,13 @@
    private final SpringContextHolder springContextHolder;
    private final MallAgentRecordMapper mallAgentRecordMapper;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final IMallMemberCollectionService mallMemberCollectionService;
    private final IMallMemberFootprintService mallMemberFootprintService;
    private final SalemanCouponMapper salemanCouponMapper;
    private final CouponGoodsMapper couponGoodsMapper;
    private final MallGoodsCouponMapper mallGoodsCouponMapper;
    private final MallMemberCouponMapper mallMemberCouponMapper;
    private final MallGoodsMapper mallGoodsMapper;
    @Value("${spring.profiles.active}")
@@ -226,6 +233,15 @@
    @Override
    public FebsResponse logout() {
        Long id = LoginUserUtil.getLoginUser().getId();
        String redisKey = AppContants.XCX_LOGIN_PREFIX + id;
        String existToken = redisUtils.getString(redisKey);
        if (StrUtil.isNotBlank(existToken)) {
            Object o = redisUtils.get(existToken);
            if (ObjectUtil.isNotEmpty(o)) {
                redisUtils.del(existToken);
            }
        }
        redisUtils.del(AppContants.XCX_LOGIN_PREFIX + id);
        redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id);
        return new FebsResponse().success().message("退出登录");
@@ -253,37 +269,26 @@
            mallMemberVo.setHasPayment(1);
        }
        MemberCollectionListDto memberCollectionListDto = new MemberCollectionListDto();
        memberCollectionListDto.setPageNow(1);
        memberCollectionListDto.setPageSize(10);
        List<CollectionListVo> collectionList = mallMemberCollectionService.findMemberCollectionList(memberCollectionListDto);
        mallMemberVo.setCollectionCnt(CollUtil.isNotEmpty(collectionList) ? collectionList.size() : 0);
        MemberFootprintListDto memberFootprintListDto = new MemberFootprintListDto();
        memberFootprintListDto.setPageNow(1);
        memberFootprintListDto.setPageSize(10);
        List<FootprintListVo> footprintList = mallMemberFootprintService.findMemberFootprintList(memberFootprintListDto);
        mallMemberVo.setFootprintCnt(CollUtil.isNotEmpty(footprintList) ? footprintList.size() : 0);
        List<MallMember> mallMembers = this.baseMapper.selectByRefererId(mallMember.getInviteId());
        mallMemberVo.setChildCnt(CollUtil.isNotEmpty(mallMembers) ? mallMembers.size() : 0);
        MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId());
        mallMemberVo.setBalance(wallet.getBalance());
        mallMemberVo.setScore(wallet.getScore());
        mallMemberVo.setPrizeScore(wallet.getPrizeScore());
        mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id));
        //代理状态
        MallAgentRecord mallAgentRecordIng = mallAgentRecordMapper.selectByMemberIdAndState(id, MallAgentRecord.APPLY_ING);
        MallAgentRecord mallAgentRecordAgree = mallAgentRecordMapper.selectByMemberIdAndState(id, MallAgentRecord.APPLY_AGREE);
        MallAgentRecord mallAgentRecordDisagree = mallAgentRecordMapper.selectByMemberIdAndState(id, MallAgentRecord.APPLY_DISAGREE);
        if(ObjectUtil.isNotEmpty(mallAgentRecordIng)){
            mallMemberVo.setIsAgent(1);
        }else if(ObjectUtil.isNotEmpty(mallAgentRecordAgree)){
            mallMemberVo.setIsAgent(2);
            if(StrUtil.isNotEmpty(mallAgentRecordAgree.getAgentLevel())){
                DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_LEVEL_APPLY", mallAgentRecordAgree.getAgentLevel());
                mallMemberVo.setAgentLevelName(dataDictionaryCustom.getDescription());
            }
            if(mallAgentRecordAgree.getAgentLevel().equals("LEVEL_ONE")){
                mallMemberVo.setAgentLevel(1);
            }
            if(mallAgentRecordAgree.getAgentLevel().equals("LEVEL_TWO")){
                mallMemberVo.setAgentLevel(2);
            }
            if(mallAgentRecordAgree.getAgentLevel().equals("LEVEL_THREE")){
                mallMemberVo.setAgentLevel(3);
            }
        }else if(ObjectUtil.isNotEmpty(mallAgentRecordDisagree)){
            mallMemberVo.setIsAgent(3);
        }
//        mallMemberVo.setScore(wallet.getScore());
//        mallMemberVo.setPrizeScore(wallet.getPrizeScore());
//        mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id));
        return new FebsResponse().success().data(mallMemberVo);
    }
@@ -355,8 +360,8 @@
        MyTeamVo myTeamVo = new MyTeamVo();
        myTeamVo.setTeam(list);
        myTeamVo.setMyAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 1));
        myTeamVo.setMyTeamAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 2));
        myTeamVo.setMyAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 1));
        myTeamVo.setMyTeamAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 2));
        myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size());
        return new FebsResponse().success().data(myTeamVo);
    }
@@ -577,6 +582,7 @@
    @Override
    public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException {
        log.info("登录请求参数:{}", JSONObject.toJSONString(apiXcxLoginDto));
        FebsResponse febsResponse = new FebsResponse();
        String code = apiXcxLoginDto.getCode();
        log.info("code:" + code);
@@ -606,6 +612,40 @@
                    mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
                    mallMember.setOpenId(openId);
                    mallMember.setSessionKey(sessionKey);
                    if (StrUtil.isNotBlank(apiXcxLoginDto.getInviteId())) {
                        MallMember member = this.baseMapper.selectInfoByInviteId(apiXcxLoginDto.getInviteId());
                        if (member != null) {
                            mallMember.setReferrerId(member.getInviteId());
                            //推荐人和推荐人链
                            boolean flag = false;
                            String parentId = mallMember.getReferrerId();
                            if (StrUtil.isBlank(parentId)) {
                                flag = true;
                            }
                            String ids = "";
                            while (!flag) {
                                if (StrUtil.isBlank(ids)) {
                                    ids += parentId;
                                } else {
                                    ids += ("," + parentId);
                                }
                                MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId);
                                if (parentMember == null) {
                                    break;
                                }
                                parentId = parentMember.getReferrerId();
                                if (StrUtil.isBlank(parentMember.getReferrerId())) {
                                    flag = true;
                                }
                            }
                            if (StrUtil.isNotBlank(ids)) {
                                mallMember.setReferrerIds(ids);
                            }
                        }
                    }
                    this.baseMapper.insert(mallMember);
                    mallMember = this.baseMapper.selectMemberByOpenId(openId);
@@ -799,9 +839,9 @@
    @Override
    public void updateMemberAgent(Long memberId,String levelCode) {
        mallAgentRecordMapper.updateStateByMemberId(memberId);
        MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(memberId);
        //更新用户表中的LEVEL
        MallMember mallMember = this.baseMapper.selectById(memberId);
        MallMember mallMember = this.baseMapper.selectById(mallAgentRecord.getMemberId());
        mallMember.setLevel(levelCode);
        this.baseMapper.updateById(mallMember);
    }
@@ -845,6 +885,126 @@
        return new FebsResponse().success().data(apiMallAgentRecordVo);
    }
    @Override
    public FebsResponse getCoupon(GetCouponDto getCouponDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        String couponUUID = IdUtil.simpleUUID();
//        String couponUUID = getCouponDto.getCouponUUID();
//        QueryWrapper<MallMemberCoupon> objectQueryWrapper = new QueryWrapper<>();
//        objectQueryWrapper.eq("coupon_uuid",couponUUID);
//        List<MallMemberCoupon> mallMemberCouponDone = mallMemberCouponMapper.selectList(objectQueryWrapper);
//        if(CollUtil.isNotEmpty(mallMemberCouponDone)){
//            return new FebsResponse().success();
//        }
        //通过邀请人信息,获取能领取的优惠卷信息
        MallMember mallMember = this.baseMapper.selectInfoByInviteId(getCouponDto.getInviteId());
        if(ObjectUtil.isNotEmpty(mallMember)){
            SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(mallMember.getId());
            if(ObjectUtil.isNotEmpty(salemanCoupon)){
                Long couponId = salemanCoupon.getCouponId();
                Long goodsId = getCouponDto.getGoodsId();
                MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
                //验证商品存不存在,且上没上架
                if(ObjectUtil.isNotEmpty(mallGoods)
                    && MallGoods.ISSALE_STATUS_ENABLE == mallGoods.getIsSale()){
//                List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponId(memberId, goodsId, couponId,mallMember.getInviteId());
//                List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponIdWithOutInviteId(memberId, goodsId, couponId);
                    List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponIdWithOutInviteId(memberId, goodsId);
                    if(CollUtil.isEmpty(mallMemberCoupons)){
                        //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
                        List<CouponGoods> couponGoodsList = couponGoodsMapper.selectByGoodIdAndCouponId(goodsId,couponId);
                        MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
                        if(CollUtil.isNotEmpty(couponGoodsList)){
                            MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
                            mallMemberCoupon.setCouponId(couponId);
                            mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
                            mallMemberCoupon.setMemberId(memberId);
                            mallMemberCoupon.setGoodsId(goodsId);
                            mallMemberCoupon.setCouponUuid(couponUUID);
                            mallMemberCoupon.setInviteId(mallMember.getInviteId());
                            mallMemberCoupon.setState(1);
                            mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
                            mallMemberCouponMapper.insert(mallMemberCoupon);
                        }
                    }
                }
            }
        }
        return new FebsResponse().success();
    }
    @Override
    public FebsResponse memberCoupon(MallMemberCouponDto mallMemberCouponDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        IPage<MallMemberCouponVo> page = new Page<>(mallMemberCouponDto.getPageNum(), mallMemberCouponDto.getPageSize());
        mallMemberCouponDto.setMemberId(memberId);
        mallMemberCouponDto.setExpireTime(DateUtil.date());
        IPage<MallMemberCouponVo> pages = mallMemberCouponMapper.selectListInPage(page, mallMemberCouponDto);
        return new FebsResponse().success().data(pages);
    }
    @Override
    public FebsResponse couponDetails(Long id) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(id);
        MallMemberCouponVo mallMemberCouponVo = new MallMemberCouponVo();
        mallMemberCouponVo.setCouponName(mallMemberCoupon.getCouponName());
        MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId());
        mallMemberCouponVo.setCostAmount(mallGoodsCoupon.getCostAmount());
        mallMemberCouponVo.setRealAmount(mallGoodsCoupon.getRealAmount());
        return new FebsResponse().success().data(mallMemberCouponVo);
    }
    @Override
    public FebsResponse setInvite(ApiSetInviteDto apiSetInviteDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = this.baseMapper.selectById(memberId);
        if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
            throw new FebsException("已绑定");
        }
        String inviteId = apiSetInviteDto.getInviteId();
        if(inviteId.equals(mallMember.getInviteId())){
            return new FebsResponse().success();
        }
        MallMember member = this.baseMapper.selectInfoByInviteId(inviteId);
        if (member != null) {
            if (StrUtil.isNotBlank(member.getReferrerIds()) && member.getReferrerIds().contains(mallMember.getInviteId())) {
                log.info("下级不能邀请上级");
                return new FebsResponse().success();
            }
            mallMember.setReferrerId(member.getInviteId());
            //推荐人和推荐人链
            boolean flag = false;
            String parentId = mallMember.getReferrerId();
            if (StrUtil.isBlank(parentId)) {
                flag = true;
            }
            String ids = "";
            while (!flag) {
                if (StrUtil.isBlank(ids)) {
                    ids += parentId;
                } else {
                    ids += ("," + parentId);
                }
                MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId);
                if (parentMember == null) {
                    break;
                }
                parentId = parentMember.getReferrerId();
                if (StrUtil.isBlank(parentMember.getReferrerId())) {
                    flag = true;
                }
            }
            if (StrUtil.isNotBlank(ids)) {
                mallMember.setReferrerIds(ids);
            }
            this.baseMapper.updateById(mallMember);
        }
        return new FebsResponse().success();
    }
    private  String getXcxLoginUrl(String code) {
        String wechatLoginUrl =xcxProperties.getWecharLoginUrl();
        return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code);