|
|
@@ -1,591 +0,0 @@
|
|
|
-# 法律咨询平台系统 - 数据库表结构分析
|
|
|
-
|
|
|
-## 一、表结构概览
|
|
|
-
|
|
|
-### 核心用户表(2个)
|
|
|
-1. `lawyer_user` - 律师用户表(✅ 已完成)
|
|
|
-2. `life_user` - 客户端用户表(✅ 已存在)
|
|
|
-
|
|
|
-### 基础配置表(1个)
|
|
|
-3. `lawyer_legal_problem_scenario` - 法律问题场景表(✅ 已完成)
|
|
|
-
|
|
|
-### 核心业务表(4个)
|
|
|
-4. `lawyer_consultation_order` - 咨询订单表(✅ 已完成)
|
|
|
-5. `lawyer_chat_session` - 聊天会话表(✅ 已完成)
|
|
|
-6. `lawyer_chat_message` - 聊天消息表(✅ 已完成)
|
|
|
-7. `lawyer_service_area` - 律师服务领域关联表(✅ 已完成)
|
|
|
-
|
|
|
-### 扩展功能表(5个)
|
|
|
-8. `lawyer_img` - 律师图片表(✅ 已完成)
|
|
|
-9. `lawyer_common_question` - 常见问题表(✅ 已完成)
|
|
|
-10. `lawyer_consultation_review` - 咨询评价表(✅ 已完成)
|
|
|
-11. `lawyer_payment_transaction` - 支付交易表(✅ 已完成)
|
|
|
-12. `lawyer_ai_interaction_log` - AI交互日志表(✅ 已完成)
|
|
|
-13. `lawyer_user_search_history` - 用户搜索历史表(✅ 已完成)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 二、详细表结构分析
|
|
|
-
|
|
|
-### 1. `lawyer_user` - 律师用户表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储律师用户的基本信息、认证信息、服务信息等
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `phone` (手机号, 唯一)
|
|
|
- - `name` (姓名)
|
|
|
- - `lawyer_certificate_no` (律师执业证号)
|
|
|
- - `law_firm` (所属律师事务所名称)
|
|
|
- - `certification_status` (资质认证状态)
|
|
|
- - `consultation_fee` (咨询收费标准)
|
|
|
- - `agency_fee` (代理收费标准)
|
|
|
- - `service_score` (服务评分)
|
|
|
- - `service_count` (服务次数)
|
|
|
-- **关联关系**:
|
|
|
- - **一对多**: 一个律师可以有多个图片 (`lawyer_img`)
|
|
|
- - **一对多**: 一个律师可以有多个服务领域 (`lawyer_service_area`)
|
|
|
- - **一对多**: 一个律师可以有多个咨询订单 (`lawyer_consultation_order`)
|
|
|
- - **一对多**: 一个律师可以有多个聊天会话 (`lawyer_chat_session`)
|
|
|
- - **一对多**: 一个律师可以收到多个评价 (`lawyer_consultation_review`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2. `lawyer_legal_problem_scenario` - 法律问题场景表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储法律问题分类的树形结构(一级分类7个,二级分类14个,三级分类30个)
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `code` (编号, 如: L1, L1-01, L1-01-01)
|
|
|
- - `name` (名称)
|
|
|
- - `parent_id` (父类主键)
|
|
|
- - `parent_code` (父类编号)
|
|
|
- - `parentName` (父类名称)
|
|
|
- - `sort_order` (排序字段)
|
|
|
- - `status` (状态)
|
|
|
-- **关联关系**:
|
|
|
- - **自关联**: 树形结构,通过 `parent_id` 关联自身
|
|
|
- - **一对多**: 一个法律问题场景可以关联多个律师服务领域 (`lawyer_service_area`)
|
|
|
- - **一对多**: 一个法律问题场景可以有多个咨询订单 (`lawyer_consultation_order`)
|
|
|
- - **一对多**: 一个法律问题场景可以有多个常见问题 (`lawyer_common_question`)
|
|
|
- - **一对多**: 一个法律问题场景可以关联多个AI交互日志 (`lawyer_ai_interaction_log`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 8. `lawyer_img` - 律师图片表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储律师相关的图片(头像、执业证、身份证、案例图片等)
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `lawyer_id` (律师用户ID, FK -> lawyer_user)
|
|
|
- - `img_type` (图片类型: 0:其他, 1:头像, 2:执业证照片, 3:身份证正面, 4:身份证反面, 5:案例图片, 6:相册图片, 7:资质证书, 8:荣誉证书, 9:工作照片)
|
|
|
- - `img_url` (图片链接)
|
|
|
- - `img_description` (图片描述)
|
|
|
- - `img_sort` (图片排序)
|
|
|
- - `business_id` (业务ID)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多个图片属于一个律师 (`lawyer_user`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 7. `lawyer_service_area` - 律师服务领域关联表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 律师与法律问题场景的多对多关联表(律师擅长哪些领域)
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `lawyer_user_id` (律师用户ID, FK -> lawyer_user)
|
|
|
- - `problem_scenar_id` (法律问题场景ID, FK -> lawyer_legal_problem_scenario)
|
|
|
- - `sort_order` (排序, 数值越小越靠前)
|
|
|
- - `status` (状态)
|
|
|
- - **唯一索引**: UK(lawyer_user_id, problem_scenar_id)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多个关联记录属于一个律师 (`lawyer_user`)
|
|
|
- - **多对一**: 多个关联记录关联一个法律问题场景 (`lawyer_legal_problem_scenario`)
|
|
|
- - **作用**: 实现律师与法律问题场景的多对多关系
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 4. `lawyer_consultation_order` - 咨询订单表(核心业务表)
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 记录用户与律师之间的咨询订单,是整个业务的核心
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `order_number` (订单编号, 唯一, 如: LAW2023071500123)
|
|
|
- - `client_user_id` (客户端用户ID, FK -> life_user)
|
|
|
- - `lawyer_user_id` (律师用户ID, FK -> lawyer_user)
|
|
|
- - `problem_scenar_id` (法律问题场景ID, FK -> lawyer_legal_problem_scenario)
|
|
|
- - `problem_description` (问题描述)
|
|
|
- - `order_amount` (订单金额, 单位:分)
|
|
|
- - `consultation_fee` (咨询费用, 单位:分)
|
|
|
- - `start_time` (咨询开始时间)
|
|
|
- - `end_time` (咨询结束时间)
|
|
|
- - `order_status` (订单状态: 0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消)
|
|
|
- - `payment_status` (支付状态: 0:未支付, 1:已支付)
|
|
|
- - `payment_time` (支付时间)
|
|
|
- - `validity_period` (订单有效期)
|
|
|
- - `rating` (用户评分, 1-5星)
|
|
|
- - `comment` (用户评价内容)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多个订单属于一个客户端用户 (`life_user`)
|
|
|
- - **多对一**: 多个订单属于一个律师 (`lawyer_user`)
|
|
|
- - **多对一**: 多个订单关联一个法律问题场景 (`lawyer_legal_problem_scenario`)
|
|
|
- - **一对多**: 一个订单可以有一个聊天会话 (`lawyer_chat_session`)
|
|
|
- - **一对多**: 一个订单可以有多条聊天消息 (`lawyer_chat_message`)
|
|
|
- - **一对多**: 一个订单可以有多笔支付交易 (`lawyer_payment_transaction`)
|
|
|
- - **一对一**: 一个订单可以有一个评价 (`lawyer_consultation_review`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 5. `lawyer_chat_session` - 聊天会话表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 管理咨询会话,关联订单和消息
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `consultation_order_id` (咨询订单ID, FK -> lawyer_consultation_order)
|
|
|
- - `client_user_id` (客户端用户ID, FK -> life_user)
|
|
|
- - `lawyer_user_id` (律师用户ID, FK -> lawyer_user)
|
|
|
- - `session_type` (会话类型: 0:文本咨询, 1:语音咨询, 2:视频咨询)
|
|
|
- - `status` (会话状态: 0:未开始, 1:进行中, 2:已结束)
|
|
|
- - `last_message_id` (最后一条消息ID, FK -> lawyer_chat_message)
|
|
|
- - `last_message_time` (最后一条消息时间)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多个会话属于一个咨询订单 (`lawyer_consultation_order`)
|
|
|
- - **多对一**: 多个会话属于一个客户端用户 (`life_user`)
|
|
|
- - **多对一**: 多个会话属于一个律师 (`lawyer_user`)
|
|
|
- - **多对一**: 一个会话的最后一条消息 (`lawyer_chat_message`)
|
|
|
- - **一对多**: 一个会话可以有多条聊天消息 (`lawyer_chat_message`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 6. `lawyer_chat_message` - 聊天消息表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储咨询会话中的具体聊天消息
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `chat_session_id` (聊天会话ID, FK -> lawyer_chat_session)
|
|
|
- - `consultation_order_id` (咨询订单ID, FK -> lawyer_consultation_order, 冗余字段便于查询)
|
|
|
- - `sender_id` (发送者ID, 可以是life_user的id或lawyer_user的id)
|
|
|
- - `sender_type` (发送者类型: 0:客户端用户, 1:律师用户)
|
|
|
- - `message_content` (消息内容, TEXT)
|
|
|
- - `message_type` (消息类型: 0:文本, 1:图片, 2:语音, 3:文件, 4:视频)
|
|
|
- - `media_url` (媒体文件URL)
|
|
|
- - `message_timestamp` (消息发送时间)
|
|
|
- - `read_status` (阅读状态: 0:未读, 1:已读)
|
|
|
- - `read_time` (阅读时间)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多条消息属于一个聊天会话 (`lawyer_chat_session`)
|
|
|
- - **多对一**: 多条消息属于一个咨询订单 (`lawyer_consultation_order`)
|
|
|
- - **被关联**: 可以被 `lawyer_chat_session.last_message_id` 引用
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 9. `lawyer_common_question` - 常见问题表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储常见问题及回答(FAQ)
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `question_text` (问题文本)
|
|
|
- - `answer_text` (回答内容, TEXT)
|
|
|
- - `category_type` (分类类型: 0:推荐, 1:常见问题)
|
|
|
- - `problem_scenar_id` (关联法律问题场景ID, FK -> lawyer_legal_problem_scenario, 可选)
|
|
|
- - `sort_order` (排序)
|
|
|
- - `view_count` (浏览次数)
|
|
|
- - `status` (状态)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多个常见问题可以关联一个法律问题场景 (`lawyer_legal_problem_scenario`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 10. `lawyer_consultation_review` - 咨询评价表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储用户对咨询服务的评价
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `consultation_order_id` (咨询订单ID, FK -> lawyer_consultation_order)
|
|
|
- - `client_user_id` (评价用户ID, FK -> life_user)
|
|
|
- - `lawyer_user_id` (被评价律师ID, FK -> lawyer_user)
|
|
|
- - `rating` (评分, 1-5星)
|
|
|
- - `comment` (评价内容, TEXT)
|
|
|
- - `service_quality` (服务质量评分, 1-5星)
|
|
|
- - `response_speed` (响应速度评分, 1-5星)
|
|
|
- - `professional_level` (专业水平评分, 1-5星)
|
|
|
- - **唯一索引**: UK(consultation_order_id, delete_flag) - 确保一个订单只有一个有效评价
|
|
|
-- **关联关系**:
|
|
|
- - **一对一**: 一个订单对应一个评价 (`lawyer_consultation_order`)
|
|
|
- - **多对一**: 多个评价属于一个客户端用户 (`life_user`)
|
|
|
- - **多对一**: 多个评价属于一个律师 (`lawyer_user`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 11. `lawyer_payment_transaction` - 支付交易表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 记录支付交易信息
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `consultation_order_id` (咨询订单ID, FK -> lawyer_consultation_order)
|
|
|
- - `client_user_id` (支付用户ID, FK -> life_user)
|
|
|
- - `transaction_number` (交易流水号, 唯一)
|
|
|
- - `transaction_amount` (交易金额, 单位:分)
|
|
|
- - `payment_method` (支付方式: 0:微信, 1:支付宝, 2:银行卡)
|
|
|
- - `transaction_status` (交易状态: 0:待支付, 1:支付成功, 2:支付失败, 3:已退款)
|
|
|
- - `transaction_time` (交易时间)
|
|
|
- - `third_party_trade_no` (第三方交易号)
|
|
|
- - `refund_amount` (退款金额, 单位:分)
|
|
|
- - `refund_time` (退款时间)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多笔交易属于一个咨询订单 (`lawyer_consultation_order`)
|
|
|
- - **多对一**: 多笔交易属于一个客户端用户 (`life_user`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 12. `lawyer_ai_interaction_log` - AI交互日志表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 记录用户与AI助手的对话历史
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `client_user_id` (客户端用户ID, FK -> life_user)
|
|
|
- - `conversation_id` (会话ID, 用于关联同一会话的多条消息)
|
|
|
- - `query_text` (用户输入内容, TEXT)
|
|
|
- - `response_text` (AI回复内容, TEXT)
|
|
|
- - `problem_scenar_id` (关联的法律问题场景ID, FK -> lawyer_legal_problem_scenario, 可选)
|
|
|
- - `interaction_time` (交互时间)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多条日志属于一个客户端用户 (`life_user`)
|
|
|
- - **多对一**: 多条日志可以关联一个法律问题场景 (`lawyer_legal_problem_scenario`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 13. `lawyer_user_search_history` - 用户搜索历史表
|
|
|
-- **状态**: ✅ 已创建实体类、Mapper、Service、Controller、XML、SQL
|
|
|
-- **用途**: 存储用户搜索历史(如:搜索律师姓名、法律问题、律所名称)
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `client_user_id` (用户ID, FK -> life_user)
|
|
|
- - `search_keyword` (搜索关键词)
|
|
|
- - `search_type` (搜索类型: 0:律师姓名, 1:法律问题, 2:律所名称)
|
|
|
- - `search_time` (搜索时间)
|
|
|
-- **关联关系**:
|
|
|
- - **多对一**: 多条搜索历史属于一个客户端用户 (`life_user`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 14. `life_user` - 客户端用户表
|
|
|
-- **状态**: ✅ 已存在实体类、Mapper、Service、Controller
|
|
|
-- **用途**: 存储使用平台进行咨询的普通用户信息(与律师用户区分)
|
|
|
-- **关键字段**:
|
|
|
- - `id` (主键)
|
|
|
- - `user_phone` (用户手机号)
|
|
|
- - `guanfang_phone` (官方手机号)
|
|
|
- - `user_name` (用户昵称)
|
|
|
- - `real_name` (真实姓名)
|
|
|
- - `user_sex` (性别, String类型)
|
|
|
- - `user_brithday` (生日, 注意字段名拼写)
|
|
|
- - `user_image` (用户头像URL)
|
|
|
- - `id_card` (身份证号)
|
|
|
- - `province`, `city`, `district`, `address` (地址信息)
|
|
|
- - `jianjie` (简介)
|
|
|
- - `money` (用户余额, 单位:分)
|
|
|
- - `pay_password` (支付密码)
|
|
|
- - `alipay_account` (支付宝账号)
|
|
|
- - `invited_num` (邀请码)
|
|
|
- - `invite_code` (个人邀请码)
|
|
|
- - `bind_invite_code` (绑定他人邀请码)
|
|
|
- - `xiaofei_time` (消费次数)
|
|
|
- - `xiaofei_amount` (消费金额)
|
|
|
- - `chaping_time` (差评次数)
|
|
|
- - `clock_img_id` (打卡广场小人图片id)
|
|
|
- - `logout_flag` (注销标记: 0:未注销, 1:已注销)
|
|
|
- - `logout_reason` (注销原因)
|
|
|
- - `logout_time` (注销申请时间)
|
|
|
-- **关联关系**:
|
|
|
- - **一对多**: 一个用户可以有多个咨询订单 (`lawyer_consultation_order`)
|
|
|
- - **一对多**: 一个用户可以有多个聊天会话 (`lawyer_chat_session`)
|
|
|
- - **一对多**: 一个用户可以有多个评价 (`lawyer_consultation_review`)
|
|
|
- - **一对多**: 一个用户可以有多笔支付交易 (`lawyer_payment_transaction`)
|
|
|
- - **一对多**: 一个用户可以有多个AI交互日志 (`lawyer_ai_interaction_log`)
|
|
|
- - **一对多**: 一个用户可以有多个搜索历史 (`lawyer_user_search_history`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 三、表关系图(ER图)
|
|
|
-
|
|
|
-```
|
|
|
-┌─────────────────────────────────────────────────────────────────────────────┐
|
|
|
-│ 核心用户表 │
|
|
|
-├─────────────────────────────────────────────────────────────────────────────┤
|
|
|
-│ lawyer_user (律师用户) ──────────┐ │
|
|
|
-│ life_user (客户端用户) ──────────┼───────────────────────────┐ │
|
|
|
-└─────────────────────────────────┼───────────────────────────┼───────────────┘
|
|
|
- │ │
|
|
|
- │ │
|
|
|
-┌─────────────────────────────────┼───────────────────────────┼──────────────────┐
|
|
|
-│ 基础配置表 │ │ │
|
|
|
-├─────────────────────────────────┼───────────────────────────┼──────────────────┤
|
|
|
-│ lawyer_legal_problem_scenario (法律问题场景) │ │
|
|
|
-│ ▲ │ │
|
|
|
-│ │ (1:N) │ │
|
|
|
-└─────────────────────────────────────────────────────────────┼──────────────────┘
|
|
|
- │
|
|
|
-┌─────────────────────────────────────────────────────────────┼──────────────────┐
|
|
|
-│ 核心业务表 │ │
|
|
|
-├─────────────────────────────────────────────────────────────┼──────────────────┤
|
|
|
-│ lawyer_consultation_order (咨询订单) ◄──────────────────────┼───────────────────┤
|
|
|
-│ │ │ │
|
|
|
-│ │ (1:1) │ │
|
|
|
-│ ├──► lawyer_consultation_review (咨询评价) │ │
|
|
|
-│ │ │ │
|
|
|
-│ │ (1:N) │ │
|
|
|
-│ ├──► lawyer_payment_transaction (支付交易) │ │
|
|
|
-│ │ │ │
|
|
|
-│ │ (1:N) │ │
|
|
|
-│ ├──► lawyer_chat_session (聊天会话) │ │
|
|
|
-│ │ │ │ │
|
|
|
-│ │ │ (1:N) │ │
|
|
|
-│ │ └──► lawyer_chat_message (聊天消息) │ │
|
|
|
-│ │ │ │
|
|
|
-│ │ │
|
|
|
-│ lawyer_service_area (律师服务领域) │ │
|
|
|
-│ │ │ │
|
|
|
-│ ├──► lawyer_user │ │
|
|
|
-│ └──► lawyer_legal_problem_scenario │ │
|
|
|
-└─────────────────────────────────────────────────────────────┼──────────────────┘
|
|
|
- │
|
|
|
-┌─────────────────────────────────────────────────────────────┼──────────────────┐
|
|
|
-│ 扩展功能表 │ │
|
|
|
-├─────────────────────────────────────────────────────────────┼──────────────────┤
|
|
|
-│ lawyer_img (律师图片) ────► lawyer_user │ │
|
|
|
-│ │ │
|
|
|
-│ lawyer_common_question (常见问题) ────► lawyer_legal_problem_scenario │
|
|
|
-│ │ │
|
|
|
-│ lawyer_ai_interaction_log (AI交互日志) ────► life_user │ │
|
|
|
-│ └───► lawyer_legal_problem_scenario │
|
|
|
-│ │ │
|
|
|
-│ lawyer_user_search_history (搜索历史) ────► life_user │ │
|
|
|
-└─────────────────────────────────────────────────────────────┴──────────────────┘
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 四、表关系详细说明
|
|
|
-
|
|
|
-### 4.1 核心业务关系链
|
|
|
-
|
|
|
-#### 业务流程:咨询订单 → 聊天会话 → 聊天消息
|
|
|
-```
|
|
|
-life_user (客户端用户)
|
|
|
- └──► lawyer_consultation_order (咨询订单)
|
|
|
- ├──► lawyer_chat_session (聊天会话)
|
|
|
- │ └──► lawyer_chat_message (聊天消息) [多条]
|
|
|
- │
|
|
|
- ├──► lawyer_payment_transaction (支付交易) [多条]
|
|
|
- │
|
|
|
- └──► lawyer_consultation_review (咨询评价) [1条]
|
|
|
-```
|
|
|
-
|
|
|
-#### 律师信息关系链
|
|
|
-```
|
|
|
-lawyer_user (律师用户)
|
|
|
- ├──► lawyer_img (律师图片) [多条]
|
|
|
- ├──► lawyer_service_area (服务领域) [多条]
|
|
|
- │ └──► lawyer_legal_problem_scenario (法律问题场景)
|
|
|
- │
|
|
|
- └──► lawyer_consultation_order (咨询订单) [多条]
|
|
|
-```
|
|
|
-
|
|
|
-#### 法律问题场景关系链
|
|
|
-```
|
|
|
-lawyer_legal_problem_scenario (法律问题场景) [树形结构]
|
|
|
- ├──► lawyer_service_area (律师服务领域) [多条]
|
|
|
- │ └──► lawyer_user (律师用户)
|
|
|
- │
|
|
|
- ├──► lawyer_consultation_order (咨询订单) [多条]
|
|
|
- │
|
|
|
- ├──► lawyer_common_question (常见问题) [多条]
|
|
|
- │
|
|
|
- └──► lawyer_ai_interaction_log (AI交互日志) [多条]
|
|
|
-```
|
|
|
-
|
|
|
-### 4.2 外键关系汇总
|
|
|
-
|
|
|
-| 子表 | 外键字段 | 父表 | 关系类型 | 说明 |
|
|
|
-|------|---------|------|---------|------|
|
|
|
-| `lawyer_img` | `lawyer_id` | `lawyer_user` | 多对一 | 多个图片属于一个律师 |
|
|
|
-| `lawyer_service_area` | `lawyer_user_id` | `lawyer_user` | 多对一 | 多个服务领域属于一个律师 |
|
|
|
-| `lawyer_service_area` | `problem_scenar_id` | `lawyer_legal_problem_scenario` | 多对一 | 多个关联记录关联一个法律问题场景 |
|
|
|
-| `lawyer_consultation_order` | `client_user_id` | `life_user` | 多对一 | 多个订单属于一个客户端用户 |
|
|
|
-| `lawyer_consultation_order` | `lawyer_user_id` | `lawyer_user` | 多对一 | 多个订单属于一个律师 |
|
|
|
-| `lawyer_consultation_order` | `problem_scenar_id` | `lawyer_legal_problem_scenario` | 多对一 | 多个订单关联一个法律问题场景 |
|
|
|
-| `lawyer_chat_session` | `consultation_order_id` | `lawyer_consultation_order` | 多对一 | 多个会话属于一个订单 |
|
|
|
-| `lawyer_chat_session` | `client_user_id` | `life_user` | 多对一 | 多个会话属于一个客户端用户 |
|
|
|
-| `lawyer_chat_session` | `lawyer_user_id` | `lawyer_user` | 多对一 | 多个会话属于一个律师 |
|
|
|
-| `lawyer_chat_session` | `last_message_id` | `lawyer_chat_message` | 多对一 | 会话的最后一条消息 |
|
|
|
-| `lawyer_chat_message` | `chat_session_id` | `lawyer_chat_session` | 多对一 | 多条消息属于一个会话 |
|
|
|
-| `lawyer_chat_message` | `consultation_order_id` | `lawyer_consultation_order` | 多对一 | 多条消息属于一个订单(冗余) |
|
|
|
-| `lawyer_common_question` | `problem_scenar_id` | `lawyer_legal_problem_scenario` | 多对一 | 多个常见问题关联一个法律问题场景 |
|
|
|
-| `lawyer_consultation_review` | `consultation_order_id` | `lawyer_consultation_order` | 一对一 | 一个订单对应一个评价 |
|
|
|
-| `lawyer_consultation_review` | `client_user_id` | `life_user` | 多对一 | 多个评价属于一个客户端用户 |
|
|
|
-| `lawyer_consultation_review` | `lawyer_user_id` | `lawyer_user` | 多对一 | 多个评价属于一个律师 |
|
|
|
-| `lawyer_payment_transaction` | `consultation_order_id` | `lawyer_consultation_order` | 多对一 | 多笔交易属于一个订单 |
|
|
|
-| `lawyer_payment_transaction` | `client_user_id` | `life_user` | 多对一 | 多笔交易属于一个客户端用户 |
|
|
|
-| `lawyer_ai_interaction_log` | `client_user_id` | `life_user` | 多对一 | 多条日志属于一个客户端用户 |
|
|
|
-| `lawyer_ai_interaction_log` | `problem_scenar_id` | `lawyer_legal_problem_scenario` | 多对一 | 多条日志关联一个法律问题场景 |
|
|
|
-| `lawyer_user_search_history` | `client_user_id` | `life_user` | 多对一 | 多条搜索历史属于一个客户端用户 |
|
|
|
-
|
|
|
-### 4.3 自关联关系
|
|
|
-
|
|
|
-| 表名 | 自关联字段 | 说明 |
|
|
|
-|------|-----------|------|
|
|
|
-| `lawyer_legal_problem_scenario` | `parent_id` | 树形结构,通过 `parent_id` 关联自身,实现三级分类 |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 五、数据完整性约束
|
|
|
-
|
|
|
-### 5.1 唯一约束
|
|
|
-- `lawyer_user.phone` - 手机号唯一
|
|
|
-- `lawyer_consultation_order.order_number` - 订单编号唯一
|
|
|
-- `lawyer_payment_transaction.transaction_number` - 交易流水号唯一
|
|
|
-- `lawyer_service_area(lawyer_user_id, problem_scenar_id)` - 律师与法律问题场景的组合唯一
|
|
|
-- `lawyer_consultation_review(consultation_order_id, delete_flag)` - 一个订单只能有一个有效评价
|
|
|
-
|
|
|
-### 5.2 逻辑删除
|
|
|
-所有表都使用 `delete_flag` 字段进行逻辑删除:
|
|
|
-- `delete_flag = 0` - 未删除
|
|
|
-- `delete_flag = 1` - 已删除
|
|
|
-
|
|
|
-### 5.3 状态字段
|
|
|
-- **订单状态**: `order_status` (0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消)
|
|
|
-- **支付状态**: `payment_status` (0:未支付, 1:已支付)
|
|
|
-- **交易状态**: `transaction_status` (0:待支付, 1:支付成功, 2:支付失败, 3:已退款)
|
|
|
-- **会话状态**: `status` (0:未开始, 1:进行中, 2:已结束)
|
|
|
-- **认证状态**: `certification_status` (0:未认证, 1:认证中, 2:已认证, 3:认证失败)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 六、索引设计建议
|
|
|
-
|
|
|
-### 6.1 主键索引
|
|
|
-所有表的主键 `id` 自动创建主键索引。
|
|
|
-
|
|
|
-### 6.2 外键索引
|
|
|
-所有外键字段都创建索引,提高关联查询性能。
|
|
|
-
|
|
|
-### 6.3 联合索引
|
|
|
-根据常用查询场景创建联合索引:
|
|
|
-
|
|
|
-| 表名 | 联合索引 | 说明 |
|
|
|
-|------|---------|------|
|
|
|
-| `lawyer_user` | `(status, delete_flag)` | 查询可用律师 |
|
|
|
-| `lawyer_consultation_order` | `(client_user_id, order_status, delete_flag)` | 用户订单查询(关联life_user) |
|
|
|
-| `lawyer_consultation_order` | `(lawyer_user_id, order_status, delete_flag)` | 律师订单查询 |
|
|
|
-| `lawyer_chat_message` | `(chat_session_id, message_timestamp, delete_flag)` | 会话消息查询 |
|
|
|
-| `lawyer_service_area` | `(lawyer_user_id, problem_scenar_id, delete_flag)` | 律师服务领域查询 |
|
|
|
-| `lawyer_img` | `(lawyer_id, img_type, delete_flag)` | 律师图片查询 |
|
|
|
-
|
|
|
-### 6.4 时间字段索引
|
|
|
-- `created_time` - 创建时间索引,用于按时间排序
|
|
|
-- `updated_time` - 更新时间索引
|
|
|
-- `last_message_time` - 最后消息时间索引
|
|
|
-- `message_timestamp` - 消息时间戳索引
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 七、业务场景查询示例
|
|
|
-
|
|
|
-### 7.1 查询律师的详细信息
|
|
|
-```sql
|
|
|
-SELECT lu.*
|
|
|
-FROM lawyer_user lu
|
|
|
-WHERE lu.id = ? AND lu.delete_flag = 0;
|
|
|
-```
|
|
|
-
|
|
|
-### 7.2 查询律师的服务领域
|
|
|
-```sql
|
|
|
-SELECT lsa.*, lps.name as problem_scenario_name
|
|
|
-FROM lawyer_service_area lsa
|
|
|
-INNER JOIN lawyer_legal_problem_scenario lps ON lsa.problem_scenar_id = lps.id
|
|
|
-WHERE lsa.lawyer_user_id = ? AND lsa.delete_flag = 0 AND lsa.status = 1
|
|
|
-ORDER BY lsa.sort_order;
|
|
|
-```
|
|
|
-
|
|
|
-### 7.3 查询用户的订单列表
|
|
|
-```sql
|
|
|
-SELECT lco.*, lu.name as lawyer_name, lps.name as problem_scenario_name
|
|
|
-FROM lawyer_consultation_order lco
|
|
|
-LEFT JOIN lawyer_user lu ON lco.lawyer_user_id = lu.id
|
|
|
-LEFT JOIN lawyer_legal_problem_scenario lps ON lco.problem_scenar_id = lps.id
|
|
|
-WHERE lco.client_user_id = ? AND lco.delete_flag = 0
|
|
|
-ORDER BY lco.created_time DESC;
|
|
|
-```
|
|
|
-
|
|
|
-### 7.4 查询订单的聊天记录
|
|
|
-```sql
|
|
|
-SELECT lcm.*
|
|
|
-FROM lawyer_chat_message lcm
|
|
|
-WHERE lcm.consultation_order_id = ? AND lcm.delete_flag = 0
|
|
|
-ORDER BY lcm.message_timestamp ASC;
|
|
|
-```
|
|
|
-
|
|
|
-### 7.5 查询律师的评价统计
|
|
|
-```sql
|
|
|
-SELECT
|
|
|
- COUNT(*) as total_reviews,
|
|
|
- AVG(rating) as avg_rating,
|
|
|
- AVG(service_quality) as avg_service_quality,
|
|
|
- AVG(response_speed) as avg_response_speed,
|
|
|
- AVG(professional_level) as avg_professional_level
|
|
|
-FROM lawyer_consultation_review
|
|
|
-WHERE lawyer_user_id = ? AND delete_flag = 0;
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 八、注意事项
|
|
|
-
|
|
|
-1. **统一字段命名规范**:
|
|
|
- - 所有表都包含标准字段:`delete_flag`, `created_time`, `created_user_id`, `updated_time`, `updated_user_id`
|
|
|
- - 主键统一使用 `id` (INT, AUTO_INCREMENT)
|
|
|
- - 外键统一命名为 `xxx_id`
|
|
|
-
|
|
|
-2. **逻辑删除**:
|
|
|
- - 所有表都使用 `delete_flag` 字段进行逻辑删除(0:未删除, 1:已删除)
|
|
|
- - 使用 `@TableLogic` 注解
|
|
|
-
|
|
|
-3. **索引设计**:
|
|
|
- - 主键自动创建索引
|
|
|
- - 外键字段创建索引
|
|
|
- - 常用查询字段创建联合索引(如:`lawyer_user_id + status + delete_flag`)
|
|
|
-
|
|
|
-4. **金额字段**:
|
|
|
- - 统一使用 INT 类型,单位:分(避免浮点数精度问题)
|
|
|
-
|
|
|
-5. **时间字段**:
|
|
|
- - `created_time`: DEFAULT CURRENT_TIMESTAMP
|
|
|
- - `updated_time`: DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
|
-
|
|
|
-6. **数据一致性**:
|
|
|
- - 订单状态变更时,需要同步更新相关表的记录
|
|
|
- - 评价添加后,需要更新律师的评分统计(`lawyer_user.service_score`等)
|
|
|
-
|
|
|
-7. **树形结构**:
|
|
|
- - `lawyer_legal_problem_scenario` 使用 `parent_id` 实现三级分类
|
|
|
- - 查询子节点时使用递归查询或维护 `parent_code` 路径
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 九、表状态统计
|
|
|
-
|
|
|
-### 已完成(13个表)
|
|
|
-✅ lawyer_user
|
|
|
-✅ lawyer_legal_problem_scenario
|
|
|
-✅ lawyer_img
|
|
|
-✅ lawyer_service_area
|
|
|
-✅ lawyer_consultation_order
|
|
|
-✅ lawyer_chat_session
|
|
|
-✅ lawyer_chat_message
|
|
|
-✅ lawyer_common_question
|
|
|
-✅ lawyer_consultation_review
|
|
|
-✅ lawyer_payment_transaction
|
|
|
-✅ lawyer_ai_interaction_log
|
|
|
-✅ lawyer_user_search_history
|
|
|
-✅ life_user - 客户端用户表(已存在)
|
|
|
-
|