开发者社区> 编程指南针> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

高校就业管理系统设计与实现

简介: 高校就业管理系统通过MySQL数据库与Eclipse工具进行开发,高校就业管理系统能够实现招聘信息管理,简历管理,邀请面试管理,简历投递管理,用户管理,公司管理等功能。 通过高校就业管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。
+关注继续查看

一,项目简介

在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对高校就业信息管理的提升,也为了对高校就业信息进行更好的维护,高校就业管理系统的出现就变得水到渠成不可缺少。通过对高校就业管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。

高校就业管理系统通过MySQL数据库与Eclipse工具进行开发,高校就业管理系统能够实现招聘信息管理,简历管理,邀请面试管理,简历投递管理,用户管理,公司管理等功能。

通过高校就业管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。

imageimage.gif编辑

imageimage.gif编辑

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+SSM框架

前台开发技术:Bootstrap+Jquery+Ajax

三,系统展示

3.1后台功能详细设计

3.3.1 公司管理

管理员进入如图4-1所示的公司管理界面之后,管理员点击信息显示栏中最右侧的修改,删除,重置密码按钮可依次完成公司信息的修改,删除,密码重置等操作,管理员也能在当前界面查询公司信息,添加公司信息等。

imageimage.gif编辑

图3-1 公司管理界面

公司管理的核心代码如下:

表3-1 公司管理分页查询

高校就业管理系统设计与实现

3.3.2 用户管理

管理员进入如图4-2所示的用户管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成用户信息的修改,删除等操作,管理员在当前界面也能添加用户,查询用户。

imageimage.gif编辑

图3-2 用户管理界面

用户管理模块的核心代码如下:

表3-2 用户管理分页查询

@RequestMapping("/page")

public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
   
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    String role = String.valueOf(request.getSession().getAttribute(
"role"));
   
if(StringUtil.isEmpty(role))
       
return R.error(511,"权限为空");
   
else if("用户".equals(role))
        params.put(
"yonghuId",request.getSession().getAttribute("userId"));
   
else if("公司".equals(role))
        params.put(
"gongsiId",request.getSession().getAttribute("userId"));
   
if(params.get("orderBy")==null || params.get("orderBy")==""){
        params.put(
"orderBy","id");
    }
    PageUtils page =
yonghuService.queryPage(params);

   
//字典表数据转换

    List<YonghuView> list =(List<YonghuView>)page.getList();
   
for(YonghuView c:list){
       
//修改对应字典表字段

        dictionaryService.dictionaryConvert(c, request);
    }
   
return R.ok().put("data", page);
}

3.3.3 院系类型管理

管理员进入如图4-3所示的院系类型管理界面之后,管理员查看院系类型信息,对院系类型信息进行查询,更改,删除等。

imageimage.gif编辑

图3-3 院系类型管理界面

院系类型管理和招聘岗位功能实现的逻辑基本上都比较相似,此处展示一下院系类型管理的核心代码作为基础业务数据的管理代表。

表3-3 院系类型管理代码

/**
*
后端列表

*/

@RequestMapping("/page")

@IgnoreAuth

public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
   
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
   
if(params.get("orderBy")==null || params.get("orderBy")==""){
        params.put(
"orderBy","id");
    }
    PageUtils page =
dictionaryService.queryPage(params);

   
//字典表数据转换

    List<DictionaryView> list =(List<DictionaryView>)page.getList();
   
for(DictionaryView c:list){
       
//修改对应字典表字段

        dictionaryService.dictionaryConvert(c, request);
    }
   
return R.ok().put("data", page);
}

3.3.4 招聘岗位管理

管理员进入如图4-4所示的招聘岗位管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成招聘岗位信息的修改,删除操作,管理员在本界面也能查询招聘岗位信息,添加招聘岗位信息等。

imageimage.gif编辑

图3-4 招聘岗位管理界面

3.3.5 招聘信息管理

公司进入如图4-5所示的招聘信息管理界面之后,公司点击信息显示栏中最右侧的修改,删除,下架,上架按钮可依次完成招聘信息的修改,删除,下架,上架等操作。招聘信息包括联系人,招聘岗位,招聘人数,薪资待遇等信息。

