|  |  |  | 
|---|
|  |  |  | for (DevpSlave.Sta inSta : devp.getInSta()) { | 
|---|
|  |  |  | // 获取条码扫描仪信息 | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); | 
|---|
|  |  |  | BarcodeThread barcodeThreadMat = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcodeMat()); | 
|---|
|  |  |  | 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 (barcodeThread == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (barcodeThreadMat == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String barcodeMat = barcodeThreadMat.getBarcode(); | 
|---|
|  |  |  | // 尺寸检测异常 | 
|---|
|  |  |  | boolean back = false; | 
|---|
|  |  |  | String errMsg = ""; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!back && staProtocol.isBarcodeErr()) { | 
|---|
|  |  |  | errMsg = "扫码失败"; | 
|---|
|  |  |  | back = true; | 
|---|
|  |  |  | log.error("物料码扫码失败"); | 
|---|
|  |  |  | //                    back = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 退回 | 
|---|
|  |  |  | if (back) { | 
|---|
|  |  |  | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { | 
|---|
|  |  |  | News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkNo); | 
|---|
|  |  |  | News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); | 
|---|
|  |  |  | wrkNo++; | 
|---|
|  |  |  | staProtocol.setStaNo(inSta.getBackSta().shortValue()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Cools.isEmpty(barcodeMat) || "NG".endsWith(barcodeMat) || "NoRead".equals(barcodeMat) || "00000000".equals(barcodeMat)) { | 
|---|
|  |  |  | News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcodeMat(), barcodeMat); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkNo); | 
|---|
|  |  |  | News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error(methodName + ":更新plc站点信息失败"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | throw new CoolException("更新plc站点信息失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (jsonObject.getInteger("code").equals(700)) { | 
|---|
|  |  |  | SearchLocParam param2 = new SearchLocParam(); | 
|---|
|  |  |  | param2.setBarcode(barcode); | 
|---|
|  |  |  | param2.setBarcodeMat(barcodeMat); | 
|---|
|  |  |  | param2.setSourceStaNo(inSta.getStaNo()); | 
|---|
|  |  |  | param2.setLocType1(locTypeDto.getLocType1()); | 
|---|
|  |  |  | String response2 = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri(wmsUrl) | 
|---|
|  |  |  | .setPath("/rpc/pakin/yk/loc/v33") | 
|---|
|  |  |  | .setJson(JSON.toJSONString(param2)) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | .doPost(); | 
|---|
|  |  |  | JSONObject jsonObject2 = JSON.parseObject(response2); | 
|---|
|  |  |  | if (jsonObject2.getInteger("code").equals(200)) { | 
|---|
|  |  |  | log.info("自动组托成功!!"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "自动组托失败!!!barcodeMat==>"+barcodeMat)); | 
|---|
|  |  |  | News.error(methodName + "==>组托失败:请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/yk/loc/v33", JSON.toJSONString(param), response); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //  状态:等待确认 并且  任务完成位 = 1 | 
|---|
|  |  |  | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行对工作档的完成操作"); | 
|---|
|  |  |  | News.warnNoLog(""+mark+" - 0"+" - 开始执行对工作档的完成操作,任务号:"+crnProtocol.getTaskNo()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取入库待确认工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); | 
|---|
|  |  |  | 
|---|
|  |  |  | * 小车地图更新  更新锁 | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd,String sign){ | 
|---|
|  |  |  | log.info("小车地图更新![标记:{}];[BasRgvMap:{}];[staStart:{}];[staEnd:{}];",sign,JSON.toJSONString(basRgvMapCurrent),staStart,staEnd); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute()); | 
|---|
|  |  |  | //更新当前小车锁 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//获取最远站点 | 
|---|
|  |  |  | log.info("小车地图更新!获取最远站点;[farCurrentStaNo:{}]",farCurrentStaNo); | 
|---|
|  |  |  | Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //获取合并干涉项 | 
|---|
|  |  |  | log.info("小车地图更新!获取合并干涉项;[fallMerge:{}]",fallMerge); | 
|---|
|  |  |  | basRgvMapCurrent.setLockEndRoute(fallMerge); | 
|---|
|  |  |  | Integer i = basRgvMapMapper.updateById(basRgvMapCurrent); | 
|---|
|  |  |  | //            if (i>0){ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //更新另一台小车地图 | 
|---|
|  |  |  | Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther(basRgvMapCurrent.getRgvNo()); | 
|---|
|  |  |  | log.info("小车地图更新!另一台小车号;[rgvNoOther:{}]",rgvNoOther); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther); | 
|---|
|  |  |  | log.info("小车地图更新!另一台小车;[basRgvMapOther:{}]",JSON.toJSONString(basRgvMapOther)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute()); | 
|---|
|  |  |  | Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//另一台小车可活动最远位置 | 
|---|
|  |  |  | log.info("小车地图更新!另一台小车可活动最远位置;[lockEndRoute:{}]",lockEndRoute); | 
|---|
|  |  |  | basRgvMapOther.setEndRoute(lockEndRoute); | 
|---|
|  |  |  | Integer i1 = basRgvMapMapper.updateById(basRgvMapOther); | 
|---|
|  |  |  | //            if (i1>0){ | 
|---|
|  |  |  | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("小车地图更新出错!"); | 
|---|
|  |  |  | log.error("小车地图更新出错!异常原因:"+e); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行小车搬运任务 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void rgvRunWrkMastFullSta() { | 
|---|
|  |  |  | public synchronized boolean rgvRunWrkMastFullSta() { | 
|---|
|  |  |  | boolean wrkEnable = false; | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>()); | 
|---|
|  |  |  | 
|---|
|  |  |  | basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
|---|
|  |  |  | List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
|---|
|  |  |  | for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
|---|
|  |  |  | if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3){//1:满版   3:取放 | 
|---|
|  |  |  | if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3 || wrkMastSta.getWrkSts()!=0){//1:满版   3:取放 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断工作结束位置状态 | 
|---|
|  |  |  | boolean signDev = false; | 
|---|
|  |  |  | BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", wrkMastSta.getStaEnd())); | 
|---|
|  |  |  | if (devNo.getDevNo()==113){ | 
|---|
|  |  |  | BasDevp devNo114 = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 114)); | 
|---|
|  |  |  | if (!Cools.isEmpty(devNo114)){ | 
|---|
|  |  |  | if (devNo114.getOutEnable().equals("Y")){ | 
|---|
|  |  |  | signDev = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!Cools.isEmpty(devNo)){ | 
|---|
|  |  |  | if (devNo.getAutoing().equals("Y") && !devNo.getWrkNo().equals(0) && !devNo.getLoading().equals("N")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!signDev && devNo.getDevNo()==113){ | 
|---|
|  |  |  | if (!devNo.getAutoing().equals("Y") || !devNo.getWrkNo().equals(0) || !devNo.getLoading().equals("N")){ | 
|---|
|  |  |  | wrkEnable = true; | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!devNo.getOutEnable().equals("Y")){ | 
|---|
|  |  |  | wrkEnable = true; | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发 | 
|---|
|  |  |  | wrkEnable = true; | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | wrkMastSta.setWrkSts(1); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | log.error("更新小车任务成功"); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | rgvThread.setPakMk(false); | 
|---|
|  |  |  | boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526"); | 
|---|
|  |  |  | if (signMap){ | 
|---|
|  |  |  | Thread.sleep(300); | 
|---|
|  |  |  | wrkMastSta.setWrkSts(1); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | wrkMastStaMapper.updateById(wrkMastSta); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("更新小车任务失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | return wrkEnable; | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!wrkEnable){ | 
|---|
|  |  |  | rgvRunWrkMastEmptyStaAvoidance(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            if (!wrkEnable){ | 
|---|
|  |  |  | //                rgvRunWrkMastEmptyStaAvoidance(); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("3875行执行小车搬运任务下发失败"); | 
|---|
|  |  |  | log.error("3875行"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return wrkEnable; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行小车搬运任务 | 
|---|