招生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下运行

三,系统展示


管理员登陆

image.png

角色管理

image.png

权限设置

用户管理

image.png

角色设置

image.png

咨询经理登陆

学生信息管理

image.png

查询签到信息

image.png

咨询师管理

image.png

签到管理

image.png

网络咨询师管理

image.png

咨询师登陆系统

管理自己咨询的学生

image.png

完善学生信息

学生咨询回访问记录

image.png

四,核心代码展示


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("更新失败");
        }
    }
}

五,项目总结


相关文章
|
9月前
|
XML JSON 运维
超兔CRM基于宜搭与多系统对接的归一结构分析与设计思考
本文探讨了超兔CRM团队在使用宜搭系统对接多外部系统过程中,面临的系统耦合高、接口冗余、维护成本上升等问题,提出通过引入中间表结构与业务对象模型抽象,实现接口归一化设计。该方案有效降低系统依赖,提升数据交互标准化程度,显著提高开发与维护效率,支撑业务长期扩展。
611 2
|
Java 数据库
jsp CRM客户管理系统(含数据库脚本以及文档)
jsp CRM客户管理系统(含数据库脚本以及文档)
283 10
|
安全 数据挖掘 数据安全/隐私保护
国产CRM品牌巡礼:系统品牌的核心优势与特色
本文深度解析国产CRM系统的四大知名品牌:销售易、神州云动、销帮帮和天衣云。 销售易:中国领先的CRM解决方案提供商,提供全渠道获客、智能化销售流程及AIGC技术应用,赢得500强企业信赖。 神州云动:以PaaS+SaaS模式、灵活定制和行业解决方案著称,支持企业实现客户关系管理的数字化和智能化。 销帮帮:面向中小企业的实用型CRM系统,提供销售跟踪、客户视图等功能,提高销售效率和客户满意度。 天衣云:专注于云端部署,提供快速部署、高安全性的CRM解决方案,确保企业信息安全。 各品牌各有特色,企业应根据自身需求选择合适的CRM系统,以实现客户关系的全面管理,提升业务效率和客户满意度。
|
搜索推荐 数据库 UED
CRM系统源码|客户管理系统源码开发
CRM系统通过提供个性化的用户体验、提高生产力、改善客户体验和增加销售额来助力企业成长。集成CRM能自动化数据输入,减少管理时间,提高销售代表的效率。此外,CRM还能增强客户互动,降低跳出率,增加透明度,确保整个公司的协调合作。
392 5
|
机器学习/深度学习 人工智能 运维
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
644 0
|
搜索推荐
实现CRM与ERP系统无缝集成,优化客户关系管理
在当今竞争激烈的市场环境中,企业要想保持领先地位,必须高效地管理客户关系并优化内部资源。CRM(客户关系管理)系统与ERP(企业资源规划)系统的无缝集成,为企业提供了一种强大的工具,以实现这一目标
277 2
|
监控 搜索推荐 数据管理
crm客户管理系统来帮助企业管理和提高运营效率
crm系统帮助企业简化销售流程,提高工作效率。CRM 客户管理系统确实能够在多个方面帮助企业管理和提高运营效率,具体表现如下:
205 3
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的客户关系管理(CRM)
【7月更文挑战第25天】 ERP系统中的客户关系管理(CRM)
1073 3
|
数据挖掘 BI API
简单了解CRM与SaaS系统
本文介绍了CRM(客户关系管理系统)和SaaS(软件即服务)的概念、应用场景、两者之间的关系以及CRM接口的作用和设置流程,强调了SaaS模式为CRM系统提供了灵活、便捷、经济高效的使用方式,以及CRM接口在数据集成、自动化流程、功能扩展和数据分析方面的重要性。
642 0
|
供应链 搜索推荐 数据安全/隐私保护
本土化CRM系统推荐,企业CRM选型必看
在激烈竞争市场中,高效获客与深度运营现有客户至关重要,CRM系统成为企业数字化转型的关键。本文推荐五款优秀国产CRM系统助力企业发展:1、销售易CRM 2、简道云CRM 3、金蝶CRM 4、纷享销客CRM 5、销帮帮CRM

热门文章

最新文章