From e6667c792be898c41cda7d850dda02a403ef79c2 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 06 Apr 2023 10:35:20 +0800
Subject: [PATCH] 关于积分凭证

---
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java |   92 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 90 insertions(+), 2 deletions(-)

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 5993c95..68303f5 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
@@ -58,6 +58,7 @@
     private final AgentProducer agentProducer;
     private final MallScoreRecordMapper mallScoreRecordMapper;
     private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper;
+    private final MallScoreVoucherMapper mallScoreVoucherMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -789,6 +790,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void scoreRecordReleaseJob() {
         /**
          * 每日按照比例释放记录的百分比到用户的绿色凭证账户
@@ -831,6 +833,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void achieveReleaseJob() {
         /**
          * 业绩产生凭证
@@ -863,8 +866,17 @@
 
         /**
          * 获取每日最大产生的凭证数量
+         *      改成每日产出固定值
          */
-        BigDecimal achieveDailyRelease = getAchieveDailyRelease();
+//        BigDecimal achieveDailyRelease = getAchieveDailyRelease();
+        DataDictionaryCustom achieveReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                GreenScoreEnum.ACHIEVE_RELEASE.getType(),
+                GreenScoreEnum.ACHIEVE_RELEASE.getCode()
+        );
+        BigDecimal achieveDailyRelease = new BigDecimal(achieveReleaseDic.getValue() == null ? "0" : achieveReleaseDic.getValue());
+        if(achieveDailyRelease.compareTo(BigDecimal.ZERO) <= 0){
+            return;
+        }
 
         if(achieveTotal.compareTo(achieveMax) < 0){
             BigDecimal divide = achieveTotal.divide(achieveMax, 2, BigDecimal.ROUND_DOWN);
@@ -1005,10 +1017,86 @@
         mallScoreAchieveRelease.setReleaseNo(scoreNo);
         mallScoreAchieveRelease.setVoucherExpect(achieveDailyRelease);
         mallScoreAchieveRelease.setVoucherReal(achieveDailyReleaseReal);
-        mallScoreAchieveReleaseMapper.updateById(mallScoreAchieveRelease);
+        mallScoreAchieveReleaseMapper.insert(mallScoreAchieveRelease);
 
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void selaHalfVoucher(String price) {
+        /**
+         * 获取所有凭证大于0的用户
+         * 当前价格卖出账户的一半凭证
+         */
+        BigDecimal scorePrice = new BigDecimal(price == null ? "0" : price);
+        if(scorePrice.compareTo(BigDecimal.ZERO) <= 0){
+            return;
+        }
+        List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectList(null);
+        if(CollUtil.isNotEmpty(mallMemberWallets)){
+            List<MallMemberWallet> wallets = mallMemberWallets
+                    .stream()
+                    .filter(mallMemberWallet -> mallMemberWallet.getVoucherCnt().compareTo(BigDecimal.ZERO) > 0)
+                    .collect(Collectors.toList());
+            if(CollUtil.isNotEmpty(wallets)){
+                BigDecimal scorePoolCntAdd = BigDecimal.ZERO;
+                //绿色积分剩余数量
+                for(MallMemberWallet mallMemberWallet : wallets){
+                    //增加账户的凭证金额,减少当前的一半的凭证数量
+                    BigDecimal voucherCnt = mallMemberWallet.getVoucherCnt().divide(new BigDecimal(2), 2, BigDecimal.ROUND_DOWN)
+                            .setScale(2,BigDecimal.ROUND_DOWN);
+                    BigDecimal voucherAmountAdd = scorePrice.multiply(voucherCnt)
+                            .setScale(2,BigDecimal.ROUND_DOWN);
+                    mallMemberWalletMapper.addVorCherAmountAndCntById(voucherAmountAdd,voucherCnt,mallMemberWallet.getId());
+
+                    scorePoolCntAdd = scorePoolCntAdd.add(voucherCnt);
+
+                    DataDictionaryCustom surplusCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                            GreenScoreEnum.SURPLUS_CNT.getType(),
+                            GreenScoreEnum.SURPLUS_CNT.getCode()
+                    );
+                    //增加绿色积分剩余数量
+                    BigDecimal surplusCnt = new BigDecimal(surplusCntDic.getValue() == null ? "0" : surplusCntDic.getValue());
+                    BigDecimal voucherCntAdd = surplusCnt.add(voucherCnt).setScale(2,BigDecimal.ROUND_DOWN);
+                    surplusCntDic.setValue(voucherCntAdd.toString());
+                    dataDictionaryCustomMapper.updateById(surplusCntDic);
+
+                    /**
+                     * 生成一条卖出记录
+                     */
+                    String voucherNo = MallUtils.getOrderNum("VS");
+                    MallScoreVoucher mallScoreVoucher = new MallScoreVoucher();
+                    mallScoreVoucher.setVoucherNo(voucherNo);
+                    mallScoreVoucher.setMemberId(mallMemberWallet.getMemberId());
+                    mallScoreVoucher.setVoucherCnt(voucherCnt);
+                    mallScoreVoucher.setPrice(scorePrice);
+                    mallScoreVoucher.setVoucherAmount(voucherAmountAdd);
+                    mallScoreVoucher.setType("S");
+                    mallScoreVoucherMapper.insert(mallScoreVoucher);
+
+                    //产生一条流水记录
+                    mallMoneyFlowService.addMoneyFlow(
+                            mallMemberWallet.getMemberId(),
+                            voucherAmountAdd,
+                            MoneyFlowTypeEnum.VOUCHER_SALE.getValue(),
+                            voucherNo,
+                            FlowTypeEnum.VOUCHER_AMOUNT.getValue());
+                }
+
+                //增加积分凭证池的凭证数量
+                DataDictionaryCustom scorePoolCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                        GreenScoreEnum.SCORE_POOL_CNT.getType(),
+                        GreenScoreEnum.SCORE_POOL_CNT.getCode()
+                );
+                //增加绿色积分剩余数量
+                BigDecimal scorePoolCnt = new BigDecimal(scorePoolCntDic.getValue() == null ? "0" : scorePoolCntDic.getValue());
+                scorePoolCnt = scorePoolCnt.add(scorePoolCntAdd);
+                scorePoolCntDic.setValue(scorePoolCnt.toString());
+                dataDictionaryCustomMapper.updateById(scorePoolCntDic);
+            }
+        }
+    }
+
     /**
      * 给用户的增加凭证数据,并且增加流水
      * @param memberAchieveRelease 释放数量

--
Gitblit v1.9.1