# 交付清单 — Team B 架构师 ## 里程碑信息 - **阶段**: 阶段2a 果农核心功能 - **里程碑编号**: milestone-2(架构设计) - **提交时间**: 2026-05-30 - **负责团队**: Team B ## 交付产物 | 序号 | 文件路径 | 说明 | 覆盖度检查 | 核心内容摘要 | |------|----------|------|------------|--------------| | 1 | deliveries/team-b-architecture/design.md | 架构设计文档 | 模块数: 5/5, 新增文件: 20个 | 果农名片、招工、搜索、文件、审核模块架构 | | 2 | deliveries/team-b-architecture/api-definition.md | 接口定义文档 | 新增接口: 13/13, 已有接口: 4/4 | 果农名片2、招工4、搜索2、拨号1、审核4 | | 3 | deliveries/team-b-architecture/tech-stack.md | 技术选型文档 | 类别: 8/8 | 继承阶段一+距离计算、敏感词检测、视频压缩 | | 4 | deliveries/team-b-architecture/DELIVERY-MANIFEST.md | 本交付清单 | - | 交付物清单、关键信息、问题反馈 | ## 修改文件清单 | 序号 | 文件路径 | 操作类型 | 说明 | |------|----------|----------|------| | 1 | deliveries/team-b-architecture/design.md | 覆盖更新 | 从阶段一更新为阶段2a架构设计 | | 2 | deliveries/team-b-architecture/api-definition.md | 覆盖更新 | 从阶段一更新为阶段2a接口定义 | | 3 | deliveries/team-b-architecture/tech-stack.md | 覆盖更新 | 从阶段一更新为阶段2a技术选型 | | 4 | deliveries/team-b-architecture/DELIVERY-MANIFEST.md | 覆盖更新 | 本交付清单 | ## 交付说明 本次交付为阶段2a(果农核心功能)的架构设计成果,基于 Team A 的需求规格(阶段2a spec.md)进行设计。 ### 核心内容 1. **架构扩展** - 新增5个业务模块:果农模块、招工模块、搜索模块、文件模块、审核扩展 - 新增20个Java源文件 - 继承阶段一四层架构 2. **数据库设计** - 核心表:grower_profile、recruit_info、call_log - 索引设计:经纬度复合索引(距离查询)、keyword_flag索引(待复核查询) - JSON字段规范:varieties、photos、work_types、skills 3. **接口设计** - 新增接口:13个 - 已有接口复用:4个(文件上传) - 覆盖14个功能点 4. **关键技术方案** - 距离计算:Haversine公式,纯Java实现 - 敏感词检测:正则匹配,keyword_flag标记 - 视频压缩:FFmpeg异步压缩,720p/2Mbps - 文件存储:本地存储,UUID文件名 5. **安全设计** - 文件上传:格式白名单+大小限制 - 内容安全:敏感词检测+待复核 - 拨号安全:日志记录+数据脱敏 ## 给下游团队的关键信息 ### 关键决策 1. **距离计算**: Haversine公式实时计算,经纬度DECIMAL(10,7)精度 2. **敏感词机制**: 不阻塞发布,keyword_flag标记进入待复核 3. **视频压缩**: FFmpeg异步执行,失败重试3次 4. **文件命名**: UUID重命名,防止路径穿越 5. **拨号机制**: 单独接口获取手机号,记录拨号日志 ### 隐含约束 1. **JSON字段查询**: MySQL 5.7不支持JSON索引,使用LIKE查询(性能可接受) 2. **距离计算优化**: 可先用矩形范围筛选(经纬度差值),再精确计算 3. **视频压缩依赖FFmpeg**: 需要系统安装FFmpeg,否则使用备选方案 4. **文件大小限制**: application.properties配置,前端和后端双重校验 5. **审核SLA**: 需要定时任务支持(ScheduledExecutorService) ### 特别注意 1. **招工编辑后重新检测敏感词**: 防止通过编辑规避检测 2. **名片更新重置审核状态**: 修改后需重新审核 3. **拨号日志是独立接口**: 不在列表接口中返回手机号 4. **文件访问免认证**: /api/wx/file/files/** 路径排除在JWT拦截器外 ### 阶段2a新增文件清单 | 文件 | 说明 | 依赖 | |------|------|------| | GrowerProfileController.java | 果农档案API | GrowerProfileService | | GrowerProfileService.java | 果农档案业务 | GrowerProfileMapper | | GrowerProfileMapper.xml | 果农档案映射 | - | | RecruitController.java | 招工CRUD API | RecruitService, KeywordCheckService | | RecruitService.java | 招工业务 | RecruitMapper, KeywordCheckService | | RecruitMapper.xml | 招工映射 | - | | WorkerSearchController.java | 工人列表API | WorkerSearchService | | WorkerSearchService.java | 工人搜索 | WorkerProfileMapper, DistanceUtil | | BuyerSearchController.java | 客商列表API | BuyerSearchService | | BuyerSearchService.java | 客商搜索 | BuyerProfileMapper | | CallPhoneController.java | 拨号API | CallLogService | | CallLogService.java | 拨号日志 | CallLogMapper | | CallLogMapper.xml | 拨号日志映射 | - | | GrowerAuditController.java | 名片审核API | GrowerAuditService | | GrowerAuditService.java | 名片审核 | GrowerProfileMapper, AuditLogService | | RecruitReviewController.java | 待复核API | RecruitReviewService | | RecruitReviewService.java | 待复核 | RecruitMapper, AuditLogService | | KeywordCheckService.java | 敏感词检测 | - | | DistanceUtil.java | 距离计算 | - | | VideoCompressService.java | 视频压缩 | - | ## 对上团队的问题 无。Team A 的需求规格清晰完整,架构设计无歧义。 ## 待确认事项 1. **FFmpeg安装**: 服务器是否已安装FFmpeg?如未安装,视频压缩需要备选方案 2. **地理编码**: 地址→经纬度转换由前端还是后端完成?建议前端处理 3. **敏感词库**: 初始词库范围需要业务方确认 4. **语音输入**: 小程序端语音识别使用微信原生API还是第三方服务? 5. **审核SLA**: 定时任务使用ScheduledExecutorService还是Quartz?