场景一,前端页面需要展示近7天,近30天,近x天的数据
。
数据库里面带着开始时间和结束时间去查数据的时候,(前端只给7/10x需要自己拼凑开始和结束时间)不是每一天都有数据,例如8.5是0,数据库是没有记录的,这时候需要补齐没有的数据,为0也要给前端。即给到前端的数据格式为list。list里面应该有7个元素。数据库可能只有5个或者3个元素,剩余的需要补齐。
思路:1,计算出是要几天的数据这个值前端会传过来days,即返回集合list的大小
2,数据库查出来的dbList的sizes()不等于days的时候就需要补齐。
3,补齐的关键点在于,datTime即20200805相同,所以利用这点灵活运用map。
具体代码如下:
// 查询折线图起止时间内的点击数据
public ReqResult<PageResp> findPage(AdMatStaRespQueryForm form) {
ReqResult<PageResp> result = ReqResult.newInstance(false, PageResp.class);
try {
List<AdMaterialStaticResp> listResp = new ArrayList<AdMaterialStaticResp>();
// 分页查询机构+广告位+图片类型维度下的素材ID
PageResp<Integer> page = AdMaterialStatisticService.getInstance().findMaterialIdsByPage(form.toAdMatStatQueryPageForm());
List<Integer> materialIds = page.getList();
AdMaterialStaticCountType countType = AdMaterialStaticCountType.valueOf(form.getCountType());
int days = countType.getDays();
// 查询每个素材的历史点击总量
materialIds.forEach(materialId -> {
AdMaterialStaticResp resp &