--- name: 项目技术要求文档 overview: 基于已有的7份设计文档和用户补充信息,创建项目技术要求文档(08-技术要求.md),覆盖技术栈选型、架构设计、安全、性能、开发规范、部署运维、测试等维度,并纳入无中间件方案、蓝牙策略配置等新增需求。 todos: - id: write-tech-doc content: 编写docs/08-项目技术要求.md文档,涵盖技术栈、架构、安全、性能、蓝牙策略、去中间件方案、开发规范、部署运维、测试要求全量内容 status: completed - id: update-model-bluetooth content: 更新docs/04-核心数据模型.md,新增蓝牙策略配置表(sys_bluetooth_policy)和审核表(sys_bluetooth_policy_audit),打卡记录表增加check_type字段 status: completed dependencies: - write-tech-doc - id: update-api-bluetooth content: 更新docs/05-API接口规范.md,新增蓝牙策略配置API和打卡记录check_type返回字段 status: completed dependencies: - write-tech-doc - id: update-flow-bluetooth content: 更新docs/03-业务流转逻辑.md,蓝牙校验流程改为按策略配置判断(强制/非强制),补录模式仅在强制蓝牙+蓝牙失败时触发 status: completed dependencies: - write-tech-doc --- ## 产品概述 医院物业SaaS管理后台的项目技术要求文档,作为内部团队开发标准,所有开发人员必须严格按照此标准执行。 ## 核心功能 - 明确技术栈选型与版本要求(Java+Spring Boot+MariaDB+Vue+uni-app+Redis) - 定义架构设计规范(多租户、模块化、前后端分离、双端、读写分离、去中间件方案) - 规定安全要求(认证、四级权限、行级数据隔离、蓝牙校验、审计日志) - 设定性能基线(API响应<500ms、蓝牙交互可靠性、数据补录降级) - 制定开发规范(API规范、代码规范、数据库规范、模块开发规范) - 约定部署运维要求(私有云部署、数据库定时备份与恢复、缓存管理、版本更新策略) - 新增蓝牙策略配置要求(物业公司配置是否强制蓝牙、医院账号审核、报表区分蓝牙/手动打卡) ## 技术栈选型 ### 后端 - 语言:Java 17+ - 框架:Spring Boot 3.x - 数据库:MariaDB 10.6+(主从复制读写分离) - 缓存:Redis 7.x(权限/字典/菜单缓存,Pub/Sub用于应用内事件) - ORM:MyBatis-Plus 3.5+ - 认证:Spring Security + JWT - 文件存储:腾讯云COS ### 前端Web - 框架:Vue 3 + TypeScript - 构建工具:Vite 5.x - 状态管理:Pinia - 路由:Vue Router 4 - UI组件库:Element Plus(企业级后台管理场景适配度最高) - HTTP客户端:Axios - 图表:ECharts ### 小程序 - 框架:uni-app + Vue 3 - 蓝牙SDK:uni-ble(uni-app蓝牙低功耗插件) - UI组件库:uni-ui ### 基础设施 - 部署:私有云(Docker + Docker Compose) - CI/CD:Jenkins/GitLab CI - 版本管理:Git ## 去中间件方案 不引入RocketMQ/Kafka等消息中间件,采用以下替代方案: ### 1. 权限变更实时通知 - 方案:数据库轮询标记 + Spring Event - 实现:权限变更时写入`sys_config`表标记字段`permission_version`递增;各服务实例定时5秒轮询该字段,检测到版本变化时触发本地权限缓存刷新 - 优势:无额外中间件依赖,实现简单可靠 - 降级:轮询间隔内最大5秒延迟,对权限场景可接受 ### 2. 异步任务处理 - 方案:Spring @Async + 自定义线程池 - 实现:配置`ThreadPoolTaskExecutor`,核心线程数=CPU核心数,最大线程数=2*CPU核心数,队列容量1000,拒绝策略CallerRunsPolicy - 适用场景:报表导出、消息推送、日志异步写入 - 持久化:关键任务落库后异步执行,避免线程池丢失 ### 3. 模块间通信 - 方案:Spring ApplicationEvent + ApplicationEventPublisher - 实现:模块间通过Spring Event解耦,事件定义在共享API模块中 - 跨实例:结合数据库轮询标记实现(事件落库+轮询消费) - 适用场景:工单完成触发评价、巡检异常触发报修、低分评价通知主管 ### 4. 定时任务 - 方案:Spring @Scheduled + 数据库分布式锁 - 实现:`@Scheduled`注解声明定时任务,通过`shedlock`或数据库行锁保证集群内单实例执行 - 适用场景:巡检任务自动生成、保洁超时预警、合同到期提醒、Beacon心跳检测 ## 架构设计 ### 整体架构 ``` 客户端层:Vue3 Web管理后台 | uni-app微信小程序 ↓ HTTPS 网关层:Spring Cloud Gateway / Nginx 反向代理 ↓ 应用层:Spring Boot 单体应用(模块化IModulePlugin) ↓ 数据层:MariaDB主从(读写分离)| Redis缓存 | 腾讯云COS ``` ### 读写分离方案 - 实现:MariaDB主从复制 + MyBatis-Plus动态数据源切换 - 规则:写操作走主库,读操作走从库 - 注解:自定义`@ReadOnly`注解标记读操作,AOP切面切换数据源 - 容错:从库不可用时自动降级到主库读取 ### 数据库备份与恢复 - 定时备份:每日凌晨2:00全量备份(mysqldump),每4小时增量备份(binlog) - 备份保留:全量备份保留30天,增量备份保留7天 - 备份存储:私有云本地磁盘 + 异地备份服务器 - 恢复流程:全量恢复 + binlog重放,RTO<2小时,RPO<4小时 - 定期演练:每季度执行一次恢复演练 ### 蓝牙策略配置(新增) - 配置方:物业公司管理员 - 审核方:医院账号 - 配置项:各场景是否强制蓝牙连接(巡检打卡/巡检拍照/保洁打卡/保洁拍照/考勤打卡) - 数据模型:新增`sys_bluetooth_policy`配置表 + `sys_bluetooth_policy_audit`审核表 - 打卡记录标记:所有打卡记录区分`check_type`(BLUETOOTH/MANUAL),后台列表和报表明确显示 - 降级逻辑:非强制蓝牙场景下,蓝牙失败可直接手动打卡(记录check_type=MANUAL);强制蓝牙场景下,蓝牙失败进入补录模式 ## 性能要求 - API平均响应时间 < 300ms,P99 < 500ms - 列表查询响应 < 500ms(含分页) - 报表生成 < 5s(单月数据) - 并发支持:单实例100 QPS,水平扩展 - 蓝牙校验:扫描超时3秒,距离计算<100ms ## 开发规范 - API规范:遵循已有05-API接口规范.md - 代码分层:Controller → Service → Repository,DTO/VO/Entity严格分离 - 命名规范:包名小写、类名大驼峰、方法名小驼峰、常量全大写下划线 - 数据库规范:遵循已有04-核心数据模型.md公共字段约定 - 模块开发:遵循已有06-扩展接口规范.md IModulePlugin规范 - 审计日志:所有写操作自动记录,使用AOP切面统一处理 - 单元测试:核心业务Service覆盖率 >= 70%