Просмотр исходного кода

fix(doa): 修复代管校验空指针绕过与 weekStart Locale 依赖

1. 代管校验:selfMemberId 为 null(调用者在家庭下无成员身份)时,
   原条件直接跳过校验,非家庭成员可为任何成员(含可登录成员)创建阶段。
   收紧为 isSelf = selfMemberId != null && equals(memberId),null 视为非本人,
   不可代管可登录成员。
2. weekStart():补 setFirstDayOfWeek(MONDAY),避免 en_US/C 等周日起始
   Locale 下 set(DAY_OF_WEEK, MONDAY) 使周日滚到下周,导致 week1 起点
   晚于 stage.startDate。
Sisyphus 1 неделя назад
Родитель
Сommit
05ab739b06
1 измененных файлов с 6 добавлено и 5 удалено
  1. 6 5
      cfc-backend/src/main/java/com/etotem/cfc/service/DoaService.java

+ 6 - 5
cfc-backend/src/main/java/com/etotem/cfc/service/DoaService.java

@@ -40,6 +40,7 @@ public class DoaService {
     /** 周起始:周一 */
     private static Date weekStart(Date date) {
         Calendar cal = Calendar.getInstance();
+        cal.setFirstDayOfWeek(Calendar.MONDAY);
         cal.setTime(date);
         cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
         cal.set(Calendar.HOUR_OF_DAY, 0);
@@ -94,12 +95,12 @@ public class DoaService {
             return Result.error("目标成员不属于当前家庭");
         }
 
-        // 代管校验:memberId != 当前成员 时,目标成员必须是不能登录成员(userId 为空)
+        // 代管校验:memberId != 当前成员 时,目标成员必须是不能登录成员(userId 为空);
+        // selfMemberId 为 null(调用者在家庭下无成员身份)也视为非本人,不可代管可登录成员
         Long selfMemberId = resolveMemberIdByUserId(creatorUserId, familyId);
-        if (selfMemberId != null && !selfMemberId.equals(memberId)) {
-            if (targetMember.getUserId() != null) {
-                return Result.error("只能代管不能登录成员的目标");
-            }
+        boolean isSelf = selfMemberId != null && selfMemberId.equals(memberId);
+        if (!isSelf && targetMember.getUserId() != null) {
+            return Result.error("只能代管不能登录成员的目标");
         }
 
         // 校验目标领域与去重