Ver Fonte

冷轧重排

fangpy há 6 meses atrás
pai
commit
bdce3e0d11

+ 5 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsDispatchService.java

@@ -1,4 +1,9 @@
 package com.rongwei.bscommon.sys.service;
 
+import com.rongwei.bsentity.vo.ApsDispatchVo;
+
 public interface ApsDispatchService {
+
+    void apsLxDispatch(ApsDispatchVo apsDispatchVo);
+
 }

+ 6 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsService.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.rongwei.bsentity.vo.ApsBlankOrderVo;
 import com.rongwei.bsentity.vo.ApsTypeVo;
+import com.rongwei.bsentity.vo.Equipment;
 import com.rongwei.bsentity.vo.ProductionScheduleVo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 
@@ -17,4 +18,9 @@ public interface ApsService {
 
     ProductionScheduleVo productionScheduleVoInit(Date apsPlanStartDate);
 
+    ProductionScheduleVo apsBfDataAssemble(List<ApsBlankOrderVo> apsBlankOrders,List<String> blankOrderIds, Map<String, Equipment> allEqs, Date apsPlanStartDate, ApsTypeVo apsType);
+
+    void apsDataUpdate(ProductionScheduleVo apsProductionSchedule,List<String> blankOrderIds
+            ,List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser);
+
 }

+ 66 - 8
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsDispatchServiceImpl.java

