package com.jsbogang.womp.health;
|
|
import com.veepoo.protocol.model.datas.OriginData3;
|
import com.veepoo.protocol.model.datas.SleepData;
|
import com.veepoo.protocol.model.datas.TimeData;
|
|
import java.util.Calendar;
|
|
final class OriginMapper {
|
private OriginMapper() {}
|
|
static HealthSample toSample(OriginData3 data, String mac, String dayDate) {
|
if (data == null) {
|
return null;
|
}
|
HealthSample s = new HealthSample();
|
s.deviceMac = mac == null ? "" : mac;
|
s.packageNumber = data.getPackageNumber();
|
s.timestamp = timeOf(data.getmTime(), dayDate, s.packageNumber);
|
if (s.timestamp <= 0) {
|
return null;
|
}
|
s.heartRate = avgValid(data.getPpgs(), 30, 220);
|
if (s.heartRate <= 0) {
|
s.heartRate = data.getRateValue();
|
}
|
s.stepValue = Math.max(data.getStepValue(), 0);
|
s.bpHigh = data.getHighValue();
|
s.bpLow = data.getLowValue();
|
s.spo2 = avgValidFloat(data.getOxygens(), 70, 100);
|
try {
|
s.temperature = (float) data.getTemperature();
|
} catch (Exception ignored) {
|
}
|
try {
|
s.glucose = data.getBloodGlucose();
|
} catch (Exception ignored) {
|
}
|
try {
|
s.calories = (int) data.getCalValue();
|
} catch (Exception ignored) {
|
}
|
try {
|
s.wear = data.getWear();
|
} catch (Exception ignored) {
|
}
|
s.dataType = "周期";
|
s.uploaded = 0;
|
return s;
|
}
|
|
static SleepSession toSleep(SleepData data, String mac, String day) {
|
if (data == null) {
|
return null;
|
}
|
SleepSession s = new SleepSession();
|
s.deviceMac = mac == null ? "" : mac;
|
s.date = (data.getDate() != null && !data.getDate().isEmpty()) ? data.getDate() : day;
|
s.deepMinutes = data.getDeepSleepTime();
|
s.lightMinutes = data.getLowSleepTime();
|
s.allMinutes = data.getAllSleepTime();
|
s.wakeCount = data.getWakeCount();
|
s.quality = data.getSleepQulity();
|
s.sleepLine = data.getSleepLine();
|
s.sleepDown = timeOf(data.getSleepDown());
|
s.sleepUp = timeOf(data.getSleepUp());
|
return s;
|
}
|
|
static long timeOf(TimeData t, String dayDate, int packageNumber) {
|
long fromWatch = timeOf(t);
|
if (fromWatch > 0) {
|
return snap5(fromWatch);
|
}
|
if (dayDate == null || dayDate.length() < 10) {
|
return 0;
|
}
|
try {
|
String[] p = dayDate.split("-");
|
Calendar c = Calendar.getInstance();
|
c.set(Calendar.YEAR, Integer.parseInt(p[0]));
|
c.set(Calendar.MONTH, Integer.parseInt(p[1]) - 1);
|
c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(p[2]));
|
c.set(Calendar.SECOND, 0);
|
c.set(Calendar.MILLISECOND, 0);
|
int minutes = Math.max(packageNumber - 1, 0) * 5;
|
c.set(Calendar.HOUR_OF_DAY, minutes / 60);
|
c.set(Calendar.MINUTE, minutes % 60);
|
return c.getTimeInMillis();
|
} catch (Exception e) {
|
return 0;
|
}
|
}
|
|
static long timeOf(TimeData t) {
|
if (t == null) {
|
return 0;
|
}
|
try {
|
Calendar c = Calendar.getInstance();
|
int year = t.year;
|
int month = t.month;
|
int day = t.day;
|
if (year > 0 && year < 100) {
|
year += 2000;
|
}
|
if (year < 2020 || month < 1 || day < 1) {
|
return 0;
|
}
|
c.set(Calendar.YEAR, year);
|
c.set(Calendar.MONTH, month - 1);
|
c.set(Calendar.DAY_OF_MONTH, day);
|
c.set(Calendar.HOUR_OF_DAY, t.hour);
|
c.set(Calendar.MINUTE, t.minute);
|
c.set(Calendar.SECOND, 0);
|
c.set(Calendar.MILLISECOND, 0);
|
return c.getTimeInMillis();
|
} catch (Exception e) {
|
return 0;
|
}
|
}
|
|
static long snap5(long ts) {
|
return ts - (ts % 300_000L);
|
}
|
|
static int avgValid(int[] arr, int min, int max) {
|
if (arr == null || arr.length == 0) {
|
return 0;
|
}
|
int sum = 0;
|
int n = 0;
|
for (int v : arr) {
|
if (v >= min && v <= max) {
|
sum += v;
|
n++;
|
}
|
}
|
return n == 0 ? 0 : Math.round(sum / (float) n);
|
}
|
|
static float avgValidFloat(int[] arr, int min, int max) {
|
int v = avgValid(arr, min, max);
|
return v;
|
}
|
}
|