imageimage.gif编辑

图3-5 招聘信息管理界面

3.3.6 简历投递查看

公司进入如图4-6所示的简历投递查看界面之后,公司点击信息显示栏右侧的详情按钮即可对简历投递信息进行线上查看。

imageimage.gif编辑

图3-6 简历投递查看界面

简历投递查看功能的核心代码如下:

表3-4 简历投递查看管理代码

@RequestMapping("/page")

public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
   
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    String role = String.valueOf(request.getSession().getAttribute(
"role"));
   
if(StringUtil.isEmpty(role))
       
return R.error(511,"权限为空");
   
else if("用户".equals(role))
        params.put(
"yonghuId",request.getSession().getAttribute("userId"));
   
else if("公司".equals(role))
        params.put(
"gongsiId",request.getSession().getAttribute("userId"));
   
if(params.get("orderBy")==null || params.get("orderBy")==""){
        params.put(
"orderBy","id");
    }
    PageUtils page =
jianliService.queryPage(params);

   
//字典表数据转换

    List<JianliView> list =(List<JianliView>)page.getList();
   
for(JianliView c:list){
       
//修改对应字典表字段

        dictionaryService.dictionaryConvert(c, request);
    }
   
return R.ok().put("data", page);
}

四,核心代码展示

package com.controller;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSON;
import com.utils.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;
/**
 * 通用接口
 */
@RestController
public class CommonController{
    private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
    @Autowired
    private CommonService commonService;
    
    @Autowired
    private ConfigService configService;
    
    private static AipFace client = null;
    
    private static String BAIDU_DITU_AK = null;
    
