예제 #1
0
  // 分析实时数据
  private void analyseREAl() throws Exception {
    try {
      // 总里程、总油耗等
      float COUNT_MILEAGE_START = 0; // 总行车里程开始
      float COUNT_MILEAGE = 0; // 总行车里程
      float MILEAGE = 0; // 行车里程(当日差值)
      float COUNT_OIL_TOTAL_START = 0; // 总燃油消耗开始
      float COUNT_OIL_TOTAL = 0; // 总燃油消耗
      float OIL = 0; // 燃油消耗(当日差值)	
      String OIL_INSTANT = "0";
      DecimalFormat def = new DecimalFormat(".#####");
      DayReport reportResult = new DayReport(); // 存当日累计结果
      List<RealTimeRecord> rows = realTimeRecord;
      RealTimeRecord cSPerv = null, CsNonce = null, perv = null, nonce = null;
      // plPerv = null, plNonce = null,
      float diff = 0;
      // reportTimeSpace  90 流水表数据间隔,判断是否连续
      long reportTimeSpace = Long.valueOf(Config.props.getProperty("reportTimeSpace"));
      boolean continuous;

      float IDLAIR_SPD = (float) 2; // 车速阀值(km/h)-怠速空调	
      float IDLAIR_RPM = 800; // 发动机转速(r/min)-怠速空调	
      float IDLAIR_TIME = 10 * 60; // 持续时间(min)-怠速空调
      long reltime = 10; // 单条记录的持续时间
      int po = 0; // 连续的时候赋值为0,断开开的时候加1,如果大于等于2则说明前一点为为单点
      HarmDefBean hdf = HarmDefCacheManager.harmdefMap.get(strVin);
      if (hdf != null) {
        // 空调怠速
        if (hdf.getIdlair_spd() != null
            && hdf.getIdlair_rpm() != null
            && hdf.getIdlair_time() != null) {
          IDLAIR_SPD = Float.valueOf(hdf.getIdlair_spd()).floatValue();
          IDLAIR_RPM = Float.valueOf(hdf.getIdlair_rpm()).floatValue();
          IDLAIR_TIME = Float.valueOf(hdf.getIdlair_time()).floatValue();
        }
      }
      if (null == rows || 0 == rows.size()) {
        // 如果没有实时记录将不计算
        return;
      }
      // 分析实时数据的第一条和最后一条
      // analyseBeginEnd(rows);
      // try {
      if (rows != null & rows.size() > 0) {
        // 先赋值总里程、总油耗、及瞬时油耗
        if (rows.size() == 1) { // 只有一条记录时
          if (rows.get(0).getMILEAGE() != null && !rows.get(0).getMILEAGE().equals("FFFF")) {
            COUNT_MILEAGE = Float.parseFloat(rows.get(0).getMILEAGE());
          } else {
            COUNT_MILEAGE = 0;
          }
          if (rows.get(0).getOIL_TOTAL() != null && !rows.get(0).getOIL_TOTAL().equals("FFFF")) {
            COUNT_OIL_TOTAL = Float.parseFloat(rows.get(0).getOIL_TOTAL());
          } else {
            COUNT_OIL_TOTAL = 0;
          }
          if (rows.get(0).getOIL_INSTANT().equals("FFFF")) {
            OIL_INSTANT = "0";
          } else {
            OIL_INSTANT = rows.get(0).getOIL_INSTANT();
          }
        }
        // 再赋值总行车里程开始
        if (rows.get(0).getMILEAGE() != null && !rows.get(0).getMILEAGE().equals("FFFF")) {
          COUNT_MILEAGE_START = Float.parseFloat(rows.get(0).getMILEAGE());
        }
        // 总燃油消耗开始
        if (rows.get(0).getOIL_TOTAL() != null && !rows.get(0).getOIL_TOTAL().equals("FFFF")) {
          COUNT_OIL_TOTAL_START = Float.parseFloat(rows.get(0).getOIL_TOTAL());
        }

        perv = rows.get(0);
        // 如果是多条记录,继续计算   ---------开始
        for (int i = 1; i < rows.size(); i++) {
          // 总里程,总油耗
          if (rows.get(0).getMILEAGE() != null && !rows.get(i).getMILEAGE().equals("FFFF")) {
            if (COUNT_MILEAGE_START == 0) {
              COUNT_MILEAGE_START = Float.parseFloat(rows.get(i).getMILEAGE());
            } else {
              COUNT_MILEAGE = Float.parseFloat(rows.get(i).getMILEAGE());
            }
          }
          if (rows.get(0).getOIL_TOTAL() != null && !rows.get(i).getOIL_TOTAL().equals("FFFF")) {
            if (COUNT_OIL_TOTAL_START == 0) {
              COUNT_OIL_TOTAL_START = Float.parseFloat(rows.get(i).getOIL_TOTAL());
            } else {
              COUNT_OIL_TOTAL = Float.parseFloat(rows.get(i).getOIL_TOTAL());
            }
          }
          if (rows.get(i).getOIL_INSTANT() != null
              && !rows.get(i).getOIL_INSTANT().equals("FFFF")) {
            OIL_INSTANT = rows.get(i).getOIL_INSTANT();
          }
          nonce = rows.get(i);

          diff =
              (df.parse(nonce.getTERMINAL_TIME()).getTime()
                      - df.parse(perv.getTERMINAL_TIME()).getTime())
                  / 1000;

          if (diff >= 0 && diff < reportTimeSpace) {
            continuous = true; // 两条记录连续
          } else {
            continuous = false; // 两条记录不连续
          }
          if (diff == 0) {
            diff = reltime; // 如果为零付给时间。
          }
          // 计算各种持续时间
          if (continuous) { // 记录连续的时候累计时间
            po = 0;

          } else { // 不连续
            po = po + 1;
            if (po >= 2) { // 前一点为孤立点
            }
          }
          perv = nonce;
        }
        // ---------------------  结束

        // 总里程,总油耗 计算及入库
        MILEAGE = COUNT_MILEAGE - COUNT_MILEAGE_START;
        OIL = COUNT_OIL_TOTAL - COUNT_OIL_TOTAL_START;
        // 增加对负数的修正2011-08-18
        if (MILEAGE < 0) {
          MILEAGE = 0;
        }
        if (OIL < 0) {
          OIL = 0;
        }

        reportDAO.updateOilMieage(
            def.format(COUNT_MILEAGE),
            def.format(MILEAGE),
            def.format(COUNT_OIL_TOTAL),
            def.format(OIL),
            strVin,
            strDate); // 更新油耗
      }
    } catch (Exception e) {
      log.info("实时数据异常" + e.toString());
      e.printStackTrace();
      throw new Exception("分析实时数据时发生异常:" + e.getMessage());
    }
  }
