dubin
2 天以前 a3991c24aa69d18cad0195c28fa80abe2871bbd2
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -216,7 +216,7 @@
                        }
                        continue;
                    }
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).in("io_type", 107, 103, 57));
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).in("io_type", 107, 103, 57 ,104));
                    if (!Cools.isEmpty(checkPick)) {
                        continue;
                    }
@@ -500,6 +500,7 @@
                        wrkMast.setStaNo(staNo); // 目标站
                        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位
                        wrkMast.setSourceLocNo(""); // 源库位清空
                        wrkMast.setPltType(0);// 盘点/拣料工位号置0
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            throw new CoolException("更新工作档数据状态失败");
@@ -854,6 +855,7 @@
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) {
                News.warnNoLog("" + mark + " - 0" + " - 开始执行堆垛机入出库作业下发");
                if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 0) {
                    News.error("工位1无物,工位2无物");
                    //堆垛机没有物料
                    // 如果最近一次是入库模式
                    if (crnProtocol.getLastIo().equals("I")) {
@@ -879,11 +881,12 @@
                    }
                } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) {
                    News.error("工位1有物,工位2有物");
                    // 堆垛机有物料
                    WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
                    if (wrkMast != null) {
                        if (wrkMast.getIoType() >= 100) {
                            this.outPut(crn, crnProtocol, mark);
                            this.outPutAll(crn, crnProtocol, mark);
                        } else {
                            this.inPut(crn, crnProtocol, mark);
                        }
@@ -891,6 +894,7 @@
                        log.error("" + mark + " - 1" + " - 有物料无工作档  ===》异常");
                    }
                } else if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 0) {
                    News.error("工位1有物,工位2无物");
                    // 堆垛机工位1有物料
                    WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
                    if (wrkMast != null) {
@@ -915,6 +919,7 @@
                        log.error("" + mark + " - 1" + " - 有物料无工作档  ===》异常");
                    }
                } else if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 1) {
                    News.error("工位1无物,工位2有物");
                    // 堆垛机工位2有物料
                    WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 2);
                    if (wrkMast != null) {
@@ -1019,7 +1024,7 @@
            }
            // 堆垛机控制过滤
            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0 || crnProtocol.getTaskNoTwo() != 0) {
//                News.infoNoLog(""+mark+" - 1"+" - 7"+" - 堆垛机控制过滤:堆垛机是否空闲={},任务号={}", crnProtocol.getStatusType(),crnProtocol.getTaskNo());
                continue;
            }
@@ -2089,7 +2094,9 @@
                } else if (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11) {
                    wrkMast.setWrkSts(4L);
                    wrkMast.setPltType(0);
                } else {
                }else if (wrkMast.getWrkSts() == 108){
                    crnThread.setResetFlag(true);
                }else {
                    continue;
                }
                Date now = new Date();
@@ -2128,6 +2135,8 @@
                } else if (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11) {
                    wrkMast.setWrkSts(4L);
                    wrkMast.setPltType(0);
                }else if (wrkMast.getWrkSts() == 108){
                    crnThread.setResetFlag(true);
                } else {
                    continue;
                }
@@ -2145,7 +2154,7 @@
        }
