|
|
@@ -15,6 +15,7 @@ import oracle.sql.DATE;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.context.annotation.Scope;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -61,6 +62,8 @@ public class AttendanceDetail extends AbstractDomain<String, AttendanceDetailPo>
|
|
|
private AttendanceDetailRepository attendanceDetailRepository;
|
|
|
@Resource
|
|
|
private UpdateDataTableDao updateDataTableDao;
|
|
|
+ @Resource
|
|
|
+ private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern(StringPool.DATE_FORMAT_DATETIME);
|
|
|
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(StringPool.DATE_FORMAT_DATE);
|
|
|
@@ -599,5 +602,43 @@ public class AttendanceDetail extends AbstractDomain<String, AttendanceDetailPo>
|
|
|
}
|
|
|
return records;
|
|
|
}
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 修正所有满足条件的考勤记录(基于每条记录的 shi_fou_kua_ri_ 和 ri_qi_)
|
|
|
+ * 非跨日记录:修正 ri_qi_ = 昨天
|
|
|
+ * 跨日记录:修正 ri_qi_ = 前天
|
|
|
+ * 利用 huan_cun_biao_zhi 防重,仅处理未标记的记录
|
|
|
+ */
|
|
|
+ public void correctRecentAttendanceOnClock() {
|
|
|
+ // 修正非跨日:ri_qi_ 在 [CURDATE()-3, CURDATE()-1]
|
|
|
+ String sqlNonCross = "UPDATE t_attendance_detail " +
|
|
|
+ "SET kao_qin_zhuang_ta = CASE " +
|
|
|
+ " WHEN zhuang_tai_1_ = '正常' AND zhuang_tai_2_ = '正常' THEN '正常' " +
|
|
|
+ " ELSE '异常' END, " +
|
|
|
+ " huan_cun_biao_zhi = 'Y', " +
|
|
|
+ " update_time_ = NOW() " +
|
|
|
+ "WHERE shi_fou_kua_ri_ = 'N' " +
|
|
|
+ " AND ri_qi_ BETWEEN DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND DATE_SUB(CURDATE(), INTERVAL 1 DAY) " +
|
|
|
+ " AND (huan_cun_biao_zhi IS NULL OR huan_cun_biao_zhi != 'Y')";
|
|
|
+
|
|
|
+ // 修正跨日:ri_qi_ 在 [CURDATE()-4, CURDATE()-2]
|
|
|
+ String sqlCross = "UPDATE t_attendance_detail " +
|
|
|
+ "SET kao_qin_zhuang_ta = CASE " +
|
|
|
+ " WHEN zhuang_tai_1_ = '正常' AND zhuang_tai_2_ = '正常' THEN '正常' " +
|
|
|
+ " ELSE '异常' END, " +
|
|
|
+ " huan_cun_biao_zhi = 'Y', " +
|
|
|
+ " update_time_ = NOW() " +
|
|
|
+ "WHERE shi_fou_kua_ri_ = 'Y' " +
|
|
|
+ " AND ri_qi_ BETWEEN DATE_SUB(CURDATE(), INTERVAL 4 DAY) AND DATE_SUB(CURDATE(), INTERVAL 2 DAY) " +
|
|
|
+ " AND (huan_cun_biao_zhi IS NULL OR huan_cun_biao_zhi != 'Y')";
|
|
|
+
|
|
|
+ try {
|
|
|
+ int updated1 = jdbcTemplate.update(sqlNonCross);
|
|
|
+ int updated2 = jdbcTemplate.update(sqlCross);
|
|
|
+ if (updated1 + updated2 > 0) {
|
|
|
+ LOGGER.info("打卡触发修正最近3天考勤状态,非跨日更新={}, 跨日更新={}", updated1, updated2);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOGGER.error("打卡触发修正考勤状态失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|