    @RequestMapping("/location")
    public R location(String lng,String lat) {
        if(BAIDU_DITU_AK==null) {
            BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue();
            if(BAIDU_DITU_AK==null) {
                return R.error("请在配置管理中正确配置baidu_ditu_ak");
            }
        }
        Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat);
        return R.ok().put("data", map);
    }
    
    /**
     * 人脸比对
     * 
     * @param face1 人脸1
     * @param face2 人脸2
     * @return
     */
    @RequestMapping("/matchFace")
    public R matchFace(String face1, String face2, HttpServletRequest request) {
        if(client==null) {
            /*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/
            String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();
            String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();
            String token = BaiduUtil.getAuth(APIKey, SecretKey);
            if(token==null) {
                return R.error("请在配置管理中正确配置APIKey和SecretKey");
            }
            client = new AipFace(null, APIKey, SecretKey);
            client.setConnectionTimeoutInMillis(2000);
            client.setSocketTimeoutInMillis(60000);
        }
        JSONObject res = null;
        try {
            File file1 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face1);
            File file2 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face2);
            String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
            String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
            MatchRequest req1 = new MatchRequest(img1, "BASE64");
            MatchRequest req2 = new MatchRequest(img2, "BASE64");
            ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
            requests.add(req1);
            requests.add(req2);
            res = client.match(requests);
            System.out.println(res.get("result"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return R.error("文件不存在");
        } catch (IOException e) {
            e.printStackTrace();
        } 
        return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));
    }
    
    /**
     * 获取table表中的column列表(联动接口)
     * @return
     */
    @RequestMapping("/option/{tableName}/{columnName}")
    @IgnoreAuth
    public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("table", tableName);
        params.put("column", columnName);
        if(StringUtils.isNotBlank(level)) {
            params.put("level", level);
        }
        if(StringUtils.isNotBlank(parent)) {
            params.put("parent", parent);
        }
        List<String> data = commonService.getOption(params);
        return R.ok().put("data", data);
    }
    
    /**
     * 根据table中的column获取单条记录
     * @return
     */
    @RequestMapping("/follow/{tableName}/{columnName}")
    @IgnoreAuth
    public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("table", tableName);
        params.put("column", columnName);
        params.put("columnValue", columnValue);
        Map<String, Object> result = commonService.getFollowByOption(params);
        return R.ok().put("data", result);
    }
    
    /**
     * 修改table表的sfsh状态
     * @param map
     * @return
     */
    @RequestMapping("/sh/{tableName}")
    public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
        map.put("table", tableName);
        commonService.sh(map);
        return R.ok();
    }
    
    /**
     * 获取需要提醒的记录数
     * @param tableName
     * @param columnName
     * @param type 1:数字 2:日期
     * @param map
     * @return
     */
    @RequestMapping("/remind/{tableName}/{columnName}/{type}")
    @IgnoreAuth
    public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, 
                         @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
        map.put("table", tableName);
        map.put("column", columnName);
        map.put("type", type);
        
        if(type.equals("2")) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Calendar c = Calendar.getInstance();
            Date remindStartDate = null;
            Date remindEndDate = null;
            if(map.get("remindstart")!=null) {
                Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
                c.setTime(new Date()); 
                c.add(Calendar.DAY_OF_MONTH,remindStart);
                remindStartDate = c.getTime();
                map.put("remindstart", sdf.format(remindStartDate));
            }
            if(map.get("remindend")!=null) {
                Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
                c.setTime(new Date());
                c.add(Calendar.DAY_OF_MONTH,remindEnd);
                remindEndDate = c.getTime();
                map.put("remindend", sdf.format(remindEndDate));
            }
        }
        
        int count = commonService.remindCount(map);
        return R.ok().put("count", count);
    }
    /**
     * 圖表统计
     */
    @IgnoreAuth
    @RequestMapping("/group/{tableName}")
    public R group1(@PathVariable("tableName") String tableName, @RequestParam Map<String,Object> params) {
        params.put("table1", tableName);
        List<Map<String, Object>> result = commonService.chartBoth(params);
        return R.ok().put("data", result);
    }
    
    /**
     * 单列求和
     */
    @RequestMapping("/cal/{tableName}/{columnName}")
    @IgnoreAuth
    public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("table", tableName);
        params.put("column", columnName);
        Map<String, Object> result = commonService.selectCal(params);
        return R.ok().put("data", result);
    }
    
    /**
     * 分组统计
     */
    @RequestMapping("/group/{tableName}/{columnName}")
    @IgnoreAuth
    public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("table", tableName);
        params.put("column", columnName);
        List<Map<String, Object>> result = commonService.selectGroup(params);
        return R.ok().put("data", result);
    }
    
    /**
     * (按值统计)
     */
    @RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
    @IgnoreAuth
    public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("table", tableName);
        params.put("xColumn", xColumnName);
        params.put("yColumn", yColumnName);
        List<Map<String, Object>> result = commonService.selectValue(params);
        return R.ok().put("data", result);
    }
    /**
     * 下面为新加的
     *
     *
     *
     */
    /**
     * 查询字典表的分组求和
     * tableName        表名
     * groupColumn          分组字段
     * sumCloum         统计字段
     * @return
     */
    @RequestMapping("/newSelectGroupSum")
    public R newSelectGroupSum(@RequestParam Map<String,Object> params) {
        logger.debug("newSelectGroupSum:,,Controller:{},,params:{}",this.getClass().getName(),params);
        List<Map<String, Object>> result = commonService.newSelectGroupSum(params);
        return R.ok().put("data", result);
    }
    /**
     * 查询字典表的分组统计总条数
     *  tableName       表名
     *  groupColumn     分组字段
     * @return
     */
    @RequestMapping("/newSelectGroupCount")
    public R newSelectGroupCount(@RequestParam Map<String,Object> params) {
        logger.debug("newSelectGroupCount:,,Controller:{},,params:{}",this.getClass().getName(),params);
        List<Map<String, Object>> result = commonService.newSelectGroupCount(params);
        return R.ok().put("data", result);
    }
    /**
     * 当前表的日期分组求和
     * tableName        表名
     * groupColumn          分组字段
     * sumCloum         统计字段
     * dateFormatType   日期格式化类型   1:年 2:月 3:日
     * @return
     */
    @RequestMapping("/newSelectDateGroupSum")
    public R newSelectDateGroupSum(@RequestParam Map<String,Object> params) {
        logger.debug("newSelectDateGroupSum:,,Controller:{},,params:{}",this.getClass().getName(),params);
        String dateFormatType = String.valueOf(params.get("dateFormatType"));
        if("1".equals(dateFormatType)){
            params.put("dateFormat", "%Y");
        }else if("2".equals(dateFormatType)){
            params.put("dateFormat", "%Y-%m");
        }else if("3".equals(dateFormatType)){
            params.put("dateFormat", "%Y-%m-%d");
        }else{
            R.error("日期格式化不正确");
        }
        List<Map<String, Object>> result = commonService.newSelectDateGroupSum(params);
        return R.ok().put("data", result);
    }
    /**
     *
     * 查询字典表的分组统计总条数
     * tableName        表名
     * groupColumn          分组字段
     * dateFormatType   日期格式化类型   1:年 2:月 3:日
     * @return
     */
    @RequestMapping("/newSelectDateGroupCount")
    public R newSelectDateGroupCount(@RequestParam Map<String,Object> params) {
        logger.debug("newSelectDateGroupCount:,,Controller:{},,params:{}",this.getClass().getName(),params);
        String dateFormatType = String.valueOf(params.get("dateFormatType"));
        if("1".equals(dateFormatType)){
            params.put("dateFormat", "%Y");
        }else if("2".equals(dateFormatType)){
            params.put("dateFormat", "%Y-%m");
        }else if("3".equals(dateFormatType)){
            params.put("dateFormat", "%Y-%m-%d");
        }else{
            R.error("日期格式化类型不正确");
        }
        List<Map<String, Object>> result = commonService.newSelectDateGroupCount(params);
        return R.ok().put("data", result);
    }
