Sfoglia il codice sorgente

排程数据组装优化

fangpy 1 anno fa
parent
commit
35bda367c6

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

@@ -609,30 +609,47 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             // 回写订单排程交货期
             Map<String, Date> orderDeliveryTime = new HashMap<>();
             // 坯料计划ID集合
+            List<String> blankKeys = new ArrayList<>();
             List<ApsBlankOrderDo> blankIds = new ArrayList<>();
             for (ProductionProcesses process : lastProcess) {
                 List<ProduceOrder> produceOrder = process.getProduceOrder();
                 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());
-                        ApsBlankOrderDo updateBlank = new ApsBlankOrderDo();
-                        updateBlank.setId(order.getId());
-                        updateBlank.setSchedulingstatus(TO_BE_PUBLISHED);
-                        updateBlank.setScheduledateend(endDate);
-                        updateBlank.setPromisedateend(endDate);
-                        blankIds.add(updateBlank);
-                        if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
-                            // 对比取最大值
-                            if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
+                        List<ApsBlankOrderDo> hasblanks = blankIds.stream().filter(v -> v.getId().equals(order.getId())).collect(Collectors.toList());
+                        if(hasblanks != null && hasblanks.size()>0){
+                            ApsBlankOrderDo blankOrderDo = hasblanks.get(0);
+                            if(blankOrderDo.getScheduledatestart().compareTo(endDate)>0){
+                                blankOrderDo.setScheduledatestart(endDate);
+                            }
+                            if(blankOrderDo.getScheduledateend().compareTo(endDate)<0){
+                                blankOrderDo.setScheduledateend(endDate);
+                            }
+                        }else{
+                            ApsBlankOrderDo blankOrder = this.getById(order.getId());
+                            ApsBlankOrderDo updateBlank = new ApsBlankOrderDo();
+                            updateBlank.setId(order.getId());
+                            updateBlank.setSchedulingstatus(TO_BE_PUBLISHED);
+                            updateBlank.setScheduledatestart(endDate);
+                            updateBlank.setScheduledateend(endDate);
+                            updateBlank.setPromisedateend(endDate);
+                            // 自动加锁坯料计划
+                            updateBlank.setLockmark("y");
+                            blankIds.add(updateBlank);
+                            blankKeys.add(updateBlank.getId());
+                            if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
+                                // 对比取最大值
+                                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) -> {
@@ -652,6 +669,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             if (blankIds != null && blankIds.size() > 0) {
                 this.updateBatchById(blankIds);
             }
+
+            // 自动加锁坯料计划下的工序作业
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid,blankKeys).set(ApsProcessOperationDo::getLockmark,"y"));
+            // 自动加锁坯料计划下的排程作业明细
+            apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid,blankKeys).set(ApsProcessOperationProcessEquDo::getLockmark,"y"));
         }
 
         backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());

+ 41 - 30
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java

