fix
Hentua
2023-08-24 3f847215a4875a7855b830013b337b6c082f4649
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -13,10 +13,10 @@
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.*;
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.util.IdUtil;
@@ -25,7 +25,9 @@
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -63,6 +65,10 @@
    private final MallRegisterAppealMapper mallRegisterAppealMapper;
    private final MallTeamLeaderMapper mallTeamLeaderMapper;
    private final SpringContextHolder springContextHolder;
    private final MallAgentRecordMapper mallAgentRecordMapper;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final IMallMemberCollectionService mallMemberCollectionService;
    private final IMallMemberFootprintService mallMemberFootprintService;
    @Value("${spring.profiles.active}")
@@ -193,7 +199,9 @@
    public String generateAsaToken(String token) {
        RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
        return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
//        return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
        //去掉时间戳
        return rsa.encryptBase64(token, KeyType.PublicKey);
    }
    @Override
@@ -229,10 +237,11 @@
        MallMember mallMember = this.baseMapper.selectById(id);
        MallMemberVo mallMemberVo = MallMemberConversion.INSTANCE.entityToVo(mallMember);
        MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId());
        if (referMember != null) {
            mallMemberVo.setReferrerName(referMember.getName());
        if(StrUtil.isNotEmpty(mallMember.getReferrerId())){
            MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId());
            if (referMember != null) {
                mallMemberVo.setReferrerName(referMember.getName());
            }
        }
        if (StrUtil.isNotBlank(mallMember.getTradePassword())) {
@@ -244,23 +253,24 @@
            mallMemberVo.setHasPayment(1);
        }
//        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel());
//        if (dic != null) {
//            mallMemberVo.setLevelName(dic.getDescription());
//        }
        LambdaQueryWrapper<MallMemberCollection> collectionQuery = new LambdaQueryWrapper<>();
        collectionQuery.eq(MallMemberCollection::getMemberId, id);
        List<MallMemberCollection> collectionList = mallMemberCollectionService.list(collectionQuery);
        mallMemberVo.setCollectionCnt(CollUtil.isNotEmpty(collectionList) ? collectionList.size() : 0);
        LambdaQueryWrapper<MallMemberFootprint> footprintQuery = new LambdaQueryWrapper<>();
        footprintQuery.eq(MallMemberFootprint::getMemberId, id);
        List<MallMemberFootprint> footprintList = mallMemberFootprintService.list(footprintQuery);
        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));
        //用户是否是团长
        List<MallTeamLeader> mallTeamLeaders = mallTeamLeaderMapper.selectListByMemberIdAndState(mallMember.getId(), MallTeamLeader.STATE_YES);
        if(CollUtil.isNotEmpty(mallTeamLeaders)){
            mallMemberVo.setIsTeamLeader(1);
        }else{
            mallMemberVo.setIsTeamLeader(2);
        }
//        mallMemberVo.setScore(wallet.getScore());
//        mallMemberVo.setPrizeScore(wallet.getPrizeScore());
//        mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id));
        return new FebsResponse().success().data(mallMemberVo);
    }
@@ -332,8 +342,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);
    }
@@ -428,7 +438,7 @@
        Long id = LoginUserUtil.getLoginUser().getId();
        MallMember member = this.baseMapper.selectById(id);
        member.setBindPhone(accountAndCodeDto.getAccount());
        member.setPhone(accountAndCodeDto.getAccount());
        this.baseMapper.updateById(member);
    }
@@ -436,15 +446,7 @@
    public BigDecimal canMoney() {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
        BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId);
        BigDecimal canMoney = wallet.getCommission();
        if (profit != null) {
            if(canMoney.compareTo(BigDecimal.ZERO) > 0) {
                canMoney = canMoney.subtract(profit);
            }
        }
        return canMoney;
        return wallet.getBalance().setScale(2,BigDecimal.ROUND_DOWN);
    }
    @Override
@@ -591,6 +593,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);
@@ -616,8 +652,8 @@
                }
            }
            String token = IdUtil.simpleUUID();
            redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000);
            redisUtils.set(redisKey, token, 360000);
            redisUtils.set(token, JSONObject.toJSONString(mallMember), -1);
            redisUtils.set(redisKey, token, -1);
            Map<String, Object> authInfo = new HashMap<>();
            authInfo.put("token", token);
            authInfo.put("appid", xcxProperties.getXcxAppid());
@@ -648,7 +684,7 @@
        if(StrUtil.isNotEmpty(avatarUrl)){
            mallMember.setAvatar(avatarUrl);
        }
        mallMember.setSex(apiXcxSaveInfoDto.getGender() == 1 ? "女" : "男");
//        mallMember.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
        this.baseMapper.updateById(mallMember);
        return new FebsResponse().success();
    }
@@ -696,7 +732,7 @@
            authInfo.put("token", token);
            authInfo.put("member", mallMember);
            authInfo.put("rasToken", generateAsaToken(token));
            return new FebsResponse().success().message("登陆成功");
            return new FebsResponse().success().data(authInfo);
        }
        return new FebsResponse().fail().message("验证码错误");
    }
