Commit 2841516f authored by Tong Li's avatar Tong Li

配套

parent 50469fe3
......@@ -1407,7 +1407,10 @@ public class GeneticDecoder {
GAScheduleResult lastGeneOnMachine = getLastMachineTask(machineTasks);
int bomtime = 0;
if (needMaterialCheck&&islockMachineTime) {
bomtime = getOperationBOMTime(operation, chromosome, 2);
bomtime = getOperationBOMTime(operation, chromosome,earliestStartTime, 2);
earliestStartTime = Math.max(earliestStartTime, bomtime);
}
......@@ -1959,7 +1962,7 @@ if(geneDetails!=null&&geneDetails.size()>0)
* 汇总当前工序的物料约束,返回所有原料/半成品中最晚满足的那个时刻。
* 返回值含义是“这道工序最早允许因物料而开工的秒数”。
*/
private int getOperationBOMTime(Entry currentOp, Chromosome chromosome,int bomtype) {
private int getOperationBOMTime(Entry currentOp, Chromosome chromosome,int estimatedStartTime,int bomtype) {
List<OrderMaterialRequirement> opboms= currentOp.getMaterialRequirements();
if(opboms==null||!_globalParam.isIsCheckMp())
......@@ -2012,8 +2015,42 @@ if(geneDetails!=null&&geneDetails.size()>0)
sfTime = Math.max(sfTime, sfTime1);
}
}
}else {
if ( bomtype == 2) {
Map<String, OrderMaterialRequirement> totalNeededByMaterial = new HashMap<>();
for (OrderMaterialRequirement req : opboms) {
OrderMaterialRequirement reqq = totalNeededByMaterial.get(req.getMaterialId());
if (reqq != null) {
double allneeded = req.getSpentQty() / req.getMainQty() * currentOp.getQuantity();
allneeded = reqq.getRequiredQuantity() + allneeded;
reqq.setRequiredQuantity(allneeded);
reqq.setQjQty(allneeded);
} else {
OrderMaterialRequirement reqq1 = ProductionDeepCopyUtil.deepCopy(req);
double allneeded = req.getSpentQty() / req.getMainQty() * currentOp.getQuantity();
reqq1.setRequiredQuantity(allneeded);
reqq1.setQjQty(allneeded);
totalNeededByMaterial.put(req.getMaterialId(), reqq1);
}
}
List<OrderMaterialRequirement> remove=new ArrayList<>();
materialRequirementService.CalBom(chromosome,0, totalNeededByMaterial,materials,baseTime.plusSeconds(estimatedStartTime) ,false,remove,null,false);
Optional<LocalDateTime> rawDateOpt = opboms.stream()
.filter(t -> "MP".equals(t.getMaterialTypeName()))
.map(OrderMaterialRequirement::getUseTime)
.filter(Objects::nonNull)
.max(LocalDateTime::compareTo);
if (rawDateOpt.isPresent()) {
rawTime = (int) Duration.between(baseTime, rawDateOpt.get()).getSeconds();
}
}
}
}
if (bomtype == 0 || bomtype == 1) {
Optional<LocalDateTime> sfDateOpt = opboms.stream()
.filter(t -> !"MP".equals(t.getMaterialTypeName()) && (t.getProductOrderID() == null || t.getProductOrderID().isEmpty()))
......
......@@ -337,9 +337,10 @@ if(isJit)
}
}
}
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);
}
totalNeededByMaterial.clear();
for (int groupId : chainGroupIds) {
List<Entry> ops = entrysBygroupId.get(groupId);
......
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