From 3882ab4f0e77d46cddb08a4c67bbda6ba44ce8d8 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 19 Feb 2024 15:52:07 +0800
Subject: [PATCH] 文件上传服务器地址

---
 src/main/resources/templates/febs/views/modules/news/productNFTUpdate.html  |   10 +++++
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java        |   34 +++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java          |    2 +
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java |    9 ++++
 src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductNftVo.java             |    1 
 src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java                     |    8 ++++
 src/main/resources/templates/febs/views/modules/news/productNFTList.html    |    1 
 src/main/resources/mapper/modules/MallProductBuyMapper.xml                  |    6 +++
 src/main/java/cc/mrbird/febs/mall/service/IAgentService.java                |    2 +
 9 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
index b22b56d..5fd4cd1 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
@@ -31,4 +31,6 @@
     Integer selectListByMemberIdAndState(@Param("memberId")Long id);
 
     IPage<ApiOrderSellVo> selectSellListInPage(IPage<ApiOrderSellVo> page, @Param("record")ApiOrderSellDto apiOrderBuyDto);
+
+    List<MallProductBuy> selectTotalPerk();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
index abcc8fa..dee4e73 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -125,6 +125,14 @@
         agentService.BuyToSell();
     }
 
+    /**
+     * 用户预约完成之后,根据产品周期,将用户买单变成买单
+     */
+    @Scheduled(cron = "0 0 3 * * ?")
+    public void memberLevelDown() {
+        agentService.memberLevelDown();
+    }
+
 
     /**
      * 用户等级升级
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
index 6579919..685d6a8 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -55,4 +55,6 @@
     void equalsMemberPerk();
 
     void memberLevelUp();
+
+    void memberLevelDown();
 }
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 7bdf4dd..93cdfb0 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
@@ -891,8 +891,24 @@
                     /**
                      * 用户的账户增加对应的收益
                      */
+
+                    BigDecimal totalPerk = mallProductBuy.getTotalPerk();
+                    if(BigDecimal.ZERO.compareTo(totalPerk) >= 0){
+                        mallProductBuy.setTotalPerk(BigDecimal.ZERO);
+                        mallProductBuyMapper.updateById(mallProductBuy);
+                        continue;
+                    }
                     BigDecimal nftTotal = mallProductBuy.getNftTotal();
                     BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01)));
+
+                    if(totalPerk.compareTo(profit) <= 0){
+                        profit = totalPerk;
+                        mallProductBuy.setTotalPerk(BigDecimal.ZERO);
+                        mallProductBuyMapper.updateById(mallProductBuy);
+                    }else{
+                        mallProductBuy.setTotalPerk(totalPerk.subtract(profit).setScale(2,BigDecimal.ROUND_DOWN));
+                        mallProductBuyMapper.updateById(mallProductBuy);
+                    }
 //                    insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO);
                     String orderNoSY = MallUtils.getOrderNum("SYNFT");
                     mallMoneyFlowService.addMoneyFlow(
@@ -908,6 +924,7 @@
                     MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId());
                     mallMemberAmountMine.setTrendsNft(mallMemberAmountMine.getTrendsNft().add(profit));
                     mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountMine);
+
 
                     BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余
                     if(remainderDirect.compareTo(BigDecimal.ONE) == 0){
@@ -1446,6 +1463,23 @@
         }
     }
 
