pjb
2025-07-21 4ba63e6424b4091ec74a74d4562cc776efb516f4
src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -118,6 +118,9 @@
    private WaitPakinMapper waitPakinMapper;
    @Autowired
    private LocMastService locMastService;
    @Resource
    private LocMastMapper locMastMapper;
    @Autowired
    private StaDescService staDescService;
    @Autowired
@@ -265,6 +268,9 @@
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo(dto.getWorkNo());
                            staProtocol.setStaNo(dto.getStaNo().shortValue());
                            if (dto.getStaNo() == 1071 || dto.getStaNo() == 1064 || dto.getStaNo() == 1078) {
                                decreaseWantBucketCount(dto.getStaNo(),1);
                            }
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.info("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo());
@@ -302,10 +308,52 @@
        StaProtocol staProtocol1084 = devpThread.getStation().get(1084);
        StaProtocol staProtocol1087 = devpThread.getStation().get(1087);
        List<SearchLocParam.WantBucket> wantBucketList = new ArrayList<>();
        wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag()));
        wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag()));
        wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag()));
        wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag(),staProtocol1084.getWantBucketCount()));
        wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag(),staProtocol1081.getWantBucketCount()));
        wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag(),staProtocol1087.getWantBucketCount()));
        return wantBucketList;
    }
    /**
     * 罐装线要桶数量减少
     */
    private void decreaseWantBucketCount(int site, int decrease) throws InterruptedException {
        int siteNew;
        switch (site) {
            case 1071: siteNew = 1081;break;
            case 1064: siteNew = 1084;break;
            case 1078: siteNew = 1087;break;
            default:
                return;
        }
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        StaProtocol staProtocol = devpThread.getStation().get(siteNew);
        if(staProtocol == null) {
            return;
        } else {
            staProtocol = staProtocol.clone();
        }
        int count = staProtocol.getWantBucketCount();
        int remaining = count - decrease;
        if ( remaining < 0) {
            log.error("自动出空桶减少罐装线要桶数异常,站点:{},减少前:{},减少数:{},剩余要桶数:{}", site, count, decrease, remaining);
            return;
        }
        staProtocol.setWantBucketCount(remaining);
        boolean offer = MessageQueue.offer(SlaveType.Devp, inGzxSiteList.indexOf(site) + 4, new Task(6, staProtocol));
        if (offer) {
            log.info("自动出空桶减少罐装线要桶数命令推送队列成功:站点:{},剩余要桶数:{}" ,site, remaining);
        } else {
            log.error("自动出空桶减少罐装线要桶数命令推送队列失败:站点:{},剩余要桶数:{}" ,site, remaining);
        }
        log.info("自动出空桶减少罐装线要桶数成功,站点:{},减少前:{},减少数:{},剩余要桶数:{}", site, count, decrease, remaining);
    }
    /**
@@ -686,7 +734,7 @@
                        continue;
                    }
                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) {
                    News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F、D  库位状态={}",shallowLoc.getLocSts());
                    // 此标记避免多次执行移库任务
                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
@@ -774,6 +822,11 @@
     */
    public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
        News.warnNoLog(""+mark+" - 2"+" - 0"+" - 堆垛机入出库作业下发:执行出库");
        boolean crnAvailableOut = false;
        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut"));
        if (config != null && config.getStatus() == 1) {
            crnAvailableOut = true;
        }
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
            List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
