/**
   * 缓存位置信息汇报时间点,判断位置汇报数据是否顺序报送,排除补报数据干扰
   *
   * @return
   */
  private boolean isSort(VehicleMessageBean vehicleMessage) {
    if (vehicleMessage == null) {
      return false;
    }

    String msgType = vehicleMessage.getMsgType();
    if ("0".equals(msgType) || "1".equals(msgType)) {

      String vid = vehicleMessage.getVid();
      Long utc = vehicleMessage.getUtc();

      if (utc == null) {
        return false;
      }

      String key = vid + "_utc";
      if (!tmpCache.containsKey(key)) {
        tmpCache.put(key, utc);
        return true;
      }

      if (utc >= (tmpCache.get(key))) {
        tmpCache.put(key, utc);
        return true;
      } else {
        // 补传位置信息汇报数据返回false
        return false;
      }
    }

    return true;
  }
  /** 线程执行体 */
  public void run() {
    logger.info("插件管理应用启动");
    // 启动所有接收分析管理线程
    VehicleMessageBean vehicleMessage = null;
    Vector<PacketAnalyser> vA;
    int thnum = 0;

    // 获取插件KEY
    List<String> kyList = new ArrayList<String>();
    Set<String> st = taAnalyser.keySet();
    Iterator<String> it = st.iterator();
    while (it.hasNext()) {
      kyList.add(it.next());
    } // End while

    while (isRunning) {
      try {
        vehicleMessage = vPacket.take();
        //				String alarmType = vehicleMessage.getAlarmtype();
        //				logger.info("插件管理器收到数据,准备分发给业务类。-----"+alarmType);
        // String[] typeArray = alarmType.split(",");
        // 按类型进行分配
        if (isSort(vehicleMessage)) {
          for (String type : kyList) {
            vA = taAnalyser.get(type);
            if (vA == null || vA.size() == 0) continue;
            thnum = (int) (Math.abs(vehicleMessage.getVid().hashCode()) % vA.size());
            // logger.info("插件管理器将收到的数据----分发给业务类。-----"+type+"下的子线程>>"+thnum);
            // 此处需要克隆一下,然后将消息分发到不同的队列 add liangjian by 2012-11-15 15:44:29
            VehicleMessageBean vehicleMessageNew =
                (VehicleMessageBean) BeanUtils.cloneBean(vehicleMessage);
            processCoordinatesByACC(vehicleMessageNew, vehicleMessageNew.getVid());
            vA.elementAt(thnum).addPacket(vehicleMessageNew);
          }
        }
        // logger.debug("插件管理线程" + threadId + "," + vPacket.size());
      } catch (Exception e) {
        logger.error("插件管理线程出错.", e);
      }
    } // End While
    logger.info("插件管理服务停止");
  }