From e94e6721a4aeb8c21e97878239ec3429fc76d1ad Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 08 May 2023 14:23:45 +0800 Subject: [PATCH] 创建订单之前的判断修改 --- src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 130 +++++++++++++++++++++++++++++++++++++------ 1 files changed, 112 insertions(+), 18 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..49962a3 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) @@ -770,25 +771,32 @@ * 每次拿重试次数大于零 * 按ID asc排序的十条数据 */ - List<MallMqRecord> mallMqRecords = mallMqRecordMapper.selectByStateLimitTen(2); - if(CollUtil.isEmpty(mallMqRecords)){ - return; - } - for(MallMqRecord mallMqRecord : mallMqRecords){ - Integer retryTimes = mallMqRecord.getRetryTimes(); - if(retryTimes <= 0){ - continue; - } - retryTimes = retryTimes - 1; - mallMqRecord.setRetryTimes(retryTimes); - mallMqRecordMapper.updateById(mallMqRecord); - - Long orderId = mallMqRecord.getOrderId(); - agentProducer.sendPerkMoneyMsg(orderId); - } +// List<MallMqRecord> mallMqRecords = mallMqRecordMapper.selectByStateLimitTen(2); +// if(CollUtil.isEmpty(mallMqRecords)){ +// return; +// } +// DateTime dateTime = DateUtil.offsetMinute(new Date(), -5); +// for(MallMqRecord mallMqRecord : mallMqRecords){ +// if(DateUtil.compare(dateTime,mallMqRecord.getCreateTime()) <= 0){ +// continue; +// } +// Integer retryTimes = mallMqRecord.getRetryTimes(); +// if(retryTimes <= 0){ +// continue; +// } +// retryTimes = retryTimes - 1; +// mallMqRecord.setRetryTimes(retryTimes); +// mallMqRecordMapper.updateById(mallMqRecord); +// +// Long orderId = mallMqRecord.getOrderId(); +// if(mallMqRecord.getState() == 2){ +// agentProducer.sendPerkMoneyMsg(orderId); +// } +// } } @Override + @Transactional(rollbackFor = Exception.class) public void scoreRecordReleaseJob() { /** * 每日按照比例释放记录的百分比到用户的绿色凭证账户 @@ -831,6 +839,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public void achieveReleaseJob() { /** * 业绩产生凭证 @@ -863,8 +872,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 +1023,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.BALANCE.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