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

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

项目编号: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("更新失败");
        }
    }
}

五,项目总结

相关文章
|
2月前
|
XML JSON 运维
超兔CRM基于宜搭与多系统对接的归一结构分析与设计思考
本文探讨了超兔CRM团队在使用宜搭系统对接多外部系统过程中,面临的系统耦合高、接口冗余、维护成本上升等问题,提出通过引入中间表结构与业务对象模型抽象,实现接口归一化设计。该方案有效降低系统依赖,提升数据交互标准化程度,显著提高开发与维护效率,支撑业务长期扩展。
100 2
|
6月前
|
Java 数据库
jsp CRM客户管理系统(含数据库脚本以及文档)
jsp CRM客户管理系统(含数据库脚本以及文档)
126 10
|
10月前
|
安全 数据挖掘 数据安全/隐私保护
国产CRM品牌巡礼:系统品牌的核心优势与特色
本文深度解析国产CRM系统的四大知名品牌:销售易、神州云动、销帮帮和天衣云。 销售易:中国领先的CRM解决方案提供商,提供全渠道获客、智能化销售流程及AIGC技术应用,赢得500强企业信赖。 神州云动:以PaaS+SaaS模式、灵活定制和行业解决方案著称,支持企业实现客户关系管理的数字化和智能化。 销帮帮:面向中小企业的实用型CRM系统,提供销售跟踪、客户视图等功能,提高销售效率和客户满意度。 天衣云:专注于云端部署,提供快速部署、高安全性的CRM解决方案,确保企业信息安全。 各品牌各有特色,企业应根据自身需求选择合适的CRM系统,以实现客户关系的全面管理,提升业务效率和客户满意度。
|
10月前
|
数据挖掘
国产CRM系统精粹:销售易、悟空CRM、金蝶的深度对比分析
在企业数字化转型中,CRM系统成为提升竞争力的关键工具。本文深度解析国产CRM系统的三个知名品牌:销售易、悟空CRM与金蝶。 **销售易**:覆盖营销、销售、服务全流程,支持全渠道获客、潜客识别、营销自动化及AIGC技术应用,适合大型和跨国公司。 **悟空CRM**:以易用性和灵活性著称,提供客户管理、销售跟踪、市场营销和服务支持功能,适合预算有限的中小企业。 **金蝶**:集成财务管理软件,提供云服务、定制化解决方案和强大的数据分析功能,适合已使用金蝶财务管理软件的企业。 这三款CRM系统各具特色,企业应根据自身需求选择合适的工具,以实现客户关系的全面管理,提升业务效率和客户满意度。
|
11月前
|
搜索推荐 数据库 UED
CRM系统源码|客户管理系统源码开发
CRM系统通过提供个性化的用户体验、提高生产力、改善客户体验和增加销售额来助力企业成长。集成CRM能自动化数据输入,减少管理时间,提高销售代表的效率。此外,CRM还能增强客户互动,降低跳出率,增加透明度,确保整个公司的协调合作。
310 5
|
11月前
|
人工智能 供应链 搜索推荐
企业CRM选型必看:2024年最佳CRM系统排行
企业用户在选择CRM系统时,不仅要考虑系统的功能性、可定制性,还要考虑其与现有工具的集成能力以及价格。此外,在2024年,越来越多的企业用户会把CRM厂商的AI能力列入考察范畴。 本文分析整理2024年最佳CRM系统排行榜,从系统功能、优势、适用企业类型等方面,为企业用户选型客户关系管理系统提供参考。
|
11月前
|
人工智能 自然语言处理 搜索推荐
五款CRM系统评测:中大型企业如何选择适合的CRM工具
本文详细评测了销售易、金蝶云之家、八百客、白码和珍客五款领先CRM系统,涵盖品牌介绍、产品功能、优势特色及适用企业,旨在帮助中大型企业根据自身需求选择最合适的CRM工具,以提升工作效率、客户满意度和企业竞争力。
|
11月前
|
机器学习/深度学习 人工智能 运维
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
426 0
|
11月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
292 0
|
12月前
|
人工智能 数据可视化 数据挖掘
5款CRM系统评测:中小企业如何选择适合的CRM工具?
在竞争激烈的市场中,中小企业如何高效管理客户关系、提升销售业绩、改善客户满意度是其成功的关键。本文评测了5款主流CRM系统,分别为板栗看板、HubSpot CRM、Zoho CRM、Pipedrive和Salesforce Essentials,从功能特色、优缺点及使用体验等角度进行分析,帮助中小企业选择最适合的工具。
334 0