# crm
**Repository Path**: guohan222/crm
## Basic Information
- **Project Name**: crm
- **Description**: 基于 Stark 与 RBAC 双引擎构建的 CRM 业务演示系统 (PoC)。采用纯 Django 与原生 JS 实现,真实还原了公海/私海客户流转、动态角色分配等复杂企业业务场景,作为底层基础组件的最佳实战落地用例。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-23
- **Last Updated**: 2026-04-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Django, crm-system, rbac-implementation
## README
# 一、背景说明
1. 此CRM业务,**仅用于展示:**利用两组件开发的**部分功能**
2. 由于 **开发 配合着 组件优化 同步进行**,所以该项目示例中存在以下问题(当然以下问题仅仅在业务代码中,两组件中不存在):
- 有些业务代码未能进行优化
- 有些地方存在未发现的bug
- 有些地方存在组件的不规范使用
3. 但是经过测试修复了一些明显的bug,所开发的业务功能已畅通无阻,即代表着RBAC与STARK组件可以正常被使用,甚至可以作用于您正上线的项目
# 二、业务功能说明
本项目在底层通用组件(Stark 与 RBAC)之上,构建了贴合实际业务场景的 CRM 核心流转系统。业务代码不仅实现了基础的增删改查,更重点突破了**复杂表单流转**与**高并发数据一致性**等真实企业级痛点
## 1. 客户管理模块
客户管理是本系统的核心,通过细化公海与私海的隔离,实现了完善的客户流转与跟进机制
- **多态数据隔离展示:** 基于 Stark 组件的 `ModelConfigMapping` 机制,针对同一张 Customer 表,动态派生出了三套完全隔离的视图与路由(所有客户 / 公海客户 / 私海客户)。通过重写 `get_queryset` 钩子,实现了销售员工只能查看/操作自己私海客户的数据行级权限控制
- **公私户流转与抢单机制:** 实现了公海客户申请入私户、私户客户剔除回公海的完整闭环
- **核心技术点(高并发防超卖):** 在“销售从公海批量抢单”的业务场景中,由于每个销售存在 `MAX_PRIVATE_CUSTOMER_COUNT` (私户容量上限) 的限制,且多名销售可能同时对同一优质客户发起抢单操作。为保证数据一致性,在底层流转逻辑中引入了数据库**悲观锁 (`select_for_update`)**,完美解决了并发场景下的数据幻读与超卖问题
## 2. 教学与教务管理模块
实现了从班级建立、上课记录到学生出勤的全生命周期管理
- **学习记录联动初始化:** 教师创建当日的“上课记录”后,系统会利用 Django ORM 的批量创建功能,根据该班级的关联学生,自动为每位学生初始化当天的“出勤状态”(默认状态),极大减轻了教务人员的录入负担。
- **核心技术点(复杂表单集批量流转):** 在“点名”场景中,摒弃了传统低效的单条数据提交模式,引入了 Django 的 **`ModelFormset`** 机制。通过定制化前端批量渲染与后端统一校验拦截,实现了全班几十名学生的出勤状态在**同一个页面、一次 HTTP 请求中完成批量更新与入库**。显著优化了前后端数据交互频率,降低了服务器 I/O 压力
## 3. 基础组件与业务的无缝融合
* **隐式基建鉴权:** 所有的通用操作按钮(如:添加客户、编辑、删除),全部通过 `PermissionMixins` 胶水代码,实现了根据当前登录用户角色的隐式动态隐藏与鉴权,对前端模板和视图业务代码实现零污染
* **多态业务扩展:** 针对特定业务的复杂按钮(如:公海的“批量申请”、私海的“批量移除”),充分利用了 Stark 组件的 `ModelConfigMapping` 多实例派生机制与 `action_list`、`get_list_display` 等底层 Hook 钩子,实现了同源数据在不同业务场景下的粒度控制到按钮级别