@@ -713,21 +749,121 @@
            DataDictionaryCustom rangeSize = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode());
            if(ObjectUtil.isEmpty(rangeSize)){
                return new FebsResponse().fail().message("系统繁忙");
                return new FebsResponse().success().data(2);
            }
            if(StrUtil.isBlank(rangeSize.getValue())){
                return new FebsResponse().fail().message("系统繁忙");
                return new FebsResponse().success().data(2);
            }
            //方位大小,换成单位:米
            Integer value = Integer.parseInt(rangeSize.getValue()) * 1000;
            //根据经纬度获取周围团长的距离
            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByLonAndLat(longitude, latitude);
            if(ObjectUtil.isEmpty(mallTeamLeader)){
                return new FebsResponse().success().data(2);
            }
            Double distance = mallTeamLeader.getDistance();
            if(value <= distance){
                return new FebsResponse().fail().message("系统繁忙");
                return new FebsResponse().success().data(2);
            }
        }
        return new FebsResponse().success();
        return new FebsResponse().success().data(1);
    }
    private final IXcxPayService iXcxPayService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public FebsResponse rechargeWallet(ApiRechargeWalletDto apiRechargeWalletDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        BigDecimal amount = apiRechargeWalletDto.getAmount();
        if(BigDecimal.ZERO.compareTo(amount)>0){
            return new FebsResponse().fail().message("请输入正确的充值金额");
        }
        Integer type = apiRechargeWalletDto.getType();
        if(2 == type){
            //成为合伙人的充值金额
            MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(apiRechargeWalletDto.getAgentApplyId());
            BigDecimal agentPrice = mallAgentRecord.getAmount();
//            DataDictionaryCustom agentPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.PRICE_AMOUNT.getType(),
//                    DataDictionaryEnum.PRICE_AMOUNT.getCode());
//            String agentPrice = agentPriceDic.getValue();
//            BigDecimal price = new BigDecimal(agentPrice);
            if(agentPrice.compareTo(amount) != 0){
                return new FebsResponse().fail().message("成为合伙人的金额为"+agentPrice);
            }
        }
        String rechargeNo = "CZ_"+MallUtils.getOrderNum();
        apiRechargeWalletDto.setRechargeNo(rechargeNo);
        apiRechargeWalletDto.setMemberId(memberId);
        BrandWCPayRequestData brandWCPayRequestData = null;
        try {
            brandWCPayRequestData = iXcxPayService.startRechargeWallet(apiRechargeWalletDto);
        } catch (Exception e) {
            throw new FebsException("支付失败");
        }
        mallMoneyFlowService.addMoneyFlow(
                memberId,
                amount,
                MoneyFlowTypeEnum.RECHARGE.getValue(),
                rechargeNo,
                FlowTypeEnum.BALANCE.getValue(),
                "余额充值",1);
        String wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
        String payResultStr = brandWCPayRequestData.getPrepay_id();
        Map<String, Object> map = new HashMap<>();
        map.put("orderInfo", payResultStr);
        map.put("wxResultStr", wxResultStr);
        return new FebsResponse().success().data(map).message("充值即将到账");
    }
    @Override
    public void updateMemberAgent(Long memberId,String levelCode) {
        mallAgentRecordMapper.updateStateByMemberId(memberId);
        MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(memberId);
        //更新用户表中的LEVEL
        MallMember mallMember = this.baseMapper.selectById(mallAgentRecord.getMemberId());
        mallMember.setLevel(levelCode);
        this.baseMapper.updateById(mallMember);
    }
    @Override
    public FebsResponse agentDetail() {
        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.AGENT_DETAILS.getType(), DataDictionaryEnum.AGENT_DETAILS.getCode());
        Map<String, Object> map = new HashMap<>();
        if(ObjectUtil.isNotEmpty(dataDictionaryCustom)){
            map.put("agentDetail", dataDictionaryCustom.getValue());
        }
        return new FebsResponse().success().data(map);
    }
    @Override
    public FebsResponse activityInfo() {
        DataDictionaryCustom activityBulletinDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.ACTIVITY_BULLETIN.getType(), DataDictionaryEnum.ACTIVITY_BULLETIN.getCode());
        DataDictionaryCustom giveAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.GIVE_AMOUNT.getType(), DataDictionaryEnum.GIVE_AMOUNT.getCode());
        DataDictionaryCustom giveStateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.GIVE_STATE.getType(), DataDictionaryEnum.GIVE_STATE.getCode());
        Map<String, Object> map = new HashMap<>();
        if(ObjectUtil.isNotEmpty(activityBulletinDic)){
            map.put("activityBulletin",
                    ObjectUtil.isEmpty(activityBulletinDic.getValue()) ? "暂无活动" : activityBulletinDic.getValue());
        }
        if(ObjectUtil.isNotEmpty(giveAmountDic)){
            map.put("giveAmount",
                    ObjectUtil.isEmpty(giveAmountDic.getValue()) ? 0 : giveAmountDic.getValue());
        }
        map.put("giveState",giveStateDic.getValue());
        return new FebsResponse().success().data(map);
    }
    @Override
    public FebsResponse agentApplyInfo() {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        ApiMallAgentRecordVo apiMallAgentRecordVo = mallAgentRecordMapper.selectApiMallAgentRecordVoByMemberIdAndState(memberId,MallAgentRecord.APPLY_ING);
        return new FebsResponse().success().data(apiMallAgentRecordVo);
    }
    private  String getXcxLoginUrl(String code) {