Kaynağa Gözat

上料是判断进线数量,控制尽心数量beta(未屙屎)

yejian 3 yıl önce
ebeveyn
işleme
91ddd8b395

+ 47 - 8
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/service/impl/RobotNodeServiceImpl.java

@@ -13,6 +13,7 @@ import com.github.zuihou.business.edgeLibrary.entity.Storge;
 import com.github.zuihou.business.edgeLibrary.service.StorgeService;
 import com.github.zuihou.business.operationManagementCenter.dao.TTaskMapper;
 import com.github.zuihou.business.operationManagementCenter.entity.TTask;
+import com.github.zuihou.business.operationManagementCenter.entity.TWorkpiece;
 import com.github.zuihou.business.operationManagementCenter.entity.TaskNode;
 import com.github.zuihou.business.operationManagementCenter.service.TaskNodeService;
 import com.github.zuihou.business.operationManagementCenter.service.WorkpieceService;
@@ -144,6 +145,8 @@ public class RobotNodeServiceImpl implements NodeOperationService {
 
     private String instructionUrl;
 
+    private boolean assembleFlag = true;
+
     @Override
     public void initResource(TaskNode taskNode, TTask task, Map dataMap) {
         //productionresourcePosition = getResourcePosition(taskNode);
@@ -192,10 +195,46 @@ public class RobotNodeServiceImpl implements NodeOperationService {
         String paramKey = zZone.getNo() + "_plc";
         instructionUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(paramKey).toString());
 
-        // TODO 后续删除,目前条用模拟接口
-//        if("safeguard".equals(zZone.getNo())){
-//            instructionUrl = instructionUrl.replace("8081","8083");
-//        }
+        // 产品装配所在地的对应线边库
+        String assembleZoneKey = zoneName + "-" + bomzZone.getNo();
+        String assembleZoneXbkNo =  DictionaryKey.YJ_ZONE_XBK.get(assembleZoneKey);
+
+        String bomZoneXbkNo =  DictionaryKey.YJ_ZONE_XBK.get(zoneName);
+
+        // 查找产品装配平台可用的线边库数量,进线加工数量最多等于线边库库位数量,防止极端情况产线不能运行时人工将工件都暂存线边库
+        // 装配线边库数量,启用并且无料的库位
+        List<BBom> zoneBoms = bBomMapper.selectList(Wraps.<BBom>lbQ().in(BBom::getZoneId, bomZzoneId));
+        List<Long> zoneBomIds = zoneBoms.stream().map(p -> p.getId()).collect(Collectors.toList());
+        if (taskNode.getCompleteBatchSort() == 1){
+            List<ProductionresourcePosition> assembleXbkUseableList = productionresourcePositionService.getFreeProductionresourcePositionByNos(assembleZoneXbkNo.split(","));
+
+            List<ZZoneProductionresource> assembleZoneProductionresources = zZoneProductionresourceMapper.selectList(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getZoneId, zoneId));
+            List<Long> assembleZoneProductionresourceIds = assembleZoneProductionresources.stream().map(p -> p.getResourceId()).collect(Collectors.toList());
+            List<ProductionresourcePosition> assembleProductionresourcePositions = productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, assembleZoneProductionresourceIds));
+            List<Long> assembleProductionresourceStorgeIds = assembleProductionresourcePositions.stream().map(p -> p.getStorgeId()).collect(Collectors.toList());
+
+            List<TWorkpiece> assembleMachiningList = workpieceService.list(Wraps.<TWorkpiece>lbQ().in(TWorkpiece::getStorgeId, assembleProductionresourceStorgeIds).in(TWorkpiece::getBomId,zoneBomIds));
+            // 线内在制件数量大于线边库空闲可用数量
+            if(assembleMachiningList.size() >= assembleXbkUseableList.size()){
+                assembleFlag =false;
+            }
+
+            // 在判断线内线边库数量及在制件数量
+            List<ProductionresourcePosition> zoneXbkUseableList = productionresourcePositionService.getFreeProductionresourcePositionByNos(bomZoneXbkNo.split(","));
+            List<ZZoneProductionresource> zoneProductionresources = zZoneProductionresourceMapper.selectList(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getZoneId, bomZzoneId));
+            List<Long> zoneProductionresourceIds = zoneProductionresources.stream().map(p -> p.getResourceId()).collect(Collectors.toList());
+            List<ProductionresourcePosition> zoneProductionresourcePositions = productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, zoneProductionresourceIds));
+            List<Long> zoneProductionresourceStorgeIds = zoneProductionresourcePositions.stream().map(p -> p.getStorgeId()).collect(Collectors.toList());
+            List<TWorkpiece> zonemachiningList = workpieceService.list(Wraps.<TWorkpiece>lbQ().in(TWorkpiece::getStorgeId, zoneProductionresourceStorgeIds).in(TWorkpiece::getBomId,zoneBomIds));
+            // 线内在制件数量大于线边库空闲可用数量
+            if(zonemachiningList.size() >= zoneXbkUseableList.size()){
+                assembleFlag =false;
+            }
+            // 保障平台数量加上线内加工数量大于产线线边库数量
+            if(assembleMachiningList.size() + zonemachiningList.size() >= zoneXbkUseableList.size()){
+                assembleFlag =false;
+            }
+        }
     }
 
     @Override
@@ -295,7 +334,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
         //目的库位
         Storge jqrStorge = null;
 
-        List<StockInfo>flikustockInfos = null;
+        List<StockInfo> flikustockInfos = null;
 
 
         if(taskNode.getCompleteBatchSort()==1){
@@ -611,7 +650,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
         Long resourceId = taskNode.getTargetResourceId();
         String xbkFlag = "";
 
-        if("1".equals(findAgvFlag)){ //需要提前锁定下个接驳位
+        if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
             // begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
             // 先找到处理节点下一节点agv起点地址
 
@@ -795,13 +834,13 @@ public class RobotNodeServiceImpl implements NodeOperationService {
      * @param task
      * @return
      */
-    private List<StockInfo>getLikuStockList(TTask task){
+    private List<StockInfo> getLikuStockList(TTask task){
         List<StockInfo> returnList = null;
         List<StockInfo> oneTray = null;
 
         List<Productionresource> productionresources = productionresourceBizMapper.selectList(Wraps.<Productionresource>lbQ().like(Productionresource::getCode,DictionaryKey.YJ_ZONE_XBK.get("plateAndClamp")));
         List<Long> productionresourceIds = productionresources.stream().map(t->t.getId()).collect(Collectors.toList());
-        List<ProductionresourcePosition> startProductionresourcePositions = productionresourcePositionMapper.selectList(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, productionresourceIds));
+        List<ProductionresourcePosition> startProductionresourcePositions = productionresourcePositionMapper.selectList(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, productionresourceIds).eq(ProductionresourcePosition::getStatus,"0"));
         List<Long> startProductionresourcePositionIds = startProductionresourcePositions.stream().map(t->t.getStorgeId()).collect(Collectors.toList());
 
         List<BomProcedureTray>trayList = procedureTrayService.list(Wraps.<BomProcedureTray>lbQ().in(BomProcedureTray::getProcedureId, task.getProcedureId()));