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

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

一,项目简介


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


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


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

image.png

image.png

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

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

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

三,系统展示


3.1后台功能详细设计


3.3.1 公司管理

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

b19898ad23ea4cf7a06f24a3eea2fb4d.png

图3-1 公司管理界面

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

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

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

3.3.2 用户管理


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

9009641e594c4b8c899df59994ba0020.png

图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所示的院系类型管理界面之后,管理员查看院系类型信息,对院系类型信息进行查询,更改,删除等。493707a0e4e5468bbf219e4bff8510bc.png

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

5e5be04a803441ceb81951a11271ec9d.png

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

3.3.5 招聘信息管理


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

9be18d43df454000922f40c1845634db.png

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

3.3.6 简历投递查看


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

7a9831a7d2504fc7b0a29c03f8340eb9.png

图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);
    }
}

五,项目总结


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

相关文章
|
7月前
互联网行业常见岗位工作内容及发展前景介绍——【大学生就业训练营】系列第二课
系列课程共有八节,下方完成视频课程观看并在评论区回复学习心得,还可以领取惊喜礼品~
432413 1640
|
7月前
|
传感器 人工智能 安全
信管知识梳理(六)信息化发展与应用、信息系统规划和服务管理、首席信息官
我国在“十三五”规划纲要中,将培育人工智能、移动智能终端、5G、先进传感器等作为新一代技术产业创新重点发展,拓展新兴产业发展空间。
176 0
信管知识梳理(六)信息化发展与应用、信息系统规划和服务管理、首席信息官
|
7月前
|
关系型数据库 MySQL 应用服务中间件
高校就业管理系统设计与实现
高校就业管理系统设计与实现
|
数据采集 数据建模 API
系统分析师笔记-信息化与系统集成技术
系统分析师笔记-信息化与系统集成技术
|
数据可视化 数据管理 BI
招聘管理系统综合实践|学习笔记(一)
快速学习招聘管理系统综合实践
招聘管理系统综合实践|学习笔记(一)
|
开发者 容器
招聘管理系统综合实践|学习笔记(二)
快速学习招聘管理系统综合实践
招聘管理系统综合实践|学习笔记(二)
|
数据可视化 数据管理 BI
招聘管理系统综合实践 | 学习笔记
快速学习招聘管理系统综合实践,介绍了招聘管理系统综合实践系统机制, 以及在实际应用过程中如何使用。
招聘管理系统综合实践 | 学习笔记
|
程序员 项目管理
职业发展:要不要转管理岗?
一般复杂问题是没有统一标准答案的,毕竟每个人情况不一样。
144 0
职业发展:要不要转管理岗?
|
人工智能 算法 Java
软件工程专业如何就业!
引言:曾经有两个强盗向他们的大哥说如果世上没有绞刑架该多好,大哥却回答说如果做强盗的代价那么小,人人都去干了,那么行业的竞争压力该有多大啊,正是因为不容易,做的人少,才有去做的价值啊。 在班会的开篇我给大家讲了这样一个故事,我认为人生就是不断地克服困难向上攀登,阻力是不可避免的,定的目标高一些,辛苦一些,当战胜它之后我们会发现这边风景独好。
183 0