Browse Source

周别

master
han\hanst 3 days ago
parent
commit
48f5611f95
  1. 57
      src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java

57
src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java

@ -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);

Loading…
Cancel
Save