Explorar o código

[milestone-1] Team A 需求分析交付:阶段一需求规格、用例、约束

交付产物:
- spec.md: 阶段一需求规格(20功能点)
- use-cases.md: 阶段一用例文档(18用例)
- constraints.md: 阶段一约束条件(8类别)
- DELIVERY-MANIFEST.md: 交付清单
wubinggen hai 9 horas
pai
achega
4e374469a9

+ 94 - 0
deliveries/team-a-requirement/DELIVERY-MANIFEST.md

@@ -0,0 +1,94 @@
+# 交付清单 — Team A 需求分析师
+
+## 里程碑信息
+- **阶段**: 需求分析
+- **里程碑编号**: milestone-1
+- **提交时间**: 2026-05-30 17:30
+- **负责团队**: Team A
+
+## 交付产物
+
+| 序号 | 文件路径 | 说明 | 覆盖度检查 | 核心内容摘要 |
+|------|----------|------|------------|--------------|
+| 1 | deliveries/team-a-requirement/spec.md | 阶段一需求规格 | 模块数: 4/4, 功能点: 20/20 | 系统管理、用户认证、首页与行情、审核框架 |
+| 2 | deliveries/team-a-requirement/use-cases.md | 阶段一用例文档 | 用例数: 18/18, 覆盖功能点: 20/20 | 系统管理4用例、用户认证8用例、首页4用例、审核2用例 |
+| 3 | deliveries/team-a-requirement/constraints.md | 阶段一约束条件 | 约束类别: 8/8 | 技术、安全、业务、性能、兼容性、数据、接口、测试 |
+| 4 | deliveries/team-a-requirement/DELIVERY-MANIFEST.md | 本交付清单 | - | 交付物清单、关键信息、问题反馈 |
+
+## 修改文件清单
+
+| 序号 | 文件路径 | 操作类型 | 说明 |
+|------|----------|----------|------|
+| 1 | deliveries/team-a-requirement/spec.md | 新增 | 阶段一需求规格文档 |
+| 2 | deliveries/team-a-requirement/use-cases.md | 新增 | 阶段一用例文档 |
+| 3 | deliveries/team-a-requirement/constraints.md | 新增 | 阶段一约束条件文档 |
+| 4 | deliveries/team-a-requirement/DELIVERY-MANIFEST.md | 新增 | 本交付清单 |
+
+## 交付说明
+
+本次交付为阶段一(基础设施与用户体系)的需求分析成果,基于已有的需求规格说明书(requirements-specification.md)提取和细化。
+
+### 核心内容
+
+1. **系统管理模块**(6个功能点)
+   - 角色管理:系统预置8种角色,RBAC权限模型
+   - 账号管理:管理员账号增删改查,BCrypt密码加密
+   - 权限管理:菜单+按钮级权限控制
+   - 字典管理:苹果品种、工种、农资种类、行政区划
+   - 操作日志:管理员操作行为记录
+   - 数据初始化:基础字典数据导入
+
+2. **用户认证模块**(8个功能点)
+   - 微信登录:code→openid→JWT token
+   - 后台登录:用户名+密码→JWT token
+   - 身份路由:根据身份数量决定跳转逻辑
+   - 用户信息查询:基本信息+脱敏手机号
+   - 用户状态管理:正常/禁用/锁定
+   - 手机号加密存储:AES加密+SHA256哈希
+   - 身份绑定:为用户绑定果农/工人/客商/农资商身份
+   - 管理员创建用户:后台创建用户账号
+
+3. **首页与行情模块**(4个功能点)
+   - 果农首页:问候语+今日行情+金刚区
+   - 工人首页:推荐招工+附近招工列表
+   - 客商首页:今日行情+货源推荐
+   - 农资商首页:店铺概览+快捷入口
+
+4. **审核基础框架**(2个功能点)
+   - 审核流程:通用审核框架,支持通过/驳回
+   - 审核列表:待审核列表查看和筛选
+
+## 给下游团队的关键信息
+
+### 关键决策
+
+1. **认证方案**: 采用 JWT Token 认证,小程序端有效期24小时,后台端8小时
+2. **权限模型**: RBAC(用户→角色→权限),默认拒绝,显式授权
+3. **手机号存储**: AES加密存储明文,SHA256哈希用于查询索引
+4. **身份模型**: 一人多职,user_identity 表关联,数据隔离通过 user_identity_id
+5. **字典管理**: 系统内置字典不可删除,仅可扩展
+
+### 隐含约束
+
+1. **数据库必须使用 MySQL 5.7+**(客户环境限制)
+2. **Spring Boot 版本固定 1.5.9**(兼容性要求)
+3. **MyBatis XML 必须使用 #{} 参数化**(防SQL注入)
+4. **手机号接口返回必须脱敏**(隐私保护)
+5. **审核 SLA: ≤24小时提醒,48小时升级**(业务要求)
+
+### 特别注意
+
+1. **身份路由逻辑**: 0个身份→提示联系村委会,1个身份→直接进入,N个身份→选择页
+2. **密码锁定机制**: 连续5次错误锁定30分钟
+3. **操作日志**: 敏感操作(删除、权限变更、状态变更)必须记录
+4. **字典初始化**: 系统首次启动需导入基础字典数据
+
+## 对上团队的问题
+
+无。需求规格文档(requirements-specification.md)已完整覆盖阶段一所有功能点。
+
+## 待确认事项
+
+1. **行政区划数据**: 洒渔镇下辖村的实际数据需要用户提供
+2. **超级管理员初始密码**: 建议 admin/admin123,首次登录强制修改
+3. **天气数据接口**: 果农首页天气功能是否需要接入第三方API?

