Commit 57cd90f1 authored by Tong Li's avatar Tong Li

1、物料约束不勾选,则采购检验时长为0

2、如果采购订单到货时间晚于基准日期+采购,检验时长,则不使用
3、瓶颈设备瓶颈工序过滤掉无限产能设备
parent 9d489cbf
...@@ -24,6 +24,11 @@ public class GAScheduleResult { ...@@ -24,6 +24,11 @@ public class GAScheduleResult {
private String productName; private String productName;
private String productCode; private String productCode;
private long MachineId; private long MachineId;
/**
* 设备类型
*
*/
private String capacityTypeName;
private int StartTime; // 相对开始时间(秒) private int StartTime; // 相对开始时间(秒)
private int EndTime; // 相对结束时间(秒) private int EndTime; // 相对结束时间(秒)
private int teardownTime; //后处理 private int teardownTime; //后处理
......
...@@ -507,7 +507,8 @@ public class GeneticDecoder { ...@@ -507,7 +507,8 @@ public class GeneticDecoder {
boolean isJit=_globalParam.isJit(); boolean isJit=_globalParam.isJit();
if (rebuildStructureForCurrentDecode) {
if (rebuildStructureForCurrentDecode&&_globalParam.isIsCheckSf()) {
long t1 = System.nanoTime(); long t1 = System.nanoTime();
//创建半成品订单 //创建半成品订单
materialRequirementService.buildMultiLevelRequirementNetwork(chromosome, sceneId, baseTime,_globalParam); materialRequirementService.buildMultiLevelRequirementNetwork(chromosome, sceneId, baseTime,_globalParam);
...@@ -686,6 +687,10 @@ public class GeneticDecoder { ...@@ -686,6 +687,10 @@ public class GeneticDecoder {
int scheduledCount = orderProcessCounter.get(groupId); int scheduledCount = orderProcessCounter.get(groupId);
if(groupId==51)
{
int k=0;
}
List<Entry> orderOps=new ArrayList<>(); List<Entry> orderOps=new ArrayList<>();
...@@ -730,7 +735,7 @@ public class GeneticDecoder { ...@@ -730,7 +735,7 @@ public class GeneticDecoder {
} else { } else {
orderAnchor = bom.computeSemiFinishedAnchor(this, groupId, entrysBygroupId, orderAnchor = bom.computeSemiFinishedAnchor(this, groupId, entrysBygroupId,
opMachineKeyMap, chromosome, opMachineKeyMap, chromosome,
scheduleIndexById, machineTasksCache, machineIdMap, entryIndexById); scheduleIndexById, machineTasksCache, machineIdMap, entryIndexById,_globalParam.isIsCheckMp());
if (orderAnchor < 0) { if (orderAnchor < 0) {
orderIsJit = false; orderIsJit = false;
orderSchedulingInfo.put(groupId, orderSchedulingInfo.put(groupId,
...@@ -1619,7 +1624,7 @@ public class GeneticDecoder { ...@@ -1619,7 +1624,7 @@ public class GeneticDecoder {
} }
GAScheduleResult result = CreateResult(operation, machine.getId(), startTime, endTime, processingTime, 0, preTime, teardownTime, 0, null, existingResult); GAScheduleResult result = CreateResult(operation, machine.getId(), startTime, endTime, processingTime, 0, preTime, teardownTime, 0, null, existingResult);
result.setCapacityTypeName(machine.getCapacityTypeName());
if(islockMachineTime) { if(islockMachineTime) {
chromosome.getResult().add(result); chromosome.getResult().add(result);
machine.setLastGene(result); machine.setLastGene(result);
...@@ -1648,7 +1653,7 @@ public class GeneticDecoder { ...@@ -1648,7 +1653,7 @@ public class GeneticDecoder {
if (needMaterialCheck&&islockMachineTime) { if (needMaterialCheck&&islockMachineTime) {
if(!isJit) { if(!isJit) {
//正排获取半成品结束时间,如果没有半成品获取原材料时间 //正排获取半成品结束时间,如果没有半成品获取原材料时间
bomtime = getOperationBOMTime(operation, chromosome, earliestStartTime, 2); bomtime = getOperationBOMTime(operation, chromosome, earliestStartTime, 2,_globalParam.isIsCheckMp());
earliestStartTime = Math.max(earliestStartTime, bomtime); earliestStartTime = Math.max(earliestStartTime, bomtime);
//倒排需要工序排完再验证原材料,保证bom供应商就行 //倒排需要工序排完再验证原材料,保证bom供应商就行
// FileHelper.writeLogFile("工序:"+operation.getId()+ "BOMTIME:"+bomtime); // FileHelper.writeLogFile("工序:"+operation.getId()+ "BOMTIME:"+bomtime);
...@@ -1803,7 +1808,7 @@ public class GeneticDecoder { ...@@ -1803,7 +1808,7 @@ public class GeneticDecoder {
if(maxPurchase>startTime) if(maxPurchase>startTime)
{ {
int bomtime1 = getOperationBOMTime(operation, chromosome, startTime, 3); int bomtime1 = getOperationBOMTime(operation, chromosome, startTime, 3,_globalParam.isIsCheckMp());
if(bomtime1>startTime) if(bomtime1>startTime)
{ {
if (isJit && islockMachineTime) { if (isJit && islockMachineTime) {
...@@ -1835,7 +1840,7 @@ public class GeneticDecoder { ...@@ -1835,7 +1840,7 @@ public class GeneticDecoder {
GAScheduleResult result = CreateResult(operation, machine.getId(), startTime, endTime, processingTime, setupTime, preTime, teardownTime, bomtime, geneDetails, existingResult); GAScheduleResult result = CreateResult(operation, machine.getId(), startTime, endTime, processingTime, setupTime, preTime, teardownTime, bomtime, geneDetails, existingResult);
result.setCapacityTypeName(machine.getCapacityTypeName());
// System.out.println("huanxingshijian="+result.getChangeOverTime()+"-------------------"+result.getOrderId()+"--------"+result.getExecId()+"---------"+prev.getOrderId()+"--------"+prev.getExecId()); // System.out.println("huanxingshijian="+result.getChangeOverTime()+"-------------------"+result.getOrderId()+"--------"+result.getExecId()+"---------"+prev.getOrderId()+"--------"+prev.getExecId());
if (islockMachineTime) if (islockMachineTime)
...@@ -2460,7 +2465,7 @@ if(geneDetails!=null&&geneDetails.size()>0) ...@@ -2460,7 +2465,7 @@ if(geneDetails!=null&&geneDetails.size()>0)
* 汇总当前工序的物料约束,返回所有原料/半成品中最晚满足的那个时刻。 * 汇总当前工序的物料约束,返回所有原料/半成品中最晚满足的那个时刻。
* 返回值含义是“这道工序最早允许因物料而开工的秒数”。 * 返回值含义是“这道工序最早允许因物料而开工的秒数”。
*/ */
private int getOperationBOMTime(Entry currentOp, Chromosome chromosome,int estimatedStartTime,int bomtype) { private int getOperationBOMTime(Entry currentOp, Chromosome chromosome,int estimatedStartTime,int bomtype,boolean isCheckMp ) {
List<OrderMaterialRequirement> opboms= currentOp.getMaterialRequirements(); List<OrderMaterialRequirement> opboms= currentOp.getMaterialRequirements();
//if(opboms==null||!_globalParam.isIsCheckMp()) //if(opboms==null||!_globalParam.isIsCheckMp())
...@@ -2536,8 +2541,9 @@ if(geneDetails!=null&&geneDetails.size()>0) ...@@ -2536,8 +2541,9 @@ if(geneDetails!=null&&geneDetails.size()>0)
totalNeededByMaterial.put(req.getMaterialId(), reqq1); totalNeededByMaterial.put(req.getMaterialId(), reqq1);
} }
} }
List<OrderMaterialRequirement> remove=new ArrayList<>(); List<OrderMaterialRequirement> remove=new ArrayList<>();
materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,chromosome.getMaterials(),baseTime.plusSeconds(estimatedStartTime) ,false,remove,null,false); materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,chromosome.getMaterials(),baseTime.plusSeconds(estimatedStartTime) ,false,remove,null,false, isCheckMp);
Optional<LocalDateTime> rawDateOpt = totalNeededByMaterial.values().stream() Optional<LocalDateTime> rawDateOpt = totalNeededByMaterial.values().stream()
.map(OrderMaterialRequirement::getUseTime) .map(OrderMaterialRequirement::getUseTime)
...@@ -2590,7 +2596,7 @@ if(geneDetails!=null&&geneDetails.size()>0) ...@@ -2590,7 +2596,7 @@ if(geneDetails!=null&&geneDetails.size()>0)
} }
} }
List<OrderMaterialRequirement> remove=new ArrayList<>(); List<OrderMaterialRequirement> remove=new ArrayList<>();
materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,chromosome.getMaterials(),baseTime.plusSeconds(estimatedStartTime) ,false,remove,null,false); materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,chromosome.getMaterials(),baseTime.plusSeconds(estimatedStartTime) ,false,remove,null,false, isCheckMp);
Optional<LocalDateTime> rawDateOpt = totalNeededByMaterial.values().stream() Optional<LocalDateTime> rawDateOpt = totalNeededByMaterial.values().stream()
.map(OrderMaterialRequirement::getUseTime) .map(OrderMaterialRequirement::getUseTime)
......
...@@ -36,7 +36,7 @@ public class GeneticDecoderBom { ...@@ -36,7 +36,7 @@ public class GeneticDecoderBom {
Map<String, OpMachine> opMachineKeyMap, Map<String, OpMachine> opMachineKeyMap,
Chromosome chromosome, Chromosome chromosome,
Map<Integer, GAScheduleResult> scheduleIndexById, Map<Integer, GAScheduleResult> scheduleIndexById,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Long, Machine> machineIdMap,Map<Integer, Entry> entryIndexById) { Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Long, Machine> machineIdMap,Map<Integer, Entry> entryIndexById,boolean isCheckMp) {
List<Entry> semiOps = entrysBygroupId.get(semiGroupId); List<Entry> semiOps = entrysBygroupId.get(semiGroupId);
if (semiOps == null || semiOps.isEmpty()) return 0; if (semiOps == null || semiOps.isEmpty()) return 0;
...@@ -70,7 +70,7 @@ public class GeneticDecoderBom { ...@@ -70,7 +70,7 @@ public class GeneticDecoderBom {
chainGroupIds.add(targetGroupId); chainGroupIds.add(targetGroupId);
rootStart = correctByRawMaterialStockForChain(chainGroupIds,targetGroupId,targetOpId, rootStart = correctByRawMaterialStockForChain(chainGroupIds,targetGroupId,targetOpId,
rootStart, entrysBygroupId,chromosome); rootStart, entrysBygroupId,chromosome,isCheckMp);
int anchor = rootStart; int anchor = rootStart;
// FileHelper.writeLogFile(" 成品开始 "+targetGroupId+" : "+rootStart); // FileHelper.writeLogFile(" 成品开始 "+targetGroupId+" : "+rootStart);
...@@ -299,7 +299,7 @@ if(isJit) ...@@ -299,7 +299,7 @@ if(isJit)
private int correctByRawMaterialStockForChain(List<Integer> chainGroupIds,int pfGroupId,int pfOpId, private int correctByRawMaterialStockForChain(List<Integer> chainGroupIds,int pfGroupId,int pfOpId,
int estimatedStartTime, int estimatedStartTime,
Map<Integer, List<Entry>> entrysBygroupId, Map<Integer, List<Entry>> entrysBygroupId,
Chromosome chromosome) { Chromosome chromosome,boolean isCheckMp) {
TreeMap<String, Material> materials = chromosome.getMaterials(); TreeMap<String, Material> materials = chromosome.getMaterials();
if (materials == null || materials.isEmpty()) return estimatedStartTime; if (materials == null || materials.isEmpty()) return estimatedStartTime;
...@@ -339,7 +339,7 @@ if(isJit) ...@@ -339,7 +339,7 @@ if(isJit)
} }
if(totalNeededByMaterial!=null&&totalNeededByMaterial.size()>0) { if(totalNeededByMaterial!=null&&totalNeededByMaterial.size()>0) {
//结合库存计算半成品生产数量,因为可能会修改生产数量所以和原材料分开 //结合库存计算半成品生产数量,因为可能会修改生产数量所以和原材料分开
materialRequirementService.CalBom(chromosome, 0, totalNeededByMaterial, materials, baseTime.plusSeconds(estimatedStartTime), false, remove, entrysBygroupId, true); materialRequirementService.CalBom(chromosome, 0, totalNeededByMaterial, materials, baseTime.plusSeconds(estimatedStartTime), false, remove, entrysBygroupId, true,isCheckMp);
} }
totalNeededByMaterial.clear(); totalNeededByMaterial.clear();
for (int groupId : chainGroupIds) { for (int groupId : chainGroupIds) {
...@@ -379,7 +379,7 @@ if(isJit) ...@@ -379,7 +379,7 @@ if(isJit)
} }
LocalDateTime estimatedStartTime1= materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,materials,baseTime.plusSeconds(estimatedStartTime) ,false,remove,entrysBygroupId,false); LocalDateTime estimatedStartTime1= materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,materials,baseTime.plusSeconds(estimatedStartTime) ,false,remove,entrysBygroupId,false,isCheckMp);
int rawTime = (int) Duration.between(baseTime, estimatedStartTime1).getSeconds(); int rawTime = (int) Duration.between(baseTime, estimatedStartTime1).getSeconds();
return Math.max(estimatedStartTime, rawTime); return Math.max(estimatedStartTime, rawTime);
...@@ -419,7 +419,7 @@ int start=Integer.MAX_VALUE; ...@@ -419,7 +419,7 @@ int start=Integer.MAX_VALUE;
// 成品还没排(不应该发生在JIT模式),降级为原有逻辑 // 成品还没排(不应该发生在JIT模式),降级为原有逻辑
return computeSemiFinishedAnchor(decoder, semiOrderId, entrysBygroupId, return computeSemiFinishedAnchor(decoder, semiOrderId, entrysBygroupId,
opMachineKeyMap, chromosome, scheduleIndexById, machineTasksCache, opMachineKeyMap, chromosome, scheduleIndexById, machineTasksCache,
machineIdMap, entryIndexById); machineIdMap, entryIndexById,_globalParam.isIsCheckMp());
} }
......
...@@ -1150,11 +1150,11 @@ if(demand==null) ...@@ -1150,11 +1150,11 @@ if(demand==null)
* @return 包含物料需求列表和子订单列表的结果对象(替代C#的out参数) * @return 包含物料需求列表和子订单列表的结果对象(替代C#的out参数)
*/ */
public void EditOperationBOM(Entry operation,Chromosome chromosome,LocalDateTime earliestStartTime,GeneticDecoder coder,Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Integer, Entry> entryIndexById,Map<Integer, GAScheduleResult> scheduleIndexById, LocalDateTime baseTime) { public void EditOperationBOM(Entry operation,Chromosome chromosome,LocalDateTime earliestStartTime,GeneticDecoder coder,Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Integer, Entry> entryIndexById,Map<Integer, GAScheduleResult> scheduleIndexById, LocalDateTime baseTime,boolean isCheckMp) {
EditOperationBOM(operation, chromosome, earliestStartTime, coder, machineTasksCache, entryIndexById, scheduleIndexById, baseTime, true); EditOperationBOM(operation, chromosome, earliestStartTime, coder, machineTasksCache, entryIndexById, scheduleIndexById, baseTime, true,isCheckMp);
} }
public void EditOperationBOM(Entry operation,Chromosome chromosome,LocalDateTime earliestStartTime,GeneticDecoder coder,Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Integer, Entry> entryIndexById,Map<Integer, GAScheduleResult> scheduleIndexById, LocalDateTime baseTime, boolean commitChanges) { public void EditOperationBOM(Entry operation,Chromosome chromosome,LocalDateTime earliestStartTime,GeneticDecoder coder,Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Integer, Entry> entryIndexById,Map<Integer, GAScheduleResult> scheduleIndexById, LocalDateTime baseTime, boolean commitChanges,boolean isCheckMp) {
List<OrderMaterialRequirement> materialRequirements = new ArrayList<>(); List<OrderMaterialRequirement> materialRequirements = new ArrayList<>();
String sceneId=chromosome.getScenarioID(); String sceneId=chromosome.getScenarioID();
...@@ -1192,7 +1192,7 @@ if(demand==null) ...@@ -1192,7 +1192,7 @@ if(demand==null)
} }
} }
CalBom(chromosome,operation.getId(), totalNeededByMaterial,materials,earliestStartTime,commitChanges,remove,null,false); CalBom(chromosome,operation.getId(), totalNeededByMaterial,materials,earliestStartTime,commitChanges,remove,null,false,isCheckMp);
if (commitChanges && remove != null&&remove.size()>0) { if (commitChanges && remove != null&&remove.size()>0) {
//删除先删排产结果,然后记录orderID,到排产方案里,最后一起删除 //删除先删排产结果,然后记录orderID,到排产方案里,最后一起删除
...@@ -1208,8 +1208,9 @@ if(demand==null) ...@@ -1208,8 +1208,9 @@ if(demand==null)
} }
} }
public LocalDateTime CalBom(Chromosome chromosome,int operationId,Map<String, OrderMaterialRequirement> MaterialRequirements,TreeMap<String, Material> materials,LocalDateTime earliestStartTime,boolean commitChanges,List<OrderMaterialRequirement> remove,Map<Integer, List<Entry>> entrysBygroupId,boolean isSf) public LocalDateTime CalBom(Chromosome chromosome,int operationId,Map<String, OrderMaterialRequirement> MaterialRequirements,TreeMap<String, Material> materials,LocalDateTime earliestStartTime,boolean commitChanges,List<OrderMaterialRequirement> remove,Map<Integer, List<Entry>> entrysBygroupId,boolean isSf,boolean isCheckMp)
{ {
String sceneId=chromosome.getScenarioID(); String sceneId=chromosome.getScenarioID();
Random rnd = new Random(); Random rnd = new Random();
LocalDateTime useTime1 = earliestStartTime; LocalDateTime useTime1 = earliestStartTime;
...@@ -1331,7 +1332,7 @@ if(demand==null) ...@@ -1331,7 +1332,7 @@ if(demand==null)
continue; continue;
} }
MaterialInTransit(material, "", orderMaterial, needed, earliestStartTime, materials, commitChanges); MaterialInTransit(material, "", orderMaterial, needed, earliestStartTime, materials, commitChanges,isCheckMp);
needed -= orderMaterial.getUseTransit(); needed -= orderMaterial.getUseTransit();
...@@ -1349,7 +1350,7 @@ if(demand==null) ...@@ -1349,7 +1350,7 @@ if(demand==null)
break; break;
} }
MaterialInTransit(material1, rsr.getMaterialid(), orderMaterial1, needed, earliestStartTime, materials, commitChanges); MaterialInTransit(material1, rsr.getMaterialid(), orderMaterial1, needed, earliestStartTime, materials, commitChanges,isCheckMp);
needed -= orderMaterial1.getUseTransit(); needed -= orderMaterial1.getUseTransit();
...@@ -1415,6 +1416,8 @@ if(demand==null) ...@@ -1415,6 +1416,8 @@ if(demand==null)
List<MaterialPurchase> materialPurchaseList = material.getMaterialPurchases(); List<MaterialPurchase> materialPurchaseList = material.getMaterialPurchases();
if (materialPurchaseList != null && materialPurchaseList.size() > 0) { if (materialPurchaseList != null && materialPurchaseList.size() > 0) {
if(isCheckMp)
{
int randomSeq = rnd.nextInt(materialPurchaseList.size()); int randomSeq = rnd.nextInt(materialPurchaseList.size());
MaterialPurchase result = materialPurchaseList.get(randomSeq); MaterialPurchase result = materialPurchaseList.get(randomSeq);
...@@ -1423,6 +1426,11 @@ if(demand==null) ...@@ -1423,6 +1426,11 @@ if(demand==null)
orderMaterial.setCheckLeadTime(result.getInspectionCycle()); orderMaterial.setCheckLeadTime(result.getInspectionCycle());
LocalDateTime purchaseEndTime = baseTime.plusDays(orderMaterial.getPurchaseTime() + orderMaterial.getCheckLeadTime()); LocalDateTime purchaseEndTime = baseTime.plusDays(orderMaterial.getPurchaseTime() + orderMaterial.getCheckLeadTime());
orderMaterial.setPurchaseEndTime(purchaseEndTime); orderMaterial.setPurchaseEndTime(purchaseEndTime);
}else {
orderMaterial.setPurchaseTime(0);
orderMaterial.setCheckLeadTime(0);
orderMaterial.setPurchaseEndTime(baseTime);
}
} }
} else { } else {
...@@ -1441,7 +1449,7 @@ if(demand==null) ...@@ -1441,7 +1449,7 @@ if(demand==null)
} else { } else {
List<MaterialPurchase> materialPurchaseList = material.getMaterialPurchases(); List<MaterialPurchase> materialPurchaseList = material.getMaterialPurchases();
if (materialPurchaseList != null && materialPurchaseList.size() > 0) { if (materialPurchaseList != null && materialPurchaseList.size() > 0) {
if(isCheckMp) {
int randomSeq = rnd.nextInt(materialPurchaseList.size()); int randomSeq = rnd.nextInt(materialPurchaseList.size());
MaterialPurchase result = materialPurchaseList.get(randomSeq); MaterialPurchase result = materialPurchaseList.get(randomSeq);
...@@ -1450,6 +1458,11 @@ if(demand==null) ...@@ -1450,6 +1458,11 @@ if(demand==null)
orderMaterial.setCheckLeadTime(result.getInspectionCycle()); orderMaterial.setCheckLeadTime(result.getInspectionCycle());
LocalDateTime purchaseEndTime = baseTime.plusDays(orderMaterial.getPurchaseTime() + orderMaterial.getCheckLeadTime()); LocalDateTime purchaseEndTime = baseTime.plusDays(orderMaterial.getPurchaseTime() + orderMaterial.getCheckLeadTime());
orderMaterial.setPurchaseEndTime(purchaseEndTime); orderMaterial.setPurchaseEndTime(purchaseEndTime);
}else {
orderMaterial.setPurchaseTime(0);
orderMaterial.setCheckLeadTime(0);
orderMaterial.setPurchaseEndTime(baseTime);
}
} }
} }
} }
...@@ -1476,6 +1489,12 @@ if(demand==null) ...@@ -1476,6 +1489,12 @@ if(demand==null)
orderMaterial.setUseTime(useTime); orderMaterial.setUseTime(useTime);
if(commitChanges) if(commitChanges)
{ {
if(!isCheckMp)
{
orderMaterial.setPurchaseTime(0);
orderMaterial.setCheckLeadTime(0);
}
orderMaterial.setUseTime(earliestStartTime); orderMaterial.setUseTime(earliestStartTime);
orderMaterial.setPurchaseEndTime(earliestStartTime.plusDays(-orderMaterial.getCheckLeadTime())); orderMaterial.setPurchaseEndTime(earliestStartTime.plusDays(-orderMaterial.getCheckLeadTime()));
orderMaterial.setPurchaseStartTime(orderMaterial.getPurchaseEndTime().plusDays(-orderMaterial.getPurchaseTime())); orderMaterial.setPurchaseStartTime(orderMaterial.getPurchaseEndTime().plusDays(-orderMaterial.getPurchaseTime()));
...@@ -1531,7 +1550,7 @@ if(demand==null) ...@@ -1531,7 +1550,7 @@ if(demand==null)
private void MaterialInTransit(Material material,String materialId, OrderMaterialRequirement orderMaterial, double needed,LocalDateTime earliestStartTime, TreeMap<String, Material> materials, boolean commitChanges ){ private void MaterialInTransit(Material material,String materialId, OrderMaterialRequirement orderMaterial, double needed,LocalDateTime earliestStartTime, TreeMap<String, Material> materials, boolean commitChanges,boolean isCheckMp ){
// 处理在途物料 // 处理在途物料
LocalDateTime earliestTime = null; LocalDateTime earliestTime = null;
...@@ -1542,9 +1561,34 @@ if(demand==null) ...@@ -1542,9 +1561,34 @@ if(demand==null)
return ; return ;
} }
} }
LocalDateTime purchaseEndTime=baseTime;
List<MaterialPurchase> materialPurchaseList = material.getMaterialPurchases();
if (materialPurchaseList != null && materialPurchaseList.size() > 0) {
if(isCheckMp) {
Optional<MaterialPurchase> maxItem = materialPurchaseList.stream()
// 按purchaseCycle+inspectionCycle降序排序
.max((o1, o2) -> {
// 计算第一个对象的和(空值处理,避免空指针)
int sum1 = (o1.getPurchaseCycle() == null ? 0 : o1.getPurchaseCycle())
+ (o1.getInspectionCycle() == null ? 0 : o1.getInspectionCycle());
// 计算第二个对象的和
int sum2 = (o2.getPurchaseCycle() == null ? 0 : o2.getPurchaseCycle())
+ (o2.getInspectionCycle() == null ? 0 : o2.getInspectionCycle());
return Integer.compare(sum1, sum2);
});
if (maxItem.isPresent()) {
MaterialPurchase result = maxItem.get();
purchaseEndTime = baseTime.plusDays(result.getPurchaseCycle() + result.getInspectionCycle());
}
}
}
LocalDateTime purchaseEndTime1=purchaseEndTime;
// 按到货时间排序在途物料 // 按到货时间排序在途物料
List<MaterialSupply> sortedInTransit = material.getInTransit().stream() List<MaterialSupply> sortedInTransit = material.getInTransit().stream()
.filter(t -> t.getQuantity() > 0) .filter(t -> t.getQuantity() > 0&&purchaseEndTime1.compareTo(t.getArrivalTime())>=0)
.sorted(Comparator.comparing(MaterialSupply::getArrivalTime, Comparator.nullsLast(LocalDateTime::compareTo))) .sorted(Comparator.comparing(MaterialSupply::getArrivalTime, Comparator.nullsLast(LocalDateTime::compareTo)))
.collect(Collectors.toList()); .collect(Collectors.toList());
......
...@@ -453,7 +453,22 @@ public class SimulatedAnnealing { ...@@ -453,7 +453,22 @@ public class SimulatedAnnealing {
} }
log(String.format("模拟退火 - kpi:%s", fitness),true); log(String.format("模拟退火 - kpi:%s", fitness),true);
if(chromosome.getMakespan()!=0) {
FileHelper.writeLogFile(String.format("模拟退火 - kpi-Makespan: %f", chromosome.getMakespan()));
}
if(chromosome.getDelayTime()!=0) {
FileHelper.writeLogFile(String.format("模拟退火 - kpi-DelayTime: %f", chromosome.getDelayTime()));
}
if(chromosome.getTotalChangeoverTime()!=0) {
FileHelper.writeLogFile(String.format("模拟退火 - kpi-ChangeoverTime: %f", chromosome.getTotalChangeoverTime()));
}
if(chromosome.getMachineLoadStd()!=0) {
FileHelper.writeLogFile(String.format("模拟退火 - kpi-MachineLoad: %f", chromosome.getMachineLoadStd()));
}
if(chromosome.getTotalFlowTime()!=0) {
FileHelper.writeLogFile(String.format("模拟退火 - kpi-FlowTime: %f", chromosome.getTotalFlowTime()));
}
} }
/** /**
......
...@@ -239,7 +239,22 @@ public class TabuSearch { ...@@ -239,7 +239,22 @@ public class TabuSearch {
} }
log(String.format("禁忌搜索 - kpi:%s", fitness),true); log(String.format("禁忌搜索 - kpi:%s", fitness),true);
if(chromosome.getMakespan()!=0) {
FileHelper.writeLogFile(String.format("禁忌搜索 - kpi-Makespan: %f", chromosome.getMakespan()));
}
if(chromosome.getDelayTime()!=0) {
FileHelper.writeLogFile(String.format("禁忌搜索 - kpi-DelayTime: %f", chromosome.getDelayTime()));
}
if(chromosome.getTotalChangeoverTime()!=0) {
FileHelper.writeLogFile(String.format("禁忌搜索 - kpi-ChangeoverTime: %f", chromosome.getTotalChangeoverTime()));
}
if(chromosome.getMachineLoadStd()!=0) {
FileHelper.writeLogFile(String.format("禁忌搜索 - kpi-MachineLoad: %f", chromosome.getMachineLoadStd()));
}
if(chromosome.getTotalFlowTime()!=0) {
FileHelper.writeLogFile(String.format("禁忌搜索 - kpi-FlowTime: %f", chromosome.getTotalFlowTime()));
}
} }
/** /**
* 记录禁忌搜索改进详情 * 记录禁忌搜索改进详情
......
...@@ -508,7 +508,22 @@ public class VariableNeighborhoodSearch { ...@@ -508,7 +508,22 @@ public class VariableNeighborhoodSearch {
} }
log(String.format("变邻域搜索 - kpi:%s", fitness),true); log(String.format("变邻域搜索 - kpi:%s", fitness),true);
if(chromosome.getMakespan()!=0) {
FileHelper.writeLogFile(String.format("变邻域搜索 - kpi-Makespan: %f", chromosome.getMakespan()));
}
if(chromosome.getDelayTime()!=0) {
FileHelper.writeLogFile(String.format("变邻域搜索 - kpi-DelayTime: %f", chromosome.getDelayTime()));
}
if(chromosome.getTotalChangeoverTime()!=0) {
FileHelper.writeLogFile(String.format("变邻域搜索 - kpi-ChangeoverTime: %f", chromosome.getTotalChangeoverTime()));
}
if(chromosome.getMachineLoadStd()!=0) {
FileHelper.writeLogFile(String.format("变邻域搜索 - kpi-MachineLoad: %f", chromosome.getMachineLoadStd()));
}
if(chromosome.getTotalFlowTime()!=0) {
FileHelper.writeLogFile(String.format("变邻域搜索 - kpi-FlowTime: %f",chromosome.getTotalFlowTime()));
}
} }
/** /**
...@@ -525,7 +540,9 @@ public class VariableNeighborhoodSearch { ...@@ -525,7 +540,9 @@ public class VariableNeighborhoodSearch {
* 3. 非瓶颈设备上的工序往后移动(给瓶颈工序腾位置) * 3. 非瓶颈设备上的工序往后移动(给瓶颈工序腾位置)
*/ */
public Chromosome generateNeighbor(Chromosome chromosome) { public Chromosome generateNeighbor(Chromosome chromosome) {
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
// 构建位置索引 // 构建位置索引
Map<String, Integer> positionIndex = buildPositionIndex(chromosome); Map<String, Integer> positionIndex = buildPositionIndex(chromosome);
...@@ -613,7 +630,7 @@ public class VariableNeighborhoodSearch { ...@@ -613,7 +630,7 @@ public class VariableNeighborhoodSearch {
*/ */
private Map<String, Object> findBottleneckMachineWithDetails(Chromosome chromosome) { private Map<String, Object> findBottleneckMachineWithDetails(Chromosome chromosome) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
List<GAScheduleResult> allResults = chromosome.getResult(); List<GAScheduleResult> allResults = chromosome.getResult().stream().filter(t->!t.getCapacityTypeName().equals("Infinite")).collect(Collectors.toList());
Map<Long, Double> utilization = calculateMachineUtilization(chromosome); Map<Long, Double> utilization = calculateMachineUtilization(chromosome);
Map<Long, List<GAScheduleResult>> machineOps = allResults != null ? Map<Long, List<GAScheduleResult>> machineOps = allResults != null ?
allResults.stream().collect(Collectors.groupingBy(GAScheduleResult::getMachineId)) : allResults.stream().collect(Collectors.groupingBy(GAScheduleResult::getMachineId)) :
...@@ -708,7 +725,7 @@ public class VariableNeighborhoodSearch { ...@@ -708,7 +725,7 @@ public class VariableNeighborhoodSearch {
*/ */
private List<GAScheduleResult> findDelayedOperations(Chromosome chromosome) { private List<GAScheduleResult> findDelayedOperations(Chromosome chromosome) {
List<GAScheduleResult> delayedOps = new ArrayList<>(); List<GAScheduleResult> delayedOps = new ArrayList<>();
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().filter(t->!t.getCapacityTypeName().equals("Infinite")).collect(Collectors.toList());
if (results == null || results.isEmpty()) { if (results == null || results.isEmpty()) {
return delayedOps; return delayedOps;
...@@ -737,7 +754,7 @@ public class VariableNeighborhoodSearch { ...@@ -737,7 +754,7 @@ public class VariableNeighborhoodSearch {
// 收集这些延迟订单的工序 // 收集这些延迟订单的工序
for (GAScheduleResult result : results) { for (GAScheduleResult result : results) {
if (delayedOrderIds.contains(result.getGroupId())) { if (delayedOrderIds.contains(result.getGroupId())&&!result.getCapacityTypeName().equals("Infinite")) {
delayedOps.add(result); delayedOps.add(result);
} }
} }
...@@ -779,6 +796,10 @@ public class VariableNeighborhoodSearch { ...@@ -779,6 +796,10 @@ public class VariableNeighborhoodSearch {
Map<Long, Double> utilization = (Map<Long, Double>) analysis.get("utilization"); Map<Long, Double> utilization = (Map<Long, Double>) analysis.get("utilization");
List<GAScheduleResult> allResults = (List<GAScheduleResult>) analysis.get("allResults"); List<GAScheduleResult> allResults = (List<GAScheduleResult>) analysis.get("allResults");
allResults = allResults.stream().filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
sb.append(String.format("瓶颈设备ID=%d, ", bottleneckMachineId)); sb.append(String.format("瓶颈设备ID=%d, ", bottleneckMachineId));
sb.append(String.format("关键工序数=%d, ", criticalOps != null ? criticalOps.size() : 0)); sb.append(String.format("关键工序数=%d, ", criticalOps != null ? criticalOps.size() : 0));
sb.append(String.format("延迟工序数=%d, ", delayedOps != null ? delayedOps.size() : 0)); sb.append(String.format("延迟工序数=%d, ", delayedOps != null ? delayedOps.size() : 0));
...@@ -854,7 +875,9 @@ public class VariableNeighborhoodSearch { ...@@ -854,7 +875,9 @@ public class VariableNeighborhoodSearch {
.max() .max()
.orElse(0); .orElse(0);
for (GAScheduleResult op : ops) { for (GAScheduleResult op : ops) {
orderCompletionTime.put(op.getGroupId(), maxEndTime); orderCompletionTime.put(op.getGroupId(), maxEndTime);
} }
} }
...@@ -1126,7 +1149,9 @@ public class VariableNeighborhoodSearch { ...@@ -1126,7 +1149,9 @@ public class VariableNeighborhoodSearch {
*/ */
private Map<Long, Double> calculateMachineUtilization(Chromosome chromosome) { private Map<Long, Double> calculateMachineUtilization(Chromosome chromosome) {
Map<Long, Double> utilization = new HashMap<>(); Map<Long, Double> utilization = new HashMap<>();
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
if (results == null || results.isEmpty()) { if (results == null || results.isEmpty()) {
return utilization; return utilization;
...@@ -1137,7 +1162,7 @@ public class VariableNeighborhoodSearch { ...@@ -1137,7 +1162,7 @@ public class VariableNeighborhoodSearch {
.max() .max()
.orElse(1); .orElse(1);
Map<Long, List<GAScheduleResult>> machineResults = results.stream() Map<Long, List<GAScheduleResult>> machineResults = results.stream().filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.groupingBy(GAScheduleResult::getMachineId)); .collect(Collectors.groupingBy(GAScheduleResult::getMachineId));
for (Map.Entry<Long, List<GAScheduleResult>> entry : machineResults.entrySet()) { for (Map.Entry<Long, List<GAScheduleResult>> entry : machineResults.entrySet()) {
...@@ -1237,7 +1262,9 @@ public class VariableNeighborhoodSearch { ...@@ -1237,7 +1262,9 @@ public class VariableNeighborhoodSearch {
} }
private Chromosome ChangeMachineForBottleneckOpWrapper(Chromosome chromosome) { private Chromosome ChangeMachineForBottleneckOpWrapper(Chromosome chromosome) {
log("ChangeMachineForBottleneckOpWrapper"); log("ChangeMachineForBottleneckOpWrapper");
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
Map<Integer, Object> obj = buildPositionToEntryIndex(chromosome); Map<Integer, Object> obj = buildPositionToEntryIndex(chromosome);
Map<Integer, Entry> positionToEntryIndex = (Map<Integer, Entry>) obj.get(1); Map<Integer, Entry> positionToEntryIndex = (Map<Integer, Entry>) obj.get(1);
List<List<Integer>> positionByPriority = (List<List<Integer>>) obj.get(2); List<List<Integer>> positionByPriority = (List<List<Integer>>) obj.get(2);
...@@ -1295,7 +1322,9 @@ public class VariableNeighborhoodSearch { ...@@ -1295,7 +1322,9 @@ public class VariableNeighborhoodSearch {
private Chromosome moveBottleneckForwardWrapper(Chromosome chromosome) { private Chromosome moveBottleneckForwardWrapper(Chromosome chromosome) {
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
log("moveBottleneckForwardWrapper"); log("moveBottleneckForwardWrapper");
Map<String, Integer> positionIndex = buildPositionIndex(chromosome); Map<String, Integer> positionIndex = buildPositionIndex(chromosome);
...@@ -1320,7 +1349,9 @@ public class VariableNeighborhoodSearch { ...@@ -1320,7 +1349,9 @@ public class VariableNeighborhoodSearch {
} }
private Chromosome moveBottleneckSameMachineWrapper(Chromosome chromosome) { private Chromosome moveBottleneckSameMachineWrapper(Chromosome chromosome) {
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
log("moveBottleneckSameMachineWrapper"); log("moveBottleneckSameMachineWrapper");
Map<String, Integer> positionIndex = buildPositionIndex(chromosome); Map<String, Integer> positionIndex = buildPositionIndex(chromosome);
...@@ -1357,7 +1388,10 @@ public class VariableNeighborhoodSearch { ...@@ -1357,7 +1388,10 @@ public class VariableNeighborhoodSearch {
return null; return null;
} }
List<GAScheduleResult> allResults = chromosome.getResult(); List<GAScheduleResult> allResults = chromosome.getResult()
.stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
Map<Integer, Integer> orderCompletionTimes = calculateOrderCompletionTimes(allResults); Map<Integer, Integer> orderCompletionTimes = calculateOrderCompletionTimes(allResults);
// 先构建优先级->订单数的映射 // 先构建优先级->订单数的映射
...@@ -1448,7 +1482,9 @@ public class VariableNeighborhoodSearch { ...@@ -1448,7 +1482,9 @@ public class VariableNeighborhoodSearch {
} }
private Chromosome moveNonBottleneckBackwardWrapper(Chromosome chromosome) { private Chromosome moveNonBottleneckBackwardWrapper(Chromosome chromosome) {
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
log("moveNonBottleneckBackwardWrapper"); log("moveNonBottleneckBackwardWrapper");
Map<String, Integer> positionIndex = buildPositionIndex(chromosome); Map<String, Integer> positionIndex = buildPositionIndex(chromosome);
...@@ -1479,7 +1515,9 @@ public class VariableNeighborhoodSearch { ...@@ -1479,7 +1515,9 @@ public class VariableNeighborhoodSearch {
log("tryMoveNonBottleneckOpBackward:positionIndex"+positionIndex.size()); log("tryMoveNonBottleneckOpBackward:positionIndex"+positionIndex.size());
log("tryMoveNonBottleneckOpBackward:positionToEntryIndex"+positionToEntryIndex.size()); log("tryMoveNonBottleneckOpBackward:positionToEntryIndex"+positionToEntryIndex.size());
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
if (results == null) { if (results == null) {
log("tryMoveNonBottleneckOpBackward: results为空"); log("tryMoveNonBottleneckOpBackward: results为空");
return null; return null;
...@@ -1675,6 +1713,7 @@ public class VariableNeighborhoodSearch { ...@@ -1675,6 +1713,7 @@ public class VariableNeighborhoodSearch {
{ {
geneticOperations.DelOrder(chromosome); geneticOperations.DelOrder(chromosome);
Chromosome neighbor=new Chromosome(); Chromosome neighbor=new Chromosome();
neighbor.setGenerateType(chromosome.getGenerateType());
neighbor.setID(UUID.randomUUID().toString()); neighbor.setID(UUID.randomUUID().toString());
neighbor.setOperationSequencing(chromosome.getOperationSequencing()); neighbor.setOperationSequencing(chromosome.getOperationSequencing());
neighbor.setMachineSelection(chromosome.getMachineSelection()); neighbor.setMachineSelection(chromosome.getMachineSelection());
...@@ -2362,7 +2401,9 @@ public class VariableNeighborhoodSearch { ...@@ -2362,7 +2401,9 @@ public class VariableNeighborhoodSearch {
*/ */
private Chromosome aggressiveBottleneckReorderWrapper(Chromosome chromosome) { private Chromosome aggressiveBottleneckReorderWrapper(Chromosome chromosome) {
log("aggressiveBottleneckReorderWrapper"); log("aggressiveBottleneckReorderWrapper");
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
Map<Integer, Object> obj = buildPositionToEntryIndex(chromosome); Map<Integer, Object> obj = buildPositionToEntryIndex(chromosome);
Map<Integer, Entry> positionToEntryIndex = (Map<Integer, Entry>) obj.get(1); Map<Integer, Entry> positionToEntryIndex = (Map<Integer, Entry>) obj.get(1);
List<List<Integer>> positionByPriority = (List<List<Integer>>) obj.get(2); List<List<Integer>> positionByPriority = (List<List<Integer>>) obj.get(2);
...@@ -2391,7 +2432,9 @@ public class VariableNeighborhoodSearch { ...@@ -2391,7 +2432,9 @@ public class VariableNeighborhoodSearch {
Map<String, Integer> machinePositionIndex) { Map<String, Integer> machinePositionIndex) {
log("tryAggressiveBottleneckReorder: 开始激进重排瓶颈设备工序"); log("tryAggressiveBottleneckReorder: 开始激进重排瓶颈设备工序");
List<GAScheduleResult> allResults = chromosome.getResult(); List<GAScheduleResult> allResults = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
if (allResults == null || allResults.isEmpty()) { if (allResults == null || allResults.isEmpty()) {
return null; return null;
} }
...@@ -2483,7 +2526,9 @@ public class VariableNeighborhoodSearch { ...@@ -2483,7 +2526,9 @@ public class VariableNeighborhoodSearch {
private Chromosome criticalPathOptimizeWrapper(Chromosome chromosome) { private Chromosome criticalPathOptimizeWrapper(Chromosome chromosome) {
log("criticalPathOptimizeWrapper"); log("criticalPathOptimizeWrapper");
List<GAScheduleResult> results = chromosome.getResult(); List<GAScheduleResult> results = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
Map<Integer, Object> obj = buildPositionToEntryIndex(chromosome); Map<Integer, Object> obj = buildPositionToEntryIndex(chromosome);
Map<Integer, Entry> positionToEntryIndex = (Map<Integer, Entry>) obj.get(1); Map<Integer, Entry> positionToEntryIndex = (Map<Integer, Entry>) obj.get(1);
List<List<Integer>> positionByPriority = (List<List<Integer>>) obj.get(2); List<List<Integer>> positionByPriority = (List<List<Integer>>) obj.get(2);
...@@ -2511,7 +2556,9 @@ public class VariableNeighborhoodSearch { ...@@ -2511,7 +2556,9 @@ public class VariableNeighborhoodSearch {
Map<Integer, Entry> positionIndex) { Map<Integer, Entry> positionIndex) {
log("tryCriticalPathOptimize: 开始关键路径工序优化"); log("tryCriticalPathOptimize: 开始关键路径工序优化");
List<GAScheduleResult> allResults = chromosome.getResult(); List<GAScheduleResult> allResults = chromosome.getResult().stream().
filter(t->!t.getCapacityTypeName().equals("Infinite"))
.collect(Collectors.toList());
if (allResults == null || allResults.isEmpty()) { if (allResults == null || allResults.isEmpty()) {
return null; return null;
} }
......
...@@ -190,7 +190,7 @@ public class PlanResultService { ...@@ -190,7 +190,7 @@ public class PlanResultService {
try { try {
ScheduleParams param = InitScheduleParams(); ScheduleParams param = InitScheduleParams();
// param.setBaseTime(LocalDateTime.of(2026, 5, 20, 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);
...@@ -298,7 +298,7 @@ public class PlanResultService { ...@@ -298,7 +298,7 @@ public class PlanResultService {
throw new BusinessException("排产计算结果保存失败,请稍后重试或联系管理员"); throw new BusinessException("排产计算结果保存失败,请稍后重试或联系管理员");
} }
// WriteScheduleSummary(chromosome); WriteScheduleSummary(chromosome);
return chromosome; return chromosome;
...@@ -1781,6 +1781,14 @@ public class PlanResultService { ...@@ -1781,6 +1781,14 @@ public class PlanResultService {
_sceneService.saveChromosomeToFile(chromosome, SceneId); _sceneService.saveChromosomeToFile(chromosome, SceneId);
return chromosome; return chromosome;
} }
public void redecode(String SceneId) {
Chromosome chromosome= _sceneService.loadChromosomeFromFile(SceneId);
ScheduleOperationService ScheduleOperation=new ScheduleOperationService(materialRequirementService,this);
GlobalParam globalParam = buildGlobalParamFromSnapshot(SceneId, chromosome);
ScheduleOperation.redecode(chromosome, chromosome.getBaseTime(), globalParam);
}
/** /**
* 插单功能:在指定订单后插入新订单 * 插单功能:在指定订单后插入新订单
......
...@@ -72,7 +72,7 @@ public class PlanResultServiceTest { ...@@ -72,7 +72,7 @@ public class PlanResultServiceTest {
// planResultService.AddMaintenanceWindow("5475E00B844847ACB6DC20227967BA2F",2488l,maintenanceWindow); // planResultService.AddMaintenanceWindow("5475E00B844847ACB6DC20227967BA2F",2488l,maintenanceWindow);
// // planResultService.DelOperation("B6AE363FF5044DDF8DECE32D5FE0F7EA",7); // // planResultService.DelOperation("B6AE363FF5044DDF8DECE32D5FE0F7EA",7);
// planResultService.SpiltOperation("92BB773E1E2447C99D8176C991D5C9D2",1,new Double[]{50d, 50d}); // planResultService.SpiltOperation("92BB773E1E2447C99D8176C991D5C9D2",1,new Double[]{50d, 50d});
// planResultService.SpiltOrder("A41D662EE0764D008173C5A0E42B15F6","5f9d5383-b89a-4a4f-8805-2f617c711968",new Double[]{500d, 500d}); // planResultService.redecode("0785676B4E5E40CDAA62AA320CFC958C");
} }
@Test @Test
......
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