hrv_statistics_data.dart 6.15 KB
class HrvStatisticsDataV2 {
  HrvStatisticsDataV2({
    this.hrvTrendList,
    this.hrvDistributionList,
    this.qoqHrvDistributionList,
    this.hrvMin,
    this.hrvMax,
    this.dailyDistributionList,
  });

  HrvStatisticsDataV2.fromJson(dynamic json) {
    if (json['hrv_trend_list'] != null) {
      hrvTrendList = [];
      json['hrv_trend_list'].forEach((v) {
        hrvTrendList?.add(HrvTrendList.fromJson(v));
      });
    }
    if (json['hrv_distribution_list'] != null) {
      hrvDistributionList = [];
      json['hrv_distribution_list'].forEach((v) {
        hrvDistributionList?.add(HrvDistributionList.fromJson(v));
      });
    }
    if (json['qoq_hrv_distribution_list'] != null) {
      qoqHrvDistributionList = [];
      json['qoq_hrv_distribution_list'].forEach((v) {
        qoqHrvDistributionList?.add(QoqHrvDistributionList.fromJson(v));
      });
    }
    hrvMin = json['hrv_min'] != null ? HrvMin.fromJson(json['hrv_min']) : null;
    hrvMax = json['hrv_max'] != null ? HrvMax.fromJson(json['hrv_max']) : null;
    if (json['daily_distribution_list'] != null) {
      dailyDistributionList = [];
      json['daily_distribution_list'].forEach((v) {
        dailyDistributionList?.add(DailyDistributionList.fromJson(v));
      });
    }
  }

  List<HrvTrendList>? hrvTrendList;
  /// 当前区间,每日综合压力
  List<HrvDistributionList>? hrvDistributionList;
  /// 环比(上周上月上年)区间,每日综合压力
  List<QoqHrvDistributionList>? qoqHrvDistributionList;
  HrvMin? hrvMin;
  HrvMax? hrvMax;
  /// 年,每日综合压力, 只有年需要塞这个数据
  List<DailyDistributionList>? dailyDistributionList;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    if (hrvTrendList != null) {
      map['hrv_trend_list'] = hrvTrendList?.map((v) => v.toJson()).toList();
    }
    if (hrvDistributionList != null) {
      map['hrv_distribution_list'] =
          hrvDistributionList?.map((v) => v.toJson()).toList();
    }
    if (qoqHrvDistributionList != null) {
      map['qoq_hrv_distribution_list'] =
          qoqHrvDistributionList?.map((v) => v.toJson()).toList();
    }
    if (hrvMin != null) {
      map['hrv_min'] = hrvMin?.toJson();
    }
    if (hrvMax != null) {
      map['hrv_max'] = hrvMax?.toJson();
    }
    if (dailyDistributionList != null) {
      map['daily_distribution_list'] =
          dailyDistributionList?.map((v) => v.toJson()).toList();
    }
    return map;
  }
}

class DailyDistributionList {
  DailyDistributionList({
    this.date,
    this.hrvLevel,
    this.comprehensiveStressScore,
  });

  DailyDistributionList.fromJson(dynamic json) {
    date = json['date'] ?? json['time_key'];
    hrvLevel = json['hrv_level'] ?? json['stress_state'] ?? json['stress_id'];
    comprehensiveStressScore = json['comprehensive_stress_score'];
  }

  Object? date;
  Object? hrvLevel;
  num? comprehensiveStressScore;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['date'] = date;
    map['hrv_level'] = hrvLevel;
    if (comprehensiveStressScore != null) {
      map['comprehensive_stress_score'] = comprehensiveStressScore;
    }
    return map;
  }
}

class HrvMax {
  HrvMax({
    this.value,
    this.timeList,
  });

  HrvMax.fromJson(dynamic json) {
    value = json['value'];
    timeList = json['time_list'] != null ? json['time_list'].cast<num>() : [];
  }

  num? value;
  List<num>? timeList;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['value'] = value;
    map['time_list'] = timeList;
    return map;
  }
}

class HrvMin {
  HrvMin({
    this.value,
    this.timeList,
  });

  HrvMin.fromJson(dynamic json) {
    value = json['value'];
    timeList = json['time_list'] != null ? json['time_list'].cast<num>() : [];
  }

  num? value;
  List<num>? timeList;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['value'] = value;
    map['time_list'] = timeList;
    return map;
  }
}

class QoqHrvDistributionList {
  QoqHrvDistributionList({
    this.stressState,
    this.dayCounts,
  });

  QoqHrvDistributionList.fromJson(dynamic json) {
    stressState = json['stress_state'];
    dayCounts = json['day_counts'];
  }

  num? stressState;
  num? dayCounts;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['stress_state'] = stressState;
    map['day_counts'] = dayCounts;
    return map;
  }
}

class HrvDistributionList {
  HrvDistributionList({
    this.stressId,
    this.dayCounts,
  });

  HrvDistributionList.fromJson(dynamic json) {
    stressId = json['stress_id'];
    dayCounts = json['day_counts'];
  }

  num? stressId;
  num? dayCounts;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['stress_id'] = stressId;
    map['day_counts'] = dayCounts;
    return map;
  }
}

class HrvTrendList {
  HrvTrendList({
    this.timeKey,
    this.hrvAverage,
    this.hrAverage,
    this.lastRestingHrValue,
    this.comprehensiveStressScore,
    this.state,
  });

  HrvTrendList.fromJson(dynamic json) {
    timeKey = json['time_key'];
    hrvAverage = _parseDouble(json['hrv_average']);
    hrAverage = _parseDouble(json['hr_average']);
    lastRestingHrValue = _parseInt(json['last_resting_hr_value']);
    comprehensiveStressScore =
        _parseDouble(json['comprehensive_stress_score']);
    state = _parseInt(json['state']);
  }

  Object? timeKey;
  double? hrvAverage;
  double? hrAverage;
  int? lastRestingHrValue;
  double? comprehensiveStressScore;
  /// 当天综合压力
  int? state;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['time_key'] = timeKey;
    map['hrv_average'] = hrvAverage;
    map['hr_average'] = hrAverage;
    map['last_resting_hr_value'] = lastRestingHrValue;
    map['comprehensive_stress_score'] = comprehensiveStressScore;
    map['state'] = state;
    return map;
  }
}

double? _parseDouble(Object? value) {
  if (value == null) return null;
  if (value is num) return value.toDouble();
  if (value is String) return double.tryParse(value);
  return null;
}

int? _parseInt(Object? value) {
  if (value == null) return null;
  if (value is num) return value.toInt();
  if (value is String) return int.tryParse(value);
  return null;
}