time_period) {
+ this.time_period = time_period;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/fuying/sn/data/model/RemainingTimeBean.java b/app/src/main/java/com/fuying/sn/data/model/RemainingTimeBean.java
new file mode 100644
index 0000000..d7ed689
--- /dev/null
+++ b/app/src/main/java/com/fuying/sn/data/model/RemainingTimeBean.java
@@ -0,0 +1,37 @@
+package com.fuying.sn.data.model;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonParser;
+
+import java.io.Serializable;
+
+public class RemainingTimeBean implements Serializable {
+ private static final long serialVersionUID = 5470771600877982771L;
+
+ String sn;
+ long remaining_time;
+
+ public String getSn() {
+ return sn;
+ }
+
+ public void setSn(String sn) {
+ this.sn = sn;
+ }
+
+ public long getRemaining_time() {
+ return remaining_time;
+ }
+
+ public void setRemaining_time(long remaining_time) {
+ this.remaining_time = remaining_time;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/fuying/sn/data/repository/StatisticsRepository.java b/app/src/main/java/com/fuying/sn/data/repository/StatisticsRepository.java
new file mode 100644
index 0000000..13f6650
--- /dev/null
+++ b/app/src/main/java/com/fuying/sn/data/repository/StatisticsRepository.java
@@ -0,0 +1,117 @@
+package com.fuying.sn.data.repository;
+
+import com.fuying.sn.bean.AppTimeControlInfo;
+import com.fuying.sn.bean.BaseResponse;
+import com.fuying.sn.bean.SystemSettingsSet;
+import com.fuying.sn.data.model.AppControlDetail;
+import com.fuying.sn.data.model.AppUseTimeData;
+import com.fuying.sn.data.model.AppUseTimeInfo;
+import com.fuying.sn.data.model.ControlStatusCombined;
+import com.fuying.sn.data.model.ControlStatusInfo;
+import com.fuying.sn.data.model.RemainingTimeBean;
+import com.fuying.sn.network.NetInterfaceManager;
+import com.fuying.sn.network.UrlAddress;
+import com.fuying.sn.utils.Utils;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observable;
+
+/**
+ * 使用统计数据仓库(Repository)。
+ *
+ * 职责:作为使用统计相关数据的唯一入口,向 ViewModel 屏蔽数据来源细节
+ * (网络 / 缓存),并统一套用 NetInterfaceManager 提供的多级缓存策略。
+ *
+ * 类型策略:每个方法的返回类型与 StatisticsApi 接口完全一致并带具体泛型,
+ * 这样 withMultiLevelCache 才能精确反序列化缓存,且调用方拿到强类型、无需强转。
+ * 暂无具体 Bean 的接口暂用 BaseResponse