@@ -810,9 +863,8 @@
                }
                // 判断堆垛机出库站状态
                if ((staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())
                        || (staProtocol.getSiteId() == 1056 && staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y"))) {
                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") &&
                        (crnAvailableOut || !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())) {
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                        break;
@@ -849,7 +901,7 @@
                                }
                            }
                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M")|| shallowLoc.getLocSts().equals("Z")) {
                            News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F、D  库位状态={}",shallowLoc.getLocSts());
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                            //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务
@@ -1103,21 +1155,23 @@
                    // 空桶入库完成,先完成对应库位组任务
                    if(wrkMast.getWorkNoOther() != 0 ){
                        WrkMast wrkMast1 = wrkMastService.selectByWrkNo(wrkMast.getWorkNoOther());
                        // 交换库位号
                        String locNo = wrkMast.getLocNo();
                        wrkMast.setLocNo(wrkMast1.getLocNo());
                        // 交换入库时间,提取库存时按顺序先浅后深
                        Date ioTime = wrkMast.getIoTime();
                        if(locNo.startsWith("10")) {
                            wrkMast.setIoTime(wrkMast1.getIoTime());
                            wrkMast1.setIoTime(ioTime);
                        if (wrkMast1 != null) {
                            // 交换库位号
                            String locNo = wrkMast.getLocNo();
                            wrkMast.setLocNo(wrkMast1.getLocNo());
                            // 交换入库时间,提取库存时按顺序先浅后深
                            Date ioTime = wrkMast.getIoTime();
                            if(locNo.startsWith("10")) {
                                wrkMast.setIoTime(wrkMast1.getIoTime());
                                wrkMast1.setIoTime(ioTime);
                            }
                            wrkMast1.setLocNo(locNo);
                            wrkMast1.setCrnEndTime(now);
                            wrkMast1.setModiTime(now);
                            wrkMast1.setWrkSts(4L);
                            wrkMast1.setWorkNoOther(0);
                            wrkMastMapper.updateById(wrkMast1);
                        }
                        wrkMast1.setLocNo(locNo);
                        wrkMast1.setCrnEndTime(now);
                        wrkMast1.setModiTime(now);
                        wrkMast1.setWrkSts(4L);
                        wrkMast1.setWorkNoOther(0);
                        wrkMastMapper.updateById(wrkMast1);
                    }
                    wrkMast.setCrnEndTime(now);
                    wrkMast.setModiTime(now);
@@ -1138,13 +1192,13 @@
    /**
     * 堆垛机回原点
     */
    public synchronized void originGo() {
    public synchronized void originGo() throws InterruptedException {
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
            if(crnProtocol == null) {
                continue;
            }
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
@@ -1161,7 +1215,18 @@
                Date now = new Date();
                Date modiTime = basCrnp.getModiTime();
                long diffInMillis = now.getTime()-modiTime.getTime();
                if(diffInMillis < 3 * 60 * 1000) {
                if(diffInMillis < 10 * 1000) { // 空闲小于10秒则跳过
                    continue;
                } else {  // 有入库任务或大于2分钟,回原点
                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2, 9, 10));
                    if(count == 0 && diffInMillis < 2 * 60 * 1000) {
                        continue;
                    }
                }
                // 有吊车入库或吊车出库任务
                int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnProtocol.getCrnNo()).in("wrk_sts", 3, 12));
                if(count != 0) {
                    continue;
                }
@@ -1178,8 +1243,11 @@
                if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
                    News.error("回原点任务下发失败", crn.getId(), JSON.toJSON(crnCommand));
                } else {
                    basCrnp.setModiTime(new Date());
                    basCrnpService.updateById(basCrnp); // 设置更新时间,避免重复下发回原点
                    log.info("{}号堆垛机回原点任务下发成功:{}", crn.getId(), JSON.toJSON(crnCommand));
                }
                Thread.sleep(2000);
            }
        }
    }
