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          |   98 ++++++++++++++----------
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java |   11 ++
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java        |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java   |   69 +++++++++++++++++
 src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java      |    1 
 5 files changed, 139 insertions(+), 42 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index 6d7e4d1..7b3d1dd 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,8 @@
 
 @Getter
 public enum DataDictionaryEnum {
+    //卖方确认获取5%的GSD
+    FCM_GSD_IN("FCM_GSD_IN","FCM_GSD_IN"),
     //卡牌互转手续费
     FCM_INSIDE_NFT_PERCENT("FCM_INSIDE_NFT_PERCENT","FCM_INSIDE_NFT_PERCENT"),
     //销毁数量 按照比例销毁或者返利给节点
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
index 95e17d8..a7ee16d 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
@@ -11,6 +11,7 @@
 @Getter
 public enum MoneyFlowTypeNewEnum {
 
+    NFT_TRANS_GFD(32,"赠送GFD"),
     NFT_TRANS_OUT_FEE(31,"卡牌转出手续费"),
     NFT_TRANS_IN(30,"卡牌转入"),
     NFT_TRANS_OUT(29,"卡牌转出"),
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 1ad6a24..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() {
         /**
@@ -947,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);
+                                }
+
                             }
 
                             /**
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
index f20f10d..342c16b 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
@@ -6,6 +6,7 @@
 import cc.mrbird.febs.common.enumerates.MoneyFlowTypeNewEnum;
 import cc.mrbird.febs.common.enumerates.ProductEnum;
 import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.mall.dto.*;
@@ -573,6 +574,16 @@
         mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_CONFIRM.getValue());
         mallProductSellRecordMapper.updateById(mallProductSellRecord);
 
+        DataDictionaryCustom gsdInDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.FCM_GSD_IN.getType(),
+                DataDictionaryEnum.FCM_GSD_IN.getCode()
+        );
+        BigDecimal gsdInPercent = new BigDecimal(gsdInDic.getValue()).multiply(AppContants.BASIC_PERCENT);
+        BigDecimal gsdIn = gsdInPercent.multiply(mallProductSellRecord.getNftCnt()).setScale(2,BigDecimal.ROUND_DOWN);
+        MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(mallProductSellRecord.getMemberId());
+        mallMemberAmount.setGsd(mallMemberAmount.getGsd().add(gsdIn));
+        mallMemberAmountMapper.updateGsdById(mallMemberAmount);
+
         agentProducer.sendFcmOrderSellInsureMsg(sellRecordId);
         return new FebsResponse().success();
     }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
index c18c8a4..eddabbb 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -1277,6 +1277,75 @@
                 MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId());
                 mallMemberAmount.setTotalPerk(mallMemberAmount.getTotalPerk().add(totalPerk));
                 mallMemberAmountMapper.updateTotalPerkById(mallMemberAmount);
+
+                /**
+                 * 更新用户上级收益,冻结7天,7天时间到期自动释放到动态钱包
+                 */
+                Long memberId = mallProductBuy.getMemberId();
+                MallMember mallMember = mallMemberMapper.selectById(memberId);
+                if(ObjectUtil.isNotEmpty(mallMember)){
+                    //直推
+                    String referrerId = mallMember.getReferrerId();
+                    MallMember directMember = mallMemberMapper.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 nftTotal = mallProductBuy.getNftTotal();
+                        BigDecimal basicPerkDirect = nftTotal.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN);
+                        /**
+                         * 如果用户是冻结,则直接销毁
+                         */
+                        Integer isFrozen = directMember.getIsFrozen();
+                        if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){
+
+                            MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(directMember.getId());
+                            if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(basicPerkDirect)) >= 0){
+                                return;
+                            }
+                            mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(basicPerkDirect));
+                            mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine);
+                            //插入一条流水记录
+                            String orderNo = MallUtils.getOrderNum("FNFTW");
+                            mallMoneyFlowService.addMoneyFlow(
+                                    memberId,
+                                    basicPerkDirect.negate(),
+                                    MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_WRONG.getValue(),
+                                    orderNo,
+                                    null,
+                                    FlowTypeNewEnum.NFT.getValue(),
+                                    MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_WRONG.getDescrition(),
+                                    AppContants.MEMBER_FLOW_ING);
+
+                        }else {
+
+                            MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(directMember.getId());
+                            if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(basicPerkDirect)) >= 0){
+                                return;
+                            }
+                            mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(basicPerkDirect));
+                            mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine);
+
+                            MallMemberAmount mallMemberAmountNft = mallMemberAmountMapper.selectByMemberId(directMember.getId());
+                            mallMemberAmountNft.setTrendsNft(mallMemberAmountNft.getTrendsNft().add(basicPerkDirect));
+                            mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountNft);
+
+                            //插入一条流水记录
+                            String orderNo = MallUtils.getOrderNum("NFT");
+                            mallMoneyFlowService.addMoneyFlow(
+                                    memberId,
+                                    basicPerkDirect,
+                                    MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_DONE.getValue(),
+                                    orderNo,
+                                    null,
+                                    FlowTypeNewEnum.NFT.getValue(),
+                                    MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_DONE.getDescrition(),
+                                    AppContants.MEMBER_FLOW_DONE);
+                        }
+                    }
+                }
             }
         }
     }

--
Gitblit v1.9.1