示例#1
0
文件: Task.java 项目: Lalio/workspace
  /**
   * ******************** 获得协议参数
   *
   * @param datas
   * @param dParam
   * @return
   */
  public float getParam(byte[] datas, MyDParam myDParam) {
    DParam dParam = myDParam.getdParam();

    int byteBegin = dParam.getDparamByteBegin();
    int byteLength = dParam.getDparamByteLength();
    int isByte = dParam.getDparamIsByte();
    float factory = dParam.getDparamFactor(); // 参数分辨率(倍数)
    float offset = dParam.getDparamOffset(); // 参数偏移值
    String byteDatas = dParam.getDparamByteDatas();

    float param = 0;

    if ((byteBegin + byteLength) <= datas.length) {
      byte[] dataArray = cutDatas(datas, byteBegin, byteLength); // 截取datas
      if (isByte == 0) {
        float tmpFloat = 0;

        if (dParam.getDparamHighAndLow() == 1) { // 大端法解析
          tmpFloat = byteTransformFloat_big(dataArray);
        } else { // 小端法解析
          tmpFloat = byteTransformFloat_small(dataArray);
        }

        if (tmpFloat == 0) {
          param = 0;
        } else {
          param = Math.round((tmpFloat * factory + offset) * 10) / 10;
        }

      } else {
        String[] bytedataArray = byteDatas.split(":");
        if (bytedataArray.length >= 4) {
          int bytelen = Integer.parseInt(bytedataArray[0]);
          int bytebeginbit = Integer.parseInt(bytedataArray[1]);
          int byteendbit = Integer.parseInt(bytedataArray[2]) + bytebeginbit;
          int bytefactor = Integer.parseInt(bytedataArray[3]);
          int tmpInt = 0;
          for (int i = Math.min(dataArray.length, bytelen) - 1; i >= 0; --i) {
            tmpInt |= dataArray[i];
            tmpInt = tmpInt << 4 * i;
          }
          String tmpString = toBinaryString(tmpInt);

          if (tmpString.length() - byteendbit < 0 || tmpString.length() - bytebeginbit < 0) {
            return 0;
          }

          tmpString =
              tmpString.substring(
                  tmpString.length() - byteendbit, tmpString.length() - bytebeginbit);

          param = (float) (new BigInteger(tmpString, 2).intValue() * bytefactor);
        }
      }

    } else {
      param = 0;
    }

    return param;
  }
示例#2
0
文件: Task.java 项目: Lalio/workspace
  private void begin(String vin, List<MyDParam> myDParams) throws Exception {

    Processing processing = new Processing();
    Date endTime = startDate;
    processing.setEndTime(endTime);
    processing.setVin(vin);
    List<Data> car_list = dataService.getAllDatas(vin, startDate);
    Data data;
    StringBuilder key = new StringBuilder(" (");
    key.append(
        "SN,VIN,Time,LocateIsValid,LocateTime,LocateLongitude,LocateLatitude,LocateSpeed,LocateDirection,");
    int sign = 0; // 批量插入数据的标志,等于0时需要获取key
    StringBuilder values = new StringBuilder();
    MyDParam myDParam;
    int size = myDParams.size();

    if (size == 0) {
      System.out.println(vin + " has not param to analys");

      if (Processer.vintime_map.get(vin) == null) {
        processingService.add(processing);
      } else {
        processingService.update(processing);
      }
      Processer.vintime_map.put(vin, endTime);

      return;
    }
    if (car_list.size() == 0) {
      System.out.println(vin + " has not data to analys");

      if (Processer.vintime_map.get(vin) == null) {
        processingService.add(processing);
      } else {
        processingService.update(processing);
      }
      Processer.vintime_map.put(vin, endTime);

      return;
    }

    // 获取表的字段
    // Map<String , String> single = new HashMap<String,
    // String>();////防止重复的参数放入key
    for (int i = 0; i < size; i++) {
      myDParam = myDParams.get(i);
      String namePinYin = myDParam.getdParam().getNamePinYin();
      if (namePinYin != null && !namePinYin.equals("")) {
        // //if (single.get(namePinYin) != null ) {
        // //System.out.println("double key :"+namePinYin+"   the name is :"
        // +myDParam.getdParam().getDparamName());
        // //continue;
        // //} else {
        // //single.put(namePinYin, "");

        key.append(namePinYin + ",");
        // }
      } else {
        key.append(pinyin(myDParam.getdParam().getDparamName()) + ","); // 获取表的字段名
      }
    }
    key = key.delete(key.length() - 1, key.length());
    key.append(") ");

    // 获取分析后的数据,并插入表中
    for (Iterator<Data> iterator = car_list.iterator(); iterator.hasNext(); ) {
      data = iterator.next();

      byte[] bDatas = null;

      StringBuilder value = new StringBuilder(" (");
      value.append(
          data.getSn()
              + ",'"
              + data.getVin()
              + "','"
              + data.getTime()
              + "',"
              + data.getLocateIsValid()
              + ",'"
              + data.getLocateTime()
              + "',"
              + data.getLocateLongitude()
              + ","
              + data.getLocateLatitude()
              + ","
              + data.getLocateSpeed()
              + ","
              + data.getLocateDirection()
              + ",");

      for (int i = 0; i < size; i++) { // 逐个分析参数
        myDParam = myDParams.get(i);
        bDatas = data.getDatas();
        endTime = data.getTime();
        processing.setEndTime(endTime);
        float param = getParam(bDatas, myDParam); // 解析数据

        if (myDParam.getdParam().getDparamIsMap() == 1) {
          int paramInt = (int) param;
          DparamMapValue dmv = myDParam.getDmv().get(paramInt);
          if (dmv == null) {
            value.append("'" + paramInt + "',");
          } else {
            value.append("'" + dmv.getValue() + "',");
          }

        } else {
          value.append(param + ",");
        }
      }

      value = value.delete(value.length() - 1, value.length());
      value.append(") ");

      values.append(value + ",");

      sign++;

      if (sign >= 100) {
        values = values.delete(values.length() - 1, values.length());
        // 插入参数
        dParamService.insertDParams(vin, key.toString(), values.toString());

        values.delete(0, values.length());
        sign = 1;
      }
    }
    if (values.length() == 0) {
      System.out.println(vin + " has no data at that time");
    } else {
      values = values.delete(values.length() - 1, values.length());
      // 插入参数
      dParamService.insertDParams(vin, key.toString(), values.toString());

      values.delete(0, values.length());
    }

    if (Processer.vintime_map.get(vin) == null) {
      processingService.add(processing);
    } else {
      processingService.update(processing);
    }
    Processer.vintime_map.put(vin, endTime);
  }