阶段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 工具类
// 核心公式
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 响应规范(继承)
{
"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 条