滚动排产修改

parent 503590db
...@@ -2,10 +2,7 @@ package com.aps.service.plan; ...@@ -2,10 +2,7 @@ package com.aps.service.plan;
import com.aps.common.util.ProductionDeepCopyUtil; import com.aps.common.util.ProductionDeepCopyUtil;
import com.aps.common.util.redis.RedisUtils; import com.aps.common.util.redis.RedisUtils;
import com.aps.entity.Algorithm.Chromosome; import com.aps.entity.Algorithm.*;
import com.aps.entity.Algorithm.GAScheduleResult;
import com.aps.entity.Algorithm.GlobalOperationInfo;
import com.aps.entity.Algorithm.ScheduleResultDetail;
import com.aps.entity.ApsTimeConfig; import com.aps.entity.ApsTimeConfig;
import com.aps.entity.Dispatch; import com.aps.entity.Dispatch;
import com.aps.entity.MesShiftWorkSched; import com.aps.entity.MesShiftWorkSched;
...@@ -546,10 +543,12 @@ public class LockedOrderProcessorService { ...@@ -546,10 +543,12 @@ public class LockedOrderProcessorService {
.orElse(0); .orElse(0);
int nextAvailableId = maxExistingId + 1; int nextAvailableId = maxExistingId + 1;
Map<Integer, Integer> lockedEntryIdMapping = new HashMap<>();
// 为锁定期Entry重新分配ID // 为锁定期Entry重新分配ID
for (Entry lockedEntry : data.entries.values()) { for (Entry lockedEntry : data.entries.values()) {
int oldId = lockedEntry.getId(); int oldId = lockedEntry.getId();
lockedEntryIdMapping.put(oldId, nextAvailableId);
lockedEntry.setId(nextAvailableId); lockedEntry.setId(nextAvailableId);
// 更新对应的GAScheduleResult的operationId(包括result和resultOld) // 更新对应的GAScheduleResult的operationId(包括result和resultOld)
...@@ -577,6 +576,76 @@ public class LockedOrderProcessorService { ...@@ -577,6 +576,76 @@ public class LockedOrderProcessorService {
nextAvailableId++; nextAvailableId++;
} }
// 同步更新锁定期Entry内部依赖中的工序ID引用(仅修正本批次重分配的ID)
for (Entry lockedEntry : data.entries.values()) {
if (lockedEntry.getPrevEntryIds() != null) {
for (OperationDependency dep : lockedEntry.getPrevEntryIds()) {
if (dep == null) {
continue;
}
Integer newPrev = lockedEntryIdMapping.get(dep.getPrevOperationId());
if (newPrev != null) {
dep.setPrevOperationId(newPrev);
}
Integer newNext = lockedEntryIdMapping.get(dep.getNextOperationId());
if (newNext != null) {
dep.setNextOperationId(newNext);
}
}
}
if (lockedEntry.getNextEntryIds() != null) {
for (OperationDependency dep : lockedEntry.getNextEntryIds()) {
if (dep == null) {
continue;
}
Integer newPrev = lockedEntryIdMapping.get(dep.getPrevOperationId());
if (newPrev != null) {
dep.setPrevOperationId(newPrev);
}
Integer newNext = lockedEntryIdMapping.get(dep.getNextOperationId());
if (newNext != null) {
dep.setNextOperationId(newNext);
}
}
}
}
// 同步更新锁定期Entry内部依赖中的工序ID引用(仅修正本批次重分配的ID)
for (Entry lockedEntry : data.entries.values()) {
if (lockedEntry.getPrevEntryIds() != null) {
for (OperationDependency dep : lockedEntry.getPrevEntryIds()) {
if (dep == null) {
continue;
}
Integer newPrev = lockedEntryIdMapping.get(dep.getPrevOperationId());
if (newPrev != null) {
dep.setPrevOperationId(newPrev);
}
Integer newNext = lockedEntryIdMapping.get(dep.getNextOperationId());
if (newNext != null) {
dep.setNextOperationId(newNext);
}
}
}
if (lockedEntry.getNextEntryIds() != null) {
for (OperationDependency dep : lockedEntry.getNextEntryIds()) {
if (dep == null) {
continue;
}
Integer newPrev = lockedEntryIdMapping.get(dep.getPrevOperationId());
if (newPrev != null) {
dep.setPrevOperationId(newPrev);
}
Integer newNext = lockedEntryIdMapping.get(dep.getNextOperationId());
if (newNext != null) {
dep.setNextOperationId(newNext);
}
}
}
}
chromosome.getAllOperations().addAll(data.entries.values()); chromosome.getAllOperations().addAll(data.entries.values());
log.debug("成功添加 {} 个锁定期Entry到allOperations中,大小从{}变为{},ID范围: {}-{}", log.debug("成功添加 {} 个锁定期Entry到allOperations中,大小从{}变为{},ID范围: {}-{}",
data.entries.size(), beforeEntrySize, chromosome.getAllOperations().size(), data.entries.size(), beforeEntrySize, chromosome.getAllOperations().size(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment