constraints.md 6.3 KB

阶段2a约束条件 — 果农核心功能

继承阶段一全部约束 + 阶段2a新增约束


一、技术约束(继承阶段一)

1.1 开发环境

  • JDK: 1.8.0_291
  • Maven: 3.6.3
  • Spring Boot: 1.5.9.RELEASE
  • 数据库: MySQL 5.7+(sayu 库)
  • 缓存: Redis 3.0+(可选)
  • ORM: MyBatis(XML 映射)

1.2 代码规范

  • 包名: com.sayu
  • Controller 路径:
    • 小程序端: /api/wx/*
    • 后台管理端: /api/admin/*
  • MyBatis XML: 必须使用 #{} 语法,禁止 ${}
  • 文件行数: ≤ 500 行/文件

1.3 构建与部署

  • 构建工具: Maven
  • 编译命令: mvn compile
  • 测试命令: mvn test
  • 启动命令: mvn spring-boot:run

二、安全约束(继承阶段一 + 新增)

2.1 数据安全(继承)

  • 手机号: AES 加密存储,phone_hash (SHA256) 唯一索引
  • Token: JWT,payload 包含 userId, identityId, identityType, exp
  • 密钥管理: 配置在 application.properties,禁止硬编码

2.2 接口安全(继承)

  • 认证: JWT Token 认证
  • 授权: RBAC 权限控制,默认拒绝,显式授权
  • 防注入: MyBatis #{} 参数化
  • 敏感数据: 接口返回脱敏(手机号 138****8888)

2.3 文件上传安全(新增)

  • 格式白名单: 图片(jpg,jpeg,png,gif)、视频(mp4,mov,avi)
  • 大小限制: 图片≤5MB/张,视频≤50MB
  • EXIF清除: 前端必须清除EXIF元数据(防止位置泄露)
  • 文件存储: 本地存储目录 ./uploads/,禁止路径穿越

2.4 内容安全(新增)

  • 敏感词检测: 正则匹配,色情/赌博/政治等明确违规词
  • 不阻塞发布: keyword_flag=1 进入待复核,招工仍可见
  • 人工复核: 审核员定时处理待复核列表

三、业务约束(继承阶段一 + 新增)

3.1 用户体系(继承)

  • 一人多职: 一个用户可绑定多个身份
  • 数据隔离: 所有业务表带 user_identity_id 字段
  • 身份路由: 0个→提示联系村委会,1个→直接进入,N个→选择页

3.2 审核机制(继承 + 扩展)

  • 审核对象: 果农名片(阶段2a新增)
  • 审核状态: 待审(0)、已通过(1)、被驳回(2)
  • 审核 SLA: ≤24小时提醒,48小时升级给超级管理员
  • 驳回要求: 必须填写驳回原因
  • 待复核: 敏感关键词标记的招工信息

3.3 招工发布规则(新增)

  • 免审核直接发布: recruit_info.status=1
  • 敏感词标记: keyword_flag=1 不阻塞发布
  • 下架: 逻辑删除(status=0)
  • 编辑: 可编辑价格、人数、天数、备注

3.4 文件上传规则(新增)

  • 视频: 仅限1个,≤50MB,MP4/MOV,异步压缩720p/2Mbps
  • 照片: ≤9张,单张≤5MB,JPG/JPEG/PNG/GIF
  • 存储: 本地文件存储,数据库存URL

四、性能约束(继承阶段一 + 新增)

4.1 响应时间(继承)

  • 接口响应: ≤500ms(95%请求)
  • 页面加载: ≤3s

4.2 文件上传性能(新增)

  • 上传时间: ≤50MB文件,局域网环境≤30s
  • 视频压缩: 异步处理,不影响用户操作
  • 压缩重试: 失败自动重试3次

4.3 距离计算性能(新增)

  • Haversine公式: 实时计算,不缓存
  • 经纬度精度: DECIMAL(10,7)
  • 排序: 按距离升序,分页查询

五、兼容性约束(继承阶段一)

5.1 小程序端

  • 微信基础库: ≥2.0
  • 适老化:
    • 正文≥18px(rem)
    • 按钮≥88×88px
    • 高对比度
    • 语音输入支持

5.2 后台管理端

  • 浏览器: Chrome/Firefox/Edge 最新版
  • 分辨率: ≥1280×720

六、数据约束(继承阶段一 + 新增)

6.1 数据库设计(继承)

  • 字符集: utf8mb4
  • 排序规则: utf8mb4_unicode_ci
  • 表引擎: InnoDB
  • 主键: 自增ID

6.2 索引设计(新增)

  • grower_profile: latitude+longitude 复合索引(距离查询)
  • recruit_info: latitude+longitude 复合索引
  • recruit_info: keyword_flag INDEX(待复核查询)
  • call_log: caller_identity_id INDEX, callee_identity_id INDEX

6.3 JSON字段规范(新增)

  • varieties: JSON数组,如 ["红富士","嘎啦"]
  • work_types: JSON数组,如 ["采摘工","分拣工"]
  • photos: JSON数组,如 ["http://localhost:8080/files/image/xxx.jpg"]
  • skills: JSON数组,如 ["采摘","套袋"]

七、接口约束(继承阶段一)

7.1 接口格式(继承)

  • 请求格式: JSON
  • 响应格式: JSON
  • 响应结构:

    {
    "code": 200,
    "message": "success",
    "data": {}
    }
    

7.2 错误码规范(继承)

  • 200: 成功
  • 400: 请求参数错误
  • 401: 未认证
  • 403: 无权限
  • 404: 资源不存在
  • 500: 服务器内部错误

7.3 分页规范(继承)

  • 请求参数: page(页码,从1开始)、pageSize(每页数量,默认20)
  • 响应参数:

    {
    "total": 100,
    "page": 1,
    "pageSize": 20,
    "list": []
    }
    

八、测试约束(继承阶段一 + 新增)

8.1 测试框架(继承)

  • 单元测试: JUnit 4
  • 集成测试: Spring Boot Test
  • 测试目录: src/test/java/

8.2 测试覆盖(继承)

  • 核心接口: 测试覆盖率 ≥80%
  • 测试独立性: 每个测试方法独立运行
  • 测试可重复: 同一测试多次运行结果一致

8.3 阶段2a测试重点(新增)

  • 文件上传: 50MB边界、格式异常、EXIF清除验证
  • 招工发布: 敏感词标记、免审核发布、下架/编辑
  • 找工人: 工种筛选、距离排序准确性、拨号日志
  • 审核: 名片通过/驳回、待复核处理、SLA提醒

九、约束继承清单

约束类别 阶段一约束 阶段2a新增
技术约束 全部继承 无新增
安全约束 全部继承 文件上传安全、内容安全
业务约束 全部继承 招工发布规则、文件上传规则
性能约束 全部继承 文件上传性能、距离计算性能
兼容性约束 全部继承 无新增
数据约束 全部继承 索引设计、JSON字段规范
接口约束 全部继承 无新增
测试约束 全部继承 阶段2a测试重点