123
ZY
2025-05-14 ce641926a957d238b202aa0d9dac3b8f15aff153
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -270,7 +270,7 @@
                        param.setLocType1(locTypeDto.getLocType1());
                        if (inSta.getStaNo() == 102) {
                            param.setLocType2((short) 3);
                        } else if (inSta.getStaNo() == 211) {
                        } else if (inSta.getStaNo() == 211 || inSta.getStaNo() == 104) {
                            param.setLocType1((short) 5);
                            param.setLocType2((short) 4);
                        } else if (inSta.getStaNo() == 201) {
@@ -310,16 +310,17 @@
                            staProtocol.setWorkNo((short) 9999);
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            if (!result) {
                                throw new CoolException("更新plc站点信息失败");
                            }
                            // led 异常显示
                            if (ledThread != null) {
                                String errorMsg = jsonObject.getString("msg");
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                            }
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            if (!result) {
                                throw new CoolException("更新plc站点信息失败");
                            }
                        }
                    } catch (Exception e) {
@@ -417,10 +418,20 @@
                    staProtocol = staProtocol.clone();
                }
                if (barcodeThread == null) {
                String barcode = "";
                if (barcodeThread == null && staProtocol.getSiteId() != 104) {
                    continue;
                } else if (staProtocol.getSiteId() == 104) {
                    if (staProtocol.getWorkNo() == 9996) {
                        // 获取到拣料任务的托盘码
                        WrkMast wrkMast = wrkMastMapper.selectOne(new QueryWrapper<WrkMast>().eq("wrk_sts", 14).eq("io_type", 103).eq("source_sta_no", 104));
                        if (wrkMast != null) {
                            barcode = wrkMast.getBarcode();
                        }
                    }
                } else {
                    barcode = barcodeThread.getBarcode();
                }
                String barcode = barcodeThread.getBarcode();
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
@@ -530,7 +541,7 @@
                    StaDesc staDesc = staDescService.getOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
                        News.error("" + mark + " - 2" + " - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
                        staProtocol.setWorkNo((short) 9989);
                        staProtocol.setWorkNo((short) 9999);
                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1));
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -879,7 +890,7 @@
                        wrkMast.setIoPri(14D);
                        wrkMastMapper.updateById(wrkMast);
                        // 生成工作档,将浅库位移转到新的库位中
                        moveLocForDeepLoc(slave, shallowLoc, mark);
                        moveLocForDeepLoc(slave, shallowLoc, mark, wrkMast.getTenant());
                        // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行)
//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                    }
@@ -909,6 +920,9 @@
                crnCommand.setDestinationPosXTwo(locMast.getRow1().shortValue());     // 目标库位排
                crnCommand.setDestinationPosYTwo(locMast.getBay1().shortValue());     // 目标库位列
                crnCommand.setDestinationPosZTwo(locMast.getLev1().shortValue());     // 目标库位层
                if (crnStn.getStaNo() == 202) {
                    crnCommand.setSourcePosYTwo((short) 6);     // 源库位列
                }
            } else {
                if (workMode == 1) {
                    crnCommand.setTaskMode(CrnTaskModeType.PAKIN);
@@ -921,6 +935,9 @@
                crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排
                crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
                crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
                if (workMode == 1 && crnStn.getStaNo() == 202) {
                    crnCommand.setSourcePosY((short) 6);     // 源库位列
                }
            }
//            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
@@ -1048,7 +1065,7 @@
                                wrkMast.setUpdMk("Y");
                                wrkMastMapper.updateById(wrkMast);
                                // 生成工作档,将浅库位移转到新的库位中
                                moveLocForDeepLoc(slave, shallowLoc, mark);
                                moveLocForDeepLoc(slave, shallowLoc, mark, wrkMast.getTenant());
                            }
                            News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
                            continue;
