tech-stack.md 7.1 KB

阶段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 条