From 3ea3c013bb241c05d0e6a2c4344d9b708ffa1e61 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 09 Mar 2023 16:01:46 +0800
Subject: [PATCH] 下单,余额支付,转账,分享奖,星级奖励,商品贡献值,补贴三倍回购

---
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java |  105 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 69 insertions(+), 36 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 cc45a65..3fce202 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
@@ -44,6 +44,7 @@
     private final IMallMoneyFlowService mallMoneyFlowService;
     private final MallMemberWalletMapper mallMemberWalletMapper;
     private final SqlSessionTemplate sqlSessionTemplate;
+    private final IApiMallMemberWalletService memberWalletService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -195,14 +196,25 @@
             //分享补贴金额
             BigDecimal sharePerkAmount = amount.multiply(sharePerkPercent);
 
-            iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId());
+            //所有合伙人补贴至消费礼包的三倍额度需要复购一次。
+            MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberUp.getId());
+            BigDecimal totalScore = mallMemberWallet.getTotalScore();
+            if(totalScore.compareTo(sharePerkAmount) < 0){
+                sharePerkAmount = totalScore;
+            }
+            if(BigDecimal.ZERO.compareTo(sharePerkAmount) < 0){
+                //减少补贴额度
+                memberWalletService.reduce(sharePerkAmount, memberId, "totalScore");
 
-            mallMoneyFlowService.addMoneyFlow(
-                    mallMemberUp.getId(),
-                    sharePerkAmount,
-                    MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(),
-                    mallOrderInfo.getOrderNo(),
-                    FlowTypeEnum.BALANCE.getValue());
+                iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId());
+
+                mallMoneyFlowService.addMoneyFlow(
+                        mallMemberUp.getId(),
+                        sharePerkAmount,
+                        MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(),
+                        mallOrderInfo.getOrderNo(),
+                        FlowTypeEnum.BALANCE.getValue());
+            }
         }
         /**
          * 星级奖励
@@ -228,6 +240,7 @@
      * @return
      */
     public List<MallMember> getStarRecord(List<MallMember> mallMembersOlds,String LevelParam,BigDecimal amount,String orderNo,Long memberId,int starPerkType){
+        long start = System.currentTimeMillis();
         //根据用户的level获取用户
         List<MallMember> mallMemberStars = memberMapper.selectMemberWithLevel(LevelParam);
         if(CollUtil.isNotEmpty(mallMembersOlds)){
@@ -260,6 +273,7 @@
                 //给当前等级的每个用户发放星级奖励
                 int count = 0;
                 List<Map<String,Object>> result = new ArrayList<>();
+                List<Map<String,Object>> resultReduce = new ArrayList<>();
                 List<MallMoneyFlow> mallMoneyFlows = new ArrayList<>();
                 for(MallMemberWallet mallMemberWallet : mallMemberWallets){
                     Map<String,Object> hashMap = new HashMap<>();
@@ -267,44 +281,63 @@
                     //当前用户的星级奖励
                     BigDecimal starPerkAmount = starPerkAmountAva
                             .multiply(new BigDecimal(starCnt)).abs().setScale(2, BigDecimal.ROUND_DOWN);
-                    hashMap.put("id",mallMemberWallet.getId());
-                    hashMap.put("starPerkAmount",starPerkAmount);
-                    result.add(hashMap);
-                    //生成星级奖励的流水对象
-                    MallMoneyFlow mallMoneyFlow = new MallMoneyFlow();
-                    mallMoneyFlow.setMemberId(mallMemberWallet.getMemberId());
-                    mallMoneyFlow.setAmount(starPerkAmount);
-                    mallMoneyFlow.setType(starPerkType);
-                    mallMoneyFlow.setOrderNo(orderNo);
-                    mallMoneyFlow.setRtMemberId(memberId);
-                    mallMoneyFlow.setStatus(2);
-                    mallMoneyFlow.setFlowType(FlowTypeEnum.BALANCE.getValue());
-                    mallMoneyFlows.add(mallMoneyFlow);
+                    BigDecimal totalScorePerk = mallMemberWallet.getTotalScore();
+                    if(totalScorePerk.compareTo(starPerkAmount) < 0){
+                        starPerkAmount = totalScorePerk;
+                    }
+                    if(BigDecimal.ZERO.compareTo(starPerkAmount) < 0){
+                        hashMap.put("id",mallMemberWallet.getId());
+                        hashMap.put("starPerkAmount",starPerkAmount);
+                        result.add(hashMap);
+                        resultReduce.add(hashMap);
+                        //生成星级奖励的流水对象
+                        MallMoneyFlow mallMoneyFlow = new MallMoneyFlow();
+                        mallMoneyFlow.setMemberId(mallMemberWallet.getMemberId());
+                        mallMoneyFlow.setAmount(starPerkAmount);
+                        mallMoneyFlow.setType(starPerkType);
+                        mallMoneyFlow.setOrderNo(orderNo);
+                        mallMoneyFlow.setRtMemberId(memberId);
+                        mallMoneyFlow.setStatus(2);
+                        mallMoneyFlow.setFlowType(FlowTypeEnum.BALANCE.getValue());
+                        mallMoneyFlows.add(mallMoneyFlow);
+                    }
                     count = count + 1;
                     if (count % 1000 == 0 || count == mallMemberWallets.size()) {
-                        int updateCount = mallMemberWalletMapper.updateStarByList(result);
-                        if(updateCount>0){
-                            log.info("============更新============第{}条数据===========",count);
+                        if(CollUtil.isNotEmpty(result)){
+                            int resultCount = mallMemberWalletMapper.updateStarByList(result);
+                            if(resultCount>0){
+                                log.info("============余额新增============第{}条数据===========",resultCount);
+                            }
+                            //每更新完一批数据,在result内进行删除操作。
+                            result.clear();
+
+                            int resultReduceCount = mallMemberWalletMapper.updateTotalScoreByList(resultReduce);
+                            if(resultReduceCount>0){
+                                log.info("============额度减少============第{}条数据===========",resultReduceCount);
+                            }
+                            //每更新完一批数据,在result内进行删除操作。
+                            resultReduce.clear();
                         }
-                        //每更新完一批数据,在result内进行删除操作。
-                        result.clear();
                     }
                 }
-                SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
-                MallMoneyFlowMapper mallMoneyFlowMapper = sqlSession.getMapper(MallMoneyFlowMapper.class);
-                long start = System.currentTimeMillis();
-                for(int i = 1; i <= mallMoneyFlows.size(); i++){
-                    mallMoneyFlowMapper.insertMoneyFlow(mallMoneyFlows.get(i-1));
-                    if (i % 1000 == 0 || i == mallMoneyFlows.size()) {
-                        long end = System.currentTimeMillis();
-                        log.info("============插入============第{}条数据,时间:{}===========",mallMoneyFlows.size(),(end - start)/1000);
-                        sqlSession.commit();
-                        sqlSession.clearCache();
+                if(CollUtil.isNotEmpty(mallMoneyFlows)){
+                    SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
+                    MallMoneyFlowMapper mallMoneyFlowMapper = sqlSession.getMapper(MallMoneyFlowMapper.class);
+
+                    for(int i = 1; i <= mallMoneyFlows.size(); i++){
+                        mallMoneyFlowMapper.insertMoneyFlow(mallMoneyFlows.get(i-1));
+                        if (i % 1000 == 0 || i == mallMoneyFlows.size()) {
+                            log.info("============插入流水============第{}条数据===========",mallMoneyFlows.size());
+                            sqlSession.commit();
+                            sqlSession.clearCache();
+                        }
                     }
+                    sqlSession.close();
                 }
-                sqlSession.close();
             }
         }
+        long end = System.currentTimeMillis();
+        log.info("============订单:{},时间:{}===========",orderNo,(end - start)/1000);
         return mallMemberStars;
     }
 }

--
Gitblit v1.9.1