@@ -1087,6 +1104,9 @@
                        crnCommand.setDestinationPosXTwo(crnStn.getRow().shortValue());     // 目标库位排
                        crnCommand.setDestinationPosYTwo(crnStn.getBay().shortValue());     // 目标库位列
                        crnCommand.setDestinationPosZTwo(crnStn.getLev().shortValue());     // 目标库位层
                        if (crnStn.getStaNo() == 202) {
                            crnCommand.setDestinationPosYTwo((short) 6);     // 源库位列
                        }
                    } else {
                        if (workMode == 1) {
                            crnCommand.setTaskMode(CrnTaskModeType.PAKIN);
@@ -1099,6 +1119,9 @@
                        crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                        crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                        crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                        if (workMode == 1 && crnStn.getStaNo() == 202) {
                            crnCommand.setDestinationPosY((short) 6);     // 源库位列
                        }
                    }
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
@@ -1539,10 +1562,10 @@
                    staProtocol = staProtocol.clone();
                }
                if (barcodeThread == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
//                if (barcodeThread == null) {
//                    continue;
//                }
//                String barcode = barcodeThread.getBarcode();
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
@@ -1583,9 +1606,9 @@
                    if (!staProtocol.isLoading()) {
                        continue;
                    }
                    if (!staProtocol.isPakMk()) {
                        continue;
                    }
//                    if (!staProtocol.isPakMk()) {
//                        continue;
//                    }
                    staProtocol.setWorkNo((short) 9999);
                    News.info("{}入库回退:{},任务号:{}", emptyInSta.getStaNo(), errMsg, (short) 9999);
                    staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
@@ -1617,7 +1640,7 @@
                        param.setLocType1(locTypeDto.getLocType1());
                        if (emptyInSta.getStaNo() == 102) {
                            param.setLocType2((short) 3);
                        } else if (emptyInSta.getStaNo() == 211) {
                        } else if (emptyInSta.getStaNo() == 211 || emptyInSta.getStaNo() == 104) {
                            param.setLocType1((short) 5);
                            param.setLocType2((short) 4);
                        } else if (emptyInSta.getStaNo() == 201) {
@@ -1930,7 +1953,7 @@
     * 因双深库位阻塞,对浅库位进行移转(立即执行版)
     * tip:同步
     */
    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc, Integer mark) {
    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc, Integer mark, Long tenant) {
        try {
            News.warnNoLog("" + mark + "moveLocForDeepLoc" + " - 0" + " - 开始执行:因双深库位阻塞,对浅库位进行移转(立即执行版)");
@@ -2014,7 +2037,7 @@
            wrkMast.setCrnNo(crn.getId());
            wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位
            wrkMast.setLocNo(loc.getLocNo()); // 目标库位
            wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 满板
            wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 满板
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
            wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板
@@ -2022,6 +2045,7 @@
            wrkMast.setLinkMis("N");
            wrkMast.setAppeTime(new Date());
            wrkMast.setModiTime(new Date());
            wrkMast.setTenant(tenant);
            int res = wrkMastMapper.insert(wrkMast);
            if (res == 0) {
                News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 保存工作档失败");
@@ -2038,6 +2062,7 @@
                    VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制
                    wrkDetl.setAppeTime(new Date());
                    wrkDetl.setModiTime(new Date());
                    wrkDetl.setTenant(tenant);
                    if (!wrkDetlService.save(wrkDetl)) {
                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 保存工作档明细失败");
                        throw new CoolException("保存工作档明细失败");
@@ -2305,7 +2330,7 @@
    public synchronized void autoEmptyOut() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        Integer autoOutSite = 12;
        Integer autoOutSite = 103;
        //如果站点可出禁用,则不生成空盘出库任务
        StaProtocol staProtocol = devpThread.getStation().get(autoOutSite);
        if (staProtocol == null) {
@@ -2315,32 +2340,27 @@
        }
        if (staProtocol.isAutoing()  //自动
                && !staProtocol.isLoading()  //无物
                && staProtocol.isOutEnable()  //可出信号
//                && staProtocol.isOutEnable()  //可出信号
                && staProtocol.getWorkNo() == 0) {
            WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite);
            if (null != pakoutEmpty) {
                return;
//            WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(autoOutSite);
//            if (null != pakoutEmpty) {
//                return;
//            }
            LocMast byId = locMastService.getById("0200405");
            if (byId != null&&byId.getLocSts().equalsIgnoreCase("D")){
            }
            try {
                String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyOut/v1").build().doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    JSONObject data = (JSONObject) jsonObject.get("data");
                    News.info((String) data.get("msg"));
                } else {
                    News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyOut/v1", "", response);
                }
            } catch (Exception e) {
                e.printStackTrace();
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            }
        }
    }
    @Autowired
    private WrkMastService wrkMastService;
    public synchronized void autoEmptyIn() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        Integer autoInSite = 12;
        StaProtocol staProtocol = devpThread.getStation().get(autoInSite);
        StaProtocol staProtocol = devpThread.getStation().get(103);
        if (staProtocol == null) {
            return;
        } else {
@@ -2348,20 +2368,44 @@
        }
        if (staProtocol.isAutoing()  //自动
                && staProtocol.isLoading()  //有物
                && staProtocol.isInEnable()  //可入信号
//                && staProtocol.isInEnable()  //可入信号
                && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() >= 9990) //工作号为0或者工作号是9991~9999(输送机留用)
        ) {
            try {
                LocTypeDto locTypeDto = new LocTypeDto((short) 1, (short) 1, (short) 1);
                Date now = new Date();
                // 生成工作档
                WrkMast wrkMast = new WrkMast();
                int workNo = commonService.getWorkNo(0);
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(2L);
                wrkMast.setIoPri(13D);
                wrkMast.setIoType(10);
                wrkMast.setCrnNo(1);
                wrkMast.setSourceStaNo(101);
                wrkMast.setStaNo(103);
                wrkMast.setLocNo("0200405");
                wrkMast.setFullPlt("N"); // 满板:N
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("Y"); // 空板
                wrkMast.setLinkMis("Y");
                // 操作人员数据
                wrkMast.setAppeTime(now);
                wrkMast.setModiTime(now);
                wrkMast.setMemo("自动空托入库");
                boolean res = wrkMastService.save(wrkMast);
                String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyIn/v1").setJson(JSON.toJSONString(locTypeDto)).build().doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    News.info((String) jsonObject.get("msg"));
                } else {
                    News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response);
                // 更新目标库位状态
                LocMast locMast = locMastService.getById("0200405");
                if (locMast.getLocSts().equals("O")) {
                    locMast.setLocSts("S"); // S.入库预约
                    locMast.setModiUser(789L);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("改变库位状态失败");
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();