Selaa lähdekoodia

光栅逻辑:入库回库位超高1600放到2到5层,没超过放到一层

k 2 vuotta sitten
vanhempi
commit
8fb98dabbf

+ 12 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -227,13 +227,23 @@ public class PdaController {
                     return AjaxResult.error("目标库位需要为仓储区!");
                 }
             }
+            boolean superHighMark = false;
             if (baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_IN.getValue())
                     || baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_RE.getValue())) {
                 // 入库回库检测光栅高度
                 String gratingNo = Constant.GRATING_AND_LOCATION_MAPPING.getByLocation(lform.getLocationFrom()).getValue();
                 boolean isSuperHigh = iSysConfigService.checkGratingIsSuperHigh(gratingNo);
-                if (isSuperHigh) {
+                // 永湖仓储区一层高度为1600,二层有4个点为1600,其他为2100
+                // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)没超高入库到1600的库位,超高了入库到2100
+                // 入库和回库的时候,入库位IN-01-01和回库位RET-02-01入库到2100,超高不可入库
+                if (isSuperHigh
+                        && !baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
+                        && !baseLocationInfoFrom.getLocationNo().equals("RET-01-01")) {
                     return AjaxResult.error("光栅监测到货物超高!请人工处理!");
+                } else if (isSuperHigh &&
+                        (baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
+                                || baseLocationInfoFrom.getLocationNo().equals("RET-01-01"))) {
+                    superHighMark = true;
                 }
             }
 
@@ -289,6 +299,7 @@ public class PdaController {
             agvCallItemDTO.setWeight(lform.getWeight());
             agvCallItemDTO.setLocationFrom(lform.getLocationFrom());
             agvCallItemDTO.setLocationTo(lform.getLocationTo());
+            agvCallItemDTO.setSuperHigh(superHighMark);
             agvCallDTO.getAgvCallItemDTOList().add(agvCallItemDTO);
             LotattDTO lotattDTO = new LotattDTO();
             List<LineCallDetailsForm> lineCallDetailsForms = lform.getLineCallDetailsFormList();

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java

@@ -233,7 +233,7 @@ public class SysConfigServiceImpl implements ISysConfigService {
         SysConfig sysConfigState = null;
         int checkNum = 0; // 查询次数
         for (; ; ) {
-            if (checkNum > 10) {
+            if (checkNum > 5) {
                 break;
             }
             ThreadUtil.sleep(500);

+ 14 - 13
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -160,7 +160,7 @@ public class BusinessServiceImpl implements IBusinessService {
                     //排序规则 普通入库回库先放在col_no小的位置 - 1,备货入库回库放在col_no大的位置 - 2
                     if (agvCallDTO.getOrderRules() == 1) {
                         locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId(), "col_no + 0,shift_no + 0");
-                    }else {
+                    } else {
                         locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId(), "col_no + 0 desc,shift_no + 0");
                     }
                     locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "ASN", asnSoStrategy, agvCall, token);
@@ -329,7 +329,7 @@ public class BusinessServiceImpl implements IBusinessService {
                         continue;
                     }
                     // 根据起始库位判断目标是否可放
-                    Boolean canPut = checkLocCanPut(locationFrom, b);
+                    Boolean canPut = checkLocCanPut(locationFrom, b, agvCallDTO.isSuperHigh());
                     if (!canPut) {
                         continue;
                     }
@@ -356,7 +356,7 @@ public class BusinessServiceImpl implements IBusinessService {
                             continue;
                         }
                         // 根据起始库位判断目标是否可放
-                        Boolean canPut = checkLocCanPut(locationFrom, b);
+                        Boolean canPut = checkLocCanPut(locationFrom, b, agvCallDTO.isSuperHigh());
                         if (!canPut) {
                             continue;
                         }
@@ -366,7 +366,7 @@ public class BusinessServiceImpl implements IBusinessService {
                         locationInfo = b;
                         break;
                     }
-                    if(locationInfo == null) {
+                    if (locationInfo == null) {
                         throw new ServiceException("入库目标点没有可以分配的库位", token);
                     }
                 }
@@ -460,7 +460,7 @@ public class BusinessServiceImpl implements IBusinessService {
      * @param b
      * @return
      */
-    private boolean checkCurrentLocationCarNumber(int agvNo,BaseLocationInfo b) {
+    private boolean checkCurrentLocationCarNumber(int agvNo, BaseLocationInfo b) {
         if (agvNo == 1) {
             if (!b.getFoldedTag().equals("1")) {
                 return false;
@@ -501,16 +501,16 @@ public class BusinessServiceImpl implements IBusinessService {
 //            int agv02 = redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM);
 //            return agv01 > agv02 ? 2 : 1;
 //        }
-            return 0;
-        }
+        return 0;
+    }
 
-    public Boolean checkLocCanPut(BaseLocationInfo locationFrom, BaseLocationInfo locationTo) {
+    public Boolean checkLocCanPut(BaseLocationInfo locationFrom, BaseLocationInfo locationTo, boolean isSuperHigh) {
         boolean con = false;
-        // 永湖仓储区一层高度为1600,其他为2300
-        // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)只能入到一层,其他的不能入到一层
-        // 第二层有4个点限制高度1600 入库位IN-02-01(200)和回库位RET-01-01(500)可以入到这4个点
-        if (locationFrom.getLocationNo().equals("IN-02-01") || locationFrom.getLocationNo().equals("RET-01-01")
-                || locationFrom.getAgvStation() == 200 || locationFrom.getAgvStation() == 500) {
+        // 永湖仓储区一层高度为1600,二层有4个点为1600,其他为2100
+        // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)没超高入库到1600的库位,超高了入库到2100
+        // 入库和回库的时候,入库位IN-01-01和回库位RET-02-01入库到2100,超高不可入库
+        if ((locationFrom.getLocationNo().equals("IN-02-01") || locationFrom.getLocationNo().equals("RET-01-01"))
+                && !isSuperHigh) {
             if (locationTo.getShiftNo().equals("1")
                     || (locationTo.getHeightLimit() != null && locationTo.getHeightLimit().compareTo(1600.0) == 0)) {
                 con = true;
@@ -582,6 +582,7 @@ public class BusinessServiceImpl implements IBusinessService {
             wcsTask.setExt5(agvCallDTO.getPalletNo());
             wcsTask.setExt4(agvCallDTO.getTaskType());// 任务类型
             wcsTask.setExtParam(agvCallDTO.getExtParam());
+            wcsTask.setRemark(agvCallDTO.getAgvCallItemDTOList().get(0).isSuperHigh() ? "超高!" : "");
             wcsTaskList.add(wcsTask);
             businessService.addTask(wcsTask);
             // 入库任务,记录当前是哪辆车接了任务

+ 2 - 1
warewms-ams/src/main/java/com/ruoyi/ams/business/IBusinessService.java

@@ -81,9 +81,10 @@ public interface IBusinessService {
      *
      * @param locationFrom
      * @param locationTo
+     * @param isSuperHigh 起始库位货物是否超高1600
      * @return
      */
-    Boolean checkLocCanPut(BaseLocationInfo locationFrom, BaseLocationInfo locationTo);
+    Boolean checkLocCanPut(BaseLocationInfo locationFrom, BaseLocationInfo locationTo,boolean isSuperHigh);
 
 
     /***

+ 1 - 0
warewms-ams/src/main/java/com/ruoyi/ams/config/domain/dto/AgvCallItemDTO.java

@@ -14,5 +14,6 @@ public class AgvCallItemDTO {
     private String supplier;
     private LotattDTO lotattDTO;
     private String extParam;
+    private boolean superHigh;
     private FlowConfigHeaderVO flowConfigHeaderVO;
 }

+ 4 - 4
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -248,10 +248,10 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         palletNo = invLotLocIdLotattVOList.get(0).getLotatt07();
 
         // 根据起始库位判断目标库位是否可以放置
-        Boolean canPut = iBusinessService.checkLocCanPut(baseLocationFrom, baseLocationTo);
-        if (!canPut) {
-            return AjaxResult.error("所选的目标库位超高!");
-        }
+//        Boolean canPut = iBusinessService.checkLocCanPut(baseLocationFrom, baseLocationTo);
+//        if (!canPut) {
+//            return AjaxResult.error("所选的目标库位超高!");
+//        }
 
         // 下发移库任务
         String taskNo = System.currentTimeMillis() + "";