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

一,项目简介

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

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

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

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

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

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

三,系统展示

3.1后台功能详细设计

3.3.1 公司管理

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

图3-1 公司管理界面

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

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

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

3.3.2 用户管理

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

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

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

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

3.3.5 招聘信息管理

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

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

3.3.6 简历投递查看

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

图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);@Autowiredprivate CommonService commonService;@Autowiredprivate 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}")@IgnoreAuthpublic 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}")@IgnoreAuthpublic 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}")@IgnoreAuthpublic 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}")@IgnoreAuthpublic 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}")@IgnoreAuthpublic 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}")@IgnoreAuthpublic 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);}
}

五,项目总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/52270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双色球号概率预知程序

说来好笑&#xff0c;自己怎么会抽一个小时做这么一个小程序&#xff0c;可能我是太喜欢买彩票但是老中不了的缘故吧。不过老实说这个程序也帮不了你中双色球&#xff0c;娱乐而已。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <meta…

Python数据分析:双色球的深度学习预测

双色球是福利彩票的一种玩法&#xff0c;已经卖了有很多年。之前在支付宝上app可以买的&#xff0c;每天2块钱很有益身心健康&#xff0c;比LOL有积极意义。对于双色球这门游戏&#xff0c;刚开始买的时候是纯粹靠感觉&#xff0c;后来百度又看到了百度预测&#xff08;虽然尼玛…

.NET Core 使用 ImageSharp 生成图片

前言 ImageSharp是对.NET Core平台扩展的一个图像处理方案&#xff0c;以往网上的案例多以生成文字及画出简单图形、验证码等方式进行探讨和实践。 分享一下所在公司项目的实际应用案例&#xff0c;导出微信二维码图片&#xff0c;圆形头像等等。 一、源码获取 Git项目地址…

高清Apriltag图片生成和制作

近期需要用到Apriltag图像&#xff0c;作者源码给的图像像素太差&#xff0c;无法满足需要。 国内网站相关资料太少&#xff0c;有的作者还要收费&#xff0c;不理解。本来就是开源的东西。本文详细说明如何生成&#xff0c;并免费附上tag36h11 全系列图片下载链接。 1。 生成…

微信小程序生成海报图片导出相册

前言 小程序内通过静态模板和样式绘制 canvas &#xff0c;导出图片&#xff0c;可用于生成分享图等场景 一、效果预览 二、使用步骤 1.安装引入wxml-to-canvas Step1.运行小程序npm安装命令 npm install --save wxml-to-canvasStep2.JSON 组件声明 {"usingComponents…

chatgpt赋能python:Python中打开图片的方法

Python中打开图片的方法 Python是一种高级编程语言&#xff0c;非常流行和使用&#xff0c;因为它具有简单易用、可读性强、适合各种领域等优点。其中&#xff0c;打开图片也是Python中一个非常常见的操作。 在Python中&#xff0c;可以通过几行代码轻松实现打开图片的功能。…

三分钟4行命令构建chatgpt webapp,支持高并发以及上下文对话功能(2)

个人主页:https://yang1he.gitee.io 干货会越来越多的&#xff0c;欢迎来玩 三分钟4行命令构建chatgpt webapp,支持高并发以及上下文对话功能&#xff08;2&#xff09; version2 version1介绍 上下文对话清除历史信息内网公开 version2新增 重复信息自动去重高并发&#xff0c…

客户端突如其来的“白屏”等待该如何解决?

简介&#xff1a;一起由离线包重构引起的“白屏”等待现象的排查和解决案例 ——本文选自《阿里云SRE技术期刊》2021年02月刊 移动端的混合架构模式给 App 开发带来了崭新的空间&#xff0c;通过 H5 构建的业务模块可以实现高效快速的版本迭代&#xff0c;满足多样化的业务需求…

Postman打开一直加载白屏

问题&#xff1a;以前用的好好的&#xff0c;突然有天白屏打不来&#xff0c;一直加载中无响应 1、上网搜教程&#xff0c;环境变量也设置了POSTMAN_DISABLE_GPU、true 2、%appdata%目录下的postman文件也删除了&#xff08;postman未登录的慎删&#xff0c;可以搜教程应该可以…

微信小游戏可视化开发工具