@@ -1,14 +1,16 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.rongwei.bscommon.sys.service.ApsDispatchService;
-import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
-import com.rongwei.bscommon.sys.service.ApsService;
+import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.vo.*;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.safecommon.utils.CXCommonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -27,19 +29,75 @@ public class ApsDispatchServiceImpl implements ApsDispatchService {
     private ApsService apsService;
     @Autowired
     private ApsProcessOperationService apsProcessOperationService;
+    @Autowired
+    private ApsBlankOrderService apsBlankOrderService;
+    @Autowired
+    private ApsScheduleConfigService apsScheduleConfigService;
 
     /**
      * 轧机工序混排
      * @param apsDispatchVo
      */
+    @Override
     public void apsLxDispatch(ApsDispatchVo apsDispatchVo){
-        // 解锁指定设备指定时间段作业
-        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+        // 待排程作业
+        List<ApsProcessOperationProcessEquDo> toApsPros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
                 .ge(ApsProcessOperationProcessEquDo::getPlanstartdate, apsDispatchVo.getStartTime())
                 .le(ApsProcessOperationProcessEquDo::getPlanenddate, apsDispatchVo.getEndTime())
-                .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, apsDispatchVo.getEquipmentId())
-                .set(ApsProcessOperationProcessEquDo::getLockmarkdetail,"n"));
-//        apsService.apsSchedule(new ArrayList<>(),);
+                .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, apsDispatchVo.getEquipmentId()));
+        if(toApsPros != null && toApsPros.size()>0){
+            ApsTypeVo apsType = new ApsTypeVo();
+            apsType.setMixIf("mix");
+            apsType.setThMergeMode("notThMergeBf");
+            apsType.setConstraintMode("lz");
+            Map<String,Equipment> allEqs = new HashMap<>();
+            // 统一排程开始时间
+            List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
+            Date apsPlanStartDate = new Date();
+            if(apsConfigs != null && apsConfigs.size()>0){
+                ApsScheduleConfigDo apsScheduleConfig = apsConfigs.get(0);
+                int a = 8;
+                if (apsScheduleConfig.getStartschedulerun() != null) {
+                    a = apsScheduleConfig.getStartschedulerun();
+                }
+                if (apsScheduleConfig.getApsplanstartdate() != null) {
+                    apsPlanStartDate = apsScheduleConfig.getApsplanstartdate();
+                } else {
+                    apsPlanStartDate = DateUtil.date().offset(DateField.HOUR, a);
+                }
+            }
+            SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+            // 所有待排程作业坯料计划ID
+            List<String> blankids = toApsPros.stream().map(ApsProcessOperationProcessEquDo::getBlankid).distinct().collect(Collectors.toList());
+            List<ApsBlankOrderDo> blankorders = apsBlankOrderService.list(new LambdaQueryWrapper<ApsBlankOrderDo>().in(ApsBlankOrderDo::getId,blankids));
+            List<ApsBlankOrderVo> apsBlankOrderVos = new ArrayList<>();
+            for (ApsBlankOrderDo blankorder : blankorders) {
+                ApsBlankOrderVo apsBlankOrderVo = new ApsBlankOrderVo();
+                BeanUtil.copyProperties(blankorder,apsBlankOrderVo);
+                apsBlankOrderVo.setDeliverytime(8);
+                apsBlankOrderVos.add(apsBlankOrderVo);
+            }
+            // 排程前数据组装
+            ProductionScheduleVo apsProductionSchedule = apsService.apsBfDataAssemble(apsBlankOrderVos,blankids, allEqs, apsPlanStartDate, apsType);
+            for (ProductionProcesses process : apsProductionSchedule.getProcesses()) {
+                List<ApsProcessOperationProcessEquDo> toApsPro = toApsPros.stream().filter(v -> v.getId().equals(process.getId())).collect(Collectors.toList());
+                if(toApsPro != null && toApsPro.size()>0){
+                    process.setIfLock(false);
+                    process.setStartTime(null);
+                    process.setEndTime(null);
+                    process.setEquipment(null);
+                    process.setEquipmentId(null);
+                    process.setDelay(null);
+                    List<String> eqids = new ArrayList<>();
+                    eqids.add(toApsPro.get(0).getProcessdeviceid());
+                    process.setOptionalEquipments(eqids);
+                }
+            }
+            // 排程后数据处理
+            if(apsProductionSchedule != null){
+                apsService.apsDataUpdate(apsProductionSchedule,blankids,apsBlankOrderVos,currentUser);
+            }
+        }
     }
 
     /**

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

@@ -590,6 +590,24 @@ public class ApsServiceImpl implements ApsService {
         apsBlankOrders.forEach((bo)->{
             blankOrderIds.add(bo.getId());
         });
+        // 排程前数据组装
+        ProductionScheduleVo apsProductionSchedule = apsBfDataAssemble(apsBlankOrders,blankOrderIds, allEqs, apsPlanStartDate, apsType);
+        // 排程后数据处理
+        if(apsProductionSchedule != null){
+            apsDataUpdate(apsProductionSchedule,blankOrderIds,apsBlankOrders,currentUser);
+        }
+    }
+
+    /**
+     * 排程前数据组装
+     * @param apsBlankOrders
+     * @param allEqs
+     * @param apsPlanStartDate
+     * @param apsType
+     * @return
+     */
+    @Override
+    public ProductionScheduleVo apsBfDataAssemble(List<ApsBlankOrderVo> apsBlankOrders,List<String> blankOrderIds,Map<String,Equipment> allEqs,Date apsPlanStartDate,ApsTypeVo apsType){
         System.out.println("当前批次排程坯料计划ID:" + blankOrderIds);
         logger.info("当前批次排程坯料计划ID:" + blankOrderIds);
         // 更新待排程的锁定的作业
@@ -604,11 +622,10 @@ public class ApsServiceImpl implements ApsService {
             apsBlankOrderDao.setProDetailLockMark(blankidStrs);
         }
         // 排程
+        ProductionScheduleVo apsProductionSchedule = null;
         List<ProductionScheduleVo> productionScheduleVos = new ArrayList<>();
         Map<String,List<ApsBlankOrderVo>> dataMap = new HashMap<>();
         Map<String,ApsBlankOrderVo> dataMapOrder = new HashMap<>();
-        JSONConfig jsonConfig = JSONConfig.create();
-        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
         List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
         // 所有设备
         List<AspCheckItemsDo> eqs = aspCheckItemsService.list(new LambdaQueryWrapper<>());
@@ -660,7 +677,7 @@ public class ApsServiceImpl implements ApsService {
 
         // 多个坯料计划合并排程
         if(apsProductionSchedules != null && apsProductionSchedules.size()>0){
-            ProductionScheduleVo apsProductionSchedule = apsProductionSchedules.get(0);
+            apsProductionSchedule = apsProductionSchedules.get(0);
             List<ProductionProcesses> processes = new ArrayList<>();
             List<Equipment> equipmentList = new ArrayList<>();
             for (ProductionScheduleVo productionSchedule : apsProductionSchedules) {
@@ -709,44 +726,56 @@ public class ApsServiceImpl implements ApsService {
             if(apsType != null){
                 apsProductionSchedule.setScheduleType(apsType);
             }
+        }
+        return apsProductionSchedule;
+    }
 
-            System.out.println("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
-            logger.info("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
-            // APS平台排程接口调用
-            ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
-            if (!"200".equals(productionScheduleRetVo.getCode())) {
-                logger.info("排程异常,坯料计划ID:" + blankOrderIds);
+    /**
+     * 排程后数据处理
+     * @param apsProductionSchedule
+     * @param blankOrderIds
+     * @param apsBlankOrders
+     * @param currentUser
+     */
+    @Override
+    public void apsDataUpdate(ProductionScheduleVo apsProductionSchedule,List<String> blankOrderIds
+            ,List<ApsBlankOrderVo> apsBlankOrders,SysUserVo currentUser){
+        JSONConfig jsonConfig = JSONConfig.create();
+        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
+        System.out.println("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
+        logger.info("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
+        // APS平台排程接口调用
+        ProductionScheduleRetVo productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
+        if (!"200".equals(productionScheduleRetVo.getCode())) {
+            logger.info("排程异常,坯料计划ID:" + blankOrderIds);
+            // 排程异常后恢复历史排程结果为锁定状态
+            processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"y")
+                    .in(ApsProcessOperationProcessEquDo::getBlankid,blankOrderIds));
+            // 没有可排程工序的订单跳过
+            if("没有可排程的工序".equals(productionScheduleRetVo.getMsg())){
+                logger.info("排程异常:没有可排程的工序,坯料计划编号:" + blankOrderIds);
+            }else{
+                throw new CustomException(productionScheduleRetVo.getMsg()+" "+DateUtil.formatDateTime(new Date()));
+            }
+        }else{
+            // 获取坯料计划
+            apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders,currentUser);
+            if(StrUtil.isNotBlank(productionScheduleRetVo.getMsg())){
                 // 排程异常后恢复历史排程结果为锁定状态
-                processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"y")
-                        .in(ApsProcessOperationProcessEquDo::getBlankid,blankOrderIds));
-                // 没有可排程工序的订单跳过
-                if("没有可排程的工序".equals(productionScheduleRetVo.getMsg())){
-                    logger.info("排程异常:没有可排程的工序,坯料计划编号:" + blankOrderIds);
+                List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
+                List<String> allblankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+                List<String> exblankids = null;
+                if(blankids != null && blankids.size()>0){
+                    exblankids = allblankids.stream().filter(v->!blankids.contains(v)).collect(Collectors.toList());
                 }else{
-                    throw new CustomException(productionScheduleRetVo.getMsg()+" "+DateUtil.formatDateTime(new Date()));
+                    exblankids = allblankids;
                 }
-            }else{
-                // 获取坯料计划
-                /*List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
-                apsBlankOrderss.add(bo);*/
-                apsBlankOrderService.apsAfter(productionScheduleRetVo,apsBlankOrders,currentUser);
-                if(StrUtil.isNotBlank(productionScheduleRetVo.getMsg())){
-                    // 排程异常后恢复历史排程结果为锁定状态
-                    List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
-                    List<String> allblankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
-                    List<String> exblankids = null;
-                    if(blankids != null && blankids.size()>0){
-                        exblankids = allblankids.stream().filter(v->!blankids.contains(v)).collect(Collectors.toList());
-                    }else{
-                        exblankids = allblankids;
-                    }
-                    if(exblankids != null && exblankids.size()>0){
-                        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"y")
-                                .in(ApsProcessOperationProcessEquDo::getBlankid,exblankids));
-                    }
-
-                    throw new CustomException(productionScheduleRetVo.getMsg()+" "+DateUtil.formatDateTime(new Date()));
+                if(exblankids != null && exblankids.size()>0){
+                    processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark,"y")
+                            .in(ApsProcessOperationProcessEquDo::getBlankid,exblankids));
                 }
+
+                throw new CustomException(productionScheduleRetVo.getMsg()+" "+DateUtil.formatDateTime(new Date()));
             }
         }
     }

+ 14 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -2,6 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
+import com.rongwei.bscommon.sys.service.ApsDispatchService;
 import com.rongwei.bscommon.sys.service.ApsService;
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
@@ -33,6 +34,8 @@ public class ApsBlankOrderController {
 
     @Autowired
     private ApsService apsService;
+    @Autowired
+    private ApsDispatchService apsDispatchService;
 
     /**
      * 订单批量排程
@@ -235,5 +238,16 @@ public class ApsBlankOrderController {
         log.info("领料校验 入参:{}", req);
         return apsBlankOrderService.checkAddMaterial(req);
     }
+
+    /**
+     * 冷轧指定时间段重排
+     * @param
+     * @return
+     */
+    @PostMapping("/apsLxDispatch")
+    public R apsLxDispatch(@RequestBody ApsDispatchVo apsDispatchVo) throws Exception {
+        apsDispatchService.apsLxDispatch(apsDispatchVo);
+        return R.ok();
+    }
 }