zhangchao
2024-09-07 326284994ae0730ecb6b876bded39dec1d10c00d
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -91,17 +91,17 @@
    @Value("${wms.url}")
    private String wmsUrl;
    private Short getWorkMode(Integer bay) {
        if (bay == 2 || bay == 7) {
    private Short getWorkMode(Short locType1, Integer bay) {
        if (locType1 == 2) {
            return (short) 3;
        } else if (bay == 3) {
            return (short) 2;
        } else if (bay == 4) {
            return (short) 2;
        } else if (bay == 5) {
            return (short) 1;
        } else if (locType1 == 5) {
            return (short) 3;
        } else {
            return (short) 0;
            if (bay == 5) {
                return (short) 1;
            } else {
                return (short) 2;
            }
        }
    }
@@ -224,29 +224,39 @@
                    }
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                    //过滤判断,防止拣料再入库货物,经过入库站再入库时,被退回到退库站
                    WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode);
                    if (wrkMast1 != null) {
                        if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104) {
                    WrkMast wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode);
                    if (wrkMast != null && wrkMast.getWrkSts() == 2) {
                        int wrkNo1 = basDevpService.count(new QueryWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo()));
                        if (wrkNo1 != 0) {
                            News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast.getWrkNo());
                            if (ledThread != null) {
                                News.error(":扫码失败,请重试");
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号=" + wrkMast.getWrkNo()));
                            }
                            continue;
                        }
                    }
                    if (wrkMast != null) {
                        News.error("" + mark + " - 4" + " - 工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo());
                        staProtocol.setWorkNo((short) 9999);
                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                        barcodeThread.setBarcode("");
                        staProtocol.setWorkNo(Short.parseShort(wrkMast.getWrkNo() + ""));
                        staProtocol.setStaNo(Short.parseShort(wrkMast.getStaNo() + ""));
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.info("输送线下发(存在设备上走的工作档,直接下发!)):" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
                        ledThread.errorReset();
                        log.info("组托请求后LED错误清除");
                        if (!result) {
                            throw new CoolException("更新plc站点信息失败");
                            News.error(":更新plc站点信息失败");
                            log.error("输送线下发(存在设备上走的工作档,直接下发!)==>更新plc站点信息失败");
//                            throw new CoolException("更新plc站点信息失败");
                            continue;
                        }
                        // led 异常显示
                        if (ledThread != null) {
                            String errorMsg = "工作档已存在该条码号===>>" + barcode;
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                        }
                    }
                    WrkMast checkPick = wrkMastMapper.selectOne(new QueryWrapper<WrkMast>()
                            .eq("barcode", barcode)
                            .in("io_type", 107, 103, 57));
                    if (!Cools.isEmpty(checkPick)) {
                        continue;
                    }
@@ -489,10 +499,16 @@
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                    // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                    if (wrkMast == null) {
                        // 无拣料数据
                        continue;
                        WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode);
                        if (!(wrkMast1 != null && wrkMast1.getWrkSts() == 2 && wrkMast1.getIoType() == 53)) {
                            // 无拣料数据
                            continue;
                        } else {
                            wrkMast1.setIoType(103);
                            wrkMast = wrkMast1;
                        }
                    }
                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                        continue;
@@ -508,6 +524,7 @@
//                        log.error("{}号任务数据异常!", wrkMast.getWrkNo());
//                    }
                    // 获取目标站
                    Wrapper<StaDesc> wrapper = new QueryWrapper<StaDesc>().eq("type_no", wrkMast.getIoType() - 50).eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站
                            .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
                    StaDesc staDesc = staDescService.getOne(wrapper);
@@ -646,7 +663,7 @@
                                crnThread.setResetFlag(true);
                            } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) {
                                crnThread.setResetFlagTwo(true);
                            } else {
                            } else if (statusTypeTwo == CrnStatusType.WAITING_All) {
                                crnThread.setResetFlag(true);
                                crnThread.setResetFlagTwo(true);
                            }
