Django实战【一】—CRM需求分析

一、CRM系统需求分析

本篇内容

  • 业务痛点分析

  • 项目需求讨论

  • 使用场景分析

  • 表结构设计

1.业务痛点分析

刚加入XX教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每月算工资时,就按这个表来统计招生提成.

​ 后来学校大了点,教室变成了3间,招生老师变成了4个人,招的学生也开始多了起来,不过大家依然是招了学生就纪录在自己的excel里,但问题开始出现了,我们的招生多是通过网络qq聊天在线咨询,好多客户需要聊很久才能转化成学员,经常会出现一个客户跟一个招生老师聊过后,过了一段时间却在另一个招生老师那报名了。

​ 于是争执就出现了,A销售说这个人是先找我咨询的,我帮他回答了大多数问题,报名提成却算成B的,不公平。B销售也会讲,这个客户找他咨询时并未说自己之前跟其它销售聊过呀,所以对B来讲,这就是个新客户呀,并且是在B这报的名, 凭什么要分提成给A呀。

​ 为了解决这个问题,于是想出一个办法,搞了一个机器做共享服务器,共享服务器上搞了个统一的客户信息excel表,大家每人聊过的客户都在这个表里纪录, 这样每个人录入前,先在表格里全局查一下,这个客户的qq号是不是已经在表里了,这样就能避免冲突了。

​ 但用过共享文件的应该都遇到过一个问题就是,为保证数据一致性,同一时间系统只允许一个用户修改数据, 但我们的每个招生老师一上班,就会打开这个共享文件,随时聊的学生,随时会录入到表里。但这个限制使的大家,只要一有人录入信息,就得要求其它销售人员都把文件先关闭,录入信息后其它人才能再用,这搞的大家很难受。 所以销售人员经常让我帮开发个系统,可以解决一些类似这样的问题。

​ 另外, 我们在讲课时, 为了保证和检验学员的学习效果, 每节课讲完时都会给学生部置一个作业,要求他必须在下节上课前完成并提交作业,老师会给学员统一批作业,作业成绩也纪录在excel表中,就像下图一样。每个老师维护自己班级的作业,校长如果想看各个班级的成绩,还要跟每个老师要学员成绩表,很不方便, 当时校长就跟我讲,学员的成绩/出勤情况等要是也能统一管理就好了。

img

于是我心里也一直纪着这个事,想帮学校开发一个学员开发一个类似CRM(客户关系管理软件)的系统,集销售管理/学员管理等功能于一体。到现在,这个系统在公司已经用了一年多了,大家每天都在使用,之前的痛点都解决了,特别是销售人员, 工作已经离不开这个系统了,自己做的东西帮别人解决具体问题,心里还是蛮开森的!

个人觉得这个学员管理系统的挺适合新手练习的,难度适中,用户的知识点也比较综合,所以把学校里的系统简化了一下,提练成了一个教学项目,下面我们就一起来做一个喽。

噢,对了,最后说一下这个项目涉及到的知识点,请确保你以充分掌握了下面所列知识点再学习此项目噢!

  • Django
  • JQuery
  • BootStrap
  • Ajax
  • HTMS\CSS

2.项目需求讨论

首先给我们的项目起个名字吧,这个系统要同时支持销售管理、学员管理、讲师管理以及权限管理等功能,功能比较杂,不能称之为严格意上的CRM,因为CRM一般只包括销售管理,but anyway, who cares,我们就叫它”Obcrm管理系统”吧。

起好了名字,开始动手写之前, 肯定要把需求想清楚,需求想不清楚就开始写的话,等于给自己挖坑,你肯定不想出现写了5千行代码后,突然发现,需求搞错了,还要重新推到重来的事情吧。

所以,现在静下心,把需求想明白,画好思维导图,跟同事多讨论应用场景,做了各方面论证后,再开始动工噢。

我们的系统的用户分3种,销售\学生\讲师,这3个角色关注的事情是不同的, 销售只关注招了多少学员,讲师关注自己管理的班级学习成绩怎样,学员只关注自己的学习成绩。 因此在想需求时,你要从每个角色出发,看他关心的是什么, 于是我画出了这个思维导图。

img

