xiaoyong931011
2022-11-03 4957e91b9cbd769a95872329d5fd628c211d5655
20221021
6 files modified
201 ■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java 60 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java 101 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
@@ -26,4 +26,6 @@
    FebsResponse awardInfo();
    void updatePlanOrderItem();
    void endOnHookMessage(Long orderId);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
@@ -444,6 +444,66 @@
        }
    }
    @Override
    public void endOnHookMessage(Long orderId) {
        IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId);
        if(ObjectUtil.isEmpty(igtOnHookPlanOrder)){
            return;
        }
        Long memberId = igtOnHookPlanOrder.getMemberId();
        BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount();
        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
        if(ObjectUtil.isEmpty(dappMemberEntity)){
            return;
        }
        //避免重复
        QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId());
        List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper);
        if(CollUtil.isNotEmpty(dappOnHookDones)){
            return;
        }
        //生成记录
        DappOnHookDone dappOnHookDone = new DappOnHookDone(dappMemberEntity.getId(), igtOnHookPlanOrder.getId());
        dappOnHookDoneDao.insert(dappOnHookDone);
        //获取收益率
        DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity());
        String identityDicValue = identityDic.getValue();
        JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue);
        BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
                .multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
        //获取收益
        BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
        String refererIds = dappMemberEntity.getRefererIds();
        List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true);
        //生成流水佣金和盈利分成和流水记录,返回剩余盈利
        BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId());
        //平台分成,返回剩余盈利
        BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,totalProfit,igtOnHookPlanOrder.getId());
        totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal);
        igtOnHookPlanOrder.setState(2);
        //一次挂机剩余的全部金额
        BigDecimal totalMoney = totalProfit.add(planAmount);
        igtOnHookPlanOrder.setProfit(totalProfit);
        igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
        dappMemberEntity.setIsOnHook(3);
        dappMemberDao.updateById(dappMemberEntity);
        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
        BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
        dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney);
        BigDecimal add = availableAmount.add(totalMoney);
        BigDecimal subtract = add.subtract(totalProfit);
        DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5,igtOnHookPlanOrder.getId());
        dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity);
    }
    private String getProfitCase(String identity,BigDecimal balance){
        //匹配会员等级获取对应的收益率
        List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.LEVEL_MB.getType());
src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.rabbit.producer.UsdtUpdateProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
@@ -23,6 +24,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.Format;
@@ -277,6 +279,9 @@
    }
    @Resource
    private UsdtUpdateProducer usdtUpdateProducer;
//    @Scheduled(cron = "0/5 * * * * ? ")
    @Scheduled(cron = "0 0/1 * * * ? ")
    public void updatePlanOrder(){
@@ -287,54 +292,56 @@
//            //更新状态避免重复查询
//            igtOnHookPlanOrderDao.updateByIds(ids);
            for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){
                Long memberId = igtOnHookPlanOrder.getMemberId();
                BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount();
                usdtUpdateProducer.sendOnHookEnd(igtOnHookPlanOrder.getId());
                DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
                //避免重复
                QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>();
                objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId());
                List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper);
                if(CollUtil.isNotEmpty(dappOnHookDones)){
                    continue;
                }
                //生成记录
                DappOnHookDone dappOnHookDone = new DappOnHookDone(dappMemberEntity.getId(), igtOnHookPlanOrder.getId());
                dappOnHookDoneDao.insert(dappOnHookDone);
                //获取收益率
                DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity());
                String identityDicValue = identityDic.getValue();
                JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue);
                BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
                        .multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
                //获取收益
                BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
                String refererIds = dappMemberEntity.getRefererIds();
                List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true);
                //生成流水佣金和盈利分成和流水记录,返回剩余盈利
                BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId());
                //平台分成,返回剩余盈利
                BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,totalProfit,igtOnHookPlanOrder.getId());
                totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal);
                igtOnHookPlanOrder.setState(2);
                //一次挂机剩余的全部金额
                BigDecimal totalMoney = totalProfit.add(planAmount);
                igtOnHookPlanOrder.setProfit(totalProfit);
                igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
                dappMemberEntity.setIsOnHook(3);
                dappMemberDao.updateById(dappMemberEntity);
                DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
                BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
                dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney);
                BigDecimal add = availableAmount.add(totalMoney);
                BigDecimal subtract = add.subtract(totalProfit);
                DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5,igtOnHookPlanOrder.getId());
                dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity);
