作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码

项目编号:BS-GX-044

一,项目简介

基于前后端分离开发的模式实现一个培训机构的小型CRM管理系统,主要实现根据不同的身份角色来进行不同的管理操作,主要完成的功能有,用户管理、咨询师管理、签到管理、学生跟踪信息管理、学生信息管理等相关功能模块。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7+Redis

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:springboot+mybatis

前台开发技术:html+jquery  直接部署在nginx下运行

三,系统展示

管理员登陆

角色管理

权限设置

用户管理

角色设置

咨询经理登陆

学生信息管理

查询签到信息

咨询师管理

签到管理

网络咨询师管理

咨询师登陆系统

管理自己咨询的学生

完善学生信息

学生咨询回访问记录

四,核心代码展示

vpackage com.ysd.crm_managerssystem.controller;import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ysd.crm_managerssystem.entity.Askers;
import com.ysd.crm_managerssystem.entity.Students;
import com.ysd.crm_managerssystem.entity.Userchecks;
import com.ysd.crm_managerssystem.service.IAskersService;
import com.ysd.crm_managerssystem.service.IStudentsService;
import com.ysd.crm_managerssystem.util.ExcelUtil;
import com.ysd.crm_managerssystem.util.Result;
import com.ysd.crm_managerssystem.util.UserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import org.springframework.stereotype.Controller;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;/*** <p>* 前端控制器* </p>** @author* @since 2020-05-12*/
@RestController
@RequestMapping("/crm_managerssystem/askers")
public class AskersController {@Autowiredprivate IAskersService service;@Autowiredprivate IStudentsService studentsService;/*** 查询咨询师** @param askerName* @param page* @param limit* @return*/@GetMapping("/query")public Object queryUserChecks(@RequestParam(required = false) String askerName, Integer page, Integer limit) {Map<String, Object> result = new HashMap<String, Object>();QueryWrapper<Askers> queryWrapper = new QueryWrapper<Askers>().like(!StringUtils.isEmpty(askerName), "asker_name", askerName).and(i -> i.eq("change_state", 1));IPage<Askers> find = service.page(new Page<Askers>(page, limit), queryWrapper);if (find != null) {result.put("msg", "ok");result.put("data", find.getRecords());result.put("count", find.getTotal());result.put("code", 0);return result;} else {result.put("msg", "no");result.put("code", 1);return result;}}/*** 查询网络咨询师** @param askerName* @param page* @param limit* @return*/@GetMapping("/wangLuo")public Result queryUserChecksWangLuo(@RequestParam(required = false) String askerName, Integer page, Integer limit) {try {QueryWrapper<Askers> queryWrapper = new QueryWrapper<Askers>().like(!StringUtils.isEmpty(askerName), "asker_name", askerName).and(i -> i.eq("change_state", 2));IPage<Askers> find = service.page(new Page<Askers>(page, limit), queryWrapper);return Result.successToPage("ok", find.getRecords(), find.getTotal());} catch (Exception e) {return Result.success("查询网络咨询师失败");}}/*** 添加咨询师、网络咨询师** @param askers* @return*/@PostMappingpublic Result addAsker(@RequestBody Askers askers) {try {service.save(askers);return Result.success("ok");} catch (Exception e) {e.printStackTrace();return Result.success("添加失败");}}/*** 编辑咨询师、网络咨询师信息** @param askers* @return*/@PutMappingpublic Object updateAsker(@RequestBody Askers askers) {try {service.updateById(askers);return Result.success("ok");} catch (Exception e) {e.printStackTrace();return Result.success("更新失败");}}/*** 根据id回显咨询师、网络咨询师信息** @param id* @return*/@GetMapping("/{id}")public Result findOne(@PathVariable Integer id) {return Result.success("ok", service.getById(id));}/*** 根据id删除单个咨询师、网络咨询师信息** @param id* @return*/@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {try {service.removeById(id);return Result.success("ok");} catch (Exception e) {e.printStackTrace();return Result.success("删除失败");}}/*** 根据id批量删除咨询师、网络咨询师信息** @param ids* @return*/@DeleteMappingpublic Result delete(@RequestParam("ids[]") Integer[] ids) {try {service.removeByIds(Arrays.asList(ids));return Result.success("ok");} catch (Exception e) {e.printStackTrace();return Result.success("删除失败");}}@RequestMapping("/export")public void export(HttpServletResponse response) {String filename = "asker.xlsx";response.setHeader("Content-Disposition", "attachment;filename=" + filename);try {OutputStream out = response.getOutputStream();List<List<Object>> rows = new ArrayList<>();List<Object> head = Arrays.asList("姓名", "状态", "入职时间", "角色", "公司名称");rows.add(head);List<Askers> all = service.getAll();for (Askers askers : all) {List<Object> columns = new ArrayList<>();columns.add(askers.getAskerName());columns.add(askers.getCheckState());columns.add(askers.getCheckIntime());columns.add(askers.getRoleName());columns.add(askers.getBakcontent());rows.add(columns);}ExcelUtil.export("asker", rows, out);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}@RequestMapping("/export1")public void export1(HttpServletResponse response) {String filename = "asker1.xlsx";response.setHeader("Content-Disposition", "attachment;filename=" + filename);try {OutputStream out = response.getOutputStream();List<List<Object>> rows = new ArrayList<>();List<Object> head = Arrays.asList("姓名", "状态", "入职时间", "角色", "公司名称");rows.add(head);List<Askers> all = service.getAll1();for (Askers askers : all) {List<Object> columns = new ArrayList<>();columns.add(askers.getAskerName());columns.add(askers.getCheckState());columns.add(askers.getCheckIntime());columns.add(askers.getRoleName());columns.add(askers.getBakcontent());rows.add(columns);}ExcelUtil.export("asker1", rows, out);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}static List<Askers> askersList = new ArrayList<Askers>();private static Random random = new Random();Long select1 = null;/*** 根据权重随机生成wuyong* @return*/
//    @PutMapping
//    @ResponseBodypublic void quanZhong() {List<Askers> wight = service.getWight();for (int i = 0; i < wight.size(); i++) {Long askerId = wight.get(i).getAskerId();Integer weight = wight.get(i).getWeight();Askers askers = new Askers(askerId, weight);askersList.add(askers);}Integer weightSum = 0;for (Askers wc : askersList) {weightSum += wc.getWeight();}if (weightSum <= 0) {System.err.println("Error: weightSum=" + weightSum.toString());return;}Integer n = random.nextInt(weightSum); // n in [0, weightSum)Integer m = 0;for (Askers wc : askersList) {if (m <= n && n < m + wc.getWeight()) {select1 = wc.getAskerId();System.out.println("This Random Category is " + select1);break;}m += wc.getWeight();}
//        try {
//            //根据id
//            boolean b = studentsService.updateById(a.setAskerId(select1));
//            return Result.success("ok", b);
//        } catch (Exception e) {
//            return Result.success("分配失败");
//        }}Boolean check=true;@RequestMapping("/boolean")public Result bool(Boolean c){check=c;return Result.success("ok");}/*** 根据权重随机生成咨询师* @param students* @return*/@PutMapping("/wight")public Result OpenWight(@RequestBody Students students) {List<Askers> wight = service.getWight();for (int i = 0; i < wight.size(); i++) {Long askerId = wight.get(i).getAskerId();Integer weight = wight.get(i).getWeight();Askers askers = new Askers(askerId, weight);askersList.add(askers);}Integer weightSum = 0;for (Askers wc : askersList) {weightSum += wc.getWeight();}if (weightSum <= 0) {System.err.println("Error: weightSum=" + weightSum.toString());return Result.success("权重<0");}Integer n = random.nextInt(weightSum); // n in [0, weightSum)Integer m = 0;for (Askers wc : askersList) {if (m <= n && n < m + wc.getWeight()) {select1 = wc.getAskerId();System.out.println("This Random Category is " + select1);break;}m += wc.getWeight();}
//        AskersController controller = new AskersController();
//        controller.quanZhong();if (check == true) {students.setAskerId(select1);Askers byId = service.getById(select1);students.setZixunName(byId.getAskerName());students.setShifoufengpei("已分配");studentsService.updateById(students);return Result.success("ok");}if (check == false){Long aLong = new Long(2);studentsService.updateById(students.setAskerId(aLong));return Result.success("ok");}return Result.success("失败");}//消息推送@GetMapping("student")public Result student(Students students,Integer page,Integer limit){try {
//            Long aLong = new Long(2);Long gg=UserUtil.getId();QueryWrapper<Students> queryWrapper = new QueryWrapper<Students>().eq("askerId", gg);
//                    .like(!StringUtils.isEmpty(askerName), "asker_name", askerName).and(i -> i.eq("change_state", 2));IPage<Students> find = studentsService.page(new Page<Students>(page, limit), queryWrapper);return Result.successToPage("ok", find.getRecords(), find.getTotal());}catch (Exception e){e.printStackTrace();return Result.success("查询失败");}}//咨询师数据下拉框@RequestMapping("asker")public Object asker(){Map<String, Object> result = new HashMap<String, Object>();try {List<Askers> all = service.getAll();result.put("code",0);result.put("data",all);return result;}catch (Exception e){e.printStackTrace();return Result.success("no");}}}
package com.ysd.crm_managerssystem.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ysd.crm_managerssystem.entity.Students;
import com.ysd.crm_managerssystem.entity.Users;
import com.ysd.crm_managerssystem.service.IStudentsService;
import com.ysd.crm_managerssystem.util.LayuiUtils;
import com.ysd.crm_managerssystem.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@RestController
@RequestMapping("crm_managerssystem/askstudents")
public class AskStudentsController {@Autowiredprivate IStudentsService studentsService;/*** 分页查询* 每个咨询师只查出分配给自己的学生* @param limit* @param page* @return*/@GetMapping("/page")public Object pageStudents(HttpServletRequest httpServletRequest, @RequestParam(required = false) String stuName, @RequestParam(required = false) String stuStatus, Integer limit, Integer page) {/*** 从session中取出登录用户* 根据登录用户角色只查出分配给自己的学生*/HttpSession session = httpServletRequest.getSession();Users user = (Users)session.getAttribute("user");if(user==null){return LayuiUtils.error1("登录身份过期,请返回登录页重新登录");}QueryWrapper<Students> queryWrapper = new QueryWrapper<Students>()//students_zi_xun_name用来表示咨询师的userID.eq("zixun_name",user.getUserId()).eq(!StringUtils.isEmpty(stuStatus),"stu_status",stuStatus)//条件查询.like(!StringUtils.isEmpty(stuName), "students_name", stuName);IPage<Students> find = studentsService.page(new Page<Students>(page, limit), queryWrapper);return Result.successToPage("ok", find.getRecords(), find.getTotal());}@GetMapping("/{id}")public Result findOne(@PathVariable Integer id) {return Result.success("ok", studentsService.getById(id));}/*** 删除* @param id* @return*/@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id){try {studentsService.removeById(id);return Result.success("ok");} catch (Exception e) {e.printStackTrace();return Result.success("删除失败");}}/*** 修改* @param students* @return*/@PutMappingpublic Result update(@RequestBody Students students){try {studentsService.updateById(students);return Result.success("ok");} catch (Exception e) {e.printStackTrace();return Result.success("更新失败");}}
}

五,项目总结

招生CRM系统|基于Springboot实现培训机构招生CRM管理系统相关推荐

