CRM 项目总结
一:开发背景
在公司日益扩大的过程中,不可避免的会伴随着更多问题出现。
对外 : 如何更好的管理客户与公司的关系?如何更及时的了解客户日益发展的需求变化?公司的产品是否真的符合客户需求?以及公司新产品信息是否更有针对性的及时推送给客户?客户没有
对内 : 公司发展壮大,部门越来越多,如何明确每个部门的权限?如何合理的调配公司人员?如何合理的分配客户资源?如何精确的处理绩效考核?以及更重要的在销售管理中,如何更及时的了解是什么阻碍了公司的发展?是什么影响了销售的业绩?销售的服务是否让客户满意?
面对这么多的问题,这个时候就需要来一套完整的 CRM 就显得很有必要了。
二:开发周期CRM 表结构
a) 综合一段时间的销售业绩。根据每个销售的权重比,自动分配客户资源,最大化客户转化率。
i. 实现机制:
根据权重表中数据合理分配客户资源,配合客户表和客户分配表。
分配时,按权重降序排序。按照分配人员数量,生成单次循环列表。每次分配列表结束,重新获取分配列表。
在客户资源分配时,使用到 redis 来配合完成。好处是:减少数据库查询消耗和 I/O 开销,提高数据处理速度。并且使用事务绑定,建立回滚机制,确保合理分配。
自动分配
b) 销售与客户关系处理。
该功能下,包括销售人员得到任务后对应的客户状态改为开始接洽,记录起始时间,订单状态从公司资源更改为销售人员的个人资源,其他人在订单转移前不可接触订单信息。
销售人员在跟进订单时,每一次与客户接洽都会在数据库中生成一条记录。
若订单在十五日内被销售人员转化成功,则将该客户的状态由待转化变为转化成功,并在正式客户表中生成该客户的记录。在销售人员的订单记录中将这笔订单的状态改为转化成功。
若当前与客户接洽的销售人员三天未跟进订单或是在十五天内未促成交易。则相关订单信息会被移动到公司公共资源中,并且原先跟进订单的销售人员不可以选择继续跟进(直至该订单再次被移入公司公共资源)。原销售人员的订单跟进记录中会显示有一单未能转化,并显示原因(重新接手该订单后即使转化成功,本条记录不会被覆盖)。
在我的客户的视图中,是可以查看当前销售所有的销售记录(已成单,未成单,以及未成单的订单流失原因)。
实现机制:
包含公共资源,抢单功能,当前销售个人客户界面,单条和批量导入客户信息。
公共资源、抢单、当前个人客户、单条和批量导入(信息提醒、使用 excel 导入客户记录)
2. 管理涉及到两张表,StudyRecord & CourseRecord。参照表结构,查看相关字段。
a) 在成功的将客户转化为学员后,根据其所填选的具体信息如:校区,课程,以及初填信息。并且初始化学员账号信息,方便学员可以登录该系统查看自己的学分以及考勤记录(此处用到了 Highcharts,任课老师也可查看学生相关信息)。
scores_view
b) 出勤记录:任课教师可初始化学员出勤信息,并支持批量修改。
学员哪天进入班级,就从哪天开始生成记录。考勤与成绩挂钩。
实现机制:
批量初始化
c) 录入成绩:
这里是通过点击在课程记录页面,我们手动生成的查看成绩的 a 标签,进入到成绩录入界面的。通过当前点击的课程记录的 id,拿到学习记录对象,再进行编辑。
并且,因为要使前端拿到每个学习记录 id,我们就需要想办法将值传过去。
在这使用了 type 来动态创建类。
fields 字段,写了一个 score_学习记录 id,还有一个 home_note_学习记录 id。该方法下,其实是由默认值的,so 在传值的时候回有 initial。并且 post 请求时,是用的 update
score_list
score_list.html
3. 会议室预定开发背景:公司在壮大,各部门大小事也变得更多。需要有一个专门可以供小群体开会讨论的地方,来提高工作效率。交给程序来完成。
m 表结构设计 e
具体实现: 记得要绑定事务!!!
第一步: 获取当天的预定信息。
第二步: 生成会议室信息。 在生成会议室信息里面,需要区分当前预定是否是自己预定的。自己订的可以取消,但是不能取消非自己预定的会议室信息。
第三步提交: 点击提交后,首先要判断日期是否正确,只能预定大于当前时间之后的会议室信息。并且,要区分一下是新增还是修改。
第四部删除: 这里需要用到 Q 查询,组合多个条件来实现。
4: 调查问卷参照: Django_调查问卷 5:最骚的东西:RBAC 会单独总结。
- # 删除会议室预定信息
- from django.db.models import Q
- remove_booking = Q()
- for room_id, time_id_list in post_data['DEL'].items():
- for time_id in time_id_list:
- temp = Q()
- temp.connector = 'AND'
- temp.children.append(('user_id',2,))
- temp.children.append(('date', choice_date))
- temp.children.append(('room_id', room_id,))
- temp.children.append(('time_id', time_id,))
- remove_booking.add(temp, 'OR')
- if remove_booking:
- models.Book.objects.filter(remove_booking).delete()
暂空
来源: https://www.cnblogs.com/ugfly/p/8199269.html