Procházet zdrojové kódy

fix: 统一SELF_CHECK门禁判定口径,五维自检或健康档案任一存在即解锁能量沙盘

- hasFamilySelfCheck: 在原有health_status判定基础上,新增five_dimension_self_check判定,
  家庭内任一成员完成五维自检也视为通过,修复完成健康自测后沙盘仍被锁定的问题
- isGateUnlocked(SELF_CHECK): count同时累加health_status记录数,与hasFamilySelfCheck口径一致
Agnes Agent před 2 týdny
rodič
revize
be9dcbd9b4

+ 28 - 6
cfc-backend/src/main/java/com/etotem/cfc/service/UnlockGateService.java

@@ -73,8 +73,18 @@ public class UnlockGateService {
                     new LambdaQueryWrapper<User>().eq(User::getFamilyId, familyId));
             if (familyUsers.isEmpty()) return false;
             List<Long> userIds = familyUsers.stream().map(User::getId).collect(Collectors.toList());
-            long count = selfCheckMapper.selectCount(
+            long selfCheckCount = selfCheckMapper.selectCount(
                     new LambdaQueryWrapper<FiveDimensionSelfCheck>().in(FiveDimensionSelfCheck::getUserId, userIds));
+            // 家庭成员健康档案(health_status) 同样视为完成自检
+            long healthCount = 0L;
+            List<FamilyMember> familyMembers = familyMemberMapper.selectList(
+                    new LambdaQueryWrapper<FamilyMember>().eq(FamilyMember::getFamilyId, familyId));
+            if (!familyMembers.isEmpty()) {
+                List<Long> memberIds = familyMembers.stream().map(FamilyMember::getId).collect(Collectors.toList());
+                healthCount = healthStatusMapper.selectCount(
+                        new LambdaQueryWrapper<HealthStatus>().in(HealthStatus::getMemberId, memberIds));
+            }
+            long count = selfCheckCount + healthCount;
             int minCount = 1;
             if (gate.getConditionParams() != null && !gate.getConditionParams().isEmpty()) {
                 // parse JSON for minCount
@@ -150,13 +160,25 @@ public class UnlockGateService {
      */
     public boolean hasFamilySelfCheck(Long familyId) {
         if (familyId == null) return false;
+        // 原有:任一家庭成员有健康档案(health_status)
         List<FamilyMember> familyMembers = familyMemberMapper.selectList(
                 new LambdaQueryWrapper<FamilyMember>().eq(FamilyMember::getFamilyId, familyId));
-        if (familyMembers.isEmpty()) return false;
-        List<Long> memberIds = familyMembers.stream().map(FamilyMember::getId).collect(Collectors.toList());
-        long healthCount = healthStatusMapper.selectCount(
-                new LambdaQueryWrapper<HealthStatus>().in(HealthStatus::getMemberId, memberIds));
-        return healthCount >= 1;
+        if (!familyMembers.isEmpty()) {
+            List<Long> memberIds = familyMembers.stream().map(FamilyMember::getId).collect(Collectors.toList());
+            long healthCount = healthStatusMapper.selectCount(
+                    new LambdaQueryWrapper<HealthStatus>().in(HealthStatus::getMemberId, memberIds));
+            if (healthCount >= 1) return true;
+        }
+        // 新增:任一家庭成员完成五维自检(five_dimension_self_check) 也视为通过(与 isGateUnlocked(SELF_CHECK) 保持一致)
+        List<User> familyUsers = userMapper.selectList(
+                new LambdaQueryWrapper<User>().eq(User::getFamilyId, familyId));
+        if (!familyUsers.isEmpty()) {
+            List<Long> userIds = familyUsers.stream().map(User::getId).collect(Collectors.toList());
+            long selfCheckCount = selfCheckMapper.selectCount(
+                    new LambdaQueryWrapper<FiveDimensionSelfCheck>().in(FiveDimensionSelfCheck::getUserId, userIds));
+            return selfCheckCount >= 1;
+        }
+        return false;
     }
 
     // ========== 当前锁定关卡 ==========