Procházet zdrojové kódy

[milestone-2] Team B 架构设计交付:阶段一架构、接口、技术选型

交付产物:
- design.md: 架构设计文档(系统架构、数据库、接口、安全)
- api-definition.md: 接口定义文档(25个接口)
- tech-stack.md: 技术选型文档(后端、前端、工具、部署)
- DELIVERY-MANIFEST.md: 交付清单
wubinggen před 9 hodinami
rodič
revize
807fb552f0

+ 91 - 0
deliveries/team-b-architecture/DELIVERY-MANIFEST.md

@@ -0,0 +1,91 @@
+# 交付清单 — Team B 架构师
+
+## 里程碑信息
+- **阶段**: 架构设计
+- **里程碑编号**: milestone-2
+- **提交时间**: 2026-05-30 18:00
+- **负责团队**: Team B
+
+## 交付产物
+
+| 序号 | 文件路径 | 说明 | 覆盖度检查 | 核心内容摘要 |
+|------|----------|------|------------|--------------|
+| 1 | deliveries/team-b-architecture/design.md | 架构设计文档 | 模块数: 5/5, 架构层: 4/4 | 系统架构、数据库设计、接口设计、安全设计、技术选型 |
+| 2 | deliveries/team-b-architecture/api-definition.md | 接口定义文档 | 接口数: 25/25, 模块数: 5/5 | 认证5接口、用户4接口、系统8接口、审核3接口、首页5接口 |
+| 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 | 新增 | 架构设计文档 |
+| 2 | deliveries/team-b-architecture/api-definition.md | 新增 | 接口定义文档 |
+| 3 | deliveries/team-b-architecture/tech-stack.md | 新增 | 技术选型文档 |
+| 4 | deliveries/team-b-architecture/DELIVERY-MANIFEST.md | 新增 | 本交付清单 |
+
+## 交付说明
+
+本次交付为阶段一(基础设施与用户体系)的架构设计成果,基于 Team A 的需求规格(spec.md)进行设计。
+
+### 核心内容
+
+1. **系统架构设计**
+   - 四层架构:客户端层 → API网关层 → 业务逻辑层 → 数据存储层
+   - 模块划分:用户模块、系统模块、审核模块、首页模块、通用模块
+   - 分层职责:Controller(API入口)→ Service(业务逻辑)→ Mapper(数据访问)
+
+2. **数据库设计**
+   - 核心表:sys_user、user_identity、sys_role、sys_permission、sys_dict、audit_log、operation_log
+   - 索引设计:phone_hash唯一索引、openid唯一索引、user_id索引、identity_type索引
+   - 加密方案:手机号AES加密存储,SHA256哈希用于查询
+
+3. **接口设计**
+   - 接口总数:25个
+   - 模块分布:认证5个、用户4个、系统8个、审核3个、首页5个
+   - 接口规范:RESTful风格,统一响应格式,错误码规范
+
+4. **安全设计**
+   - 认证流程:JWT Token认证,拦截器校验,RBAC权限控制
+   - 数据安全:手机号加密、密码BCrypt、敏感数据脱敏
+   - 接口安全:参数校验、SQL注入防护、防重放攻击
+
+5. **技术选型**
+   - 后端:Java 8 + Spring Boot 1.5.9 + MyBatis + MySQL + Redis
+   - 前端:微信小程序 + Vue 2 + Element UI + ECharts
+   - 工具:Maven + Git + Gogs
+
+## 给下游团队的关键信息
+
+### 关键决策
+
+1. **分层架构**: Controller → Service → Mapper,职责清晰,便于测试
+2. **接口设计**: 25个接口覆盖20个功能点,部分功能合并为单个接口
+3. **数据库设计**: 7张核心表,索引设计覆盖高频查询场景
+4. **安全方案**: JWT认证 + RBAC权限 + 手机号加密,满足安全要求
+5. **技术栈**: 固定版本,避免兼容性问题
+
+### 隐含约束
+
+1. **Controller 必须参数校验**: 使用 @Valid 或手动校验
+2. **Service 必须事务管理**: 使用 @Transactional 注解
+3. **Mapper 必须 #{} 参数化**: 禁止使用 ${}
+4. **接口响应必须统一格式**: 使用 ApiResult 包装
+5. **敏感数据必须脱敏**: 手机号、密码等
+
+### 特别注意
+
+1. **身份路由逻辑**: 0个身份→提示联系村委会,1个身份→直接进入,N个身份→选择页
+2. **密码锁定机制**: 连续5次错误锁定30分钟,需记录锁定时间
+3. **审核SLA**: ≤24小时提醒,48小时升级,需定时任务支持
+4. **Token黑名单**: 退出登录时将Token加入Redis黑名单
+
+## 对上团队的问题
+
+无。Team A 的需求规格清晰完整,架构设计无歧义。
+
+## 待确认事项
+
+1. **数据库连接池**: 建议使用 HikariCP(Spring Boot 1.5.x 默认),是否需要调整?
+2. **日志框架**: 建议使用 Logback(Spring Boot 默认),是否需要切换?
+3. **缓存策略**: Token黑名单和验证码使用Redis,是否需要其他缓存?

+ 874 - 0
deliveries/team-b-architecture/api-definition.md