@@ -100,20 +100,23 @@ public class ApsServiceImpl implements ApsService {
                 if (fbNotLock != null && fbNotLock.size() > 0) {
                     apsBlankOrders.addAll(fbNotLock);
                 }
-
-                // 模型转换
-//                ProductionScheduleVo productionScheduleVo = apsBlankOrderService.apsPlanModelSet(apsBlankOrders);
-                ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(apsBlankOrders);
-                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));
-                // APS平台排程接口调用
-                ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
-                if (!"200".equals(productionScheduleRetVo.getCode())) {
-                    throw new CustomException(productionScheduleRetVo.getMsg());
-                }
-                apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders);
+                // 按订单分批排程
+                Map<String, List<ApsBlankOrderVo>> groupedItems = apsBlankOrders.stream()
+                        .collect(Collectors.groupingBy(ApsBlankOrderVo::getProductionorderid));
+                groupedItems.forEach((k,v)->{
+                    // 模型转换
+                    ProductionScheduleVo productionScheduleVo = apsProductionScheduleInit(v);
+                    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));
+                    // APS平台排程接口调用
+                    ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(productionScheduleVo);
+                    if (!"200".equals(productionScheduleRetVo.getCode())) {
+                        throw new CustomException(productionScheduleRetVo.getMsg());
+                    }
+                    apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders);
+                });
             } catch (Exception e) {
                 e.printStackTrace();
                 throw e;
@@ -144,6 +147,7 @@ public class ApsServiceImpl implements ApsService {
             apsScheduleConfig = apsConfigs.get(0);
             productionScheduleVo.setLooseness(apsScheduleConfig.getLooseness());
             productionScheduleVo.setPlanSeconds(apsScheduleConfig.getScheduleruntime());
+            productionScheduleVo.setPcspeed(apsScheduleConfig.getPcspeed());
             Map<String, Integer> roamTime = new HashMap<>();
             Integer workshopin = apsScheduleConfig.getWorkshopin();
             Integer workshopcross = apsScheduleConfig.getWorkshopcross();
@@ -239,9 +243,9 @@ public class ApsServiceImpl implements ApsService {
         if (StringUtils.isNotBlank(operationDo.getCanchoosedeviceid())) {
             String[] sbIds = operationDo.getCanchoosedeviceid().split(",");
             for (String equIds : sbIds) {
-                /*if(equIds.equals("0001be252874536843730b100052")){
+                if(equIds.equals("0001be252874536843730b100064")){
                     System.out.println(equIds);
-                }*/
+                }
                 AspCheckItemsDo checkItemsD = eqMaps.get(equIds);
                 if (checkItemsD != null) {
                     optionalEquipments.add(equIds);
@@ -278,22 +282,26 @@ public class ApsServiceImpl implements ApsService {
                                 .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
                         );
                         if (lastpros != null && lastpros.size() > 0) {
+                            boolean hasLast = true;
                             ApsProcessOperationProcessEquDo lastpro = lastpros.get(0);
                             if(processEqus != null && processEqus.size()>0){
                                 List<ApsProcessOperationProcessEquDo> hasLasts = processEqus.stream().filter(v -> v.getId().equals(lastpro.getId())).collect(Collectors.toList());
-                                if(hasLasts == null || hasLasts.size() == 0){
-                                    ApsProcessOperationDo lastop = apsProcessOperationService.getById(lastpro.getProcessid());
-                                    // 输出物料
-                                    List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
-                                            .eq(ApsProcessOperationOutMaterDo::getMainid, lastpro.getProcessid()));
-                                    equipment.setLastProcessType(lastop.getProcess());
-                                    equipment.setLastProcessEndTime(lastpro.getPlanenddate());
-                                    equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
-                                    // 合金+输入物料+宽度+厚度+输出物料厚度
-                                    equipment.setLastSeriesProduceMark(lastop.getMetal() + "^_^" + lastop.getProducttype() + "^_^" + lastop.getProwidth() + "^_^" + lastop.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
-                                    equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                                if(hasLasts != null || hasLasts.size() > 0){
+                                    hasLast = false;
                                 }
                             }
+                            if(hasLast){
+                                ApsProcessOperationDo lastop = apsProcessOperationService.getById(lastpro.getProcessid());
+                                // 输出物料
+                                List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+                                        .eq(ApsProcessOperationOutMaterDo::getMainid, lastpro.getProcessid()));
+                                equipment.setLastProcessType(lastop.getProcess());
+                                equipment.setLastProcessEndTime(lastpro.getPlanenddate());
+                                equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                                // 合金+输入物料+宽度+厚度+输出物料厚度
+                                equipment.setLastSeriesProduceMark(lastop.getMetal() + "^_^" + lastop.getProducttype() + "^_^" + lastop.getProwidth() + "^_^" + lastop.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
+                                equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                            }
                         }
                         // 查询相关工序作业
                         Set<String> processIds = new HashSet<>();
@@ -306,7 +314,9 @@ public class ApsServiceImpl implements ApsService {
                                 processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
                                         .in(ApsProcessOperationDo::getId, processIds));
                             }
-
+                            //
+                            List<ApsProcessOperationOutMaterDo> outMaterDosAll = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+                                    .in(ApsProcessOperationOutMaterDo::getMainid, processIds));
                             List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
                             for (ApsProcessOperationProcessEquDo equs : processEqus) {
                                 EquipmentRunTime er = new EquipmentRunTime();
@@ -319,8 +329,9 @@ public class ApsServiceImpl implements ApsService {
                                     if (pos != null && pos.size() > 0) {
                                         ApsProcessOperationDo processesDo = pos.get(0);
                                         // 输出物料
-                                        List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
-                                                .eq(ApsProcessOperationOutMaterDo::getMainid, processesDo.getId()));
+//                                        List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+//                                                .eq(ApsProcessOperationOutMaterDo::getMainid, processesDo.getId()));
+                                        List<ApsProcessOperationOutMaterDo> outMaterDos = outMaterDosAll.stream().filter(v->v.getMainid().equals(processesDo.getId())).collect(Collectors.toList());
                                         er.setProcessType(processesDo.getProcess());
                                         // 合金+输入物料+宽度+厚度
                                         er.setSeriesProduceMark(processesDo.getMetal() + "^_^" + processesDo.getProducttype() + "^_^" + processesDo.getProwidth() + "^_^" + processesDo.getThickness() + "^_^" + outMaterDos.get(0).getThickness());

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/CodeGeneration.java

@@ -83,7 +83,7 @@ public class CodeGeneration {
         strategy.setSuperEntityClass(BaseDo.class);
         strategy.setRestControllerStyle(true);
         // 设置要映射的表名(重要,需要修改的地方)
-        strategy.setInclude("aps_process_operation_process_equ");
+        strategy.setInclude("aps_schedule_config");
         strategy.setNaming(NamingStrategy.underline_to_camel); // 自动转换表名的驼峰命名法
         strategy.setColumnNaming(NamingStrategy.no_change); // 自动转换列名的驼峰命名法
         strategy.setEntityLombokModel(true); // 是否使用lombox

+ 6 - 1
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsScheduleConfigDo.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author fpy
- * @since 2024-05-28
+ * @since 2024-07-11
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -137,6 +137,11 @@ public class ApsScheduleConfigDo extends BaseDo {
      */
     @TableField("STANDINGTIME")
     private Integer standingtime;
+    /**
+     * 排程速度
+     */
+    @TableField("PCSPEED")
+    private Integer pcspeed;
 
 
 }

+ 6 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionScheduleVo.java

@@ -1,6 +1,7 @@
 package com.rongwei.bsentity.vo;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -67,4 +68,9 @@ public class ProductionScheduleVo {
      */
     private BigDecimal looseness;
 
+    /**
+     * 排程速度
+     */
+    private Integer pcspeed;
+
 }