+    @Override
+    public void memberLevelDown() {
+        List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectTotalPerk();
+        if(CollUtil.isEmpty(mallProductBuys)){
+            return;
+        }
+        for(MallProductBuy mallProductBuy : mallProductBuys){
+            BigDecimal totalPerk = mallProductBuy.getTotalPerk();
+            if(BigDecimal.ZERO.compareTo(totalPerk) >= 0 ){
+                Long memberId = mallProductBuy.getMemberId();
+                MallMember mallMember = memberMapper.selectById(memberId);
+                mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.getCode());
+                memberMapper.updateById(mallMember);
+            }
+        }
+    }
+
     public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva,
                            BigDecimal nftFee,BigDecimal fcmFeeCnt){
         String orderNo = MallUtils.getOrderNum("NFT");
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 392321b..a042cff 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
@@ -66,6 +66,7 @@
     private final MallProductSellRecordMapper mallProductSellRecordMapper;
     private final MallMemberAmountMapper mallMemberAmountMapper;
     private final IMallMoneyFlowService iMallMoneyFlowService;
+    private final MallProductNftMapper mallProductNftMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -1262,9 +1263,17 @@
             BigDecimal nftCntTotalBuy = mallProductBuyRecords.stream().map(MallProductBuyRecord::getPickNftCnt).reduce(BigDecimal.ZERO, BigDecimal::add);
             MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(buyId);
             if(nftCntTotalBuy.compareTo(mallProductBuy.getNftTotal()) >= 0){
+
+                Long productNftId = mallProductBuy.getProductNftId();
+                MallProductNft mallProductNft = mallProductNftMapper.selectById(productNftId);
+                BigDecimal perkTime = mallProductNft.getPerkTime();
+                BigDecimal totalPerk = perkTime.multiply(mallProductBuy.getNftTotal()).setScale(2, BigDecimal.ROUND_DOWN);
+
+                mallProductBuy.setTotalPerk(totalPerk);
                 mallProductBuy.setState(ProductEnum.PRODUCT_BUY_SUCCESS.getValue());
                 mallProductBuy.setPayTime(DateUtil.date());
                 mallProductBuyMapper.updateById(mallProductBuy);
+
             }
         }
     }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductNftVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductNftVo.java
index 0f780e5..be1ee21 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductNftVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductNftVo.java
@@ -20,4 +20,5 @@
     private int state;//产品状态 1:开启 0:关闭
     private int memberCnt;//预约人数
     private int memberReal;//已预约人数
+    private BigDecimal perkTime;//收益倍数
 }
diff --git a/src/main/resources/mapper/modules/MallProductBuyMapper.xml b/src/main/resources/mapper/modules/MallProductBuyMapper.xml
index f39012b..d74e5ca 100644
--- a/src/main/resources/mapper/modules/MallProductBuyMapper.xml
+++ b/src/main/resources/mapper/modules/MallProductBuyMapper.xml
@@ -62,4 +62,10 @@
         order by a.CREATED_TIME desc
     </select>
 
+    <select id="selectTotalPerk" resultType="cc.mrbird.febs.mall.entity.MallProductBuy">
+        select SUM(total_perk) from mall_product_buy
+        where state = 3
+        GROUP BY member_id;
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/news/productNFTList.html b/src/main/resources/templates/febs/views/modules/news/productNFTList.html
index 7eb5680..5c56868 100644
--- a/src/main/resources/templates/febs/views/modules/news/productNFTList.html
+++ b/src/main/resources/templates/febs/views/modules/news/productNFTList.html
@@ -133,6 +133,7 @@
                     {field: 'priceToken', title: '宝石', minWidth: 120,align:'center'},
                     {field: 'profit', title: '收益(%)', minWidth: 120,align:'center'},
                     {field: 'cycle', title: '周期(天)', minWidth: 120,align:'center'},
+                    {field: 'perkTime', title: '收益倍数', minWidth: 120,align:'center'},
                     {field: 'memberCnt', title: '预约总数', minWidth: 120,align:'center'},
                     {field: 'memberReal', title: '已预约数', minWidth: 120,align:'center'},
                     {field: 'nftImg', title: '缩略图',
diff --git a/src/main/resources/templates/febs/views/modules/news/productNFTUpdate.html b/src/main/resources/templates/febs/views/modules/news/productNFTUpdate.html
index 58d84e9..d464a25 100644
--- a/src/main/resources/templates/febs/views/modules/news/productNFTUpdate.html
+++ b/src/main/resources/templates/febs/views/modules/news/productNFTUpdate.html
@@ -69,6 +69,15 @@
         </div>
         <div class="layui-row layui-col-space10 layui-form-item">
             <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">收益倍数:</label>
+                <div class="layui-input-block">
+                    <input type="text" name="perkTime" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
+                    <div class="layui-form-mid layui-word-aux"> 5 即百分之五</div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-row layui-col-space10 layui-form-item">
+            <div class="layui-col-lg6">
                 <label class="layui-form-label febs-form-item-require">预约总数:</label>
                 <div class="layui-input-block">
                     <input type="text" name="memberCnt" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
@@ -178,6 +187,7 @@
                 "state": mallProductNft.state,
                 "memberCnt": mallProductNft.memberCnt,
                 "memberReal": mallProductNft.memberReal,
+                "perkTime": mallProductNft.perkTime,
             });
         }
     });

--
Gitblit v1.9.1