Преглед изворни кода

同一时间只能同一个人排程

fangpy пре 1 година
родитељ
комит
624151d586

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

@@ -43,4 +43,6 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
     R removeBlankOrder(ApsBlankOrderDo req);
     void removeBlankOrderAndChild(ApsBlankOrderDo req);
+
+    void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders);
 }

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

@@ -0,0 +1,11 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.vo.ApsBlankOrderVo;
+
+import java.util.List;
+
+public interface ApsService {
+
+    void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders);
+
+}

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

@@ -71,8 +71,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Autowired
     private ApsBlankOrderDao apsBlankOrderDao;
     @Autowired
-    private RwApsServer rwApsServer;
-    @Autowired
     private ApsProcessOperationProcessEquServiceImpl processOperationProcessEquService;
     @Autowired
     private ApsScheduleConfigService apsScheduleConfigService;
@@ -99,9 +97,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Autowired
     private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
     @Autowired
-    private RedissonClient redissonClient;
-    @Autowired
     private ApsEquipmentCalendarService apsEquipmentCalendarService;
+    @Autowired
+    private ApsService apsService;
 
 
     @Override
@@ -481,159 +479,129 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      * @param apsBlankOrders
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void blankOrderAps(List<ApsBlankOrderVo> apsBlankOrders) {
-        // 当前等路人所属工厂
-        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
-        String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
-        if (StringUtils.isBlank(tenantId)) {
-            throw new CustomException("所属工厂不能为空");
-        }
-        assert apsBlankOrders != null : "排程订单不能为空";
-        // 按照所属工厂加锁
-        RLock rLock = redissonClient.getLock(tenantId);
-        try {
-            // 加锁最大1小时
-            rLock.lock(1, TimeUnit.HOURS);
-            // 合并待发布未锁定的订单一起排程
-            List<String> hasIds = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
-            String idStrs = CollUtil.join(hasIds, "','");
-            idStrs = "'" + idStrs + "'";
-            // 查询存在未锁定的作业坯料计划
-//            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs,tenantId);
-            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getOrdersHasNotLockProcess(idStrs,tenantId);
-            if (fbNotLock != null && fbNotLock.size() > 0) {
-                apsBlankOrders.addAll(fbNotLock);
-            }
+        apsService.apsSchedule(apsBlankOrders);
+    }
 
-            // 先删除所有作业的明细
-            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);
-            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());
-            }
-            // 排程结果保存
-            List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
-            // 最后节点集合
-            List<ProductionProcesses> lastProcess = new ArrayList<>();
-            if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
-                for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
-                    // 非合并生产工序
-                    if (process.getAluminumCoils() == null) {
+    /**
+     * 排程结果操作
+     * @param productionScheduleRetVo
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void apsAfter(ProductionScheduleRetVo productionScheduleRetVo,List<ApsBlankOrderVo> apsBlankOrders){
+        // 先删除所有作业的明细
+        List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+        processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
+        // 排程结果保存
+        List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = new ArrayList<>();
+        // 最后节点集合
+        List<ProductionProcesses> lastProcess = new ArrayList<>();
+        if (productionScheduleRetVo.getProcesses() != null && productionScheduleRetVo.getProcesses().size() > 0) {
+            for (ProductionProcesses process : productionScheduleRetVo.getProcesses()) {
+                // 非合并生产工序
+                if (process.getAluminumCoils() == null) {
+                    ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
+                    apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
+                    apsProcessOperationProcessEqu.setProcessid(process.getId());
+                    apsProcessOperationProcessEqu.setBlankid(process.getProduceOrder().get(0).getId());
+                    apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
+                    apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
+                    apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshopid());
+                    apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
+                    apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
+                    apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
+                    apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
+                    apsProcessOperationProcessEqu.setPlanprocessrall(process.getProducePcNum());
+                    apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
+                    apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
+                    apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
+                    apsProcessOperationProcessEqu.setDeleted("0");
+                    apsProcessOperationProcessEqu.setUnfinishroll(process.getProducePcNum());
+                    apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
+                }
+                // 合并生产工序
+                else {
+                    // 保存到明细表
+                    Map<String, List<AluminumCoil>> bsAl = new HashMap<>();
+                    for (AluminumCoil aluminumCoil : process.getAluminumCoils()) {
+                        if (bsAl.containsKey(aluminumCoil.getBsId())) {
+                            bsAl.get(aluminumCoil.getBsId()).add(aluminumCoil);
+                        } else {
+                            List<AluminumCoil> coils = new ArrayList<>();
+                            coils.add(aluminumCoil);
+                            bsAl.put(aluminumCoil.getBsId(), coils);
+                        }
+                    }
+                    bsAl.forEach((k, v) -> {
                         ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
                         apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
-                        apsProcessOperationProcessEqu.setProcessid(process.getId());
-                        apsProcessOperationProcessEqu.setBlankid(process.getProduceOrder().get(0).getId());
+                        apsProcessOperationProcessEqu.setProcessid(k);
+                        apsProcessOperationProcessEqu.setBlankid(v.get(0).getBlankid());
                         apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
                         apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
+                        apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
+                        apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
+                        apsProcessOperationProcessEqu.setPlanprocessrall(v.size());
                         apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshopid());
                         apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
                         apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
-                        apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
-                        apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
-                        apsProcessOperationProcessEqu.setPlanprocessrall(process.getProducePcNum());
                         apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
                         apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
                         apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
                         apsProcessOperationProcessEqu.setDeleted("0");
-                        apsProcessOperationProcessEqu.setUnfinishroll(process.getProducePcNum());
+                        apsProcessOperationProcessEqu.setUnfinishroll(v.size());
                         apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
-                    }
-                    // 合并生产工序
-                    else {
-                        // 保存到明细表
-                        Map<String, List<AluminumCoil>> bsAl = new HashMap<>();
-                        for (AluminumCoil aluminumCoil : process.getAluminumCoils()) {
-                            if (bsAl.containsKey(aluminumCoil.getBsId())) {
-                                bsAl.get(aluminumCoil.getBsId()).add(aluminumCoil);
-                            } else {
-                                List<AluminumCoil> coils = new ArrayList<>();
-                                coils.add(aluminumCoil);
-                                bsAl.put(aluminumCoil.getBsId(), coils);
-                            }
-                        }
-                        bsAl.forEach((k, v) -> {
-                            ApsProcessOperationProcessEquDo apsProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
-                            apsProcessOperationProcessEqu.setId(SecurityUtil.getUUID());
-                            apsProcessOperationProcessEqu.setProcessid(k);
-                            apsProcessOperationProcessEqu.setBlankid(v.get(0).getBlankid());
-                            apsProcessOperationProcessEqu.setProcessdeviceid(process.getEquipment().getId());
-                            apsProcessOperationProcessEqu.setProcessdevice(process.getEquipment().getEquipmentName());
-                            apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
-                            apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
-                            apsProcessOperationProcessEqu.setPlanprocessrall(v.size());
-                            apsProcessOperationProcessEqu.setProcessworkshopid(process.getEquipment().getWorkshopid());
-                            apsProcessOperationProcessEqu.setProcessworkshop(process.getEquipment().getWorkshopname());
-                            apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
-                            apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
-                            apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
-                            apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());
-                            apsProcessOperationProcessEqu.setDeleted("0");
-                            apsProcessOperationProcessEqu.setUnfinishroll(v.size());
-                            apsProcessOperationProcessEquDos.add(apsProcessOperationProcessEqu);
-                        });
-                    }
+                    });
+                }
 
-                    // 是否为最后一个节点
-                    if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
-                        lastProcess.add(process);
-                    }
+                // 是否为最后一个节点
+                if (process.getNextProcessesIds() == null || process.getNextProcessesIds().size() == 0) {
+                    lastProcess.add(process);
                 }
             }
-            if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
-                // 再保存新数据
-                processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
-                // 回写订单排程交货期
-                Map<String, Date> orderDeliveryTime = new HashMap<>();
-                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());
-                            if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
-                                // 对比取最大值
-                                if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
-                                    orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
-                                }
-                            } else {
+        }
+        if (apsProcessOperationProcessEquDos != null && apsProcessOperationProcessEquDos.size() > 0) {
+            // 再保存新数据
+            processOperationProcessEquService.saveBatch(apsProcessOperationProcessEquDos);
+            // 回写订单排程交货期
+            Map<String, Date> orderDeliveryTime = new HashMap<>();
+            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());
+                        if (orderDeliveryTime.containsKey(blankOrder.getProductionorderid())) {
+                            // 对比取最大值
+                            if (endDate.compareTo(orderDeliveryTime.get(blankOrder.getProductionorderid())) > 0) {
                                 orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
                             }
+                        } else {
+                            orderDeliveryTime.put(blankOrder.getProductionorderid(), endDate);
                         }
                     }
                 }
-                // 更新订单的排程交货期、排程状态
-                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 (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()));
+                    }
+                    // 排程状态更新为待发布
 //                    apsProductionOrderDo.setSchedulstatus(SCHEDULSTATUS_TORELEASE);
-                        apsProductionOrderService.updateById(apsProductionOrderDo);
-                    });
-                }
-
+                    apsProductionOrderService.updateById(apsProductionOrderDo);
+                });
             }
 
-            backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
-        } catch (Exception e) {
-            throw e;
-        } finally {
-            rLock.unlock();
         }
+
+        backupProcessOperation(apsProcessOperationProcessEquDos, productionScheduleRetVo.getProcesses());
     }
 
     /**
@@ -673,6 +641,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
      */
     @Override
     public ProductionScheduleVo apsPlanModelSet(List<ApsBlankOrderVo> apsBlankOrders) {
+        // 待排程坯料计划ID集合
+        List<String> blankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
         ProductionScheduleVo productionScheduleVo = new ProductionScheduleVo();
         productionScheduleVo.setProductionScheduleId("批量排程");
         List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
@@ -701,6 +671,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             } else {
                 productionScheduleVo.setApsPlanStartDate(DateUtil.date().offset(DateField.HOUR, a));
             }
+            productionScheduleVo.setWashingtime(apsScheduleConfig.getWashingtime());
+            productionScheduleVo.setStandingtime(apsScheduleConfig.getStandingtime());
         } else {
             throw new CustomException("排程参数缺失");
         }