//        News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成");
        News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成");
    }
    /**
@@ -2440,6 +2449,9 @@
                    case 53:
                        ledCommand.setTitle("拣料再入库");
                        break;
                    case 54:
                        ledCommand.setTitle("并板再入库");
                        break;
                    case 57:
                        ledCommand.setTitle("盘点再入库");
                        break;
@@ -2478,10 +2490,13 @@
                        } else {
                            total = locDetl.getAnfme();
                        }
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57 || wrkMast.getIoType() == 54) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(), wrkDetl.getOutOrderNo(), wrkDetl.getUnit(), wrkDetl.getWeight(), wrkDetl.getSupp(), wrkDetl.getLength(), wrkDetl.getTemp1(), wrkDetl.getProType(), wrkDetl.getAnfme(), wrkDetl.getTemp2(), total));
                        }
                        if (wrkMast.getIoType() == 103) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(), wrkDetl.getOutOrderNo(), wrkDetl.getUnit(), wrkDetl.getWeight(), wrkDetl.getSupp(), wrkDetl.getLength(), wrkDetl.getTemp1(), wrkDetl.getProType(), wrkDetl.getAnfme(), wrkDetl.getTemp2(), total));
                        }
                        if (wrkMast.getIoType() == 104) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getOrderNo(), wrkDetl.getOutOrderNo(), wrkDetl.getUnit(), wrkDetl.getWeight(), wrkDetl.getSupp(), wrkDetl.getLength(), wrkDetl.getTemp1(), wrkDetl.getProType(), wrkDetl.getAnfme(), wrkDetl.getTemp2(), total));
                        }
                        if (wrkMast.getIoType() == 107) {
@@ -2555,7 +2570,7 @@
                    continue;
                }
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                    News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                    News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                }
            }
        }
@@ -3779,8 +3794,8 @@
                continue;
            }
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
                if (crnProtocol.getCrnNo() == 1 && crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) {
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getStatusTypeTwo()== CrnStatusType.IDLE) {
                if (crnProtocol.getCrnNo() == 1 && crnProtocol.getBay() == 11 && crnProtocol.getLevel() == 1) {
                    continue;
                }
                Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false));
@@ -3807,12 +3822,12 @@
                crnCommand.setTaskNo((short) 9999); // 工作号
                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
//                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  堆垛机移动
                crnCommand.setTaskMode(CrnTaskModeType.XY_MOVE);//余姚锐麒回原点任务模式:  站位转移
                crnCommand.setTaskMode(CrnTaskModeType.XY_MOVE);
                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                crnCommand.setSourcePosY((short) 1);     // 源库位列
                crnCommand.setSourcePosY((short) 11);     // 源库位列
                crnCommand.setSourcePosZ((short) 1);     // 源库位层
                crnCommand.setDestinationPosX((short) 0);     // 目标库位排
                crnCommand.setDestinationPosY((short) 14);     // 目标库位列
                crnCommand.setDestinationPosY((short) 0);     // 目标库位列
                crnCommand.setDestinationPosZ((short) 0);     // 目标库位层
                crnCommand.setCommand((short) 1);//任务确认位
                if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
@@ -3827,4 +3842,100 @@
            }
        }
    }
    /**
     * 工位1和工位2都有物 出库放货
     */
    public synchronized void outPutAll(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
        News.warnNoLog("" + mark + " - 2" + " - 0" + " - 堆垛机入出库作业下发:执行出库");
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep107(slave.getId(), crnStn.getStaNo());
            for (WrkMast wrkMast : wrkMasts) {
                if (wrkMast == null || wrkMast.getPltType() == 2) {
                    continue;
                }
                // 工作档状态判断
                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
                    News.error("" + mark + " - 2" + " - 1" + " - 查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType());
                    continue;
                }
                // 获取源库位信息
                LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
                if (!sourceSta.getLocSts().equals("R") && !sourceSta.getLocSts().equals("P")) {
                    News.error("" + mark + " - 2" + " - 2" + " - 出库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), sourceSta.getLocSts());
                    continue;
                }
                // 获取堆垛机出库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
                if (staProtocol == null) {
                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 堆垛机出库站信息(staProtocol!=null继续执行,否则循环终止):staProtocol=" + staProtocol);
                    break;
                } else {
                    staProtocol = staProtocol.clone();
                }
                // 查询站点详细信息
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    News.error("" + mark + " - 2" + " - 5" + " - 出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    break;
//                    continue;
                }
                // 判断堆垛机出库站状态
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                    // 命令下发区 --------------------------------------------------------------------------
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
                        break;
                    }
                    if (wrkMastMapper.selectByPltType(slave.getId(), wrkMast.getPltType()) == null) {
                        News.error("" + mark + " - 1" + " - 9" + " - 堆垛机改工位存在工作档,工位={}", wrkMast.getPltType());
                    }
                    // 已经存在吊车执行任务时,则过滤
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setPltType(wrkMast.getPltType());
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.PUT); // 任务模式:  库位移转
//                    crnCommand.setSourcePosX((short) (sourceSta.getRow1() + slave.getOffset()));     // 源库位排
//                    crnCommand.setSourcePosY((short) (sourceSta.getBay1() + slave.getOffset()));     // 源库位列
//                    crnCommand.setSourcePosZ((short) (sourceSta.getLev1() + slave.getOffset()));     // 源库位层
                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast.setWrkSts(108L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.error("" + mark + " - 2" + " - 14" + " - 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                        break;
                    }
                }
            }
        }
        News.infoNoLog("" + mark + " - 2" + " - 0" + " - 堆垛机入出库作业下发 : 出库执行完毕");
    }
}