Browse Source

增加辊筒任务和多入库口任务

wuhb 1 week ago
parent
commit
9b497bd971

+ 0 - 6
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsLiftController.java

@@ -96,9 +96,6 @@ public class RmsLiftController extends BaseController
         if(UserConstants.NOT_UNIQUE.equals(rmsLiftService.checkLiftCodeUnique(rmsLift))){
             return AjaxResult.error("新增轨道车"+rmsLift.getLiftCode()+"失败,轨道车号已存在");
         }
-        /*if(UserConstants.NOT_UNIQUE.equals(rmsLiftService.checkLocationIdUnique(rmsLift))){
-            return AjaxResult.error("新增轨道车失败,所选库区已被其它轨道车设置");
-        }*/
         if(UserConstants.NOT_UNIQUE.equals(rmsLiftService.checkLocationIdsUnique(rmsLift))){
             return AjaxResult.error("新增轨道车失败,所选库区已被其它轨道车设置");
         }
@@ -131,9 +128,6 @@ public class RmsLiftController extends BaseController
         if(UserConstants.NOT_UNIQUE.equals(rmsLiftService.checkLiftCodeUnique(rmsLift))){
             return AjaxResult.error("修改轨道车"+rmsLift.getLiftCode()+"失败,轨道车号已存在");
         }
-        /*if(UserConstants.NOT_UNIQUE.equals(rmsLiftService.checkLocationIdUnique(rmsLift))){
-            return AjaxResult.error("修改轨道车失败,所选库区已被其它轨道车设置");
-        }*/
         if(UserConstants.NOT_UNIQUE.equals(rmsLiftService.checkLocationIdsUnique(rmsLift))){
             return AjaxResult.error("修改轨道车失败,所选库区已被其它轨道车设置");
         }

+ 0 - 1
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsSiteController.java

@@ -152,7 +152,6 @@ public class RmsSiteController extends BaseController
         if(UserConstants.NOT_UNIQUE.equals(RmsSiteService.checkSiteCodeUnique(RmsSite))){
             return AjaxResult.error("修改站点名称"+RmsSite.getSiteCode()+"失败,站点号已存在");
         }
-        RmsSite.setDeviceType(1);
         return toAjax(RmsSiteService.updateRmsSite(RmsSite));
     }
 

+ 2 - 2
mes/ktg-mes/src/main/java/com/ktg/mes/rms/service/IRmsTaskPoolService.java

@@ -108,9 +108,9 @@ public interface IRmsTaskPoolService
 
     public RmsTaskPool queryMastPoolRemark(RmsTaskPool pool);
 
-    public void updateOutStock(RmsTaskPool pool, String remark);
+    public void updateOutStockTask(RmsTaskPool pool, String remark);
 
-    public void updateInStock(RmsTaskPool pool, String remark);
+    public void updateInStockTask(RmsTaskPool pool, String remark);
 
     public int updateRmsTaskPoolMapper(RmsTaskPool rmsTaskPool);
 

+ 72 - 25
mes/ktg-mes/src/main/java/com/ktg/mes/rms/service/impl/RmsLineServiceImpl.java

@@ -2,6 +2,7 @@ package com.ktg.mes.rms.service.impl;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import com.ktg.common.constant.UserConstants;
 import com.ktg.common.core.domain.entity.SysUser;
@@ -503,7 +504,7 @@ public class RmsLineServiceImpl implements IRmsLineService {
             rmsTaskPool.setStockId(rmsTaskInstockLine.getInstockId());
             rmsTaskPool.setSourceId(rmsTaskInstockLine.getLineId());
             rmsTaskPool.setSourceType(rmsTaskInstockLine.getErpInstockCode());
-            rmsTaskPool.setTaskType(rmsLineFlowTasks.get(0).getTaskType());
+//            rmsTaskPool.setTaskType(rmsLineFlowTasks.get(0).getTaskType());
             rmsTaskInstockLine.setDeviceCode(rmsLine.getStockDeviceCode());
             rmsTaskInstockLine.setLiftCode(rmsLine.getStockLiftCode());
         }
@@ -516,7 +517,7 @@ public class RmsLineServiceImpl implements IRmsLineService {
             rmsTaskPool.setStockId(rmsTaskOutstockLine.getOutstockId());
             rmsTaskPool.setSourceId(rmsTaskOutstockLine.getLineId());
             rmsTaskPool.setSourceType(rmsTaskOutstockLine.getErpOutstockCode());
-            rmsTaskPool.setTaskType(rmsLineFlowTasks.get(0).getTaskType());
+//            rmsTaskPool.setTaskType(rmsLineFlowTasks.get(0).getTaskType());
             rmsTaskOutstockLine.setDeviceCode(rmsLine.getStockDeviceCode());
             rmsTaskOutstockLine.setLiftCode(rmsLine.getStockLiftCode());
         }
