From 1fc5510367dcf321ac85e50e31c9dcdaaf5cd09e Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 21 Dec 2022 11:56:27 +0800 Subject: [PATCH] 20221221 --- src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 207 insertions(+), 2 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 c9ca6a6..cb00b93 100644 --- a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java +++ b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java @@ -1,16 +1,25 @@ package cc.mrbird.febs.mall.quartz; -import cc.mrbird.febs.common.enumerates.OrderStatusEnum; -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; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -24,6 +33,21 @@ @Autowired private MallOrderInfoMapper orderInfoMapper; + + @Autowired + private MallMemberMapper mallMemberMapper; + + @Autowired + private DataDictionaryCustomMapper dataDictionaryCustomMapper; + + @Autowired + private MallMemberStarBuyMapper mallMemberStarBuyMapper; + + @Autowired + private IApiMallMemberWalletService memberWalletService; + + @Autowired + private IMallMoneyFlowService mallMoneyFlowService; @Scheduled(cron = "0 0/5 * * * ? ") public void overtimeJob() { @@ -42,4 +66,185 @@ } } + + @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(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); + } + } + } + } + + @Scheduled(cron = "0 0 1 * * ? ") + public void updateMemberAgentLevel() { + log.info("会员代理等级升级任务执行"); + /** + * 获取会员信息 + * 1、已经升级成为一星 + */ + /** + * 区代 + * 1、自身一星 + * 2、直推三个星级 + * 3、团队五个星级 + */ + updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_ONE.getType(),DataDictionaryEnum.AGENT_ONE.getCode()); + /** + * 县代 + * 1、自身2星 + * 2、直推5个星级 + * 3、团队50个星级 + */ + updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_TWO.getType(),DataDictionaryEnum.AGENT_TWO.getCode()); + updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_THREE.getType(),DataDictionaryEnum.AGENT_THREE.getCode()); + updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_FOUR.getType(),DataDictionaryEnum.AGENT_FOUR.getCode()); + updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_FIVE.getType(),DataDictionaryEnum.AGENT_FIVE.getCode()); + } + + private void updateMemberAgentLevelByName(String name,String code){ + DataDictionaryCustom agentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + name, + code + ); + JSONObject jsonObject = JSONUtil.parseObj(agentDic.getValue()); + //自身星级 + String levelSelf = jsonObject.get("levelSelf").toString(); + //直推星级数量 + String directLevelCnt = jsonObject.get("directLevelCnt").toString(); + //团队星级数量 + String teamLevelCnt = jsonObject.get("teamLevelCnt").toString(); + //两个市场均有上一个代理等级 + String minTeamLevelCnt = jsonObject.get("minTeamLevelCnt").toString(); + 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()); + //团队中星级会员数量 + Integer teamCnt = mallMemberMapper.selectByReferersIdAndAccountLevel(mallMember.getInviteId(),MemberAccountLevelEnum.NORMAL.getName()); + //两个市场均有上一个代理等级 + Integer minCnt = 0; + if(0 < Integer.parseInt(minTeamLevelCnt)){ + String minLevel = MemberAgentLevelEnum.AGENT_ONE.minLevel(code); + //获取所有直推用户 + List<MallMember> mallMembers = mallMemberMapper.selectByRefererId(mallMember.getInviteId()); + if(CollUtil.isNotEmpty(mallMembers) && mallMembers.size() > 2){ + Integer levelCnt = 0; + for(MallMember directMember : mallMembers){ + Integer minlevelCnt = mallMemberMapper.selectByReferersIdAndLevel(directMember.getInviteId(),minLevel); + if(0 < minlevelCnt){ + levelCnt = levelCnt + 1; + } + if(levelCnt >= Integer.parseInt(minTeamLevelCnt)){ + minCnt = 1; + break; + } + } + } + }else{ + //区代不需要判断这个市场条件 + minCnt = 1; + } + if(Integer.parseInt(directLevelCnt) <= directCnt + && Integer.parseInt(teamLevelCnt) <= teamCnt + && minCnt > 0){ + //更新会员代理等级 + mallMemberMapper.updateLevelById(MemberAgentLevelEnum.AGENT_ONE.getNameByCode(code),mallMember.getId()); + } + } + } + } } -- Gitblit v1.9.1