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<String> {
|
|
@Autowired
|
private InventoryReserveService inventoryReserveService;
|
|
@Autowired
|
private InventoryReserveLogService inventoryReserveLogService;
|
|
@Transactional(rollbackFor = Exception.class)
|
public ReturnT<String> start() {
|
// 查询过期的预留库存(过期时间不为空且小于当前时间)
|
Date now = new Date();
|
List<InventoryReserve> expiredList = inventoryReserveService.selectList(
|
new EntityWrapper<InventoryReserve>()
|
.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;
|
}
|
|
}
|