赞
踩
本篇内容
业务痛点分析
项目需求讨论
使用场景分析
表结构设计
刚加入XX教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每月算工资时,就按这个表来统计招生提成.
后来学校大了点,教室变成了3间,招生老师变成了4个人,招的学生也开始多了起来,不过大家依然是招了学生就纪录在自己的excel里,但问题开始出现了,我们的招生多是通过网络qq聊天在线咨询,好多客户需要聊很久才能转化成学员,经常会出现一个客户跟一个招生老师聊过后,过了一段时间却在另一个招生老师那报名了。
于是争执就出现了,A销售说这个人是先找我咨询的,我帮他回答了大多数问题,报名提成却算成B的,不公平。B销售也会讲,这个客户找他咨询时并未说自己之前跟其它销售聊过呀,所以对B来讲,这就是个新客户呀,并且是在B这报的名, 凭什么要分提成给A呀。
为了解决这个问题,于是想出一个办法,搞了一个机器做共享服务器,共享服务器上搞了个统一的客户信息excel表,大家每人聊过的客户都在这个表里纪录, 这样每个人录入前,先在表格里全局查一下,这个客户的qq号是不是已经在表里了,这样就能避免冲突了。
但用过共享文件的应该都遇到过一个问题就是,为保证数据一致性,同一时间系统只允许一个用户修改数据, 但我们的每个招生老师一上班,就会打开这个共享文件,随时聊的学生,随时会录入到表里。但这个限制使的大家,只要一有人录入信息,就得要求其它销售人员都把文件先关闭,录入信息后其它人才能再用,这搞的大家很难受。 所以销售人员经常让我帮开发个系统,可以解决一些类似这样的问题。
另外, 我们在讲课时, 为了保证和检验学员的学习效果, 每节课讲完时都会给学生部置一个作业,要求他必须在下节上课前完成并提交作业,老师会给学员统一批作业,作业成绩也纪录在excel表中,就像下图一样。每个老师维护自己班级的作业,校长如果想看各个班级的成绩,还要跟每个老师要学员成绩表,很不方便, 当时校长就跟我讲,学员的成绩/出勤情况等要是也能统一管理就好了。
于是我心里也一直纪着这个事,想帮学校开发一个学员开发一个类似CRM(客户关系管理软件)的系统,集销售管理/学员管理等功能于一体。到现在,这个系统在公司已经用了一年多了,大家每天都在使用,之前的痛点都解决了,特别是销售人员, 工作已经离不开这个系统了,自己做的东西帮别人解决具体问题,心里还是蛮开森的!
个人觉得这个学员管理系统的挺适合新手练习的,难度适中,用户的知识点也比较综合,所以把学校里的系统简化了一下,提练成了一个教学项目,下面我们就一起来做一个喽。
噢,对了,最后说一下这个项目涉及到的知识点,请确保你以充分掌握了下面所列知识点再学习此项目噢!
首先给我们的项目起个名字吧,这个系统要同时支持销售管理、学员管理、讲师管理以及权限管理等功能,功能比较杂,不能称之为严格意上的CRM,因为CRM一般只包括销售管理,but anyway, who cares,我们就叫它”Obcrm管理系统”吧。
起好了名字,开始动手写之前, 肯定要把需求想清楚,需求想不清楚就开始写的话,等于给自己挖坑,你肯定不想出现写了5千行代码后,突然发现,需求搞错了,还要重新推到重来的事情吧。
所以,现在静下心,把需求想明白,画好思维导图,跟同事多讨论应用场景,做了各方面论证后,再开始动工噢。
我们的系统的用户分3种,销售\学生\讲师,这3个角色关注的事情是不同的, 销售只关注招了多少学员,讲师关注自己管理的班级学习成绩怎样,学员只关注自己的学习成绩。 因此在想需求时,你要从每个角色出发,看他关心的是什么, 于是我画出了这个思维导图。
根据思维导图,我们总结出以下具体需求:
为了更加理清我们的项目开发需求,在动手写代码前,建议再有一个业务场景分析的步骤,即从用户角度写出你使用这个项目的具体场景,我们这里分为销售、讲师、学员3个角色,我分别给每个角色列出了几个使用场景:
好啦, 业务场景也分析完了,接下来我们终于可以开始搞事情啦!
既然要写一个crm项目,必然需要创建一个项目,这个项目我们使用的是django框架,我们给项目随便取个名字把,如我这里就叫ObCRM。第一个应用就叫customer。
业务需求分析好了,项目也创建好了,就要开始设计表结构,表结构应该包含所有业务涉及到的数据需求,一般来说,表结构的设计是重要的,一个项目的开展,运行,很大程度上都取决于这个项目对于数据表结构的设计如何。
这里我列出大概需要的表结构,
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
接下来分别解释每张表
[
可以看出,一个班级对应多节课,每节课又对应多个学生的出勤和成绩,我们已经通过班级表(”ClassList”)和上课纪录表(”CourseRecord”)存储了班级信息和每节上课纪录,想存学生的每节课学习纪录的话只需要再搞一个表就可以了。
好啦,表基本都建完了,接下来同步数据库,在同步数据库之前,我们思考一下,实际开发项目中,应该涉及到不同的应用,如权限管理、客户管理,学员管理等等。这就涉及到应用的分离,表结构的跨应用关联等等,一系列处理好后,再同步数据库,关于项目应用分离解耦合,下一章详述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。