| | |
| | | package cc.mrbird.febs.dapp.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.contants.AppContants; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.tree.MatrixTree; |
| | | import cc.mrbird.febs.common.tree.MemberNode; |
| | | import cc.mrbird.febs.common.utils.LoginUserUtil; |
| | | import cc.mrbird.febs.common.utils.RedisUtils; |
| | | import cc.mrbird.febs.common.utils.SpringContextUtil; |
| | | import cc.mrbird.febs.dapp.chain.ChainEnum; |
| | | import cc.mrbird.febs.dapp.chain.ChainService; |
| | | import cc.mrbird.febs.dapp.contract.ContractMain; |
| | | import cc.mrbird.febs.dapp.dto.SystemDto; |
| | | import cc.mrbird.febs.dapp.dto.TransferDto; |
| | | import cc.mrbird.febs.dapp.entity.*; |
| | | import cc.mrbird.febs.dapp.enumerate.*; |
| | | import cc.mrbird.febs.dapp.mapper.*; |
| | |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUnit; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.date.Week; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jline.utils.Log; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.web3j.utils.Convert; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.BigInteger; |
| | | import java.math.RoundingMode; |
| | | import java.util.*; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantLock; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | * 新增一条业绩 |
| | | */ |
| | | MallAchieveRecord mallAchieveRecord = new MallAchieveRecord( |
| | | memberId,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime() |
| | | memberId,donateScore,donateScore,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime() |
| | | ); |
| | | mallAchieveRecordMapper.insert(mallAchieveRecord); |
| | | |
| | |
| | | } |
| | | Long perkMemberId = dappMemberEntity.getId(); |
| | | //获取当前用户所有进行中的业绩释放 |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(perkMemberId); |
| | | // List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(perkMemberId); |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberIdAndScore(perkMemberId); |
| | | |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | continue; |
| | |
| | | } |
| | | for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){ |
| | | Long memberId = dappFundFlowEntity.getMemberId(); |
| | | if(memberId == 2852L){ |
| | | Log.info("1"); |
| | | } |
| | | //当日预期总收益 |
| | | BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | |
| | | } |
| | | //当日预期总收益 |
| | | BigDecimal amountMagic = amount; |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId); |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | // List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId); |
| | | List<MallAchieveRecord> mallAchieveRecordsScore = mallAchieveRecordMapper.selectListByMemberIdAndScore(memberId); |
| | | if(CollUtil.isEmpty(mallAchieveRecordsScore)){ |
| | | |
| | | BigDecimal localTotalAchieve = amount; |
| | | /** |
| | | * 用户减少赠送积分 |
| | | */ |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId); |
| | | BigDecimal totalScore = dappWalletMineEntity.getTotalAmount(); |
| | | BigDecimal availableScore = dappWalletMineEntity.getAvailableAmount(); |
| | | if(BigDecimal.ZERO.compareTo(totalScore) >= 0){ |
| | | continue; |
| | | } |
| | | if(localTotalAchieve.compareTo(totalScore) >= 0){ |
| | | localTotalAchieve = totalScore; |
| | | //当实际获取大于用户的赠送积分,将用户更新为未激活 |
| | | dappMemberEntity.setActiveStatus(2); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | } |
| | | |
| | | DappAccountMoneyChangeEntity reduceScoreAMC = new DappAccountMoneyChangeEntity( |
| | | memberId, |
| | | totalScore, |
| | | amountMagic.negate(), |
| | | localTotalAchieve.negate(), |
| | | AccountFlowEnum.SCORE.getCode(), |
| | | null); |
| | | dappAccountMoneyChangeDao.insert(reduceScoreAMC); |
| | | |
| | | //插入积分流水 |
| | | DappFundFlowEntity scoreFlow = new DappFundFlowEntity( |
| | | AccountFlowEnum.SCORE.getCode(), |
| | | memberId, |
| | | localTotalAchieve.negate(), |
| | | FundFlowEnum.REDUCE_SCORE_REAL.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(scoreFlow); |
| | | |
| | | BigDecimal totalScoreRelease = totalScore.subtract(localTotalAchieve); |
| | | BigDecimal availableScoreRelease = availableScore.subtract(localTotalAchieve); |
| | | //更新积分账户 |
| | | dappWalletMineEntity.setTotalAmount(totalScoreRelease); |
| | | dappWalletMineEntity.setAvailableAmount(availableScoreRelease); |
| | | dappWalletMineDao.updateById(dappWalletMineEntity); |
| | | |
| | | |
| | | //用户增加余额 |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | BigDecimal totalAmount = dappWalletCoinEntity.getTotalAmount(); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | |
| | | DappAccountMoneyChangeEntity addAmountAMC = new DappAccountMoneyChangeEntity( |
| | | memberId, |
| | | totalAmount, |
| | | amountMagic, |
| | | localTotalAchieve, |
| | | AccountFlowEnum.AMOUNT.getCode(), |
| | | null); |
| | | dappAccountMoneyChangeDao.insert(addAmountAMC); |
| | | //插入余额流水 |
| | | DappFundFlowEntity amountFlow = new DappFundFlowEntity( |
| | | AccountFlowEnum.AMOUNT.getCode(), |
| | | memberId, |
| | | localTotalAchieve, |
| | | FundFlowEnum.ADD_AMOUNT_REAL.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(amountFlow); |
| | | |
| | | BigDecimal totalAmountRelease = totalAmount.add(localTotalAchieve); |
| | | BigDecimal availableAmountRelease = availableAmount.add(localTotalAchieve); |
| | | //更新余额账户 |
| | | dappWalletCoinEntity.setTotalAmount(totalAmountRelease); |
| | | dappWalletCoinEntity.setAvailableAmount(availableAmountRelease); |
| | | dappWalletCoinDao.updateById(dappWalletCoinEntity); |
| | | |
| | | StringBuffer content = new StringBuffer(); |
| | | if(amountMagic.compareTo(localTotalAchieve) > 0){ |
| | | content.append("今日可加速"+amountMagic.setScale(2,BigDecimal.ROUND_DOWN)+",实际加速"+localTotalAchieve.setScale(2,BigDecimal.ROUND_DOWN)+"" + |
| | | "烧伤"+amountMagic.subtract(localTotalAchieve).setScale(2,BigDecimal.ROUND_DOWN)+",原因消费金额1%加速上" + |
| | | "限,增加消费金额可获得更多收益"); |
| | | }else{ |
| | | content.append("今日可加速"+amountMagic.setScale(2,BigDecimal.ROUND_DOWN)+",实际加速"+localTotalAchieve.setScale(2,BigDecimal.ROUND_DOWN)+"" + |
| | | "烧伤"+amountMagic.subtract(localTotalAchieve).setScale(2,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | DappAccountMoneyChangeEntity record = new DappAccountMoneyChangeEntity( |
| | | memberId, |
| | | totalAmount, |
| | | amountMagic, |
| | | localTotalAchieve, |
| | | AccountFlowEnum.AMOUNT_RECORD.getCode(), |
| | | content.toString()); |
| | | dappAccountMoneyChangeDao.insert(record); |
| | | |
| | | //实时更新用户等级 |
| | | // chainProducer.sendAutoLevelUpTeamMsg(memberId); |
| | | |
| | | set.add(dappMemberEntity); |
| | | continue; |
| | | } |
| | | |
| | | |
| | | //实际获取总收益 |
| | | BigDecimal localTotalAchieve = BigDecimal.ZERO; |
| | | BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal totalAchieve = mallAchieveRecordsScore.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal totalAchieveCostAmount = mallAchieveRecordsScore.stream().map(MallAchieveRecord::getCostAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal totalScoreAva = mallAchieveRecordsScore.stream().map(MallAchieveRecord::getScore).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | //用户每日获取的最大值 |
| | | DataDictionaryCustom maxReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | |
| | | ); |
| | | BigDecimal maxRelease = new BigDecimal(ObjectUtil.isEmpty(maxReleaseDic) ? "1" : maxReleaseDic.getValue()); |
| | | //用户每日获取的最大值 |
| | | BigDecimal maxReleaseMember = totalAchieve.multiply(maxRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal maxReleaseMember = totalAchieveCostAmount.multiply(maxRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | if(amount.compareTo(maxReleaseMember) > 0){ |
| | | amount = maxReleaseMember; |
| | | } |
| | | //当日获取总收益大于总业绩 |
| | | if(amount.compareTo(totalAchieve) >= 0){ |
| | | for(MallAchieveRecord memberAchieve : mallAchieveRecords){ |
| | | // if(amount.compareTo(totalAchieve) >= 0){ |
| | | if(amount.compareTo(totalScoreAva) >= 0){ |
| | | for(MallAchieveRecord memberAchieve : mallAchieveRecordsScore){ |
| | | memberAchieve.setIsNormal(2); |
| | | memberAchieve.setAmount(BigDecimal.ZERO); |
| | | memberAchieve.setScore(BigDecimal.ZERO); |
| | | mallAchieveRecordMapper.updateById(memberAchieve); |
| | | } |
| | | localTotalAchieve = totalAchieve; |
| | | amount = amount.subtract(totalAchieve); |
| | | // localTotalAchieve = totalAchieve; |
| | | // amount = amount.subtract(totalAchieve); |
| | | localTotalAchieve = totalScoreAva; |
| | | amount = amount.subtract(totalScoreAva); |
| | | }else{ |
| | | /** |
| | | * |
| | |
| | | * amount 0 0 |
| | | * |
| | | */ |
| | | for(MallAchieveRecord memberAchieve : mallAchieveRecords){ |
| | | for(MallAchieveRecord memberAchieve : mallAchieveRecordsScore){ |
| | | BigDecimal achieveAmount = memberAchieve.getAmount(); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | BigDecimal achieveScoreAva = memberAchieve.getScore(); |
| | | if(BigDecimal.ZERO.compareTo(achieveScoreAva) >= 0){ |
| | | break; |
| | | }else if(amount.compareTo(achieveAmount) < 0){ |
| | | memberAchieve.setAmount(achieveAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN)); |
| | | }else if(amount.compareTo(achieveScoreAva) < 0){ |
| | | if(BigDecimal.ZERO.compareTo(achieveAmount.subtract(amount)) >= 0){ |
| | | memberAchieve.setAmount(BigDecimal.ZERO); |
| | | }else{ |
| | | memberAchieve.setAmount(achieveAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | memberAchieve.setScore(achieveScoreAva.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN)); |
| | | mallAchieveRecordMapper.updateById(memberAchieve); |
| | | localTotalAchieve = localTotalAchieve.add(amount); |
| | | amount = BigDecimal.ZERO; |
| | |
| | | }else{ |
| | | memberAchieve.setIsNormal(2); |
| | | memberAchieve.setAmount(BigDecimal.ZERO); |
| | | memberAchieve.setScore(BigDecimal.ZERO); |
| | | mallAchieveRecordMapper.updateById(memberAchieve); |
| | | localTotalAchieve = localTotalAchieve.add(achieveAmount); |
| | | amount = amount.subtract(achieveAmount); |
| | | localTotalAchieve = localTotalAchieve.add(achieveScoreAva); |
| | | amount = amount.subtract(achieveScoreAva); |
| | | } |
| | | } |
| | | } |
| | |
| | | dappAccountMoneyChangeDao.insert(record); |
| | | |
| | | //实时更新用户等级 |
| | | chainProducer.sendAutoLevelUpTeamMsg(memberId); |
| | | // chainProducer.sendAutoLevelUpTeamMsg(memberId); |
| | | |
| | | set.add(dappMemberEntity); |
| | | } |
| | |
| | | } |
| | | |
| | | BigDecimal packageTeamPerkCnt = new BigDecimal(packageTeamPerkCntDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | if(BigDecimal.ZERO.compareTo(packageTeamPerkCnt) >= 0){ |
| | | return; |
| | | } |
| | | if(packageTeamPerkCnt.compareTo(divide) >= 0){ |
| | | BigDecimal subtract = packageTeamPerkCnt.subtract(divide); |
| | | packageTeamPerkCntDic.setValue(subtract.toString()); |
| | |
| | | return; |
| | | } |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | if(dappMemberEntity.getId() == 2852){ |
| | | Log.info("1"); |
| | | } |
| | | /** |
| | | * 每个人的第一次入单之后的业绩不一样 |
| | | */ |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId()); |
| | | // List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId()); |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberIdAndScore(dappMemberEntity.getId()); |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | continue; |
| | | } |