import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.aniu.backend.service.bi.product.AniuBIProductService;
import org.junit.Test;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class CompletionDateUtils {
private static AniuBIProductService aniuBIProductService;
/**
* 隐藏构造方法.
*/
private CompletionDateUtils() {
}
/**
* 数据库查询出来的统计数据有时候日期是不连续的.
* 但是前端展示要补全缺失的日期.
* 此方法返回一个给定日期期间的所有日期字符串列表.
* 具体在业务逻辑中去判断补全.
*
* @param startDate 开始日期
* @param endDate 结束日期
* @return
*/
public static List<String> completionDate(LocalDate startDate, LocalDate endDate) {
//日期格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<String> dateList = new ArrayList<>();
//遍历给定的日期期间的每一天
for (int i = 0; !Period.between(startDate.plusDays(i), endDate).isNegative(); i++) {
//添加日期
dateList.add(startDate.plusDays(i).format(formatter));
}
return dateList;
}
@Test
public void selectTest2() {
String startDate = "2021-04-20";
String endDate = "2021-06-05";
//3.补全为空的日期
//补全后的结果
List<Map> result = new ArrayList<>();
boolean dbDateExist = false;
LocalDate localDate1 = LocalDate.parse(startDate);
LocalDate localDate2 = LocalDate.parse(endDate);
List<String> dateList = CompletionDateUtils.completionDate(localDate1, localDate2);
List<Map> table = new ArrayList<>();
List<Map> maps1 = ProductService.qqqqqq(startDate, endDate);
JSONArray json1 = (JSONArray) JSONArray.toJSON(maps1);// 获取post中的字符串转换成json
for (int i = 0; i < json1.size(); i++) {
Map<String, Object> map = new HashMap<>();
map.put("daytime", JSON.parseObject(json1.get(i).toString()).getString("daytime"));
map.put("cash_amount", JSON.parseObject(json1.get(i).toString()).getString("cash_amount"));
map.put("return_cash", JSON.parseObject(json1.get(i).toString()).getString("return_cash"));
map.put("product_type", JSON.parseObject(json1.get(i).toString()).getString("product_type"));
table.add(map);
}
// map.put("list", table.add(map);
for (String date : dateList) {
for (Map<String, Object> row : table) {
if (row.get("daytime").equals(date)) {
//集合已包含该日期
dbDateExist = true;
result.add(row);
break;
}
}
//添加补全的数据到最后结果列表
if (!dbDateExist) {
Map<String, Object> temp = new HashMap<>(2);
temp.put("daytime", date);
temp.put("cash_amount", 0);
temp.put("return_cash", 0);
temp.put("product_type", "6666666");
result.add(temp);
}
//状态修改为不存在
dbDateExist = false;
}
System.out.print(result);
// System.out.print(completionDate(localDate1, localDate2));
}
Java 针对接口中的没有数据自动补0,用于折线统计图
最新推荐文章于 2023-08-03 16:27:03 发布