package com.klp.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.klp.domain.WmsWarehouse; import com.klp.mapper.WmsMaterialCoilMapper; import com.klp.mapper.WmsWarehouseMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j @RequiredArgsConstructor @Component public class WarehouseUseCountTask { private final WmsMaterialCoilMapper materialCoilMapper; private final WmsWarehouseMapper warehouseMapper; // @Scheduled(cron = "0 0 1 * * ?") @Transactional(rollbackFor = Exception.class) public void calculateWarehouseUseCount() { log.info("[仓库使用次数定时任务] 开始计算仓库使用次数"); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select(WmsWarehouse::getWarehouseId); List warehouses = warehouseMapper.selectList(wrapper); if (warehouses.isEmpty()) { log.info("[仓库使用次数定时任务] 未找到仓库记录"); return; } List warehouseIds = warehouses.stream() .map(WmsWarehouse::getWarehouseId) .collect(Collectors.toList()); List> countList = materialCoilMapper.selectWarehouseIdCount(warehouseIds); Map countMap = new HashMap<>(); for (Map item : countList) { Long wid = ((Number) item.get("warehouse_id")).longValue(); Long count = ((Number) item.get("coil_count")).longValue(); countMap.put(wid, count); } for (WmsWarehouse warehouse : warehouses) { Long count = countMap.getOrDefault(warehouse.getWarehouseId(), 0L); warehouse.setUseCount(count.intValue()); warehouseMapper.updateById(warehouse); } log.info("[仓库使用次数定时任务] 完成,共更新 {} 个仓库", warehouses.size()); } }