package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.entity.InventoryReserve; import com.zy.asrs.entity.InventoryReserveLog; import com.zy.asrs.service.InventoryReserveLogService; import com.zy.asrs.service.InventoryReserveService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * 预留库存过期处理器 * 将过期的预留库存转移到日志表 */ @Slf4j @Service public class InventoryReserveExpireHandler extends AbstractHandler { @Autowired private InventoryReserveService inventoryReserveService; @Autowired private InventoryReserveLogService inventoryReserveLogService; @Transactional(rollbackFor = Exception.class) public ReturnT start() { // 查询过期的预留库存(过期时间不为空且小于当前时间) Date now = new Date(); List expiredList = inventoryReserveService.selectList( new EntityWrapper() .isNotNull("expire_time") .lt("expire_time", now)); if (expiredList.isEmpty()) { return SUCCESS; } log.info("发现 {} 条过期的预留库存记录", expiredList.size()); for (InventoryReserve reserve : expiredList) { try { // 转移到日志表 InventoryReserveLog logRecord = getInventoryReserveLog(reserve); inventoryReserveLogService.insert(logRecord); // 删除原记录 inventoryReserveService.deleteById(reserve.getId()); log.info("预留库存过期处理完成: id={}, matnr={}, batch={}", reserve.getId(), reserve.getMatnr(), reserve.getBatch()); } catch (Exception e) { log.error("预留库存过期处理失败: id={}, error={}", reserve.getId(), e.getMessage()); } } return SUCCESS; } private static InventoryReserveLog getInventoryReserveLog(InventoryReserve reserve) { InventoryReserveLog logRecord = new InventoryReserveLog(); logRecord.setMatnr(reserve.getMatnr()); logRecord.setMaktx(reserve.getMaktx()); logRecord.setOrderNo(reserve.getOrderNo()); logRecord.setBatch(reserve.getBatch()); logRecord.setQuantity(reserve.getQuantity()); logRecord.setExpireTime(reserve.getExpireTime()); logRecord.setDeptId(reserve.getDeptId()); logRecord.setCreateTime(reserve.getCreateTime()); logRecord.setCreateBy(reserve.getCreateBy()); logRecord.setUpdateTime(new Date()); return logRecord; } }