|
|
@ -965,7 +965,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
case "day": |
|
|
case "day": |
|
|
return String.valueOf(date.getDayOfMonth()); |
|
|
return String.valueOf(date.getDayOfMonth()); |
|
|
case "week": |
|
|
case "week": |
|
|
return calculateWeekNumber(date, element.getFirstWeekDate()); |
|
|
|
|
|
|
|
|
return calculateWeekNumber(date, element.getFirstDayOfWeek()); |
|
|
case "weekday": |
|
|
case "weekday": |
|
|
return calculateWeekday(date, element.getFirstDayOfWeek()); |
|
|
return calculateWeekday(date, element.getFirstDayOfWeek()); |
|
|
case "full": |
|
|
case "full": |
|
|
@ -1131,27 +1131,41 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
/** |
|
|
/** |
|
|
* 计算周数 |
|
|
* 计算周数 |
|
|
*/ |
|
|
*/ |
|
|
private String calculateWeekNumber(java.time.LocalDate date, String firstWeekDateStr) { |
|
|
|
|
|
|
|
|
private String calculateWeekNumber(java.time.LocalDate date, String firstDayOfWeekStr) { |
|
|
try { |
|
|
try { |
|
|
java.time.LocalDate firstWeekDate; |
|
|
|
|
|
if (firstWeekDateStr != null && !firstWeekDateStr.trim().isEmpty()) { |
|
|
|
|
|
firstWeekDate = parseDate(firstWeekDateStr); |
|
|
|
|
|
if (firstWeekDate == null) { |
|
|
|
|
|
// 如果解析失败,使用年初作为第一周 |
|
|
|
|
|
firstWeekDate = java.time.LocalDate.of(date.getYear(), 1, 1); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
// 默认使用年初作为第一周 |
|
|
|
|
|
firstWeekDate = java.time.LocalDate.of(date.getYear(), 1, 1); |
|
|
|
|
|
|
|
|
java.time.LocalDate yearStartDate = java.time.LocalDate.of(date.getYear(), 1, 1); |
|
|
|
|
|
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(yearStartDate, date); |
|
|
|
|
|
String yearSuffix = String.format("%02d", date.getYear() % 100); |
|
|
|
|
|
if (daysBetween <= 0) { |
|
|
|
|
|
return "01" + yearSuffix; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int firstDayOfWeek = 0; // 默认周日为第一天 |
|
|
|
|
|
if (firstDayOfWeekStr != null && !firstDayOfWeekStr.trim().isEmpty()) { |
|
|
|
|
|
firstDayOfWeek = Integer.parseInt(firstDayOfWeekStr); |
|
|
} |
|
|
} |
|
|
|
|
|
if (firstDayOfWeek < 0 || firstDayOfWeek > 6) { |
|
|
|
|
|
firstDayOfWeek = 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Java中周一=1...周日=7,转换为JS风格:周日=0...周六=6 |
|
|
|
|
|
int yearStartWeekday = yearStartDate.getDayOfWeek().getValue() % 7; |
|
|
|
|
|
int daysToNextWeekStart = (firstDayOfWeek - yearStartWeekday + 7) % 7; |
|
|
|
|
|
|
|
|
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(firstWeekDate, date); |
|
|
|
|
|
int weekNumber = (int) (daysBetween / 7) + 1; |
|
|
|
|
|
return String.valueOf(Math.max(1, weekNumber)); |
|
|
|
|
|
|
|
|
int weekNumber; |
|
|
|
|
|
if (daysToNextWeekStart == 0) { |
|
|
|
|
|
weekNumber = (int) (daysBetween / 7) + 1; |
|
|
|
|
|
} else if (daysBetween < daysToNextWeekStart) { |
|
|
|
|
|
weekNumber = 1; |
|
|
|
|
|
} else { |
|
|
|
|
|
weekNumber = (int) ((daysBetween - daysToNextWeekStart) / 7) + 2; |
|
|
|
|
|
} |
|
|
|
|
|
int normalizedWeekNumber = Math.max(1, weekNumber); |
|
|
|
|
|
return String.format("%02d", normalizedWeekNumber) + yearSuffix; |
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
log.error("周数计算失败: date={}, firstWeekDate={}", date, firstWeekDateStr); |
|
|
|
|
|
return "1"; |
|
|
|
|
|
|
|
|
log.error("周数计算失败: date={}, firstDayOfWeek={}", date, firstDayOfWeekStr); |
|
|
|
|
|
return "01" + String.format("%02d", date.getYear() % 100); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -1160,14 +1174,17 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
*/ |
|
|
*/ |
|
|
private String calculateWeekday(java.time.LocalDate date, String firstDayOfWeekStr) { |
|
|
private String calculateWeekday(java.time.LocalDate date, String firstDayOfWeekStr) { |
|
|
try { |
|
|
try { |
|
|
int firstDayOfWeek = 1; // 默认周一为第一天 |
|
|
|
|
|
|
|
|
int firstDayOfWeek = 0; // 默认周日为第一天 |
|
|
if (firstDayOfWeekStr != null && !firstDayOfWeekStr.trim().isEmpty()) { |
|
|
if (firstDayOfWeekStr != null && !firstDayOfWeekStr.trim().isEmpty()) { |
|
|
firstDayOfWeek = Integer.parseInt(firstDayOfWeekStr); |
|
|
firstDayOfWeek = Integer.parseInt(firstDayOfWeekStr); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int dayOfWeek = date.getDayOfWeek().getValue(); // 1=周一, 7=周日 |
|
|
|
|
|
|
|
|
if (firstDayOfWeek < 0 || firstDayOfWeek > 6) { |
|
|
|
|
|
firstDayOfWeek = 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 调整为指定的第一天 |
|
|
|
|
|
|
|
|
// Java中周一=1...周日=7,转换为JS风格:周日=0...周六=6 |
|
|
|
|
|
int dayOfWeek = date.getDayOfWeek().getValue() % 7; |
|
|
int adjustedDay = ((dayOfWeek - firstDayOfWeek + 7) % 7) + 1; |
|
|
int adjustedDay = ((dayOfWeek - firstDayOfWeek + 7) % 7) + 1; |
|
|
return String.valueOf(adjustedDay); |
|
|
return String.valueOf(adjustedDay); |
|
|
|
|
|
|
|
|
|