| | |
| | | import cc.mrbird.febs.mall.service.IMallAchieveService; |
| | | import cc.mrbird.febs.mall.service.IMallMoneyFlowService; |
| | | import cc.mrbird.febs.mall.service.IMemberProfitService; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | **/ |
| | | @Slf4j |
| | | @Component |
| | | @ConditionalOnProperty(prefix = "system", name = "job", havingValue = "true") |
| | | public class OrderSettlementJob { |
| | | |
| | | @Autowired |
| | | private MallOrderInfoMapper mallOrderInfoMapper; |
| | | |
| | | @Autowired |
| | | private MallOrderItemMapper mallOrderItemMapper; |
| | | |
| | | @Autowired |
| | | private IApiMallMemberWalletService memberWalletService; |
| | |
| | | @Autowired |
| | | private IMallAchieveService mallAchieveService; |
| | | |
| | | @Autowired |
| | | private AgentProducer agentProducer; |
| | | |
| | | /** |
| | | * 普通商品结算 |
| | | */ |
| | | @Scheduled(cron = "0 0 0 * * ?") |
| | | public void normalGoodsSettlementJob() { |
| | | log.info("普通商品结算"); |
| | | List<MallOrderInfo> orderInfos = mallOrderInfoMapper.selectOrderInfoWithNormalGoods(DateUtil.offsetDay(new Date(), -10)); |
| | | if (CollUtil.isEmpty(orderInfos)) { |
| | | return; |
| | | } |
| | | |
| | | for (MallOrderInfo orderInfo : orderInfos) { |
| | | MallMember member = mallMemberMapper.selectById(orderInfo.getMemberId()); |
| | | if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) { |
| | | continue; |
| | | } |
| | | |
| | | for (MallOrderItem item : orderInfo.getItems()) { |
| | | MallGoodsSku sku = mallGoodsSkuMapper.selectById(item.getSkuId()); |
| | | BigDecimal score = sku.getPresentPrice(); |
| | | |
| | | memberWalletService.add(score, member.getId(), "score"); |
| | | mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue()); |
| | | |
| | | mallAchieveService.add(item.getId()); |
| | | } |
| | | |
| | | // 普通商品动态分红结算 |
| | | memberProfitService.dynamicProfit(orderInfo.getId(), 1); |
| | | } |
| | | } |
| | | // @Scheduled(cron = "0 0 0 * * ?") |
| | | // public void normalGoodsSettlementJob() { |
| | | // log.info("普通商品结算"); |
| | | // List<MallOrderInfo> orderInfos = mallOrderInfoMapper.selectOrderInfoWithNormalGoods(DateUtil.offsetDay(new Date(), -10)); |
| | | // if (CollUtil.isEmpty(orderInfos)) { |
| | | // return; |
| | | // } |
| | | // |
| | | // for (MallOrderInfo orderInfo : orderInfos) { |
| | | // MallMember member = mallMemberMapper.selectById(orderInfo.getMemberId()); |
| | | // if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // for (MallOrderItem item : orderInfo.getItems()) { |
| | | // MallGoodsSku sku = mallGoodsSkuMapper.selectById(item.getSkuId()); |
| | | // BigDecimal score = sku.getPresentPrice(); |
| | | // |
| | | // memberWalletService.add(score, member.getId(), "score"); |
| | | // mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue()); |
| | | // |
| | | // mallAchieveService.add(item.getId()); |
| | | // } |
| | | // |
| | | // // 普通商品动态分红结算 |
| | | // memberProfitService.dynamicProfit(orderInfo.getId(), 1); |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 自动确认收货 |
| | | */ |
| | | @Scheduled(cron = "0 0 0 * * ?") |
| | | |
| | | // @Scheduled(cron = "1 * * * * ?") |
| | | public void orderAutoConfirmJob() { |
| | | log.info("自动确认收货"); |
| | | DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.OEDER_AUTO_CONFIRM.getType(), DataDictionaryEnum.OEDER_AUTO_CONFIRM.getCode()); |
| | | Integer value = Integer.parseInt(dic.getValue()); |
| | | List<MallOrderInfo> orderInfos = mallOrderInfoMapper.selectOrderByStatusAndPayTime(3,DateUtil.offsetDay(new Date(), -value)); |
| | | if(CollUtil.isNotEmpty(orderInfos)){ |
| | | for(MallOrderInfo orderInfo : orderInfos){ |
| | | //生成一条团长提成记录 |
| | | MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve(); |
| | | mallLeaderAchieve.setMemberId(orderInfo.getMemberId()); |
| | | mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo()); |
| | | mallLeaderAchieve.setAmount(orderInfo.getAmount()); |
| | | mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode()); |
| | | mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE); |
| | | mallLeaderAchieveMapper.insert(mallLeaderAchieve); |
| | | } |
| | | mallOrderInfoMapper.updateOrderConfirmStatus(DateUtil.offsetDay(new Date(), -value)); |
| | | // for(MallOrderInfo orderInfo : orderInfos){ |
| | | // MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode()); |
| | | // Integer profitSwitch = mallTeamLeader.getProfitSwitch()==null?2:mallTeamLeader.getProfitSwitch(); |
| | | // if(1 == profitSwitch){ |
| | | // BigDecimal bonusPercent =new BigDecimal(mallTeamLeader.getBonusPercent()==null?"0":mallTeamLeader.getBonusPercent()); |
| | | //// DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); |
| | | //// BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN); |
| | | // //生成一条团长提成记录 |
| | | // Long id = orderInfo.getId(); |
| | | // List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id); |
| | | // if(CollUtil.isNotEmpty(mallOrderItemList)){ |
| | | // for(MallOrderItem mallOrderItem : mallOrderItemList){ |
| | | // Integer state = mallOrderItem.getState() == null ? 1 : mallOrderItem.getState(); |
| | | // if(1 == state){ |
| | | // MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve(); |
| | | // mallLeaderAchieve.setMemberId(orderInfo.getMemberId()); |
| | | // mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo()); |
| | | // mallLeaderAchieve.setOrderItemId(mallOrderItem.getId()); |
| | | // BigDecimal itemAmount = mallOrderItem.getAmount(); |
| | | // mallLeaderAchieve.setAmount(itemAmount); |
| | | // BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN); |
| | | // mallLeaderAchieve.setProfitAmount(bigDecimal); |
| | | // mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode()); |
| | | // mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE); |
| | | // mallLeaderAchieveMapper.insert(mallLeaderAchieve); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | mallOrderInfoMapper.updateOrderConfirmStatus(DateUtil.date(),DateUtil.offsetDay(new Date(), -value)); |
| | | |
| | | orderInfos.forEach(item -> { |
| | | agentProducer.sendGetScoreMsg(item.getId()); |
| | | }); |
| | | } |
| | | } |
| | | /** |
| | | * 自动确认收货 |
| | | * 团长第二天才会结算前一天的所有提成 |
| | | * 从团长业绩表中查询出前一天的所有已完成订单金额*提成系数,得到今日提成 |
| | | * 修改业绩的状态 |
| | | * 并生成一条提成流水 |
| | | */ |
| | | // @Scheduled(cron = "0 0 1 * * ?") |
| | | @Scheduled(cron = "1 * * * * ?") |
| | | public void leaderAchieveAuto() { |
| | | log.info("团长每日提成"); |
| | | DataDictionaryCustom dicBonusSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_SWITCH.getType(), DataDictionaryEnum.BONUS_SWITCH.getCode()); |
| | | String bonusSwitch = dicBonusSwitch.getValue(); |
| | | if("1".equals(bonusSwitch)){ |
| | | DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); |
| | | BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN);; |
| | | //获取每日提成总数 |
| | | /** |
| | | * a.unique_code uniqueCode 团长特征码 |
| | | * , IFNULL(sum(a.amount),0) amount 每日提成总金额 |
| | | */ |
| | | //// @Scheduled(cron = "1 * * * * ?") |
| | | // public void leaderAchieveAuto() { |
| | | // log.info("团长每日提成"); |
| | | // //获取每日提成总数 |
| | | // /** |
| | | // * a.unique_code uniqueCode 团长特征码 |
| | | // * , IFNULL(sum(a.amount),0) amount 每日提成总金额 |
| | | // */ |
| | | // DateTime dateTime = DateUtil.offsetDay(new Date(), -1); |
| | | DateTime dateTime = DateUtil.offsetDay(new Date(), 0); |
| | | List<Map<String, String>> allLeaderAchieve = mallLeaderAchieveMapper.selectListByStateAndCreateTimeAndUniqueCode(MallLeaderAchieve.STATE_ONE,dateTime); |
| | | if (CollUtil.isNotEmpty(allLeaderAchieve)) { |
| | | for (Map<String, String> map : allLeaderAchieve) { |
| | | String uniqueCode = map.get("uniqueCode"); |
| | | //直接舍弃小数点的第三位 |
| | | BigDecimal amount = new BigDecimal(map.get("amount")).setScale(2,BigDecimal.ROUND_DOWN); |
| | | BigDecimal achieveMoney = amount.multiply(bonusPercent).setScale(2,BigDecimal.ROUND_DOWN); |
| | | MallMember mallMember = mallMemberMapper.selectInfoByInviteId(uniqueCode); |
| | | memberWalletService.addBalance(achieveMoney,mallMember.getId()); |
| | | String achieveNo = "TC."+ MallUtils.getOrderNum(); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | mallMember.getId(), |
| | | achieveMoney, |
| | | MoneyFlowTypeEnum.LEADERACHIEVE.getValue(), |
| | | achieveNo, |
| | | FlowTypeEnum.BALANCE.getValue()); |
| | | //// DateTime dateTime = DateUtil.offsetDay(new Date(), 0); |
| | | // List<Map<String, String>> allLeaderAchieve = mallLeaderAchieveMapper.selectListByStateAndCreateTimeAndUniqueCode(MallLeaderAchieve.STATE_ONE,dateTime); |
| | | // if (CollUtil.isNotEmpty(allLeaderAchieve)) { |
| | | // for (Map<String, String> map : allLeaderAchieve) { |
| | | // String uniqueCode = map.get("uniqueCode"); |
| | | // Object profitAmount = map.get("profitAmount"); |
| | | // |
| | | // MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(uniqueCode); |
| | | // Integer profitSwitch = mallTeamLeader.getProfitSwitch(); |
| | | // if(1 == profitSwitch){ |
| | | // //直接舍弃小数点的第三位 |
| | | // BigDecimal achieveMoney = new BigDecimal(String.valueOf(profitAmount)).setScale(2,BigDecimal.ROUND_DOWN); |
| | | // MallMember mallMember = mallMemberMapper.selectInfoByInviteId(uniqueCode); |
| | | // memberWalletService.addBalance(achieveMoney,mallMember.getId()); |
| | | // String achieveNo = "TC."+ MallUtils.getOrderNum(); |
| | | // mallMoneyFlowService.addMoneyFlow( |
| | | // mallMember.getId(), |
| | | // achieveMoney, |
| | | // MoneyFlowTypeEnum.LEADERACHIEVE.getValue(), |
| | | // achieveNo, |
| | | // FlowTypeEnum.BALANCE.getValue()); |
| | | // |
| | | // //更新到已提成状态 |
| | | // mallLeaderAchieveMapper.updateByUniqueCodeStateAndTime(DateUtil.date(),uniqueCode,MallLeaderAchieve.STATE_ONE,dateTime); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | //更新到已提成状态 |
| | | mallLeaderAchieveMapper.updateByUniqueCodeStateAndTime(uniqueCode,MallLeaderAchieve.STATE_ONE,dateTime); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | BigDecimal bigDecimal = new BigDecimal(0.1256).setScale(2,BigDecimal.ROUND_DOWN); |
| | | System.out.println(bigDecimal); |
| | | } |
| | | // public static void main(String[] args) { |
| | | // BigDecimal bigDecimal = new BigDecimal(0.1256).setScale(2,BigDecimal.ROUND_DOWN); |
| | | // System.out.println(bigDecimal); |
| | | // } |
| | | } |