|
@@ -18,7 +18,7 @@ import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
-import java.time.LocalDate;
|
|
|
|
|
|
|
+import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -129,6 +129,10 @@ public class FamilyJoinRequestService {
|
|
|
throw new RuntimeException("您已有待审批的加入请求,请勿重复提交");
|
|
throw new RuntimeException("您已有待审批的加入请求,请勿重复提交");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 准入校验:被邀请人必须已完善真实姓名/出生日期/性别(需求变更 2026-11-07-family-join-required-info,
|
|
|
|
|
+ // §3 AC-R3 / §5 WI-3,能力键 family.invite.joinValidationRules);任一缺失/非法直接抛错、不落库
|
|
|
|
|
+ validateJoinRequiredInfo(currentUser);
|
|
|
|
|
+
|
|
|
// 创建请求
|
|
// 创建请求
|
|
|
FamilyJoinRequest request = new FamilyJoinRequest();
|
|
FamilyJoinRequest request = new FamilyJoinRequest();
|
|
|
request.setRequesterUserId(userId);
|
|
request.setRequesterUserId(userId);
|
|
@@ -148,31 +152,47 @@ public class FamilyJoinRequestService {
|
|
|
return request;
|
|
return request;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private static final Date MIN_BIRTHDAY;
|
|
|
|
|
+
|
|
|
|
|
+ static {
|
|
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
|
|
+ c.clear();
|
|
|
|
|
+ c.set(1900, Calendar.JANUARY, 1);
|
|
|
|
|
+ MIN_BIRTHDAY = c.getTime();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
- * 准入校验:被邀请人申请加入家庭前必须已完善真实姓名、出生日期、性别(规格 2026-11-07-family-join-required-info)
|
|
|
|
|
- * - 真实姓名:trim 后非空,长度 1–20 字;
|
|
|
|
|
- * - 出生日期:非空、不晚于今天、不早于 1900-01-01(年龄不设上限);
|
|
|
|
|
- * - 性别:仅限 male / female 二值(大小写敏感)。
|
|
|
|
|
|
|
+ * 准入校验:被邀请人必须已完善真实姓名/出生日期/性别(规格 2026-11-07-family-join-required-info §3 AC-R3 / §5 WI-3)。
|
|
|
|
|
+ * 与 UserService 解析口径保持一致(UserService.java:492-505):
|
|
|
|
|
+ * <ul>
|
|
|
|
|
+ * <li>真实姓名:trim 后非空,长度 1–20 字;null/空/超 20 字 → 「请先完善真实姓名、出生日期与性别后再申请加入家庭」</li>
|
|
|
|
|
+ * <li>出生日期:非空;晚于今天 → 「出生日期不能晚于今天」;早于 1900-01-01 → 「出生日期不合法」(不设年龄上限,主理人 2026-11-07 确认)</li>
|
|
|
|
|
+ * <li>性别:仅限 male/female(大小写敏感);null/空/其他/混用 → 「请先完善真实姓名、出生日期与性别后再申请加入家庭」</li>
|
|
|
|
|
+ * </ul>
|
|
|
*/
|
|
*/
|
|
|
private void validateJoinRequiredInfo(User u) {
|
|
private void validateJoinRequiredInfo(User u) {
|
|
|
- final String genMsg = "请先完善真实姓名、出生日期与性别后再申请加入家庭";
|
|
|
|
|
String realName = u.getRealName();
|
|
String realName = u.getRealName();
|
|
|
if (realName == null || realName.trim().isEmpty() || realName.trim().length() > 20) {
|
|
if (realName == null || realName.trim().isEmpty() || realName.trim().length() > 20) {
|
|
|
- throw new RuntimeException(genMsg);
|
|
|
|
|
|
|
+ throw new RuntimeException("请先完善真实姓名、出生日期与性别后再申请加入家庭");
|
|
|
}
|
|
}
|
|
|
Date birthday = u.getBirthday();
|
|
Date birthday = u.getBirthday();
|
|
|
if (birthday == null) {
|
|
if (birthday == null) {
|
|
|
- throw new RuntimeException(genMsg);
|
|
|
|
|
|
|
+ throw new RuntimeException("请先完善真实姓名、出生日期与性别后再申请加入家庭");
|
|
|
}
|
|
}
|
|
|
String gender = u.getGender();
|
|
String gender = u.getGender();
|
|
|
if (!"male".equals(gender) && !"female".equals(gender)) {
|
|
if (!"male".equals(gender) && !"female".equals(gender)) {
|
|
|
- throw new RuntimeException(genMsg);
|
|
|
|
|
- }
|
|
|
|
|
- java.sql.Date today = java.sql.Date.valueOf(LocalDate.now());
|
|
|
|
|
|
|
+ throw new RuntimeException("请先完善真实姓名、出生日期与性别后再申请加入家庭");
|
|
|
|
|
+ }
|
|
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
|
|
+ cal.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
|
|
+ cal.set(Calendar.MINUTE, 0);
|
|
|
|
|
+ cal.set(Calendar.SECOND, 0);
|
|
|
|
|
+ cal.set(Calendar.MILLISECOND, 0);
|
|
|
|
|
+ Date today = cal.getTime();
|
|
|
if (birthday.after(today)) {
|
|
if (birthday.after(today)) {
|
|
|
throw new RuntimeException("出生日期不能晚于今天");
|
|
throw new RuntimeException("出生日期不能晚于今天");
|
|
|
}
|
|
}
|
|
|
- if (birthday.before(java.sql.Date.valueOf(LocalDate.of(1900, 1, 1)))) {
|
|
|
|
|
|
|
+ if (birthday.before(MIN_BIRTHDAY)) {
|
|
|
throw new RuntimeException("出生日期不合法");
|
|
throw new RuntimeException("出生日期不合法");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|