我们来自微信小游戏的一个小团队&#xff0c;我们希望每个人都可以创建自己的小游戏&#xff0c;分享自己的创意&#xff0c;所以我们实现了一个门槛极低的游戏开发工具&#xff0c;在设计的时候我们尽量注意概念简单同时又可以实现各种类型的游戏&#xff0c;当前还是内测阶段…

基于tkinter制作的一个策略小游戏

目录 前言 登录界面 主界面 宣政殿 地图 吏部 兵部 户部 刑部 工部 礼部 御书房 后宫 宗人府 御马监 锦衣卫 司礼监 京城 后记 前言 前年本科毕业时&#xff0c;利用暑假的时间学习了一点tkinter&#xff0c;当时比较痴迷《君成录》、《皇帝成长计划》等策略养成…

AI绘画初体验(6pen平台)

最近AI绘画似乎很火热&#xff0c;今天体验了AI绘画。 使用平台&#xff1a;6pen 似乎对幻想出来的图片效果不是很好&#xff0c;而对语言简练、写实的图片效果很棒&#xff01; 展示&#xff1a; 1 宇航员在火星上&#xff0c;坐着椅子下象棋&#xff0c;背景是远处的地球 2 …

【回答问题】ChatGPT上线了!给我推荐20个比较流行的AI作画模型!

目录 给我推荐20个比较流行的AI作画模型给我推荐20个比较流行的AI作画模型代码给我推荐20个比较流行的AI作画模型 好的,下面是20个比较流行的AI作画模型: DALL-E GAN Deep Dream CycleGAN StyleGAN pix2pix SketchRNN BigGAN ProGAN ESRGAN SPADE BigVAE StackGAN VQ-VAE 3…

AI绘画——ChilloutMix模型(现实真人,实现写实逼真的图像)

目录 重要提示&#xff1a;首先&#xff0c;我从不建议再生“真实”人物的图像&#xff0c; 但是&#xff0c;照片“逼真”图像。 本人郑重声明&#xff1a;本模型原则上禁止用于训练基于明星、公众人物肖像的风格模型训练&#xff0c;因为这会带来争议&#xff0c;对AI社区…

ai绘画软件“数画”上线元宇宙真人虚拟头像,技术远超国外

近日&#xff0c;国内AI绘画应用软件“数画”官方发布一条公告&#xff0c;引起整个AI绘画业界的轰动。公告显示“数画”上线真人元宇宙AI虚拟头像制作功能,并于2022年11月18日开始为画友正式投入服役。此种技术仅需几秒就可以将自已的照片或用手机自拍AI绘画成元宇宙中你的样子…

计算机英语ppt演讲稿,英语ppt演讲稿

英语ppt演讲稿 英语ppt演讲稿(1) Hello everybody, I am glad to have this opportunity to stand here and we communicate, we all know both sides of the same coin have, and we also have both positive and negative life: bright, happy, happy, hope, etc. This repre…

详解Docker!

&#xff08;永久免费&#xff0c;扫码加入&#xff09; 来源丨网络 本次分享Docker学习教程&#xff0c;有点长&#xff5e; 目录 1 容器简介1.1 什么是 Linux 容器1.2 容器不就是虚拟化吗1.3 容器发展简史2 什么是 Docker&#xff1f;2.1 Docker 如何工作&#xff1f;2.2 Doc…

chatgpt赋能python:Python怎么建服务器?

Python怎么建服务器&#xff1f; 作为一名具有10年Python编程经验的工程师&#xff0c;我深入研究了Python的一些高级特性&#xff0c;其中包括Python如何建立服务器的方法。Python是一个高级的编程语言&#xff0c;可以轻松创建服务器应用程序&#xff0c;并为您的网站提供高…

通过Java代码的方式将jar包以及快照上传至nexus上,通过与chatgpt对话的方式完成

通过Java代码的方式将jar包以及快照上传至nexus上 release库snapshots库 与chatgpt的对话 release库 release库的直接在nexus页面上找接口就可以&#xff0c;通过restTemplate调用即可成功 import org.springframework.core.io.FileSystemResource; import org.springframewo…

chrome插件推荐

chrome插件推荐 chrome的一些插件, 真的能很大程度上提升我们的工作效率。而且chrome的插件极其丰富, 基本你想要的功能,都能找到对应的插件&#xff0c;接下来给大家推荐几个我自己在用的。 插件 1、Momentum 新标签页 简介: 超漂亮的新标签页面。每日更新精彩背景壁纸图片&…