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 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; 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 @ConditionalOnProperty(prefix = "system", name = "job", havingValue = "true") 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; // // @Autowired // private AgentProducer agentProducer; // // /** // * 普通商品结算 // */ //// @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)); // // orderInfos.forEach(item -> { // agentProducer.sendGetScoreMsg(item.getId()); // }); // } // } // /** // * 团长第二天才会结算前一天的所有提成 // * 从团长业绩表中查询出前一天的所有已完成订单金额*提成系数,得到今日提成 // * 修改业绩的状态 // * 并生成一条提成流水 // */ //// @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); //// } }