Bladeren bron

定时新增日报

wangbo 5 maanden geleden
bovenliggende
commit
a3038c5da9

+ 42 - 50
bs-common/src/main/java/com/rongwei/safecommon/service/impl/TimedTaskServiceImpl.java

@@ -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);  // 保存数据
-//    }

+ 2 - 1
master-data/master-data-server/src/main/java/com/rongwei/bsserver/controller/TimedTaskController.java

@@ -20,7 +20,8 @@ public class TimedTaskController {
 @Autowired
     TimedTaskService timedTaskService;
 
-    @Scheduled(cron = "0 0 0 * * MON")
+//    @Scheduled(cron = "0 0 0 * * MON")
+@Scheduled(cron = "0 0 1 * * MON")
 //@RequestMapping("/generateWeeklyReport")
     public R Generation() {
         try {