From 38371de8bcb3b06d200a61b93356bad3507a1896 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Tue, 26 Mar 2024 09:38:19 +0800
Subject: [PATCH] 抽奖

---
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java |  192 +++++++++++++++++++++++++++++++----------------
 1 files changed, 126 insertions(+), 66 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index 93cdfb0..ea908e8 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -824,25 +824,36 @@
         List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord,  MemberLevelEnum.THIRD_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue());
         List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord,  MemberLevelEnum.SECOND_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue());
     }
-        public static void main(String[] args) {
-//            Long number = 0L; // 这里可以替换成你需要检查的数字
-//            if (number % 3 == 0) {
-//                System.out.println(number + " 可以被3整除");
-//            } else {
-//                System.out.println(number + " 不能被3整除");
+//        public static void main(String[] args) {
+////            Long number = 0L; // 这里可以替换成你需要检查的数字
+////            if (number % 3 == 0) {
+////                System.out.println(number + " 可以被3整除");
+////            } else {
+////                System.out.println(number + " 不能被3整除");
+////            }
+////
+////            DateTime nowTimeFormat = DateUtil.parseTime(DateUtil.formatTime(DateUtil.date()));
+////            System.out.println(nowTimeFormat);
+//            BigDecimal bigDecimal = new BigDecimal("1");
+//            BigDecimal cycle = new BigDecimal("2");
+//            BigDecimal remainder = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余
+//            System.out.println(remainder);
+//            BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余
+//            if(remainderDirect.compareTo(BigDecimal.ONE) == 0){
+//                System.out.println(remainderDirect);
 //            }
-//
-//            DateTime nowTimeFormat = DateUtil.parseTime(DateUtil.formatTime(DateUtil.date()));
-//            System.out.println(nowTimeFormat);
-            BigDecimal bigDecimal = new BigDecimal("1");
-            BigDecimal cycle = new BigDecimal("2");
-            BigDecimal remainder = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余
-            System.out.println(remainder);
-            BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余
-            if(remainderDirect.compareTo(BigDecimal.ONE) == 0){
-                System.out.println(remainderDirect);
-            }
+//        }
+
+
+
+    public static void main(String[] args) {
+        DateTime dateTime = DateUtil.parseDate("2024-3-27");
+        System.out.println(dateTime);
+        System.out.println(DateUtil.compare(DateUtil.date(),dateTime));
+        if(DateUtil.compare(DateUtil.date(),dateTime)<= 0){
+            System.out.println(dateTime);
         }
+    }
     @Override
     public void BuyToSell() {
         /**
@@ -899,7 +910,7 @@
                         continue;
                     }
                     BigDecimal nftTotal = mallProductBuy.getNftTotal();
-                    BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01)));
+                    BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01))).setScale(2,BigDecimal.ROUND_DOWN);
 
                     if(totalPerk.compareTo(profit) <= 0){
                         profit = totalPerk;
@@ -908,6 +919,19 @@
                     }else{
                         mallProductBuy.setTotalPerk(totalPerk.subtract(profit).setScale(2,BigDecimal.ROUND_DOWN));
                         mallProductBuyMapper.updateById(mallProductBuy);
+                    }
+
+                    MallMemberAmount mallMemberAmountPerk = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId());
+                    if(BigDecimal.ZERO.compareTo(mallMemberAmountPerk.getTotalPerk()) >= 0){
+                        continue;
+                    }
+                    if(mallMemberAmountPerk.getTotalPerk().compareTo(profit) <= 0){
+                        profit = mallMemberAmountPerk.getTotalPerk();
+                        mallMemberAmountPerk.setTotalPerk(BigDecimal.ZERO);
+                        mallMemberAmountMapper.updateTotalPerkById(mallMemberAmountPerk);
+                    }else{
+                        mallMemberAmountPerk.setTotalPerk(mallMemberAmountPerk.getTotalPerk().subtract(profit).setScale(2,BigDecimal.ROUND_DOWN));
+                        mallMemberAmountMapper.updateTotalPerkById(mallMemberAmountPerk);
                     }
 //                    insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO);
                     String orderNoSY = MallUtils.getOrderNum("SYNFT");
@@ -934,33 +958,36 @@
                         Long memberId = mallProductBuy.getMemberId();
                         MallMember mallMember = memberMapper.selectById(memberId);
                         if(ObjectUtil.isNotEmpty(mallMember)){
-                            //直推
-                            String referrerId = mallMember.getReferrerId();
-                            MallMember directMember = memberMapper.selectInfoByInviteId(referrerId);
-                            if(ObjectUtil.isNotEmpty(directMember)){
-                                BigDecimal basicPerkDirectPercent = new BigDecimal(dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                                        DataDictionaryEnum.BASIC_PERK_DIRECT.getType(),
-                                        DataDictionaryEnum.BASIC_PERK_DIRECT.getCode()
-                                ).getValue()).multiply(new BigDecimal("0.01"));
+                            if(DateUtil.compare(payTime,DateUtil.parseDate("2024-3-26"))<= 0){
+                                //直推
+                                String referrerId = mallMember.getReferrerId();
+                                MallMember directMember = memberMapper.selectInfoByInviteId(referrerId);
+                                if(ObjectUtil.isNotEmpty(directMember)){
+                                    BigDecimal basicPerkDirectPercent = new BigDecimal(dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                                            DataDictionaryEnum.BASIC_PERK_DIRECT.getType(),
+                                            DataDictionaryEnum.BASIC_PERK_DIRECT.getCode()
+                                    ).getValue()).multiply(new BigDecimal("0.01"));
 //                            BigDecimal basicPerkDirect = profit.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN);
-                                BigDecimal basicPerkDirect = nftTotal.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN);
-                                /**
-                                 * 先插入流水记录,然后定时器每小时,循环一次找寻对应的数据执行
-                                 */
-                                String orderNo = MallUtils.getOrderNum("DNFT");
-                                mallMoneyFlowService.addMoneyFlow(
-                                        directMember.getId(),
-                                        basicPerkDirect,
-                                        MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getValue(),
-                                        orderNo,
-                                        null,
-                                        FlowTypeNewEnum.NFT.getValue(),
-                                        MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getDescrition(),
-                                        AppContants.MEMBER_FLOW_ING);
+                                    BigDecimal basicPerkDirect = nftTotal.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN);
+                                    /**
+                                     * 先插入流水记录,然后定时器每小时,循环一次找寻对应的数据执行
+                                     */
+                                    String orderNo = MallUtils.getOrderNum("DNFT");
+                                    mallMoneyFlowService.addMoneyFlow(
+                                            directMember.getId(),
+                                            basicPerkDirect,
+                                            MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getValue(),
+                                            orderNo,
+                                            null,
+                                            FlowTypeNewEnum.NFT.getValue(),
+                                            MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getDescrition(),
+                                            AppContants.MEMBER_FLOW_ING);
 
-                                MallMemberAmount mallMemberAmountDirect = mallMemberAmountMapper.selectByMemberId(directMember.getId());
-                                mallMemberAmountDirect.setFrozenNft(mallMemberAmountDirect.getFrozenNft().add(basicPerkDirect));
-                                mallMemberAmountMapper.updateFrozenNftById(mallMemberAmountDirect);
+                                    MallMemberAmount mallMemberAmountDirect = mallMemberAmountMapper.selectByMemberId(directMember.getId());
+                                    mallMemberAmountDirect.setFrozenNft(mallMemberAmountDirect.getFrozenNft().add(basicPerkDirect));
+                                    mallMemberAmountMapper.updateFrozenNftById(mallMemberAmountDirect);
+                                }
+
                             }
 
                             /**
@@ -1067,7 +1094,8 @@
          * 当前时间比结束时间大
          */
         if(nowTime.compareTo(endTime) >= 0){
-            List<MallProductBuyRecord> mallProductBuyRecords = mallProductBuyRecordMapper.selectByState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue());
+            List<MallProductBuyRecord> mallProductBuyRecords = mallProductBuyRecordMapper.selectByState(
+                    ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue());
             if(CollUtil.isNotEmpty(mallProductBuyRecords)){
                 for(MallProductBuyRecord mallProductBuyRecord : mallProductBuyRecords){
                     /**
@@ -1200,7 +1228,7 @@
         queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING);
         queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue());
         List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow);
-        if(CollUtil.isNotEmpty(mallMoneyFlows)){
+        if(CollUtil.isEmpty(mallMoneyFlows)){
             return;
         }
 
@@ -1223,7 +1251,7 @@
             Long memberId = mallMoneyFlow.getMemberId();
             MallMember mallMember = memberMapper.selectById(memberId);
             Integer isFrozen = mallMember.getIsFrozen();
-            if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){
+            if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                 mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                 mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount);
@@ -1240,6 +1268,13 @@
                         AppContants.MEMBER_FLOW_ING);
 
             }else {
+                MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(memberId);
+                if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())) >= 0){
+                    continue;
+                }
+                mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount()));
+                mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine);
+
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                 mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                 mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount()));
@@ -1249,7 +1284,7 @@
                 String orderNo = MallUtils.getOrderNum("NFT");
                 mallMoneyFlowService.addMoneyFlow(
                         memberId,
-                        mallMoneyFlow.getAmount().negate(),
+                        mallMoneyFlow.getAmount(),
                         MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_DONE.getValue(),
                         orderNo,
                         null,
@@ -1267,7 +1302,7 @@
         queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING);
         queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue());
         List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow);
-        if(CollUtil.isNotEmpty(mallMoneyFlows)){
+        if(CollUtil.isEmpty(mallMoneyFlows)){
             return;
         }
 
@@ -1290,7 +1325,7 @@
             Long memberId = mallMoneyFlow.getMemberId();
             MallMember mallMember = memberMapper.selectById(memberId);
             Integer isFrozen = mallMember.getIsFrozen();
-            if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){
+            if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                 mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                 mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount);
@@ -1307,6 +1342,13 @@
                         AppContants.MEMBER_FLOW_ING);
 
             }else {
+                MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(memberId);
+                if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())) >= 0){
+                    continue;
+                }
+                mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount()));
+                mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine);
+
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                 mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                 mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount()));
@@ -1316,7 +1358,7 @@
                 String orderNo = MallUtils.getOrderNum("NFT");
                 mallMoneyFlowService.addMoneyFlow(
                         memberId,
-                        mallMoneyFlow.getAmount().negate(),
+                        mallMoneyFlow.getAmount(),
                         MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT_DONE.getValue(),
                         orderNo,
                         null,
@@ -1334,7 +1376,7 @@
         queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING);
         queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue());
         List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow);
-        if(CollUtil.isNotEmpty(mallMoneyFlows)){
+        if(CollUtil.isEmpty(mallMoneyFlows)){
             return;
         }
 
@@ -1357,7 +1399,7 @@
             Long memberId = mallMoneyFlow.getMemberId();
             MallMember mallMember = memberMapper.selectById(memberId);
             Integer isFrozen = mallMember.getIsFrozen();
-            if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){
+            if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                 mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                 mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount);
@@ -1374,6 +1416,14 @@
                         AppContants.MEMBER_FLOW_ING);
 
             }else {
+
+                MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(memberId);
+                if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())) >= 0){
+                    continue;
+                }
+                mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount()));
+                mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine);
+
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                 mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                 mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount()));
@@ -1383,7 +1433,7 @@
                 String orderNo = MallUtils.getOrderNum("NFT");
                 mallMoneyFlowService.addMoneyFlow(
                         memberId,
-                        mallMoneyFlow.getAmount().negate(),
+                        mallMoneyFlow.getAmount(),
                         MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS_DONE.getValue(),
                         orderNo,
                         null,
@@ -1419,8 +1469,13 @@
             //上级
             String referrerId = mallMember.getReferrerId();
             MallMember mallMemberRef = memberMapper.selectInfoByInviteId(referrerId);
+            if(ObjectUtil.isEmpty(mallMemberRef)){
+                continue;
+            }
             List<MallMember> mallMembersAll = memberMapper.selectAllChildAgentListByInviteId(referrerId);
-
+            if(ObjectUtil.isEmpty(mallMembersAll)){
+                continue;
+            }
             List<MallMember> mallMembers = memberMapper.selectByRefererId(referrerId);
             Set<Long> mallMembersSet = mallMembers.stream().map(MallMember::getId).collect(Collectors.toSet());
             mallMembersSet.retainAll(collect);
@@ -1445,18 +1500,23 @@
                 TeamPerkDto teamPerkDto = JSONObject.parseObject(levelDic.getValue(), TeamPerkDto.class);
                 Integer directCntLevel = teamPerkDto.getDirectCnt();
                 Integer teamCnt = teamPerkDto.getTeamCnt();
-                if(directCntLevel >= intersection.size() &&
-                        teamCnt >= mallMembersAll.size()){
-                    mallMemberRef.setLevel(level);
-                    memberMapper.updateById(mallMemberRef);
-                    flag = true;
-                }
-                String nextLevel = MemberLevelNewEnum.ZERO_LEVEL.getNextLevel(level);
-                level = nextLevel;
-                if(level.equals(MemberLevelNewEnum.WU_LEVEL.getType()) &&
-                        nextLevel.equals(MemberLevelNewEnum.WU_LEVEL.getType()) ){
-                    mallMemberRef.setLevel(level);
-                    memberMapper.updateById(mallMemberRef);
+                if(directCntLevel <= intersection.size()){
+                    if(teamCnt <= mallMembersAll.size()){
+                        mallMemberRef.setLevel(level);
+                        memberMapper.updateById(mallMemberRef);
+
+                        String nextLevel = MemberLevelNewEnum.ZERO_LEVEL.getNextLevel(level);
+                        level = nextLevel;
+                        if(level.equals(MemberLevelNewEnum.WU_LEVEL.getType()) &&
+                                nextLevel.equals(MemberLevelNewEnum.WU_LEVEL.getType()) ){
+                            mallMemberRef.setLevel(level);
+                            memberMapper.updateById(mallMemberRef);
+                            flag = true;
+                        }
+                    }else{
+                        flag = true;
+                    }
+                }else{
                     flag = true;
                 }
             }

--
Gitblit v1.9.1