Commit acfd275e authored by DESKTOP-VKRD9QF\Administration's avatar DESKTOP-VKRD9QF\Administration
parents 6c2d7167 f006f6ed
......@@ -1172,6 +1172,7 @@ public class GeneticDecoder {
private int processOperation(Entry currentOp,Long machineId,double processTime,OpMachine machineOption,Chromosome chromosome,Map<Long, Machine> machineIdMap,Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Integer, Entry> entryIndexById,Map<Integer, GAScheduleResult> scheduleIndexById,int orderDueDate,boolean islockMachineTime, boolean isJit)
{
GAScheduleResult result= processOperationResult( currentOp, machineId, processTime, machineOption, chromosome, machineIdMap, machineTasksCache, entryIndexById, scheduleIndexById, orderDueDate, islockMachineTime, isJit);
if(result==null)
return 0;
......@@ -1861,6 +1862,8 @@ if(geneDetails!=null&&geneDetails.size()>0)
}
}
}
}
if (bomtype == 0 || bomtype == 1) {
Optional<LocalDateTime> sfDateOpt = opboms.stream()
.filter(t -> !"MP".equals(t.getMaterialTypeName()) && (t.getProductOrderID() == null || t.getProductOrderID().isEmpty()))
.map(OrderMaterialRequirement::getUseTime)
......
......@@ -318,7 +318,7 @@ if(isJit)
continue;
}
for (OrderMaterialRequirement req : op.getMaterialRequirements()) {
if (!"MP".equals(req.getMaterialTypeName())) {
if (!"MP".equals(req.getMaterialTypeName())&&req.getProductOrderID()!=null&&req.getProductOrderID().size()>0) {
OrderMaterialRequirement reqq = totalNeededByMaterial.get(req.getMaterialId());
if (reqq != null) {
double allneeded = req.getSpentQty() / req.getMainQty() * op.getQuantity();
......@@ -354,7 +354,7 @@ if(isJit)
for (OrderMaterialRequirement req : op.getMaterialRequirements()) {
if (!"MP".equals(req.getMaterialTypeName()))
if (!"MP".equals(req.getMaterialTypeName())&&req.getProductOrderID()!=null&&req.getProductOrderID().size()>0)
continue;
OrderMaterialRequirement reqq= totalNeededByMaterial.get(req.getMaterialId());
......
......@@ -453,7 +453,7 @@ public class HybridAlgorithm {
FileHelper.writeLogFile("解码---------------"+population.size() );
// GeneticDecoder decoder = new GeneticDecoder(_GlobalParam, param.getBaseTime(), machines, orders, materials, machineScheduler,materialRequirementService, sceneId);
boolean ismore=false;
boolean ismore=true;
if(ismore) {
CompletableFuture.allOf(population.stream()
.map(chromosome -> CompletableFuture.runAsync(() -> decode(sharedDecoder, chromosome, param, allOperations, globalOpList), decodeExecutor))
......
......@@ -111,17 +111,21 @@ public class MachineCalculator {
time.setStartTime((int) ChronoUnit.SECONDS.between(baseTime, setupStartTime1));
time.setEndTime((int) ChronoUnit.SECONDS.between(baseTime, shift1.getEnd()));
CopyOnWriteArrayList<TimeSegment> usedSegments1= RemoveMachineAvailable(machine, time,shift1);
CopyOnWriteArrayList<TimeSegment> usedSegments1= RemoveMachineAvailable(machine, time,shift1,false);
if (usedSegments1 != null && usedSegments1.size() > 0) {
usedSegments.addAll(usedSegments1);
}
for (int i = 1; i <setuptime.size() ; i++) {
TimeSegment se = setuptime.get(i);
se.setUsed(true);
if(islockMachineTime) {
for (int i = 1; i < setuptime.size(); i++) {
TimeSegment se = setuptime.get(i);
se.setUsed(true);
}
}
}else {
for (TimeSegment se:setuptime) {
se.setUsed(true);
if(islockMachineTime) {
for (TimeSegment se : setuptime) {
se.setUsed(true);
}
}
}
......@@ -159,9 +163,11 @@ public class MachineCalculator {
// i++;
// }
}
if (usedSegments != null && usedSegments.size() > 0) {
machine.getAvailability().addAll(usedSegments);
machine.getAvailability().sort(Comparator.comparing(TimeSegment::getStart));
if(islockMachineTime) {
if (usedSegments != null && usedSegments.size() > 0) {
machine.getAvailability().addAll(usedSegments);
machine.getAvailability().sort(Comparator.comparing(TimeSegment::getStart));
}
}
times= CaldScheduleResult(
......@@ -196,10 +202,13 @@ public class MachineCalculator {
time.setStartTime((int) ChronoUnit.SECONDS.between(baseTime, effectiveStart));
time.setEndTime((int) ChronoUnit.SECONDS.between(baseTime, startTime));
CopyOnWriteArrayList<TimeSegment> usedSegments1= RemoveMachineAvailable(machine, time,shift);
CopyOnWriteArrayList<TimeSegment> usedSegments1 = RemoveMachineAvailable(machine, time, shift,false);
if (usedSegments1 != null && usedSegments1.size() > 0) {
usedSegments.addAll(usedSegments1);
}
if(processable>=availableSeconds)
{
i++;
......@@ -251,10 +260,12 @@ public class MachineCalculator {
time.setQuantity(quantity);
times.add(time);
CopyOnWriteArrayList<TimeSegment> usedSegments1= RemoveMachineAvailable(machine, time,slot);
if (usedSegments1 != null && usedSegments1.size() > 0) {
usedSegments.addAll(usedSegments1);
}
if(islockMachineTime) {
CopyOnWriteArrayList<TimeSegment> usedSegments1 = RemoveMachineAvailable(machine, time, slot);
if (usedSegments1 != null && usedSegments1.size() > 0) {
usedSegments.addAll(usedSegments1);
}
}
}
if (usedSegments != null && usedSegments.size() > 0) {
machine.getAvailability().addAll(usedSegments);
......@@ -1752,9 +1763,12 @@ public class MachineCalculator {
return times;
}
private CopyOnWriteArrayList<TimeSegment> RemoveMachineAvailable(Machine machine, ScheduleResultDetail geneDetails,TimeSegment targetSegment) {
return RemoveMachineAvailable( machine, geneDetails, targetSegment, true);
}
// 把目标 availability 按本次排程切成“剩余可用段”和“本次已占用段”,并把占用段 key 回写到 geneDetails。
private CopyOnWriteArrayList<TimeSegment> RemoveMachineAvailable(Machine machine, ScheduleResultDetail geneDetails,TimeSegment targetSegment) {
private CopyOnWriteArrayList<TimeSegment> RemoveMachineAvailable(Machine machine, ScheduleResultDetail geneDetails,TimeSegment targetSegment,boolean islockMachineTime) {
LocalDateTime geneStartTime = baseTime.plusSeconds(geneDetails.getStartTime());
......@@ -1779,7 +1793,13 @@ public class MachineCalculator {
usedSegment2.setHoliday(false);
usedSegment2.setKey(UUID.randomUUID().toString());
usedSegment2.setType(SegmentType.REGULAR);
usedSegment2.setUsed(true);
if(islockMachineTime)
{
usedSegment2.setUsed(true);
}else {
usedSegment2.setUsed(false);
}
usedSegments.add(usedSegment2);
geneDetails.setKey(usedSegment2.getKey());
......@@ -1793,7 +1813,12 @@ public class MachineCalculator {
usedSegment.setHoliday(false);
usedSegment.setKey(UUID.randomUUID().toString());
usedSegment.setType(SegmentType.REGULAR);
if(islockMachineTime)
{
usedSegment.setUsed(true);
}else {
usedSegment.setUsed(false);
}
usedSegments.add(usedSegment);
geneDetails.setKey(usedSegment.getKey());
targetSegment.setStart(geneEndTime);
......@@ -1810,9 +1835,19 @@ public class MachineCalculator {
usedSegments.add(usedSegment);
geneDetails.setKey(targetSegment.getKey());
targetSegment.setStart(geneStartTime);
if(islockMachineTime)
{
targetSegment.setUsed(true);
}else {
targetSegment.setUsed(false);
}
}else {
if(islockMachineTime)
{
targetSegment.setUsed(true);
}else {
targetSegment.setUsed(false);
}
}
return usedSegments;
......
......@@ -202,7 +202,7 @@ public class MaterialRequirementService {
{
Map<Integer,Object> reslte1=preloadSfRoutingBomCache(materialIds, routingHeaders, routingsupportings, replaces);
List<Long> routingIds1=(List<Long>) reslte1.get(1);
if(routingIds1!=null)
if(routingIds1!=null&&routingIds1.size()>0)
{
List<Long> equipids= preloadSfRoutingCache(sceneId,routingIds1);
reslte.put(1,equipids);
......@@ -347,6 +347,7 @@ public class MaterialRequirementService {
List<RoutingDetailEquip> routingDetailEquips = null;
List<RoutingDetailConnect> connections = null;
List<RoutingDiscreteParam> routingDiscreteParams=null;
if (routingIds != null || routingIds.size() > 0) {
RoutingDetails = lanuchService.getRoutingDetails(routingIds);
......
......@@ -279,7 +279,7 @@ public class PlanResultService {
throw new BusinessException("排产计算结果保存失败,请稍后重试或联系管理员");
}
// WriteScheduleSummary(chromosome);
WriteScheduleSummary(chromosome);
return chromosome;
......
......@@ -55,10 +55,10 @@ spring:
# Oracle数据源
oracle:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@//39.100.77.7:1522/ORCLPDB1 # ORCL为你的Oracle实例名
# url: jdbc:oracle:thin:@//39.100.77.7:1522/ORCLPDB1 # ORCL为你的Oracle实例名
# username: mes # 替换为你的Oracle用户名
# password: root_mes123456 # 替换为你的Oracle密码
# url: jdbc:oracle:thin:@//39.100.78.207:7002/ORCLPDB1 # ORCL为你的Oracle实例名
url: jdbc:oracle:thin:@//39.100.78.207:7002/ORCLPDB1 # ORCL为你的Oracle实例名
username: mes # 替换为你的Oracle用户名
password: root_mes123456 # 替换为你的Oracle密码
# sqlserver:
......
......@@ -41,7 +41,7 @@ public class PlanResultServiceTest {
// sortService.test1();
// nsgaiiUtils.Test();
planResultService.execute2("4990F98F300549F384A754AAE7486BD9");//2000
planResultService.execute2("A83368B01AEA45168A5202C16425E530");//2000
// planResultService.execute2("15210B13B88A453F8B84AAC7F16C7541");//2000
......
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