diff --git a/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java b/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java index b4440c1..7838a7a 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/BizGlobal.java @@ -1,6 +1,6 @@ package cc.niushuai.dididone.biz; -import androidx.appcompat.view.ActionBarPolicy; +import org.json.JSONArray; import java.util.HashMap; import java.util.List; @@ -8,6 +8,7 @@ import java.util.Map; 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; @@ -21,6 +22,7 @@ public class BizGlobal { 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<>(); private BizGlobal() { } @@ -28,7 +30,26 @@ public class BizGlobal { public static int REQUEST_CODE_GENERAL = 1; 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() { @@ -38,10 +59,10 @@ public class BizGlobal { .subscribe(projectList -> { for (Project project : projectList) { CACHE_PROJECT.put(project.getId(), project); - XLog.d("build {} cache", project.getName()); + XLog.d("build project {} cache", project.getName()); } - XLog.d("build cache size: {}", projectList.size()); + XLog.d("build project cache size: {}", projectList.size()); }); } } diff --git a/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java b/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java index cc13477..30be2c7 100644 --- a/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java +++ b/app/src/main/java/cc/niushuai/dididone/biz/dao/RecordDao.java @@ -8,6 +8,7 @@ import androidx.room.Query; import java.util.List; import cc.niushuai.dididone.biz.entity.Record; +import cc.niushuai.dididone.biz.vo.ProjectCount; import io.reactivex.Completable; import io.reactivex.Flowable; @@ -31,4 +32,7 @@ public interface RecordDao { @Delete void delete(Record... records); + + @Query("select b.id, b.name, count(a.id) as count from t_record a left join t_project b on b.id = a.project_id and b.deleted = 0 where a.deleted = 0 group by b.id, b.name") + Flowable> groupCountProject(); } diff --git a/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectCount.java b/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectCount.java new file mode 100644 index 0000000..41aceca --- /dev/null +++ b/app/src/main/java/cc/niushuai/dididone/biz/vo/ProjectCount.java @@ -0,0 +1,32 @@ +package cc.niushuai.dididone.biz.vo; + +public class ProjectCount { + + private Long id; + private String name; + private Integer count; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } +} diff --git a/app/src/main/java/cc/niushuai/dididone/ui/component/ProjectPopupView.java b/app/src/main/java/cc/niushuai/dididone/ui/component/ProjectPopupView.java index c8af590..caddca2 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/component/ProjectPopupView.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/component/ProjectPopupView.java @@ -85,6 +85,10 @@ public class ProjectPopupView extends BottomPopupView { TextView txtView = holder.getView(R.id.ppv_item_txt); txtView.setText(project.getName()); + + TextView descView = holder.getView(R.id.ppv_item_desc); + String count = BizGlobal.CACHE_PROJECT_COUNT.getOrDefault(project.getId(), 0).toString(); + descView.setText(StrUtil.format("累计打卡{}次", count)); } }; commonAdapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener() { diff --git a/app/src/main/res/layout/project_popup_view_item.xml b/app/src/main/res/layout/project_popup_view_item.xml index ea6f178..7a7b68c 100644 --- a/app/src/main/res/layout/project_popup_view_item.xml +++ b/app/src/main/res/layout/project_popup_view_item.xml @@ -1,5 +1,6 @@ - + android:layout_centerVertical="true" + /> + android:textSize="18dp" + /> - \ No newline at end of file + + \ No newline at end of file