CRM項目總結 一:開發背景 在公司日益擴大的過程中,不可避免的會伴隨著更多問題出現。 對外 : 如何更好的管理客戶與公司的關係?如何更及時的瞭解客戶日益發展的需求變化?公司的產品是否真的符合客戶需求?以及公司新產品信息是否更有針對性的及時推送給客戶?客戶沒有 對內 : 公司發展壯大,部門越來越多, ...
CRM項目總結
一:開發背景
在公司日益擴大的過程中,不可避免的會伴隨著更多問題出現。
對外 : 如何更好的管理客戶與公司的關係?如何更及時的瞭解客戶日益發展的需求變化?公司的產品是否真的符合客戶需求?以及公司新產品信息是否更有針對性的及時推送給客戶?客戶沒有
對內 : 公司發展壯大,部門越來越多,如何明確每個部門的許可權?如何合理的調配公司人員?如何合理的分配客戶資源?如何精確的處理績效考核?以及更重要的在銷售管理中,如何更及時的瞭解是什麼阻礙了公司的發展?是什麼影響了銷售的業績?銷售的服務是否讓客戶滿意?
面對這麼多的問題,這個時候就需要來一套完整的CRM就顯得很有必要了。
二:開發周期
- 計劃在兩個月內完成項目的初步設計以及功能的初步實現。
- 基礎功能完成後,會預留兩個月時間來完成bug修複以及微調根據公司業務發展的業務需求。
- 項目上線後,開發人員持續跟進項目。根據公司業務發展和管理體系實時調整。
三:功能

