@Override
  public List<EstimateReport> query(Map<String, String> conditions) {
    Uri uri = EstimateReportMetaData.CONTENT_URI;

    StringBuilder selection = new StringBuilder();
    String[] selectionArgs = new String[conditions.size()];

    int cnt = 0;
    for (Map.Entry<String, String> entry : conditions.entrySet()) {
      if (cnt > 0) {
        selection.append(" and ");
      }
      selection.append(entry.getKey() + "=?");
      selectionArgs[cnt] = entry.getValue();
      cnt++;
    }

    Cursor c =
        getContext()
            .getContentResolver()
            .query(uri, null, selection.toString(), selectionArgs, null);
    if (c != null) {
      int iReportId = c.getColumnIndex(EstimateReportMetaData.ESTIMATE_REPORT_ID);
      int iProjectId = c.getColumnIndex(EstimateReportMetaData.PROJECT_ID);
      int iProjectName = c.getColumnIndex(EstimateReportMetaData.PROJECT_NAME);
      int iAreaId = c.getColumnIndex(EstimateReportMetaData.AREA_ID);
      int iAreaName = c.getColumnIndex(EstimateReportMetaData.AREA_NAME);
      int iCategory = c.getColumnIndex(EstimateReportMetaData.CATEGORY);
      int iCheckType = c.getColumnIndex(EstimateReportMetaData.CHECK_TYPE);
      int iReportDate = c.getColumnIndex(EstimateReportMetaData.REPORT_DATE);
      int iInChargePerson = c.getColumnIndex(EstimateReportMetaData.IN_CHARGE_PERSON);
      int iReporter = c.getColumnIndex(EstimateReportMetaData.REPORTER);
      int iSupervisionId = c.getColumnIndex(EstimateReportMetaData.SUPERVISION_ID);
      int iSupervisionName = c.getColumnIndex(EstimateReportMetaData.SUPERVISION_NAME);
      int iConstractionId = c.getColumnIndex(EstimateReportMetaData.CONSTRACTION_ID);
      int iConstractionName = c.getColumnIndex(EstimateReportMetaData.CONSTRACTION_NAME);
      int iRemark = c.getColumnIndex(EstimateReportMetaData.REMARK);
      int iGradeSCSL = c.getColumnIndex(EstimateReportMetaData.GRADE_SCSL);
      int iGradeMPFH = c.getColumnIndex(EstimateReportMetaData.GRADE_MPFH);
      int iGradeGGBW = c.getColumnIndex(EstimateReportMetaData.GRADE_GGBW);
      int iGradeWLMGG = c.getColumnIndex(EstimateReportMetaData.GRADE_WLMGG);
      int iGradeYLGG = c.getColumnIndex(EstimateReportMetaData.GRADE_YLGG);
      int iGradeXMZH = c.getColumnIndex(EstimateReportMetaData.GRADE_XMZH);
      int iGradeSCDF = c.getColumnIndex(EstimateReportMetaData.GRADE_SCDF);
      int iGradeZLKF = c.getColumnIndex(EstimateReportMetaData.GRADE_ZLKF);
      int iGradeGLXW = c.getColumnIndex(EstimateReportMetaData.GRADE_GLXW);
      int iGradeAQWM = c.getColumnIndex(EstimateReportMetaData.GRADE_AQWM);
      int iGradeZHDF = c.getColumnIndex(EstimateReportMetaData.GRADE_ZHDF);
      int iDownloadStatus = c.getColumnIndex(EstimateReportMetaData.DOWNLOAD_STATUS);

      List<EstimateReport> list = new ArrayList<>();
      c.moveToFirst();
      while (!c.isAfterLast()) {
        EstimateReport item = new EstimateReport();
        item.setId(c.getInt(iReportId));
        item.setProjectId(c.getString(iProjectId));
        item.setProjectName(c.getString(iProjectName));
        item.setAreaId(c.getString(iAreaId));
        item.setAreaName(c.getString(iAreaName));
        item.setCategory(c.getInt(iCategory));
        item.setCheckType(c.getInt(iCheckType));
        item.setReportDate(c.getString(iReportDate));
        item.setInChargePerson(c.getString(iInChargePerson));
        item.setReporter(c.getString(iReporter));
        item.setSupervisionId(c.getString(iSupervisionId));
        item.setSupervisionName(c.getString(iSupervisionName));
        item.setConstractionId(c.getString(iConstractionId));
        item.setConstractionName(c.getString(iConstractionName));
        item.setRemark(c.getString(iRemark));
        item.setGradeSCSL(c.getDouble(iGradeSCSL));
        item.setGradeMPFH(c.getDouble(iGradeMPFH));
        item.setGradeGGBW(c.getDouble(iGradeGGBW));
        item.setGradeWLMGG(c.getDouble(iGradeWLMGG));
        item.setGradeYLGG(c.getDouble(iGradeYLGG));
        item.setGradeXMZH(c.getDouble(iGradeXMZH));
        item.setGradeSCDF(c.getDouble(iGradeSCDF));
        item.setGradeZLKF(c.getDouble(iGradeZLKF));
        item.setGradeGLXW(c.getDouble(iGradeGLXW));
        item.setGradeAQWM(c.getDouble(iGradeAQWM));
        item.setGradeZHDF(c.getDouble(iGradeZHDF));
        item.setDownloadStatus(c.getInt(iDownloadStatus));
        list.add(item);

        c.moveToNext();
      }
      c.close();

      return list;
    }

    return null;
  }