CRM客户关系管理系统(一)
Table of Contents
CRM客户关系管理系统(一)
第一章、CRM介绍和开发流程
1.1.CRM简介
客户关系管理(CRM)
客户关系管理(customer relationship management)的定义是:企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。其最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户,增加市场。
作用
1.提高市场营销效果
2.为生产研发提供决策支持
3.提供技术支持的重要手段
4.为财务金融策略提供决策支持
5.为适时调整内部管理提供依据
6.使企业的资源得到合理利用
7.优化企业业务流程
8.提高企业的快速响应和应变能力
9.改善企业服务,提高客户满意度
10.提高企业的销售收入
11.推动了企业文化的变革
12.与QQ集成,可以快速与客户沟通
1.2.CRM项目开发流程
(1)需求分析
- 存储所有的客户咨询信息
- 避免重复数据
- 客户的多次跟踪记录
- 客户来源、成单率分析
- 每个销售只能修改自己的客户信息
- 报名流程开发
班级管理
- 学员成绩,出勤管理
- 问卷调查
校区管理
课程管理
- 课程大纲管理,周期,价格,代课老师
讲师的上课记录
** 学员就业情况**
** 知识库**
** 权限管理**
** 角色**
- 销售
- 讲师
- 学员
- 管理员
(2)思维导图
(3)业务场景分析(用户使用场景)
销售
销售A 刚从 百度推广 聊了一个客户,录入了CRM系统,咨询了python全栈开发课程,但是没报名
销售B 从 qq群聊了客户,且报名了python全栈9期课程,给用户发送了报名连接,待用户填写完毕后,把他添加到了python fullstack s9的班级里
销售C 打电话给之前的一个客户,说服他报名linux40期,但是没说服成功,更新了跟踪记录
销售D 聊了一个客户,录入时发现,此客户已存在,不能录入,随后通知相应的客户负责人跟进
销售B 从客户库里过滤出了 所有超过一个月未跟踪的客户,然后进行跟踪(如果成了,这客户就算B的)
销售主管 查看了部门 本月的销售报表, 包括来源分析,成单率分析,班级报名数量分析,销售额同比
学员
客户A 填写了销售发来的报名链接,上传了个人的证件信息,并提交,过了一会儿,发现收到一个邮件,告知他报名python9期课程成功,并帮他开通了学员账号
学员A 登录了学员系统,看到了 自己的合同,报名的班级,以及课程大纲
学员A 提交了python9期的 第1节课的作业
学员A 查看了自己在python9期的学习成绩和排名
学员A 在线搜索一个问题,发现没有答案,于是提交了一个问题
讲师
- 登录了CRM,查看自己管理的班级列表
- 进入了python9期,创建了第一节的上课记录,填入了本节内容,作业需求
- 为python9期的第一节课,进行点名,发现科比迟到了,标记他为迟到状态
- 批量下载了所有学员的python9期第一节的作业,给每个学生在线 打成绩+批注
管理员
- 创建了 课程(linux,python)
- 创建了 校区(北京,上海)
- 创建了 班级(python fullstacks9和linux40)
- 创建了 账号(A,B,C,D)
- 创建了 销售,讲师,学员三个角色,并把ABCD分配到了销售角色里
- 设置了销售可以操作的权限
(4)原型图
产品经理画
(5)开发工具选型
开发工具
- pycharm
- python
- django
- mysql
- jquery
- bootstrap
- linux
- nginx
(6)创建项目
创建项目
设计表结构
开始写代码
第二章、CRM项目表结构设计
2.1.创建项目和app
workon CRM #虚拟环境
pip install django==1.11.6
#创建项目
项目名:PerfectCRM
app名:crm
2.2.项目表结构设计
# crm/model.py
__author__ = 'derek'
from django.db import models
from django.contrib.auth.models import User
class Role(models.Model):
'''角色表'''
name = models.CharField(max_length=64,unique=True) #不能重
class UserProfile(models.Model):
'''用户信息表'''
#关联django自带的User,可以自己扩展字段
user = models.ForeignKey(User,on_delete=models.CASCADE)
name = models.CharField('姓名',max_length=64)
#一个用户可以有多个角色,一个角色可以对应多个用户
role = models.ManyToManyField(Role,blank=True,null=True)
def __str__(self):
return self.name
class CustomerInfo(models.Model):
'''客户信息表'''
name = models.CharField('姓名',max_length=64,default=None)
contact_type_choices = ((0,'qq'),(1,'微信'),(2,'手机'))
contact_type = models.SmallIntegerField(choices=contact_type_choices,default=0)
contact = models.CharField('联系方式',max_length=64,unique=True)
source_choices = ((0,'qq群'),(1,'51CTO'),(2,'百度推广'),(3,'知乎'),(4,'转介绍'),(5,'其它'),)
source = models.SmallIntegerField('客户来源',choices=source_choices)
#关联自己,如果是转介绍(介绍人已经是学员,然后介绍别人过来学习),需要填写转介绍人的信息,不是转介绍,这里就可以为空
referral_from = models.ForeignKey('self',blank=True,null=True,verbose_name='转介绍',on_delete=models.CASCADE)
#可以咨询多个课程
consult_courses = models.ManyToManyField('Course',verbose_name='咨询课程')
consult_content = models.TextField('咨询内容',)
status_choices = ((0,'未报名'),(1,'已报名'),(2,'已经退学'))
status = models.SmallIntegerField('客户状态',choices=status_choices)
consultant = models.ForeignKey('UserProfile',verbose_name='课程顾问',on_delete=models.CASCADE)
date = models.DateField('创建的时间',auto_now_add=True)
class Student(models.Model):
'''学员表'''
customer = models.ForeignKey('CustomerInfo',verbose_name='客户',on_delete=models.CASCADE)
class_grades = models.ManyToManyField('ClassList',verbose_name='班级')
def __str__(self):
return self.customer
class CustomerFollowUp(models.Model):
'''客户跟踪记录表'''
customer = models.ForeignKey('CustomerInfo',on_delete=models.CASCADE)
content = models.TextField('跟踪内容',)
user = models.ForeignKey('UserProfile',verbose_name='跟进人',on_delete=models.CASCADE)
status_choices = ((0,'近期无报名计划'),(1,'一个月内报名'),(2,'半个月报名'),(3,'已报名'),)
status = models.SmallIntegerField('客户状态',choices=status_choices)
date = models.DateField('创建的时间', auto_now_add=True)
class Course(models.Model):
'''课程表'''
name = models.CharField('课程名称',max_length=64,unique=True)
#价格必须为整数
price = models.PositiveSmallIntegerField('价格',)
period = models.PositiveSmallIntegerField('课程周期(月)',default=5)
outline = models.TextField('大纲',)
def __str__(self):
return self.name
class ClassList(models.Model):
'''班级列表'''
branch = models.ForeignKey('Branch',verbose_name='校区',on_delete=models.CASCADE)
#一个班级只能有一个课程,一个课程可以有多个班级
course = models.ForeignKey('Course',verbose_name='课程',on_delete=models.CASCADE)
class_type_choices = ((0,'脱产'),(1,'周末'),(2,'网络班'))
class_type = models.SmallIntegerField('班级类型',choices=class_type_choices,default=0)
semester = models.SmallIntegerField('学期',)
teachers = models.ManyToManyField('UserProfile',verbose_name='讲师')
start_date = models.DateField('开班日期',)
#毕业日期因为不固定,所以可以为空
graduate_date = models.DateField('毕业日期',blank=True,null=True)
def __str__(self):
#班级名是课程名+第几期拼接起来的
return "%s(%s)期"%(self.course.name,self.semester)
class Meta:
#联合唯一,班级不能重复
unique_together = ('branch','class_type','course','semester')
class CourseRecord(models.Model):
'''上课记录'''
class_grade = models.ForeignKey('ClassList',verbose_name='上课班级',on_delete=models.CASCADE)
day_num = models.PositiveSmallIntegerField('课程节次',)
teacher = models.ForeignKey('UserProfile',verbose_name='讲师',on_delete=models.CASCADE)
title = models.CharField('本节主题',max_length=64)
content = models.TextField('本节内容',)
has_homework = models.BooleanField('本节有作业',default=True)
homework = models.TextField('作业需求',blank=True,null=True)
date = models.DateField('创建的时间', auto_now_add=True)
def __str__(self):
#上课班级+课程节次
return "%s第(%s)节"%(self.class_grade,self.day_num)
class Meta:
unique_together = ('class_grade','day_num')
class StudyRecord(models.Model):
'''学习记录表'''
#一节课对应多个学生
course_record = models.ForeignKey('CourseRecord',verbose_name='课程')
#一个学生有多个上课记录
student = models.ForeignKey('Student',verbose_name='学生',on_delete=models.CASCADE)
score_choices = ((100,'A+'),
(90,'A'),
(85,'B+'),
(80,'B'),
(75,'B-'),
(70,'C+'),
(60,'C'),
(40,'C-'),
(-50,'D'),
(0,'N/A'), #not avaliable
(-100,'COPY'), #抄作业
)
score = models.SmallIntegerField('得分',choices=score_choices,default= 0)
show_choices = ((0,'缺勤'),
(1,'已签到'),
(2,'迟到'),
(3,'早退'),
)
show_status = models.SmallIntegerField('出勤',choices=show_choices,default=1)
note = models.TextField('成绩备注',blank=True,null=True)
date = models.DateField('创建的时间', auto_now_add=True)
def __str__(self):
return "%s %s %s"%(self.course_record,self.student,self.score)
class Branch(models.Model):
'''校区分支'''
name = models.CharField('校区名',max_length=64,unique=True)
addr = models.CharField('地址',max_length=128,blank=True,null=True)
def __str__(self):
return self.name
注册models
# crm/admin.py
from django.contrib import admin
from crm import models
admin.site.register(models.Role)
admin.site.register(models.CustomerInfo)
admin.site.register(models.Student)
admin.site.register(models.CustomerFollowUp)
admin.site.register(models.Course)
admin.site.register(models.ClassList)
admin.site.register(models.CourseRecord)
admin.site.register(models.StudyRecord)
admin.site.register(models.Branch)
2.3.生成表
(1)mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'perfectcrm', #数据库名字
'USER': 'root', #账号
'PASSWORD': '123456', #密码
'HOST': '127.0.0.1', #IP
'PORT': '3306', #端口
}
}
(2)pymysql
pip install pymysql
下载 mysqlclient-1.3.12-cp36-cp36m-win_amd64
下载地址 https://www.lfd.uci.edu/~gohlke/pythonlibs/
安装 pip install mysqlclient-1.3.12-cp36-cp36m-win_amd64
(3)_init__.py添加代码:
import pymysql
pymysql.install_as_MySQLdb()
(4)设置中文
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
创建超级用户,进入后台
作者:zhang_derek
出处:http://www.cnblogs.com/derek1184405959/
github:https://github.com/derek-zhang123
个性签名:其实人跟树一样,越是向往高处的阳光,它的根就越要伸向黑暗的地底。
posted on 2018-04-26 15:39 zhang_derek 阅读(11094) 评论(6) 编辑 收藏 举报
0 评论