|
|
|
@ -207,6 +207,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
processList.forEach(item -> { |
|
|
|
processList.forEach(item -> { |
|
|
|
processMap.put(item.getId(), item.getName()); |
|
|
|
processMap.put(item.getId(), item.getName()); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
Map<Long, String> mainProcessMap = new HashMap<>(); |
|
|
|
|
|
|
|
processList.forEach(item -> { |
|
|
|
|
|
|
|
mainProcessMap.put(item.getId(), item.getIsMain()); |
|
|
|
|
|
|
|
}); |
|
|
|
//初始化作业中心
|
|
|
|
//初始化作业中心
|
|
|
|
List<WorkCenterEntity> workCenterList = workCenterService.list(); |
|
|
|
List<WorkCenterEntity> workCenterList = workCenterService.list(); |
|
|
|
Map<Long, String> workCenterMap = workCenterList.stream().collect(Collectors.toMap(BaseEntity::getId, WorkCenterEntity::getWcName)); |
|
|
|
Map<Long, String> workCenterMap = workCenterList.stream().collect(Collectors.toMap(BaseEntity::getId, WorkCenterEntity::getWcName)); |
|
|
|
@ -238,14 +242,14 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
) |
|
|
|
) |
|
|
|
)); |
|
|
|
)); |
|
|
|
//处理带有公共前置工序的订单
|
|
|
|
//处理带有公共前置工序的订单
|
|
|
|
Map<Long, List<WorkPlanEntity>> planMap = dealCommonCraftOrders(); |
|
|
|
Map<Long, List<WorkPlanEntity>> planMap = dealCommonCraftOrders(mainProcessMap); |
|
|
|
//多线程排产
|
|
|
|
//多线程排产
|
|
|
|
ExecutorService threadPool = new ThreadPoolExecutor( |
|
|
|
ExecutorService threadPool = new ThreadPoolExecutor( |
|
|
|
map.size(), map.size(), 0L, TimeUnit.MILLISECONDS, |
|
|
|
map.size(), map.size(), 0L, TimeUnit.MILLISECONDS, |
|
|
|
new LinkedBlockingQueue<>(), |
|
|
|
new LinkedBlockingQueue<>(), |
|
|
|
r -> new Thread(r, "scheduling-thread-" + System.currentTimeMillis())); |
|
|
|
r -> new Thread(r, "scheduling-thread-" + System.currentTimeMillis())); |
|
|
|
map.forEach((workcenter, orders) -> { |
|
|
|
map.forEach((workcenter, orders) -> { |
|
|
|
threadPool.execute(() -> allocateResources(orders, personAbilityMap, mainProducerMap, planMap, processMap, sintMap, workCenterMap, craftAbilityMap)); |
|
|
|
threadPool.execute(() -> allocateResources(orders, personAbilityMap, mainProducerMap, planMap, processMap, sintMap, workCenterMap, craftAbilityMap, mainProcessMap)); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -454,7 +458,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
Map<Long, String> processMap, |
|
|
|
Map<Long, String> processMap, |
|
|
|
Map<Long, List<SintTempCurveEntity>> sintMap, |
|
|
|
Map<Long, List<SintTempCurveEntity>> sintMap, |
|
|
|
Map<Long, String> workCenterMap, |
|
|
|
Map<Long, String> workCenterMap, |
|
|
|
Map<Long, String> craftAbilityMap) { |
|
|
|
Map<Long, String> craftAbilityMap, |
|
|
|
|
|
|
|
Map<Long, String> mainProcessMap) { |
|
|
|
List<StGlassCakeOutDTO> glassCakeOutList = new ArrayList<>(); |
|
|
|
List<StGlassCakeOutDTO> glassCakeOutList = new ArrayList<>(); |
|
|
|
List<WorkOrderEntity> workOrderList = new ArrayList<>(); |
|
|
|
List<WorkOrderEntity> workOrderList = new ArrayList<>(); |
|
|
|
//list = mergeYieldOrderList(list);
|
|
|
|
//list = mergeYieldOrderList(list);
|
|
|
|
@ -534,6 +539,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setUnqualifiedQty(0); |
|
|
|
workPlan.setUnqualifiedQty(0); |
|
|
|
workPlan.setScrapQty(0); |
|
|
|
workPlan.setScrapQty(0); |
|
|
|
workPlan.setOcId(craft.getOcId()); |
|
|
|
workPlan.setOcId(craft.getOcId()); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
//下一道工序如果不是外协就只排产到外协工序停止
|
|
|
|
//下一道工序如果不是外协就只排产到外协工序停止
|
|
|
|
if(i!=craftList.size()-1 && !craftList.get(i+1).getIsOutsource()){ |
|
|
|
if(i!=craftList.size()-1 && !craftList.get(i+1).getIsOutsource()){ |
|
|
|
@ -546,7 +552,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
//同炉同槽
|
|
|
|
//同炉同槽
|
|
|
|
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ |
|
|
|
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ |
|
|
|
//热表同槽
|
|
|
|
//热表同槽
|
|
|
|
sameMap = sameTrough(order, craft, localDateTime, workPlanList, prevProcessEnd); |
|
|
|
sameMap = sameTrough(order, craft, localDateTime, workPlanList, prevProcessEnd, mainProcessMap); |
|
|
|
//同槽就不需要继续匹配了
|
|
|
|
//同槽就不需要继续匹配了
|
|
|
|
if (sameMap.get("isSameTrough").toString() == "true") { |
|
|
|
if (sameMap.get("isSameTrough").toString() == "true") { |
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); |
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); |
|
|
|
@ -556,7 +562,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
|
//烧结同炉
|
|
|
|
//烧结同炉
|
|
|
|
if (sintMap.containsKey(craft.getPpsId())) { |
|
|
|
if (sintMap.containsKey(craft.getPpsId())) { |
|
|
|
sameMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd); |
|
|
|
sameMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd, mainProcessMap); |
|
|
|
//同炉的话就不用走下面的匹配了,直接下一工序
|
|
|
|
//同炉的话就不用走下面的匹配了,直接下一工序
|
|
|
|
if (sameMap.get("isSameFurnace").toString() == "true") { |
|
|
|
if (sameMap.get("isSameFurnace").toString() == "true") { |
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); |
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); |
|
|
|
@ -703,6 +709,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
processPlanList.add(workPlan); |
|
|
|
processPlanList.add(workPlan); |
|
|
|
//更新剩余产能
|
|
|
|
//更新剩余产能
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity)); |
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity)); |
|
|
|
@ -868,6 +875,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setQualifiedQty(0); |
|
|
|
workPlan.setQualifiedQty(0); |
|
|
|
workPlan.setUnqualifiedQty(0); |
|
|
|
workPlan.setUnqualifiedQty(0); |
|
|
|
workPlan.setScrapQty(0); |
|
|
|
workPlan.setScrapQty(0); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
@ -1317,7 +1325,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
return batches; |
|
|
|
return batches; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Map<Long, List<WorkPlanEntity>> dealCommonCraftOrders() { |
|
|
|
public Map<Long, List<WorkPlanEntity>> dealCommonCraftOrders(Map<Long, String> mainProcessMap) { |
|
|
|
log.info("处理前置公共工序开始!"); |
|
|
|
log.info("处理前置公共工序开始!"); |
|
|
|
List<YieldOrderEntity> commonCraftOrderList = yieldOrderService.selectCommonCraftOrderList(); |
|
|
|
List<YieldOrderEntity> commonCraftOrderList = yieldOrderService.selectCommonCraftOrderList(); |
|
|
|
Map<Long, List<WorkPlanEntity>> planMap = new HashMap<>(); |
|
|
|
Map<Long, List<WorkPlanEntity>> planMap = new HashMap<>(); |
|
|
|
@ -1368,6 +1376,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1446,7 +1455,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
YieldOrderCraftEntity craft, |
|
|
|
YieldOrderCraftEntity craft, |
|
|
|
LocalDateTime dateTime, |
|
|
|
LocalDateTime dateTime, |
|
|
|
List<WorkPlanEntity> workPlanList, |
|
|
|
List<WorkPlanEntity> workPlanList, |
|
|
|
LocalDateTime prevProcessEnd) { |
|
|
|
LocalDateTime prevProcessEnd, |
|
|
|
|
|
|
|
Map<Long, String> mainProcessMap) { |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
Boolean isSameTrough = false; |
|
|
|
Boolean isSameTrough = false; |
|
|
|
SameTroughEntity sameTrough = sameTroughService.getOne(Wrappers.<SameTroughEntity>lambdaQuery() |
|
|
|
SameTroughEntity sameTrough = sameTroughService.getOne(Wrappers.<SameTroughEntity>lambdaQuery() |
|
|
|
@ -1519,6 +1529,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
processPlanList.add(workPlan); |
|
|
|
processPlanList.add(workPlan); |
|
|
|
|
|
|
|
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); |
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); |
|
|
|
@ -1664,6 +1675,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
processPlanList.add(workPlan); |
|
|
|
processPlanList.add(workPlan); |
|
|
|
|
|
|
|
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); |
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); |
|
|
|
@ -1709,7 +1721,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
Map<Long, List<SintTempCurveEntity>> sintMap, |
|
|
|
Map<Long, List<SintTempCurveEntity>> sintMap, |
|
|
|
PartEntity part, |
|
|
|
PartEntity part, |
|
|
|
Map<Long, String> processMap, |
|
|
|
Map<Long, String> processMap, |
|
|
|
LocalDateTime prevProcessEnd) { |
|
|
|
LocalDateTime prevProcessEnd, |
|
|
|
|
|
|
|
Map<Long, String> mainProcessMap) { |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
Boolean isSameFurnace = false; |
|
|
|
Boolean isSameFurnace = false; |
|
|
|
if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode()) {//烧结订单
|
|
|
|
if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode()) {//烧结订单
|
|
|
|
@ -1805,6 +1818,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipCode(equipResource.getEquipCode()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipName(equipResource.getEquipName()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
workPlan.setEquipResourceId(equipResource.getId().toString()); |
|
|
|
|
|
|
|
workPlan.setCruxProcess(mainProcessMap.get(craft.getPpsId())); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
workPlanList.add(workPlan); |
|
|
|
|
|
|
|
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); |
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); |
|
|
|
|