This commit is contained in:
=
2026-08-25 11:34:43 +08:00
parent c043980a08
commit 8d6a4d55c2
@@ -150,7 +150,38 @@ public class BirthdayBlessingServiceImpl extends BaseServiceImpl<Sys_user> imple
private Sql buildUserSql(String searchKeyword, String unionId, String unitId, String userState, String personType, private Sql buildUserSql(String searchKeyword, String unionId, String unitId, String userState, String personType,
String preparedBy, String employmentType, String birthdayStart, String birthdayEnd, boolean todayOnly) { String preparedBy, String employmentType, String birthdayStart, String birthdayEnd, boolean todayOnly) {
Sql sql = Sqls.create("SELECT u.id, u.loginname, u.username, u.sex, u.birthday, u.mobile, u.unitName, u.unionName, u.userState, u.personType, u.preparedBy, DATEDIFF(CASE WHEN DATE_FORMAT(u.birthday, '%m-%d') >= DATE_FORMAT(CURDATE(), '%m-%d') THEN STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(u.birthday, '%m-%d')), '%Y-%m-%d') ELSE STR_TO_DATE(CONCAT(YEAR(CURDATE()) + 1, '-', DATE_FORMAT(u.birthday, '%m-%d')), '%Y-%m-%d') END, CURDATE()) AS daysUntilBirthday FROM vw_user u $condition"); // 2 月 29 日仅按下一个实际闰年的 2 月 29 日计算,避免非闰年拼接无效日期导致倒计时为空。
Sql sql = Sqls.create("""
SELECT u.id, u.loginname, u.username, u.sex,
DATE_FORMAT(u.birthday, '%Y-%m-%d') AS birthday,
u.mobile, u.unitName, u.unionName, u.userState, u.personType, u.preparedBy,
DATEDIFF(
CASE
WHEN DATE_FORMAT(u.birthday, '%m-%d') = '02-29' THEN
CASE
WHEN (MOD(YEAR(CURDATE()), 400) = 0 OR (MOD(YEAR(CURDATE()), 4) = 0 AND MOD(YEAR(CURDATE()), 100) <> 0))
AND DATE(CONCAT(YEAR(CURDATE()), '-02-29')) >= CURDATE()
THEN DATE(CONCAT(YEAR(CURDATE()), '-02-29'))
ELSE DATE(CONCAT(
CASE
WHEN MOD(YEAR(CURDATE()) + 1, 400) = 0 OR (MOD(YEAR(CURDATE()) + 1, 4) = 0 AND MOD(YEAR(CURDATE()) + 1, 100) <> 0) THEN YEAR(CURDATE()) + 1
WHEN MOD(YEAR(CURDATE()) + 2, 400) = 0 OR (MOD(YEAR(CURDATE()) + 2, 4) = 0 AND MOD(YEAR(CURDATE()) + 2, 100) <> 0) THEN YEAR(CURDATE()) + 2
WHEN MOD(YEAR(CURDATE()) + 3, 400) = 0 OR (MOD(YEAR(CURDATE()) + 3, 4) = 0 AND MOD(YEAR(CURDATE()) + 3, 100) <> 0) THEN YEAR(CURDATE()) + 3
WHEN MOD(YEAR(CURDATE()) + 4, 400) = 0 OR (MOD(YEAR(CURDATE()) + 4, 4) = 0 AND MOD(YEAR(CURDATE()) + 4, 100) <> 0) THEN YEAR(CURDATE()) + 4
WHEN MOD(YEAR(CURDATE()) + 5, 400) = 0 OR (MOD(YEAR(CURDATE()) + 5, 4) = 0 AND MOD(YEAR(CURDATE()) + 5, 100) <> 0) THEN YEAR(CURDATE()) + 5
WHEN MOD(YEAR(CURDATE()) + 6, 400) = 0 OR (MOD(YEAR(CURDATE()) + 6, 4) = 0 AND MOD(YEAR(CURDATE()) + 6, 100) <> 0) THEN YEAR(CURDATE()) + 6
WHEN MOD(YEAR(CURDATE()) + 7, 400) = 0 OR (MOD(YEAR(CURDATE()) + 7, 4) = 0 AND MOD(YEAR(CURDATE()) + 7, 100) <> 0) THEN YEAR(CURDATE()) + 7
ELSE YEAR(CURDATE()) + 8
END, '-02-29'))
END
WHEN DATE_FORMAT(u.birthday, '%m-%d') >= DATE_FORMAT(CURDATE(), '%m-%d')
THEN STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(u.birthday, '%m-%d')), '%Y-%m-%d')
ELSE STR_TO_DATE(CONCAT(YEAR(CURDATE()) + 1, '-', DATE_FORMAT(u.birthday, '%m-%d')), '%Y-%m-%d')
END,
CURDATE()
) AS daysUntilBirthday
FROM vw_user u $condition
""");
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("u.member", "=", 1).and("u.disabled", "=", 0).and("u.birthday", "is not", null); cnd.and("u.member", "=", 1).and("u.disabled", "=", 0).and("u.birthday", "is not", null);
if (StrUtil.isNotBlank(searchKeyword)) { if (StrUtil.isNotBlank(searchKeyword)) {