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

Posted 编程指南针

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了招生CRM系统|基于Springboot实现培训机构招生CRM管理系统相关的知识,希望对你有一定的参考价值。

作者主页:编程指南针

作者简介: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 
    @Autowired
    private IAskersService service;
    @Autowired
    private 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
     */
    @PostMapping
    public Result addAsker(@RequestBody Askers askers) 
        try 
            service.save(askers);
            return Result.success("ok");
         catch (Exception e) 
            e.printStackTrace();
            return Result.success("添加失败");
        
    

    /**
     * 编辑咨询师、网络咨询师信息
     *
     * @param askers
     * @return
     */
    @PutMapping
    public 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
     */
    @DeleteMapping
    public 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
//    @ResponseBody
    public 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 

    @Autowired
    private 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
     */
    @PutMapping
    public Result update(@RequestBody Students students)
        try 
            studentsService.updateById(students);
            return Result.success("ok");
         catch (Exception e) 
            e.printStackTrace();
            return Result.success("更新失败");
        
    


五,项目总结

以上是关于招生CRM系统|基于Springboot实现培训机构招生CRM管理系统的主要内容,如果未能解决你的问题,请参考以下文章

基于SSM+SpringBoot《CRM客户关系管理系统》实战开发教程(附文档及源码)

基于 JavaSwing 的招生信息管理系统的实现

DynamicCRM是啥

SCRUM 2020年scrum培训认证 招生简章

培训机构软件招生哪家好?

Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)