Commit ae460151 authored by Tong Li's avatar Tong Li

Merge remote-tracking branch 'origin/tl'

parents c5c9a28b 5767b7da
...@@ -408,27 +408,12 @@ if(isJit) ...@@ -408,27 +408,12 @@ if(isJit)
if (targetFinishedOpIds == null || targetFinishedOpIds.isEmpty()) { if (targetFinishedOpIds == null || targetFinishedOpIds.isEmpty()) {
return 0; return 0;
} }
int start=Integer.MAX_VALUE;
for (Integer targetFinishedOpId :targetFinishedOpIds) {
// 找关联的成品订单
int finishedOrderId = -1;
Entry targetFinishedOp = null;
for (Integer targetOpId : targetFinishedOpIds) {
Entry op = entryIndexById.get(targetOpId);
if (op != null) {
targetFinishedOp = op;
finishedOrderId = op.getGroupId();
break;
}
}
if (finishedOrderId <= 0) return 0;
List<Entry> finishedOps = entrysBygroupId.get(finishedOrderId).stream()
.sorted(Comparator.comparing(Entry::getSequence))
.collect(Collectors.toList());
if (finishedOps.isEmpty()) return 0;
// JIT倒排模式成品已排完,直接从scheduleIndexById取成品第一道工序的开始时间 Entry finishedFirstOp = entryIndexById.get(targetFinishedOpId);
Entry finishedFirstOp = finishedOps.get(0); int finishedOrderId = finishedFirstOp.getGroupId();
GAScheduleResult finishedFirstResult = scheduleIndexById.get(finishedFirstOp.getId()); GAScheduleResult finishedFirstResult = scheduleIndexById.get(finishedFirstOp.getId());
if (finishedFirstResult == null) { if (finishedFirstResult == null) {
// 成品还没排(不应该发生在JIT模式),降级为原有逻辑 // 成品还没排(不应该发生在JIT模式),降级为原有逻辑
...@@ -437,8 +422,7 @@ if(isJit) ...@@ -437,8 +422,7 @@ if(isJit)
machineIdMap, entryIndexById); machineIdMap, entryIndexById);
} }
String schedulingMode = finishedFirstOp.getSchedulingMode();
if (Entry.SchedulingMode.BACKWARD.name().equals(schedulingMode)) {
// 成品倒排成功 → 半成品倒排:锚点 = 成品开始时间 - 缓冲 // 成品倒排成功 → 半成品倒排:锚点 = 成品开始时间 - 缓冲
int semiLatestEndTime = finishedFirstResult.getStartTime(); int semiLatestEndTime = finishedFirstResult.getStartTime();
...@@ -446,35 +430,31 @@ if(isJit) ...@@ -446,35 +430,31 @@ if(isJit)
for (Entry op : sfOps) { for (Entry op : sfOps) {
String key = semiOrderId + "_" + op.getSequence(); String key = semiOrderId + "_" + op.getSequence();
OpMachine opt = opMachineKeyMap.get(key); OpMachine opt = opMachineKeyMap.get(key);
if (opt != null) semiTotalTime += calculateOperationProcessingTime(op, opt,_globalParam); if (opt != null) semiTotalTime += calculateOperationProcessingTime(op, opt, _globalParam);
} }
Material material= chromosome.getMaterials().get(order.getMaterialId()); Material material = chromosome.getMaterials().get(order.getMaterialId());
int ckeckLeadTime=0; int ckeckLeadTime = 0;
if(material.getCkeckLeadTime()!=null) if (material.getCkeckLeadTime() != null) {
{ ckeckLeadTime = (material.getCkeckLeadTime().intValue() * 24 * 60 * 60);
ckeckLeadTime=(material.getCkeckLeadTime().intValue()*24*60*60);
} }
semiTotalTime+=ckeckLeadTime; semiTotalTime += ckeckLeadTime;
if (semiLatestEndTime - semiTotalTime < 0) { if (semiLatestEndTime - semiTotalTime < 0) {
FileHelper.writeLogFile("[HybridSemi] 半成品" + semiOrderId + FileHelper.writeLogFile("[HybridSemi] 半成品" + semiOrderId +
" 倒排开工<0,正排+成品" + finishedOrderId + "重排"); " 倒排开工<0,正排+成品" + finishedOrderId + "重排");
reForwardFinishedOrderIds.add(finishedOrderId); reForwardFinishedOrderIds.add(finishedOrderId);
return -1; start= Math.min(start, -1);
} }else {
FileHelper.writeLogFile("[HybridSemi] 半成品" + semiOrderId + FileHelper.writeLogFile("[HybridSemi] 半成品" + semiOrderId +
" 锚点=" + semiLatestEndTime + " (成品" + finishedOrderId + " 锚点=" + semiLatestEndTime + " (成品" + finishedOrderId +
"开始=" + finishedFirstResult.getStartTime() + ")"); "开始=" + finishedFirstResult.getStartTime() + ")");
return semiLatestEndTime-ckeckLeadTime; start = Math.min(start, semiLatestEndTime - ckeckLeadTime);
} else { }
// 成品正排了 → 半成品也正排
FileHelper.writeLogFile("[HybridSemi] 成品" + finishedOrderId +
"已正排,半成品" + semiOrderId + "也正排");
reForwardFinishedOrderIds.add(finishedOrderId);
return -1;
} }
return start;
} }
private int calculateOperationProcessingTime(Entry op, OpMachine machineOption,GlobalParam _globalParam) { private int calculateOperationProcessingTime(Entry op, OpMachine machineOption,GlobalParam _globalParam) {
int total = 0; int total = 0;
......
...@@ -506,7 +506,10 @@ public class MachineCalculator { ...@@ -506,7 +506,10 @@ public class MachineCalculator {
} }
TimeSegment slot = GetCurrentOrNextShift(machine, currentTime, prevtime, checkprevtime,isJit); TimeSegment slot = GetCurrentOrNextShift(machine, currentTime, prevtime, checkprevtime,isJit);
if (slot == null) return times; if (slot == null)
{
return times;
}
LocalDateTime startCandidate=null; LocalDateTime startCandidate=null;
LocalDateTime endCandidate1= null; LocalDateTime endCandidate1= null;
LocalDateTime prevTimeDateTime = StringUtils.isEmpty(prevtime) ? null : LocalDateTime.parse(prevtime); LocalDateTime prevTimeDateTime = StringUtils.isEmpty(prevtime) ? null : LocalDateTime.parse(prevtime);
...@@ -1993,7 +1996,7 @@ public class MachineCalculator { ...@@ -1993,7 +1996,7 @@ public class MachineCalculator {
usedSegments.add(usedSegment); usedSegments.add(usedSegment);
TimeSegment usedSegment2=new TimeSegment(); TimeSegment usedSegment2=new TimeSegment();
usedSegment2.setStart(geneStartTime); usedSegment2.setStart(geneStartTime.plusSeconds(1));
usedSegment2.setEnd(geneEndTime); usedSegment2.setEnd(geneEndTime);
usedSegment2.setHoliday(false); usedSegment2.setHoliday(false);
usedSegment2.setKey(UUID.randomUUID().toString()); usedSegment2.setKey(UUID.randomUUID().toString());
...@@ -2026,7 +2029,7 @@ public class MachineCalculator { ...@@ -2026,7 +2029,7 @@ public class MachineCalculator {
} }
usedSegments.add(usedSegment); usedSegments.add(usedSegment);
geneDetails.setKey(usedSegment.getKey()); geneDetails.setKey(usedSegment.getKey());
targetSegment.setStart(geneEndTime); targetSegment.setStart(geneEndTime.plusSeconds(1));
}else if (targetSegment.getStart().isBefore(geneStartTime)) { }else if (targetSegment.getStart().isBefore(geneStartTime)) {
//换型时可能需要把前面的时间分割处理 //换型时可能需要把前面的时间分割处理
TimeSegment usedSegment=new TimeSegment(); TimeSegment usedSegment=new TimeSegment();
...@@ -2039,7 +2042,7 @@ public class MachineCalculator { ...@@ -2039,7 +2042,7 @@ public class MachineCalculator {
usedSegment.setKey(UUID.randomUUID().toString()); usedSegment.setKey(UUID.randomUUID().toString());
usedSegments.add(usedSegment); usedSegments.add(usedSegment);
geneDetails.setKey(targetSegment.getKey()); geneDetails.setKey(targetSegment.getKey());
targetSegment.setStart(geneStartTime); targetSegment.setStart(geneStartTime.plusSeconds(1));
if(islockMachineTime) if(islockMachineTime)
{ {
targetSegment.setUsed(true); targetSegment.setUsed(true);
......
...@@ -188,7 +188,7 @@ public class PlanResultService { ...@@ -188,7 +188,7 @@ public class PlanResultService {
try { try {
ScheduleParams param = InitScheduleParams(); ScheduleParams param = InitScheduleParams();
// param.setBaseTime(LocalDateTime.of(2026, 1, 1, 0, 0, 0)); // param.setBaseTime(LocalDateTime.of(2026, 5, 20, 0, 0, 0));
this.baseTime=param.getBaseTime(); this.baseTime=param.getBaseTime();
// 策略读取入口:优先使用前端传入的 userId;没传时用 sceneId 查场景创建人。 // 策略读取入口:优先使用前端传入的 userId;没传时用 sceneId 查场景创建人。
Long effectiveUserId = scheduleStrategyService.resolveScheduleUserId(SceneId, userId); Long effectiveUserId = scheduleStrategyService.resolveScheduleUserId(SceneId, userId);
......
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