@@ -803,8 +820,7 @@
                flag = true;
            }
            if (!flag) {
                //TODO
                News.error("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                continue;
            }
            // 获取工作状态为2(设备上走)的入库工作档
@@ -883,7 +899,7 @@
            CrnCommand crnCommand = new CrnCommand();
            crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
            crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
            Short workMode = getWorkMode(locMast.getBay1());
            Short workMode = getWorkMode(locMast.getLocType1(), locMast.getBay1());
            if (workMode == 2) {
                //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位
                crnCommand.setTaskMode(CrnTaskModeType.PAKOUT);
@@ -1055,12 +1071,13 @@
                    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());
                    String locNo = sourceSta.getLocNo();
                    // 获取目标库位信息
                    LocMast sta = locMastService.getById(sourceSta.getLocNo());
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                    Short workMode = getWorkMode(sourceSta.getBay1());
                    Short workMode = getWorkMode(sta.getLocType1(), sourceSta.getBay1());
                    if (workMode == 2) {
                        //CrnTaskModeType该枚举类无效,只有1代表工位,2代表工位2,3双工位
                        crnCommand.setTaskMode(CrnTaskModeType.PAKOUT);
@@ -1268,10 +1285,11 @@
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
        Short workMode = getWorkMode(sourceSta.getBay1());
        Short workMode = getWorkMode(sta.getLocType1(), sourceSta.getBay1());
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
        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());     // 源库位层
@@ -1329,8 +1347,38 @@
            //  状态:等待确认 并且  任务完成位 = 1
            if (wait && crnProtocol.getTaskNo() != 0) {
                News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作");
                if (crnProtocol.getTaskNo() == 9999) {
//                if (crnProtocol.getTaskNo() == 9999) {
//                    // 堆垛机复位
//                    if (statusType == CrnStatusType.WAITING_ONE) {
//                        crnThread.setResetFlag(true);
//                    } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) {
//                        crnThread.setResetFlagTwo(true);
//                    } else {
//                        crnThread.setResetFlag(true);
//                        crnThread.setResetFlagTwo(true);
//                    }
//                } else {
                // 获取入库待确认工作档
                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                if (wrkMast == null) {
                    News.error("" + mark + " - 1" + " - 堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo());
                    continue;
                }
                // 入库 + 库位转移  ==> 4.入库完成
                if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
                    wrkMast.setWrkSts(4L);
                } else {
                    //TODO
                    News.info("状态不对,状态={},工作号={}", wrkMast.getWrkSts(), crnProtocol.getTaskNo());
                    continue;
                }
                Date now = new Date();
                wrkMast.setCrnEndTime(now);
                wrkMast.setModiTime(now);
                // 修改成功后复位堆垛机
                if (wrkMastMapper.updateById(wrkMast) > 0) {
                    // 堆垛机复位
                    News.info("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                    if (statusType == CrnStatusType.WAITING_ONE) {
                        crnThread.setResetFlag(true);
                    } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) {
@@ -1340,39 +1388,11 @@
                        crnThread.setResetFlagTwo(true);
                    }
                } else {
                    // 获取入库待确认工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                    if (wrkMast == null) {
                        News.error("" + mark + " - 1" + " - 堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo());
                        continue;
                    }
                    // 入库 + 库位转移  ==> 4.入库完成
                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
                        wrkMast.setWrkSts(4L);
                    } else {
                        continue;
                    }
                    Date now = new Date();
                    wrkMast.setCrnEndTime(now);
                    wrkMast.setModiTime(now);
                    // 修改成功后复位堆垛机
                    if (wrkMastMapper.updateById(wrkMast) > 0) {
                        // 堆垛机复位
                        News.info("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                        if (statusType == CrnStatusType.WAITING_ONE) {
                            crnThread.setResetFlag(true);
                        } else if (statusTypeTwo == CrnStatusType.WAITING_TWO) {
                            crnThread.setResetFlagTwo(true);
                        } else {
                            crnThread.setResetFlag(true);
                            crnThread.setResetFlagTwo(true);
                        }
                    } else {
                        News.error("" + mark + " - 2" + " - 修改成功后复位堆垛机 失败!!,堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                    }
                    News.error("" + mark + " - 2" + " - 修改成功后复位堆垛机 失败!!,堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                }
            }
            //}
        }
        News.infoNoLog("" + mark + " - 0" + " - 对工作档的完成操作执行完成");
    }
@@ -1918,7 +1938,7 @@
            LocMast loc = null;
            for (Integer row : rows) {
                if (Utils.isDeepLoc(slaveProperties, row)) {
                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1(), shallowLoc.getLocType2());
                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getBay1(), shallowLoc.getLocType1(), shallowLoc.getLocType2());
                    if (loc != null) {
                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
                            String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
@@ -1930,25 +1950,25 @@
                    }
                    if (null != loc) {
                        //调整的原因:双工位的情况,5列,只能2号工位取放,34列,只能工位1取放
                        if (shallowLoc.getLocType1() == 1) {
                            if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) {
                                break;
                            } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) {
                                if (loc.getBay1() == 3 || loc.getBay1() == 4) {
                                    break;
                                }
                            }
                            loc = null;
                        } else {
                            break;
                        }
//                        if (shallowLoc.getLocType1() == 1) {
//                            if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) {
//                                break;
//                            } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) {
//                                if (loc.getBay1() == 3 || loc.getBay1() == 4) {
//                                    break;
//                                }
//                            }
//                            loc = null;
//                        } else {
                        break;
                        // }
                    }
                }
            }
            if (null == loc) {
                for (Integer row : rows) {
                    if (Utils.isShallowLoc(slaveProperties, row)) {
                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1(), shallowLoc.getLocType2());
                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getBay1(), shallowLoc.getLocType1(), shallowLoc.getLocType2());
                        if (null != loc) {//对应深库位非在库状态,不能移库
                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
@@ -1959,19 +1979,19 @@
                        }
                        if (null != loc) {
                            //调整的原因:双工位的情况,5列,只能2号工位取放,34列,只能工位1取放
                            if (shallowLoc.getLocType1() == 1) {
                                if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) {
                                    break;
                                } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) {
                                    if (loc.getBay1() == 3 || loc.getBay1() == 4) {
                                        break;
                                    }
                                }
                                loc = null;
                            } else {
                                break;
                            }
//                            //调整的原因:双工位的情况,5列,只能2号工位取放,34列,只能工位1取放
//                            if (shallowLoc.getLocType1() == 1) {
//                                if (shallowLoc.getBay1() == 5 && loc.getBay1() == 5) {
//                                    break;
//                                } else if (shallowLoc.getBay1() == 3 || shallowLoc.getBay1() == 4) {
//                                    if (loc.getBay1() == 3 || loc.getBay1() == 4) {
//                                        break;
//                                    }
//                                }
//                                loc = null;
//                            } else {
                            break;
                            // }
                        }
                    }
                }