//                Long memberId = igtOnHookPlanOrder.getMemberId();
//                BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount();
//
//                DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
//                //避免重复
//                QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>();
//                objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId());
//                List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper);
//                if(CollUtil.isNotEmpty(dappOnHookDones)){
//                    continue;
//                }
//                //生成记录
//                DappOnHookDone dappOnHookDone = new DappOnHookDone(dappMemberEntity.getId(), igtOnHookPlanOrder.getId());
//                dappOnHookDoneDao.insert(dappOnHookDone);
//                //获取收益率
//                DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity());
//                String identityDicValue = identityDic.getValue();
//                JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue);
//                BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
//                        .multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
//                //获取收益
//                BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
//
//                String refererIds = dappMemberEntity.getRefererIds();
//                List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true);
//                //生成流水佣金和盈利分成和流水记录,返回剩余盈利
//                BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId());
//                //平台分成,返回剩余盈利
//                BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,totalProfit,igtOnHookPlanOrder.getId());
//                totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal);
//
//                igtOnHookPlanOrder.setState(2);
//                //一次挂机剩余的全部金额
//                BigDecimal totalMoney = totalProfit.add(planAmount);
//
//                igtOnHookPlanOrder.setProfit(totalProfit);
//                igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
//                dappMemberEntity.setIsOnHook(3);
//                dappMemberDao.updateById(dappMemberEntity);
//
//                DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
//                BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
//                dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney);
//
//                BigDecimal add = availableAmount.add(totalMoney);
//                BigDecimal subtract = add.subtract(totalProfit);
//                DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5,igtOnHookPlanOrder.getId());
//                dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity);
            }
        }
src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
@@ -508,4 +508,22 @@
        return BindingBuilder.bind(queueWholeBomb()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_WHOLE_BOMB);
    }
    // === 更新用户挂机 start ===
    public static final String END_ON_HOOK_EXCHANGE = "exchange_end_on_hook";
    public static final String END_ON_HOOK_QUEUE = "queue_end_on_hook";
    public static final String END_ON_HOOK_ROUTE_KEY = "route_key_end_on_hook";
    @Bean
    public Queue endOnHookQueue() {
        // 定义一个名称为QUEUE_A,持久化的队列
        return new Queue(END_ON_HOOK_QUEUE, true);
    }
    public DirectExchange endOnHookExchange() {
        return new DirectExchange(END_ON_HOOK_EXCHANGE);
    }
    @Bean
    public Binding endOnHookBind() {
        return BindingBuilder.bind(endOnHookQueue()).to(endOnHookExchange()).with(RabbitMqConfig.END_ON_HOOK_ROUTE_KEY);
    }
    // === 更新用户挂机 end ===
}
src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
@@ -5,6 +5,7 @@
import cc.mrbird.febs.dapp.chain.TrxUsdtUpdateService;
import cc.mrbird.febs.dapp.chain.UsdtErc20UpdateService;
import cc.mrbird.febs.dapp.chain.entity.EthUsdtChargeDto;
import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService;
import cc.mrbird.febs.job.BlockCoinUpdateJob;
import cc.mrbird.febs.rabbit.RabbitMqConfig;
import cn.hutool.core.util.StrUtil;
@@ -34,8 +35,18 @@
    private BlockCoinService blockCoinService;
    @Resource
    private ApiIgtOnHookPlanService apiIgtOnHookPlanService;
    @Resource
    TrxUsdtUpdateService trxUsdtUpdateService;
    @RabbitListener(queues = RabbitMqConfig.END_ON_HOOK_QUEUE)
    public void endOnHook(Long orderId) {
        log.info("处理用户结束挂机的消息:{}#", orderId);
        apiIgtOnHookPlanService.endOnHookMessage(orderId);
    }
    @RabbitListener(queues = RabbitMqConfig.QUEUE_USDT_UPDATE)
    public void doSomething(String content) {
        log.info("#USDT同步---->{}#", content);
src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
@@ -1,5 +1,6 @@
package cc.mrbird.febs.rabbit.producer;
import cc.mrbird.febs.rabbit.QueueEnum;
import cc.mrbird.febs.rabbit.RabbitMqConfig;
import cn.hutool.core.util.IdUtil;
import lombok.extern.slf4j.Slf4j;
@@ -7,6 +8,8 @@
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.UUID;
/**
 * @author wzy
@@ -24,6 +27,12 @@
        rabbitTemplate.setConfirmCallback(this);
    }
    public void sendOnHookEnd(Long orderId) {
        log.info("发送用户结束挂机的消息:{}", orderId);
        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
        rabbitTemplate.convertAndSend(RabbitMqConfig.END_ON_HOOK_EXCHANGE, RabbitMqConfig.END_ON_HOOK_ROUTE_KEY, orderId, correlationData);
    }
    public void sendMsg(String content) {
        CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_USDT_UPDATE, RabbitMqConfig.ROUTING_KEY_USDT_UPDATE, content, correlationData);