@@ -1463,13 +1531,25 @@
     */
    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) {
        // 只有208L能放11层
        String model = null;
        if(shallowLoc.getLocSts().equals("F")) {
            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
            if(locDetl != null && locDetl.getModel() != null) {
                String matModel = locMastMapper.selectMatMatnrByMaktx(locDetl.getModel());
                if(matModel != null && matModel.equals("208L")) {
                    model = "208L";
                }
            }
        }
        try {
            News.warnNoLog(""+mark+"moveLocForDeepLoc"+" - 0"+" - 开始执行:因双深库位阻塞,对浅库位进行移转(立即执行版)");
            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
            LocMast loc = null;
            for (Integer row : rows) {
                if (Utils.isDeepLoc(slaveProperties, row)) {
                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
//                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
                    loc = locMastMapper.queryFreeLocMastNew(row,model);
                    if (loc != null) {
                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
@@ -1488,12 +1568,12 @@
            if (null == loc) {
                for (Integer row : rows) {
                    if (Utils.isShallowLoc(slaveProperties, row)) {
                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
//                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
                        loc = locMastMapper.queryFreeLocMastNew(row,model);
                        if (null != loc) {//对应深库位非在库状态,不能移库
                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
                            LocMast deepLoc1 = locMastService.selectById(deepLoc);
                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("M")&& !deepLoc1.getLocSts().equals("Z")) {
                                loc = null;
                            }
                        }
@@ -1525,7 +1605,7 @@
                wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 满板
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板
                wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("M") ? "M" : shallowLoc.getLocSts().equals("Z") ? "Z" : "N"); // 空板
                wrkMast.setBarcode(shallowLoc.getBarcode()); // 托盘码
                wrkMast.setLinkMis("N");
                wrkMast.setAppeTime(new Date());
@@ -1553,7 +1633,7 @@
                    }
                }
                // 修改源库位状态
                if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
                if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("M") || shallowLoc.getLocSts().equals("Z")) {
                    shallowLoc.setLocSts("R"); // R.出库预约
                    shallowLoc.setModiTime(new Date());
                    if (!locMastService.updateById(shallowLoc)) {
@@ -1674,6 +1754,9 @@
                staProtocol = staProtocol.clone();
            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9000) {
                if (staProtocol.getSiteId() == 1034 && !staProtocol.isHigh()) { // 1034空母拖回流任务需要高信号
                    continue;
                }
                // 查询工作档
                WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
                if (wrkMast == null) {
@@ -1819,7 +1902,7 @@
            if (wrkMast == null) {
                log.error("异常口入库任务号无任务:{}", staProtocol.getWorkNo());
                return;
            } else if (wrkMast.getLocNo() != null) {
            } else if (wrkMast.getLocNo() != null && wrkMast.getLocNo().length() == 7) {
//                log.info("异常口入库库位已分配:{}", wrkMast.getLocNo());
                return;
            } else if(wrkMast.getStaNo() != 1090) {
@@ -1953,7 +2036,7 @@
    }
    public synchronized void autoOutEmptyBucket() {
        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","autoOutEmptyBucket").eq("status",1));
        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "autoOutEmptyBucket").eq("status", 1));
        if (config == null || Cools.isEmpty(config.getValue())) {
            return;
        }
@@ -1962,21 +2045,106 @@
        String[] split = config.getValue().split("=");
        for (SearchLocParam.WantBucket wantBucket : getWantBucketFlag()) {
            if (wantBucket.getBucketType() != 0) { // 罐装线有要桶信号
            if (wantBucket.getBucketType() != 0 && wantBucket.getWantBucketCount() > 0) { // 罐装线有要桶信号+要托数不为0
                boolean flag = true; // 是否需要自动补,true不需要,false需要
                for(String item: split) {
                    if(String.valueOf(wantBucket.getSite()).equals(item)) {
                for (String item : split) {
                    if (String.valueOf(wantBucket.getSite()).equals(item)) {
                        flag = false;
                        break;
                    }
                }
                if(flag) {
                if (flag) {
                    return;
                }
                // <4 < 2 < 4
                int count = wrkMastMapper.selectInGzxCount(wantBucket.getSite());
                if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) {
                    log.info("{}自动补空桶,罐装线要桶型信息:{},正在执行任务数:{}",wantBucket.getSite(), wantBucket.getBucketType(),count);
                if (wantBucket.getWantBucketCount() == 1) { // 最后剩一拖的时候
                    log.info("{}自动补空桶剩最后一托,罐装线要桶型信息:{},正在执行任务数:{}", wantBucket.getSite(), wantBucket.getBucketType(), count);
                    if (wantBucket.getSite() == 1071 && count <= 3 || wantBucket.getSite() == 1064 && count <= 1 || wantBucket.getSite() == 1078 && count <= 3) { // 可以出一个
                        List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
                        if (locDetlList.size() == 0) {
                            log.warn("自动出空桶最后一个,库存无数据");
                            break;
                        }
                        Map<String, LocDetl> locDetlMap = locDetlList.stream().collect(Collectors.toMap(LocDetl::getLocNo, locDetl -> locDetl));
                        LocDetl locDetlSta = null;
                        for (LocDetl locDetl : locDetlList) {
                            String loc1 = locDetl.getLocNo(); // 当前库位
                            String row = loc1.substring(0, 2);
                            String rowNew = ""; // 对应库位
                            switch (row) {
                                case "09":
                                    rowNew = "10";
                                    break;
                                case "10":
                                    rowNew = "09";
                                    break;
                                case "11":
                                    rowNew = "12";
                                    break;
                                case "12":
                                    rowNew = "11";
                                    break;
                                default:
                            }
                            String locNoNew = rowNew + loc1.substring(2);
                            LocDetl locDetl1 = locDetlMap.get(locNoNew);
                            if (locDetl1 == null) {
                                locDetlSta = locDetl;
                                break;
                            }
                        }
                        // 没有单的,深浅库位都有,先取浅库位
                        if (locDetlSta == null) {
                            Optional<LocDetl> first = locDetlList.stream().filter(locDetl -> locDetl.getLocNo().startsWith("10") || locDetl.getLocNo().startsWith("11")).findFirst();
                            if (first.isPresent()) {
                                locDetlSta = first.get();
                            }
                        }
                        if (locDetlSta != null) {
                            try {
                                StockOutParam param = new StockOutParam();
                                param.setOutSite(wantBucket.getSite());
                                List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
                                StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
                                locDetl2.setLocNo(locDetlSta.getLocNo());
                                locDetl2.setMatnr(locDetlSta.getMatnr());
                                locDetl2.setBatch(locDetlSta.getBatch());
                                locDetl2.setBrand(locDetlSta.getBrand());
                                locDetl2.setCount(locDetlSta.getAnfme());
                                locDetl2.setBoxType1(locDetlSta.getBoxType1());
                                locDetl2.setBoxType2(locDetlSta.getBoxType2());
                                locDetl2.setBoxType3(locDetlSta.getBoxType3());
                                locDetl2.setStandby1(locDetlSta.getStandby1());
                                locDetl2.setStandby2(locDetlSta.getStandby2());
                                locDetl2.setStandby3(locDetlSta.getStandby3());
                                locDetls.add(locDetl2);
                                param.setLocDetls(locDetls);
                                String response = new HttpHandler.Builder()
                                        .setUri(wmsUrl)
                                        .setPath("/rpc/autoOutEmptyBucket")
                                        .setJson(JSON.toJSONString(param))
                                        .build()
                                        .doPost();
                                log.info("最后一个自动出空桶请求wms原始返回:" + response);
                                JSONObject jsonObject = JSON.parseObject(response);
                                if (jsonObject.getInteger("code").equals(200)) {
                                    decreaseWantBucketCount(wantBucket.getSite(), 1);
                                    log.info("最后一个自动出空桶成功:{}", wantBucket.getSite());
                                    return;
                                } else {
                                    News.error("最后一个自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            }
                        }
                    }
                } else if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) { // 可以出两个
                    log.info("{}自动补空桶,罐装线要桶型信息:{},正在执行任务数:{}", wantBucket.getSite(), wantBucket.getBucketType(), count);
                    // 判断库里有无空桶组
                    List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
                    for (int i = 0; i < locDetlList.size(); i++) {
@@ -2038,10 +2206,11 @@
                                    log.info("自动出空桶请求wms原始返回:" + response);
                                    JSONObject jsonObject = JSON.parseObject(response);
                                    if (jsonObject.getInteger("code").equals(200)) {
                                        log.info("自动出空桶成功:{}",wantBucket.getSite());
                                        decreaseWantBucketCount(wantBucket.getSite(), 2);
                                        log.info("自动出空桶成功:{}", wantBucket.getSite());
                                        return;
                                    } else {
                                        News.error("自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                                        News.error("自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
                                    }
                                } catch (Exception e) {
                                    e.printStackTrace();
@@ -2050,6 +2219,47 @@
                            }
                        }
                    }
                    if (locDetlList.size() > 0) {
                        log.info("没有成对的空桶组,只能一个一个出");
                        try {
                            LocDetl locDetl = locDetlList.get(0);
                            StockOutParam param = new StockOutParam();
                            param.setOutSite(wantBucket.getSite());
                            List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
                            StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
                            locDetl2.setLocNo(locDetl.getLocNo());
                            locDetl2.setMatnr(locDetl.getMatnr());
                            locDetl2.setBatch(locDetl.getBatch());
                            locDetl2.setBrand(locDetl.getBrand());
                            locDetl2.setCount(locDetl.getAnfme());
                            locDetl2.setBoxType1(locDetl.getBoxType1());
                            locDetl2.setBoxType2(locDetl.getBoxType2());
                            locDetl2.setBoxType3(locDetl.getBoxType3());
                            locDetl2.setStandby1(locDetl.getStandby1());
                            locDetl2.setStandby2(locDetl.getStandby2());
                            locDetl2.setStandby3(locDetl.getStandby3());
                            locDetls.add(locDetl2);
                            param.setLocDetls(locDetls);
                            String response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath("/rpc/autoOutEmptyBucket")
                                    .setJson(JSON.toJSONString(param))
                                    .build()
                                    .doPost();
                            log.info("自动出空桶请求wms原始返回:" + response);
                            JSONObject jsonObject = JSON.parseObject(response);
                            if (jsonObject.getInteger("code").equals(200)) {
                                decreaseWantBucketCount(wantBucket.getSite(), 1);
                                log.info("自动出空桶成功:{}", wantBucket.getSite());
                                return;
                            } else {
                                News.error("自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        }
                    }
                }
            }
        }