package cc.mrbird.febs.mall.quartz; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallAchieveService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.service.IMemberProfitService; 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.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author wzy * @date 2022-06-15 **/ @Slf4j @Component public class OrderSettlementJob { @Autowired private MallOrderInfoMapper mallOrderInfoMapper; @Autowired private MallOrderItemMapper mallOrderItemMapper; @Autowired private IApiMallMemberWalletService memberWalletService; @Autowired private IMallMoneyFlowService mallMoneyFlowService; @Autowired private MallMemberMapper mallMemberMapper; @Autowired private MallGoodsSkuMapper mallGoodsSkuMapper; @Autowired private MallLeaderAchieveMapper mallLeaderAchieveMapper; @Autowired private MallTeamLeaderMapper mallTeamLeaderMapper; @Autowired private DataDictionaryCustomMapper dataDictionaryCustomMapper; @Autowired private IMemberProfitService memberProfitService; @Autowired private IMallAchieveService mallAchieveService; /** * 普通商品结算 */ @Scheduled(cron = "0 0 0 * * ?") public void normalGoodsSettlementJob() { log.info("普通商品结算"); List 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 orderInfos = mallOrderInfoMapper.selectOrderByStatusAndPayTime(3,DateUtil.offsetDay(new Date(), -value)); if(CollUtil.isNotEmpty(orderInfos)){ 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 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)); } } /** * 团长第二天才会结算前一天的所有提成 * 从团长业绩表中查询出前一天的所有已完成订单金额*提成系数,得到今日提成 * 修改业绩的状态 * 并生成一条提成流水 */ @Scheduled(cron = "0 0 1 * * ?") // @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> allLeaderAchieve = mallLeaderAchieveMapper.selectListByStateAndCreateTimeAndUniqueCode(MallLeaderAchieve.STATE_ONE,dateTime); if (CollUtil.isNotEmpty(allLeaderAchieve)) { for (Map 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); } } } } // public static void main(String[] args) { // BigDecimal bigDecimal = new BigDecimal(0.1256).setScale(2,BigDecimal.ROUND_DOWN); // System.out.println(bigDecimal); // } }