|
@@ -12,6 +12,8 @@ import org.bouncycastle.util.Times;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.temporal.WeekFields;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
@@ -25,93 +27,83 @@ public class TimedTaskServiceImpl extends ServiceImpl<TimeSheetDao,TimeSheetDo>
|
|
|
|
|
|
@Override
|
|
|
public void ByUserGenerateWeekly() {
|
|
|
+
|
|
|
List<UserDo> users = userService.getAllUsers();
|
|
|
- Date currentDate = new Date();
|
|
|
- //获取当前日期
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.setTime(currentDate);
|
|
|
- // 获取周一日期
|
|
|
- calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
|
|
- Date startOfWeek = calendar.getTime();
|
|
|
+
|
|
|
+ // 获取当前日期
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
+// LocalDate currentDate = LocalDate.of(2025, 1, 6);
|
|
|
+
|
|
|
// 获取当前年份
|
|
|
- int currentYear = calendar.get(Calendar.YEAR);
|
|
|
- // 获取当前周的周次
|
|
|
- int currentWeek = calendar.get(Calendar.WEEK_OF_YEAR);
|
|
|
+ int currentYear = currentDate.getYear();
|
|
|
+
|
|
|
+ // 获取当前周的周次(ISO-8601标准)
|
|
|
+ int currentWeek = currentDate.get(WeekFields.ISO.weekOfYear());
|
|
|
+
|
|
|
+ // 获取当前日期所在周的周一日期
|
|
|
+ LocalDate startOfWeek = currentDate.with(WeekFields.ISO.dayOfWeek(), 1);
|
|
|
|
|
|
for (UserDo user : users) {
|
|
|
// 判断是否跨年度(即当前日期所在的周是否包含上一年和下一年)
|
|
|
for (int i = 0; i < 7; i++) {
|
|
|
// 计算该天的日期
|
|
|
- calendar.setTime(startOfWeek);
|
|
|
- calendar.add(Calendar.DATE, i); // 增加天数,遍历一周的每一天
|
|
|
- Date currentDay = calendar.getTime();
|
|
|
+ LocalDate currentDay = startOfWeek.plusDays(i);
|
|
|
|
|
|
// 获取该日期的年份
|
|
|
- int yearOfDay = calendar.get(Calendar.YEAR);
|
|
|
+ int yearOfDay = currentDay.getYear();
|
|
|
|
|
|
if (yearOfDay != currentYear) {
|
|
|
- handleCrossYear(user, calendar, yearOfDay, currentYear);
|
|
|
+ // 如果是跨年,则处理跨年情况
|
|
|
+ handleCrossYear(user, currentDay, yearOfDay, currentYear);
|
|
|
} else {
|
|
|
// 当前日期属于当前年份,直接生成周报数据
|
|
|
- generateReport(user, calendar, currentWeek);
|
|
|
+ generateReport(user, currentDay, currentWeek);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
- private TimeSheetDo createTimeSheetDo(UserDo user, Calendar calendar , int currentWeek) {
|
|
|
+
|
|
|
+ private TimeSheetDo createTimeSheetDo(UserDo user, LocalDate currentDate, int currentWeek) {
|
|
|
TimeSheetDo timeSheetDo = new TimeSheetDo();
|
|
|
timeSheetDo.setInformantid(user.getId());
|
|
|
timeSheetDo.setInformant(user.getName());
|
|
|
- timeSheetDo.setTyear(String.valueOf(calendar.get(Calendar.YEAR))); // 当前年份
|
|
|
-// timeSheetDo.setTsweek(String.valueOf(calendar.get(Calendar.WEEK_OF_YEAR))); // 当前周次
|
|
|
+ timeSheetDo.setTyear(String.valueOf(currentDate.getYear())); // 当前年份
|
|
|
timeSheetDo.setTsweek(String.valueOf(currentWeek)); // 当前周次
|
|
|
- timeSheetDo.setTsdate(calendar.getTime()); // 当前日期
|
|
|
+ timeSheetDo.setTsdate(java.sql.Date.valueOf(currentDate)); // 当前日期(转换为 java.sql.Date)
|
|
|
timeSheetDo.setTstatus("待提交");
|
|
|
timeSheetDo.setId(UUID.randomUUID().toString()); // uuid
|
|
|
timeSheetDo.setDeleted("0");
|
|
|
return timeSheetDo;
|
|
|
}
|
|
|
|
|
|
- // 处理跨年度的情况
|
|
|
- private void handleCrossYear(UserDo user, Calendar calendar, int yearOfDay, int currentYear) {
|
|
|
- if (yearOfDay < currentYear) {
|
|
|
+
|
|
|
+
|
|
|
+ private void handleCrossYear(UserDo user, LocalDate currentDate, int yearOfDay, int currentYear) {
|
|
|
+ /* if (yearOfDay < currentYear) {
|
|
|
// 当前日期属于上一年的最后一周(12月30、31日等)
|
|
|
- generateReportForYear(user, calendar, "previous year");
|
|
|
- } else {
|
|
|
+ generateReportForYear(user, currentDate);
|
|
|
+ } else {*/
|
|
|
// 当前日期属于下一年的第一周(如2025年1月1号)
|
|
|
- generateReportForYear(user, calendar, "next year");
|
|
|
- }
|
|
|
+ generateReportForYear(user, currentDate);
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
- // 生成报告
|
|
|
- private void generateReport(UserDo user, Calendar calendar,int currentWeek) {
|
|
|
- TimeSheetDo timeSheetDo = createTimeSheetDo(user, calendar,currentWeek);
|
|
|
+
|
|
|
+
|
|
|
+ private void generateReport(UserDo user, LocalDate currentDate, int currentWeek) {
|
|
|
+ TimeSheetDo timeSheetDo = createTimeSheetDo(user, currentDate, currentWeek);
|
|
|
timedTaskService.save(timeSheetDo); // 保存数据
|
|
|
}
|
|
|
|
|
|
- // 生成上一年或下一年的报告
|
|
|
- private void generateReportForYear(UserDo user, Calendar calendar, String yearContext) {
|
|
|
- TimeSheetDo timeSheetDo = createTimeSheetDo(user, calendar,-1);
|
|
|
- timeSheetDo.setTyear(yearContext); // 设置年份上下文
|
|
|
+
|
|
|
+
|
|
|
+ private void generateReportForYear(UserDo user, LocalDate currentDate) {
|
|
|
+
|
|
|
+ TimeSheetDo timeSheetDo = createTimeSheetDo(user, currentDate, currentDate.get(WeekFields.ISO.weekOfYear()));
|
|
|
+// timeSheetDo.setTyear(yearContext); // 设置年份上下文
|
|
|
timedTaskService.save(timeSheetDo); // 保存数据
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// private void generateReportForCurrentYear(UserDo user, Calendar calendar) {
|
|
|
-// // 生成当前年份的数据
|
|
|
-// TimeSheetDo timeSheetDo = new TimeSheetDo();
|
|
|
-// timeSheetDo.setInformantid(user.getId());
|
|
|
-// timeSheetDo.setInformant(user.getName());
|
|
|
-// timeSheetDo.setTyear(String.valueOf(calendar.get(Calendar.YEAR))); //当前年份
|
|
|
-// timeSheetDo.setTsweek(String.valueOf(calendar.get(Calendar.WEEK_OF_YEAR)));
|
|
|
-// timeSheetDo.setTsdate((Date) calendar.getTime());
|
|
|
-// timeSheetDo.setTstatus("待提交");
|
|
|
-// timeSheetDo.setId(UUID.randomUUID().toString());//uuid
|
|
|
-// timedTaskService.save(timeSheetDo); // 保存数据
|
|
|
-// }
|