/**
 * 饼状图
 * -- 饼状图  查询当前表
 --                 查询字典表【月】
 --                  统计   -- 查询某个月的每个类型的订单销售数量
 --                  求和   -- 查询某个月的每个类型的订单销售额
 --                 查询某个字符串【月】
 --                  统计   -- 查询某个月的每个员工的订单销售数量
 --                  求和   -- 查询某个月的每个员工的订单销售额
 --                 查询时间【年】
 --                  统计     -- 查询每个月的订单销售数量
 --                  求和     -- 查询每个月的订单销售额
 -- 饼状图  查询级联表
 --                 查询字典表
 --                  统计     -- 查询某个月的每个类型的订单销售数量
 --                  求和   -- 查询某个月的每个类型的订单销售额
 --                 查询某个字符串
 --                  统计   -- 查询某个月的每个员工的订单销售数量
 --                  求和   -- 查询某个月的每个员工的订单销售额
 --                 查询时间
 --                  统计     -- 统计每个月的订单销售数量
 --                  求和     -- 查询每个月的订单销售额
 */
/**
 * 柱状图
 -- 柱状图  查询当前表
 --             某个【年,月】
 --              当前表 2 级联表 1
 --                         统计
 --                         【日期,字符串,下拉框】
 --                         求和
 --                         【日期,字符串,下拉框】
 -- 柱状图  查询级联表
 --                     某个【年,月】
 --                         统计
 --                         【日期,字符串,下拉框】
 --                         求和
 --                         【日期,字符串,下拉框】
 */
    /**
     * 柱状图求和
     */
    @RequestMapping("/barSum")
    public R barSum(@RequestParam Map<String,Object> params) {
        logger.debug("barSum方法:,,Controller:{},,params:{}",this.getClass().getName(), com.alibaba.fastjson.JSONObject.toJSONString(params));
        Boolean isJoinTableFlag =  false;//是否有级联表相关
        String one =  "";//第一优先
        String two =  "";//第二优先
        //处理thisTable和joinTable 处理内容是把json字符串转为Map并把带有,的切割为数组
            //当前表
            Map<String,Object> thisTable = JSON.parseObject(String.valueOf(params.get("thisTable")),Map.class);
            params.put("thisTable",thisTable);
            //级联表
            String joinTableString = String.valueOf(params.get("joinTable"));
            if(StringUtil.isNotEmpty(joinTableString)) {
                Map<String, Object> joinTable = JSON.parseObject(joinTableString, Map.class);
                params.put("joinTable", joinTable);
                isJoinTableFlag = true;
            }
        if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("date")))){//当前表日期
            thisTable.put("date",String.valueOf(thisTable.get("date")).split(","));
            one = "thisDate0";
        }
        if(isJoinTableFlag){//级联表日期
            Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
            if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("date")))){
                joinTable.put("date",String.valueOf(joinTable.get("date")).split(","));
                if(StringUtil.isEmpty(one)){
                    one ="joinDate0";
                }else{
                    if(StringUtil.isEmpty(two)){
                        two ="joinDate0";
                    }
                }
            }
        }
        if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("string")))){//当前表字符串
            thisTable.put("string",String.valueOf(thisTable.get("string")).split(","));
            if(StringUtil.isEmpty(one)){
                one ="thisString0";
            }else{
                if(StringUtil.isEmpty(two)){
                    two ="thisString0";
                }
            }
        }
        if(isJoinTableFlag){//级联表字符串
            Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
            if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("string")))){
                joinTable.put("string",String.valueOf(joinTable.get("string")).split(","));
                if(StringUtil.isEmpty(one)){
                    one ="joinString0";
                }else{
                    if(StringUtil.isEmpty(two)){
                        two ="joinString0";
                    }
                }
            }
        }
        if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("types")))){//当前表类型
            thisTable.put("types",String.valueOf(thisTable.get("types")).split(","));
            if(StringUtil.isEmpty(one)){
                one ="thisTypes0";
            }else{
                if(StringUtil.isEmpty(two)){
                    two ="thisTypes0";
                }
            }
        }
        if(isJoinTableFlag){//级联表类型
            Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
            if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("types")))){
                joinTable.put("types",String.valueOf(joinTable.get("types")).split(","));
                if(StringUtil.isEmpty(one)){
                    one ="joinTypes0";
                }else{
                    if(StringUtil.isEmpty(two)){
                        two ="joinTypes0";
                    }
                }
            }
        }
        List<Map<String, Object>> result = commonService.barSum(params);
        List<String> xAxis = new ArrayList<>();//报表x轴
        List<List<String>> yAxis = new ArrayList<>();//y轴
        List<String> legend = new ArrayList<>();//标题
        if(StringUtil.isEmpty(two)){//不包含第二列
            List<String> yAxis0 = new ArrayList<>();
            yAxis.add(yAxis0);
            legend.add("数值");
            for(Map<String, Object> map :result){
                String oneValue = String.valueOf(map.get(one));
                String value = String.valueOf(map.get("value"));
                xAxis.add(oneValue);
                yAxis0.add(value);
            }
        }else{//包含第二列
            Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
            if(StringUtil.isNotEmpty(two)){
                for(Map<String, Object> map :result){
                    String oneValue = String.valueOf(map.get(one));
                    String twoValue = String.valueOf(map.get(two));
                    String value = String.valueOf(map.get("value"));
                    if(!legend.contains(twoValue)){
                        legend.add(twoValue);//添加完成后 就是最全的第二列的类型
                    }
                    if(dataMap.containsKey(oneValue)){
                        dataMap.get(oneValue).put(twoValue,value);
                    }else{
                        HashMap<String, String> oneData = new HashMap<>();
                        oneData.put(twoValue,value);
                        dataMap.put(oneValue,oneData);
                    }
                }
            }
            for(int i =0; i<legend.size(); i++){
                yAxis.add(new ArrayList<String>());
            }
            Set<String> keys = dataMap.keySet();
            for(String key:keys){
                xAxis.add(key);
                HashMap<String, String> map = dataMap.get(key);
                for(int i =0; i<legend.size(); i++){
                    List<String> data = yAxis.get(i);
                    if(StringUtil.isNotEmpty(map.get(legend.get(i)))){
                        data.add(map.get(legend.get(i)));
                    }else{
                        data.add("0");
                    }
                }
            }
            System.out.println();
        }
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("xAxis",xAxis);
        resultMap.put("yAxis",yAxis);
        resultMap.put("legend",legend);
        return R.ok().put("data", resultMap);
    }
    
    /**
     * 柱状图统计
     */
    @RequestMapping("/barCount")
    public R barCount(@RequestParam Map<String,Object> params) {
        logger.debug("barCount方法:,,Controller:{},,params:{}",this.getClass().getName(), com.alibaba.fastjson.JSONObject.toJSONString(params));
        Boolean isJoinTableFlag =  false;//是否有级联表相关
        String one =  "";//第一优先
        String two =  "";//第二优先
        //处理thisTable和joinTable 处理内容是把json字符串转为Map并把带有,的切割为数组
            //当前表
            Map<String,Object> thisTable = JSON.parseObject(String.valueOf(params.get("thisTable")),Map.class);
            params.put("thisTable",thisTable);
            //级联表
            String joinTableString = String.valueOf(params.get("joinTable"));
            if(StringUtil.isNotEmpty(joinTableString)) {
                Map<String, Object> joinTable = JSON.parseObject(joinTableString, Map.class);
                params.put("joinTable", joinTable);
                isJoinTableFlag = true;
            }
        if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("date")))){//当前表日期
            thisTable.put("date",String.valueOf(thisTable.get("date")).split(","));
            one = "thisDate0";
        }
        if(isJoinTableFlag){//级联表日期
            Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
            if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("date")))){
                joinTable.put("date",String.valueOf(joinTable.get("date")).split(","));
                if(StringUtil.isEmpty(one)){
                    one ="joinDate0";
                }else{
                    if(StringUtil.isEmpty(two)){
                        two ="joinDate0";
                    }
                }
            }
        }
        if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("string")))){//当前表字符串
            thisTable.put("string",String.valueOf(thisTable.get("string")).split(","));
            if(StringUtil.isEmpty(one)){
                one ="thisString0";
            }else{
                if(StringUtil.isEmpty(two)){
                    two ="thisString0";
                }
            }
        }
        if(isJoinTableFlag){//级联表字符串
            Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
            if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("string")))){
                joinTable.put("string",String.valueOf(joinTable.get("string")).split(","));
                if(StringUtil.isEmpty(one)){
                    one ="joinString0";
                }else{
                    if(StringUtil.isEmpty(two)){
                        two ="joinString0";
                    }
                }
            }
        }
        if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("types")))){//当前表类型
            thisTable.put("types",String.valueOf(thisTable.get("types")).split(","));
            if(StringUtil.isEmpty(one)){
                one ="thisTypes0";
            }else{
                if(StringUtil.isEmpty(two)){
                    two ="thisTypes0";
                }
            }
        }
        if(isJoinTableFlag){//级联表类型
            Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
            if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("types")))){
                joinTable.put("types",String.valueOf(joinTable.get("types")).split(","));
                if(StringUtil.isEmpty(one)){
                    one ="joinTypes0";
                }else{
                    if(StringUtil.isEmpty(two)){
                        two ="joinTypes0";
                    }
                }
            }
        }
        List<Map<String, Object>> result = commonService.barCount(params);
        List<String> xAxis = new ArrayList<>();//报表x轴
        List<List<String>> yAxis = new ArrayList<>();//y轴
        List<String> legend = new ArrayList<>();//标题
        if(StringUtil.isEmpty(two)){//不包含第二列
            List<String> yAxis0 = new ArrayList<>();
            yAxis.add(yAxis0);
            legend.add("数值");
            for(Map<String, Object> map :result){
                String oneValue = String.valueOf(map.get(one));
                String value = String.valueOf(map.get("value"));
                xAxis.add(oneValue);
                yAxis0.add(value);
            }
        }else{//包含第二列
            Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
            if(StringUtil.isNotEmpty(two)){
                for(Map<String, Object> map :result){
                    String oneValue = String.valueOf(map.get(one));
                    String twoValue = String.valueOf(map.get(two));
                    String value = String.valueOf(map.get("value"));
                    if(!legend.contains(twoValue)){
                        legend.add(twoValue);//添加完成后 就是最全的第二列的类型
                    }
                    if(dataMap.containsKey(oneValue)){
                        dataMap.get(oneValue).put(twoValue,value);
                    }else{
                        HashMap<String, String> oneData = new HashMap<>();
                        oneData.put(twoValue,value);
                        dataMap.put(oneValue,oneData);
                    }
                }
            }
            for(int i =0; i<legend.size(); i++){
                yAxis.add(new ArrayList<String>());
            }
            Set<String> keys = dataMap.keySet();
            for(String key:keys){
                xAxis.add(key);
                HashMap<String, String> map = dataMap.get(key);
                for(int i =0; i<legend.size(); i++){
                    List<String> data = yAxis.get(i);
                    if(StringUtil.isNotEmpty(map.get(legend.get(i)))){
                        data.add(map.get(legend.get(i)));
                    }else{
                        data.add("0");
                    }
                }
            }
            System.out.println();
        }
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("xAxis",xAxis);
        resultMap.put("yAxis",yAxis);
        resultMap.put("legend",legend);
        return R.ok().put("data", resultMap);
    }
}

