zhangchao
2024-09-01 922a5f471a735a0ea231d30e45312f61d583e58d
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -100,7 +100,7 @@
            return (short) 2;
        } else if (bay == 5) {
            return (short) 1;
        }else {
        } else {
            return (short) 0;
        }
    }
@@ -116,10 +116,7 @@
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取条码扫描仪信息
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                if (barcodeThread == null) {
                    continue;
                }
                // 获取入库站信息
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                if (staProtocol == null) {
@@ -128,8 +125,66 @@
                    staProtocol = staProtocol.clone();
                }
                if (barcodeThread == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
                if (staProtocol.isFrontErr()) {
                    errMsg = "前超限";
                    back = true;
                }
                if (!back && staProtocol.isBackErr()) {
                    errMsg = "后超限";
                    back = true;
                }
                if (!back && staProtocol.isHighErr()) {
                    errMsg = "高超限";
                    back = true;
                }
                if (!back && staProtocol.isLeftErr()) {
                    errMsg = "左超限";
                    back = true;
                }
                if (!back && staProtocol.isRightErr()) {
                    errMsg = "右超限";
                    back = true;
                }
                if (!back && staProtocol.isWeightErr()) {
                    errMsg = "超重";
                    back = true;
                }
                if (!back && staProtocol.isBarcodeErr()) {
                    errMsg = "扫码失败";
                    back = true;
                }
                // 退回
                if (back) {
                    log.info("errmsg: " + errMsg);
//                        News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                    if (!staProtocol.isLoading()) {
                        continue;
                    }
                    if (!staProtocol.isPakMk()) {
                        continue;
                    }
                    staProtocol.setWorkNo((short) 9999);
                    News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg, (short) 9999);
                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.error("输送线下发1:" + 9999 + "," + inSta.getBackSta());
                }
                //LED
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                //LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                // 入出库模式判断
//                if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; }
//                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
@@ -165,7 +220,7 @@
//                        Thread.sleep(300);
//                    }catch (Exception e){}
                    String barcode = barcodeThread.getBarcode();
                    //String barcode = barcodeThread.getBarcode();
                    if (!Cools.isEmpty(barcode)) {
                        News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
@@ -565,7 +620,15 @@
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
                            crnThread.setResetFlag(true);
                            Short mode = crnProtocol.getMode();
                            if (mode == 1) {
                                crnThread.setResetFlag(true);
                            } else if (mode == 2) {
                                crnThread.setResetFlagTwo(true);
                            } else if (mode == 3) {
                                crnThread.setResetFlag(true);
                                crnThread.setResetFlagTwo(true);
                            }
                        } else {
                            News.error("" + mark + " - 1" + " - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo());
                        }
@@ -725,29 +788,26 @@
                flag = true;
            }
            if (!flag) {
                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):"
                //TODO
                News.error("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):"
                        + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading()
                        + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable()
                        + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                continue;
            }
            System.out.println("wrkMast:" + slave.getId() + "-" + staProtocol.getWorkNo().intValue() + "-" + crnStn.getStaNo());
            // 获取工作状态为2(设备上走)的入库工作档
            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
            System.out.println("wrkMast:" + wrkMast);
            if (null == wrkMast) {
                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 查询无待入库数据--wrk_sts=2, 工作号={}", staProtocol.getWorkNo());
//                log.error("查询无待入库数据--wrk_sts=2, 工作号={}", staProtocol.getWorkNo());
                continue;
            }
            System.out.println("566");
            // 获取库位信息
            LocMast locMast = locMastService.getById(wrkMast.getLocNo());
            if (locMast == null) {
                News.error("" + mark + " - 1" + " - 5" + " - 查询库存无数据--库位号{}", wrkMast.getLocNo());
                continue;
            }
            System.out.println("334");
            if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
                News.error("" + mark + " - 1" + " - 6" + " - 入库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), locMast.getLocSts());
                continue;
@@ -815,14 +875,32 @@
            CrnCommand crnCommand = new CrnCommand();
            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
            Short workMode = getWorkMode(locMast.getBay1());
            if (workMode == 2) {
                //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位
                crnCommand.setTaskMode(CrnTaskModeType.PAKOUT);
                crnCommand.setSourcePosXTwo(crnStn.getRow().shortValue());     // 源库位排
                crnCommand.setSourcePosYTwo(crnStn.getBay().shortValue());     // 源库位列
                crnCommand.setSourcePosZTwo(crnStn.getLev().shortValue());     // 源库位层
                crnCommand.setDestinationPosXTwo(locMast.getRow1().shortValue());     // 目标库位排
                crnCommand.setDestinationPosYTwo(locMast.getBay1().shortValue());     // 目标库位列
                crnCommand.setDestinationPosZTwo(locMast.getLev1().shortValue());     // 目标库位层
            } else {
                if (workMode == 1) {
                    crnCommand.setTaskMode(CrnTaskModeType.PAKIN);
                } else if (workMode == 3) {
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE);
                }
                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
                crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排
                crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
                crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
            }
