Browse Source

aps-批量排程,入参坯料计划ID去重

sucheng 1 năm trước cách đây
mục cha
commit
968af24c4d

+ 163 - 143
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
 import java.math.BigDecimal;
 import java.time.ZoneId;
 import java.util.*;
@@ -68,16 +69,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     /**
      * 取消订单排程
+     *
      * @param apsProductionOrderIds
      */
     @Override
-    public void orderApsCancel(List<String> apsProductionOrderIds) throws Exception{
-        if(apsProductionOrderIds != null && apsProductionOrderIds.size()>0){
+    public void orderApsCancel(List<String> apsProductionOrderIds) throws Exception {
+        if (apsProductionOrderIds != null && apsProductionOrderIds.size() > 0) {
             List<ApsBlankOrderDo> blankOrderDos = this.list(new LambdaQueryWrapper<ApsBlankOrderDo>().in(ApsBlankOrderDo::getProductionorderid, apsProductionOrderIds));
-            if(blankOrderDos != null && blankOrderDos.size()>0){
+            if (blankOrderDos != null && blankOrderDos.size() > 0) {
                 List<String> blankids = blankOrderDos.stream().map(ApsBlankOrderDo::getId).collect(Collectors.toList());
                 // 删除已排程的工序作业
-                processOperationProcessEquService.remove(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid,blankids));
+                processOperationProcessEquService.remove(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
                 // 更新订单的排程状态
                 List<ApsProductionOrderDo> productionOrderDos = new ArrayList<>();
                 for (String apsProductionOrderId : apsProductionOrderIds) {
@@ -86,7 +88,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     productionOrderDo.setSchedulstatus(SaveConstans.SchedulstatusTyep.SCHEDULSTATUS_TOSCHEDULE);
                     productionOrderDos.add(productionOrderDo);
                 }
-                if(productionOrderDos != null && productionOrderDos.size()>0){
+                if (productionOrderDos != null && productionOrderDos.size() > 0) {
                     apsProductionOrderService.updateBatchById(productionOrderDos);
                 }
                 // 更新坯料计划的锁定状态
@@ -103,13 +105,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     /**
      * 锁定、解锁
+     *
      * @param orderLockVo
      * @throws Exception
      */
     @Override
     public void orderLock(OrderLockVo orderLockVo) throws Exception {
-        if(StringUtils.isNotBlank(orderLockVo.getLockMark())){
-            if(orderLockVo.getBlackOrderId() != null && orderLockVo.getBlackOrderId().size()>0){
+        if (StringUtils.isNotBlank(orderLockVo.getLockMark())) {
+            if (orderLockVo.getBlackOrderId() != null && orderLockVo.getBlackOrderId().size() > 0) {
                 // 组装待更新坯料计划实体
                 List<ApsBlankOrderDo> blankOrderDos = new ArrayList<>();
                 List<String> blankids = new ArrayList<>();
@@ -121,13 +124,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     blankids.add(id);
                 }
                 // 坯料计划锁定标识更新
-                if(blankOrderDos != null && blankOrderDos.size()>0){
+                if (blankOrderDos != null && blankOrderDos.size() > 0) {
                     this.updateBatchById(blankOrderDos);
                 }
                 // 工序作业锁定标识更新
-                apsProcessOperationService.update(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid,blankids));
+                apsProcessOperationService.update(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankids));
                 // 工序作业排程计划锁定
-                processOperationProcessEquService.update(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid,blankids));
+                processOperationProcessEquService.update(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
             }
         }
     }
@@ -137,51 +140,65 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      * 所有待发布的未锁定的订单重新排程
      */
     @Override
-    public void apsReScheduling() throws Exception{
+    public void apsReScheduling() throws Exception {
         List<ApsBlankOrderVo> notLockOrders = apsBlankOrderDao.getNotLockOrders();
         blankOrderAps(notLockOrders);
     }
 
     /**
      * 订单批量排程
+     *
      * @param apsPlanVo
      */
-    public void apsScheduling(ApsPlanVo apsPlanVo) throws Exception{
+    public void apsScheduling(ApsPlanVo apsPlanVo) throws Exception {
         List<ApsBlankOrderVo> apsBlankOrders = new ArrayList<>();
-        if(apsPlanVo.getApsProductionOrders() != null){
+        if (apsPlanVo.getApsProductionOrders() != null) {
             for (ApsProductionOrderDo apsProductionOrder : apsPlanVo.getApsProductionOrders()) {
                 List<ApsBlankOrderVo> byOrderId = apsBlankOrderDao.getByOrderId(apsProductionOrder.getId());
-                if(byOrderId != null && byOrderId.size()>0){
+                if (byOrderId != null && byOrderId.size() > 0) {
                     apsBlankOrders.addAll(byOrderId);
                 }
             }
         }
-        if(apsPlanVo.getApsBlankOrderDos() != null && apsPlanVo.getApsBlankOrderDos().size()>0){
+        if (apsPlanVo.getApsBlankOrderDos() != null && apsPlanVo.getApsBlankOrderDos().size() > 0) {
             apsBlankOrders.addAll(apsPlanVo.getApsBlankOrderDos());
         }
-        blankOrderAps(apsBlankOrders);
+        //去重
+        Set<String> blankIds = new HashSet<>();
+        //去重后的坯料计划集合
+        List<ApsBlankOrderVo> resBlankList = new LinkedList<>();
+        for (ApsBlankOrderVo apsBlankOrder : apsBlankOrders) {
+            String id = apsBlankOrder.getId();
+            if (blankIds.contains(id)) {
+                continue;
+            }
+            blankIds.add(id);
+            resBlankList.add(apsBlankOrder);
+        }
+        blankOrderAps(resBlankList);
     }
 
     /**
      * 生产订单排程
+     *
      * @param apsBlankOrders
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders){
+    public void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders) {
         assert apsBlankOrders != null : "排程订单不能为空";
         // 合并待发布未锁定的订单一起排程
         List<String> hasIds = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
         String idStrs = CollUtil.join(hasIds, "','");
-        idStrs = "'"+idStrs+"'";
+        idStrs = "'" + idStrs + "'";
         // 查询待发布未锁定的所有坯料计划
         List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs);
-        if(fbNotLock != null && fbNotLock.size()>0){
+        if (fbNotLock != null && fbNotLock.size() > 0) {
             apsBlankOrders.addAll(fbNotLock);
         }
         // 先删除所有作业的明细
-        List<String> blankids = apsBlankOrders.stream().map(v->v.getId()).collect(Collectors.toList());
-        processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid,blankids));
+        List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+        processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
         // 模型转换
         ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsBlankOrders);
         /*if(1 == 1){
@@ -189,18 +206,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         }*/
         JSONConfig jsonConfig = JSONConfig.create();
         jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
-        System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo,jsonConfig));
-        logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo,jsonConfig));
+        System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
+        logger.info("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo, jsonConfig));
         // APS平台排程接口调用
         ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
         // 排程结果保存
         List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
         // 最后节点集合
         List<ProductionProcesses> lastProcess = new ArrayList<>();
-        if(productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size()>0){
+        if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
             for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
                 // 非合并生产工序
-                if(process.getAluminumCoils() == null){
+                if (process.getAluminumCoils() == null) {
                     ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
                     apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
                     apsProcessOperationProcessEqu.setProcessid(process.getId());
@@ -220,17 +237,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 // 合并生产工序
                 else {
                     // 保存到明细表
-                    Map<String,List<AluminumCoil>> bsAl = new HashMap<>();
+                    Map<String, List<AluminumCoil>> bsAl = new HashMap<>();
                     for (AluminumCoil aluminumCoil : process.getAluminumCoils()) {
-                        if(bsAl.containsKey(aluminumCoil.getBsId())){
+                        if (bsAl.containsKey(aluminumCoil.getBsId())) {
                             bsAl.get(aluminumCoil.getBsId()).add(aluminumCoil);
-                        }else{
+                        } else {
                             List<AluminumCoil> coils = new ArrayList<>();
                             coils.add(aluminumCoil);
-                            bsAl.put(aluminumCoil.getBsId(),coils);
+                            bsAl.put(aluminumCoil.getBsId(), coils);
                         }
                     }
-                    bsAl.forEach((k,v)->{
+                    bsAl.forEach((k, v) -> {
                         ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
                         apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
                         apsProcessOperationProcessEqu.setProcessid(k);
@@ -250,42 +267,42 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 }
 
                 // 是否为最后一个节点
-                if(process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0){
+                if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
                     lastProcess.add(process);
                 }
             }
         }
-        if(apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size()>0){
+        if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
             // 再保存新数据
             processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
             // 回写订单排程交货期
-            Map<String,Date> orderDeliveryTime = new HashMap<>();
+            Map<String, Date> orderDeliveryTime = new HashMap<>();
             for (ProductionProcesses process : lastProcess) {
                 List<ProduceOrder> produceOrder = process.getProduceOrder();
-                if(produceOrder != null && produceOrder.size()>0){
+                if (produceOrder != null && produceOrder.size() > 0) {
                     for (ProduceOrder order : produceOrder) {
                         Date endDate = Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant());
                         ApsBlankOrderDo blankOrder = this.getById(order.getId());
-                        if(orderDeliveryTime.containsKey(blankOrder.getProductionorderid())){
+                        if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
                             // 对比取最大值
-                            if(endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid()))>0){
-                                orderDeliveryTime.put(blankOrder.getProductionorderid(),endDate);
+                            if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
+                                orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
                             }
-                        }else{
-                            orderDeliveryTime.put(blankOrder.getProductionorderid(),endDate);
+                        } else {
+                            orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
                         }
                     }
                 }
             }
             // 更新订单的排程交货期、排程状态
-            if(orderDeliveryTime.size()>0){
-                orderDeliveryTime.forEach((k,v)->{
+            if (orderDeliveryTime.size() > 0) {
+                orderDeliveryTime.forEach((k, v) -> {
                     ApsProductionOrderDo productionOrderDo = apsProductionOrderService.getById(k);
                     ApsProductionOrderDo apsProductionOrderDo = new ApsProductionOrderDo();
                     apsProductionOrderDo.setId(k);
                     apsProductionOrderDo.setScheduledeliverydate(v);
-                    if(productionOrderDo.getDeliverytime() != null && productionOrderDo.getDeliverytime()>0 && v != null){
-                        apsProductionOrderDo.setScheduledeliverydate(DateUtil.offsetHour(v,productionOrderDo.getDeliverytime()));
+                    if (productionOrderDo.getDeliverytime() != null && productionOrderDo.getDeliverytime() > 0 && v != null) {
+                        apsProductionOrderDo.setScheduledeliverydate(DateUtil.offsetHour(v, productionOrderDo.getDeliverytime()));
                     }
                     // 排程状态更新为待发布
                     apsProductionOrderDo.setSchedulstatus(SaveConstans.SchedulstatusTyep.SCHEDULSTATUS_TORELEASE);
@@ -298,40 +315,41 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     /**
      * 原始订单表数据转换APS平台模型数据
+     *
      * @param apsBlankOrders
      * @return
      */
     @Override
-    public ProductionScheduleVo apsPlanModelSet(List<ApsBlankOrderVo> apsBlankOrders){
+    public ProductionScheduleVo apsPlanModelSet(List<ApsBlankOrderVo> apsBlankOrders) {
         ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
         productionScheduleVo.setProductionScheduleId("批量排程");
         List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
-        if (apsConfigs != null && apsConfigs.size()>0){
+        if (apsConfigs != null && apsConfigs.size() > 0) {
             ApsScheduleConfigDo apsScheduleConfig = apsConfigs.get(0);
             productionScheduleVo.setPlanSeconds(apsScheduleConfig.getScheduleruntime());
-            Map<String,Integer> roamTime = new HashMap<>();
-            roamTime.put("WORKSHOP_IN",apsScheduleConfig.getWorkshopin());
-            roamTime.put("WORKSHOP_CROSS",apsScheduleConfig.getWorkshopcross());
+            Map<String, Integer> roamTime = new HashMap<>();
+            roamTime.put("WORKSHOP_IN", apsScheduleConfig.getWorkshopin());
+            roamTime.put("WORKSHOP_CROSS", apsScheduleConfig.getWorkshopcross());
             productionScheduleVo.setRoamTime(roamTime);
             // 排程计划开始时间
             int a = 8;
-            if(apsScheduleConfig.getStartschedulerun() != null){
+            if (apsScheduleConfig.getStartschedulerun() != null) {
                 a = apsScheduleConfig.getStartschedulerun();
             }
-            if(apsScheduleConfig.getApsplanstartdate() != null){
+            if (apsScheduleConfig.getApsplanstartdate() != null) {
                 productionScheduleVo.setApsPlanStartDate(apsScheduleConfig.getApsplanstartdate());
-            }else{
-                productionScheduleVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR,a));
+            } else {
+                productionScheduleVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR, a));
             }
-        }else{
+        } else {
             throw new CustomException("排程参数缺失");
         }
 
         // 所有设备
         List<AspCheckItemsDo> eqs = aspCheckItemsService.list(new LambdaQueryWrapper<>());
-        Map<String,AspCheckItemsDo> eqMaps = new HashMap<>();
+        Map<String, AspCheckItemsDo> eqMaps = new HashMap<>();
         for (AspCheckItemsDo eq : eqs) {
-            eqMaps.put(eq.getId(),eq);
+            eqMaps.put(eq.getId(), eq);
         }
         // 排程计划设备集合
         List<Equipment> equipmentList = new ArrayList<>();
@@ -339,10 +357,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         List<ProductionProcesses> processesList = new ArrayList<>();
         // 待合并生产的订单工序
         List<ApsProcessOperationVo> processOperationMs = new ArrayList<>();
-        if(apsBlankOrders != null && apsBlankOrders.size()>0){
+        if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
             for (ApsBlankOrderVo apsBlankOrderVo : apsBlankOrders) {
                 // 坯料计划订单
-                ProduceOrder produceOrder = new ProduceOrder(apsBlankOrderVo.getId(),apsBlankOrderVo.getMaterialname(),apsBlankOrderVo.getDeliverydate());
+                ProduceOrder produceOrder = new ProduceOrder(apsBlankOrderVo.getId(), apsBlankOrderVo.getMaterialname(), apsBlankOrderVo.getDeliverydate());
                 // 获取所有订单工序
                 List<ApsProcessOperationDo> operationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
                         .eq(ApsProcessOperationDo::getBlankid, apsBlankOrderVo.getId()));
@@ -355,15 +373,15 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     String productprocess = operationDo.getProcessway();
                     // 设备列表
                     List<String> optionalEquipments = new ArrayList<>();
-                    if(StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())){
+                    if (StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())) {
                         String[] sbIds = operationDo.getCanchoosedeviceid().split(",");
                         for (String equIds : sbIds) {
                             AspCheckItemsDo checkItemsD = eqMaps.get(equIds);
-                            if(checkItemsD != null){
+                            if (checkItemsD != null) {
                                 optionalEquipments.add(equIds);
                                 List<Equipment> eqpts = equipmentList.stream().filter(v -> v.getId().equals(equIds)).collect(Collectors.toList());
                                 // 设备集合里不存在时新增
-                                if(eqpts == null || eqpts.size() == 0){
+                                if (eqpts == null || eqpts.size() == 0) {
                                     Equipment equipment = new Equipment();
                                     equipment.setBsEquipmentId(equIds);
                                     equipment.setId(equIds);
@@ -375,10 +393,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                     // 查询设备锁定的已排程的时间段
                                     List<ApsProcessOperationProcessEquDo> processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
                                             .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
-                                            .ge(ApsProcessOperationProcessEquDo::getPlanstartdate,productionScheduleVo.getApsPlanStartDate())
+                                            .ge(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
                                             .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate)
                                     );
-                                    if(processEqus != null && processEqus.size()>0){
+                                    if (processEqus != null && processEqus.size() > 0) {
                                         List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
                                         for (ApsProcessOperationProcessEquDo equs : processEqus) {
                                             EquipmentRunTime er = new EquipmentRunTime();
@@ -394,15 +412,15 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         }
                     }
 
-                    if(SaveConstans.ProcessWay.PROCESS_WAY_MERGE.equals(productprocess)){
+                    if (SaveConstans.ProcessWay.PROCESS_WAY_MERGE.equals(productprocess)) {
                         // 合并生产工序
                         ApsProcessOperationVo processOperationVo = new ApsProcessOperationVo();
-                        BeanUtil.copyProperties(operationDo,processOperationVo);
+                        BeanUtil.copyProperties(operationDo, processOperationVo);
                         processOperationVo.setProduceOrder(produceOrder);
                         processOperationVo.setDeliverydate(apsBlankOrderVo.getDeliverydate());
                         processOperationVo.setApsBlankOrderVo(apsBlankOrderVo);
                         processOperationMs.add(processOperationVo);
-                    }else {
+                    } else {
                         // 非合并生产工序
 
                         // 模型ID
@@ -418,31 +436,31 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         processes.setProcessType(operationDo.getProcess());
                         // 单次加工时长
                         processes.setUnitProduceTime(operationDo.getOnceprocessmin().intValue());
-                        processes.setProduceTime(processes.getUnitProduceTime()*processes.getProducePcNum());
-                        if(operationDo.getMinflowwaitmin() != null){
+                        processes.setProduceTime(processes.getUnitProduceTime() * processes.getProducePcNum());
+                        if (operationDo.getMinflowwaitmin() != null) {
                             processes.setMinWaitTime(operationDo.getMinflowwaitmin().intValue());
                         }
-                        if(operationDo.getMaxflowwaitmin() != null){
+                        if (operationDo.getMaxflowwaitmin() != null) {
                             processes.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
                         }
                         // 上道工序
-                        if(StringUtils.isNotBlank(operationDo.getPreviousprocessid())){
+                        if (StringUtils.isNotBlank(operationDo.getPreviousprocessid())) {
                             processes.setPreviousProcessesIds(Arrays.asList(operationDo.getPreviousprocessid().split(",")));
                         }
                         // 下道工序
-                        if(StringUtils.isNotBlank(operationDo.getNextprocessid())){
+                        if (StringUtils.isNotBlank(operationDo.getNextprocessid())) {
                             processes.setNextProcessesIds(Arrays.asList(operationDo.getNextprocessid().split(",")));
                         }
                         // 连续生产标识设置
                         // 铸轧
-                        if("铸轧".equals(processes.getProcessType())){
+                        if ("铸轧".equals(processes.getProcessType())) {
                             // 合金+宽度
-                            processes.setSeriesProduceMark(operationDo.getMetal()+"^_^"+operationDo.getProwidth());
+                            processes.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getProwidth());
                         }
                         // 冷轧
-                        else if("冷轧".equals(processes.getProcessType())){
+                        else if ("冷轧".equals(processes.getProcessType())) {
                             // 合金+输入物料+宽度
-                            processes.setSeriesProduceMark(operationDo.getMetal()+"^_^"+operationDo.getPlaninput()+"^_^"+operationDo.getProwidth());
+                            processes.setSeriesProduceMark(operationDo.getMetal() + "^_^" + operationDo.getPlaninput() + "^_^" + operationDo.getProwidth());
                         }
 
                         processesList.add(processes);
@@ -451,7 +469,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             }
         }
         // 合并生产工序
-        List<ProductionProcesses> productionProcesses = mergeProcesses(processOperationMs,eqMaps);
+        List<ProductionProcesses> productionProcesses = mergeProcesses(processOperationMs, eqMaps);
         processesList.addAll(productionProcesses);
 
         productionScheduleVo.setProcesses(processesList);
@@ -461,26 +479,27 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     /**
      * 合并生产工序
+     *
      * @param processOperationMs
      * @return
      */
-    private List<ProductionProcesses> mergeProcesses(List<ApsProcessOperationVo> processOperationMs,Map<String,AspCheckItemsDo> eqMaps){
+    private List<ProductionProcesses> mergeProcesses(List<ApsProcessOperationVo> processOperationMs, Map<String, AspCheckItemsDo> eqMaps) {
         // 最终的合并工序
         List<ProductionProcesses> processesList = new ArrayList<>();
-        if(processOperationMs != null && processOperationMs.size()>0){
+        if (processOperationMs != null && processOperationMs.size() > 0) {
             // 按照期望交货期排序
             processOperationMs.sort(Comparator.comparing(ApsProcessOperationVo::getDeliverydate));
             // 获取所有设备,并按已存在最晚完工时间排序
             String allSelEqs = null;
             for (ApsProcessOperationVo processOperationM : processOperationMs) {
-                if(StringUtils.isNotBlank(processOperationM.getCanchoosedeviceid())){
+                if (StringUtils.isNotBlank(processOperationM.getCanchoosedeviceid())) {
                     String[] sbIds = processOperationM.getCanchoosedeviceid().split(",");
                     for (String equIds : sbIds) {
-                        if(allSelEqs == null){
-                            allSelEqs = "'"+equIds+"'";
-                        }else{
-                            if(!allSelEqs.contains(equIds)){
-                                allSelEqs = allSelEqs + ",'"+equIds+"'";
+                        if (allSelEqs == null) {
+                            allSelEqs = "'" + equIds + "'";
+                        } else {
+                            if (!allSelEqs.contains(equIds)) {
+                                allSelEqs = allSelEqs + ",'" + equIds + "'";
                             }
                         }
                     }
@@ -489,40 +508,40 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             // 设备排序
             List<AspCheckItemsDo> aspCheckItemsDos = apsBlankOrderDao.eqAscs(allSelEqs);
             // 记录当前设备已排程个数
-            Map<String,Integer> aspCheckItemUse = new HashMap<>();
-            Map<String,AspCheckItemsDo> aspCheckItemMap = new HashMap<>();
+            Map<String, Integer> aspCheckItemUse = new HashMap<>();
+            Map<String, AspCheckItemsDo> aspCheckItemMap = new HashMap<>();
             for (AspCheckItemsDo aspCheckItemsDo : aspCheckItemsDos) {
-                aspCheckItemMap.put(aspCheckItemsDo.getId(),aspCheckItemsDo);
-                aspCheckItemUse.put(aspCheckItemsDo.getId(),0);
+                aspCheckItemMap.put(aspCheckItemsDo.getId(), aspCheckItemsDo);
+                aspCheckItemUse.put(aspCheckItemsDo.getId(), 0);
             }
             for (ApsProcessOperationVo processOperationM : processOperationMs) {
                 // 首先查看是否有可以合并的已存在的工序
-                hasProcessmerge(processesList,processOperationM,aspCheckItemMap);
+                hasProcessmerge(processesList, processOperationM, aspCheckItemMap);
                 // 剩下作业加工卷数,启用新的作业
                 int planprocessrall = processOperationM.getPlanprocessrall();
-                if(planprocessrall<=0){
+                if (planprocessrall <= 0) {
                     continue;
                 }
                 Boolean a = true;
-                while (a){
+                while (a) {
                     int lastnum = processOperationM.getPlanprocessrall();
                     // 剩余的料卷
-                    if(lastnum>0){
+                    if (lastnum > 0) {
                         Integer minUse = null;
                         int haslast = 0;
                         AspCheckItemsDo aspCheckItem = null;
-                        for(int i=0;i<aspCheckItemsDos.size();i++){
+                        for (int i = 0; i < aspCheckItemsDos.size(); i++) {
                             // 选择的设备要在可选设备的范围内
-                            if(processOperationM.getCanchoosedeviceid().contains(aspCheckItemsDos.get(i).getId())){
+                            if (processOperationM.getCanchoosedeviceid().contains(aspCheckItemsDos.get(i).getId())) {
                                 // 单卷宽度不能超过设备宽度并且单卷重不能超过设备的承重
-                                if(processOperationM.getProwidth().compareTo(aspCheckItemsDos.get(i).getEquipmentwidth())<0
-                                        && processOperationM.getSinglerollweight().compareTo(aspCheckItemsDos.get(i).getEquipmentbearing())<0){
+                                if (processOperationM.getProwidth().compareTo(aspCheckItemsDos.get(i).getEquipmentwidth()) < 0
+                                        && processOperationM.getSinglerollweight().compareTo(aspCheckItemsDos.get(i).getEquipmentbearing()) < 0) {
                                     // 获取使用次数最小的可选设备
-                                    if(aspCheckItem == null){
+                                    if (aspCheckItem == null) {
                                         minUse = aspCheckItemUse.get(aspCheckItemsDos.get(i).getId());
                                         aspCheckItem = aspCheckItemsDos.get(i);
-                                    }else{
-                                        if(minUse>aspCheckItemUse.get(aspCheckItemsDos.get(i).getId())){
+                                    } else {
+                                        if (minUse > aspCheckItemUse.get(aspCheckItemsDos.get(i).getId())) {
                                             minUse = aspCheckItemUse.get(aspCheckItemsDos.get(i).getId());
                                             aspCheckItem = aspCheckItemsDos.get(i);
                                         }
@@ -531,24 +550,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                             }
                         }
                         // 新增工序作业
-                        if(aspCheckItem != null){
+                        if (aspCheckItem != null) {
                             // 选择的设备要在可选设备的范围内
-                            if(processOperationM.getCanchoosedeviceid().contains(aspCheckItem.getId())){
+                            if (processOperationM.getCanchoosedeviceid().contains(aspCheckItem.getId())) {
                                 // 单卷宽度不能超过设备宽度并且单卷重不能超过设备的承重
-                                if(processOperationM.getProwidth().compareTo(aspCheckItem.getEquipmentwidth())<0
-                                        && processOperationM.getSinglerollweight().compareTo(aspCheckItem.getEquipmentbearing())<0){
-                                    for(int n=1;n<=lastnum;n++){
+                                if (processOperationM.getProwidth().compareTo(aspCheckItem.getEquipmentwidth()) < 0
+                                        && processOperationM.getSinglerollweight().compareTo(aspCheckItem.getEquipmentbearing()) < 0) {
+                                    for (int n = 1; n <= lastnum; n++) {
                                         // 宽度余量
-                                        if(aspCheckItem.getEquipmentwidth().compareTo(processOperationM.getProwidth().multiply(new BigDecimal(n)))<0){
+                                        if (aspCheckItem.getEquipmentwidth().compareTo(processOperationM.getProwidth().multiply(new BigDecimal(n))) < 0) {
                                             break;
                                         }
                                         // 重量余量
-                                        if(aspCheckItem.getEquipmentbearing().compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(n)))<0){
+                                        if (aspCheckItem.getEquipmentbearing().compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(n))) < 0) {
                                             break;
                                         }
                                         haslast = n;
                                     }
-                                    if(haslast>0){
+                                    if (haslast > 0) {
                                         ProductionProcesses processes = new ProductionProcesses();
                                         processes.setId(SecurityUtil.getUUID());
                                         List<String> bss = new ArrayList<>();
@@ -557,13 +576,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                         processes.setProcessType(processOperationM.getProcess());
                                         processes.setOptionalEquipments(Arrays.asList(new String[]{aspCheckItem.getId()}));
                                         // 坯料计划订单
-                                        ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(),processOperationM.getApsBlankOrderVo().getMaterialname(),processOperationM.getApsBlankOrderVo().getDeliverydate());
+                                        ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(), processOperationM.getApsBlankOrderVo().getMaterialname(), processOperationM.getApsBlankOrderVo().getDeliverydate());
                                         List<ProduceOrder> produceOrders = new ArrayList<>();
                                         produceOrders.add(produceOrder);
                                         processes.setProduceOrder(produceOrders);
 
                                         processes.setAluminumCoils(new ArrayList<>());
-                                        for (int j=1;j<=haslast;j++){
+                                        for (int j = 1; j <= haslast; j++) {
                                             AluminumCoil aluminumCoil = new AluminumCoil();
                                             aluminumCoil.setBsId(processOperationM.getId());
                                             aluminumCoil.setBlankid(processOperationM.getBlankid());
@@ -577,11 +596,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                         // 批次
                                         processes.setProducePcNum(1);
                                         // 最小等待时长
-                                        if(processOperationM.getMinflowwaitmin() != null){
+                                        if (processOperationM.getMinflowwaitmin() != null) {
                                             processes.setMinWaitTime(processOperationM.getMinflowwaitmin().intValue());
                                         }
                                         // 最大等待时长
-                                        if(processOperationM.getMaxflowwaitmin() != null){
+                                        if (processOperationM.getMaxflowwaitmin() != null) {
                                             processes.setMaxWaitTime(processOperationM.getMaxflowwaitmin().intValue());
                                         }
                                         // 合并加工的为瓶颈工序
@@ -590,18 +609,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                         processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
                                         processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
                                         // 上道工序
-                                        if(StringUtils.isNotBlank(processOperationM.getPreviousprocessid())){
+                                        if (StringUtils.isNotBlank(processOperationM.getPreviousprocessid())) {
                                             processes.setPreviousProcessesIds(new ArrayList<>(Arrays.asList(processOperationM.getPreviousprocessid().split(","))));
                                         }
                                         // 下道工序
-                                        if(StringUtils.isNotBlank(processOperationM.getNextprocessid())){
+                                        if (StringUtils.isNotBlank(processOperationM.getNextprocessid())) {
                                             processes.setNextProcessesIds(new ArrayList<>(Arrays.asList(processOperationM.getNextprocessid().split(","))));
                                         }
                                         processesList.add(processes);
 
                                         lastnum = lastnum - haslast;
                                         // 更新设备使用次数
-                                        aspCheckItemUse.put(aspCheckItem.getId(),aspCheckItemUse.get(aspCheckItem.getId())+1);
+                                        aspCheckItemUse.put(aspCheckItem.getId(), aspCheckItemUse.get(aspCheckItem.getId()) + 1);
                                     }
                                 }
                             }
@@ -609,7 +628,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     }
                     // 重新设置计划加工卷数
                     processOperationM.setPlanprocessrall(lastnum);
-                    if(lastnum <= 0){
+                    if (lastnum <= 0) {
                         a = false;
                     }
                 }
@@ -620,11 +639,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
     /**
      * 查看是否有可以合并的已存在的工序
+     *
      * @param processesList
      * @param processOperationM
      * @param aspCheckItemMap
      */
-    private void hasProcessmerge(List<ProductionProcesses> processesList,ApsProcessOperationVo processOperationM,Map<String,AspCheckItemsDo> aspCheckItemMap){
+    private void hasProcessmerge(List<ProductionProcesses> processesList, ApsProcessOperationVo processOperationM, Map<String, AspCheckItemsDo> aspCheckItemMap) {
         // 首先看已合并生产的设备是否还有余量继续排产
         for (ProductionProcesses processes : processesList) {
             // 加工设备
@@ -632,8 +652,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             AspCheckItemsDo aspCheckItem = aspCheckItemMap.get(eq);
 
             // 工序类型一致,合金和合金状态要一致
-            if(processes.getProcessType().equals(processOperationM.getProcess()) && processes.getAluminumCoils().get(0).getVolumeMetal().equals(processOperationM.getMetal())
-                    && processes.getAluminumCoils().get(0).getVolumeMetalstate().equals(processOperationM.getMetalstate())){
+            if (processes.getProcessType().equals(processOperationM.getProcess()) && processes.getAluminumCoils().get(0).getVolumeMetal().equals(processOperationM.getMetal())
+                    && processes.getAluminumCoils().get(0).getVolumeMetalstate().equals(processOperationM.getMetalstate())) {
                 // 宽度不超过50mm,厚度不超过0.05mm,重量不超过1吨
                 boolean bol = true;
                 BigDecimal totalWidth = null;
@@ -642,7 +662,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 BigDecimal knum = null;
                 BigDecimal hnum = null;
                 BigDecimal znum = null;
-                if(SaveConstans.ProcessType.PROCESS_TYPE_CHENTUI.equals(processes.getProcessType())){
+                if (SaveConstans.ProcessType.PROCESS_TYPE_CHENTUI.equals(processes.getProcessType())) {
                     knum = new BigDecimal("50");
                     hnum = new BigDecimal("0.05");
                     znum = new BigDecimal("1");
@@ -651,51 +671,51 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     hnum = new BigDecimal("0.08");
                     znum = new BigDecimal("1");
                 }
-                if(knum == null || hnum == null || znum == null){
+                if (knum == null || hnum == null || znum == null) {
                     continue;
                 }
 
                 for (AluminumCoil aluminumCoil : processes.getAluminumCoils()) {
                     // 宽度不超过50mm
-                    if(aluminumCoil.getVolumeWidth().subtract(processOperationM.getProwidth()).abs().compareTo(knum)>0){
+                    if (aluminumCoil.getVolumeWidth().subtract(processOperationM.getProwidth()).abs().compareTo(knum) > 0) {
                         bol = false;
                     }
                     // 厚度不超过0.05mm
-                    if(aluminumCoil.getVolumeThickness().subtract(processOperationM.getThickness()).abs().compareTo(hnum)>0){
+                    if (aluminumCoil.getVolumeThickness().subtract(processOperationM.getThickness()).abs().compareTo(hnum) > 0) {
                         bol = false;
                     }
                     // 重量不超过1吨
-                    if(aluminumCoil.getVolumeWeight().subtract(processOperationM.getSinglerollweight()).abs().compareTo(znum)>0){
+                    if (aluminumCoil.getVolumeWeight().subtract(processOperationM.getSinglerollweight()).abs().compareTo(znum) > 0) {
                         bol = false;
                     }
-                    if(totalWidth == null){
+                    if (totalWidth == null) {
                         totalWidth = aluminumCoil.getVolumeWidth();
-                    }else{
+                    } else {
                         totalWidth = totalWidth.add(aluminumCoil.getVolumeWidth());
                     }
-                    if(totalWeight == null){
+                    if (totalWeight == null) {
                         totalWeight = aluminumCoil.getVolumeWeight();
-                    }else{
+                    } else {
                         totalWeight = totalWeight.add(aluminumCoil.getVolumeWeight());
                     }
                 }
-                if(bol){
+                if (bol) {
                     Integer sy = 0;
-                    for (int j=1;j<=processOperationM.getPlanprocessrall();j++){
+                    for (int j = 1; j <= processOperationM.getPlanprocessrall(); j++) {
                         // 宽度余量
-                        if(aspCheckItem.getEquipmentwidth().subtract(totalWidth).compareTo(processOperationM.getProwidth().multiply(new BigDecimal(j)))<0){
+                        if (aspCheckItem.getEquipmentwidth().subtract(totalWidth).compareTo(processOperationM.getProwidth().multiply(new BigDecimal(j))) < 0) {
                             break;
                         }
                         // 重量余量
-                        if(aspCheckItem.getEquipmentbearing().subtract(totalWeight).compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(j)))<0){
+                        if (aspCheckItem.getEquipmentbearing().subtract(totalWeight).compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(j))) < 0) {
                             break;
                         }
                         sy = j;
                     }
-                    if(sy>0){
+                    if (sy > 0) {
                         // 更新计划加工卷数
                         processOperationM.setPlanprocessrall(processOperationM.getPlanprocessrall() - sy);
-                        for (int j=1;j<=sy;j++){
+                        for (int j = 1; j <= sy; j++) {
                             AluminumCoil aluminumCoil = new AluminumCoil();
                             aluminumCoil.setBsId(processOperationM.getId());
                             aluminumCoil.setBlankid(processOperationM.getBlankid());
@@ -708,40 +728,40 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         }
 
                         // 上道工序
-                        if(StringUtils.isNotBlank(processOperationM.getPreviousprocessid())){
-                            if(processes.getPreviousProcessesIds() == null){
+                        if (StringUtils.isNotBlank(processOperationM.getPreviousprocessid())) {
+                            if (processes.getPreviousProcessesIds() == null) {
                                 List<String> list = new ArrayList<>();
                                 list.addAll(Arrays.asList(processOperationM.getPreviousprocessid().split(",")));
                                 processes.setPreviousProcessesIds(list);
-                            }else{
+                            } else {
                                 processes.getPreviousProcessesIds().addAll(new ArrayList<>(Arrays.asList(processOperationM.getPreviousprocessid().split(","))));
                             }
                         }
                         // 下道工序
-                        if(StringUtils.isNotBlank(processOperationM.getNextprocessid())){
-                            if(processes.getNextProcessesIds() == null){
+                        if (StringUtils.isNotBlank(processOperationM.getNextprocessid())) {
+                            if (processes.getNextProcessesIds() == null) {
                                 List<String> list = new ArrayList<>();
                                 list.addAll(Arrays.asList(processOperationM.getNextprocessid().split(",")));
                                 processes.setNextProcessesIds(list);
-                            }else{
+                            } else {
                                 processes.getNextProcessesIds().addAll(new ArrayList<>(Arrays.asList(processOperationM.getNextprocessid().split(","))));
                             }
                         }
                         // 所属订单
                         List<ProduceOrder> produceOrders = processes.getProduceOrder().stream().filter(v ->
                                 v.getId().equals(processOperationM.getApsBlankOrderVo().getId())).collect(Collectors.toList());
-                        if(produceOrders == null || produceOrders.size() == 0){
-                            ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(),processOperationM.getApsBlankOrderVo().getMaterialname(),processOperationM.getApsBlankOrderVo().getDeliverydate());
+                        if (produceOrders == null || produceOrders.size() == 0) {
+                            ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(), processOperationM.getApsBlankOrderVo().getMaterialname(), processOperationM.getApsBlankOrderVo().getDeliverydate());
                             processes.getProduceOrder().add(produceOrder);
                         }
                         // 单次加工时长
-                        if(processes.getUnitProduceTime() == null){
+                        if (processes.getUnitProduceTime() == null) {
                             processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
                             processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
                         }
                         // 加工时长取最大值
-                        else{
-                            if(processes.getUnitProduceTime()<processOperationM.getOnceprocessmin().intValue()){
+                        else {
+                            if (processes.getUnitProduceTime() < processOperationM.getOnceprocessmin().intValue()) {
                                 processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
                                 processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
                             }

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationServiceImpl.java

@@ -616,7 +616,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
             //组装成map类型,以便筛选和查询
             Map<String, Object> workShopMap = new HashMap<>();
             for (SysOrganizationDo sysOrganizationDo : workSopList) {
-                workShopMap.put(sysOrganizationDo.getId(), sysOrganizationDo.getMark());
+                workShopMap.put(sysOrganizationDo.getId(), sysOrganizationDo.getRoption());
             }
 
             //遍历查询是否有工序没有对应的设备代号和车间代号