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 getChartDataVos(DateEnum dateEnum, Map map) { //初始化x轴数据 List xAxisData = XAxisDataInitializer.initXAxisDataToNow(dateEnum); List 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; } }