package org.sxkj.resource.vo;
|
|
import io.swagger.annotations.ApiModelProperty;
|
import lombok.Data;
|
import org.sxkj.common.enums.DateEnum;
|
import org.sxkj.common.utils.XAxisDataInitializer;
|
|
import java.time.DayOfWeek;
|
import java.time.LocalDateTime;
|
import java.time.format.TextStyle;
|
import java.util.*;
|
|
import static org.sxkj.common.enums.DateEnum.*;
|
|
@Data
|
public class ChartDataVo {
|
|
@ApiModelProperty(value = "名称")
|
private String name;
|
|
@ApiModelProperty(value = "数据")
|
private Object value;
|
|
@ApiModelProperty(value = "状态")
|
private Object status;
|
// 数量
|
@ApiModelProperty(value = "数量")
|
private Integer num;
|
// 总数
|
@ApiModelProperty(value = "总数")
|
private Integer total;
|
// 比例
|
@ApiModelProperty(value = "比例")
|
private Double rate;
|
|
|
public static Integer formatIntegerNumValue(Object num){
|
if(Objects.isNull(num)){
|
return 0;
|
}
|
return Integer.parseInt(num.toString());
|
}
|
|
|
|
/**
|
* 根据枚举获取时间格式化字符串
|
*
|
* @param dateEnum 时间枚举
|
* @return 格式化
|
*/
|
public static String getTimeFormatByEnum(DateEnum dateEnum) {
|
if(Objects.isNull(dateEnum)) {
|
return "";
|
}
|
String format = "";
|
switch (dateEnum) {
|
case TODAY:
|
format = "%H";
|
break;
|
case CURRENT_WEEK:
|
format = "%d";
|
break;
|
case CURRENT_MONTH:
|
format = "%m-%d";
|
break;
|
case CURRENT_YEAR:
|
format = "%m";
|
break;
|
case INTERVAL_TIME:
|
format ="%m-%d";
|
break;
|
case YEARS:
|
format ="%Y";
|
break;
|
case MONTHS:
|
format ="%Y-%m";
|
break;
|
case DAYS:
|
format ="%m-%d";
|
break;
|
}
|
return format;
|
}
|
|
/**
|
* 根据枚举获取时间格式化字符串
|
*
|
* @param dateEnum 时间枚举
|
* @return 格式化
|
*/
|
public static String getTimeFormatByTime(DateEnum dateEnum) {
|
if(Objects.isNull(dateEnum)) {
|
return "";
|
}
|
String format = "";
|
switch (dateEnum) {
|
case DAY:
|
format = "%d";
|
break;
|
case MONTH:
|
format = "%m";
|
break;
|
case YEAR:
|
format = "%Y";
|
break;
|
}
|
return format;
|
}
|
|
/**
|
* 根据枚举获取时间格式化字符串
|
*
|
* @param dateEnum 时间枚举
|
* @return 格式化
|
*/
|
public static String getTimeFormatByTimeTwo(DateEnum dateEnum, LocalDateTime startDate,LocalDateTime endDate) {
|
if(Objects.isNull(dateEnum)) {
|
return "";
|
}
|
String format = "";
|
// 判断是否跨年
|
boolean isCrossYear = startDate.getYear() != endDate.getYear();
|
switch (dateEnum) {
|
case DAY:
|
if (isCrossYear) {
|
format = "%Y-%m-%d";
|
} else if (startDate.toLocalDate().getMonth() != endDate.toLocalDate().getMonth()) {
|
format = "%m-%d";
|
} else {
|
format = "%d";
|
}
|
break;
|
case MONTH:
|
if (isCrossYear) {
|
format = "%Y-%m";
|
} else if (startDate.toLocalDate().getMonth() != endDate.toLocalDate().getMonth()) {
|
format = "%m";
|
} else {
|
format = "%m";
|
}
|
break;
|
case YEAR:
|
format = "%Y";
|
break;
|
}
|
return format;
|
}
|
|
/**
|
* 格式化日期显示
|
*
|
* @param dateEnum 时间枚举
|
* @param time 日期
|
* @param index 角标
|
* @return 格式化字符串
|
*/
|
public static String formatTime(DateEnum dateEnum, String time, Integer index) {
|
String timeStr = time;
|
if (CURRENT_WEEK.equals(dateEnum)) {
|
timeStr = DayOfWeek.of(index + 1).getDisplayName(TextStyle.FULL, Locale.CHINA);
|
} else if (CURRENT_YEAR.equals(dateEnum)||YEAR.equals(dateEnum)) {
|
timeStr = time.replaceAll("0(\\d)", "$1") + "月";
|
} else if (TODAY.equals(dateEnum)||DAY.equals(dateEnum)) {
|
timeStr = timeStr.replaceAll("0(\\d)", "$1")+"时";
|
} else if (CURRENT_MONTH.equals(dateEnum) || INTERVAL_TIME.equals(dateEnum) ||MONTH.equals(dateEnum)) {
|
String[] parts = timeStr.split("-");
|
int month = Integer.parseInt(parts[0]);
|
int day = Integer.parseInt(parts[1]);
|
timeStr = String.format("%02d", day) + "日";
|
|
}
|
return timeStr;
|
}
|
|
|
/**
|
* 转成柱状图
|
* @param dateEnum 枚举
|
* @param map 数据
|
* @return
|
*/
|
public static List<ChartDataVo> getChartDataVos(DateEnum dateEnum, Map<String, Integer> map) {
|
//初始化x轴数据
|
List<String> xAxisData = XAxisDataInitializer.initXAxisDataToNow(dateEnum);
|
List<ChartDataVo> result = new ArrayList<>();
|
for (int index = 0; index < xAxisData.size(); index++) {
|
String time = xAxisData.get(index);
|
Integer value = map.get(time);
|
if (value == null) {
|
value = map.get("0" + time);
|
}
|
ChartDataVo chartDataVo = new ChartDataVo();
|
chartDataVo.setName(formatTime(dateEnum, time, index));
|
chartDataVo.setValue(Optional.ofNullable(value).orElse(0));
|
result.add(chartDataVo);
|
}
|
return result;
|
}
|
}
|