You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
254 lines
8.2 KiB
254 lines
8.2 KiB
// |
|
// DataBaseModel.swift |
|
// FireBoltt |
|
// |
|
// Created by lemo. on 2020/6/7. |
|
// Copyright © 2020 Sheldon. All rights reserved. |
|
// |
|
|
|
import Foundation |
|
|
|
class StepModel: BaseJsonModel { |
|
// mac地址 |
|
var macID: String = "" |
|
/// 计步日期(2017-01-16) |
|
var dataDate: String = "" |
|
/// 步数 |
|
var stepNumber: Int = 0 |
|
/// 计步距离(米) |
|
var stepDistance: Int = 0 |
|
/// 计步卡路里(千卡) |
|
var stepCalorie: Float = 0 |
|
/// 计步时长(分钟) |
|
var stepDuration: Int = 0 |
|
/// 计步详情(step|cal|m|时段,...) |
|
var stepDetails: String = "0|0.0|0.0|0,0|0.0|0.0|1,0|0.0|0.0|2,0|0.0|0.0|3,0|0.0|0.0|4,0|0.0|0.0|5,0|0.0|0.0|6,0|0.0|0.0|7,0|0.0|0.0|8,0|0.0|0.0|9,0|0.0|0.0|10,0|0.0|0.0|11,0|0.0|0.0|12,0|0.0|0.0|13,0|0.0|0.0|14,0|0.0|0.0|15,0|0.0|0.0|16,0|0.0|0.0|17,0|0.0|0.0|18,0|0.0|0.0|19,0|0.0|0.0|20,0|0.0|0.0|21,0|0.0|0.0|22,0|0.0|0.0|23" |
|
|
|
|
|
} |
|
|
|
class SleepModel: BaseJsonModel { |
|
// mac地址 |
|
var macID: String = "" |
|
/// 睡眠日期(2018-06-20) |
|
var dataDate: String = "" |
|
/// 深睡时长 |
|
var deepSleepDuration: Int = 0 |
|
/// 浅睡时长 |
|
var lightSleepDuration: Int = 0 |
|
/// 清醒时长 |
|
var awakeDuration: Int = 0 |
|
/// 总睡眠时长 |
|
var totalSleepDuration: Int = 0 |
|
/// 入睡时间(2020-04-16 21:04) |
|
var fallingSleepTimes: String = "" |
|
/// 醒来时间 |
|
var awakeTimes: String = "" |
|
/// 醒来次数 |
|
var awakeNumber: Int = 0 |
|
/// 睡眠详情数据(睡眠类型|开始时间戳|持续时长|结束时间戳,..) 睡眠类型:0: 未进入睡眠 1:轻度睡眠 2:深度睡眠 |
|
var sleepDetails: String = "" |
|
|
|
func getToatlSleepTimeStr() -> String { |
|
return "\(totalSleepDuration / 60)h \(totalSleepDuration % 60)m" |
|
} |
|
} |
|
|
|
class HeartRateModel: BaseJsonModel { |
|
// mac地址 |
|
var macID: String = "" |
|
/// 心率日期(2018-06-20) |
|
var dataDate: String = "" |
|
/// 最大心率 |
|
var heartMax: Int = 0 |
|
/// 最小心率 |
|
var heartMin: Int = 0 |
|
/// 平均心率 |
|
var heartAvg: Int = 0 |
|
/// 心率详情(心率值|时间戳,...) |
|
var heartDetails: String = "" |
|
} |
|
|
|
class TemperatureModel: BaseJsonModel { |
|
// mac地址 |
|
var macID: String = "" |
|
/// 体温日期(2018-06-20) |
|
var dataDate: String = "" |
|
/// 最大体温 |
|
var temperatureMax: Double = 0 |
|
/// 最小体温 |
|
var temperatureMin: Double = 0 |
|
/// 平均体温 |
|
var temperatureAvg: Double = 0 |
|
/// 体温详情(体温值|时间戳,...) |
|
var temperatureDetails: String = "" |
|
} |
|
|
|
class BloodPressureModel: BaseJsonModel { |
|
// mac地址 |
|
var macID: String = "" |
|
/// 日期(2018-06-20) |
|
var dataDate: String = "" |
|
/// 最大收缩压 |
|
var sbpMax: Int = 0 |
|
/// 最小收缩压 |
|
var sbpMin: Int = 0 |
|
/// 平均收缩压 |
|
var sbpAvg: Int = 0 |
|
/// 最大舒张压 |
|
var dbpMax: Int = 0 |
|
/// 最小舒张压 |
|
var dbpMin: Int = 0 |
|
/// 平均舒张压 |
|
var dbpAvg: Int = 0 |
|
/// 血压详情(收缩压值|舒张压值|时间戳,...) |
|
var details: String = "" |
|
} |
|
|
|
class BloodOxygenModel: BaseJsonModel { |
|
// mac地址 |
|
var macID: String = "" |
|
/// 日期(2018-06-20) |
|
var dataDate: String = "" |
|
/// 最大血氧 |
|
var bloodOxygenMax: Int = 0 |
|
/// 最小血氧 |
|
var bloodOxygenMin: Int = 0 |
|
/// 平均血氧 |
|
var bloodOxygenAvg: Int = 0 |
|
/// 血氧详情(血氧值|时间戳,...) |
|
var details: String = "" |
|
} |
|
|
|
class SportModel: BaseJsonModel { |
|
/// mac地址 |
|
var macID: String = "" |
|
/// 运动时间(2017-12-17 10:20:20) |
|
var dataDate: String = "" |
|
/// 版本号 |
|
var verison: Int = 0 |
|
/// 运动类型 1.健走 2.户外跑 3.室内跑 4.登山 5.越野跑 6.半马 7.全马 8.跳绳 9.羽毛球 10.篮球 11.骑行 12.滑冰 13.健身房 14.瑜伽 15.网球 16.兵乓球 17.足球 18.游泳 19.性爱 20.室内骑行 21.室内健走22.自由训练 23.太极 24.户外步行 25.室内跑步 26.户外单车 27.室内单车 28.泳池游泳 29.开放水域游泳 30.铁人三项 31.徒步 32.椭圆机 33.踏步机 34.划船机 35.高强度间隙训练 36.功能性力量训练 37.核心训练 38.瑜伽 39.普拉提 40.舞蹈 41.整理放松 |
|
var sportType: Int = 0 |
|
/// 运动时长(秒) |
|
var duration: Int = 0 |
|
/// 距离(米) |
|
var distance: Int = 0 |
|
/// 卡路里(千卡) |
|
var calorie: Float = 0 |
|
/// 运动步数(划水次数,仅游泳模式使用) |
|
var stepNumber: Int = 0 |
|
/// 最大心率 |
|
var heartMax: Int = 0 |
|
/// 平均心率 |
|
var heartAvg: Int = 0 |
|
/// 最小心率 |
|
var heartMin: Int = 0 |
|
/// 最大步频(泳池长度) |
|
var stepFrequencyMax: Int = 0 |
|
/// 平均步频(游泳效率SWOLF) |
|
var stepFrequencyAvg: Int = 0 |
|
/// 最小步频(泳姿) |
|
var stepFrequencyMin: Int = 0 |
|
/// 最大配速(s) |
|
var paceMax: Int = 0 |
|
/// 平均配速(s) |
|
var paceAvg: Int = 0 |
|
/// 最小配速(s) |
|
var paceMin: Int = 0 |
|
/// 开始绝对海拔 |
|
var startAltitude: Int = 0 |
|
/// 结束绝对海拔 |
|
var endAltitude: Int = 0 |
|
/// GPS个数 |
|
var gpsCount: Int = 0 |
|
/// 公里牌个数 |
|
var kmCount: Int = 0 |
|
/// 步数个数 |
|
var stepCount: Int = 0 |
|
/// 心率个数 |
|
var heartCount: Int = 0 |
|
/// 趟数详情个数 |
|
var trainDetailCount: Int = 0 |
|
/// GPS时间 |
|
var gpsTimestamp: Int = 0 |
|
/// GPS数组(时间差|纬度|经度|海拔,...) |
|
var gpsDeatail: String = "" |
|
/// 公里牌数组(时间戳|纬度|经度|步数,...) |
|
var kmDetail: String = "" |
|
/// 步数时间 |
|
var stepTimestamp: Int = 0 |
|
/// 步数数组(时间差|步数|距离(m),...) |
|
var stepDetail: String = "" |
|
/// HRS时间戳 |
|
var hrsTimestamp: Int = 0 |
|
/// HRS数组(时间差(默认为5S)|心率(未采样到为0)) |
|
var hrsDetail: String = "" |
|
/// 游泳详细数组(时间戳|仰泳划水次数|蛙泳划水次数|蝶泳划水次数|自由泳划水次数|混合泳划水次数) |
|
var swimmingDetail: String = "" |
|
|
|
// MARK:- 计算属性 |
|
/// 全程步频(步/分钟) |
|
var stepFrequency: Int { |
|
if stepNumber <= 0 { |
|
return 0 |
|
} |
|
let temp = Float(stepNumber) / (Float(duration) / 60.0) |
|
return lroundf(temp + 0.5) |
|
} |
|
/// 全程步幅(厘米) |
|
var stride: Int { |
|
if stepNumber <= 0 { |
|
return 0 |
|
} |
|
return (distance * 100) / stepNumber |
|
} |
|
} |
|
|
|
// MARK:- 工具类方法 |
|
extension SportModel { |
|
|
|
/// 运动时长转成hh:mm:ss格式 |
|
var durationStr: String { |
|
return String(format:"%02d:%02d:%02d",duration / 3600, duration % 3600 / 60, duration % 60) |
|
} |
|
|
|
/// 运动枚举类型 |
|
var getSportType: SportType { |
|
return SportType(rawValue: sportType) ?? .walkTraining |
|
} |
|
|
|
/// 获取运动所在的年月 2018年5月 |
|
func getSportYearMonth() -> String { |
|
let date = DateClass.getTimeStrToDate(formatStr: "yyyy-MM-dd HH:mm:ss", timeStr: dataDate) |
|
let nowYear = Date().year() |
|
let year = MultiLanguageKey_FB.yearFB.localized |
|
let month = MultiLanguageKey_FB.monthFB.localized |
|
if date.year() == nowYear { |
|
return DateClass.timestampToStr(Int(date.timeIntervalSince1970), formatStr: "MM") + month |
|
} |
|
return DateClass.timestampToStr(Int(date.timeIntervalSince1970), formatStr: "yyyy") + year + DateClass.timestampToStr(Int(date.timeIntervalSince1970), formatStr: "MM") + month |
|
} |
|
|
|
// 平均配速 |
|
var avgPaceStr: String { |
|
let metric = UserDefaultsManagerFrieBoltt.getUserInfo()?.metricUnit ?? 0 |
|
let realDistance = metric == 0 ? Double(distance) * 0.001 : Double(distance) * 0.001 * 0.62137 |
|
let pace = (Double(duration) / 60.0) / realDistance |
|
return String(format: "%.1f", pace) |
|
} |
|
|
|
// 平均速度 |
|
var avgSpeedStr: String { |
|
let metric = UserDefaultsManagerFrieBoltt.getUserInfo()?.metricUnit ?? 0 |
|
let realDistance = metric == 0 ? Double(distance) * 0.001 : Double(distance) * 0.001 * 0.62137 |
|
let speed = realDistance / (Double(duration) / 3600.0) |
|
return String(format: "%.1f", speed) |
|
} |
|
|
|
// 运动时间戳 |
|
var timestamp: Int { |
|
return DateClass.timeStrToTimestamp(dataDate, formatStr: "yyyy-MM-dd HH:mm:ss") |
|
} |
|
|
|
} |
|
|
|
|