# 阶段2a技术选型 — 果农核心功能 > 继承阶段一技术选型 + 阶段2a新增 --- ## 一、后端技术栈(继承阶段一) ### 1.1 核心框架 | 技术 | 版本 | 用途 | 选型理由 | |------|------|------|----------| | Java | 1.8.0_291 | 开发语言 | 客户环境限制,兼容性好 | | Spring Boot | 1.5.9.RELEASE | 应用框架 | 成熟稳定,社区支持好 | | MyBatis | 1.3.2 | ORM 框架 | 灵活的 SQL 控制,XML 映射 | | MySQL | 5.7+ | 数据库 | 客户环境限制,性能稳定 | ### 1.2 认证与安全(继承) | 技术 | 版本 | 用途 | 选型理由 | |------|------|------|----------| | JWT (jjwt) | 0.9.1 | Token 认证 | 无状态,适合分布式 | | BCrypt | - | 密码加密 | 安全性高,自动加盐 | | AES | - | 手机号加密 | 对称加密,性能好 | | SHA256 | - | 手机号哈希 | 单向哈希,支持索引查询 | ### 1.3 文件处理(变更) | 技术 | 版本 | 用途 | 选型理由 | 变更说明 | |------|------|------|----------|----------| | 本地文件存储 | - | 文件存储 | 简化开发,降低依赖 | 替换阿里云OSS | | 阿里云短信 SDK | 2.1.0 | 短信服务 | 国内服务稳定 | 保留 | | Apache POI | 3.17 | Excel 处理 | 功能完整,社区活跃 | 保留 | ### 1.4 工具库(继承) | 技术 | 版本 | 用途 | 选型理由 | |------|------|------|----------| | Jackson | 2.8.10 | JSON 处理 | Spring Boot 默认集成 | | SLF4J + Logback | 1.7.25 | 日志框架 | Spring Boot 默认集成 | | Commons Lang3 | 3.5 | 工具类 | 字符串、日期等常用工具 | --- ## 二、阶段2a新增技术需求 ### 2.1 距离计算 | 技术 | 用途 | 说明 | |------|------|------| | Haversine公式 | 距离计算 | 纯数学计算,无外部依赖 | **实现方式**: 自定义 `DistanceUtil` 工具类 ```java // 核心公式 double a = sin²(Δlat/2) + cos(lat1) × cos(lat2) × sin²(Δlng/2) double c = 2 × atan2(√a, √(1-a)) double distance = R × c // R=6371km ``` **精度**: DECIMAL(10,7),误差≤1米 ### 2.2 敏感词检测 | 技术 | 用途 | 说明 | |------|------|------| | 正则表达式 | 敏感词匹配 | 纯Java实现,无外部依赖 | **实现方式**: 自定义 `KeywordCheckService` - 初始词库硬编码(仅含明确违规词) - 正则匹配,支持通配符 - 后续可扩展为数据库词库 ### 2.3 视频压缩 | 技术 | 版本 | 用途 | 选型理由 | |------|------|------|----------| | FFmpeg | 系统安装 | 视频压缩 | 功能强大,压缩效果好 | **实现方式**: - Spring `@Async` 异步执行 - FFmpeg 命令行调用 - 参数:720p分辨率,2Mbps码率 **备选方案**: 如果FFmpeg不可用,使用Java原生压缩库(效果较差) ### 2.4 地理编码(可选) | 技术 | 用途 | 说明 | |------|------|------| | 高德/百度地图API | 地址→经纬度 | 可选,前端可处理 | **说明**: 地址→经纬度转换可由前端完成,后端仅存储经纬度 --- ## 三、前端技术栈(继承阶段一) ### 3.1 小程序端 | 技术 | 版本 | 用途 | 选型理由 | |------|------|------|----------| | 微信小程序 | 基础库 ≥2.0 | 移动端框架 | 目标用户使用微信 | | WXML | - | 模板语言 | 微信小程序原生 | | WXSS | - | 样式语言 | 微信小程序原生 | | JavaScript | ES6 | 脚本语言 | 小程序支持 | **阶段2a新增小程序能力**: - `wx.chooseImage()` — 选择图片 - `wx.chooseVideo()` — 选择视频 - `wx.makePhoneCall()` — 拨打电话 - `wx.getRecorderManager()` — 语音输入(可选) ### 3.2 后台管理端(继承) | 技术 | 版本 | 用途 | 选型理由 | |------|------|------|----------| | Vue | 2.6.14 | 前端框架 | 成熟稳定,学习成本低 | | Element UI | 2.15.9 | UI 组件库 | 组件丰富,文档完善 | | Axios | 0.27.2 | HTTP 客户端 | 支持 Promise,拦截器 | --- ## 四、开发工具(继承阶段一) | 工具 | 用途 | |------|------| | Maven | 后端构建 | | Git | 版本控制 | | Gogs | 代码仓库(自托管) | | 微信开发者工具 | 小程序开发调试 | | Navicat/DBeaver | 数据库客户端 | --- ## 五、数据库设计规范(继承阶段一) ### 5.1 命名规范 - **表名**: 小写字母 + 下划线,如 `grower_profile` - **字段名**: 小写字母 + 下划线,如 `user_identity_id` - **主键**: `id`,自增 - **索引**: `idx_` 前缀 - **唯一索引**: `uk_` 前缀 ### 5.2 阶段2a JSON字段规范 | 字段 | 表 | 格式示例 | |------|-----|---------| | varieties | grower_profile | `["红富士","嘎啦"]` | | photos | grower_profile | `["http://...1.jpg","http://...2.jpg"]` | | work_types | recruit_info | `["采摘工","分拣工"]` | | skills | worker_profile | `["采摘","套袋"]` | --- ## 六、接口设计规范(继承阶段一) ### 6.1 路径规范 - **小程序端**: `/api/wx/{module}/{action}` - **后台管理端**: `/api/admin/{module}/{action}` ### 6.2 阶段2a新增模块路径 | 模块 | 路径前缀 | |------|---------| | 果农名片 | /api/wx/grower/profile | | 招工管理 | /api/wx/grower/recruit | | 找工人 | /api/wx/grower/workers | | 找客商 | /api/wx/grower/buyers | | 拨号 | /api/wx/call/phone | | 名片审核 | /api/admin/audit/grower-profile | | 待复核 | /api/admin/audit/recruit-review | ### 6.3 响应规范(继承) ```json { "code": 200, "message": "success", "data": {} } ``` ### 6.4 错误码规范(继承 + 扩展) | 错误码 | 含义 | 说明 | |--------|------|------| | 200 | 成功 | - | | 400 | 请求错误 | 参数校验失败 | | 401 | 未认证 | Token 无效或过期 | | 403 | 禁止访问 | 无权限 | | 404 | 未找到 | 资源不存在 | | 500 | 服务器错误 | 内部异常 | | 1001-1099 | 认证错误 | 阶段一业务错误码 | | 2001-2099 | 果农模块错误 | 阶段2a新增 | | 3001-3099 | 招工模块错误 | 阶段2a新增 | | 4001-4099 | 拨号模块错误 | 阶段2a新增 | | 5001-5099 | 审核模块错误 | 阶段2a新增 | --- ## 七、安全设计规范(继承 + 扩展) ### 7.1 文件上传安全(新增) - **格式白名单**: 图片(jpg,jpeg,png,gif)、视频(mp4,mov,avi) - **大小限制**: 图片≤5MB,视频≤50MB - **文件名**: UUID重命名,防止路径穿越 - **EXIF清除**: 前端责任 ### 7.2 内容安全(新增) - **敏感词检测**: 正则匹配 - **处理方式**: keyword_flag标记,不阻塞发布 - **人工复核**: 审核员处理待复核列表 ### 7.3 拨号安全(新增) - **日志记录**: 拨号方ID、被拨方ID、时间 - **数据脱敏**: 列表不返回手机号 --- ## 八、性能设计规范(继承 + 扩展) ### 8.1 距离计算性能(新增) - **计算方式**: 实时计算,不缓存 - **优化**: 可先用矩形范围筛选,再精确计算 - **精度**: DECIMAL(10,7) ### 8.2 文件上传性能(新增) - **上传时间**: ≤50MB文件,局域网≤30s - **视频压缩**: 异步处理,不影响用户操作 - **压缩重试**: 失败自动重试3次 ### 8.3 接口性能(继承) - **响应时间**: ≤500ms(95%请求) - **并发**: ≥100 用户 - **分页**: 默认每页 20 条