|
@@ -105,11 +105,11 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
|
|
|
ApsSolution solvedBalance = solver.solve(apsSolution);
|
|
|
/*List<ProductionProcesses> apsProcess = solvedBalance.getProcessesList();
|
|
|
solvedBalance.setProcessesList(solvedBalance.getStepBestProcessesList());*/
|
|
|
- log.info("*****************************");
|
|
|
+ log.info("**************排程评分分析***************");
|
|
|
SolutionManager<ApsSolution, HardSoftScore> scoreManager = SolutionManager.create(solverFactory);
|
|
|
ScoreExplanation<ApsSolution, HardSoftScore> explain = scoreManager.explain(solvedBalance);
|
|
|
log.info(explain.toString());
|
|
|
- log.info("*****************************");
|
|
|
+ log.info("**************排程评分分析***************");
|
|
|
/*solvedBalance.setProcessesList(apsProcess);
|
|
|
ScoreExplanation<ApsSolution, HardSoftScore> explain1 = scoreManager.explain(solvedBalance);
|
|
|
log.info(explain1.toString());*/
|
|
@@ -271,6 +271,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
|
|
|
if(StrUtil.isBlank(process.getTaskType())){
|
|
|
process.setTaskType("processes");
|
|
|
}
|
|
|
+ process.setOrderId(process.getProduceOrder().get(0).getId());
|
|
|
// 前道工序
|
|
|
if(process.getPreviousProcessesIds() != null && process.getPreviousProcessesIds().size()>0){
|
|
|
List<ProductionProcesses> pres = new ArrayList<>();
|
|
@@ -396,59 +397,111 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
|
|
|
List<ProductionProcesses> processesSort = sources;
|
|
|
// 已排序的数据
|
|
|
// List<String> bsIds = new ArrayList<>();
|
|
|
- // 最开始任务
|
|
|
- List<ProductionProcesses> roots = new ArrayList<>();
|
|
|
- for (ProductionProcesses productionProcesses : processesSort) {
|
|
|
- if(productionProcesses.getPreviousProcesses() == null || productionProcesses.getPreviousProcesses().size() == 0){
|
|
|
- roots.add(productionProcesses);
|
|
|
+
|
|
|
+// Collections.sort(roots, Comparator.comparing(pro -> pro.getProduceOrder().get(0).getDeliveryDate()));
|
|
|
+ // 按坯料计划分组
|
|
|
+ Map<String, List<ProductionProcesses>> orderProcess = processesSort.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
|
|
|
+ List<ProduceOrder> produceOrders = new ArrayList<>();
|
|
|
+ orderProcess.forEach((k,v)->{
|
|
|
+ produceOrders.add(v.get(0).getProduceOrder().get(0));
|
|
|
+ });
|
|
|
+ Collections.sort(produceOrders, Comparator.comparing(pro -> pro.getDeliveryDate()));
|
|
|
+ Map<String,Integer> sortMap = new HashMap<>();
|
|
|
+ sortMap.put("sortInt",0);
|
|
|
+ if(produceOrders != null && produceOrders.size()>0){
|
|
|
+ for (ProduceOrder produceOrder : produceOrders) {
|
|
|
+ List<ProductionProcesses> processesList = orderProcess.get(produceOrder.getId());
|
|
|
+ Map<String,List<ProductionProcesses>> bsMap = new HashMap<>();
|
|
|
+ // 最开始任务
|
|
|
+ List<ProductionProcesses> roots = new ArrayList<>();
|
|
|
+ for (ProductionProcesses productionProcesses : processesList) {
|
|
|
+ if(!bsMap.containsKey(productionProcesses.getUniqueBsProcessesId())){
|
|
|
+ bsMap.put(productionProcesses.getUniqueBsProcessesId(),new ArrayList<>());
|
|
|
+ }
|
|
|
+ bsMap.get(productionProcesses.getUniqueBsProcessesId()).add(productionProcesses);
|
|
|
+ if(productionProcesses.getPreviousProcesses() == null || productionProcesses.getPreviousProcesses().size() == 0){
|
|
|
+ roots.add(productionProcesses);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(roots != null && roots.size()>0){
|
|
|
+ ProductionProcesses rootPro = roots.get(0);
|
|
|
+ nextProSort(sortMap,bsMap,rootPro.getUniqueBsProcessesId());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- Collections.sort(roots, Comparator.comparing(pro -> pro.getProduceOrder().get(0).getDeliveryDate()));
|
|
|
+
|
|
|
// 订单作业列表
|
|
|
- Map<String,List<ProductionProcesses>> orderMap = new HashMap<>();
|
|
|
+ /*Map<String,Integer> orderMap = new HashMap<>();
|
|
|
+ orderMap.put("orderMark",0);
|
|
|
for (ProductionProcesses root : roots) {
|
|
|
- Integer i = 1;
|
|
|
- root.setOrderMark(i);
|
|
|
- setProcessSort(root,i);
|
|
|
+ orderMap.put("orderMark",orderMap.get("orderMark")+1);
|
|
|
+ root.setOrderMark(orderMap.get("orderMark"));
|
|
|
+ setProcessSort(root,orderMap);
|
|
|
}
|
|
|
for (ProductionProcesses source : sources) {
|
|
|
if(source.getOrderMark() == null){
|
|
|
System.out.println(source);
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
sources.sort(Comparator.comparing(ProductionProcesses::getOrderMark));
|
|
|
|
|
|
- /*for (ProductionProcesses root : roots) {
|
|
|
- List<Integer> repeatPro = new ArrayList<>();
|
|
|
- Map<Integer,Integer> repeatProMap = new HashMap<>();
|
|
|
- List<ProductionProcesses> subprocesses = new ArrayList<>();
|
|
|
- subprocesses.add(root);
|
|
|
- getNextProcess(root,subprocesses,repeatPro,processes,repeatProMap);
|
|
|
+ return processes;
|
|
|
+ }
|
|
|
|
|
|
- if(repeatPro != null && repeatPro.size()>0){
|
|
|
- Collections.sort(repeatPro);
|
|
|
- int a = 0;
|
|
|
- for (Integer integer : repeatPro) {
|
|
|
- for(int i=integer-1;i>=a;i--){
|
|
|
- int finalI = i;
|
|
|
- List<ProductionProcesses> ps = processes.stream().filter(v -> v.getId().equals(subprocesses.get(finalI).getId())).collect(Collectors.toList());
|
|
|
- if(ps == null || ps .size() == 0){
|
|
|
- processes.add(repeatProMap.get(integer),subprocesses.get(i));
|
|
|
- }
|
|
|
+ private void nextProSort(Map<String,Integer> sortMap,Map<String,List<ProductionProcesses>> bsMap,String uniqueBsProcessesId){
|
|
|
+ List<ProductionProcesses> processesList1 = bsMap.get(uniqueBsProcessesId);
|
|
|
+ if(processesList1 != null && processesList1.size()>0){
|
|
|
+ if(processesList1.get(0).getProcessType().equals("成退") || processesList1.get(0).getProcessType().equals("中退")){
|
|
|
+ List<ProductionProcesses> pres = bsMap.get(processesList1.get(0).getPreviousProcesses().get(0).getUniqueBsProcessesId());
|
|
|
+ if(processesList1.get(0).getPreviousProcesses() != null && processesList1.get(0).getPreviousProcesses().size()>0){
|
|
|
+ for (ProductionProcesses productionProcesses : processesList1) {
|
|
|
+ productionProcesses.setOrderMark(productionProcesses.getPreviousProcesses().get(0).getOrderMark());
|
|
|
+ }
|
|
|
+ processesList1.sort(Comparator.comparing(ProductionProcesses::getOrderMark));
|
|
|
+ for (int i = processesList1.size()-1;i >= 0;i--) {
|
|
|
+ ProductionProcesses productionProcesses = processesList1.get(i);
|
|
|
+ sortMap.put("sortInt",sortMap.get("sortInt")+1);
|
|
|
+ productionProcesses.setOrderMark(sortMap.get("sortInt"));
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ for (int i = 0;i<processesList1.size();i++) {
|
|
|
+ ProductionProcesses productionProcesses = processesList1.get(i);
|
|
|
+ sortMap.put("sortInt",sortMap.get("sortInt")+1);
|
|
|
+ productionProcesses.setOrderMark(sortMap.get("sortInt"));
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}else{
|
|
|
- processes.addAll(subprocesses);
|
|
|
+ for (int i = 0;i<processesList1.size();i++) {
|
|
|
+ ProductionProcesses productionProcesses = processesList1.get(i);
|
|
|
+ sortMap.put("sortInt",sortMap.get("sortInt")+1);
|
|
|
+ productionProcesses.setOrderMark(sortMap.get("sortInt"));
|
|
|
+ }
|
|
|
}
|
|
|
- }*/
|
|
|
- return processes;
|
|
|
+ Set<String> uniqueBsProcessesIdSet = new HashSet<>();
|
|
|
+ for (ProductionProcesses productionProcesses : processesList1) {
|
|
|
+ if(productionProcesses.getNextProcesses() != null && productionProcesses.getNextProcesses().size()>0){
|
|
|
+ for (ProductionProcesses nextProcess : productionProcesses.getNextProcesses()) {
|
|
|
+ uniqueBsProcessesIdSet.add(nextProcess.getUniqueBsProcessesId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(uniqueBsProcessesIdSet != null && uniqueBsProcessesIdSet.size()>0){
|
|
|
+ for (String psid : uniqueBsProcessesIdSet) {
|
|
|
+ nextProSort(sortMap,bsMap,psid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- private void setProcessSort(ProductionProcesses proces,Integer i){
|
|
|
- i++;
|
|
|
+ private void setProcessSort(ProductionProcesses proces,Map<String,Integer> orderMap){
|
|
|
if(proces.getNextProcesses() != null && proces.getNextProcesses().size()>0){
|
|
|
for (ProductionProcesses nextProcess : proces.getNextProcesses()) {
|
|
|
- if(nextProcess.getOrderMark() != null && nextProcess.getOrderMark()>0){
|
|
|
+ orderMap.put("orderMark",orderMap.get("orderMark")+1);
|
|
|
+ nextProcess.setOrderMark(orderMap.get("orderMark"));
|
|
|
+ setProcessSort(nextProcess,orderMap);
|
|
|
+
|
|
|
+ /*if(nextProcess.getOrderMark() != null && nextProcess.getOrderMark()>0){
|
|
|
if(i>nextProcess.getOrderMark()){
|
|
|
nextProcess.setOrderMark(i);
|
|
|
setProcessSort(nextProcess,i);
|
|
@@ -456,7 +509,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
|
|
|
}else{
|
|
|
nextProcess.setOrderMark(i);
|
|
|
setProcessSort(nextProcess,i);
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
}
|
|
|
}
|