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