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 CACHE_PROJECT = new HashMap<>(); public static final Map 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> 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> 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 getAllProjectMap() { return CACHE_PROJECT; } public static Map getAvailableProjectMap() { return CACHE_PROJECT.values().stream().filter(item -> item.getDeleted().equals(0)).collect(Collectors.toMap(Project::getId, Function.identity())); } }