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