根据思维导图,我们总结出以下具体需求:

  1. 把用户分为销售\学员\讲师3种角色,每个角色关心的事情不同,所以有要不同的用户视图,即销售人员登陆后只需要看他与他工作相关的就可以,讲师关心的事情不需要在销售视图里显示
  2. 销售人员可以录入客户信息,和后续跟进信息,因为一个客户可能要跟进好几次才会报名。 可以多种条件过滤查询用户,可以查看自己的销售业绩报表
  3. 学员主要2个功能,查询成绩\提交作业
  4. 讲师的主要功能是管理班级\ 批作业\上课点名
  5. 虽然现在只有一个校区,但要考虑到以后的扩展,以后全国可能有好多个校区,不同校区之间的数据应该是隔离的
  6. 这个系统里存放着大量的客户信息\学员数据等,都是公司的机密信息,设计系统时就要考虑到权限问题,不同的角色要有不同的权限,同一角色的不同用户也要允许有不同的权限。

3.使用场景分析

为了更加理清我们的项目开发需求,在动手写代码前,建议再有一个业务场景分析的步骤,即从用户角度写出你使用这个项目的具体场景,我们这里分为销售、讲师、学员3个角色,我分别给每个角色列出了几个使用场景:

1.销售
  1. 销售人员张三刚通过qq群聊了一个客户,咨询了"XX课程",录入了CRM
  2. 张三 回访了一个 一个月多前咨询的老客户,老客户说最近考虑报名,让张三 下周联系他办报名手续, 张三把这个回访信息 录入了crm
  3. 李四 今天录入了8个新客户,但发现有一个客户在录入时,系统提示,此客户信息已存在,于是就在客户库查了一下,发现 此客户 已被 张 三 在上周录入了,销售部有规定,在客户被录入一个月内,其它销售是不能抢这个单的,于是就提醒张三,让他跟这个客户主动再跟进一下
  4. 李四今天 有一个客户要报名,李四给客户发了在线报名 链接,要求其填写一些个人信息,上传证件照片等,交了500报名费后,将其正式添加到了报名的 班级里
  5. 销售主管 BigSB 查看了今天的销售报表, 查看了每个销售的最近一周 咨询的客户量,成单比, 每个课程 分别 报名了多少学员, 这些客户 都是从哪些渠道 过来的
2.讲师
  1. 讲师老李今天 要给2班上课, 上课前要进行点名, 于是创建了一条生课纪录 ,这条上课记录关联 着每个学员 这节课的 出勤状态,Alex 边点名边在系统 中纪录每个学员的状态 ,签到、迟到或缺勤。
  2. 今天的课上完后,老李给大家留了作业,在系统 里 找到今天 的上课记录,把作业 需求 写到了 上课纪录 里
  3. 过了一周, 老李 登录 系统 下载了所有学员这节课的作业 , 为每个学员批改了作业 并将学员的成绩纪录在了系统 里
3.学员:
  1. 学员小明 报名了“xx”课程, 交完报名费后,招生老师 给他发了一个报名地址 要求其填写,填写了个人信息 并上传了证件信息, 提交后, 过了一会,就发现自己的qq邮箱里收到了一封 OB学校的邮件, 告知他 已为其 生成了 学员账号,他按照邮件 提示 登录 了 的学员系统 ,看到系统 中可以 进入自己的班级,不过现在班级里 还没有上课纪录, 他还能在线查看他的学员合同
  2. 过了一周, 正式上课了,上了一天课,讲师 老李 布置了作业 , 小明过了几天 完成 作业后,登录 学员管理系统 , 发现有一条 自己的上课记录, 他点进去,看到了当节课的 作业 需求,及提交作业的方式 ,他只需要把作业 打包成.zip格式 ,直接拖拽到页面上的交作业区就可以了。
  3. 过了两天, 小明收到邮件提醒 ,说自己作业 得了个A,非常 的开森。
  4. 小明学了几个月好,发现OB讲师讲的好,自己学的也不错,于是极力推荐自己的2个朋友也来学习, 于是在自己的学员系统 里录入了2条推荐朋友学习的信息, 没过一会, 小明之前的招生老师就联系他说,已经收到他的推荐名单,很快就会联系 小明的朋友 。

好啦, 业务场景也分析完了,接下来我们终于可以开始搞事情啦!

二、表结构设计

1.项目的创建

既然要写一个crm项目,必然需要创建一个项目,这个项目我们使用的是django框架,我们给项目随便取个名字把,如我这里就叫ObCRM。第一个应用就叫customer。

