From 78bbc1dae1bb20acb51fd454adf53b3ab5ae97b3 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 23 Dec 2022 15:20:11 +0800 Subject: [PATCH] 20221221 --- src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java | 131 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 124 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..0828c17 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("订单超时任务执行"); @@ -56,6 +65,109 @@ } } + } + + @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)).setScale(2,BigDecimal.ROUND_DOWN); + //本次返还金额 + BigDecimal returnAmount = amount.multiply(returnPercent).setScale(2,BigDecimal.ROUND_DOWN); + /** + * 如果本次返还金额大于剩余返还总金额 + */ + if(returnAmount.compareTo(avaAmount) >= 0){ + returnAmount = avaAmount; + avaAmount = BigDecimal.ZERO; + }else{ + avaAmount = avaAmount.subtract(returnAmount).setScale(2,BigDecimal.ROUND_DOWN); + } + //增加用户金额 + 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); + + //如果代理等级为手动设置,则跳过该会员 + int levelStatus = ObjectUtil.isEmpty(mallMember.getLevelStatus()) ? 0 : 1; + if(1 == levelStatus){ + continue; + } + mallMemberMapper.updateLevelById(MemberAgentLevelEnum.AGENT.getName(),mallMember.getId()); + } + } + } } @Scheduled(cron = "0 0 1 * * ? ") @@ -101,6 +213,11 @@ List<MallMember> agentLevelList = mallMemberMapper.selectByAccountLevel(levelSelf); if(CollUtil.isNotEmpty(agentLevelList)){ for(MallMember mallMember : agentLevelList){ + //如果代理等级为手动设置,则跳过该会员 + int levelStatus = ObjectUtil.isEmpty(mallMember.getLevelStatus()) ? 0 : 1; + if(1 == levelStatus){ + continue; + } //有星级的直推 Integer directCnt = mallMemberMapper.selectByRefererIdAndAccountLevel(mallMember.getInviteId(),MemberAccountLevelEnum.NORMAL.getName()); //团队中星级会员数量 -- Gitblit v1.9.1