|
Download apps/client/README.md from jun2024/fc: direct link, hf CLI and curl.
- Browser
- Download file 6.78 kB
-
https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/client/README.md
- Command line
-
hf download hf://spaces/jun2024/fc/apps/client/README.md
-
curl -L -o README.md https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/client/README.md
6.78 kB
| # 👥 客户管理模块 (Client) | |
| 客户管理模块,提供客户信息的创建、查询、更新和删除功能,支持客户身份证件管理。 | |
| ## 📚 模块概述 | |
| 本模块负责管理法律服务客户的完整信息,包括: | |
| - 客户基本信息管理 | |
| - 客户身份证件管理 | |
| - 客户类型管理(自然人/法人) | |
| - 客户联系方式管理 | |
| ## 📁 目录结构 | |
| ``` | |
| client/ | |
| ├── admin/ # Django Admin 配置 | |
| │ ├── client_admin.py # 客户 Admin | |
| │ └── clientidentitydoc_admin.py # 身份证件 Admin | |
| ├── api/ # API 接口 | |
| │ ├── client_api.py # 客户 API | |
| │ └── clientidentitydoc_api.py # 身份证件 API | |
| ├── services/ # 业务逻辑 | |
| │ ├── client_service.py # 客户服务 | |
| │ └── text_parser.py # 文本解析器 | |
| ├── models.py # 数据模型 | |
| ├── schemas.py # Pydantic Schemas | |
| └── migrations/ # 数据库迁移 | |
| ``` | |
| ## 🚀 快速开始 | |
| ### 1. Admin 后台 | |
| ```bash | |
| # 访问客户管理后台 | |
| open http://localhost:8000/admin/client/ | |
| ``` | |
| ### 2. API 使用 | |
| ```python | |
| import requests | |
| BASE_URL = "http://localhost:8000/api/v1/clients" | |
| headers = {"Authorization": "Bearer <your_jwt_token>"} | |
| # 创建客户 | |
| response = requests.post(BASE_URL, json={ | |
| "name": "张三", | |
| "client_type": "individual", | |
| "id_number": "110101199001011234", | |
| "phone": "13800138000", | |
| "address": "北京市朝阳区" | |
| }, headers=headers) | |
| client_id = response.json()["data"]["id"] | |
| # 获取客户详情 | |
| response = requests.get(f"{BASE_URL}/{client_id}", headers=headers) | |
| client = response.json()["data"] | |
| # 更新客户 | |
| response = requests.put(f"{BASE_URL}/{client_id}", json={ | |
| "phone": "13900139000" | |
| }, headers=headers) | |
| # 添加身份证件 | |
| response = requests.post(f"{BASE_URL}/{client_id}/identity-docs", json={ | |
| "doc_type": "id_card", | |
| "doc_number": "110101199001011234", | |
| "doc_image": "base64_encoded_image" | |
| }, headers=headers) | |
| ``` | |
| ### 3. Service 层使用 | |
| ```python | |
| from apps.client.services.client_service import ClientService | |
| from apps.client.schemas import ClientCreateSchema | |
| service = ClientService() | |
| # 创建客户 | |
| client = service.create_client( | |
| data=ClientCreateSchema( | |
| name="张三", | |
| client_type="individual", | |
| id_number="110101199001011234", | |
| phone="13800138000" | |
| ), | |
| user=request.user | |
| ) | |
| # 获取客户 | |
| client = service.get_client(client_id=1, user=request.user) | |
| # 更新客户 | |
| client = service.update_client( | |
| client_id=1, | |
| data=ClientUpdateSchema(phone="13900139000"), | |
| user=request.user | |
| ) | |
| ``` | |
| ## 🔑 核心功能 | |
| ### 客户管理 | |
| - ✅ 创建、查询、更新、删除客户 | |
| - ✅ 客户类型管理(自然人、法人) | |
| - ✅ 客户身份证号管理 | |
| - ✅ 客户联系方式管理 | |
| - ✅ 客户地址管理 | |
| - ✅ 客户标记(是否为本所客户) | |
| ### 身份证件管理 | |
| - ✅ 添加、编辑、删除身份证件 | |
| - ✅ 证件类型(身份证、营业执照、护照等) | |
| - ✅ 证件图片上传 | |
| - ✅ 证件有效期管理 | |
| ### 文本解析 | |
| - ✅ 从文本中提取客户信息 | |
| - ✅ 智能识别姓名、电话、地址 | |
| - ✅ 批量导入客户 | |
| ## 📊 数据模型 | |
| ### Client (客户) | |
| - `name`: 客户姓名/名称 | |
| - `client_type`: 客户类型(individual/company) | |
| - `id_number`: 身份证号/统一社会信用代码 | |
| - `phone`: 联系电话 | |
| - `address`: 地址 | |
| - `is_our_client`: 是否为本所客户 | |
| - `created_by`: 创建人 | |
| ### ClientIdentityDoc (身份证件) | |
| - `client`: 关联客户 | |
| - `doc_type`: 证件类型 | |
| - `doc_number`: 证件号码 | |
| - `doc_image`: 证件图片 | |
| - `issue_date`: 签发日期 | |
| - `expiry_date`: 有效期 | |
| - `created_by`: 创建人 | |
| ## 🔒 权限控制 | |
| ### 功能级别权限 | |
| - `client.add_client`: 创建客户 | |
| - `client.view_client`: 查看客户 | |
| - `client.change_client`: 修改客户 | |
| - `client.delete_client`: 删除客户 | |
| ### 对象级别权限 | |
| - 客户创建人可以查看和修改自己的客户 | |
| - 管理员可以查看和修改所有客户 | |
| - 同组织成员可以查看组织内的客户 | |
| ## 🧪 测试 | |
| ```bash | |
| # 运行单元测试 | |
| cd backend | |
| source venv311/bin/activate | |
| python -m pytest tests/unit/test_client/ -v | |
| # 运行集成测试 | |
| python -m pytest tests/integration/test_client_api/ -v | |
| # 运行属性测试 | |
| python -m pytest tests/property/test_client_properties/ -v | |
| ``` | |
| ## 📝 相关文档 | |
| - **[models.py](models.py)** - 数据模型定义 | |
| - **[schemas.py](schemas.py)** - API Schema 定义 | |
| - **[services/text_parser.py](services/text_parser.py)** - 文本解析器 | |
| ## 🔗 依赖模块 | |
| - **cases**: 案件模块(案件当事人关联客户) | |
| - **organization**: 组织模块(客户归属组织) | |
| - **core**: 核心模块(异常、接口、验证器) | |
| ## 🎯 最佳实践 | |
| ### 1. 使用 Service 层 | |
| ```python | |
| # ✅ 正确:使用 Service 层 | |
| service = ClientService() | |
| client = service.create_client(data, user) | |
| # ❌ 错误:直接操作 Model | |
| client = Client.objects.create(name="张三") | |
| ``` | |
| ### 2. 验证身份证号 | |
| ```python | |
| # ✅ 正确:使用验证器 | |
| from apps.client.validators import validate_id_number | |
| try: | |
| validate_id_number("110101199001011234") | |
| except ValidationError as e: | |
| print(f"身份证号无效: {e}") | |
| ``` | |
| ### 3. 使用文本解析器 | |
| ```python | |
| # ✅ 正确:使用文本解析器提取信息 | |
| from apps.client.services.text_parser import TextParser | |
| parser = TextParser() | |
| info = parser.parse_client_info( | |
| "张三,电话:13800138000,地址:北京市朝阳区" | |
| ) | |
| # info = {"name": "张三", "phone": "13800138000", "address": "北京市朝阳区"} | |
| ``` | |
| ### 4. 处理客户类型 | |
| ```python | |
| # ✅ 正确:根据客户类型处理 | |
| if client.client_type == "individual": | |
| # 自然人客户 | |
| validate_id_number(client.id_number) | |
| elif client.client_type == "company": | |
| # 法人客户 | |
| validate_credit_code(client.id_number) | |
| ``` | |
| ## 🐛 常见问题 | |
| ### Q1: 如何批量导入客户? | |
| **A**: 使用 Django Admin 的导入功能,或调用 API 批量创建。 | |
| ### Q2: 如何处理重复客户? | |
| **A**: 系统会根据身份证号/统一社会信用代码检查重复,创建前会验证。 | |
| ### Q3: 如何上传身份证件图片? | |
| **A**: 使用 Base64 编码上传图片,或使用文件上传接口。 | |
| ## 📈 性能优化 | |
| - ✅ 使用 `select_related` 预加载关联对象 | |
| - ✅ 使用索引优化查询(姓名、身份证号、电话) | |
| - ✅ 使用缓存减少数据库查询 | |
| - ✅ 批量操作使用 `bulk_create` | |
| ## 🔄 版本历史 | |
| - **v1.0.0** (2024-01): 初始版本 | |
| - **v1.1.0** (2024-03): 添加身份证件管理 | |
| - **v1.2.0** (2024-06): 添加文本解析功能 | |
| - **v1.3.0** (2024-09): 优化客户搜索 | |