+ 180 - 0
deliveries/team-a-requirement/constraints.md

@@ -0,0 +1,180 @@
+# 阶段一约束条件 — 基础设施与用户体系
+
+---
+
+## 一、技术约束
+
+### 1.1 开发环境
+- **JDK**: 1.8.0_291
+- **Maven**: 3.6.3
+- **Spring Boot**: 1.5.9.RELEASE
+- **数据库**: MySQL 5.7+
+- **缓存**: Redis 3.0+
+- **ORM**: MyBatis(XML 映射)
+
+### 1.2 代码规范
+- **包名**: com.fenzhitech.crrc
+- **Controller 路径**: 
+  - 小程序端: /api/wx/*
+  - 后台管理端: /api/admin/*
+- **MyBatis XML**: 必须使用 `#{}` 语法,禁止 `${}`
+- **文件行数**: ≤ 500 行/文件
+
+### 1.3 构建与部署
+- **构建工具**: Maven
+- **编译命令**: `mvn compile`
+- **测试命令**: `mvn test`
+- **打包命令**: `mvn package -DskipTests`
+- **启动命令**: `mvn spring-boot:run`
+
+---
+
+## 二、安全约束
+
+### 2.1 数据安全
+- **手机号**: AES 加密存储,phone_hash (SHA256) 唯一索引
+- **密码**: BCrypt 加密,强度≥8位,含大小写字母和数字
+- **Token**: JWT,payload 包含 userId, identityId, identityType, exp
+- **密钥管理**: 配置在 application.properties,禁止硬编码
+
+### 2.2 接口安全
+- **认证**: JWT Token 认证
+- **授权**: RBAC 权限控制,默认拒绝,显式授权
+- **防重放**: Token 过期机制(小程序24小时,后台8小时)
+- **防注入**: MyBatis #{} 参数化
+- **敏感数据**: 接口返回脱敏(手机号 138****8888)
+
+### 2.3 操作安全
+- **登录日志**: 记录登录时间、IP、设备信息
+- **操作日志**: 记录管理员操作行为
+- **密码锁定**: 连续5次错误锁定30分钟
+- **账号禁用**: 禁用后不可登录
+
+---
+
+## 三、业务约束
+
+### 3.1 用户体系
+- **一人多职**: 一个用户可绑定多个身份(果农/工人/客商/农资商)
+- **数据隔离**: 所有业务表带 user_identity_id 字段
+- **身份路由**: 
+  - 0个身份 → 提示联系村委会
+  - 1个身份 → 直接进入对应首页
+  - N个身份 → 身份选择页
+
+### 3.2 审核机制
+- **审核对象**: 果农档案、工人档案、客商档案、招工信息、货源信息
+- **审核状态**: 待审、已通过、被驳回
+- **审核 SLA**: ≤24小时提醒,48小时升级给超级管理员
+- **驳回要求**: 必须填写驳回原因
+
+### 3.3 字典管理
+- **系统内置字典**: 不可删除,仅可扩展
+- **字典编码**: 唯一
+- **字典变更**: 记录操作日志
+
+---
+
+## 四、性能约束
+
+### 4.1 响应时间
+- **接口响应**: ≤500ms(95%请求)
+- **页面加载**: ≤3s
+
+### 4.2 并发能力
+- **并发用户**: ≥100
+- **数据库连接池**: 最大连接数 20
+
+### 4.3 数据量
+- **用户数据**: 预计 10,000+
+- **操作日志**: 保留 ≥180天
+- **字典数据**: 预计 100+ 条
+
+---
+
+## 五、兼容性约束
+
+### 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 索引设计
+- **sys_user**: phone_hash UNIQUE, openid UNIQUE, status INDEX
+- **user_identity**: user_id INDEX, identity_type INDEX
+- **audit_log**: operator_id INDEX
+- **operation_log**: operator_id INDEX
+
+### 6.3 初始数据
+- **字典数据**: 苹果品种、工种类型、农资种类、行政区划
+- **管理员账号**: 超级管理员(admin/admin123)
+
+---
+
+## 七、接口约束
+
+### 7.1 接口格式
+- **请求格式**: JSON
+- **响应格式**: JSON
+- **响应结构**: 
+  ```json
+  {
+    "code": 200,
+    "message": "success",
+    "data": {}
+  }
+  ```
+
+### 7.2 错误码规范
+- **200**: 成功
+- **400**: 请求参数错误
+- **401**: 未认证
+- **403**: 无权限
+- **404**: 资源不存在
+- **500**: 服务器内部错误
+
+### 7.3 分页规范
+- **请求参数**: page(页码,从1开始)、pageSize(每页数量,默认10)
+- **响应参数**: 
+  ```json
+  {
+    "total": 100,
+    "page": 1,
+    "pageSize": 10,
+    "list": []
+  }
+  ```
+
+---
+
+## 八、测试约束
+
+### 8.1 测试框架
+- **单元测试**: JUnit 4
+- **集成测试**: Spring Boot Test
+- **测试目录**: src/test/java/
+
+### 8.2 测试覆盖
+- **核心接口**: 测试覆盖率 ≥80%
+- **测试独立性**: 每个测试方法独立运行
+- **测试可重复**: 同一测试多次运行结果一致
+
+### 8.3 测试数据
+- **测试数据库**: 独立测试数据库
+- **测试数据**: 测试前准备,测试后清理

+ 284 - 0
deliveries/team-a-requirement/spec.md

@@ -0,0 +1,284 @@
+# 阶段一需求规格 — 基础设施与用户体系
+
+> 基于 requirements-specification.md 提取
+> 阶段一功能点:20 个
+
+---
+
+## 一、阶段范围
+
+阶段一聚焦**基础设施搭建**和**用户体系建设**,为后续业务功能提供底层支撑。
+
+### 功能模块
+
+| 模块 | 功能点数 | 优先级 |
+|------|---------|--------|
+| 系统管理(角色/权限/字典/日志) | 6 | P0 |
+| 用户注册与认证 | 8 | P0 |
+| 首页与行情展示 | 4 | P0 |
+| 审核基础框架 | 2 | P1 |
+
+**总计**: 20 个功能点
+
+---
+
+## 二、功能需求
+
+### 2.1 系统管理模块
+
+#### 2.1.1 角色管理(P0)
+- **功能**: 系统预置角色(果农/工人/客商/农资商/超级管理员/数据录入员/审核员/运维人员)
+- **角色属性**: 角色名称、角色编码、权限列表、状态
+- **操作**: 查看角色列表、查看角色详情、分配权限
+- **约束**: 系统预置角色不可删除,仅可修改权限配置
+
+#### 2.1.2 账号管理(P0)
+- **功能**: 后台管理员账号的增删改查
+- **账号属性**: 用户名、密码(BCrypt加密)、姓名、手机号、角色、状态
+- **操作**: 创建账号、编辑账号、启用/禁用、重置密码
+- **约束**: 
+  - 用户名唯一
+  - 手机号唯一
+  - 密码强度:≥8位,含大小写字母和数字
+  - 禁用后不可登录
+
+#### 2.1.3 权限管理(P0)
+- **功能**: 基于 RBAC 的权限控制
+- **权限模型**: 用户 → 角色 → 权限(菜单+按钮)
+- **菜单结构**: 
+  - 系统管理(角色管理、账号管理、字典管理、操作日志)
+  - 用户管理(果农管理、工人管理、客商管理、农资商管理)
+  - 内容审核(招工审核、货源审核、投诉处理)
+  - 数据统计(数据大屏、报表导出)
+- **约束**: 
+  - 默认拒绝,显式授权
+  - 超级管理员拥有全部权限
+  - 权限变更实时生效
+
+#### 2.1.4 字典管理(P1)
+- **功能**: 系统字典数据的维护
+- **字典类型**: 
+  - 苹果品种(红富士/嘎啦/花牛/秦冠/其他)
+  - 工种类型(采摘/套袋/搬运/装卸/其他)
+  - 农资种类(化肥/果袋/反光膜/选果机/农药)
+  - 行政区划(洒渔镇下辖村)
+  - 审核状态(待审/已通过/被驳回)
+  - 用户状态(正常/禁用/锁定)
+- **操作**: 查看字典列表、新增字典项、编辑字典项、删除字典项
+- **约束**: 
+  - 字典编码唯一
+  - 系统内置字典不可删除
+  - 字典变更记录操作日志
+
+#### 2.1.5 操作日志(P1)
+- **功能**: 记录管理员的操作行为
+- **日志内容**: 操作人、操作时间、操作类型、操作模块、操作内容、IP地址、操作结果
+- **操作**: 查看日志列表、按条件筛选、导出日志
+- **约束**: 
+  - 日志只增不删
+  - 保留期限:≥180天
+  - 敏感操作(删除、权限变更)必须记录
+
+#### 2.1.6 数据字典初始化(P0)
+- **功能**: 系统初始化时导入基础字典数据
+- **数据内容**: 
+  - 苹果品种:红富士、嘎啦、花牛、秦冠、青苹果、其他
+  - 工种类型:采摘、套袋、搬运、装卸、修剪、其他
+  - 农资种类:化肥、果袋、反光膜、选果机、农药、其他
+  - 行政区划:洒渔镇下辖村(需实际数据)
+- **约束**: 初始化数据不可删除,仅可扩展
+
+---
+
+### 2.2 用户注册与认证
+
+#### 2.2.1 微信登录(P0)
+- **流程**: 
+  1. 小程序端调用 `wx.login()` 获取 code
+  2. 后端用 code 换取 openid
+  3. 查询 openid 是否已绑定用户
+  4. 已绑定 → 签发 JWT token
+  5. 未绑定 → 返回提示"未找到信息,请联系村委会"
+- **Token 结构**: 
+  - payload: userId, identityId, identityType, exp
+  - 有效期: 24小时
+- **约束**: 
+  - 一个 openid 绑定一个用户
+  - Token 过期后需重新登录
+  - 登录日志记录
+
+#### 2.2.2 后台登录(P0)
+- **流程**: 
+  1. 输入用户名+密码
+  2. 验证用户名存在
+  3. 验证密码正确(BCrypt)
+  4. 验证账号状态(非禁用)
+  5. 签发 JWT token
+- **Token 结构**: 
+  - payload: userId, username, roleId, exp
+  - 有效期: 8小时
+- **约束**: 
+  - 连续5次密码错误锁定30分钟
+  - 登录日志记录
+  - 支持退出登录(Token 黑名单)
+
+#### 2.2.3 身份路由(P0)
+- **功能**: 根据用户身份数量决定跳转逻辑
+- **规则**: 
+  - 0个身份 → 提示"未找到信息,请联系村委会"
+  - 1个身份 → 直接进入对应首页
+  - N个身份 → 身份选择页(大卡片列表,≥120px高度)
+- **约束**: 
+  - 身份选择后记录到 Token
+  - 支持切换身份(重新选择)
+
+#### 2.2.4 用户信息查询(P0)
+- **功能**: 查询当前登录用户的基本信息
+- **返回**: 用户ID、姓名、手机号(脱敏)、身份列表、当前身份
+- **约束**: 
+  - 手机号脱敏显示(138****8888)
+  - 仅返回当前身份相关的信息
+
+#### 2.2.5 用户状态管理(P0)
+- **功能**: 管理员管理用户账号状态
+- **状态**: 正常、禁用、锁定
+- **操作**: 
+  - 启用:恢复正常状态
+  - 禁用:禁止登录和业务操作
+  - 锁定:因投诉等原因锁定,需人工解锁
+- **约束**: 
+  - 状态变更记录操作日志
+  - 锁定需注明原因
+
+#### 2.2.6 手机号加密存储(P0)
+- **功能**: 用户手机号 AES 加密存储
+- **方案**: 
+  - 明文手机号 → AES 加密 → 存储
+  - 明文手机号 → SHA256 → phone_hash(唯一索引)
+  - 查询时通过 phone_hash 匹配
+- **约束**: 
+  - AES 密钥配置在 application.properties
+  - phone_hash 唯一索引
+  - 接口返回时脱敏显示
+
+#### 2.2.7 身份绑定(P0)
+- **功能**: 管理员为用户绑定身份
+- **身份类型**: 果农、工人、客商、农资商
+- **绑定信息**: 
+  - 果农:果园地址、苹果品种、产量
+  - 工人:工种、技能、报价
+  - 客商:公司名称、收购品种、收购量
+  - 农资商:店铺名称、主营产品
+- **约束**: 
+  - 一个用户可绑定多个身份
+  - 每个身份独立管理
+  - 身份信息变更需审核
+
+#### 2.2.8 管理员创建用户(P0)
+- **功能**: 后台管理员创建用户账号
+- **流程**: 
+  1. 填写用户基本信息(姓名、手机号)
+  2. 选择身份类型
+  3. 填写身份详细信息
+  4. 创建成功后通知用户(短信)
+- **约束**: 
+  - 手机号唯一
+  - 创建后需用户首次登录激活
+  - 记录操作日志
+
+---
+
+### 2.3 首页与行情展示
+
+#### 2.3.1 果农首页(P0)
+- **布局**: 
+  - 顶部:问候语"早安,[姓名]!" + 当地实时天气
+  - 中部:今日行情(苹果品种收购价格区间,涨价红/降价绿色块)
+  - 底部:金刚区(4个核心入口:找工人、找客商、买农资、发布需求)
+- **数据来源**: 
+  - 行情数据:market_price 表
+  - 天气数据:第三方 API(可选)
+- **约束**: 
+  - 行情数据每日更新
+  - 展示更新时间
+
+#### 2.3.2 工人首页(P0)
+- **布局**: 
+  - 顶部:推荐招工(工种匹配+距离排序)
+  - 中部:附近招工卡片列表
+  - 底部:我的报名、个人档案
+- **数据来源**: recruit_info 表
+- **约束**: 
+  - 按距离排序
+  - 展示工种、价格、天数、人数、果农姓名、距离
+
+#### 2.3.3 客商首页(P0)
+- **布局**: 
+  - 顶部:今日行情
+  - 中部:货源推荐(品种匹配+产量排序)
+  - 底部:我的联系、收藏
+- **数据来源**: grower_profile 表、market_price 表
+- **约束**: 
+  - 按品种匹配推荐
+  - 展示品种、产量、预期价格、果园地址
+
+#### 2.3.4 农资商首页(P1)
+- **布局**: 
+  - 顶部:店铺概览
+  - 中部:商品管理入口
+  - 底部:订单管理、店铺设置
+- **数据来源**: supplier_shop 表
+- **约束**: 
+  - 展示店铺基本信息
+  - 快捷入口
+
+---
+
+### 2.4 审核基础框架
+
+#### 2.4.1 审核流程(P0)
+- **功能**: 通用审核流程框架
+- **审核对象**: 果农档案、工人档案、客商档案、招工信息、货源信息
+- **审核状态**: 待审、已通过、被驳回
+- **审核操作**: 
+  - 通过:更新状态为已通过
+  - 驳回:更新状态为被驳回,填写驳回原因
+- **约束**: 
+  - 审核记录操作日志
+  - 驳回需注明原因
+  - 审核 SLA:≤24小时提醒,48小时升级
+
+#### 2.4.2 审核列表(P1)
+- **功能**: 审核员查看待审核列表
+- **筛选**: 审核类型、状态、时间范围
+- **排序**: 按提交时间倒序
+- **约束**: 
+  - 仅审核员和超级管理员可访问
+  - 展示待审核数量
+
+---
+
+## 三、非功能需求
+
+### 3.1 性能需求
+- 接口响应时间:≤500ms(95%请求)
+- 并发用户数:≥100
+- 数据库连接池:最大连接数 20
+
+### 3.2 安全需求
+- 手机号 AES 加密存储
+- 密码 BCrypt 加密
+- JWT Token 认证
+- RBAC 权限控制
+- 接口防重放攻击
+- SQL 注入防护(MyBatis #{})
+
+### 3.3 可用性需求
+- 系统可用性:≥99%
+- 数据备份:每日全量备份
+- 故障恢复:≤4小时
+
+### 3.4 兼容性需求
+- 微信小程序:基础库 ≥2.0
+- 后台管理:Chrome/Firefox/Edge 最新版
+- 适老化:正文≥18px(rem)、按钮≥88×88px

+ 403 - 0
deliveries/team-a-requirement/use-cases.md

@@ -0,0 +1,403 @@
+# 阶段一用例文档 — 基础设施与用户体系
+
+> 功能点覆盖:20/20
+
+---
+
+## 一、系统管理用例
+
+### UC-SYS-001: 角色管理
+
+**主要参与者**: 超级管理员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 管理员进入系统管理 → 角色管理
+2. 系统显示角色列表(角色名称、编码、状态、创建时间)
+3. 管理员点击某个角色查看详情
+4. 系统显示角色详情(权限列表)
+5. 管理员修改权限配置
+6. 系统保存权限变更
+7. 系统记录操作日志
+
+**替代流程**:
+- 3a. 管理员搜索角色 → 按名称筛选
+- 5a. 管理员尝试删除系统预置角色 → 系统提示"系统预置角色不可删除"
+
+**后置条件**: 角色权限已更新,操作日志已记录
+
+---
+
+### UC-SYS-002: 账号管理
+
+**主要参与者**: 超级管理员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 管理员进入系统管理 → 账号管理
+2. 系统显示账号列表(用户名、姓名、手机号、角色、状态)
+3. 管理员点击"新增账号"
+4. 管理员填写:用户名、密码、姓名、手机号、角色
+5. 系统验证:用户名唯一、手机号唯一、密码强度
+6. 系统创建账号(密码 BCrypt 加密)
+7. 系统记录操作日志
+
+**替代流程**:
+- 5a. 用户名已存在 → 提示"用户名已存在"
+- 5b. 手机号已存在 → 提示"手机号已注册"
+- 5c. 密码强度不足 → 提示"密码需≥8位,含大小写字母和数字"
+
+**后置条件**: 账号已创建,可正常登录
+
+---
+
+### UC-SYS-003: 字典管理
+
+**主要参与者**: 超级管理员、数据录入员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 管理员进入系统管理 → 字典管理
+2. 系统显示字典类型列表
+3. 管理员选择某个字典类型(如"苹果品种")
+4. 系统显示该类型下的字典项列表
+5. 管理员点击"新增字典项"
+6. 管理员填写:字典编码、字典名称、排序号
+7. 系统验证:字典编码唯一
+8. 系统创建字典项
+9. 系统记录操作日志
+
+**替代流程**:
+- 7a. 字典编码已存在 → 提示"字典编码已存在"
+- 5a. 管理员尝试删除系统内置字典 → 提示"系统内置字典不可删除"
+
+**后置条件**: 字典项已创建,可在业务中使用
+
+---
+
+### UC-SYS-004: 操作日志查看
+
+**主要参与者**: 超级管理员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 管理员进入系统管理 → 操作日志
+2. 系统显示操作日志列表(操作人、时间、类型、模块、内容、IP、结果)
+3. 管理员按条件筛选(操作人、时间范围、操作类型)
+4. 系统显示筛选结果
+5. 管理员点击某条日志查看详情
+6. 系统显示日志详情
+
+**替代流程**:
+- 3a. 管理员导出日志 → 系统生成 Excel 文件
+
+**后置条件**: 无数据变更
+
+---
+
+## 二、用户认证用例
+
+### UC-AUTH-001: 微信登录
+
+**主要参与者**: 小程序用户
+
+**前置条件**: 用户已安装微信
+
+**基本流程**:
+1. 用户打开小程序
+2. 小程序调用 `wx.login()` 获取 code
+3. 小程序将 code 发送到后端
+4. 后端用 code 调用微信接口换取 openid
+5. 后端查询 openid 是否已绑定用户
+6. 已绑定 → 后端签发 JWT token,返回用户信息
+7. 小程序存储 token,进入首页
+
+**替代流程**:
+- 5a. 未绑定 → 返回提示"未找到信息,请联系村委会"
+- 6a. 用户有多个身份 → 返回身份列表,用户选择后进入对应首页
+
+**后置条件**: 用户已登录,token 已存储
+
+---
+
+### UC-AUTH-002: 后台登录
+
+**主要参与者**: 后台管理员
+
+**前置条件**: 已打开后台管理系统
+
+**基本流程**:
+1. 管理员输入用户名和密码
+2. 点击"登录"
+3. 系统验证用户名存在
+4. 系统验证密码正确(BCrypt)
+5. 系统验证账号状态(非禁用)
+6. 系统签发 JWT token
+7. 系统记录登录日志
+8. 管理员进入后台首页
+
+**替代流程**:
+- 3a. 用户名不存在 → 提示"用户名或密码错误"
+- 4a. 密码错误 → 提示"用户名或密码错误",记录错误次数
+- 4b. 连续5次错误 → 锁定30分钟,提示"账号已锁定,请30分钟后重试"
+- 5a. 账号已禁用 → 提示"账号已禁用,请联系管理员"
+
+**后置条件**: 管理员已登录,token 已存储
+
+---
+
+### UC-AUTH-003: 身份路由
+
+**主要参与者**: 小程序用户
+
+**前置条件**: 用户已登录
+
+**基本流程**:
+1. 用户登录成功
+2. 系统查询用户绑定的身份数量
+3. 根据身份数量决定跳转:
+   - 0个身份 → 显示提示页"未找到信息,请联系村委会"
+   - 1个身份 → 直接进入对应首页
+   - N个身份 → 显示身份选择页
+
+**替代流程**:
+- 3a. 用户选择身份 → 进入对应首页
+- 3b. 用户拒绝授权 → 显示引导页,提供联系管理员方式
+
+**后置条件**: 用户已进入对应角色首页
+
+---
+
+### UC-AUTH-004: 用户信息查询
+
+**主要参与者**: 已登录用户
+
+**前置条件**: 用户已登录
+
+**基本流程**:
+1. 用户进入个人中心
+2. 系统查询用户基本信息
+3. 系统返回:用户ID、姓名、手机号(脱敏)、身份列表、当前身份
+
+**替代流程**: 无
+
+**后置条件**: 无数据变更
+
+---
+
+### UC-AUTH-005: 用户状态管理
+
+**主要参与者**: 超级管理员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 管理员进入用户管理 → 用户列表
+2. 管理员选择某个用户
+3. 管理员修改用户状态(启用/禁用/锁定)
+4. 系统验证操作合法性
+5. 系统更新用户状态
+6. 系统记录操作日志
+
+**替代流程**:
+- 4a. 尝试禁用超级管理员 → 提示"不可禁用超级管理员"
+- 3a. 锁定操作 → 需填写锁定原因
+
+**后置条件**: 用户状态已更新,操作日志已记录
+
+---
+
+### UC-AUTH-006: 管理员创建用户
+
+**主要参与者**: 超级管理员、数据录入员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 管理员进入用户管理 → 创建用户
+2. 管理员填写:姓名、手机号
+3. 管理员选择身份类型
+4. 管理员填写身份详细信息
+5. 系统验证:手机号唯一
+6. 系统创建用户账号
+7. 系统发送短信通知用户
+8. 系统记录操作日志
+
+**替代流程**:
+- 5a. 手机号已存在 → 提示"手机号已注册"
+
+**后置条件**: 用户已创建,等待首次登录激活
+
+---
+
+### UC-AUTH-007: 身份绑定
+
+**主要参与者**: 超级管理员、数据录入员
+
+**前置条件**: 已登录后台管理系统,用户已存在
+
+**基本流程**:
+1. 管理员进入用户管理 → 选择用户
+2. 管理员点击"绑定身份"
+3. 管理员选择身份类型
+4. 管理员填写身份详细信息
+5. 系统创建身份关联
+6. 系统记录操作日志
+
+**替代流程**:
+- 3a. 用户已有该类型身份 → 提示"用户已有该身份"
+
+**后置条件**: 用户已绑定新身份
+
+---
+
+### UC-AUTH-008: 退出登录
+
+**主要参与者**: 已登录用户
+
+**前置条件**: 用户已登录
+
+**基本流程**:
+1. 用户点击"退出登录"
+2. 系统清除本地 token
+3. 系统跳转到登录页
+
+**替代流程**: 无
+
+**后置条件**: 用户已退出,token 已清除
+
+---
+
+## 三、首页与行情用例
+
+### UC-HOME-001: 果农首页展示
+
+**主要参与者**: 果农用户
+
+**前置条件**: 已登录,身份为果农
+
+**基本流程**:
+1. 用户进入果农首页
+2. 系统显示问候语"早安,[姓名]!"
+3. 系统显示今日行情(苹果品种、价格区间、涨跌、更新时间)
+4. 系统显示金刚区(找工人、找客商、买农资、发布需求)
+
+**替代流程**:
+- 3a. 行情数据未更新 → 显示"暂无行情数据"
+
+**后置条件**: 无数据变更
+
+---
+
+### UC-HOME-002: 工人首页展示
+
+**主要参与者**: 工人用户
+
+**前置条件**: 已登录,身份为工人
+
+**基本流程**:
+1. 用户进入工人首页
+2. 系统显示推荐招工(按工种匹配+距离排序)
+3. 系统显示招工卡片列表(工种、价格、天数、人数、果农姓名、距离)
+
+**替代流程**:
+- 2a. 无匹配招工 → 显示"暂无招工信息"
+
+**后置条件**: 无数据变更
+
+---
+
+### UC-HOME-003: 客商首页展示
+
+**主要参与者**: 客商用户
+
+**前置条件**: 已登录,身份为客商
+
+**基本流程**:
+1. 用户进入客商首页
+2. 系统显示今日行情
+3. 系统显示货源推荐(按品种匹配+产量排序)
+
+**替代流程**:
+- 3a. 无匹配货源 → 显示"暂无货源信息"
+
+**后置条件**: 无数据变更
+
+---
+
+### UC-HOME-004: 农资商首页展示
+
+**主要参与者**: 农资商用户
+
+**前置条件**: 已登录,身份为农资商
+
+**基本流程**:
+1. 用户进入农资商首页
+2. 系统显示店铺概览
+3. 系统显示快捷入口(商品管理、订单管理、店铺设置)
+
+**替代流程**:
+- 2a. 店铺未完善 → 显示引导完善店铺信息
+
+**后置条件**: 无数据变更
+
+---
+
+## 四、审核用例
+
+### UC-AUDIT-001: 审核流程
+
+**主要参与者**: 审核员
+
+**前置条件**: 已登录后台管理系统,有待审核项
+
+**基本流程**:
+1. 审核员进入内容审核 → 待审核列表
+2. 系统显示待审核列表(审核类型、提交人、提交时间)
+3. 审核员选择某项查看详情
+4. 系统显示审核详情(内容、附件)
+5. 审核员点击"通过"或"驳回"
+6. 如驳回,填写驳回原因
+7. 系统更新审核状态
+8. 系统记录审核日志
+9. 系统通知提交人审核结果
+
+**替代流程**:
+- 5a. 审核员点击"驳回" → 必须填写驳回原因
+
+**后置条件**: 审核状态已更新,通知已发送
+
+---
+
+### UC-AUDIT-002: 审核列表查看
+
+**主要参与者**: 审核员、超级管理员
+
+**前置条件**: 已登录后台管理系统
+
+**基本流程**:
+1. 审核员进入内容审核
+2. 系统显示审核列表(待审核/已审核 Tab)
+3. 审核员按条件筛选(审核类型、状态、时间范围)
+4. 系统显示筛选结果
+5. 系统显示待审核数量角标
+
+**替代流程**: 无
+
+**后置条件**: 无数据变更
+
+---
+
+## 用例统计
+
+| 模块 | 用例数 | 功能点覆盖 |
+|------|--------|-----------|
+| 系统管理 | 4 | 6/6 |
+| 用户认证 | 8 | 8/8 |
+| 首页与行情 | 4 | 4/4 |
+| 审核框架 | 2 | 2/2 |
+| **总计** | **18** | **20/20** |