image.gif

五,项目总结

整个高校就业管理系统的实现全部围绕高校学生的就业业务流程来进行设计,对于高校学生就业,由高校搭建一个平台,对接校内学生和校外企业,将企业的招聘需求和校内各专业学生的应聘需求有机的结合在一起,即解决了企业招聘难的问题,又解决了校内应届生就业难的难题。企业方可以登陆本系统进行招聘信息的发布,学生简历的查看,对学生进行而试邀请等等;校内学生可以在系统上发布个人简历,查阅企业信息及招聘信息,并在线投递简历等;而作为校方,是平台的管理者,可以在系统平台内对相关的企业信息,招聘信息,学生信息,简历信息等进行管理工作。整个系统功能结构完整,页面操作简洁大方,业务流程完整,用户使用体验校好。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SSM实现会议室预约管理系统
为客户开发的会议室预约系统,基于SSM框架,权限管理使用Shiro框架。用户权限分为普通用户和管理员。普通用户可以申请会议室使用,也可以取消申请。管理员可以管理会议室(包括会议室信息的增删改查)和处理普通用户的会议室申请,也可以管理用户信息等。
75 0
房屋出租系统设计与实现
房屋出租系统设计与实现
37 0
数仓建模—埋点设计与管理
开始之前我们先看一下我们为什么要收集埋点数据,埋点都可以做什么,埋点主要用于记录用户行为,几乎是应用必不可少的功能.埋点的作用包括但不限于
253 0
高校学生考勤管理系统设计
目前设计的这个基于RFID的学生考勤管理系统,采用C++作为编程语言,Qt作为整体UI软件框架,数据库采用SQLite,在设计这个考勤系统前,在互联网上进行了广泛搜索,找到了很多案例,发现很多考勤管理系统,操作流程和管理行也存在一些问题,本系统在结合其他软件的优点后,去除了一些不需要的模块,设计出一款全新的考勤管理系统。
145 0
基于JAVA宠物管理系统的设计与实现
基于JAVA宠物管理系统的设计与实现
227 0
EasyUI+JavaWeb奖助学金管理系统[15]-人员管理功能实现
本文目录 1. 本章任务 2. 人员分页浏览的实现 3. 人员新增功能的实现 3. 人员编辑功能的实现 4. 人员删除功能的实现 5. 本章完整源代码 5.1 userManager.html 5.2 CoreServlet.java 5.3 UserDao.java 6. 总结
65 0
EasyUI+JavaWeb奖助学金管理系统[11]-编辑与删除项目的实现
本文目录 1. 本章任务 2. 添加编辑按钮 3. 添加编辑弹窗 4. 点击编辑后弹窗加载当前信息 5. 点击保存后提交表单 6. 后端执行编辑保存 7. 测试
23 0
企业供应链管理为什么要“上云”?
企业供应链管理为什么要“上云”?
970 0
建站篇-用户管理系统-管理员后台
首先创建控制器php artisan make:controller Admin\User\UserController --resource 然后注册路由Route::resource('user','Admin\User\UserController'); 这个路由声明包含了处理用户资源 RESTful 动作的多个路由,相应地,Artisan 生成的控制器也已经为这些动作设置了对应的处理方法。
642 0
记大型商业软件<<国土档案管理信息系统>>之系统简介
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/6707791   记大型商业软件 之系统简介 ——通过知识共享树立个人品牌。
872 0
+关注
编程指南针
作者简介:阿里云特邀作者、Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、CSDN名师课堂讲师、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助
138
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载