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

創建超級用戶,進入后台

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM