DeductDeptJob.java 3.64 KB
package com.order.erp.job;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.order.erp.common.constant.Constant;
import com.order.erp.domain.ApplyStatusEnum;
import com.order.erp.domain.FinanceEnum;
import com.order.erp.domain.dto.BaseDO;
import com.order.erp.domain.dto.order.OrderBaseInfoDO;
import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
import com.order.erp.service.order.OrderBaseInfoService;
import com.order.erp.service.order.ProducePaymentCheckBillOrderService;
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.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

@Slf4j
@Component
public class DeductDeptJob {
    //扫描所有扣款单状态为已通过的订单,查询所有扣款单未已审核通过的订单
    @Autowired
    private ProducePaymentCheckBillOrderService producePaymentCheckBillOrderService;
    @Autowired
    private OrderBaseInfoService orderBaseInfoService;
    @Scheduled(cron = "0 0 1 * * ?", zone = "Asia/Shanghai")
    public void deductDeptJob() {
        log.info("开始执行扣款单部门任务");
        List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = producePaymentCheckBillOrderService.list(
                new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()
                        .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
                        .and(wrapper -> wrapper
                                .in(ProducePaymentCheckBillOrderDO::getCheckDeductUrlStatus, ApplyStatusEnum.AUDIT_PASS.getStatus(),ApplyStatusEnum.WAIT_AUDIT.getStatus())
                                .or()
                                .in(ProducePaymentCheckBillOrderDO::getStatus,
                                        FinanceEnum.RECEIVED_PAYMENT.getStatus(),
                                        FinanceEnum.OK_PAYMENT.getStatus())
                        )
        );
        //过滤掉,扣款部门有值的情况。
        List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream()
                .filter(producePaymentCheckBillOrderDO -> producePaymentCheckBillOrderDO.getDeductDept() == null)
                .collect(Collectors.toList());
        Set<Long> orderIds = producePaymentCheckBillOrderDOS.stream().filter(Objects::nonNull).map(producePaymentCheckBillOrderDO -> producePaymentCheckBillOrderDO.getOrderId()).collect(Collectors.toSet());
        List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
        Map<Long, OrderBaseInfoDO> orderBaseInfoDOMap = orderBaseInfoDOList.stream().collect(Collectors.toMap(OrderBaseInfoDO::getId, order -> order, (existing, duplicate) -> existing));
        producePaymentCheckBillOrderDOS.forEach(producePaymentCheckBillOrderDO -> {
            if(orderBaseInfoDOMap.containsKey(producePaymentCheckBillOrderDO.getOrderId())){
                if (producePaymentCheckBillOrderDO.getDeductAmount().compareTo(BigDecimal.ZERO) > 0){
                    producePaymentCheckBillOrderDO.setDeductDept(orderBaseInfoDOMap.get(producePaymentCheckBillOrderDO.getOrderId()).getProductionDepartment());
                }
            }
        });
        if (CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOS)) {
            producePaymentCheckBillOrderService.updateBatchById(producePaymentCheckBillOrderDOS);
        }

    }
}