|
@@ -0,0 +1,117 @@
|
|
|
+package com.rongwei.safecommon.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.rongwei.bsentity.domain.TimeSheetDo;
|
|
|
+import com.rongwei.bsentity.domain.UserDo;
|
|
|
+import com.rongwei.safecommon.dao.TimeSheetDao;
|
|
|
+import com.rongwei.safecommon.service.TimedTaskService;
|
|
|
+import com.rongwei.safecommon.service.UserService;
|
|
|
+import lombok.Data;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.bouncycastle.util.Times;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class TimedTaskServiceImpl extends ServiceImpl<TimeSheetDao,TimeSheetDo> implements TimedTaskService {
|
|
|
+ @Autowired UserService userService;
|
|
|
+ @Autowired TimedTaskService timedTaskService;
|
|
|
+
|
|
|
+ @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();
|
|
|
+ // 获取当前年份
|
|
|
+ int currentYear = calendar.get(Calendar.YEAR);
|
|
|
+ // 获取当前周的周次
|
|
|
+ int currentWeek = calendar.get(Calendar.WEEK_OF_YEAR);
|
|
|
+
|
|
|
+ for (UserDo user : users) {
|
|
|
+ // 判断是否跨年度(即当前日期所在的周是否包含上一年和下一年)
|
|
|
+ for (int i = 0; i < 7; i++) {
|
|
|
+ // 计算该天的日期
|
|
|
+ calendar.setTime(startOfWeek);
|
|
|
+ calendar.add(Calendar.DATE, i); // 增加天数,遍历一周的每一天
|
|
|
+ Date currentDay = calendar.getTime();
|
|
|
+
|
|
|
+ // 获取该日期的年份
|
|
|
+ int yearOfDay = calendar.get(Calendar.YEAR);
|
|
|
+
|
|
|
+ if (yearOfDay != currentYear) {
|
|
|
+ handleCrossYear(user, calendar, yearOfDay, currentYear);
|
|
|
+ } else {
|
|
|
+ // 当前日期属于当前年份,直接生成周报数据
|
|
|
+ generateReport(user, calendar, currentWeek);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private TimeSheetDo createTimeSheetDo(UserDo user, Calendar calendar , 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.setTsweek(String.valueOf(currentWeek)); // 当前周次
|
|
|
+ timeSheetDo.setTsdate(calendar.getTime()); // 当前日期
|
|
|
+ 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) {
|
|
|
+ // 当前日期属于上一年的最后一周(12月30、31日等)
|
|
|
+ generateReportForYear(user, calendar, "previous year");
|
|
|
+ } else {
|
|
|
+ // 当前日期属于下一年的第一周(如2025年1月1号)
|
|
|
+ generateReportForYear(user, calendar, "next year");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成报告
|
|
|
+ private void generateReport(UserDo user, Calendar calendar,int currentWeek) {
|
|
|
+ TimeSheetDo timeSheetDo = createTimeSheetDo(user, calendar,currentWeek);
|
|
|
+ timedTaskService.save(timeSheetDo); // 保存数据
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成上一年或下一年的报告
|
|
|
+ private void generateReportForYear(UserDo user, Calendar calendar, String yearContext) {
|
|
|
+ TimeSheetDo timeSheetDo = createTimeSheetDo(user, calendar,-1);
|
|
|
+ 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); // 保存数据
|
|
|
+// }
|