|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public boolean deviceRgvDetection(Integer startSta,RgvSlave rgvSlave,Integer endSta){ | 
|---|
|  |  |  | BasDevpPosition basDevpPositionStartSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", startSta)); | 
|---|
|  |  |  | if (basDevpPositionStartSta == null){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BasDevpPosition basDevpPositionEndSta = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", endSta)); | 
|---|
|  |  |  | if (basDevpPositionEndSta == null){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, basDevpPositionEndSta.getPlcId()); | 
|---|
|  |  |  | StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(endSta); | 
|---|
|  |  |  | if (staProtocolEnd == null){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断是否满足放货条件 | 
|---|
|  |  |  | if (!staProtocolEnd.isAutoing() || staProtocolEnd.isLoading()) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!rgvDetection(rgvSlave)){ | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //  a当前  b  other | 
|---|
|  |  |  | //  b可用 | 
|---|
|  |  |  | //  b无任务 | 
|---|
|  |  |  | //  半边区域内全任务 | 
|---|
|  |  |  | //  半边区域内取货任务 | 
|---|
|  |  |  | //  半边区域内放货任务 | 
|---|
|  |  |  | //切换B | 
|---|
|  |  |  | //  半边区域内全任务 | 
|---|
|  |  |  | //  半边区域内取货任务 | 
|---|
|  |  |  | //  半边区域内放货任务 | 
|---|
|  |  |  | //b 有任务 | 
|---|
|  |  |  | //  可用区域任务 | 
|---|
|  |  |  | //  可用区域任务内取货任务 | 
|---|
|  |  |  | // | 
|---|
|  |  |  | // b禁用 | 
|---|
|  |  |  | // 全区域任务  就近取货 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void taskStart() { | 
|---|
|  |  |  | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (rgvDetection(rgvSlave)){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | TaskWrk taskWrk = deviceDetection(inSta); | 
|---|
|  |  |  | if (taskWrk!=null){ | 
|---|
|  |  |  | if (deviceRgvDetection(inSta.getStaNo(),rgvSlave,taskWrk.getTargetPointConvert())){ | 
|---|
|  |  |  | RgvProtocol rgvStatus = RgvStatusCache.getRgvStatus(rgvSlave.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|
|  |  |  | log.error("任务生成失败===》异常信息:{}",e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void DevpTaskNoRun() { | 
|---|
|  |  |  | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (rgvDetection(rgvSlave)){ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean sign = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (rgvOtherStatusEnable(rgvSlave)){ | 
|---|
|  |  |  | //分成上下两部分任务 | 
|---|
|  |  |  | List<Integer>[] avoidRange = RouteUtils.avoidRange(staList, basDevpPositions); | 
|---|
|  |  |  | List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions); | 
|---|
|  |  |  | List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1]; | 
|---|
|  |  |  | List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0]; | 
|---|
|  |  |  | //就近排序 | 
|---|
|  |  |  | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId()); | 
|---|
|  |  |  | List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions); | 
|---|
|  |  |  | List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions); | 
|---|
|  |  |  | if (taskNoNow.equals("无")){ //b 无任务 | 
|---|
|  |  |  | //所属部分就进取货 | 
|---|
|  |  |  | //  半边区域内全任务 | 
|---|
|  |  |  | boolean sign = false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //所属部分就进取货 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //筛选范围内任务 | 
|---|
|  |  |  | //就近排序 | 
|---|
|  |  |  | RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(rgvSlave.getOtherId()); | 
|---|
|  |  |  | //筛选在范围任务 | 
|---|
|  |  |  | List<Integer> belongToRange = RouteUtils.belongToRange(rangeList, rgvProtocolOther.getRgvPosDestination(), basDevpPositions); | 
|---|
|  |  |  | for (Integer staNoNow : belongToRange){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | TaskWrk taskWrk = deviceDetection(rgvStn); | 
|---|
|  |  |  | if (taskWrk!=null){ | 
|---|
|  |  |  | if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | //  筛选范围内取货任务 | 
|---|
|  |  |  | for (Integer staNoNow : belongToRange){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | for (Integer staNoNow : rangeList){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | TaskWrk taskWrk = deviceDetection(rgvStn); | 
|---|
|  |  |  | if (taskWrk!=null){ | 
|---|
|  |  |  | if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | //  半边区域内取货任务 | 
|---|
|  |  |  | for (Integer staNoNow : rangeList){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | //  半边区域内放货任务 | 
|---|
|  |  |  | for (Integer staNoNow : rangeListOther){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | //  半边区域内取货任务 | 
|---|
|  |  |  | for (Integer staNoNow : rangeList){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //切换B | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else {//b 有任务 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //  可用区域任务 | 
|---|
|  |  |  | //  可用区域任务内取货任务 | 
|---|
|  |  |  | //切换B | 
|---|
|  |  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | //  半边区域内放货任务 | 
|---|
|  |  |  | for (Integer staNoNow : rangeListOther){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | TaskWrk taskWrk = deviceDetection(rgvStn); | 
|---|
|  |  |  | if (taskWrk!=null){ | 
|---|
|  |  |  | if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,taskWrk.getTargetPointConvert(),basDevpPositions)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //可用区域就近取货 | 
|---|
|  |  |  | //就近排序 | 
|---|
|  |  |  | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId()); | 
|---|
|  |  |  | List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions); | 
|---|
|  |  |  | //  半边区域内取货任务 | 
|---|
|  |  |  | for (Integer staNoNow : rangeList){ | 
|---|
|  |  |  | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){ | 
|---|
|  |  |  | if (rgvStn.getStaNo().equals(staNoNow)){ | 
|---|
|  |  |  | sign = taskGenerate(rgvSlave,rgvStn,0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign){ | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e){ | 
|---|