  1. java家谱树_青锋家谱系统-基于springboot+orgtree的青锋家谱树管理系统

    gen 青锋家谱系统:基于springboot架构的家谱项目系统 项目介绍 基于springboot.orgtree的家谱树管理系统,将纸质版的家谱进行电子化.信息化,建立家族的家谱血脉联系. [青锋 ...

  2. 实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统

    作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .掘金特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Java项目.毕业设计.简历模板.学习资料.面试题库.技术互助 ...

  3. 基于JAVA教育培训机构信息管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA教育培训机构信息管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA教育培训机构信息管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. sap crm行业解决方案_培训机构行业crm系统解决方案

    教育培训行业属于典型的现代商业服务业,其业务流程复杂,数据实时性要求高,课程多变,潜在学员群体广泛.机构管理者面临的困扰和挑战很多,小猪V5CRM教育版和大家一起讨论培训机构行业CRM的情况,例如: ...

  5. 白马培训机构招生管理系统-程序流程图

    项目来源及背景   随着大数据时代的到来,实现数据规划.自动化的电脑管理,是一个运作高效的企业事业单位的必要要求.培训机构招生系统就是为了实现各培训机构招生高效管理而设计的,因此邓立唯指导老师提出了该 ...

  6. 教育培训机构教培管理系统后台点名上课管理K12招生教学教务财务等全方位运营

    教育培训机构教培管理系统是针对K12教育领域开发的一种全方位运营管理工具.该系统涵盖了教学.教务.财务等多个方面,旨在提供高效.便捷的管理解决方案,帮助教育培训机构实现优质教学和持续发展. 首先,教育 ...

  7. 白马培训机构招生管理系统-数据流图(DFD)

    项目来源及背景   随着大数据时代的到来,实现数据规划.自动化的电脑管理,是一个运作高效的企业事业单位的必要要求.培训机构招生系统就是为了实现各培训机构招生高效管理而设计的,因此邓立唯指导老师提出了该 ...

  8. 白马培训机构招生管理系统-用例图

    项目来源及背景   随着大数据时代的到来,实现数据规划.自动化的电脑管理,是一个运作高效的企业事业单位的必要要求.培训机构招生系统就是为了实现各培训机构招生高效管理而设计的,因此邓立唯指导老师提出了该 ...

  9. 教你如何搭建培训机构-招生管理系统,demo可分享

    1.简介 1.1.案例简介 本文将介绍,如何搭建培训机构-招生管理. 1.2.应用场景 根据意向信息站的收录信息,可批量导入意向信息,在意向信息站转为意向学员,转为意向学员后可进行报名收费成为正式学员 ...

最新文章

  1. 《Python 学习手册4th》 第十二章 if测试和语法规则
  2. Java实现的文件Copy例子
  3. 服务器怎么初始化系统,CentOS服务器怎么进行初始化
  4. 介绍一个非常好用的Python模块-pprint模块,相信你一定会爱上它的
  5. 查看关于yum的配置
  6. 数据库ORA-00600 [15160]处理
  7. 搭建一个tomcat的JSP服务器环境
  8. 计算机组成原理完整学习笔记(三):存储器
  9. kali使用外接usb蓝牙
  10. js 剩余时间,天,小时,分钟,秒
  11. 征服 Apache + SSL
  12. Python爬取下载网易云音乐
  13. 2015年小米能否实现1亿部手机的销售目标?
  14. 移动端浏览器有哪些,内核分别是什么
  15. CSS - 响应式布局(二)响应式栅格系统
  16. 团队沟通中的误区与技巧(zt)
  17. 2021湖南省地区高考成绩排名查询,2021长沙市地区高考成绩排名查询,长沙市高考各高中成绩喜报榜单...
  18. 【深度学习入门基础】一、从线性代数和微积分的角度看神经网络
  19. linux命令宝典,Linux命令行完全技术宝典(张栋) PDF扫描版[85MB]
  20. minio操作,文件上传下载

热门文章

  1. ISO9126 软件质量模型
  2. telnet控制路由器交换机与微信公众平台
  3. LOD(Levels of detail)细节层次3D优化
  4. Spring Ioc源码分析系列--容器实例化Bean的四种方法
  5. android 调出键盘表情_Android高仿微信表情输入与键盘输入详解
  6. 换皮后贴吧玩家反馈整理
  7. unity——三维GIS效果
  8. Linux下双网卡-双外网网关-电信联通双线主机设置
  9. 安卓选择相册或者相机图片并裁剪适配华为小米机型
  10. Unhandled promise rejection错误解决