| | |
| | | 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; |
| | |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | |
| | | @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("订单超时任务执行"); |
| | |
| | | |
| | | } |
| | | |
| | | @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("会员代理等级升级任务执行"); |