1. 项目背景与需求概述
针对"某用户每天时刻都在吐痰"这一高频、持续、强需求场景,本文设计一套完整的吐痰行为管理系统(Spit Management System, SMS)。系统覆盖记录、分析、健康、社交、硬件联动等九大模块,帮助用户科学管理吐痰行为,辅助健康监测。
1.1 核心痛点
| 痛点 | 说明 | 解决方案 |
|---|
| 记录繁琐 | 手动记录耗时费力 | 语音唤醒+自动计数 |
| 缺乏分析 | 无法掌握频率规律 | 热力图+趋势曲线 |
| 健康隐患 | 异常痰况难以及时发现 | AI健康评分+预警 |
| 行为干预 | 难以坚持减少吐痰 | 目标设定+奖励机制 |
1.2 系统架构总览
2. 核心吐痰记录模块
2.1 功能清单
| 功能 | 实现方式 | 数据格式 |
|---|
| 一键打卡 | 大按钮+语音"呸"唤醒 | timestamp |
| 自动计数 | 陀螺仪+麦克风识别 | int |
| 类型分类 | 干痰/湿痰/带血/泡沫状 | enum |
| 颜色记录 | 白/黄/绿/灰黑/带血丝 | color_code |
| 量估算 | 小/中/大或AI拍照估算 | ml |
| 位置标记 | GPS+室内定位 | lat/lng |
| 姿势记录 | 站立/坐着/躺着/边走边吐 | enum |
| 时长统计 | 酝酿+排出耗时 | seconds |
| 时间戳 | 精确到秒,支持补录 | datetime |
| 备注 | 文字/语音备注 | text |
2.2 数据表设计
CREATETABLEspit_records(idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,spit_timeDATETIMENOTNULL,spit_typeENUM('dry','wet','bloody','foamy','thick','thin')NOTNULL,spit_colorENUM('white','yellow','green','gray_black','blood_streaked'),spit_volumeENUM('small','medium','large'),volume_mlDECIMAL(5,2),location_latDECIMAL(10,6),location_lngDECIMAL(10,6),postureENUM('standing','sitting','lying','walking'),duration_secondsINT,remarkTEXT,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,INDEXidx_user_time(user_id,spit_time));
2.3 记录界面示例
publicclassSpitRecordActivityextendsAppCompatActivity{privateSpitRepositoryrepository;privateSensorManagersensorManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_spit_record);repository=newSpitRepository(this);initSensors();initVoiceWakeup();}privatevoidinitSensors(){sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);Sensoraccelerometer=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(this,accelerometer,SensorManager.SENSOR_DELAY_NORMAL);}}
3. 频率与节律分析模块
3.1 分析维度
| 分析项 | 计算方式 | 展示形式 |
|---|
| 实时频率 | 次/小时、次/天、次/周 | 仪表盘 |
| 热力图 | 24小时分布 | 热力图 |
| 日历视图 | 月视图每日次数 | 日历 |
| 间隔分析 | 平均/最短/最长间隔 | 统计表 |
| 连续记录 | 连续天数、最长记录 | 徽章 |
| 趋势曲线 | 日/周/月/年对比 | 折线图 |
| 异常预警 | 突然增多/减少 | 推送通知 |
| 节律预测 | AI预测下次时间 | 预测卡片 |
3.2 频率统计SQL
SELECTDATE(spit_time)ASspit_date,COUNT(*)ASdaily_count,AVG(duration_seconds)ASavg_duration,MIN(TIMESTAMPDIFF(MINUTE,LAG(spit_time)OVER(ORDERBYspit_time),spit_time))ASmin_interval_minutesFROMspit_recordsWHEREuser_id=?GROUPBYDATE(spit_time)ORDERBYspit_dateDESC;
3.3 热力图数据示例
| 时段 | 周一 | 周二 | 周三 | 周四 | 周五 |
|---|
| 00-04 | 2 | 1 | 3 | 2 | 1 |
| 04-08 | 5 | 6 | 4 | 7 | 5 |
| 08-12 | 12 | 15 | 14 | 16 | 13 |
| 12-16 | 8 | 9 | 11 | 10 | 12 |
| 16-20 | 6 | 7 | 5 | 8 | 6 |
| 20-24 | 3 | 4 | 2 | 3 | 5 |
4. 健康监测与预警模块
4.1 健康评分体系
| 指标 | 权重 | 评分范围 | 预警阈值 |
|---|
| 颜色 | 30% | 0-100 | 灰黑/带血<40 |
| 稠度 | 25% | 0-100 | 浓稠<50 |
| 频率 | 25% | 0-100 | >20次/天<30 |
| 伴随症状 | 20% | 0-100 | 发热/胸闷<40 |
4.2 预警规则引擎
defevaluate_health_risk(spit_record):risk_score=0ifspit_record.colorin['gray_black','blood_streaked']:risk_score+=40ifspit_record.type=='thick':risk_score+=20ifspit_record.volume=='large':risk_score+=15ifspit_record.duration>30:risk_score+=10ifrisk_score>=60:return"HIGH_RISK","建议立即就医"elifrisk_score>=30:return"MEDIUM_RISK","建议观察并咨询医生"else:return"LOW_RISK","正常范围"
4.3 就医报告生成
publicclassMedicalReportGenerator{publicvoidgenerateReport(Useruser,List<SpitRecord>records){PDFDocumentdoc=newPDFDocument();doc.addSection("患者基本信息");doc.addSection("吐痰频率统计");doc.addSection("颜色分布分析");doc.addSection("健康评分趋势");doc.addSection("异常记录明细");doc.save("medical_report_"+user.getId()+".pdf");}}
5. 习惯养成与干预模块
5.1 干预策略对比
| 策略 | 机制 | 预期效果 | 适用人群 |
|---|
| 目标设定 | 每日上限递减 | 逐步减少 | 所有用户 |
| 奖励机制 | 连续少吐得徽章 | 正向激励 | 轻度用户 |
| 提醒抑制 | 频繁时弹"忍一忍" | 即时干预 | 中度用户 |
| 替代行为 | 喝水/含片/深呼吸 | 行为替代 | 所有用户 |
| 番茄钟 | 25分钟允许一次 | 节奏控制 | 重度用户 |
| 惩罚机制 | 超量扣积分/捐公益 | 负向约束 | 重度用户 |
5.2 成就徽章体系
| 徽章 | 条件 | 图标 |
|---|
| 百次达人 | 累计记录100次 | 🏅 |
| 清痰先锋 | 连续7天减少20% | 🎯 |
| 节律大师 | 连续30天记录 | 📊 |
| 健康卫士 | 健康评分>80持续30天 | 💪 |
6. 社交与分享模块
6.1 社交功能矩阵
| 功能 | 隐私级别 | 交互方式 | 数据展示 |
|---|
| 动态发布 | 公开/好友 | 图文/视频 | 时间线 |
| 匿名树洞 | 匿名 | 文字 | 论坛 |
| 痰友圈 | 同症状 | 群组 | 社区 |
| 医生问答 | 私密 | 在线咨询 | 1对1 |
| 挑战赛 | 公开 | 21天挑战 | 排行榜 |
| 数据对比 | 匿名 | 同龄对比 | 图表 |
6.2 排行榜数据表
CREATETABLEleaderboard(idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,periodENUM('daily','weekly','monthly')NOTNULL,spit_countINTDEFAULT0,reduction_rateDECIMAL(5,2)DEFAULT0,rankINT,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,UNIQUEKEYuk_user_period(user_id,period));
7. 硬件与智能联动模块
7.1 硬件设备联动
| 设备 | 联动方式 | 数据采集 | 通信协议 |
|---|
| 智能痰盂 | 自动计数/称重/拍照 | 重量+图像 | BLE |
| 智能手环 | 动作识别 | 加速度 | BLE |
| 智能音箱 | 语音记录 | 音频 | WiFi |
| 空气检测仪 | PM2.5监测 | 空气质量 | WiFi |
| 加湿器 | 湿度调节 | 环境湿度 | Zigbee |
| 智能垃圾桶 | 自动开盖 | 红外感应 | BLE |
7.2 硬件数据接入
publicclassHardwareIntegrationService{privatefinalBleManagerbleManager;privatefinalMqttClientmqttClient;publicvoidprocessSpitDetection(SpitDetectionEventevent){// 硬件触发记录SpitRecordrecord=newSpitRecord();record.setUserId(event.getUserId());record.setSpitTime(newDate());record.setSource(event.getDeviceType());record.setVolumeMl(event.getWeight()*1.05);// 同步到云端mqttClient.publish("spit/records",record.toJson());}}
8. 数据管理与隐私模块
8.1 数据管理功能
| 功能 | 实现方式 | 数据安全 |
|---|
| 多端同步 | 手机/平板/手表 | 端到端加密 |
| 数据导出 | CSV/Excel/PDF | 本地生成 |
| 隐私模式 | 本地存储不上云 | AES-256 |
| 生物识别 | 指纹/面部解锁 | 本地验证 |
| 匿名统计 | 科研数据脱敏 | 差分隐私 |
| 备份恢复 | 自动/手动 | 加密备份 |
8.2 数据加密实现
fromcryptography.fernetimportFernetimportbase64classDataEncryption:def__init__(self):self.key=Fernet.generate_key()self.cipher=Fernet(self.key)defencrypt_record(self,record_data):encrypted=self.cipher.encrypt(record_data.encode())returnbase64.urlsafe_b64encode(encrypted).decode()defdecrypt_record(self,encrypted_data):decoded=base64.urlsafe_b64decode(encrypted_data)returnself.cipher.decrypt(decoded).decode()
9. 趣味与心理模块
9.1 趣味功能设计
| 功能 | 交互方式 | 心理作用 |
|---|
| 拟音效 | 每次记录播放音效 | 正向反馈 |
| 虚拟宠物 | 吐痰喂养小怪物 | 行为绑定 |
| 吐痰地图 | 匿名标记热点 | 群体认同 |
| 打油诗 | AI生成趣味诗句 | 情绪释放 |
| 情绪标签 | 记录时心情 | 自我觉察 |
| 冥想引导 | 1分钟呼吸练习 | 冲动控制 |
9.2 虚拟宠物系统
publicclassVirtualPetSystem{privatePetpet;privateintfeedingCount;publicvoidfeedPet(SpitRecordrecord){feedingCount++;pet.setEnergy(pet.getEnergy()+10);pet.setMood(pet.getMood()+5);if(feedingCount%10==0){pet.evolve();sendAchievementNotification("宠物进化成功!");}}}
10. 系统管理模块
10.1 权限管理
| 角色 | 权限范围 | 功能 |
|---|
| 普通用户 | 个人数据 | 记录/查看/导出 |
| 医生 | 授权患者数据 | 分析/报告/建议 |
| 管理员 | 系统全部 | 用户/日志/配置 |
10.2 API开放平台
fromfastapiimportFastAPI,Depends,HTTPExceptionfromtypingimportList app=FastAPI()@app.get("/api/v1/spit-records")asyncdefget_spit_records(user_id:int,start_date:str,end_date:str,api_key:str=Depends(verify_api_key)):records=awaitquery_records(user_id,start_date,end_date)return{"status":"success","data":records,"total":len(records)}
11. 总结与展望
11.1 系统功能统计
| 模块 | 功能数 | 数据表 | 接口数 |
|---|
| 记录模块 | 10 | 3 | 8 |
| 分析模块 | 8 | 4 | 6 |
| 健康监测 | 7 | 3 | 5 |
| 习惯养成 | 6 | 2 | 4 |
| 社交分享 | 6 | 3 | 7 |
| 硬件联动 | 6 | 2 | 5 |
| 数据管理 | 7 | 4 | 6 |
| 趣味心理 | 6 | 2 | 3 |
| 系统管理 | 7 | 5 | 9 |
| 合计 | 63 | 28 | 53 |
11.2 技术架构演进
本系统通过九大模块的协同设计,实现了从吐痰记录到健康管理的全链路闭环。未来将引入更先进的AI算法,实现吐痰行为的精准预测与个性化干预建议。
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()