1 from django.db import models 2 from rbac import models as rbac_model 3 # Create your models here. 4 5 6 class Department(models.Model): 7 """ 8 部門表 9 市場部 1000 10 銷售 1001 11 """ 12 title = models.CharField(verbose_name='部門名稱', max_length=16) 13 code = models.IntegerField(verbose_name='部門編號',unique=True,null=False) 14 15 def __str__(self): 16 return self.title 17 18 19 class UserInfo(models.Model): 20 """ 21 員工表 22 """ 23 auth = models.OneToOneField(verbose_name='用戶許可權', to=rbac_model.User,null=True,blank=True) 24 name = models.CharField(verbose_name='員工姓名', max_length=16) 25 username = models.CharField(verbose_name='用戶名', max_length=32) 26 password = models.CharField(verbose_name='密碼', max_length=64) 27 email = models.EmailField(verbose_name='郵箱', max_length=64) 28 openid = models.CharField(verbose_name='微信唯一ID', max_length=64, null=True, blank=True) 29 depart = models.ForeignKey(verbose_name='部門', to="Department",to_field="code") 30 31 def __str__(self): 32 return self.name 33 34 35 class Course(models.Model): 36 """ 37 課程表 38 如: 39 Linux基礎 40 Linux架構師 41 Python自動化開發精英班 42 Python自動化開發架構師班 43 """ 44 name = models.CharField(verbose_name='課程名稱', max_length=32) 45 46 def __str__(self): 47 return self.name 48 49 50 class School(models.Model): 51 """ 52 校區表 53 54 """ 55 title = models.CharField(verbose_name='校區名稱', max_length=32) 56 57 def __str__(self): 58 return self.title 59 60 61 class ClassList(models.Model): 62 """ 63 班級表 64 如: 65 燒餅 打餅班 1期 10000 2017-11-11 2018-5-11 66 """ 67 school = models.ForeignKey(verbose_name='校區', to='School') 68 course = models.ForeignKey(verbose_name='課程名稱', to='Course') 69 70 semester = models.IntegerField(verbose_name="班級(期)") 71 price = models.IntegerField(verbose_name="學費") 72 start_date = models.DateField(verbose_name="開班日期") 73 graduate_date = models.DateField(verbose_name="結業日期", null=True, blank=True) 74 memo = models.CharField(verbose_name='說明', max_length=256, blank=True, null=True, ) 75 teachers = models.ManyToManyField(verbose_name='任課老師', to='UserInfo', related_name='teach_classes',limit_choices_to={'depart_id__in':[1003,1004]}) 76 tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes',limit_choices_to={'depart_id':1002}) 77 78 def __str__(self): 79 return "{0}({1}期)".format(self.course.name, self.semester) 80 81 82 class Customer(models.Model): 83 """ 84 客戶表 85 """ 86 qq = models.CharField(verbose_name='qq', max_length=64, unique=True, help_text='QQ號必須唯一') 87 88 name = models.CharField(verbose_name='學生姓名', max_length=16) 89 gender_choices = ((1, '男'), (2, '女')) 90 gender = models.SmallIntegerField(verbose_name='性別', choices=gender_choices) 91 92 education_choices = ( 93 (1, '重點大學'), 94 (2, '普通本科'), 95 (3, '獨立院校'), 96 (4, '民辦本科'), 97 (5, '大專'), 98 (6, '民辦專科'), 99 (7, '高中'), 100 (8, '其他') 101 ) 102 education = models.IntegerField(verbose_name='學歷', choices=education_choices, blank=True, null=True, ) 103 graduation_school = models.CharField(verbose_name='畢業學校', max_length=64, blank=True, null=True) 104 major = models.CharField(verbose_name='所學專業', max_length=64, blank=True, null=True) 105 106 experience_choices = [ 107 (1, '在校生'), 108 (2, '應屆畢業'), 109 (3, '半年以內'), 110 (4, '半年至一年'), 111 (5, '一年至三年'), 112 (6, '三年至五年'), 113 (7, '五年以上'), 114 ] 115 experience = models.IntegerField(verbose_name='工作經驗', blank=True, null=True, choices=experience_choices) 116 work_status_choices = [ 117 (1, '在職'), 118 (2, '無業') 119 ] 120 work_status = models.IntegerField(verbose_name="職業狀態", choices=work_status_choices, default=1, blank=True, 121 null=True) 122 company = models.CharField(verbose_name="目前就職公司", max_length=64, blank=True, null=True) 123 salary = models.CharField(verbose_name="當前薪資", max_length=64, blank=True, null=True) 124 125 source_choices = [ 126 (1, "qq群"), 127 (2, "內部轉介紹"), 128 (3, "官方網站"), 129 (4, "百度推廣"), 130 (5, "360推廣"), 131 (6, "搜狗推廣"), 132 (7, "騰訊課堂"), 133 (8, "廣點通"), 134 (9, "高校宣講"), 135 (10, "渠道代理"), 136 (11, "51cto"), 137 (12, "智匯推"), 138 (13, "網盟"), 139 (14, "DSP"), 140 (15, "SEO"), 141 (16, "其它"), 142 ] 143 source = models.SmallIntegerField('客戶來源', choices=source_choices, default=1) 144 referral_from = models.ForeignKey( 145 'self', 146 blank=True, 147 null=True, 148 verbose_name="轉介紹自學員", 149 help_text="若此客戶是轉介紹自內部學員,請在此處選擇內部學員姓名", 150 related_name="internal_referral" 151 ) 152 course = models.ManyToManyField(verbose_name="咨詢課程", to="Course") 153 154 status_choices = [ 155 (1, "已報名"), 156 (2, "未報名") 157 ] 158 status = models.IntegerField( 159 verbose_name="狀態", 160 choices=status_choices, 161 default=2, 162 help_text=u"選擇客戶此時的狀態" 163 ) 164 consultant = models.ForeignKey(verbose_name="課程顧問", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1005}) 165 date = models.DateField(verbose_name="咨詢日期", auto_now_add=True) 166 167 recv_date = models.DateField(verbose_name='接單時間',null=True,blank=True) 168 169 last_consult_date = models.DateField(verbose_name="最後跟進日期", auto_now_add=True) 170 171 def __str__(self): 172 return "姓名:{0},QQ:{1}".format(self.name, self.qq, ) 173 174 175 class CustomerDistribution(models.Model): 176 """客戶分配表""" 177 user = models.ForeignKey(verbose_name="當前客戶顧問",to='UserInfo',limit_choices_to={'depart_id':1005},related_name="cds",null=True,blank=True) 178 customer = models.ForeignKey(verbose_name="客戶",to="Customer",related_name="dealers",null=True,blank=True) 179 ctime = models.DateField(auto_now_add=True,null=True,blank=True) 180 status_choices = ( 181 (1,'正在跟進'), 182 (2,'已成單'), 183 (3,'三天未跟進'), 184 (4,'十五天未成單'), 185 ) 186 status = models.IntegerField(verbose_name="狀態",choices=status_choices,default=1) 187 memo = models.CharField(verbose_name="更多信息",max_length=255,null=True,blank=True) 188 189 190 class SaleRank(models.Model): 191 """銷售權重與分配""" 192 user = models.ForeignKey(to="UserInfo",verbose_name='課程顧問',limit_choices_to={'depart':1005}) 193 num = models.IntegerField(verbose_name='數量') 194 weight = models.IntegerField(verbose_name='權重') 195 def __str__(self): 196 return '權重:{0}