예제 #2
0
  @SuppressWarnings("static-access")
  public void run() {
    log.info("线程开始======strVin:" + strVin + "strDate:" + strDate);
    MyCountDown myCount = MyCountDown.instance();
    myCount.countAdd();
    try {
      // 获取实时数据
      this.realTimeRecord = reportDAO.getRecord(strVin, strDate);
      analyseREAl(); // 分析实时数据
      reportDAO.updateCsdsDataXc(strVin, strDate, "32");
      // 超转
      reportDAO.updateCsdsDataXc(strVin, strDate, "49");
      // 空档滑行
      reportDAO.updateCsdsDataXc(strVin, strDate, "46");
      // 超长怠速
      reportDAO.updateCsdsDataXc(strVin, strDate, "50");
      // 空调怠速
      reportDAO.updateCsdsDataXc(strVin, strDate, "51");
      // 非经济区运行
      reportDAO.updateCsdsDataXc(strVin, strDate, "81");
      // 疲劳驾驶
      reportDAO.updateCsdsDataXc(strVin, strDate, "33");
      // 生成非法点火,和告警明细
      reportDAO.makczdetail(strVin, strDate);
      // 校车异常乘车统计2012-03-14
      // reportDAO.xcYcStatistics(strVin, strDate);
      // 校车上座率统计2012-03-14
      // reportDAO.xcSzlStatistics(strVin, strDate);
      // 校车非法点火
      reportDAO.updateCsdsDataXc(strVin, strDate, "54");
      // 校车超载
      reportDAO.updateCsdsDataXc(strVin, strDate, "72");
      // 更新结束时间
      reportDAO.updateEndData(strVin, strDate);

      myCount.countDown(); // 线程结束
      log.info("线程结束======strVin:" + strVin + ",strDate:" + strDate);
      this.interrupted();
    } catch (Exception e) {
      myCount.countDown();
      e.printStackTrace();
      log.info("报表分析线程异常=strVin:" + strVin + ",strDate:" + strDate + e.toString());
      this.interrupted();
      return;
    }
  }