@@ -761,12 +733,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                     // 查询设备锁定的已排程的时间段
                                     List<ApsProcessOperationProcessEquDo> processEqus = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
                                             .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                            .notIn(ApsProcessOperationProcessEquDo::getBlankid,blankids)
                                             .ge(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
                                             .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate)
                                     );
                                     // 查询当前设备最后一个生产任务、连续生产需要考虑使用
                                     List<ApsProcessOperationProcessEquDo> lastpros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
                                             .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, equIds)
+                                            .notIn(ApsProcessOperationProcessEquDo::getBlankid,blankids)
                                             .gt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
                                             .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
                                     );
@@ -1051,6 +1025,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 aspCheckItemUse.put(aspCheckItemsDo.getId(), 0);
                 // 退火炉套筒间隙扣除
                 if (apsScheduleConfig != null) {
+                    if(aspCheckItemsDo.getEquipmentwidth() == null){
+                        throw new CustomException("退火炉的宽度没有维护");
+                    }
                     aspCheckItemsDo.setEquipmentwidth(aspCheckItemsDo.getEquipmentwidth().subtract(apsScheduleConfig.getLooseness()));
                 }
             }

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

@@ -0,0 +1,94 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONConfig;
+import cn.hutool.json.JSONUtil;
+import com.rongwei.bscommon.sys.dao.ApsBlankOrderDao;
+import com.rongwei.bscommon.sys.fegin.RwApsServer;
+import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
+import com.rongwei.bscommon.sys.service.ApsService;
+import com.rongwei.bsentity.vo.ApsBlankOrderVo;
+import com.rongwei.bsentity.vo.ProductionScheduleRetVo;
+import com.rongwei.bsentity.vo.ProductionScheduleVo;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.safecommon.utils.CXCommonUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+@Service
+public class ApsServiceImpl implements ApsService {
+
+    private static final Logger logger = LoggerFactory.getLogger(ApsServiceImpl.class);
+    @Autowired
+    private RedissonClient redissonClient;
+    @Autowired
+    private ApsBlankOrderService apsBlankOrderService;
+    @Autowired
+    private ApsBlankOrderDao apsBlankOrderDao;
+    @Autowired
+    private RwApsServer rwApsServer;
+
+    @Override
+    public void apsSchedule(List<ApsBlankOrderVo> apsBlankOrders) {
+        // 当前等路人所属工厂
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
+        if (StringUtils.isBlank(tenantId)) {
+            throw new CustomException("所属工厂不能为空");
+        }
+        assert apsBlankOrders != null : "排程订单不能为空";
+        // 按照所属工厂加锁
+        RLock rLock = redissonClient.getLock(tenantId);
+        boolean isLocked = rLock.isLocked();
+        // 锁是否被占用
+        if(isLocked){
+            throw new CustomException("正在排程、请稍等一会!");
+        }else{
+            try {
+                // 加锁最大1小时
+                rLock.lock(1, TimeUnit.HOURS);
+                // 合并待发布未锁定的订单一起排程
+                List<String> hasIds = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+                String idStrs = CollUtil.join(hasIds, "','");
+                idStrs = "'" + idStrs + "'";
+                // 查询存在未锁定的作业坯料计划
+//            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs,tenantId);
+                List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getOrdersHasNotLockProcess(idStrs,tenantId);
+                if (fbNotLock != null && fbNotLock.size() > 0) {
+                    apsBlankOrders.addAll(fbNotLock);
+                }
+
+                // 模型转换
+                ProductionScheduleVo productionScheduleVo = apsBlankOrderService.apsPlanModelSet(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);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw e;
+            } finally {
+                rLock.forceUnlock();
+                System.out.println("解锁....");
+                logger.info("解锁....");
+            }
+        }
+    }
+
+}

+ 11 - 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-08
+ * @since 2024-05-28
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -127,6 +127,16 @@ public class ApsScheduleConfigDo extends BaseDo {
      */
     @TableField("ALUMINUMDENSITY")
     private BigDecimal aluminumdensity;
+    /**
+     * 洗炉时间(小时)
+     */
+    @TableField("WASHINGTIME")
+    private Integer washingtime;
+    /**
+     * 立板时间(小时)
+     */
+    @TableField("STANDINGTIME")
+    private Integer standingtime;
 
 
 }

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

@@ -48,4 +48,13 @@ public class ProductionScheduleVo {
 
     private Map<String,List<String>> blankProcessIds;
 
+    /**
+     * 洗炉时间(小时)
+     */
+    private Integer washingtime;
+    /**
+     * 立板时间(小时)
+     */
+    private Integer standingtime;
+
 }