1.查询2020-03-22 到 2020-03-25三天数据,发现数据库中只有一条
2.现在我需要将2020-03-24到2020-03-25这两天的数据补0
3.代码实现
/**
* 获取两个日期之间的日期,包括开始结束日期
*
* @param beginData 开始日期
* @param endData 结束日期
* @return 日期集合
*/
public static List<String> getBetweenDates(Date beginData, Date endData) {
List<String> result = new ArrayList<String>();
LocalDate ld1 = new LocalDate(new DateTime(beginData));
LocalDate ld2 = new LocalDate(new DateTime(endData));
if (ld1.equals(ld2)) {
result.add(new SimpleDateFormat("yyyy-MM-dd").format(beginData));
} else {
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(beginData);
tempStart.add(Calendar.DAY_OF_YEAR, 1);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(endData);
result.add(new SimpleDateFormat("yyyy-MM-dd").format(beginData));
while (tempStart.before(tempEnd)) {
result.add(new SimpleDateFormat("yyyy-MM-dd").format(tempStart.getTime()));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
result.add(new SimpleDateFormat("yyyy-MM-dd").format(endData));
}
return result;
}
/**
* @Date: 2020/3/24 10:54
* @Description:构建datelist数据,按开始时间和结束时间和盒子id按日期分组排序,日期为空补0
*/
public void constructDatelist(List<MileageRecordVo> mileageRecordVoList, List<String> days,MileageRecordVo record){
if(mileageRecordVoList!=null&&mileageRecordVoList.size()>0){
for (MileageRecordVo mileageRecordVo : mileageRecordVoList) {
record.setBoxId(mileageRecordVo.getBoxId());
List<MileageRecordVo> list = dailyMileageMapper.queryDailyMileageList(record);
//存放盒子id和盒子id出现次数
HashMap<String,Integer> boxIdCountMap = new HashMap<>();
//存放盒子id和日期
HashMap<String,Integer> boxIdDateMap = new HashMap<>();
if(list!=null&&list.size()>0){
//存放数据库查出来的数据
List<DailyMileageVo> existList = new ArrayList<DailyMileageVo>();
//存放补日期的数据
List<DailyMileageVo> noList = new ArrayList<DailyMileageVo>();
for (MileageRecordVo recordVo : list) {
//数据库有,则添加
DailyMileageVo dailyMileageVo = new DailyMileageVo();
dailyMileageVo.setDate(recordVo.getDate());
dailyMileageVo.setMileage(recordVo.getMileage());
existList.add(dailyMileageVo);
//构建boxIdCountMap
if (boxIdCountMap.containsKey(recordVo.getBoxId())) {
int count = boxIdCountMap.get(recordVo.getBoxId()) + 1;
boxIdCountMap.put(recordVo.getBoxId(), count);
} else {
boxIdCountMap.put(recordVo.getBoxId(), 1);
}
//构建boxIdDateMap
boxIdDateMap.put(recordVo.getBoxId() + "-" + recordVo.getDate(), 1);
}
//得到日期为空的数据,补0
for (Map.Entry<String, Integer> entry : boxIdCountMap.entrySet()){
if (entry.getValue() < days.size()){
for (int i =0;i< days.size();i++){
if (!boxIdDateMap.containsKey(entry.getKey() + "-"+days.get(i))){
if(mileageRecordVo.getBoxId().equals(entry.getKey())){
DailyMileageVo dailyMileageVo = new DailyMileageVo();
dailyMileageVo.setDate(days.get(i));
dailyMileageVo.setMileage(0);
noList.add(dailyMileageVo);
}
}
}
}
}
//将补0的数据添加到数据库有的数据中
existList.addAll(noList);
mileageRecordVo.setDateList(existList);
}else{
//为空则直接补0
List<DailyMileageVo> noList = new ArrayList<DailyMileageVo>();
for(int i=0;i<days.size();i++){
DailyMileageVo dailyMileageVo = new DailyMileageVo();
dailyMileageVo.setDate(days.get(i));
dailyMileageVo.setMileage(0);
noList.add(dailyMileageVo);
}
mileageRecordVo.setDateList(noList);
}
}
}
}