自动化立体仓库 - WCS系统
#
Junjie
2023-11-14 dd91c85493463db1968e6e7a61c841d20f948cf6
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -634,7 +634,7 @@
     */
    public synchronized void initRealtimeBasMap() {
        for (int i = 1; i <= 10; i++) {//总共四层楼
            Object data = redisUtil.get("realtimeBasMap_" + i);
            Object data = redisUtil.get(RedisKeyType.MAP.key + i);
            if (data == null) {//redis地图数据为空,从数据库中获取
                BasMap basMap = basMapService.selectLatestMap(i);
                if (basMap == null) {
@@ -656,7 +656,7 @@
                }
                //将数据库地图数据存入redis
                redisUtil.set("realtimeBasMap_" + i, JSON.toJSONString(basMap));
                redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
            }
        }
    }
@@ -667,7 +667,7 @@
    public synchronized void restartTaskFromRedis() {
        HashMap<Object, Object> map = redisUtil.getRedis();
        for (Object key : map.keySet()) {
            if (key.toString().contains("lift_wrk_no_")) {//提升机任务
            if (key.toString().contains(RedisKeyType.LIFT.key)) {//提升机任务
                LiftRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), LiftRedisCommand.class);
                if (redisCommand == null) {
                    continue;
@@ -690,7 +690,7 @@
                liftProtocol.setTaskNo(redisCommand.getWrkNo());//将提升机线程分配任务号
                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//工作状态
            }else if(key.toString().contains("shuttle_wrk_no_")){//四向穿梭车任务
            }else if(key.toString().contains(RedisKeyType.SHUTTLE.key)){//四向穿梭车任务
                ShuttleRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), ShuttleRedisCommand.class);
                if (redisCommand == null) {
                    continue;
@@ -1213,7 +1213,7 @@
            //获取提升机命令
            NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
            if (wrkMast.getIoType() == 53) {
            if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
                //拣料再回库,重新分配设备工作号
                Random random = new Random();
                int deviceWrk = Math.abs((liftCommand.getTaskNo().intValue() + random.nextInt(9999)));//获取设备工作号
@@ -2287,6 +2287,40 @@
        return false;
    }
    /**
     * AGV补货(悬挂线通知AGV取货)
     */
    public void agvRestockIntoByHangingWire() {
        //检测350和351扫码器
        int[] barcodeStaNo = {11, 12};//11 => 350站扫码器,12 => 351站扫码器
        for (int staNo : barcodeStaNo) {
            // 获取条码扫描仪信息
            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
            if (barcodeThread == null) {
                continue;
            }
            String barcode = barcodeThread.getBarcode();
            if(!Cools.isEmpty(barcode)) {
                if (barcode.contains("NoRead")) {
                    continue;
                }
                String agvStaNo = null;
                if (staNo == 11) {
                    agvStaNo = "303-1";
                }else {
                    agvStaNo = "304-1";
                }
                //通知AGV取货
                boolean result = agvRestockCall(agvStaNo, barcode);
                if (result) {
                    barcodeThread.setBarcode("");
                }
                log.info(barcodeThread.getSlave().getId() + "号扫码器,通知AGV取货,条码号:" + barcode);
            }
        }
    }
    // 300站拣料
    public void pick300() {
        //检测300站是否自动、有物、工作号
@@ -2384,8 +2418,64 @@
                ledCommand.setLocNo(wrkMast.getLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getSpecs())));
                    //for (WrkDetl wrkDetl : wrkDetls) {
                    //    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
                    //
                    //    locDetls.forEach(locDetl1 -> {
                    //        //工作档中存在该物料则跳过
                    //        String suppCode = "";
                    //
                    //        if (wrkDetl.getMatnr().equals(locDetl1.getMatnr())) {
                    //            Double anfme = 0D;
                    //            if (locDetl != null) {
                    //                anfme = locDetl.getAnfme();
                    //            }
                    //            if (wrkDetl.getSuppCode() != null) {
                    //                suppCode = wrkDetl.getSuppCode();
                    //            }
                    //            ledCommand.getMatDtos()
                    //                    .add(new MatDto(wrkDetl.getMatnr()
                    //                            , wrkDetl.getMaktx()
                    //                            , wrkDetl.getAnfme()
                    //                            , (wrkDetl.getAnfme()-anfme)
                    //                            , wrkDetl.getSpecs()
                    //                            , suppCode));
                    //        } else {
                    //            if (locDetl1.getSuppCode() != null) {
                    //                suppCode = locDetl1.getSuppCode();
                    //            }
                    //            ledCommand.getMatDtos()
                    //                    .add(new MatDto(locDetl1.getMatnr()
                    //                            , locDetl1.getMaktx()
                    //                            , 0D
                    //                            , locDetl1.getAnfme()
                    //                            , locDetl1.getSpecs()
                    //                            , suppCode));
                    //        }
                    //    });
                    //    //LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
                    //}
                    List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
                    locDetls.forEach(locDetl -> {
                        Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no",wrkMast.getWrkNo());
                        Utils.wapperSetCondition(wrapper,"batch",locDetl.getBatch());
                        Utils.wapperSetCondition(wrapper,"three_code",locDetl.getThreeCode());
                        Utils.wapperSetCondition(wrapper,"dead_time",locDetl.getDeadTime());
                        WrkDetl detl = wrkDetlService.selectOne(wrapper);
                        if (Cools.isEmpty(detl)) {
                            String suppCode = "";
                            if (locDetl.getSuppCode() != null) {
                                suppCode = locDetl.getSuppCode();
                            }
                            ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode));
                        } else {
                            String suppCode = "";
                            if (detl.getSuppCode() != null) {
                                suppCode = detl.getSuppCode();
                            }
                            ledCommand.getMatDtos().add(new MatDto(detl.getMatnr(), detl.getMaktx(), detl.getAnfme(), (locDetl.getAnfme() - detl.getAnfme()), detl.getSpecs(), suppCode));
                        }
                    });
                }
                commands.add(ledCommand);
            }
@@ -2431,35 +2521,36 @@
     * 其他  ===>> LED显示器复位,显示默认信息
     */
    public void ledReset() {
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
            // 命令集合
            boolean reset = true;
            for (Integer staNo : led.getStaArr()) {
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) {
                    continue;
                }
                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
                    reset = false;
                    break;
                }
            }
            // 获取led线程
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // led显示默认内容
            if (reset && !ledThread.isLedMk()) {
                ledThread.setLedMk(true);
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
                    News.error(" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                } else {
                }
            }
        }
//        for (LedSlave led : slaveProperties.getLed()) {
//
//            // 获取输送线plc线程
//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
//            // 命令集合
//            boolean reset = true;
//            for (Integer staNo : led.getStaArr()) {
//                // 获取叉车站点
//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
//                if (staProtocol == null) {
//                    continue;
//                }
//                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
//                    reset = false;
//                    break;
//                }
//            }
//            // 获取led线程
//            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
//            // led显示默认内容
//            if (reset && !ledThread.isLedMk()) {
//                ledThread.setLedMk(true);
//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
//                    News.error(" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                } else {
//                    News.error("{}号LED命令下发成功!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                    ledThread.setLedMk(false);
//                }
//            }
//        }
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -2478,9 +2569,13 @@
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // led显示默认内容
            if (reset && !ledThread.isLedMk()) {
                ledThread.setLedMk(true);
                ledThread.setLedMk(false);
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                    News.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                }else {
//                    News.error("{}号LED命令下发成功!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()));
                    ledThread.setLedMk(false);
                }
            }
        }