|
@@ -223,4 +223,73 @@ public class UserActivityLogServiceImpl implements UserActivityLogService {
|
|
|
resultPage.setTotal(page.getTotal());
|
|
resultPage.setTotal(page.getTotal());
|
|
|
return resultPage;
|
|
return resultPage;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Page<UserActivityResponse> queryBoundFamiliesActivitiesForFamily(PatientActivityQueryRequest request) {
|
|
|
|
|
+ Long currentUserId = SecurityUtils.getCurrentUserId();
|
|
|
|
|
+ PermissionGroup role = SecurityUtils.getCurrentUserRole();
|
|
|
|
|
+
|
|
|
|
|
+ // 权限校验:仅家属
|
|
|
|
|
+ if (!PermissionGroup.PATIENT_FAMILY.equals(role)) {
|
|
|
|
|
+ throw new RuntimeException("无权限");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取家属绑定的所有家人ID
|
|
|
|
|
+ List<Long> boundFamilyIds = userBindingService.getBoundPatientIds(currentUserId);
|
|
|
|
|
+ if (boundFamilyIds.isEmpty()) {
|
|
|
|
|
+ // 如果没有绑定家人,返回空结果
|
|
|
|
|
+ return new Page<>(request.getPageNum(), request.getPageSize());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 过滤特定活动类型(家人健康数据、健康档案、复诊)
|
|
|
|
|
+ List<ActivityType> allowedTypes = List.of(
|
|
|
|
|
+ ActivityType.BLOOD_GLUCOSE_UPLOAD, ActivityType.BLOOD_GLUCOSE_UPDATE,
|
|
|
|
|
+ ActivityType.BLOOD_GLUCOSE_DELETE, ActivityType.BLOOD_PRESSURE_UPLOAD,
|
|
|
|
|
+ ActivityType.HEART_RATE_UPLOAD, ActivityType.PHYSICAL_DATA_UPLOAD,
|
|
|
|
|
+ ActivityType.HEALTH_RECORD_CREATE, ActivityType.HEALTH_RECORD_UPDATE,
|
|
|
|
|
+ ActivityType.FOLLOW_UP_CREATE, ActivityType.FOLLOW_UP_UPDATE,
|
|
|
|
|
+ ActivityType.FOLLOW_UP_CONFIRM
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // 如果前端指定了活动类型,则在允许的类型中进一步过滤
|
|
|
|
|
+ List<ActivityType> queryTypes = allowedTypes;
|
|
|
|
|
+ if (request.getActivityTypes() != null && !request.getActivityTypes().isEmpty()) {
|
|
|
|
|
+ queryTypes = request.getActivityTypes().stream()
|
|
|
|
|
+ .filter(allowedTypes::contains)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ // 如果过滤后没有匹配的类型,返回空结果
|
|
|
|
|
+ if (queryTypes.isEmpty()) {
|
|
|
|
|
+ return new Page<>(request.getPageNum(), request.getPageSize());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ QueryWrapper<UserActivityLog> wrapper = new QueryWrapper<>();
|
|
|
|
|
+ wrapper.in("user_id", boundFamilyIds)
|
|
|
|
|
+ .in("activity_type", queryTypes)
|
|
|
|
|
+ .orderByDesc("create_time");
|
|
|
|
|
+
|
|
|
|
|
+ Page<UserActivityLog> page = userActivityLogMapper.selectPage(
|
|
|
|
|
+ new Page<>(request.getPageNum(), request.getPageSize()), wrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // 转换为响应VO,使用 JsonUtils 反序列化 metadata
|
|
|
|
|
+ List<UserActivityResponse> responses = page.getRecords().stream().map(log -> {
|
|
|
|
|
+ UserActivityResponse resp = new UserActivityResponse();
|
|
|
|
|
+ resp.setId(String.valueOf(log.getId()));
|
|
|
|
|
+ resp.setUserId(log.getUserId());
|
|
|
|
|
+ resp.setActivityType(log.getActivityType());
|
|
|
|
|
+ resp.setActivityDescription(log.getActivityDescription());
|
|
|
|
|
+ resp.setRelatedEntityType(log.getRelatedEntityType());
|
|
|
|
|
+ resp.setRelatedEntityId(log.getRelatedEntityId());
|
|
|
|
|
+ // 使用 JsonUtils 反序列化 metadata
|
|
|
|
|
+ resp.setMetadata(JsonUtils.fromJson(log.getMetadata(), Object.class));
|
|
|
|
|
+ resp.setCreateTime(log.getCreateTime());
|
|
|
|
|
+ return resp;
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ Page<UserActivityResponse> resultPage = new Page<>();
|
|
|
|
|
+ resultPage.setRecords(responses);
|
|
|
|
|
+ resultPage.setTotal(page.getTotal());
|
|
|
|
|
+ return resultPage;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|