|
@@ -100,10 +100,78 @@ public class ApsServiceImpl implements ApsService {
|
|
if (fbNotLock != null && fbNotLock.size() > 0) {
|
|
if (fbNotLock != null && fbNotLock.size() > 0) {
|
|
apsBlankOrders.addAll(fbNotLock);
|
|
apsBlankOrders.addAll(fbNotLock);
|
|
}
|
|
}
|
|
|
|
+ // 坯料计划排序
|
|
|
|
+ Collections.sort(apsBlankOrders,(v1,v2)->{
|
|
|
|
+ // 合金
|
|
|
|
+ String alloy1 = v1.getAlloy();
|
|
|
|
+ String alloy2 = v2.getAlloy();
|
|
|
|
+ // 合金状态
|
|
|
|
+ String alloystatus1 = v1.getAlloystatus();
|
|
|
|
+ String alloystatus2 = v2.getAlloystatus();
|
|
|
|
+ // 产品类型
|
|
|
|
+ String producttype1 = v1.getProducttype();
|
|
|
|
+ String producttype2 = v2.getProducttype();
|
|
|
|
+ // 宽度
|
|
|
|
+ BigDecimal prowidth1 = v1.getProwidth();
|
|
|
|
+ BigDecimal prowidth2 = v2.getProwidth();
|
|
|
|
+ // 厚度
|
|
|
|
+ BigDecimal thickness1 = v1.getThickness();
|
|
|
|
+ BigDecimal thickness2 = v2.getThickness();
|
|
|
|
+ // 重量
|
|
|
|
+ BigDecimal singlerollweight1 = v1.getSinglerollweight();
|
|
|
|
+ BigDecimal singlerollweight2 = v2.getSinglerollweight();
|
|
|
|
+
|
|
|
|
+ int a = 0;
|
|
|
|
+ // 宽度
|
|
|
|
+ if(prowidth1.compareTo(prowidth2) == 0){
|
|
|
|
+ // 合金
|
|
|
|
+ if(alloy1.compareTo(alloy2) == 0){
|
|
|
|
+ // 合金状态
|
|
|
|
+ if(alloystatus1.compareTo(alloystatus2) == 0){
|
|
|
|
+ // 产品类型
|
|
|
|
+ if(producttype1.compareTo(producttype2) == 0){
|
|
|
|
+ // 厚度
|
|
|
|
+ if(thickness1.compareTo(thickness2) == 0){
|
|
|
|
+ // 重量
|
|
|
|
+ if(singlerollweight1.compareTo(singlerollweight2) == 0){
|
|
|
|
+ a = 0;
|
|
|
|
+ }else if(singlerollweight1.compareTo(singlerollweight2) > 0){
|
|
|
|
+ a = -1;
|
|
|
|
+ }else{
|
|
|
|
+ a = 1;
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ if(thickness1.compareTo(thickness2) > 0){
|
|
|
|
+ a = -1;
|
|
|
|
+ }else{
|
|
|
|
+ a = 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ a = producttype1.compareTo(producttype2);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ a = alloystatus1.compareTo(alloystatus2);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ a = alloy1.compareTo(alloy2);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ if(prowidth1.compareTo(prowidth2) > 0){
|
|
|
|
+ a = -1;
|
|
|
|
+ }else{
|
|
|
|
+ a = 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return a;
|
|
|
|
+ });
|
|
// 按订单分批排程
|
|
// 按订单分批排程
|
|
- Map<String, List<ApsBlankOrderVo>> groupedItems = apsBlankOrders.stream()
|
|
|
|
- .collect(Collectors.groupingBy(ApsBlankOrderVo::getProductionorderid));
|
|
|
|
- groupedItems.forEach((k,v)->{
|
|
|
|
|
|
+// Map<String, List<ApsBlankOrderVo>> groupedItems = apsBlankOrders.stream()
|
|
|
|
+// .collect(Collectors.groupingBy(ApsBlankOrderVo::getProductionorderid));
|
|
|
|
+// groupedItems.forEach((k,v)->{
|
|
|
|
+ apsBlankOrders.forEach((bo)->{
|
|
|
|
+ List<ApsBlankOrderVo> v = new ArrayList<>();
|
|
|
|
+ v.add(bo);
|
|
// 模型转换
|
|
// 模型转换
|
|
ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
|
|
ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
|
|
JSONConfig jsonConfig = JSONConfig.create();
|
|
JSONConfig jsonConfig = JSONConfig.create();
|
|
@@ -464,65 +532,75 @@ public class ApsServiceImpl implements ApsService {
|
|
.eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
|
|
.eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
|
|
List<ProductionProcesses> operationProcess = new ArrayList<>();
|
|
List<ProductionProcesses> operationProcess = new ArrayList<>();
|
|
if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
|
|
if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
|
|
- for (Integer i = 0; i < operationDo.getPlanprocessrall(); i++) {
|
|
|
|
- ProductionProcesses processes = new ProductionProcesses();
|
|
|
|
- // 工序所属订单
|
|
|
|
- processes.setProduceOrder(Arrays.asList(new ProduceOrder[]{produceOrder}));
|
|
|
|
- // 模型ID
|
|
|
|
- processes.setId(SecurityUtil.getUUID());
|
|
|
|
- // 业务表主键ID
|
|
|
|
- List<String> bss = new ArrayList<>();
|
|
|
|
- bss.add(operationDo.getId());
|
|
|
|
- processes.setBsProcessesId(bss);
|
|
|
|
- // 工序任务可选设备
|
|
|
|
- processes.setOptionalEquipments(optionalEquipments);
|
|
|
|
- // 批次
|
|
|
|
- processes.setProducePcNum(operationDo.getPlanprocessrall());
|
|
|
|
- processes.setProcessType(operationDo.getProcess());
|
|
|
|
- // 单次加工时长
|
|
|
|
- processes.setUnitProduceTime(operationDo.getOnceprocessmin().intValue());
|
|
|
|
- processes.setProduceTime(operationDo.getOnceprocessmin().intValue());
|
|
|
|
- // 单卷宽度和重量
|
|
|
|
- processes.setVolumeWidth(operationDo.getProwidth());
|
|
|
|
- processes.setSinglerollweight(operationDo.getSinglerollweight());
|
|
|
|
- processes.setVolumeThickness(operationDo.getThickness());
|
|
|
|
- if (operationDo.getMinflowwaitmin() != null) {
|
|
|
|
- processes.setMinWaitTime(operationDo.getMinflowwaitmin().intValue());
|
|
|
|
- }
|
|
|
|
- if (operationDo.getMaxflowwaitmin() != null) {
|
|
|
|
- processes.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
|
|
|
|
- }
|
|
|
|
- // 合金
|
|
|
|
- processes.setVolumeMetal(operationDo.getMetal());
|
|
|
|
- if("成退".equals(operationDo.getProcess()) || "中退".equals(operationDo.getProcess())){
|
|
|
|
- processes.setVolumeMetalstate(outMaterDos.get(0).getMetalstate());
|
|
|
|
- }else{
|
|
|
|
- processes.setVolumeMetalstate(operationDo.getMetalstate());
|
|
|
|
- }
|
|
|
|
- // 连续生产标识设置
|
|
|
|
- // 合金+输入物料+宽度+输入物料厚度+输出物料厚度(取第一个冷轧工序使用)
|
|
|
|
- processes.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getProducttype() + "^_^" + operationDo.getProwidth() + "^_^" + operationDo.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
|
|
|
|
- processes.setPrepressworkmin(operationDo.getPrepressworkmin() == null ? null : operationDo.getPrepressworkmin().intValue());
|
|
|
|
- processes.setCutfinishmin(operationDo.getCutfinishmin() == null ? null : operationDo.getCutfinishmin().intValue());
|
|
|
|
- // 锁定的作业加上锁定标识
|
|
|
|
- if (LOCKMARK_Y.equals(operationDo.getLockmark())) {
|
|
|
|
- ApsProcessOperationProcessEquDo processEquServiceOne = processOperationProcessEquService.getOne(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
|
- .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
|
|
|
|
- if (processEquServiceOne != null) {
|
|
|
|
|
|
+ if(LOCKMARK_Y.equals(operationDo.getLockmark())){
|
|
|
|
+ List<ApsProcessOperationProcessEquDo> processDetails = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
|
|
|
|
+ for (ApsProcessOperationProcessEquDo processDetail : processDetails) {
|
|
|
|
+ // 锁定的作业加上锁定标识
|
|
|
|
+ if (LOCKMARK_Y.equals(operationDo.getLockmark())) {
|
|
|
|
+ ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos);
|
|
processes.setIfLock(true);
|
|
processes.setIfLock(true);
|
|
- processes.setEquipmentId(processEquServiceOne.getProcessdeviceid());
|
|
|
|
|
|
+ processes.setEquipmentId(processDetail.getProcessdeviceid());
|
|
List<String> opeqs = new ArrayList<>();
|
|
List<String> opeqs = new ArrayList<>();
|
|
- opeqs.add(processEquServiceOne.getProcessdeviceid());
|
|
|
|
|
|
+ opeqs.add(processDetail.getProcessdeviceid());
|
|
processes.setOptionalEquipments(opeqs);
|
|
processes.setOptionalEquipments(opeqs);
|
|
- processes.setStartTime(processEquServiceOne.getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
|
- processes.setEndTime(processEquServiceOne.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
|
|
|
+ processes.setStartTime(processDetail.getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
|
+ processes.setEndTime(processDetail.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- operationProcess.add(processes);
|
|
|
|
|
|
+ }else{
|
|
|
|
+ for (Integer i = 0; i < operationDo.getPlanprocessrall(); i++) {
|
|
|
|
+ ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos);
|
|
|
|
+ operationProcess.add(processes);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
processesList.addAll(operationProcess);
|
|
processesList.addAll(operationProcess);
|
|
operationProductionProcesses.put(operationDo.getId(),operationProcess);
|
|
operationProductionProcesses.put(operationDo.getId(),operationProcess);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private ProductionProcesses productionProcessesDetailInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
|
|
|
|
+ ,List<String> optionalEquipments,List<ApsProcessOperationOutMaterDo> outMaterDos){
|
|
|
|
+ ProductionProcesses processes = new ProductionProcesses();
|
|
|
|
+ // 工序所属订单
|
|
|
|
+ processes.setProduceOrder(Arrays.asList(new ProduceOrder[]{produceOrder}));
|
|
|
|
+ // 模型ID
|
|
|
|
+ processes.setId(SecurityUtil.getUUID());
|
|
|
|
+ // 业务表主键ID
|
|
|
|
+ List<String> bss = new ArrayList<>();
|
|
|
|
+ bss.add(operationDo.getId());
|
|
|
|
+ processes.setBsProcessesId(bss);
|
|
|
|
+ // 工序任务可选设备
|
|
|
|
+ processes.setOptionalEquipments(optionalEquipments);
|
|
|
|
+ // 批次
|
|
|
|
+ processes.setProducePcNum(operationDo.getPlanprocessrall());
|
|
|
|
+ processes.setProcessType(operationDo.getProcess());
|
|
|
|
+ // 单次加工时长
|
|
|
|
+ processes.setUnitProduceTime(operationDo.getOnceprocessmin().intValue());
|
|
|
|
+ processes.setProduceTime(operationDo.getOnceprocessmin().intValue());
|
|
|
|
+ // 单卷宽度和重量
|
|
|
|
+ processes.setVolumeWidth(operationDo.getProwidth());
|
|
|
|
+ processes.setSinglerollweight(operationDo.getSinglerollweight());
|
|
|
|
+ processes.setVolumeThickness(operationDo.getThickness());
|
|
|
|
+ if (operationDo.getMinflowwaitmin() != null) {
|
|
|
|
+ processes.setMinWaitTime(operationDo.getMinflowwaitmin().intValue());
|
|
|
|
+ }
|
|
|
|
+ if (operationDo.getMaxflowwaitmin() != null) {
|
|
|
|
+ processes.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
|
|
|
|
+ }
|
|
|
|
+ // 合金
|
|
|
|
+ processes.setVolumeMetal(operationDo.getMetal());
|
|
|
|
+ if("成退".equals(operationDo.getProcess()) || "中退".equals(operationDo.getProcess())){
|
|
|
|
+ processes.setVolumeMetalstate(outMaterDos.get(0).getMetalstate());
|
|
|
|
+ }else{
|
|
|
|
+ processes.setVolumeMetalstate(operationDo.getMetalstate());
|
|
|
|
+ }
|
|
|
|
+ // 连续生产标识设置
|
|
|
|
+ // 合金+输入物料+宽度+输入物料厚度+输出物料厚度(取第一个冷轧工序使用)
|
|
|
|
+ processes.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getProducttype() + "^_^" + operationDo.getProwidth() + "^_^" + operationDo.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
|
|
|
|
+ processes.setPrepressworkmin(operationDo.getPrepressworkmin() == null ? null : operationDo.getPrepressworkmin().intValue());
|
|
|
|
+ processes.setCutfinishmin(operationDo.getCutfinishmin() == null ? null : operationDo.getCutfinishmin().intValue());
|
|
|
|
+ return processes;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|