This commit is contained in:
砂糖
2026-03-13 11:25:04 +08:00
2 changed files with 26 additions and 7 deletions

View File

@@ -7,10 +7,13 @@ import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@@ -32,7 +35,7 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Component @Component
public class AcidOeeMonthTask { public class AcidOeeMonthTask implements ApplicationRunner {
/** Redis 缓存 key 模板:当月 OEE 汇总(酸轧线) */ /** Redis 缓存 key 模板:当月 OEE 汇总(酸轧线) */
private static final String SUMMARY_KEY_PATTERN = "oee:report:month:summary:%s:SY"; private static final String SUMMARY_KEY_PATTERN = "oee:report:month:summary:%s:SY";
@@ -48,10 +51,13 @@ public class AcidOeeMonthTask {
private final StringRedisTemplate stringRedisTemplate; private final StringRedisTemplate stringRedisTemplate;
/** /**
* 项目启动完成后立即计算一次当月酸轧 OEE 汇总并写入 Redis。 * 项目启动完成后计算一次当月酸轧 OEE 汇总并写入 Redis。
* 使用 ApplicationRunner 在 Spring Boot 启动完成后执行。
* 使用 @Async 异步执行,不阻塞项目启动。
*/ */
@PostConstruct @Async
public void init() { @Override
public void run(ApplicationArguments args) throws Exception {
try { try {
computeCurrentMonth("startup"); computeCurrentMonth("startup");
} catch (Exception e) { } catch (Exception e) {

View File

@@ -1167,6 +1167,13 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("历史钢卷不允许占用实际库区!"); throw new RuntimeException("历史钢卷不允许占用实际库区!");
} }
} }
// 2. 已发货的钢卷不能占用实际库区,给出提醒
if (bo.getStatus() != null && bo.getStatus().equals(1)) {
if (bo.getActualWarehouseId() != null && !bo.getActualWarehouseId().equals(-1L)) {
throw new RuntimeException("已发货的钢卷不允许占用实际库区!");
}
}
// 直接更新钢卷属性 // 直接更新钢卷属性
WmsMaterialCoil updateCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class); WmsMaterialCoil updateCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class);
validEntityBeforeSave(updateCoil); validEntityBeforeSave(updateCoil);
@@ -1188,8 +1195,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
// 更新实际库区的启用状态 // 更新实际库区的启用状态
if (flag) { if (flag) {
// 只有当新的库区ID不为空且与原库区ID不同时才更新库区状态 // 已发货的钢卷不能占用实际库区,释放旧库区
if (bo.getActualWarehouseId() != null && !bo.getActualWarehouseId().equals(oldCoil.getActualWarehouseId())) { if (bo.getStatus() != null && bo.getStatus().equals(1)) {
if (oldCoil.getActualWarehouseId() != null) {
updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), null);
}
} else if (bo.getActualWarehouseId() != null && !bo.getActualWarehouseId().equals(-1L)
&& !bo.getActualWarehouseId().equals(oldCoil.getActualWarehouseId())) {
// 只有当新的库区ID不为空且不为-1且与原库区ID不同时才更新库区状态
updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), bo.getActualWarehouseId()); updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), bo.getActualWarehouseId());
} }
} }