//            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
            crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排
            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                News.error("" + mark + " - 1" + " - 16" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
@@ -978,14 +1056,30 @@
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
                    crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
                    crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                    crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                    crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                    Short workMode = getWorkMode(sourceSta.getBay1());
                    if (workMode == 2) {
                        //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位
                        crnCommand.setTaskMode(CrnTaskModeType.PAKOUT);
                        crnCommand.setSourcePosXTwo(sourceSta.getRow1().shortValue());     // 源库位排
                        crnCommand.setSourcePosYTwo(sourceSta.getBay1().shortValue());     // 源库位列
                        crnCommand.setSourcePosZTwo(sourceSta.getLev1().shortValue());     // 源库位层
                        crnCommand.setDestinationPosXTwo(crnStn.getRow().shortValue());     // 目标库位排
                        crnCommand.setDestinationPosYTwo(crnStn.getBay().shortValue());     // 目标库位列
                        crnCommand.setDestinationPosZTwo(crnStn.getLev().shortValue());     // 目标库位层
                    } else {
                        if (workMode == 1) {
                            crnCommand.setTaskMode(CrnTaskModeType.PAKIN);
                        } else if (workMode == 3) {
                            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE);
                        }
                        crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
                        crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
                        crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
                        crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                        crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                        crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                    }
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        News.error("" + mark + " - 2" + " - 13" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
@@ -1172,14 +1266,30 @@
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
        Short workMode = getWorkMode(sourceSta.getBay1());
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
        crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
        crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
        crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
        crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排
        crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列
        crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层
        if (workMode == 2) {
            //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位
            crnCommand.setSourcePosXTwo(sourceSta.getRow1().shortValue());     // 源库位排
            crnCommand.setSourcePosYTwo(sourceSta.getBay1().shortValue());     // 源库位列
            crnCommand.setSourcePosZTwo(sourceSta.getLev1().shortValue());     // 源库位层
            crnCommand.setDestinationPosXTwo(sta.getRow1().shortValue());     // 目标库位排
            crnCommand.setDestinationPosYTwo(sta.getBay1().shortValue());     // 目标库位列
            crnCommand.setDestinationPosZTwo(sta.getLev1().shortValue());     // 目标库位层
        } else {
            if (workMode == 1) {
                crnCommand.setTaskMode(CrnTaskModeType.PAKIN);
            } else if (workMode == 3) {
                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE);
            }
            crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
            crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
            crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
            crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排
            crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列
            crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层
        }
        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
            News.error("" + mark + " - 3" + " - 4" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
        } else {
@@ -1210,10 +1320,18 @@
            }
            //  状态:等待确认 并且  任务完成位 = 1
            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作");
                News.warn("" + mark + " - 0" + " - 开始执行对工作档的完成操作");
                if (crnProtocol.getTaskNo() == 9999) {
                    // 堆垛机复位
                    crnThread.setResetFlag(true);
                    Short mode = crnProtocol.getMode();
                    if (mode == 1) {
                        crnThread.setResetFlag(true);
                    } else if (mode == 2) {
                        crnThread.setResetFlagTwo(true);
                    } else if (mode == 3) {
                        crnThread.setResetFlag(true);
                        crnThread.setResetFlagTwo(true);
                    }
                } else {
                    // 获取入库待确认工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
@@ -1234,7 +1352,15 @@
                    if (wrkMastMapper.updateById(wrkMast) > 0) {
                        // 堆垛机复位
                        News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                        crnThread.setResetFlag(true);
                        Short mode = crnProtocol.getMode();
                        if (mode == 1) {
                            crnThread.setResetFlag(true);
                        } else if (mode == 2) {
                            crnThread.setResetFlagTwo(true);
                        } else if (mode == 3) {
                            crnThread.setResetFlag(true);
                            crnThread.setResetFlagTwo(true);
                        }
                    }
                }