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; } }