img

2.表结构模型创建

业务需求分析好了,项目也创建好了,就要开始设计表结构,表结构应该包含所有业务涉及到的数据需求,一般来说,表结构的设计是重要的,一个项目的开展,运行,很大程度上都取决于这个项目对于数据表结构的设计如何。

这里我列出大概需要的表结构,

from django.db import models
# Create your models here.

class Customer(models.Model):
    '''存储所有客户信息'''
    pass
    
class ConsultRecord(models.Model):
    '''存储客户的后续跟进信息'''
    pass

class Enrollment(models.Model):
    '''存储已报名学员的信息'''
    pass
    
class cumpass(models.Model):
    '''存储所有校区'''
    pass

class ClassList(models.Model):
    '''存储班级信息'''
    pass

class Course(models.Model):
    '''存储所开设课程的信息'''
    pass
 
class CourseRecord(models.Model):
    '''存储各班级的上课记录'''
    pass

class StudyRecord(models.Model):
    '''存储所有学员的详细的学习成绩情况'''
    pass

class Userinfo(models.Model):
    '''存储所有讲师\销售人员\学员 用户信息'''
    pass

class Role(models.Model):
    '''角色信息'''
    pass

class Permission(models.Model)
  pass
    """存储权限信息表"""

class Menu(models.Model):
  """存储菜单展示信息"""
  pass

接下来分别解释每张表

  1. Customer表, 主要给销售人员用, 存储所有客户信息,里面要记录客户来源/姓名/qq/客户来源/咨询的内容等
  2. Enrollment学员报名表,这里为什么要把客户信息表 和 这个学员报名表分开呢? 因内一个学员可以报多个课程 ,每个课程 都需要单独记录学习成绩呀什么的,所以每报一个课程 ,就在这里生成 一条相应的报名记录。
  3. ConsultRecord:客户跟进表,这张表的意义很容易理解, 一个客户今天咨询后,你录入到了客户信息表,但他没报名, 所以过了一段时间,销售还得再跟他聊聊吧,聊完后,结果又没报,那也得纪录下来吧,因为每个销售每天要聊很多人,你不纪录的话, 可能下次再跟这个人聊时,你早已忘记上次聊了什么了, 这样会让客户觉得这个销售不专业,相反,如果把每次跟进的内容都纪录下来, 过了几个月,这个客户再跟你聊时,竟然发现,你还记得他的所有情况,他就觉得你很重视他,说不定一感动就报名了,哈哈。 所以,一条客户信息可能会对应多条跟进记录,是个1对多的关系,必须单独搞张表来记录
  4. ClassList班级表, 学生以班级为单位管理,这个表被学员表反向关联, 即每个学员报名时需要选择班级
  5. Course课程表,存储课程介绍\大纲等基本信息
  6. CourseRecord上课纪录表,每个班级都要上很多次课,讲师每上一次课的纪录都要纪录下来,以后可以方便统计讲师工资什么的
  7. StudyRecord学员学习纪录表,思考一下,如果你想实现纪录每位学员的详细学习纪录,即精确到每节课的成绩/出勤情况,怎么办?其实很简单, 先来看一下此时班级/上课纪录/学员学习纪录的关系图:

[img

可以看出,一个班级对应多节课,每节课又对应多个学生的出勤和成绩,我们已经通过班级表(”ClassList”)和上课纪录表(”CourseRecord”)存储了班级信息和每节上课纪录,想存学生的每节课学习纪录的话只需要再搞一个表就可以了。

  1. Userinfo用户表,存储销售、讲师账户信息这里我们用django自带的认证系统,并对其进行自定制
  2. Role角色表,用于角色划分,用于权限管理,权限功能我们后面会实现,这里只在表里先存个简单的角色名
  3. Cumpass校区表,存储不同校区
  4. Menu菜单表,不同的角色看到的菜单不同, 我们支持动态菜单 ,所以需要把菜单 以及 和角色的关联存下来
  5. PaymentRecord缴费记录

好啦,表基本都建完了,接下来同步数据库,在同步数据库之前,我们思考一下,实际开发项目中,应该涉及到不同的应用,如权限管理、客户管理,学员管理等等。这就涉及到应用的分离,表结构的跨应用关联等等,一系列处理好后,再同步数据库,关于项目应用分离解耦合,下一章详述。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值