@@ -1189,7 +1190,11 @@ public class RmsLineServiceImpl implements IRmsLineService {
         rmsTaskPool.setParentId(parentId);
         rmsTaskPool.setTaskLevel(flowTask.getAncestors().split(",").length-1);
         rmsTaskPool.setTaskNum(flowTask.getOrderNum());
-        rmsTaskPool.setIsMaster(flowTask.getIsMaster());
+        if(flowTask.getIsMaster() == null){
+            rmsTaskPool.setIsMaster(0);
+        }else{
+            rmsTaskPool.setIsMaster(flowTask.getIsMaster());
+        }
         rmsTaskPool.setKeyRoute(rmsTaskPool.getToSite());
         rmsTaskPool.setFromSite(parentTaskPool.getFromSite());
         rmsTaskPool.setToSite(parentTaskPool.getToSite());
@@ -1271,7 +1276,21 @@ public class RmsLineServiceImpl implements IRmsLineService {
                     rmsTaskPool.setRmsLift(rmsLift);
                     parentTaskPool.setRmsLift(rmsLift);
                 }
-                RmsSiteLift rmsSiteLift = getRmsSiteLift(parentTaskPool.getRmsLift().getLiftCode(), 1);
+                long runStatus = 1L;
+                RmsLift pickPlat = rmsLine.getPickPlat();
+                if(pickPlat != null){
+                    RmsSiteLift rmsSiteLift = new RmsSiteLift();
+                    rmsSiteLift.setLiftCode(pickPlat.getLiftCode());
+                    List<RmsSiteLift> rmsSiteLiftList = rmsSiteLiftMapper.selectRmsSiteLiftList(rmsSiteLift);
+                    rmsSiteLiftList = rmsSiteLiftList.stream().filter(item -> item.getRunStatus() == 1 || item.getRunStatus() == 5).collect(Collectors.toList());
+                    if(rmsSiteLiftList.size() > 1){
+                        throw new Exception("拣货平台存在多个上架位置");
+                    }
+                    if(rmsSiteLiftList.size() > 0){
+                        runStatus = rmsSiteLiftList.get(0).getRunStatus();
+                    }
+                }
+                RmsSiteLift rmsSiteLift = getRmsSiteLift(parentTaskPool.getRmsLift().getLiftCode(), runStatus);
                 RmsSite rmsSite = RmsSiteMapper.selectRmsSiteById(rmsSiteLift.getSiteId());
                 agvSite = rmsSite.getSiteType() + "$" + rmsSite.getSiteCode();
                 break;
@@ -1306,10 +1325,7 @@ public class RmsLineServiceImpl implements IRmsLineService {
                 break;
             }
             case "-4": {
-                /*if(rmsLine.getPickPlat() == null){
-                    throw new Exception("没有可用的拣货平台,请确认来源为拣货平台");
-                }
-                RmsLift pickPlat = rmsLine.getPickPlat();*/
+                //线边搬运--拣货平台出口
                 RmsLift pickPlat = null;
                 if(rmsLine != null && rmsLine.getPickPlat() != null){
                     pickPlat = rmsLine.getPickPlat();
@@ -1348,6 +1364,7 @@ public class RmsLineServiceImpl implements IRmsLineService {
                 break;
             }
             case "-5": {
+                //拣货平台入口
                 RmsLift pickPlat = null;
                 if(rmsLine != null && rmsLine.getPickPlat() != null){
                     pickPlat = rmsLine.getPickPlat();
@@ -1401,7 +1418,16 @@ public class RmsLineServiceImpl implements IRmsLineService {
                         }
                     }
                 }
-                //RmsLift pickPlat = rmsLine.getPickPlat();
+                if(pickPlat == null && rmsLine != null){
+                    //获取设备绑定的拣货平台
+                    RmsLift rmsLift = new RmsLift();
+                    rmsLift.setDeviceType("6");
+                    rmsLift.setDeviceCodes(rmsLine.getDeviceCode());
+                    List<RmsLift> rmsLifts = rmsLiftMapper.selectRmsLiftList(rmsLift);
+                    if(rmsLifts.size() > 0){
+                        pickPlat = rmsLifts.get(0);
+                    }
+                }
                 if(pickPlat == null){
                     throw new Exception("没有可用的拣货平台");
                 }
@@ -1467,6 +1493,21 @@ public class RmsLineServiceImpl implements IRmsLineService {
         return rmsSiteLift;
     }
 
+    private RmsSiteLift getRmsSiteLiftBySiteCode(String siteCode, long runStatus) throws Exception {
+        RmsSiteLift rmsSiteLift = new RmsSiteLift();
+        rmsSiteLift.setSiteCode(siteCode);
+        rmsSiteLift.setRunStatus(runStatus);
+        List<RmsSiteLift> rmsSiteLiftList = rmsSiteLiftMapper.selectRmsSiteLiftList(rmsSiteLift);
+        if(rmsSiteLiftList.size() == 0){
+            throw new Exception("轨道车没有设置"+(runStatus==1?"入":"出")+"库点");
+        }
+        rmsSiteLift = rmsSiteLiftList.get(0);
+        if(rmsSiteLift.getSiteId() == null){
+            throw new Exception("轨道车"+(runStatus==1?"入":"出")+"库站点不能为空");
+        }
+        return rmsSiteLift;
+    }
+
     private List<WmRmsBox> getOutStockBox(RmsTaskOutstockLine outStockLine, RmsLine rmsLine) throws Exception {
 //      获取料框,根据数量,先进先出,数量不足,取多个框
         List<WmRmsBoxItem> boxItemList = null;
@@ -1807,21 +1848,20 @@ public class RmsLineServiceImpl implements IRmsLineService {
     }
 
     public RmsLift queryRoller(RmsLift lift, int rollerType) throws Exception {
-        RmsSiteLift rmsSiteLift = getRmsSiteLift(lift.getLiftCode(), rollerType);
-        RmsSite rmsSite = RmsSiteMapper.selectRmsSiteById(rmsSiteLift.getSiteId());
+        RmsSiteLift rmsSiteLift = getRmsSiteLiftBySiteCode(lift.getSiteCode(), rollerType);
         RmsLift selLift = rmsLiftMapper.selectRmsLiftByLiftId(rmsSiteLift.getLiftId());
-        RmsLift rmsLift = new RmsLift();
-        rmsLift.setDeviceType(DeviceTypeEnum.ROLLER.getValue()+"");
-        rmsLift.setRollerType(rollerType);
-        rmsLift.setSiteCode(rmsSite.getSiteCode());
-        List<RmsLift> rmsLifts = rmsLiftMapper.selectRmsLiftList(rmsLift);
-        if(rmsLifts.size() > 1){
-            throw new Exception(rmsSite.getSiteCode() + "配置了多个接货平台");
-        }
-        if(rmsLifts.size() == 0){
-            throw new Exception(rmsSite.getSiteCode() + "没有配置接货平台");
-        }
-        RmsLift rollerLift = rmsLifts.get(0);
+        RmsLift rollerLift = new RmsLift();
+        rollerLift.setSiteCode(lift.getSiteCode());
+        rollerLift.setDeviceType(DeviceTypeEnum.ROLLER.getValue()+"");
+        rollerLift.setRollerType(rollerType);
+        List<RmsLift> rollerLifts = rmsLiftMapper.selectRmsLiftList(rollerLift);
+        if(rollerLifts.size() > 1){
+            throw new Exception(lift.getSiteCode() + "配置了多个接货平台");
+        }
+        if(rollerLifts.size() == 0){
+            throw new Exception(lift.getSiteCode() + "没有配置接货平台");
+        }
+        rollerLift = rollerLifts.get(0);
         rollerLift.setRmsLift(selLift);
         return rollerLift;
     }
@@ -1829,8 +1869,14 @@ public class RmsLineServiceImpl implements IRmsLineService {
     public RmsLift queryToSite(RmsTaskPool rmsTaskPool, RmsLineFlowTask flowTask) throws Exception {
         String parentToSite = "";
         RmsLift rmsLift = new RmsLift();
-        if(String.valueOf(DeviceTypeEnum.ROLLERAGV.getValue()).equals(rmsTaskPool.getDeviceType())){
-            parentToSite = rmsTaskPool.getToSite();
+        if(String.valueOf(DeviceTypeEnum.ROLLERAGV.getValue()).equals(rmsTaskPool.getDeviceType())
+                || String.valueOf(DeviceTypeEnum.RAILAGV.getValue()).equals(rmsTaskPool.getDeviceType())){
+            if("2".equals(flowTask.getTaskType())){ // 出库
+                parentToSite = rmsTaskPool.getFromSite();
+            }
+            if("1".equals(flowTask.getTaskType())){ // 入库
+                parentToSite = rmsTaskPool.getToSite();
+            }
             if(parentToSite.contains("$")){
                 parentToSite = parentToSite.split("\\$")[1];
             }
@@ -1849,6 +1895,7 @@ public class RmsLineServiceImpl implements IRmsLineService {
             parentToSite = rmsSite.getSiteCode();
             rmsLift.setSiteCode(parentToSite);
         }
+        rmsLift.setLiftCode(rmsTaskPool.getLiftCode());
         rmsLift.setRollerType(Integer.parseInt(flowTask.getTaskType()));
         return rmsLift;
     }

+ 2 - 2
mes/ktg-mes/src/main/java/com/ktg/mes/rms/service/impl/RmsTaskPoolServiceImpl.java

@@ -264,7 +264,7 @@ public class RmsTaskPoolServiceImpl implements IRmsTaskPoolService
         }
     }
 
-    public void updateOutStock(RmsTaskPool pool, String remark){
+    public void updateOutStockTask(RmsTaskPool pool, String remark){
         if(pool.getSourceId()!=null){
             RmsTaskOutstockLine rmsTaskOutstockLine = new RmsTaskOutstockLine();
             rmsTaskOutstockLine.setLineId(pool.getSourceId());
@@ -287,7 +287,7 @@ public class RmsTaskPoolServiceImpl implements IRmsTaskPoolService
         }
     }
 
-    public void updateInStock(RmsTaskPool pool, String remark){
+    public void updateInStockTask(RmsTaskPool pool, String remark){
         if(pool.getSourceId()!=null){
             RmsTaskInstockLine rmsTaskInstockLine = new RmsTaskInstockLine();
             rmsTaskInstockLine.setLineId(pool.getSourceId());

+ 81 - 49
mes/ktg-mes/src/main/java/com/ktg/mes/rms/task/ApiStockTask.java

@@ -44,6 +44,13 @@ import java.util.concurrent.TimeoutException;
 @EnableScheduling
 @Component("apiStockTask")
 public class ApiStockTask {
+    public static final boolean MOCK_LIFT = true;
+    public static final String MOCK_BOX = "BOX000009";
+    public static final boolean MOCK_AGV = false;
+    public static final boolean MOCK_RAIL_AGV = true;
+    public static final boolean MOCK_ROLLER = true;
+    public static final boolean MOCK_PICK = false;
+
     private static final Logger log = LoggerFactory.getLogger(ApiStockTask.class);
     public static final Map<String, LiftThread> workThreadMap = new ConcurrentHashMap<>();
     public static List<AgvThread> runAgvThread = new CopyOnWriteArrayList<>();
@@ -95,7 +102,9 @@ public class ApiStockTask {
         } catch (Exception e) {
             log.error("取消失败:", e);
         }
-        Modbus.releaseSharedResources();
+        if(!MOCK_LIFT && !MOCK_AGV && !MOCK_RAIL_AGV && !MOCK_ROLLER && !MOCK_PICK){
+            Modbus.releaseSharedResources();
+        }
         log.info("启动服务器,取消所有任务");
         rmsTaskPoolService.cancelAllRmsTaskPool("4");
     }
@@ -136,6 +145,11 @@ public class ApiStockTask {
         if("net".equals(robotModel)){
             return;
         }
+        List<RmsTaskPool> rmsTaskPools = ApiCache.getRollerPriorityList();
+        if(!rmsTaskPools.isEmpty()){
+            log.info("优先接收平台任务数:" + rmsTaskPools.size());
+            ApiCache.insertFirstAll(rmsTaskPools);
+        }
         Queue<RmsTaskPool> queue = ApiCache.rollerWorkQueue;
         RmsTaskPool rmsTaskPool = queue.peek();
         if (rmsTaskPool != null) {
@@ -153,9 +167,11 @@ public class ApiStockTask {
                 if (runThread != null && runThread.isAlive()) {
                     throw new Exception(rollerCode + "对接平台正在执行任务");
                 }
-                boolean isRollerPass = checkRollerSign(rollerCode);
-                if (!isRollerPass) {
-                    throw new Exception(rollerCode + "对接平台上有物料");
+                if(!MOCK_ROLLER){
+                    boolean isRollerPass = checkRollerSign(rollerCode);
+                    if (!isRollerPass) {
+                        throw new Exception(rollerCode + "对接平台上有物料");
+                    }
                 }
             }catch (Exception ex){
                 log.error("对接平台执行:", ex);
@@ -197,9 +213,11 @@ public class ApiStockTask {
                 log.warn("AGV发送WebSocket消息异常:", e);
             }
             try {
-                boolean isConnAgvServer = checkAgvServer(rmsTaskPool);
-                if(!isConnAgvServer){
-                    return;
+                if(!MOCK_AGV){
+                    boolean isConnAgvServer = checkAgvServer(rmsTaskPool);
+                    if(!isConnAgvServer){
+                        return;
+                    }
                 }
                 int i = checkErrorTaskPool(rmsTaskPool, ApiCache.agvWorkQueue);
                 if (i == 0) {
@@ -218,9 +236,11 @@ public class ApiStockTask {
                     log.info(runPool.getGroupCode()+ "|" + runPool.getTaskId() + "任务正在执行");
                     throw new Exception(runPool.getGroupCode()+"入库正在运行");
                 }
-                boolean isValid = checkPushRollerLift(rmsTaskPool);
-                if (!isValid) {
-                    throw new Exception(rmsTaskPool + "入库对接平台上有物料");
+                if(!MOCK_AGV){
+                    boolean isValid = checkPushRollerLift(rmsTaskPool);
+                    if (!isValid) {
+                        throw new Exception(rmsTaskPool + "入库对接平台上有物料");
+                    }
                 }
                 if (!runAgvThread.isEmpty()) {
                     List<AgvThread> validThread = new ArrayList<>();
@@ -300,9 +320,11 @@ public class ApiStockTask {
                 log.warn("轨道AGV发送WebSocket消息异常:", e);
             }
             try {
-                boolean isConnAgvServer = checkAgvServer(rmsTaskPool);
-                if(!isConnAgvServer){
-                    return;
+                if(!MOCK_RAIL_AGV){
+                    boolean isConnAgvServer = checkAgvServer(rmsTaskPool);
+                    if(!isConnAgvServer){
+                        return;
+                    }
                 }
                 int i = checkErrorTaskPool(rmsTaskPool, ApiCache.railAgvWorkQueue);
                 if (i == 0) {
@@ -322,9 +344,11 @@ public class ApiStockTask {
                     throw new Exception(runPool.getGroupCode()+"入库正在运行");
                 }
 //                ============debug模式=============
-                boolean isValid = checkPushRollerLift(rmsTaskPool);
-                if (!isValid) {
-                    throw new Exception(rmsTaskPool + "入库对接平台上有物料");
+                if(!MOCK_RAIL_AGV){
+                    boolean isValid = checkPushRollerLift(rmsTaskPool);
+                    if (!isValid) {
+                        throw new Exception(rmsTaskPool + "入库对接平台上有物料");
+                    }
                 }
 //                ============debug模式=============
 
@@ -570,23 +594,25 @@ public class ApiStockTask {
                 }
 
 //=========================debug================
-                Boolean liftOk = checkWithTimeout(() -> checkLiftStatus(taskPool, liftCode, 0), 5000);
-                if (liftOk == null) {
-                    log.warn("{} 状态检查超时,跳过", liftCode);
-                    return;
-                }
-                if (!liftOk) {
-                    throw new Exception(liftCode + "正在忙");
-                }
+                if(!MOCK_LIFT){
+                    Boolean liftOk = checkWithTimeout(() -> checkLiftStatus(taskPool, liftCode, 0), 5000);
+                    if (liftOk == null) {
+                        log.warn("{} 状态检查超时,跳过", liftCode);
+                        return;
+                    }
+                    if (!liftOk) {
+                        throw new Exception(liftCode + "正在忙");
+                    }
 //                判断滚筒是否有货物
-                Boolean rollerOk = checkWithTimeout(() -> checkRollerLift(taskPool.getTaskType(), liftCode, taskPool), 5000);
-                if (rollerOk == null) {
-                    log.warn("{} 对接平台检查超时,跳过", liftCode);
-                    return;
-                }
-                if (!rollerOk) {
-                    log.info(liftCode + "对接平台上有物料");
-                    return;
+                    Boolean rollerOk = checkWithTimeout(() -> checkRollerLift(taskPool.getTaskType(), liftCode, taskPool), 5000);
+                    if (rollerOk == null) {
+                        log.warn("{} 对接平台检查超时,跳过", liftCode);
+                        return;
+                    }
+                    if (!rollerOk) {
+                        log.info(liftCode + "对接平台上有物料");
+                        return;
+                    }
                 }
 //=========================debug================
 
@@ -682,9 +708,11 @@ public class ApiStockTask {
             RmsTaskPool taskPoolAgv = rmsTaskPools.stream().filter(item->item.getDeviceType().equals(DeviceTypeEnum.ROLLERAGV.getValue()+"")).findFirst().orElse(null);
             RmsTaskPool taskPoolRailAgv = rmsTaskPools.stream().filter(item->item.getDeviceType().equals(DeviceTypeEnum.RAILAGV.getValue()+"")).findFirst().orElse(null);
             if(taskPoolRailAgv != null){
-                boolean isConnRms = checkAgvServer(taskPoolRailAgv);
-                if(!isConnRms){
-                    log.info("========轨道agv服务通讯失败,任务加入队列等待重试===========");
+                if(!MOCK_RAIL_AGV){
+                    boolean isConnRms = checkAgvServer(taskPoolRailAgv);
+                    if(!isConnRms){
+                        log.info("========轨道agv服务通讯失败,任务加入队列等待重试===========");
+                    }
                 }
                 rmsTaskPools.forEach(item->{
                     if(item.getDeviceType().equals(DeviceTypeEnum.RAILAGV.getValue()+"")){
@@ -694,9 +722,11 @@ public class ApiStockTask {
                 });
             }
             if(taskPoolAgv != null){
-                boolean isConnRms = checkAgvServer(taskPoolAgv);
-                if(!isConnRms){
-                    log.info("========agv服务通讯失败,任务加入队列等待重试===========");
+                if(!MOCK_AGV){
+                    boolean isConnRms = checkAgvServer(taskPoolAgv);
+                    if(!isConnRms){
+                        log.info("========agv服务通讯失败,任务加入队列等待重试===========");
+                    }
                 }
                 rmsTaskPools.forEach(item->{
                     if(item.getDeviceType().equals(DeviceTypeEnum.ROLLERAGV.getValue()+"")){
@@ -782,20 +812,22 @@ public class ApiStockTask {
             lift.setDeviceType(DeviceTypeEnum.LIFT.getValue() + "");
             List<RmsLift> rmsLifts = rmsLiftService.selectRmsLiftList(lift);
             for (RmsLift rmsLift : rmsLifts) {
-                String sWarningCode = null;
+                String sWarningCode = "0";
                 LiftPlcHelper liftPlcHelper = null;
-                try {
-                    if(liftPlcHelpTask.containsKey(rmsLift.getLiftCode())){
-                        liftPlcHelper = liftPlcHelpTask.get(rmsLift.getLiftCode());
-                        if(liftPlcHelper.getMaster() == null){
-                            liftPlcHelper = null;
+                if(!MOCK_LIFT){
+                    try {
+                        if(liftPlcHelpTask.containsKey(rmsLift.getLiftCode())){
+                            liftPlcHelper = liftPlcHelpTask.get(rmsLift.getLiftCode());
+                            if(liftPlcHelper.getMaster() == null){
+                                liftPlcHelper = null;
+                            }
                         }
+                        liftPlcHelper = checkConn(liftPlcHelper, rmsLift);
+                        sWarningCode = liftPlcHelper.getValue(LiftPlcHelper.sWarningCode, 0);
+                    }catch (Exception ex){
+                        log.error("读取轨道车警告码异常:", ex);
+                        sWarningCode = "-1";
                     }
-                    liftPlcHelper = checkConn(liftPlcHelper, rmsLift);
-                    sWarningCode = liftPlcHelper.getValue(LiftPlcHelper.sWarningCode, 0);
-                }catch (Exception ex){
-                    log.error("读取轨道车警告码异常:", ex);
-                    sWarningCode = "-1";
                 }
                 if(!"0".equals(sWarningCode)){
                     log.info(rmsLift.getLiftCode() + ":警告" + sWarningCode);

+ 7 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/thread/AgvThread.java

@@ -71,6 +71,13 @@ public class AgvThread extends BaseThread{
     public void run(){
         try{
             log.info("=========收到AGV任务:"+rmsTaskPool.getTaskId()+"=========");
+            if(ApiStockTask.MOCK_AGV){
+                log.info("MOCK: 模拟AGV任务完成");
+                rmsTaskPoolService.startGroupTask(rmsTaskPool);
+                updateRemark(null,2, 2, "模拟成功");
+                rmsTaskPoolService.closeAutoGroupTask(rmsTaskPool);
+                return;
+            }
             rmsTaskPoolService.startGroupTask(rmsTaskPool);
             updateRemark(null,1, 1, "开始"+rmsTaskPool.getTaskName());
             if(rmsTaskPool.getRunDelay()!=null && rmsTaskPool.getRunDelay() > 0){

+ 2 - 2
mes/ktg-mes/src/main/java/com/ktg/mes/rms/thread/BaseThread.java

@@ -60,11 +60,11 @@ public class BaseThread extends Thread{
             if (rmsTaskPool.getStockType() == 2
                     && rmsTaskPool.getStockId() != null) {
                 rmsTaskPool.setTaskStatus("3");
-                rmsTaskPoolService.updateOutStock(rmsTaskPool, remark);
+                rmsTaskPoolService.updateOutStockTask(rmsTaskPool, remark);
             } else if (rmsTaskPool.getStockType() == 1
                     && rmsTaskPool.getStockId() != null) {
                 rmsTaskPool.setTaskStatus("3");
-                rmsTaskPoolService.updateInStock(rmsTaskPool, remark);
+                rmsTaskPoolService.updateOutStockTask(rmsTaskPool, remark);
             } else if ((rmsTaskPool.getStockType() == 1
                     || rmsTaskPool.getStockType() == 2)
                     && rmsTaskPool.getStockId() == null) {

+ 41 - 1
mes/ktg-mes/src/main/java/com/ktg/mes/rms/thread/LiftThread.java

@@ -85,6 +85,22 @@ public class LiftThread extends BaseThread{
         log.info("=========轨道车收到任务:"+rmsTaskPool.getTaskId()+"=========");
         String liftCode = rmsTaskPool.getLiftCode();
         try{
+            if(ApiStockTask.MOCK_LIFT){
+                log.info("MOCK: 模拟轨道车任务完成:"+liftCode);
+                rmsTaskPoolService.startGroupTask(rmsTaskPool);
+                rmsLift = rmsLiftService.selectRmsLiftByLiftCode(liftCode);
+                if(rmsLift != null){
+                    rmsLift.setStatus(1L);
+                    rmsLiftService.updateRmsLiftInfo(rmsLift);
+                }
+                runIndex = 1;
+                requestTask();
+                waitByTask();
+                checkNextTask();
+                rmsTaskPoolService.closeAutoGroupTask(rmsTaskPool);
+                log.info("=========轨道车任务(模拟)完成:"+rmsTaskPool.getTaskId()+"=========");
+                return;
+            }
             rmsLift = rmsLiftService.selectRmsLiftByLiftCode(liftCode);
             if(rmsLift == null){
                 throw new Exception(liftCode + "轨道车不存在");
@@ -148,8 +164,10 @@ public class LiftThread extends BaseThread{
         if(nextTaskPools!=null && !nextTaskPools.isEmpty()) {
             ApiCache.addPriorityList(nextTaskPools);
         }
+        //把同组的AGV任务加入优先级队列
         if(TaskTypeEnum.PULL.getValue().equals(rmsTaskPool.getTaskType())){
             ApiCache.addTopAgvList(rmsTaskPool);
+            ApiCache.addTopRailAgvList(rmsTaskPool);
         }
         if(nextTaskPools==null || nextTaskPools.isEmpty()){
             log.info("没有下级任务");
@@ -174,7 +192,11 @@ public class LiftThread extends BaseThread{
         if(StringUtils.isEmpty(rmsTaskPool.getFromSite())){
             throw new Exception("轨道车上架站点不能为空");
         }
-        siteLift.setSiteCode(rmsTaskPool.getFromSite());
+        if(rmsTaskPool.getFromSite().contains("$")){
+            siteLift.setSiteCode(rmsTaskPool.getFromSite().split("\\$")[1]);
+        }else{
+            siteLift.setSiteCode(rmsTaskPool.getFromSite());
+        }
         siteLift.setLiftCode(rmsLift.getLiftCode());
         List<RmsSiteLift> rmsSiteLiftList = rmsSiteLiftService.selectRmsSiteLiftList(siteLift);
         if(rmsSiteLiftList.size() != 1){
@@ -268,6 +290,11 @@ public class LiftThread extends BaseThread{
     }
 
     private void waitTaskDone(int timeOut, String taskType) throws Exception {
+        if(ApiStockTask.MOCK_LIFT){
+            log.info("开始等待3秒"+taskType+"完成");
+            Thread.sleep(3000);
+            return;
+        }
         String bResult = "0";
         runTime = new Date().getTime();
         log.info("开始等待"+taskType+"完成");
@@ -301,6 +328,9 @@ public class LiftThread extends BaseThread{
     }
 
     private String waitSearchAreaCode() throws Exception {
+        if(ApiStockTask.MOCK_LIFT){
+            return ApiStockTask.MOCK_BOX;
+        }
         String boxCode = "";
         runTime = new Date().getTime();
         int ix = 1;
@@ -863,6 +893,9 @@ public class LiftThread extends BaseThread{
     }
 
     public void pushStart(int ix) throws Exception {
+        if(ApiStockTask.MOCK_LIFT){
+            return;
+        }
         if(checkLift()){
             log.info("轨道车正忙");
         }
@@ -884,6 +917,9 @@ public class LiftThread extends BaseThread{
     }
 
     public void pushParam(Long slide, Long x, Long y) throws Exception {
+        if(ApiStockTask.MOCK_LIFT){
+            return;
+        }
         if(checkLift()){
             log.info("轨道车正忙");
         }
@@ -895,11 +931,15 @@ public class LiftThread extends BaseThread{
         param.put(LiftPlcHelper.locationPos, slide.toString());
         param.put(LiftPlcHelper.locationColumn, x.toString());
         param.put(LiftPlcHelper.locationLevel, y.toString());
+        param.put(LiftPlcHelper.iTaskType, "3");
         log.info("上架库位:" + slide + "," + x + "," + y);
         liftHelper.setVar(param);
     }
 
     public void pullParam(Long slide, Long x, Long y, String boxCode) throws Exception {
+        if(ApiStockTask.MOCK_LIFT){
+            return;
+        }
         if(checkLift()){
             throw new Exception("轨道车正忙");
         }

+ 16 - 5
mes/ktg-mes/src/main/java/com/ktg/mes/rms/thread/PickThread.java

@@ -14,12 +14,11 @@ import com.ktg.mes.rms.domain.RmsLift;
 import com.ktg.mes.rms.server.RmsWebSocketServer;
 import com.ktg.mes.rms.service.IRmsLiftService;
 import com.ktg.mes.rms.service.impl.RmsLiftServiceImpl;
+import com.ktg.mes.rms.task.ApiStockTask;
 import com.ktg.mes.rms.util.RollerPlatHelper;
 import com.ktg.mes.wm.domain.WmRmsBox;
 import com.ktg.mes.wm.service.IWmRmsBoxService;
 import com.ktg.mes.wm.service.impl.WmRmsBoxServiceImpl;
-import com.ktg.system.service.ISysConfigService;
-import com.ktg.system.service.impl.SysConfigServiceImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.ObjectUtils;
@@ -41,7 +40,6 @@ public class PickThread extends BaseThread{
     private final IRmsLiftService rmsLiftService;
     private final RmsLift rmsLift;
     private final IWmRmsBoxService wmRmsBoxService;
-    private final ISysConfigService sysConfigService;
     private final IRmsTaskOutstockLineService rmsTaskOutstockLineServiceImpl;
     private long runTime = 0L;
     private final int waitScanTime = 180;
@@ -55,7 +53,6 @@ public class PickThread extends BaseThread{
         rmsWebSocketServer = SpringUtils.getBean(RmsWebSocketServer.class);
         rmsLiftService = SpringUtils.getBean(RmsLiftServiceImpl.class);
         wmRmsBoxService = SpringUtils.getBean(WmRmsBoxServiceImpl.class);
-        sysConfigService = SpringUtils.getBean(SysConfigServiceImpl.class);
         rmsTaskOutstockLineServiceImpl = SpringUtils.getBean(RmsTaskOutstockLineServiceImpl.class);
     }
 
@@ -64,6 +61,17 @@ public class PickThread extends BaseThread{
         Lock groupLock = lockMap.computeIfAbsent(rmsLift.getScanUrl(), k -> new ReentrantLock());
         groupLock.lock();
         try{
+            if(ApiStockTask.MOCK_PICK){
+                log.info("=========拣货平台收到任务(模拟):" + rmsLift.getLiftCode() + "=========");
+                ClientRequest clientRequest = new ClientRequest();
+                clientRequest.setFromType(0);
+                clientRequest.setInstockId(0L);
+                clientRequest.setPickPlat(rmsLift);
+                String boxCode = ApiStockTask.MOCK_BOX;
+                clientRequest.setBoxCode(boxCode);
+                rmsTaskInstockService.handInStock(clientRequest, "admin");
+                return;
+            }
             platHelper = RollerPlatHelper.getInstance(rmsLift.getLiftIp(), rmsLift.getLiftPort().intValue());
             boolean isHave = platHelper.readIsOpen(0);
             boxCodeResult = "";
@@ -86,7 +94,7 @@ public class PickThread extends BaseThread{
                             clientRequest.setBoxCode(boxCode);
                             WmRmsBox wmRmsBox = wmRmsBoxService.selectWmRmsBoxByBoxCode(boxCode);
                             if(wmRmsBox != null && StringUtils.isNotEmpty(wmRmsBox.getLineIds())){
-                                //要判断明细id里面是否是这台分拣台对应的设备操作的,否则就跳过
+                                //线边到线边,要判断明细id里面是否是这台分拣台对应的设备操作的,否则就跳过
                                 String deviceCodes = rmsLift.getDeviceCodes();
                                 String lineIds = wmRmsBox.getLineIds();
                                 String[] lineIdSplit = lineIds.split(",");
@@ -157,6 +165,9 @@ public class PickThread extends BaseThread{
 
     //扫码再入库, 修改料框is_scan,是否扫码,通过料框查是否有绑定的出库单明细,有就发AGV任务,直接搬过去,不入库
     public String scanBarcode() throws Exception {
+        if(ApiStockTask.MOCK_PICK){
+            return "MOCK_BOX_" + rmsLift.getLiftCode() + System.currentTimeMillis();
+        }
         String boxCode = "";
         runTime = new Date().getTime();
         boolean isScanDone = false;

+ 8 - 8
mes/ktg-mes/src/main/java/com/ktg/mes/rms/thread/RailAgvThread.java

@@ -48,6 +48,14 @@ public class RailAgvThread extends BaseThread{
         RailAgvPlcHelper plcHelper = null;
         try{
             log.info("=========收到轨道AGV任务:"+rmsTaskPool.getTaskId()+"=========");
+            if(ApiStockTask.MOCK_RAIL_AGV){
+                log.info("MOCK: 模拟轨道AGV任务完成");
+                rmsTaskPoolService.startGroupTask(rmsTaskPool);
+                updateRemark(null,2, 2, "模拟成功");
+                checkNextTask();
+                rmsTaskPoolService.closeAutoGroupTask(rmsTaskPool);
+                return;
+            }
             rmsTaskPoolService.startGroupTask(rmsTaskPool);
             updateRemark(null,1, 1, "开始"+rmsTaskPool.getTaskName());
             if(rmsTaskPool.getRunDelay()!=null && rmsTaskPool.getRunDelay() > 0){
@@ -178,14 +186,6 @@ public class RailAgvThread extends BaseThread{
         List<RmsTaskPool>  nextTaskPools = rmsTaskPoolService.getTaskPoolByParent(rmsTaskPool.getTaskId());
         if(nextTaskPools.size() > 0) {
             log.info("插入新任务:" + nextTaskPools.size());
-            nextTaskPools.forEach(item->{
-                if(item.getTaskType().equals(TaskTypeEnum.ROLLER.getValue())){
-                    item.setIsSort(1);
-                }
-                if(item.getTaskType().equals(TaskTypeEnum.PUSH.getValue())){
-                    item.setIsSort(1);
-                }
-            });
             ApiCache.addPriorityList(nextTaskPools);
             log.info("插入新任务完成");
         }

+ 12 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/thread/RollerThread.java

@@ -8,6 +8,7 @@ import com.ktg.mes.rms.domain.RmsLift;
 import com.ktg.mes.rms.domain.RmsTaskPool;
 import com.ktg.mes.rms.server.RmsWebSocketServer;
 import com.ktg.mes.rms.service.IRmsLiftService;
+import com.ktg.mes.rms.task.ApiStockTask;
 import com.ktg.mes.rms.util.ApiCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,6 +30,14 @@ public class RollerThread extends BaseThread{
     public void run(){
         try{
             log.info("=========收到接收平台任务:"+rmsTaskPool.getTaskId()+"=========");
+            if(ApiStockTask.MOCK_ROLLER){
+                log.info("MOCK: 模拟接收平台任务完成");
+                rmsTaskPoolService.startGroupTask(rmsTaskPool);
+                update(0, 2);
+                checkNextTask();
+                rmsTaskPoolService.closeAutoGroupTask(rmsTaskPool);
+                return;
+            }
             rmsTaskPoolService.startGroupTask(rmsTaskPool);
             update(1, 1);
             if(rmsTaskPool.getRunDelay()!=null && rmsTaskPool.getRunDelay() > 0){
@@ -41,6 +50,7 @@ public class RollerThread extends BaseThread{
             waitByTask();
             update(0, 2);
             checkNextTask();
+            rmsTaskPoolService.closeAutoGroupTask(rmsTaskPool);
         }catch (Exception ex){
             log.error("对接平台异常:" + JSONUtil.toJsonStr(rmsTaskPool), ex);
             updateLog(rmsTaskPool, ex.getMessage());
@@ -53,7 +63,9 @@ public class RollerThread extends BaseThread{
     private void checkNextTask() throws Exception {
         List<RmsTaskPool>  nextTaskPools = rmsTaskPoolService.getTaskPoolByParent(rmsTaskPool.getTaskId());
         if(nextTaskPools.size() > 0) {
+            log.info("插入新任务:" + nextTaskPools.size());
             ApiCache.addListTask(nextTaskPools);
+            log.info("插入新任务完成");
         }
     }
 

+ 31 - 7
mes/ktg-mes/src/main/java/com/ktg/mes/rms/util/ApiCache.java

@@ -108,9 +108,33 @@ public class ApiCache {
             if(Long.parseLong(pool.getDeviceType()) == DeviceTypeEnum.LIFT.getValue()){
                 addSingeLiftTask(pool);
             }
+            if(Long.parseLong(pool.getDeviceType()) == DeviceTypeEnum.ROLLER.getValue()){
+                addRollerTask(pool);
+            }
+            if(Long.parseLong(pool.getDeviceType()) == DeviceTypeEnum.RAILAGV.getValue()){
+                addRailAgvTask(pool);
+            }
+        }
+    }
+
+    public static void addPriorityList(List<RmsTaskPool> rmsTaskPools){
+        lock.lock();
+        try{
+            rmsTaskPools.forEach(item->{
+                if(item.getTaskType().equals(TaskTypeEnum.ROLLER.getValue())){
+                    item.setIsSort(1);
+                }
+                if(item.getTaskType().equals(TaskTypeEnum.PUSH.getValue())){
+                    item.setIsSort(1);
+                }
+            });
+            priorityList.addAll(rmsTaskPools);
+        }finally {
+            lock.unlock();
         }
     }
 
+
     public static void addSingeLiftTask(RmsTaskPool rmsTaskPool) throws Exception {
         if("net".equals(robotModel)){
             return;
@@ -426,19 +450,19 @@ public class ApiCache {
         }
     }
 
-    public static void addPriorityList(List<RmsTaskPool> rmsTaskPools){
-        lock.lock();
+    public static void addTopAgvList(RmsTaskPool rmsTaskPool){
+        topLock.lock();
         try{
-            priorityList.addAll(rmsTaskPools);
+            topAgvList.add(rmsTaskPool);
         }finally {
-            lock.unlock();
+            topLock.unlock();
         }
     }
 
-    public static void addTopAgvList(RmsTaskPool rmsTaskPool){
+    public static void addTopRailAgvList(RmsTaskPool rmsTaskPool){
         topLock.lock();
         try{
-            topAgvList.add(rmsTaskPool);
+            topRailAgvList.add(rmsTaskPool);
         }finally {
             topLock.unlock();
         }
@@ -511,7 +535,7 @@ public class ApiCache {
         lock.lock();
         try{
             List<RmsTaskPool> nList = priorityList.stream()
-                    .filter(item->item.getDeviceType().equals(DeviceTypeEnum.ROLLERAGV.getValue()+""))
+                    .filter(item->item.getDeviceType().equals(DeviceTypeEnum.ROLLER.getValue()+""))
                     .collect(Collectors.toList());
             priorityList.removeAll(nList);
             return nList;

+ 2 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmMaterialStockService.java

@@ -33,6 +33,8 @@ public interface IWmMaterialStockService
      * @return 库存记录集合
      */
     public List<WmMaterialStock> selectWmMaterialStockList(WmMaterialStock wmMaterialStock);
+
+    public List<WmMaterialStock> selectWmMaterialStockListNoLogin(WmMaterialStock wmMaterialStock);
     
     /**
      * 查询合并后的库存记录列表(按物料编码合并)

+ 6 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmMaterialStockServiceImpl.java

@@ -90,6 +90,12 @@ public class WmMaterialStockServiceImpl implements IWmMaterialStockService
     {
         return wmMaterialStockMapper.selectWmMaterialStockList(wmMaterialStock);
     }
+
+    @Override
+    public List<WmMaterialStock> selectWmMaterialStockListNoLogin(WmMaterialStock wmMaterialStock)
+    {
+        return wmMaterialStockMapper.selectWmMaterialStockList(wmMaterialStock);
+    }
     
     @Override
     @DataScope(deptAlias = "d", userAlias = "u")

+ 2 - 2
mes/ktg-mes/src/main/java/com/ktg/mes/wm/utils/MaterialStockTaskHelper.java

@@ -71,7 +71,7 @@ public class MaterialStockTaskHelper {
         //wmMaterialStock.setAreaCode(rmsBox.getAreaCode());
         //wmMaterialStock.setAreaId(rmsBox.getAreaId());
 
-        List<WmMaterialStock> wmMaterialStocks = wmMaterialStockService.selectWmMaterialStockList(wmMaterialStock);
+        List<WmMaterialStock> wmMaterialStocks = wmMaterialStockService.selectWmMaterialStockListNoLogin(wmMaterialStock);
         if(TaskTypeEnum.PULL.getValue().equals(rmsTaskPool.getTaskType())){
             boolean isStockEnough = true;
             BigDecimal remainingQty = BigDecimal.ZERO;
@@ -171,7 +171,7 @@ public class MaterialStockTaskHelper {
         log.info("查记录:" + JSONUtil.toJsonStr(wmMaterialStock));
         log.info("库存记录:" + JSONUtil.toJsonStr(wmMaterialStocks));
         try {
-            List<WmMaterialStock> nWmMaterialStocks = wmMaterialStockService.selectWmMaterialStockList(wmMaterialStock);
+            List<WmMaterialStock> nWmMaterialStocks = wmMaterialStockService.selectWmMaterialStockListNoLogin(wmMaterialStock);
             for (WmMaterialStock materialStock : wmMaterialStocks) {
                 WmMaterialStock nWmMaterialStock = getNewMaterialStock(nWmMaterialStocks, materialStock.getMaterialStockId());
                 RmsTaskStockLog rmsTaskStockLog = new RmsTaskStockLog();