| | |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.domain.enums.TaskStatusType; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.mapper.*; |
| | | import com.zy.asrs.service.*; |
| | |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private BasDevpPositionService basDevpPositionService; |
| | | @Autowired |
| | | private TaskWrkService taskWrkService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | private Integer inventoryNumber; |
| | | |
| | | public Integer wrkNo = 10002; |
| | | |
| | | @Value("${wms.rgvOpen}") |
| | | private boolean rgvOpen; |
| | | |
| | | @Value("${constant-parameters.trackEntireLength}") |
| | | private Long trackEntireLength; |
| | | |
| | | @Value("${constant-parameters.trackBenchmark}") |
| | | private Long trackBenchmark; |
| | | |
| | | @Value("${constant-parameters.trackProportion}") |
| | | private Long trackProportion; |
| | | |
| | | @Value("${constant-parameters.avoidDistance}") |
| | | private Long avoidDistance; |
| | | @Autowired |
| | | private TaskWrkLogServiceImpl taskWrkLogService; |
| | | public Long currentTimeMilliConnectCrnAuto= 0L; |
| | | |
| | | /* |
| | | * 验证许可证是否有效 |
| | |
| | | } |
| | | |
| | | |
| | | // |
| | | // public synchronized void taskStart() { |
| | | // for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | // try { |
| | | // if (rgvDetection(rgvSlave)) { |
| | | // String taskNoNow = rgvOtherTaskWrk(rgvSlave); |
| | | // List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true)); |
| | | // boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave); |
| | | // if (basDevpPositions.isEmpty()) { |
| | | // log.error("获取所有站点信息异常"); |
| | | // try{ |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常"); |
| | | // } catch (Exception e2){ |
| | | // } |
| | | // continue; |
| | | // } |
| | | // List<WrkMast> wrkMastList = new ArrayList<>(); |
| | | // List<Integer> staList = new ArrayList<>(); |
| | | // for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) { |
| | | // TaskWrk taskWrk = deviceDetection(inSta); |
| | | // if (taskWrk != null) { |
| | | // if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue; |
| | | // wrkMastList.add(taskWrk); |
| | | // staList.add(inSta.getStaNo()); |
| | | // } |
| | | // } |
| | | // |
| | | // if (wrkMastList.isEmpty() || staList.isEmpty()) continue; |
| | | // |
| | | // boolean sign = false; |
| | | // |
| | | // if (rgvOtherStatusEnable(rgvSlave)) { |
| | | // //分成上下两部分任务 |
| | | // List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions, itSmall); |
| | | // 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); |
| | | // |
| | | // //所属部分就进取货 |
| | | // |
| | | // //筛选范围内任务 |
| | | // //就近排序 |
| | | // //筛选在范围任务 |
| | | // Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance); |
| | | // List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions); |
| | | // |
| | | // if (!sign && staList.size()==1){ |
| | | // if (rgvOtherIDLEOther(rgvSlave)){ |
| | | // if (!rgvOtherIDLE(rgvSlave,staList.get(0))){ |
| | | // System.out.println("空闲就近跳过==="+rgvSlave.getId()+"==="); |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过"); |
| | | // |
| | | // sign=true; |
| | | // } |
| | | // } |
| | | // if (sign){ |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staList.get(0))) { |
| | | // WrkMast wrkMast = deviceDetection(rgvStn); |
| | | // if (wrkMast != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(wrkMast.getStaNo().toString());//站点转换 需要修改 |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); |
| | | // |
| | | // sign=false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // } else { |
| | | // return; |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // if(!sign){ |
| | | // for (Integer staNoNow : belongToRange) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // WrkMast wrkMast = deviceDetection(rgvStn); |
| | | // if (wrkMast != null) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(wrkMast.getStaNo().toString())));//站点转换 需要修改 |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // System.out.println("全范围执行==="+rgvSlave.getId()+"==="+wrkMast); |
| | | // System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // 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)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | // if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | // System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // if (!sign && staList.size()==1){ |
| | | // if (rgvOtherIDLEOther2(rgvSlave)){ |
| | | // if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){ |
| | | // System.out.println("运行就近跳过==="+rgvSlave.getId()+"==="); |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过"); |
| | | // |
| | | // sign=true; |
| | | // } |
| | | // } |
| | | // if (sign){ |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staList.get(0))) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("运行就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); |
| | | // |
| | | // sign=false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // } else { |
| | | // return; |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // |
| | | // |
| | | // if (!sign && staList.size()>1) { |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // }else if (!sign && staList.size()==1){ |
| | | // BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0))); |
| | | // if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){ |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // |
| | | // |
| | | // if (!sign && staList.size()>1) { |
| | | // // 半边区域内取货任务 |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | // if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | // System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // if (!sign && staList.size()>1) { |
| | | // for (Integer staNoNow : rangeListOther) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"==="); |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // |
| | | // }else if (!sign && staList.size()==1){ |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"==="); |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务"); |
| | | // |
| | | // } 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)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | // if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } catch (Exception e) { |
| | | // log.error("任务生成失败===》异常信息:{}", e.getMessage()); |
| | | // try{ |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败"); |
| | | // } catch (Exception e2){ |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // public String rgvOtherTaskWrk(RgvSlave slave) { |
| | | // |
| | | // RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId()); |
| | | // TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | // ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | // if (!allTaskProtocol.isEmpty()) { |
| | | // for (TaskProtocol taskProtocol : allTaskProtocol.values()) { |
| | | // if (taskProtocol.getTaskNo() != 0) { |
| | | // return taskProtocol.getTaskNo().toString(); |
| | | // } |
| | | // } |
| | | // } |
| | | // return "无"; |
| | | // |
| | | // } |
| | | // |
| | | // public boolean rgvDetection(RgvSlave slave) { |
| | | // RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | // RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | // |
| | | // if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | // return false; |
| | | // } |
| | | // if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | // || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | // return false; |
| | | // } |
| | | // if (rgvProtocol.getLoaded()==1){ |
| | | // return false; |
| | | // } |
| | | // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId()); |
| | | // |
| | | // if (rgvProtocolOther == null) { |
| | | // return false; |
| | | // } |
| | | // if (rgvProtocolOther.statusEnable) { |
| | | // if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) { |
| | | // return false; |
| | | // } |
| | | // } |
| | | // return true; |
| | | // } |
| | | // public boolean rgvOtherIDLEOther(RgvSlave slave) { |
| | | // RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId()); |
| | | // |
| | | // if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | // return false; |
| | | // } |
| | | // if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | // || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | // return false; |
| | | // } |
| | | // |
| | | // if (rgvProtocol.getLoaded()!=0) { |
| | | // return false; |
| | | // } |
| | | // return true; |
| | | // } |
| | | // public boolean rgvOtherIDLEOther2(RgvSlave slave) { |
| | | // RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId()); |
| | | // |
| | | // if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | // return false; |
| | | // } |
| | | // if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) |
| | | // || rgvProtocol.getRgvPos().equals(0L) |
| | | // || rgvTaskProtocol.getAvoid() == -1) { |
| | | // return false; |
| | | // } |
| | | // |
| | | // if (rgvProtocol.getLoaded()!=0) { |
| | | // return false; |
| | | // } |
| | | // return true; |
| | | // } |
| | | // public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) { |
| | | // RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | // RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | // |
| | | // if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | // return false; |
| | | // } |
| | | // if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | // || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | // return false; |
| | | // } |
| | | // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // |
| | | // if (rgvProtocolOther == null) { |
| | | // return true; |
| | | // } |
| | | // if (rgvProtocolOther.statusEnable) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo)); |
| | | // long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos()) |
| | | // - |
| | | // Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())); |
| | | // if (abs<100){ |
| | | // return true; |
| | | // } |
| | | // if (Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos()) |
| | | // >= |
| | | // Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())){ |
| | | // return false; |
| | | // } |
| | | // } |
| | | // return true; |
| | | // } |
| | | // public boolean rgvOtherIDLE2(RgvSlave slave,Integer staNo) { |
| | | // RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | // RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | // |
| | | // if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | // return false; |
| | | // } |
| | | // if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | // || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | // return false; |
| | | // } |
| | | // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // |
| | | // if (rgvProtocolOther == null) { |
| | | // return true; |
| | | // } |
| | | // if (rgvProtocolOther.statusEnable) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo)); |
| | | // long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos()) |
| | | // - |
| | | // Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())); |
| | | // if (abs<100){ |
| | | // return true; |
| | | // } |
| | | // if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()) |
| | | // >= |
| | | // Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){ |
| | | // return false; |
| | | // } |
| | | // } |
| | | // return true; |
| | | // } |
| | | // |
| | | // public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) { |
| | | // |
| | | // DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId()); |
| | | // StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | | // if (staProtocol == null) { |
| | | // return null; |
| | | // } |
| | | // // 判断是否满足取货条件 |
| | | // if (!staProtocol.isPakMkTask()) { |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), "任务已下发等待小车取"); |
| | | // return null; |
| | | // } |
| | | // // 判断是否满足取货条件 |
| | | // if (staProtocol.isAutoing() |
| | | //// && staProtocol.isLoading() |
| | | //// && staProtocol.isStaOk() |
| | | // && staProtocol.getWorkNo() != 0) { |
| | | // TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | // if (taskWrk != null) { |
| | | // Integer stano = staProtocol.getStaNo(); |
| | | // if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){ |
| | | // if (!staProtocol.isPakMkRun()) { |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), "异常回退标记,需要回退"); |
| | | // return null; |
| | | // } |
| | | // if (!staProtocol.isLoading()) { |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), "无物"); |
| | | // return null; |
| | | // } |
| | | // if (!staProtocol.isInEnable()) { |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), "等待可入信号"); |
| | | // return null; |
| | | // } |
| | | |
| | | public synchronized void taskStart() { |
| | | for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | try { |
| | | if (rgvDetection(rgvSlave)) { |
| | | String taskNoNow = rgvOtherTaskWrk(rgvSlave); |
| | | List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true)); |
| | | boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave); |
| | | if (basDevpPositions.isEmpty()) { |
| | | log.error("获取所有站点信息异常"); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常"); |
| | | } catch (Exception e2){ |
| | | } |
| | | continue; |
| | | } |
| | | List<TaskWrk> taskWrkList = new ArrayList<>(); |
| | | List<Integer> staList = new ArrayList<>(); |
| | | for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) { |
| | | TaskWrk taskWrk = deviceDetection(inSta); |
| | | if (taskWrk != null) { |
| | | if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue; |
| | | taskWrkList.add(taskWrk); |
| | | staList.add(inSta.getStaNo()); |
| | | } |
| | | } |
| | | |
| | | if (taskWrkList.isEmpty() || staList.isEmpty()) continue; |
| | | |
| | | boolean sign = false; |
| | | |
| | | if (rgvOtherStatusEnable(rgvSlave)) { |
| | | //分成上下两部分任务 |
| | | List<Integer>[] avoidRange = RouteRgvUtils.gradeRange(staList, basDevpPositions, itSmall); |
| | | List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1]; |
| | | List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0]; |
| | | //就近排序 |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId()); |
| | | List<Integer> rangeList = RouteRgvUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions); |
| | | List<Integer> rangeListOther = RouteRgvUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions); |
| | | |
| | | //所属部分就进取货 |
| | | |
| | | //筛选范围内任务 |
| | | //就近排序 |
| | | //筛选在范围任务 |
| | | Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance); |
| | | List<Integer> belongToRange = RouteRgvUtils.SortNearby(RouteRgvUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions); |
| | | |
| | | if (!sign && staList.size()==1){ |
| | | if (rgvOtherIDLEOther(rgvSlave)){ |
| | | if (!rgvOtherIDLE(rgvSlave,staList.get(0))){ |
| | | System.out.println("空闲就近跳过==="+rgvSlave.getId()+"==="); |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过"); |
| | | |
| | | sign=true; |
| | | } |
| | | } |
| | | if (sign){ |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staList.get(0))) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); |
| | | |
| | | sign=false; |
| | | break; |
| | | } |
| | | } |
| | | } else { |
| | | return; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if(!sign){ |
| | | for (Integer staNoNow : belongToRange) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | System.out.println("全范围执行==="+rgvSlave.getId()+"==="+taskWrk); |
| | | System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | |
| | | 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)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (!sign && staList.size()==1){ |
| | | if (rgvOtherIDLEOther2(rgvSlave)){ |
| | | if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){ |
| | | System.out.println("运行就近跳过==="+rgvSlave.getId()+"==="); |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过"); |
| | | |
| | | sign=true; |
| | | } |
| | | } |
| | | if (sign){ |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staList.get(0))) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | System.out.println("运行就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); |
| | | |
| | | sign=false; |
| | | break; |
| | | } |
| | | } |
| | | } else { |
| | | return; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (!sign && staList.size()>1) { |
| | | for (Integer staNoNow : rangeList) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | }else if (!sign && staList.size()==1){ |
| | | BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0))); |
| | | if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){ |
| | | for (Integer staNoNow : rangeList) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (!sign && staList.size()>1) { |
| | | // 半边区域内取货任务 |
| | | for (Integer staNoNow : rangeList) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (!sign && staList.size()>1) { |
| | | for (Integer staNoNow : rangeListOther) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"==="); |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | }else if (!sign && staList.size()==1){ |
| | | for (Integer staNoNow : rangeList) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"==="); |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | if (RouteRgvUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务"); |
| | | |
| | | } else { |
| | | //可用区域就近取货 |
| | | //就近排序 |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId()); |
| | | List<Integer> rangeList = RouteRgvUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions); |
| | | // 半边区域内取货任务 |
| | | for (Integer staNoNow : rangeList) { |
| | | for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk != null) { |
| | | Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (sign) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("任务生成失败===》异常信息:{}", e.getMessage()); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败"); |
| | | } catch (Exception e2){ |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public String rgvOtherTaskWrk(RgvSlave slave) { |
| | | |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId()); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | if (!allTaskProtocol.isEmpty()) { |
| | | for (TaskProtocol taskProtocol : allTaskProtocol.values()) { |
| | | if (taskProtocol.getTaskNo() != 0) { |
| | | return taskProtocol.getTaskNo().toString(); |
| | | } |
| | | } |
| | | } |
| | | return "无"; |
| | | |
| | | } |
| | | |
| | | public boolean rgvDetection(RgvSlave slave) { |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | |
| | | if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | return false; |
| | | } |
| | | if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | return false; |
| | | } |
| | | if (rgvProtocol.getLoaded()==1){ |
| | | return false; |
| | | } |
| | | RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId()); |
| | | |
| | | if (rgvProtocolOther == null) { |
| | | return false; |
| | | } |
| | | if (rgvProtocolOther.statusEnable) { |
| | | if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | public boolean rgvOtherIDLEOther(RgvSlave slave) { |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId()); |
| | | |
| | | if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | return false; |
| | | } |
| | | if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | return false; |
| | | } |
| | | |
| | | if (rgvProtocol.getLoaded()!=0) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | public boolean rgvOtherIDLEOther2(RgvSlave slave) { |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId()); |
| | | |
| | | if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | return false; |
| | | } |
| | | if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) |
| | | || rgvProtocol.getRgvPos().equals(0L) |
| | | || rgvTaskProtocol.getAvoid() == -1) { |
| | | return false; |
| | | } |
| | | |
| | | if (rgvProtocol.getLoaded()!=0) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) { |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | |
| | | if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | return false; |
| | | } |
| | | if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | return false; |
| | | } |
| | | RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | |
| | | if (rgvProtocolOther == null) { |
| | | return true; |
| | | } |
| | | if (rgvProtocolOther.statusEnable) { |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo)); |
| | | long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos()) |
| | | - |
| | | Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())); |
| | | if (abs<100){ |
| | | return true; |
| | | } |
| | | if (Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos()) |
| | | >= |
| | | Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())){ |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | public boolean rgvOtherIDLE2(RgvSlave slave,Integer staNo) { |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | |
| | | if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | return false; |
| | | } |
| | | if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 |
| | | || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { |
| | | return false; |
| | | } |
| | | RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | |
| | | if (rgvProtocolOther == null) { |
| | | return true; |
| | | } |
| | | if (rgvProtocolOther.statusEnable) { |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo)); |
| | | long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos()) |
| | | - |
| | | Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())); |
| | | if (abs<100){ |
| | | return true; |
| | | } |
| | | if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()) |
| | | >= |
| | | Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){ |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) { |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | | if (staProtocol == null) { |
| | | return null; |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (!staProtocol.isPakMkTask()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "任务已下发等待小车取"); |
| | | return null; |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (staProtocol.isAutoing() |
| | | // && staProtocol.isLoading() |
| | | // && staProtocol.isStaOk() |
| | | && staProtocol.getWorkNo() != 0) { |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | if (taskWrk != null) { |
| | | Integer stano = staProtocol.getStaNo().intValue(); |
| | | if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){ |
| | | if (!staProtocol.isPakMkRun()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "异常回退标记,需要回退"); |
| | | return null; |
| | | } |
| | | if (!staProtocol.isLoading()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "无物"); |
| | | return null; |
| | | } |
| | | if (!staProtocol.isInEnable()) { |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), "等待可入信号"); |
| | | return null; |
| | | } |
| | | // if (!staProtocol.isStaOk()) { |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), "等待链条就绪"); |
| | | // return null; |
| | | // } |
| | | // // 尺寸检测异常 |
| | | // boolean back = false; |
| | | // String errMsg = "-"; |
| | | // if (staProtocol.getGrossWt()>=600){ |
| | | // errMsg = "超重:"+staProtocol.getGrossWt()+"kg"; |
| | | // 尺寸检测异常 |
| | | boolean back = false; |
| | | String errMsg = "-"; |
| | | if (staProtocol.getGrossWt()>=600){ |
| | | errMsg = "超重:"+staProtocol.getGrossWt()+"kg"; |
| | | back = true; |
| | | } |
| | | if (staProtocol.isFrontErr()) { |
| | | if (!back){ |
| | | errMsg = "前超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"前超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (staProtocol.isBackErr()) { |
| | | if (!back){ |
| | | errMsg = "后超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"后超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (staProtocol.isHighErr()) { |
| | | if (!back){ |
| | | errMsg = "高超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"高超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (staProtocol.isLeftErr()) { |
| | | if (!back){ |
| | | errMsg = "左超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"左超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | if (staProtocol.isRightErr()) { |
| | | if (!back){ |
| | | errMsg = "右超限"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"右超限"; |
| | | } |
| | | back = true; |
| | | } |
| | | // if (!back && staProtocol.isWeightErr()) { |
| | | // errMsg = "超重"; |
| | | // back = true; |
| | | // } |
| | | // if (staProtocol.isFrontErr()) { |
| | | // if (!back){ |
| | | // errMsg = "前超限"; |
| | | // } else { |
| | | // errMsg = errMsg+"---"+"前超限"; |
| | | // } |
| | | // back = true; |
| | | // } |
| | | // if (staProtocol.isBackErr()) { |
| | | // if (!back){ |
| | | // errMsg = "后超限"; |
| | | // } else { |
| | | // errMsg = errMsg+"---"+"后超限"; |
| | | // } |
| | | // back = true; |
| | | // } |
| | | // if (staProtocol.isHighErr()) { |
| | | // if (!back){ |
| | | // errMsg = "高超限"; |
| | | // } else { |
| | | // errMsg = errMsg+"---"+"高超限"; |
| | | // } |
| | | // back = true; |
| | | // } |
| | | // if (staProtocol.isLeftErr()) { |
| | | // if (!back){ |
| | | // errMsg = "左超限"; |
| | | // } else { |
| | | // errMsg = errMsg+"---"+"左超限"; |
| | | // } |
| | | // back = true; |
| | | // } |
| | | // if (staProtocol.isRightErr()) { |
| | | // if (!back){ |
| | | // errMsg = "右超限"; |
| | | // } else { |
| | | // errMsg = errMsg+"---"+"右超限"; |
| | | // } |
| | | // back = true; |
| | | // } |
| | | //// if (!back && staProtocol.isWeightErr()) { |
| | | //// errMsg = "超重"; |
| | | //// back = true; |
| | | //// } |
| | | // if (staProtocol.isBarcodeErr()) { |
| | | // if (!back){ |
| | | // errMsg = "扫码失败"; |
| | | // } else { |
| | | // errMsg = errMsg+"---"+"扫码失败"; |
| | | // } |
| | | // back = true; |
| | | // } |
| | | // // 退回 |
| | | // if (back) { |
| | | // if (stano.equals(staProtocol.getStaNo() + 1)) { |
| | | // return null; |
| | | // } |
| | | // if (!staProtocol.isPakMk()) { |
| | | // return null; |
| | | // } |
| | | // System.out.println("扫码入库失败,{"+inSta.getStaNo()+"}入库站因{"+errMsg+"}异常,托盘已被退回"); |
| | | //// News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); |
| | | // staProtocol.setWorkNo(9999); |
| | | // staProtocol.setStaNo(staProtocol.getStaNo()+1); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // devpThread.setPakMkRun(staProtocol.getSiteId(), false); |
| | | // devpThread.setPakMkTask(staProtocol.getSiteId(), false); |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), errMsg); |
| | | // MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | // try{ |
| | | // taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 |
| | | // taskWrk.setModiTime(new Date()); |
| | | // taskWrkMapper.updateById(taskWrk); |
| | | // } catch (Exception e){ |
| | | // devpThread.setErrorDev(staProtocol.getSiteId(), errMsg+"异常信息保存工作档案失败!"); |
| | | // } |
| | | // return null; |
| | | // } |
| | | // } |
| | | // return taskWrk; |
| | | if (staProtocol.isBarcodeErr()) { |
| | | if (!back){ |
| | | errMsg = "扫码失败"; |
| | | } else { |
| | | errMsg = errMsg+"---"+"扫码失败"; |
| | | } |
| | | back = true; |
| | | } |
| | | // 退回 |
| | | if (back) { |
| | | if (stano.equals(staProtocol.getStaNo() + 1)) { |
| | | return null; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | return null; |
| | | } |
| | | System.out.println("扫码入库失败,{"+inSta.getStaNo()+"}入库站因{"+errMsg+"}异常,托盘已被退回"); |
| | | // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); |
| | | staProtocol.setWorkNo(9999); |
| | | int staNoInt = staProtocol.getStaNo() + 1; |
| | | staProtocol.setStaNo((short)staNoInt); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | devpThread.setPakMkRun(staProtocol.getSiteId(), false); |
| | | devpThread.setPakMkTask(staProtocol.getSiteId(), false); |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), errMsg); |
| | | MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | try{ |
| | | taskWrk.setMemo(errMsg);//将错误码存入备注字段进行展示 |
| | | taskWrk.setModiTime(new Date()); |
| | | taskWrkService.updateById(taskWrk); |
| | | } catch (Exception e){ |
| | | devpThread.setErrorDev(staProtocol.getSiteId(), errMsg+"异常信息保存工作档案失败!"); |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | | return taskWrk; |
| | | } |
| | | } else if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && !staProtocol.isLoading()){ |
| | | if (inSta.isDirectionOther()){ |
| | | StaProtocol staProtocolOther = devpThread.getStation().get(inSta.getStaNoOther()); |
| | | if (staProtocolOther == null) { |
| | | return null; |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (staProtocolOther.isAutoing() |
| | | && staProtocolOther.getWorkNo() != 0) { |
| | | TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo()); |
| | | if (taskWrkOther != null) { |
| | | return taskWrkOther; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) { |
| | | ArrayList<Integer> arrayList = new ArrayList<Integer>() {{ |
| | | add(1009); |
| | | add(1011); |
| | | add(1012); |
| | | add(1014); |
| | | add(1016); |
| | | }}; |
| | | try{ |
| | | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId()); |
| | | ArrayList<Integer> listW = new ArrayList<Integer>(); |
| | | ArrayList<Integer> listL = new ArrayList<Integer>(); |
| | | for (Integer staNo : arrayList){ |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol == null) { |
| | | RgvErrCache.updateRgvErr(rgvNo,staNo+"站点数据丢失"); |
| | | return false; |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (staProtocol.getWorkNo() != 0) { |
| | | if (!listW.contains(staProtocol.getWorkNo())) { |
| | | listW.add(staProtocol.getWorkNo()); |
| | | } |
| | | } |
| | | // 判断是否满足取货条件 |
| | | if (staProtocol.isLoading()) { |
| | | if (!listL.contains(staProtocol.getStaNo().intValue())) { |
| | | listL.add(staProtocol.getStaNo().intValue()); |
| | | } |
| | | } |
| | | } |
| | | if (listW.size()>=3){ |
| | | RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞"); |
| | | return false; |
| | | } |
| | | if (listL.size()>=3){ |
| | | RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞"); |
| | | return false; |
| | | } |
| | | } catch (Exception e){ |
| | | RgvErrCache.updateRgvErr(rgvNo,"1012检测异常:"+e.getMessage()); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | public boolean rgvOtherStatusEnable(RgvSlave slave) { |
| | | RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | if (rgvProtocolOther == null) { |
| | | return true; |
| | | } |
| | | if (rgvProtocolOther.statusEnable) { |
| | | // if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) { |
| | | return true; |
| | | // } |
| | | // } else if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && !staProtocol.isLoading()){ |
| | | // if (inSta.isDirectionOther()){ |
| | | // StaProtocol staProtocolOther = devpThread.getStation().get(inSta.getStaNoOther()); |
| | | // if (staProtocolOther == null) { |
| | | // return null; |
| | | // } |
| | | // // 判断是否满足取货条件 |
| | | // if (staProtocolOther.isAutoing() |
| | | // && staProtocolOther.getWorkNo() != 0) { |
| | | // TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo()); |
| | | // if (taskWrkOther != null) { |
| | | // return taskWrkOther; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // return null; |
| | | // } |
| | | // public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) { |
| | | // ArrayList<Integer> arrayList = new ArrayList<Integer>() {{ |
| | | // add(1009); |
| | | // add(1011); |
| | | // add(1012); |
| | | // add(1014); |
| | | // add(1016); |
| | | // }}; |
| | | // try{ |
| | | // |
| | | // DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId()); |
| | | // ArrayList<Integer> listW = new ArrayList<Integer>(); |
| | | // ArrayList<Integer> listL = new ArrayList<Integer>(); |
| | | // for (Integer staNo : arrayList){ |
| | | // StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | // if (staProtocol == null) { |
| | | // RgvErrCache.updateRgvErr(rgvNo,staNo+"站点数据丢失"); |
| | | // return false; |
| | | // } |
| | | // // 判断是否满足取货条件 |
| | | // if (staProtocol.getWorkNo() != 0) { |
| | | // if (!listW.contains(staProtocol.getWorkNo())) { |
| | | // listW.add(staProtocol.getWorkNo()); |
| | | // } |
| | | // } |
| | | // // 判断是否满足取货条件 |
| | | // if (staProtocol.isLoading()) { |
| | | // if (!listL.contains(staProtocol.getStaNo())) { |
| | | // listL.add(staProtocol.getStaNo()); |
| | | // } |
| | | // } |
| | | // } |
| | | // if (listW.size()>=3){ |
| | | // RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞"); |
| | | // return false; |
| | | // } |
| | | // if (listL.size()>=3){ |
| | | // RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞"); |
| | | // return false; |
| | | // } |
| | | // } catch (Exception e){ |
| | | // RgvErrCache.updateRgvErr(rgvNo,"1012检测异常:"+e.getMessage()); |
| | | // return false; |
| | | // } |
| | | // return true; |
| | | // } |
| | | // |
| | | // public boolean rgvOtherStatusEnable(RgvSlave slave) { |
| | | // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // if (rgvProtocolOther == null) { |
| | | // return true; |
| | | // } |
| | | // if (rgvProtocolOther.statusEnable) { |
| | | //// if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) { |
| | | // return true; |
| | | //// } |
| | | // } |
| | | // return false; |
| | | // } |
| | | // |
| | | // public synchronized void taskStart() { |
| | | // for (RgvSlave rgvSlave : slaveProperties.getRgv()) { |
| | | // try { |
| | | // if (rgvDetection(rgvSlave)) { |
| | | // String taskNoNow = rgvOtherTaskWrk(rgvSlave); |
| | | // List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true)); |
| | | // boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave); |
| | | // if (basDevpPositions.isEmpty()) { |
| | | // log.error("获取所有站点信息异常"); |
| | | // try{ |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成:获取所有站点信息异常"); |
| | | // } catch (Exception e2){ |
| | | // } |
| | | // continue; |
| | | // } |
| | | // List<TaskWrk> taskWrkList = new ArrayList<>(); |
| | | // List<Integer> staList = new ArrayList<>(); |
| | | // for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) { |
| | | // TaskWrk taskWrk = deviceDetection(inSta); |
| | | // if (taskWrk != null) { |
| | | // if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue; |
| | | // taskWrkList.add(taskWrk); |
| | | // staList.add(inSta.getStaNo()); |
| | | // } |
| | | // } |
| | | // |
| | | // if (taskWrkList.isEmpty() || staList.isEmpty()) continue; |
| | | // |
| | | // boolean sign = false; |
| | | // |
| | | // if (rgvOtherStatusEnable(rgvSlave)) { |
| | | // //分成上下两部分任务 |
| | | // List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions, itSmall); |
| | | // 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); |
| | | // |
| | | // //所属部分就进取货 |
| | | // |
| | | // //筛选范围内任务 |
| | | // //就近排序 |
| | | // //筛选在范围任务 |
| | | // Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance); |
| | | // List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions); |
| | | // |
| | | // if (!sign && staList.size()==1){ |
| | | // if (rgvOtherIDLEOther(rgvSlave)){ |
| | | // if (!rgvOtherIDLE(rgvSlave,staList.get(0))){ |
| | | // System.out.println("空闲就近跳过==="+rgvSlave.getId()+"==="); |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过"); |
| | | // |
| | | // sign=true; |
| | | // } |
| | | // } |
| | | // if (sign){ |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staList.get(0))) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); |
| | | // |
| | | // sign=false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // } else { |
| | | // return; |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // if(!sign){ |
| | | // for (Integer staNoNow : belongToRange) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // System.out.println("全范围执行==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // 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)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | // if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | // System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // if (!sign && staList.size()==1){ |
| | | // if (rgvOtherIDLEOther2(rgvSlave)){ |
| | | // if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){ |
| | | // System.out.println("运行就近跳过==="+rgvSlave.getId()+"==="); |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过"); |
| | | // |
| | | // sign=true; |
| | | // } |
| | | // } |
| | | // if (sign){ |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staList.get(0))) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("运行就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); |
| | | // |
| | | // sign=false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // } else { |
| | | // return; |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // |
| | | // |
| | | // if (!sign && staList.size()>1) { |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // }else if (!sign && staList.size()==1){ |
| | | // BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0))); |
| | | // if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){ |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // |
| | | // |
| | | // if (!sign && staList.size()>1) { |
| | | // // 半边区域内取货任务 |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | // if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | // System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk); |
| | | // System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); |
| | | // |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // if (!sign && staList.size()>1) { |
| | | // for (Integer staNoNow : rangeListOther) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"==="); |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // |
| | | // }else if (!sign && staList.size()==1){ |
| | | // for (Integer staNoNow : rangeList) { |
| | | // for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { |
| | | // if (rgvStn.getStaNo().equals(staNoNow)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ |
| | | // if (rgvSuper.getStaNo().equals(outStaNo)){ |
| | | // System.out.println("因最远执行半边区域内放货任务==="+rgvSlave.getId()+"==="); |
| | | // BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); |
| | | // if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务"); |
| | | // |
| | | // } 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)) { |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk != null) { |
| | | // Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { |
| | | // if (rgvStnOut.getStaNo().equals(outStaNo)) { |
| | | // sign = taskGenerate(rgvSlave, rgvStn, 0); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign) { |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } catch (Exception e) { |
| | | // log.error("任务生成失败===》异常信息:{}", e.getMessage()); |
| | | // try{ |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "指令生成失败"); |
| | | // } catch (Exception e2){ |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // |
| | | // public boolean taskGenerate(RgvSlave rgvSlave, RgvSlave.RgvStn rgvStn, Integer sign) { |
| | | // try { |
| | | // RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | // TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | // DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | // |
| | | // TaskProtocol issuedTake = new TaskProtocol(); |
| | | // TaskProtocol issuedPut = new TaskProtocol(); |
| | | // try { |
| | | // ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | // if (allTaskProtocol.size() > 0) { |
| | | // return false; |
| | | // } |
| | | // TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | // if (taskWrk == null) { |
| | | // return false; |
| | | // } |
| | | //// Integer targetPointConvert = taskWrk.getTargetPointConvert(); |
| | | // Integer targetPointConvert = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | // if (targetPointConvert == null) { |
| | | // return false; |
| | | // } |
| | | // if (targetPointConvert == 1009){ |
| | | // if (!deviceDetection(rgvStn, rgvSlave.getId())){ |
| | | // return false; |
| | | // } |
| | | // } |
| | | // try{ |
| | | // devpThread.setPakMkTask(rgvStn.getStaNo(), false); |
| | | // } catch (Exception e2){ |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"小车任务下发标记更新失败"); |
| | | // } |
| | | // |
| | | // |
| | | // BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo())); |
| | | // BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert)); |
| | | // //执行 |
| | | // issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo())); |
| | | // issuedTake.setTaskStatus(2); |
| | | // issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo()); |
| | | // issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId()); |
| | | // issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); |
| | | // issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition()); |
| | | // issuedTake.setIsRunning(1); |
| | | // issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1); |
| | | // |
| | | // |
| | | // issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo())); |
| | | // issuedPut.setTaskStatus(3); |
| | | // issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo()); |
| | | // issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId()); |
| | | // issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | // issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition()); |
| | | // issuedPut.setIsRunning(1); |
| | | // issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1); |
| | | // |
| | | // try{ |
| | | // if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){ |
| | | // Date now = new Date(); |
| | | // taskWrk.setStatus(TaskStatusType.OVER.id); |
| | | // taskWrk.setModiTime(now);//更新时间 |
| | | // taskWrk.setCompleteTime(now);//完结时间 |
| | | // taskWrkService.updateById(taskWrk); |
| | | // } |
| | | // } catch (Exception e){ |
| | | // |
| | | // } |
| | | // } catch (Exception e) { |
| | | // log.error("任务生成失败issued1===》异常信息:{}", e.getMessage()); |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued1"); |
| | | // |
| | | // try{ |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "任务生成失败issued1"); |
| | | // } catch (Exception e2){ |
| | | // } |
| | | // return false; |
| | | // } |
| | | // |
| | | // switch (sign) { |
| | | // case 1: |
| | | // taskProtocolCache.updateTaskProtocol(issuedTake); |
| | | // break; |
| | | // case 2: |
| | | // taskProtocolCache.updateTaskProtocol(issuedPut); |
| | | // break; |
| | | // default: |
| | | // taskProtocolCache.updateTaskProtocol(issuedTake); |
| | | // taskProtocolCache.updateTaskProtocol(issuedPut); |
| | | // break; |
| | | // } |
| | | // } catch (Exception e) { |
| | | // log.error("任务生成失败issued2===》异常信息:{}", e.getMessage()); |
| | | // RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued2"); |
| | | // |
| | | // try{ |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "站点任务生成失败issued2"); |
| | | // } catch (Exception e2){ |
| | | // } |
| | | // } |
| | | // return true; |
| | | // } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | public boolean taskGenerate(RgvSlave rgvSlave, RgvSlave.RgvStn rgvStn, Integer sign) { |
| | | try { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); |
| | | |
| | | TaskProtocol issuedTake = new TaskProtocol(); |
| | | TaskProtocol issuedPut = new TaskProtocol(); |
| | | try { |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | if (allTaskProtocol.size() > 0) { |
| | | return false; |
| | | } |
| | | TaskWrk taskWrk = deviceDetection(rgvStn); |
| | | if (taskWrk == null) { |
| | | return false; |
| | | } |
| | | // Integer targetPointConvert = taskWrk.getTargetPointConvert(); |
| | | Integer targetPointConvert = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); |
| | | if (targetPointConvert == null) { |
| | | return false; |
| | | } |
| | | if (targetPointConvert == 1009){ |
| | | if (!deviceDetection(rgvStn, rgvSlave.getId())){ |
| | | return false; |
| | | } |
| | | } |
| | | try{ |
| | | devpThread.setPakMkTask(rgvStn.getStaNo(), false); |
| | | } catch (Exception e2){ |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"小车任务下发标记更新失败"); |
| | | } |
| | | |
| | | |
| | | BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo())); |
| | | BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert)); |
| | | //执行 |
| | | issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo())); |
| | | issuedTake.setTaskStatus(2); |
| | | issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo()); |
| | | issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId()); |
| | | issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); |
| | | issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition()); |
| | | issuedTake.setIsRunning(1); |
| | | issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1); |
| | | |
| | | |
| | | issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo())); |
| | | issuedPut.setTaskStatus(3); |
| | | issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo()); |
| | | issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId()); |
| | | issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition()); |
| | | issuedPut.setIsRunning(1); |
| | | issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1); |
| | | |
| | | try{ |
| | | if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){ |
| | | Date now = new Date(); |
| | | taskWrk.setStatus(TaskStatusType.OVER.id); |
| | | taskWrk.setModiTime(now);//更新时间 |
| | | taskWrk.setCompleteTime(now);//完结时间 |
| | | taskWrkService.updateById(taskWrk); |
| | | } |
| | | } catch (Exception e){ |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("任务生成失败issued1===》异常信息:{}", e.getMessage()); |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued1"); |
| | | |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "任务生成失败issued1"); |
| | | } catch (Exception e2){ |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | switch (sign) { |
| | | case 1: |
| | | taskProtocolCache.updateTaskProtocol(issuedTake); |
| | | break; |
| | | case 2: |
| | | taskProtocolCache.updateTaskProtocol(issuedPut); |
| | | break; |
| | | default: |
| | | taskProtocolCache.updateTaskProtocol(issuedTake); |
| | | taskProtocolCache.updateTaskProtocol(issuedPut); |
| | | break; |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("任务生成失败issued2===》异常信息:{}", e.getMessage()); |
| | | RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued2"); |
| | | |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "站点任务生成失败issued2"); |
| | | } catch (Exception e2){ |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | } |