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.

75 lines
2.8 KiB

package cc.niushuai.dididone.biz;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import cc.niushuai.dididone.biz.entity.Project;
import cc.niushuai.dididone.biz.roomx.DBManager;
import cc.niushuai.dididone.biz.vo.ProjectCount;
import cc.niushuai.dididone.util.XLog;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* 业务全局对象
*/
public class BizGlobal {
public static final String PROJECT_NAME = "projectName";
public static final String PROJECT_ICON = "projectIcon";
public static final String PROJECT_ICON_COLOR = "projectIconColor";
public static final Map<Long, Project> CACHE_PROJECT = new HashMap<>();
public static final Map<Long, Integer> CACHE_PROJECT_COUNT = new HashMap<>();
public static int REQUEST_CODE_GENERAL = 1;
private BizGlobal() {
}
public static void buildCache() {
// 打卡项缓存
buildProjectCache();
// 按类别区分每一个打卡项 存在多少条打卡记录
buildProjectCountCache();
}
private static void buildProjectCountCache() {
Flowable<List<ProjectCount>> listFlowable = DBManager.INSTANCE.recordDao().groupCountProject();
listFlowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(projectCountList -> {
for (ProjectCount projectCount : projectCountList) {
CACHE_PROJECT_COUNT.put(projectCount.getId(), projectCount.getCount());
XLog.d("build project {}:{} cache", projectCount.getName(), projectCount.getCount());
}
XLog.d("build project count cache size: {}", projectCountList.size());
});
}
private static void buildProjectCache() {
Flowable<List<Project>> listFlowable = DBManager.INSTANCE.projectDao().listAllWithDeleted();
listFlowable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(projectList -> {
for (Project project : projectList) {
CACHE_PROJECT.put(project.getId(), project);
XLog.d("build project {} cache", project.getName());
}
XLog.d("build project cache size: {}", projectList.size());
});
}
public static Map<Long, Project> getAllProjectMap() {
return CACHE_PROJECT;
}
public static Map<Long, Project> getAvailableProjectMap() {
return CACHE_PROJECT.values().stream().filter(item -> item.getDeleted().equals(0)).collect(Collectors.toMap(Project::getId, Function.identity()));
}
}