From a7c6abad7c9e59285542156c40081fa54e2df2de Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 20 Dec 2022 17:20:23 +0800 Subject: [PATCH] 20221220 1、每天两点会员星级保证金返还任务 2、每天两点半会员星级更新任务 --- src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 112 insertions(+), 7 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java index 18f657c..57e3a6b 100644 --- a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java +++ b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java @@ -1,18 +1,17 @@ package cc.mrbird.febs.mall.quartz; -import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; -import cc.mrbird.febs.common.enumerates.MemberAccountLevelEnum; -import cc.mrbird.febs.common.enumerates.MemberAgentLevelEnum; -import cc.mrbird.febs.common.enumerates.OrderStatusEnum; -import cc.mrbird.febs.mall.entity.DataDictionaryCustom; -import cc.mrbird.febs.mall.entity.MallMember; -import cc.mrbird.febs.mall.entity.MallOrderInfo; +import cc.mrbird.febs.common.enumerates.*; +import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.mall.mapper.MallMemberMapper; +import cc.mrbird.febs.mall.mapper.MallMemberStarBuyMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; +import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; +import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; @@ -20,6 +19,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -40,6 +40,15 @@ @Autowired private DataDictionaryCustomMapper dataDictionaryCustomMapper; + @Autowired + private MallMemberStarBuyMapper mallMemberStarBuyMapper; + + @Autowired + private IApiMallMemberWalletService memberWalletService; + + @Autowired + private IMallMoneyFlowService mallMoneyFlowService; + @Scheduled(cron = "0 0/5 * * * ? ") public void overtimeJob() { log.info("订单超时任务执行"); @@ -58,6 +67,102 @@ } + @Scheduled(cron = "0 0 2 * * ? ") + public void returnBuyStarAmount(){ + log.info("会员星级保证金返还任务执行"); + /** + * 1、生效中的记录 + * 2、判断剩余返还金额 + * 3、生成流水记录 + * 4、增加用户金额 + */ + //生效中记录 + List<MallMemberStarBuy> mallMemberStarBuys = mallMemberStarBuyMapper.selectByStatus(1); + if(CollUtil.isEmpty(mallMemberStarBuys)){ + return; + } + for(MallMemberStarBuy mallMemberStarBuy : mallMemberStarBuys){ + Long memberId = mallMemberStarBuy.getMemberId(); + MallMember mallMember = mallMemberMapper.selectById(memberId); + //用户不存在跳出本次循环 + if(ObjectUtil.isEmpty(mallMember)){ + continue; + } + //返还总金额 + BigDecimal amount = mallMemberStarBuy.getAmount(); + //剩余返还总金额不足,跳出本次循环 + BigDecimal avaAmount = mallMemberStarBuy.getAvaAmount(); + if(avaAmount.compareTo(BigDecimal.ZERO) <= 0){ + continue; + } + //每次返还比例 + DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.RETURN_PERCENT.getType(), + DataDictionaryEnum.RETURN_PERCENT.getCode() + ); + String returnPercentStr = returnPercentDic.getValue(); + BigDecimal returnPercent = new BigDecimal(returnPercentStr).multiply(new BigDecimal(0.01)); + //本次返还金额 + BigDecimal returnAmount = amount.multiply(returnPercent); + /** + * 如果本次返还金额大于剩余返还总金额 + */ + if(returnAmount.compareTo(avaAmount) >= 0){ + returnAmount = avaAmount; + avaAmount = BigDecimal.ZERO; + }else{ + avaAmount = avaAmount.subtract(returnAmount).setScale(BigDecimal.ROUND_DOWN,2); + } + //增加用户金额 + memberWalletService.addBalance(returnAmount,mallMember.getId()); + //生成流水记录 + Long subsidyAmountFlowId = mallMoneyFlowService.addMoneyFlow( + mallMember.getId(), + mallMemberStarBuy.getBuyCode(), + returnAmount, + MallMoneyFlowTypeEnum.RETURN_MARKET_STAR.getCode(), + MallMoneyFlow.STATUS_SUCCESS, + MallMoneyFlow.IS_RETURN_Y, + mallMember.getId(), + FlowTypeEnum.BALANCE.getValue(), + MallMoneyFlowTypeEnum.RETURN_MARKET_STAR.getName() + ); + //更新记录 + mallMemberStarBuyMapper.updateAvaAmountById(avaAmount,mallMemberStarBuy.getId()); + } + } + + @Scheduled(cron = "0 30 2 * * ? ") + public void updateMemberAccountLevelAndBuyStarRecord(){ + log.info("会员星级更新任务执行"); + //生效中的记录 + List<MallMemberStarBuy> mallMemberStarBuys = mallMemberStarBuyMapper.selectByStatus(1); + if(CollUtil.isEmpty(mallMemberStarBuys)){ + return; + } + for(MallMemberStarBuy mallMemberStarBuy : mallMemberStarBuys){ + Long memberId = mallMemberStarBuy.getMemberId(); + MallMember mallMember = mallMemberMapper.selectById(memberId); + //用户不存在跳出本次循环 + if(ObjectUtil.isEmpty(mallMember)){ + continue; + } + BigDecimal avaAmount = mallMemberStarBuy.getAvaAmount(); + /** + * 剩余返还总金额等于零,更新为已结束 + * 判断用户是否还有其他的购买星级的生效记录 + */ + if(BigDecimal.ZERO.compareTo(avaAmount) >= 0){ + mallMemberStarBuyMapper.updateStatusById(2,mallMemberStarBuy.getId()); + List<MallMemberStarBuy> mallMemberStarBuysIng = mallMemberStarBuyMapper.selectByStatusAndMemberId(1,memberId); + //如果没有其他生效中的记录,则更新用户的星级 + if(CollUtil.isEmpty(mallMemberStarBuysIng)){ + mallMemberMapper.updateAccountLevelById(MemberAccountLevelEnum.NORMAL.getName(), memberId); + } + } + } + } + @Scheduled(cron = "0 0 1 * * ? ") public void updateMemberAgentLevel() { log.info("会员代理等级升级任务执行"); -- Gitblit v1.9.1