智能医疗健康管理App的开发需严格遵循《个人信息保护法》《医疗卫生机构网络安全管理办法》等法规要求,核心设计围绕数据安全、功能合规、用户隐私保护展开。以下为通用技术栈(前端Flutter+后端SpringBoot)下的核心模块示例代码,可根据业务需求迭代调整。
—
### 一、后端核心接口模块(SpringBoot 3.x实现)
#### 1. 用户实名认证接口(医疗数据需绑定真实身份,避免数据滥用)
“`java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping(“/api/user/auth”)
public class UserAuthController {
@Resource
private ThirdPartyIdVerifyService idVerifyService; // 对接合规第三方实名认证服务
@Resource
private AESUtils aesUtils; // 敏感数据加密工具
@Resource
private UserMapper userMapper;
@PostMapping(“/realName”)
public Map
Map
try {
// 1. 调用第三方实名认证接口,核验身份真实性
boolean verifyPass = idVerifyService.verify(dto.getRealName(), dto.getIdCard());
if (!verifyPass) {
result.put(“code”, 400);
result.put(“msg”, “实名认证失败,请检查身份信息”);
return result;
}
// 2. 敏感信息加密后存储,禁止明文存储身份证号
UserInfo userInfo = new UserInfo();
userInfo.setUserId(dto.getUserId());
userInfo.setRealName(aesUtils.encrypt(dto.getRealName()));
userInfo.setIdCard(aesUtils.encrypt(dto.getIdCard()));
userInfo.setAuthStatus(1);
userMapper.updateById(userInfo);
result.put(“code”, 200);
result.put(“msg”, “实名认证成功”);
} catch (Exception e) {
result.put(“code”, 500);
result.put(“msg”, “系统异常,请稍后重试”);
}
return result;
}
}
“`
—
### 二、前端健康数据采集模块(Flutter跨端实现)
#### 1. 对接系统健康平台采集生理数据(支持苹果HealthKit、安卓Health Connect)
“`dart
import ‘package:health/health.dart’;
import ‘package:dio/dio.dart’;
class HealthDataService {
final Health _health = Health();
final Dio _dio = Dio();
// 申请健康数据读取权限
Future
List
HealthDataType.STEP_COUNT,
HealthDataType.HEART_RATE,
HealthDataType.SLEEP_ASLEEP,
HealthDataType.BLOOD_GLUCOSE,
];
return await _health.requestAuthorization(types, permissions: [HealthDataAccess.READ]);
}
// 采集近7天健康数据并上传
Future
bool hasPermission = await requestHealthPermission();
if (!hasPermission) return;
DateTime endTime = DateTime.now();
DateTime startTime = endTime.subtract(const Duration(days: 7));
// 获取健康数据
List
startTime: startTime,
endTime: endTime,
types: [
HealthDataType.STEP_COUNT,
HealthDataType.HEART_RATE,
HealthDataType.SLEEP_ASLEEP,
HealthDataType.BLOOD_GLUCOSE,
],
);
// 格式化后上传到后端
List
—
### 三、医疗敏感数据加密工具类(Java实现)
医疗数据属于最高级别的敏感个人信息,所有落盘、传输数据需做加密处理,以下为AES对称加密实现:
“`java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtils {
// 加密密钥需存在配置中心,禁止硬编码到代码中
private static final String KEY = “你的32位AES加密密钥”;
private static final String ALGORITHM = “AES/ECB/PKCS5Padding”;
// 加密
public static String encrypt(String content) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), “AES”);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(content.getBytes(“UTF-8”));
return Base64.getEncoder().encodeToString(encrypted);
}
// 解密
public static String decrypt(String encryptStr) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), “AES”);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptBytes = cipher.doFinal(Base64.getDecoder().decode(encryptStr));
return new String(decryptBytes, “UTF-8”);
}
}
“`
—
### 四、AI健康建议生成接口(对接大模型实现)
需注意普通健康管理App禁止提供疾病诊断服务,仅可输出科普类健康建议,需添加明确免责声明:
“`java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
@RestController
@RequestMapping(“/api/ai/health”)
public class AiHealthAdviceController {
@Resource
private DoubaoModelService doubaoModelService; // 对接豆包大模型服务
@PostMapping(“/getAdvice”)
public Map
// 拼接prompt,明确要求不做诊断,仅给健康建议
String prompt = “你是健康科普助手,以下是用户近期的健康数据:” + dto.getHealthData() +
“,请给出合理的生活作息、饮食建议,禁止给出疾病诊断、用药指导内容,开头必须添加免责声明:本建议仅为健康科普参考,不能替代执业医师诊断,如有不适请及时就医。”;
String advice = doubaoModelService.call(prompt);
return Map.of(“code”, 200, “msg”, “success”, “data”, advice);
}
}
“`
—
### 开发注意事项
1. **合规要求**:上线前需完成等保三级测评,所有用户健康数据禁止出境,若涉及在线问诊、处方开具等医疗服务,需提前取得《互联网医院执业许可证》;
2. **安全要求**:所有接口需添加签名校验、用户权限校验,敏感操作需做二次身份验证,数据访问全程留痕可追溯;
3. **功能边界**:未取得医疗资质的前提下,App不得标注任何“医疗用途”,不得输出疾病诊断、治疗方案、用药指导类内容,避免违规风险。
本文由AI大模型(Doubao-Seed-1.6)结合行业知识与创新视角深度思考后创作。