@@ -0,0 +1,874 @@
+# 阶段一接口定义 — 基础设施与用户体系
+
+> 接口总数:25 个
+> 覆盖功能点:20/20
+
+---
+
+## 一、接口总览
+
+| 模块 | 接口数 | 说明 |
+|------|--------|------|
+| 认证模块 | 5 | 登录、登出、身份选择、Token刷新、密码修改 |
+| 用户模块 | 4 | 用户信息、状态管理、身份绑定、创建用户 |
+| 系统管理 | 8 | 角色、账号、字典、权限、操作日志 |
+| 审核模块 | 3 | 审核列表、审核操作、审核详情 |
+| 首页模块 | 5 | 果农/工人/客商/农资商首页、行情数据 |
+
+**总计**: 25 个接口
+
+---
+
+## 二、认证模块接口
+
+### 2.1 POST /api/wx/auth/login — 微信登录
+
+**描述**: 小程序用户通过微信 code 登录
+
+**请求头**:
+```
+Content-Type: application/json
+```
+
+**请求参数**:
+```json
+{
+  "code": "string" // 必填,微信 wx.login() 获取的 code
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "string", // JWT Token
+    "userId": "long", // 用户ID
+    "identities": [ // 身份列表
+      {
+        "identityId": "long",
+        "identityType": "string", // GROWER/WORKER/BUYER/SUPPLIER
+        "identityName": "string"
+      }
+    ]
+  }
+}
+```
+
+**错误码**:
+- 1001: 未找到用户信息,请联系村委会
+- 1002: 微信接口调用失败
+
+---
+
+### 2.2 POST /api/admin/auth/login — 后台登录
+
+**描述**: 后台管理员通过用户名密码登录
+
+**请求参数**:
+```json
+{
+  "username": "string", // 必填,用户名
+  "password": "string"  // 必填,密码
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "string",
+    "userId": "long",
+    "username": "string",
+    "realName": "string",
+    "roleId": "long",
+    "roleName": "string"
+  }
+}
+```
+
+**错误码**:
+- 1003: 用户名或密码错误
+- 1004: 账号已禁用
+- 1005: 账号已锁定,请30分钟后重试
+
+---
+
+### 2.3 POST /api/wx/auth/select-identity — 选择身份
+
+**描述**: 多身份用户选择当前使用的身份
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "identityId": "long" // 必填,身份ID
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "string" // 包含新身份信息的 Token
+  }
+}
+```
+
+**错误码**:
+- 1006: 身份不存在
+
+---
+
+### 2.4 POST /api/wx/auth/refresh — 刷新Token
+
+**描述**: 刷新当前 Token 有效期
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "string"
+  }
+}
+```
+
+---
+
+### 2.5 PUT /api/admin/auth/password — 修改密码
+
+**描述**: 后台管理员修改密码
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "oldPassword": "string", // 必填,旧密码
+  "newPassword": "string"  // 必填,新密码
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": null
+}
+```
+
+**错误码**:
+- 1007: 旧密码错误
+- 1008: 新密码强度不足
+
+---
+
+## 三、用户模块接口
+
+### 3.1 GET /api/wx/user/info — 获取用户信息
+
+**描述**: 获取当前登录用户的基本信息
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "userId": "long",
+    "realName": "string",
+    "phone": "string", // 脱敏显示:138****8888
+    "identities": [
+      {
+        "identityId": "long",
+        "identityType": "string",
+        "identityName": "string"
+      }
+    ],
+    "currentIdentity": {
+      "identityId": "long",
+      "identityType": "string"
+    }
+  }
+}
+```
+
+---
+
+### 3.2 PUT /api/admin/user/status — 修改用户状态
+
+**描述**: 管理员修改用户账号状态
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "userId": "long",    // 必填,用户ID
+  "status": "int",     // 必填,状态:0正常 1禁用 2锁定
+  "lockReason": "string" // 锁定时必填
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": null
+}
+```
+
+**错误码**:
+- 1009: 用户不存在
+- 1010: 不可禁用超级管理员
+- 1011: 锁定原因不能为空
+
+---
+
+### 3.3 POST /api/admin/user/bind-identity — 绑定身份
+
+**描述**: 管理员为用户绑定新身份
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "userId": "long",        // 必填,用户ID
+  "identityType": "string", // 必填,身份类型
+  "profileData": {}         // 身份详细信息(JSON)
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "identityId": "long"
+  }
+}
+```
+
+**错误码**:
+- 1012: 用户已有该身份
+
+---
+
+### 3.4 POST /api/admin/user — 创建用户
+
+**描述**: 管理员创建新用户
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "realName": "string",    // 必填,真实姓名
+  "phone": "string",       // 必填,手机号
+  "identityType": "string", // 必填,身份类型
+  "profileData": {}         // 身份详细信息
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "userId": "long"
+  }
+}
+```
+
+**错误码**:
+- 1013: 手机号已注册
+
+---
+
+## 四、系统管理接口
+
+### 4.1 GET /api/admin/role/list — 角色列表
+
+**描述**: 获取系统角色列表
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": [
+    {
+      "id": "long",
+      "roleName": "string",
+      "roleCode": "string",
+      "description": "string",
+      "status": "int",
+      "isSystem": "int"
+    }
+  ]
+}
+```
+
+---
+
+### 4.2 GET /api/admin/role/{id}/permissions — 角色权限
+
+**描述**: 获取指定角色的权限列表
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": [
+    {
+      "id": "long",
+      "permName": "string",
+      "permCode": "string",
+      "permType": "string",
+      "path": "string"
+    }
+  ]
+}
+```
+
+---
+
+### 4.3 PUT /api/admin/role/{id}/permissions — 分配权限
+
+**描述**: 为角色分配权限
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "permissionIds": ["long"] // 权限ID列表
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": null
+}
+```
+
+---
+
+### 4.4 GET /api/admin/account/list — 账号列表
+
+**描述**: 获取管理员账号列表(分页)
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```
+?page=1&pageSize=10&keyword=string
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "total": "long",
+    "page": "int",
+    "pageSize": "int",
+    "list": [
+      {
+        "id": "long",
+        "username": "string",
+        "realName": "string",
+        "phone": "string", // 脱敏
+        "roleName": "string",
+        "status": "int",
+        "createdAt": "string"
+      }
+    ]
+  }
+}
+```
+
+---
+
+### 4.5 POST /api/admin/account — 创建账号
+
+**描述**: 创建管理员账号
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "username": "string", // 必填,用户名
+  "password": "string", // 必填,密码
+  "realName": "string", // 必填,真实姓名
+  "phone": "string",    // 必填,手机号
+  "roleId": "long"      // 必填,角色ID
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "accountId": "long"
+  }
+}
+```
+
+**错误码**:
+- 1014: 用户名已存在
+- 1015: 手机号已注册
+- 1016: 密码强度不足
+
+---
+
+### 4.6 GET /api/admin/dict/list — 字典列表
+
+**描述**: 获取指定类型的字典列表
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```
+?dictType=string
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": [
+    {
+      "id": "long",
+      "dictType": "string",
+      "dictCode": "string",
+      "dictName": "string",
+      "sortOrder": "int"
+    }
+  ]
+}
+```
+
+---
+
+### 4.7 POST /api/admin/dict — 新增字典项
+
+**描述**: 新增字典项
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "dictType": "string",  // 必填,字典类型
+  "dictCode": "string",  // 必填,字典编码
+  "dictName": "string",  // 必填,字典名称
+  "sortOrder": "int"     // 排序号
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "dictId": "long"
+  }
+}
+```
+
+**错误码**:
+- 1017: 字典编码已存在
+- 1018: 系统内置字典不可删除
+
+---
+
+### 4.8 GET /api/admin/operation-log/list — 操作日志列表
+
+**描述**: 获取操作日志列表(分页)
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```
+?page=1&pageSize=10&operatorId=long&startTime=string&endTime=string
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "total": "long",
+    "page": "int",
+    "pageSize": "int",
+    "list": [
+      {
+        "id": "long",
+        "operatorName": "string",
+        "operationType": "string",
+        "operationModule": "string",
+        "operationContent": "string",
+        "ipAddress": "string",
+        "result": "int",
+        "createdAt": "string"
+      }
+    ]
+  }
+}
+```
+
+---
+
+## 五、审核模块接口
+
+### 5.1 GET /api/admin/audit/list — 审核列表
+
+**描述**: 获取审核列表(分页)
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```
+?page=1&pageSize=10&targetType=string&status=string
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "total": "long",
+    "page": "int",
+    "pageSize": "int",
+    "list": [
+      {
+        "id": "long",
+        "targetType": "string",
+        "targetId": "long",
+        "submitterName": "string",
+        "status": "string",
+        "createdAt": "string"
+      }
+    ]
+  }
+}
+```
+
+---
+
+### 5.2 PUT /api/admin/audit/{id} — 审核操作
+
+**描述**: 执行审核操作(通过/驳回)
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**请求参数**:
+```json
+{
+  "action": "string", // 必填,APPROVE/REJECT
+  "reason": "string"  // 驳回时必填
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": null
+}
+```
+
+**错误码**:
+- 1019: 审核记录不存在
+- 1020: 驳回原因不能为空
+
+---
+
+### 5.3 GET /api/admin/audit/{id} — 审核详情
+
+**描述**: 获取审核详情
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "id": "long",
+    "targetType": "string",
+    "targetId": "long",
+    "targetData": {}, // 审核对象的详细数据
+    "submitterName": "string",
+    "status": "string",
+    "createdAt": "string"
+  }
+}
+```
+
+---
+
+## 六、首页模块接口
+
+### 6.1 GET /api/wx/home/grower — 果农首页
+
+**描述**: 获取果农首页数据
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "greeting": "string", // 问候语
+    "marketPrices": [
+      {
+        "variety": "string",
+        "priceMin": "decimal",
+        "priceMax": "decimal",
+        "trend": "string", // up/down/stable
+        "updateTime": "string"
+      }
+    ],
+    "quickEntries": [
+      {
+        "name": "string",
+        "icon": "string",
+        "path": "string"
+      }
+    ]
+  }
+}
+```
+
+---
+
+### 6.2 GET /api/wx/home/worker — 工人首页
+
+**描述**: 获取工人首页推荐招工
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "recommendedRecruits": [
+      {
+        "id": "long",
+        "workType": "string",
+        "price": "decimal",
+        "priceUnit": "string",
+        "days": "int",
+        "peopleCount": "int",
+        "growerName": "string",
+        "distance": "decimal" // 公里
+      }
+    ]
+  }
+}
+```
+
+---
+
+### 6.3 GET /api/wx/home/buyer — 客商首页
+
+**描述**: 获取客商首页数据
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "marketPrices": [...],
+    "recommendedGrowers": [
+      {
+        "identityId": "long",
+        "variety": "string",
+        "production": "decimal", // 斤
+        "expectedPrice": "decimal",
+        "orchardAddress": "string",
+        "distance": "decimal"
+      }
+    ]
+  }
+}
+```
+
+---
+
+### 6.4 GET /api/wx/home/supplier — 农资商首页
+
+**描述**: 获取农资商首页数据
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "shopInfo": {
+      "shopName": "string",
+      "mainProducts": "string",
+      "productCount": "int"
+    },
+    "quickEntries": [
+      {"name": "商品管理", "path": "/pages/product/list"},
+      {"name": "订单管理", "path": "/pages/order/list"},
+      {"name": "店铺设置", "path": "/pages/shop/setting"}
+    ]
+  }
+}
+```
+
+---
+
+### 6.5 GET /api/wx/market-price — 行情数据
+
+**描述**: 获取今日行情数据
+
+**请求头**:
+```
+Authorization: Bearer {token}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": [
+    {
+      "variety": "string",
+      "priceMin": "decimal",
+      "priceMax": "decimal",
+      "trend": "string",
+      "updateTime": "string"
+    }
+  ]
+}
+```
+
+---
+
+## 七、接口统计
+
+| 模块 | 接口数 | 方法 |
+|------|--------|------|
+| 认证模块 | 5 | POST×3, PUT×1, GET×1 |
+| 用户模块 | 4 | GET×1, PUT×1, POST×2 |
+| 系统管理 | 8 | GET×5, POST×2, PUT×1 |
+| 审核模块 | 3 | GET×2, PUT×1 |
+| 首页模块 | 5 | GET×5 |
+| **总计** | **25** | GET×16, POST×7, PUT×2 |

+ 657 - 0
deliveries/team-b-architecture/design.md

@@ -0,0 +1,657 @@
+# 阶段一架构设计 — 基础设施与用户体系
+
+> 基于 Team A 需求规格(spec.md)
+> 嵌入 Team A 关键信息
+
+---
+
+## 一、系统架构
+
+### 1.1 整体架构
+
+```
+┌─────────────────────────────────────────────────────────────┐
+│                      客户端层                                │
+├─────────────────────────┬───────────────────────────────────┤
+│   微信小程序 (wxapp)    │   后台管理系统 (wxbackstage)       │
+│   - 原生微信开发         │   - Vue 2 + Element UI            │
+│   - 面向四类用户         │   - 面向政府管理部门               │
+└───────────┬─────────────┴───────────────┬───────────────────┘
+            │                             │
+            ▼                             ▼
+┌─────────────────────────────────────────────────────────────┐
+│                      API 网关层                              │
+│   - JWT Token 认证                                           │
+│   - 权限拦截器(RBAC)                                        │
+│   - 接口路径:/api/wx/* (小程序)  /api/admin/* (后台)         │
+└───────────────────────────┬─────────────────────────────────┘
+                            │
+                            ▼
+┌─────────────────────────────────────────────────────────────┐
+│                      业务逻辑层                              │
+├──────────┬──────────┬──────────┬──────────┬────────────────┤
+│ 用户模块 │ 系统模块 │ 审核模块 │ 首页模块 │  通用模块      │
+│ AuthService│ SysService│ AuditService│ HomeService│  CommonService│
+└──────┬───┴──────┬───┴──────┬───┴──────┬───┴────────┬───────┘
+       │          │          │          │            │
+       ▼          ▼          ▼          ▼            ▼
+┌─────────────────────────────────────────────────────────────┐
+│                      数据访问层                              │
+│   - MyBatis XML 映射                                         │
+│   - Mapper 接口                                              │
+└───────────────────────────┬─────────────────────────────────┘
+                            │
+                            ▼
+┌─────────────────────────────────────────────────────────────┐
+│                      数据存储层                              │
+├─────────────────────────┬───────────────────────────────────┤
+│   MySQL (crrc 库)       │   Redis (缓存)                    │
+│   - 15 张业务表          │   - Token 黑名单                  │
+│   - AES 加密字段         │   - 验证码缓存                    │
+│   - SHA256 哈希索引      │   - 数据大屏统计                  │
+└─────────────────────────┴───────────────────────────────────┘
+```
+
+### 1.2 模块划分
+
+| 模块 | 包名 | 职责 |
+|------|------|------|
+| 用户模块 | com.fenzhitech.crrc.service | 用户认证、身份管理、权限控制 |
+| 系统模块 | com.fenzhitech.crrc.service | 角色管理、账号管理、字典管理、操作日志 |
+| 审核模块 | com.fenzhitech.crrc.service | 审核流程、审核列表、审核日志 |
+| 首页模块 | com.fenzhitech.crrc.service | 首页数据、行情展示 |
+| 通用模块 | com.fenzhitech.crrc.util | 工具类、常量、异常处理 |
+
+### 1.3 分层架构
+
+```
+Controller 层(API 入口)
+    ↓
+Service 层(业务逻辑)
+    ↓
+Mapper 层(数据访问)
+    ↓
+Entity/DTO/VO 层(数据模型)
+```
+
+**职责划分**:
+- **Controller**: 接收请求、参数校验、调用 Service、返回响应
+- **Service**: 业务逻辑、事务管理、异常处理
+- **Mapper**: 数据库操作、MyBatis XML 映射
+- **Entity**: 数据库实体,与表结构对应
+- **DTO**: 数据传输对象,Service 层间传递
+- **VO**: 视图对象,Controller 返回给前端
+
+---
+
+## 二、数据库设计
+
+### 2.1 ER 图
+
+```
+sys_user (用户基础表)
+    │
+    ├── 1:N ──→ user_identity (身份关联表)
+    │               │
+    │               ├── 1:1 ──→ grower_profile (果农档案)
+    │               ├── 1:1 ──→ worker_profile (工人档案)
+    │               ├── 1:1 ──→ buyer_profile (客商档案)
+    │               └── 1:1 ──→ supplier_shop (农资店铺)
+    │
+    └── 1:N ──→ operation_log (操作日志)
+
+audit_log (审核日志)
+    │
+    └── 关联 → user_identity
+
+sys_role (角色表)
+    │
+    └── N:M ──→ sys_permission (权限表)
+```
+
+### 2.2 核心表设计
+
+#### sys_user(用户基础表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 用户ID |
+| openid | VARCHAR(64) | UNIQUE, INDEX | 微信 openid |
+| username | VARCHAR(50) | UNIQUE | 后台登录用户名 |
+| password | VARCHAR(100) | | BCrypt 加密密码 |
+| phone | VARCHAR(100) | | AES 加密手机号 |
+| phone_hash | VARCHAR(64) | UNIQUE, INDEX | SHA256 手机号哈希 |
+| real_name | VARCHAR(50) | | 真实姓名 |
+| status | TINYINT | INDEX | 状态:0正常 1禁用 2锁定 |
+| lock_reason | VARCHAR(200) | | 锁定原因 |
+| login_fail_count | INT | | 连续登录失败次数 |
+| lock_time | DATETIME | | 锁定时间 |
+| created_at | DATETIME | | 创建时间 |
+| updated_at | DATETIME | | 更新时间 |
+
+#### user_identity(身份关联表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 身份ID |
+| user_id | BIGINT | INDEX | 关联用户ID |
+| identity_type | VARCHAR(20) | INDEX | 身份类型:GROWER/WORKER/BUYER/SUPPLIER |
+| status | TINYINT | | 状态:0正常 1禁用 |
+| created_at | DATETIME | | 创建时间 |
+
+#### sys_role(角色表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 角色ID |
+| role_name | VARCHAR(50) | UNIQUE | 角色名称 |
+| role_code | VARCHAR(50) | UNIQUE | 角色编码 |
+| description | VARCHAR(200) | | 角色描述 |
+| status | TINYINT | | 状态:0正常 1禁用 |
+| is_system | TINYINT | | 是否系统预置:0否 1是 |
+| created_at | DATETIME | | 创建时间 |
+
+#### sys_permission(权限表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 权限ID |
+| parent_id | BIGINT | | 父权限ID |
+| perm_name | VARCHAR(50) | | 权限名称 |
+| perm_code | VARCHAR(100) | UNIQUE | 权限编码 |
+| perm_type | VARCHAR(20) | | 类型:MENU/BUTTON |
+| path | VARCHAR(200) | | 菜单路径 |
+| icon | VARCHAR(100) | | 菜单图标 |
+| sort_order | INT | | 排序号 |
+| status | TINYINT | | 状态:0正常 1禁用 |
+
+#### sys_role_permission(角色权限关联表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
+| role_id | BIGINT | INDEX | 角色ID |
+| permission_id | BIGINT | INDEX | 权限ID |
+
+#### sys_dict(字典表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 字典ID |
+| dict_type | VARCHAR(50) | INDEX | 字典类型 |
+| dict_code | VARCHAR(50) | UNIQUE | 字典编码 |
+| dict_name | VARCHAR(100) | | 字典名称 |
+| sort_order | INT | | 排序号 |
+| is_system | TINYINT | | 是否系统内置:0否 1是 |
+| status | TINYINT | | 状态:0正常 1禁用 |
+
+#### audit_log(审核日志表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 日志ID |
+| target_type | VARCHAR(50) | | 审核对象类型 |
+| target_id | BIGINT | | 审核对象ID |
+| operator_id | BIGINT | INDEX | 审核人ID |
+| action | VARCHAR(20) | | 审核动作:APPROVE/REJECT |
+| reason | VARCHAR(500) | | 审核原因 |
+| created_at | DATETIME | | 审核时间 |
+
+#### operation_log(操作日志表)
+
+| 字段 | 类型 | 约束 | 说明 |
+|------|------|------|------|
+| id | BIGINT | PK, AUTO_INCREMENT | 日志ID |
+| operator_id | BIGINT | INDEX | 操作人ID |
+| operator_name | VARCHAR(50) | | 操作人姓名 |
+| operation_type | VARCHAR(50) | | 操作类型 |
+| operation_module | VARCHAR(50) | | 操作模块 |
+| operation_content | VARCHAR(500) | | 操作内容 |
+| ip_address | VARCHAR(50) | | IP地址 |
+| result | TINYINT | | 操作结果:0失败 1成功 |
+| created_at | DATETIME | | 操作时间 |
+
+### 2.3 索引设计
+
+```sql
+-- sys_user 表索引
+CREATE UNIQUE INDEX idx_phone_hash ON sys_user(phone_hash);
+CREATE UNIQUE INDEX idx_openid ON sys_user(openid);
+CREATE INDEX idx_status ON sys_user(status);
+
+-- user_identity 表索引
+CREATE INDEX idx_user_id ON user_identity(user_id);
+CREATE INDEX idx_identity_type ON user_identity(identity_type);
+
+-- audit_log 表索引
+CREATE INDEX idx_operator_id ON audit_log(operator_id);
+
+-- operation_log 表索引
+CREATE INDEX idx_operator_id ON operation_log(operator_id);
+```
+
+---
+
+## 三、接口设计
+
+### 3.1 认证接口
+
+#### POST /api/wx/auth/login — 微信登录
+
+**请求参数**:
+```json
+{
+  "code": "wx_login_code"
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "jwt_token",
+    "userId": 1,
+    "identities": [
+      {
+        "identityId": 1,
+        "identityType": "GROWER",
+        "identityName": "果农"
+      }
+    ]
+  }
+}
+```
+
+**业务逻辑**:
+1. 用 code 调用微信接口换取 openid
+2. 查询 openid 是否已绑定用户
+3. 已绑定 → 签发 JWT token
+4. 未绑定 → 返回错误码 1001(提示联系村委会)
+
+#### POST /api/admin/auth/login — 后台登录
+
+**请求参数**:
+```json
+{
+  "username": "admin",
+  "password": "admin123"
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "jwt_token",
+    "userId": 1,
+    "username": "admin",
+    "realName": "管理员",
+    "roleId": 1,
+    "roleName": "超级管理员"
+  }
+}
+```
+
+**业务逻辑**:
+1. 验证用户名存在
+2. 验证密码正确(BCrypt)
+3. 验证账号状态
+4. 签发 JWT token
+5. 记录登录日志
+
+#### POST /api/wx/auth/select-identity — 选择身份
+
+**请求参数**:
+```json
+{
+  "identityId": 1
+}
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "token": "new_jwt_token_with_identity"
+  }
+}
+```
+
+### 3.2 用户接口
+
+#### GET /api/wx/user/info — 获取用户信息
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "userId": 1,
+    "realName": "张三",
+    "phone": "138****8888",
+    "identities": [...],
+    "currentIdentity": {
+      "identityId": 1,
+      "identityType": "GROWER"
+    }
+  }
+}
+```
+
+#### PUT /api/admin/user/status — 修改用户状态
+
+**请求参数**:
+```json
+{
+  "userId": 1,
+  "status": 0,
+  "lockReason": "违规操作"
+}
+```
+
+### 3.3 系统管理接口
+
+#### GET /api/admin/role/list — 角色列表
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "total": 8,
+    "list": [
+      {
+        "id": 1,
+        "roleName": "超级管理员",
+        "roleCode": "ADMIN",
+        "status": 0,
+        "isSystem": 1
+      }
+    ]
+  }
+}
+```
+
+#### POST /api/admin/account — 创建账号
+
+**请求参数**:
+```json
+{
+  "username": "newadmin",
+  "password": "Admin123",
+  "realName": "新管理员",
+  "phone": "13800138000",
+  "roleId": 2
+}
+```
+
+#### GET /api/admin/dict/list — 字典列表
+
+**请求参数**:
+```
+?dictType=apple_variety
+```
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": [
+    {
+      "id": 1,
+      "dictType": "apple_variety",
+      "dictCode": "red_fuji",
+      "dictName": "红富士",
+      "sortOrder": 1
+    }
+  ]
+}
+```
+
+#### GET /api/admin/operation-log/list — 操作日志列表
+
+**请求参数**:
+```
+?page=1&pageSize=10&operatorId=1&startTime=2026-05-01&endTime=2026-05-30
+```
+
+### 3.4 审核接口
+
+#### GET /api/admin/audit/list — 审核列表
+
+**请求参数**:
+```
+?page=1&pageSize=10&targetType=GROWER_PROFILE&status=PENDING
+```
+
+#### PUT /api/admin/audit/{id} — 审核操作
+
+**请求参数**:
+```json
+{
+  "action": "APPROVE",
+  "reason": ""
+}
+```
+
+### 3.5 首页接口
+
+#### GET /api/wx/home/grower — 果农首页
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "greeting": "早安,张三!",
+    "marketPrices": [
+      {
+        "variety": "红富士",
+        "priceMin": 3.5,
+        "priceMax": 4.2,
+        "trend": "up",
+        "updateTime": "2026-05-30 08:00"
+      }
+    ],
+    "quickEntries": [
+      {"name": "找工人", "icon": "worker", "path": "/pages/worker/list"},
+      {"name": "找客商", "icon": "buyer", "path": "/pages/buyer/list"},
+      {"name": "买农资", "icon": "supplier", "path": "/pages/supplier/list"},
+      {"name": "发布需求", "icon": "publish", "path": "/pages/recruit/publish"}
+    ]
+  }
+}
+```
+
+#### GET /api/wx/home/worker — 工人首页
+
+**响应参数**:
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "recommendedRecruits": [
+      {
+        "id": 1,
+        "workType": "采摘",
+        "price": 150,
+        "priceUnit": "元/天",
+        "days": 5,
+        "peopleCount": 3,
+        "growerName": "李四",
+        "distance": 2.5
+      }
+    ]
+  }
+}
+```
+
+---
+
+## 四、安全设计
+
+### 4.1 认证流程
+
+```
+客户端请求
+    │
+    ▼
+拦截器检查 Token
+    │
+    ├── 无 Token → 401 未认证
+    │
+    ├── Token 无效 → 401 未认证
+    │
+    ├── Token 过期 → 401 未认证
+    │
+    └── Token 有效 → 解析用户信息
+                          │
+                          ▼
+                    检查权限(RBAC)
+                          │
+                          ├── 无权限 → 403 禁止访问
+                          │
+                          └── 有权限 → 执行业务逻辑
+```
+
+### 4.2 权限模型
+
+```
+用户 (sys_user)
+    │
+    └── N:M ──→ 角色 (sys_role)
+                    │
+                    └── N:M ──→ 权限 (sys_permission)
+```
+
+**权限检查流程**:
+1. 从 Token 解析 userId 和 roleId
+2. 查询角色关联的权限列表
+3. 检查当前接口是否在权限列表中
+4. 无权限返回 403
+
+### 4.3 数据安全
+
+- **手机号**: AES 加密存储,SHA256 哈希索引
+- **密码**: BCrypt 加密
+- **Token**: JWT 签名,有效期控制
+- **接口**: 参数校验,SQL 注入防护
+- **日志**: 敏感操作记录
+
+---
+
+## 五、技术选型
+
+### 5.1 后端技术栈
+
+| 技术 | 版本 | 用途 |
+|------|------|------|
+| Java | 1.8 | 开发语言 |
+| Spring Boot | 1.5.9 | 应用框架 |
+| MyBatis | 1.3.2 | ORM 框架 |
+| MySQL | 5.7+ | 数据库 |
+| Redis | 3.0+ | 缓存 |
+| JWT (jjwt) | 0.9.1 | Token 认证 |
+|阿里云 OSS | 3.15.1 | 文件存储 |
+| 阿里云短信 | 2.1.0 | 短信服务 |
+| Apache POI | 3.17 | Excel 处理 |
+
+### 5.2 前端技术栈
+
+| 技术 | 版本 | 用途 |
+|------|------|------|
+| 微信小程序 | 基础库 ≥2.0 | 移动端 |
+| Vue | 2.6.14 | 后台前端框架 |
+| Element UI | 2.15.9 | UI 组件库 |
+| ECharts | 5.4.3 | 数据可视化 |
+| Axios | 0.27.2 | HTTP 客户端 |
+
+### 5.3 开发工具
+
+| 工具 | 用途 |
+|------|------|
+| Maven | 构建工具 |
+| Git | 版本控制 |
+| Gogs | 代码仓库 |
+| Navicat/DBeaver | 数据库客户端 |
+| 微信开发者工具 | 小程序开发 |
+
+---
+
+## 六、部署架构
+
+### 6.1 开发环境
+
+```
+本地开发机
+├── JDK 1.8
+├── Maven 3.6.3
+├── MySQL 5.7
+├── Redis 3.0
+└── 微信开发者工具
+```
+
+### 6.2 生产环境(规划)
+
+```
+云服务器
+├── Nginx(反向代理)
+├── Spring Boot 应用(8080 端口)
+├── MySQL 数据库
+├── Redis 缓存
+└── 阿里云 OSS(文件存储)
+```
+
+---
+
+## 七、关键决策记录
+
+### 7.1 认证方案选择
+
+**决策**: 采用 JWT Token 认证
+
+**原因**:
+1. 无状态,适合分布式部署
+2. 小程序和后台可共用认证机制
+3. 支持自定义 payload(userId, identityId, identityType)
+
+**权衡**:
+- Token 无法主动失效 → 采用 Redis 黑名单机制
+- Token 有效期管理 → 小程序24h,后台8h
+
+### 7.2 权限模型选择
+
+**决策**: 采用 RBAC(Role-Based Access Control)
+
+**原因**:
+1. 角色数量有限(8种),管理简单
+2. 权限变更通过角色控制,影响范围可控
+3. 支持细粒度权限(菜单+按钮)
+
+**权衡**:
+- 不支持数据级权限 → 后续可扩展
+- 权限变更需重新登录 → 可优化为实时生效
+
+### 7.3 手机号存储方案
+
+**决策**: AES 加密存储 + SHA256 哈希索引
+
+**原因**:
+1. 满足隐私保护要求
+2. SHA256 哈希支持精确查询
+3. AES 加密支持解密显示(管理后台)
+
+**权衡**:
+- 无法支持模糊查询 → 业务上不需要
+- 哈希碰撞风险 → SHA256 碰撞概率极低

+ 235 - 0
deliveries/team-b-architecture/tech-stack.md

@@ -0,0 +1,235 @@
+# 阶段一技术选型 — 基础设施与用户体系
+
+---
+
+## 一、后端技术栈
+
+### 1.1 核心框架
+
+| 技术 | 版本 | 用途 | 选型理由 |
+|------|------|------|----------|
+| Java | 1.8.0_291 | 开发语言 | 客户环境限制,兼容性好 |
+| Spring Boot | 1.5.9.RELEASE | 应用框架 | 成熟稳定,社区支持好 |
+| MyBatis | 1.3.2 | ORM 框架 | 灵活的 SQL 控制,XML 映射 |
+| MySQL | 5.7+ | 数据库 | 客户环境限制,性能稳定 |
+| Redis | 3.0+ | 缓存 | 高性能,支持多种数据结构 |
+
+### 1.2 认证与安全
+
+| 技术 | 版本 | 用途 | 选型理由 |
+|------|------|------|----------|
+| JWT (jjwt) | 0.9.1 | Token 认证 | 无状态,适合分布式 |
+| BCrypt | - | 密码加密 | 安全性高,自动加盐 |
+| AES | - | 手机号加密 | 对称加密,性能好 |
+| SHA256 | - | 手机号哈希 | 单向哈希,支持索引查询 |
+
+### 1.3 文件处理
+
+| 技术 | 版本 | 用途 | 选型理由 |
+|------|------|------|----------|
+| 阿里云 OSS SDK | 3.15.1 | 文件存储 | 云服务稳定,CDN 加速 |
+| 阿里云短信 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 | 工具类 | 字符串、日期等常用工具 |
+
+---
+
+## 二、前端技术栈
+
+### 2.1 小程序端
+
+| 技术 | 版本 | 用途 | 选型理由 |
+|------|------|------|----------|
+| 微信小程序 | 基础库 ≥2.0 | 移动端框架 | 目标用户使用微信 |
+| WXML | - | 模板语言 | 微信小程序原生 |
+| WXSS | - | 样式语言 | 微信小程序原生 |
+| JavaScript | ES6 | 脚本语言 | 小程序支持 |
+
+### 2.2 后台管理端
+
+| 技术 | 版本 | 用途 | 选型理由 |
+|------|------|------|----------|
+| Vue | 2.6.14 | 前端框架 | 成熟稳定,学习成本低 |
+| Vue Router | 3.5.4 | 路由管理 | Vue 官方路由 |
+| Vuex | 3.6.2 | 状态管理 | Vue 官方状态管理 |
+| Element UI | 2.15.9 | UI 组件库 | 组件丰富,文档完善 |
+| Axios | 0.27.2 | HTTP 客户端 | 支持 Promise,拦截器 |
+| ECharts | 5.4.3 | 数据可视化 | 功能强大,图表丰富 |
+
+---
+
+## 三、开发工具
+
+### 3.1 构建工具
+
+| 工具 | 版本 | 用途 |
+|------|------|------|
+| Maven | 3.6.3 | 后端构建 |
+| npm | - | 前端依赖管理 |
+| Vue CLI | 4.5.19 | 前端构建 |
+
+### 3.2 版本控制
+
+| 工具 | 用途 |
+|------|------|
+| Git | 版本控制 |
+| Gogs | 代码仓库(自托管) |
+
+### 3.3 开发环境
+
+| 工具 | 用途 |
+|------|------|
+| JDK 1.8 | Java 开发环境 |
+| IntelliJ IDEA | Java IDE |
+| VS Code | 前端 IDE |
+| 微信开发者工具 | 小程序开发调试 |
+| Navicat/DBeaver | 数据库客户端 |
+| Redis Desktop Manager | Redis 客户端 |
+
+---
+
+## 四、部署环境
+
+### 4.1 服务器配置(规划)
+
+| 资源 | 配置 | 说明 |
+|------|------|------|
+| CPU | 2 核 | 足够支撑初期访问量 |
+| 内存 | 4 GB | Spring Boot + MySQL + Redis |
+| 磁盘 | 50 GB | 系统 + 数据 + 日志 |
+| 带宽 | 5 Mbps | 足够支撑初期访问量 |
+
+### 4.2 软件环境
+
+| 软件 | 版本 | 用途 |
+|------|------|------|
+| CentOS | 7.x | 操作系统 |
+| Nginx | 1.18+ | 反向代理 |
+| MySQL | 5.7 | 数据库 |
+| Redis | 3.0+ | 缓存 |
+| JDK | 1.8 | Java 运行环境 |
+
+### 4.3 云服务
+
+| 服务 | 用途 | 配置 |
+|------|------|------|
+| 阿里云 OSS | 文件存储 | 私有读写,CORS 配置 |
+| 阿里云 SMS | 短信服务 | 签名:洒渔用工 |
+| 微信小程序 | 移动端 | AppID 待申请 |
+
+---
+
+## 五、数据库设计规范
+
+### 5.1 命名规范
+
+- **表名**: 小写字母 + 下划线,如 `sys_user`
+- **字段名**: 小写字母 + 下划线,如 `user_name`
+- **主键**: `id`,自增
+- **索引**: `idx_` 前缀,如 `idx_user_id`
+- **唯一索引**: `uk_` 前缀,如 `uk_phone_hash`
+
+### 5.2 字段规范
+
+- **字符串**: VARCHAR,长度按实际需求
+- **数字**: INT/BIGINT/DECIMAL
+- **时间**: DATETIME
+- **状态**: TINYINT,0/1/2
+- **布尔**: TINYINT,0 否 1 是
+
+### 5.3 必备字段
+
+每个业务表必须包含:
+- `id` — 主键
+- `created_at` — 创建时间
+- `updated_at` — 更新时间
+
+---
+
+## 六、接口设计规范
+
+### 6.1 路径规范
+
+- **小程序端**: `/api/wx/{module}/{action}`
+- **后台管理端**: `/api/admin/{module}/{action}`
+- **模块**: 用户模块 `user`,系统模块 `system`,审核模块 `audit`,首页模块 `home`
+
+### 6.2 请求规范
+
+- **GET**: 查询操作,参数通过 URL 传递
+- **POST**: 创建操作,参数通过 Body 传递
+- **PUT**: 更新操作,参数通过 Body 传递
+- **DELETE**: 删除操作
+
+### 6.3 响应规范
+
+```json
+{
+  "code": 200,       // 状态码
+  "message": "success", // 状态描述
+  "data": {}         // 业务数据
+}
+```
+
+### 6.4 错误码规范
+
+| 错误码 | 含义 | 说明 |
+|--------|------|------|
+| 200 | 成功 | - |
+| 400 | 请求错误 | 参数校验失败 |
+| 401 | 未认证 | Token 无效或过期 |
+| 403 | 禁止访问 | 无权限 |
+| 404 | 未找到 | 资源不存在 |
+| 500 | 服务器错误 | 内部异常 |
+| 1001-1099 | 业务错误 | 自定义业务错误码 |
+
+---
+
+## 七、安全设计规范
+
+### 7.1 认证安全
+
+- **Token**: JWT 签名,有效期控制
+- **密码**: BCrypt 加密,强度校验
+- **登录**: 失败次数限制,锁定机制
+
+### 7.2 数据安全
+
+- **手机号**: AES 加密存储,SHA256 哈希索引
+- **敏感数据**: 接口返回脱敏
+- **SQL 注入**: MyBatis #{} 参数化
+
+### 7.3 接口安全
+
+- **权限控制**: RBAC 模型
+- **参数校验**: 必填校验、类型校验、范围校验
+- **防重放**: Token 过期机制
+
+---
+
+## 八、性能设计规范
+
+### 8.1 数据库性能
+
+- **索引**: 高频查询字段建立索引
+- **连接池**: 最大连接数 20
+- **慢查询**: 开启慢查询日志
+
+### 8.2 缓存策略
+
+- **Token 黑名单**: Redis 存储
+- **验证码**: Redis 存储,5 分钟过期
+- **数据大屏**: Redis 缓存,定时更新
+
+### 8.3 接口性能
+
+- **响应时间**: ≤500ms(95%请求)
+- **并发**: ≥100 用户
+- **分页**: 默认每页 10 条,最大 100 条