高校就業(yè)管理系統(tǒng)設計與實現(xiàn)
一,項目簡介
在如今社會上,關于信息上面的處理,沒有任何一個企業(yè)或者個人會忽視,如何讓信息急速傳遞,并且歸檔儲存查詢,采用之前的紙張記錄模式已經(jīng)不符合當前使用要求了。所以,對高校就業(yè)信息管理的提升,也為了對高校就業(yè)信息進行更好的維護,高校就業(yè)管理系統(tǒng)的出現(xiàn)就變得水到渠成不可缺少。通過對高校就業(yè)管理系統(tǒng)的開發(fā),不僅僅可以學以致用,讓學到的知識變成成果出現(xiàn),也強化了知識記憶,擴大了知識儲備,是提升自我的一種很好的方法。通過具體的開發(fā),對整個軟件開發(fā)的過程熟練掌握,不論是前期的設計,還是后續(xù)的編碼測試,都有了很深刻的認知。
高校就業(yè)管理系統(tǒng)通過MySQL數(shù)據(jù)庫與Eclipse工具進行開發(fā),高校就業(yè)管理系統(tǒng)能夠?qū)崿F(xiàn)招聘信息管理,簡歷管理,邀請面試管理,簡歷投遞管理,用戶管理,公司管理等功能。
通過高校就業(yè)管理系統(tǒng)對相關信息的處理,讓信息處理變的更加的系統(tǒng),更加的規(guī)范,這是一個必然的結果。已經(jīng)處理好的信息,不管是用來查找,還是分析,在效率上都會成倍的提高,讓計算機變得更加符合生產(chǎn)需要,變成人們不可缺少的一種信息處理工具,實現(xiàn)了綠色辦公,節(jié)省社會資源,為環(huán)境保護也做了力所能及的貢獻。


二,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫:Mysql: mysql5.7
應用服務器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
后臺開發(fā)技術:Springboot+SSM框架
前臺開發(fā)技術:Bootstrap+Jquery+Ajax
三,系統(tǒng)展示
3.1后臺功能詳細設計
3.3.1 公司管理
管理員進入如圖4-1所示的公司管理界面之后,管理員點擊信息顯示欄中最右側的修改,刪除,重置密碼按鈕可依次完成公司信息的修改,刪除,密碼重置等操作,管理員也能在當前界面查詢公司信息,添加公司信息等。

圖3-1 公司管理界面
公司管理的核心代碼如下:
表3-1 公司管理分頁查詢
高校就業(yè)管理系統(tǒng)設計與實現(xiàn)
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);
??? //字典表數(shù)據(jù)轉(zhuǎn)換
??? 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 院系類型管理界面
院系類型管理和招聘崗位功能實現(xiàn)的邏輯基本上都比較相似,此處展示一下院系類型管理的核心代碼作為基礎業(yè)務數(shù)據(jù)的管理代表。
表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);
??? //字典表數(shù)據(jù)轉(zhuǎn)換
??? 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所示的招聘信息管理界面之后,公司點擊信息顯示欄中最右側的修改,刪除,下架,上架按鈕可依次完成招聘信息的修改,刪除,下架,上架等操作。招聘信息包括聯(lián)系人,招聘崗位,招聘人數(shù),薪資待遇等信息。
圖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);
??? //字典表數(shù)據(jù)轉(zhuǎn)換
??? 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;/**
* 通用接口
*/public class CommonController{ private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
private CommonService commonService;
private ConfigService configService;
private static AipFace client = null;
private static String BAIDU_DITU_AK = null;
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
*/
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列表(聯(lián)動接口)
* @return
*/
public R getOption( {
Map<String, Object> params = String tableName, String columnName,String level,String parent)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);
}
/**
* 根據(jù)table中的column獲取單條記錄
* @return
*/
public R getFollowByOption( {
Map<String, Object> params = String tableName, String columnName, String columnValue)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狀態(tài)
* @param map
* @return
*/
public R sh( {
map.put( String tableName, Map<String, Object> map)"table", tableName);
commonService.sh(map); return R.ok();
}
/**
* 獲取需要提醒的記錄數(shù)
* @param tableName
* @param columnName
* @param type 1:數(shù)字 2:日期
* @param map
* @return
*/
public R remindCount( {
map.put( String tableName, String columnName,
String type, Map<String, Object> map)"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);
} /**
* 圖表統(tǒng)計
*/
public R group1( {
params.put( String tableName, Map<String,Object> params)"table1", tableName);
List<Map<String, Object>> result = commonService.chartBoth(params); return R.ok().put("data", result);
}
/**
* 單列求和
*/
public R cal( {
Map<String, Object> params = String tableName, String columnName)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);
}
/**
* 分組統(tǒng)計
*/
public R group( {
Map<String, Object> params = String tableName, String columnName)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);
}
/**
* (按值統(tǒng)計)
*/
public R value( {
Map<String, Object> params = String tableName, String yColumnName, String xColumnName)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 統(tǒng)計字段
* @return
*/
public R newSelectGroupSum( {
logger.debug( Map<String,Object> params)"newSelectGroupSum:,,Controller:{},,params:{}",this.getClass().getName(),params);
List<Map<String, Object>> result = commonService.newSelectGroupSum(params); return R.ok().put("data", result);
} /**
* 查詢字典表的分組統(tǒng)計總條數(shù)
* ?tableName ? 表名
* groupColumn ? 分組字段
* @return
*/
public R newSelectGroupCount( {
logger.debug( Map<String,Object> params)"newSelectGroupCount:,,Controller:{},,params:{}",this.getClass().getName(),params);
List<Map<String, Object>> result = commonService.newSelectGroupCount(params); return R.ok().put("data", result);
} /**
* 當前表的日期分組求和
* tableName ? 表名
* groupColumn ? 分組字段
* sumCloum 統(tǒng)計字段
* dateFormatType 日期格式化類型 ? 1:年 2:月 3:日
* @return
*/
public R newSelectDateGroupSum( {
logger.debug( Map<String,Object> params)"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);
} /**
*
* 查詢字典表的分組統(tǒng)計總條數(shù)
* tableName ? 表名
* groupColumn ? 分組字段
* dateFormatType 日期格式化類型 ? 1:年 2:月 3:日
* @return
*/
public R newSelectDateGroupCount( {
logger.debug( Map<String,Object> params)"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);
}/**
* 餅狀圖
* -- 餅狀圖 ?查詢當前表
-- 查詢字典表【月】
-- 統(tǒng)計 ? -- 查詢某個月的每個類型的訂單銷售數(shù)量
-- 求和 ? -- 查詢某個月的每個類型的訂單銷售額
-- 查詢某個字符串【月】
-- 統(tǒng)計 ? -- 查詢某個月的每個員工的訂單銷售數(shù)量
-- 求和 ? -- 查詢某個月的每個員工的訂單銷售額
-- 查詢時間【年】
-- 統(tǒng)計 -- 查詢每個月的訂單銷售數(shù)量
-- 求和 -- 查詢每個月的訂單銷售額
-- 餅狀圖 ?查詢級聯(lián)表
-- 查詢字典表
-- 統(tǒng)計 ? -- 查詢某個月的每個類型的訂單銷售數(shù)量
-- 求和 ? -- 查詢某個月的每個類型的訂單銷售額
-- 查詢某個字符串
-- 統(tǒng)計 ? -- 查詢某個月的每個員工的訂單銷售數(shù)量
-- 求和 ? -- 查詢某個月的每個員工的訂單銷售額
-- 查詢時間
-- 統(tǒng)計 -- 統(tǒng)計每個月的訂單銷售數(shù)量
-- 求和 -- 查詢每個月的訂單銷售額
*//**
* 柱狀圖
-- 柱狀圖 ?查詢當前表
-- ? ? ? ? ? ? 某個【年,月】
-- 當前表 2 級聯(lián)表 1
-- 統(tǒng)計
-- ? 【日期,字符串,下拉框】
-- 求和
-- ? 【日期,字符串,下拉框】
-- 柱狀圖 ?查詢級聯(lián)表
-- 某個【年,月】
-- 統(tǒng)計
-- ? 【日期,字符串,下拉框】
-- 求和
-- ? 【日期,字符串,下拉框】
*/
? ?/**
? ? * 柱狀圖求和
? ? */
? ?
? ?public R barSum( {
? ? ? ?logger.debug( Map<String,Object> params)"barSum方法:,,Controller:{},,params:{}",this.getClass().getName(), com.alibaba.fastjson.JSONObject.toJSONString(params)); ? ? ? ?Boolean isJoinTableFlag = ?false;//是否有級聯(lián)表相關
? ? ? ?String one = ?"";//第一優(yōu)先
? ? ? ?String two = ?"";//第二優(yōu)先
//處理thisTable和joinTable 處理內(nèi)容是把json字符串轉(zhuǎn)為Map并把帶有,的切割為數(shù)組
//當前表
Map<String,Object> thisTable = JSON.parseObject(String.valueOf(params.get("thisTable")),Map.class);
params.put("thisTable",thisTable); //級聯(lián)表
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){//級聯(lián)表日期
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){//級聯(lián)表字符串
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){//級聯(lián)表類型
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("數(shù)值"); 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);
? ?}
/**
? ? * 柱狀圖統(tǒng)計
? ? */
? ?
? ?public R barCount( {
? ? ? ?logger.debug( Map<String,Object> params)"barCount方法:,,Controller:{},,params:{}",this.getClass().getName(), com.alibaba.fastjson.JSONObject.toJSONString(params)); ? ? ? ?Boolean isJoinTableFlag = ?false;//是否有級聯(lián)表相關
? ? ? ?String one = ?"";//第一優(yōu)先
? ? ? ?String two = ?"";//第二優(yōu)先
//處理thisTable和joinTable 處理內(nèi)容是把json字符串轉(zhuǎn)為Map并把帶有,的切割為數(shù)組
//當前表
Map<String,Object> thisTable = JSON.parseObject(String.valueOf(params.get("thisTable")),Map.class);
params.put("thisTable",thisTable); //級聯(lián)表
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){//級聯(lián)表日期
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){//級聯(lián)表字符串
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){//級聯(lián)表類型
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("數(shù)值"); 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);
? ?}
}
五,項目總結
整個高校就業(yè)管理系統(tǒng)的實現(xiàn)全部圍繞高校學生的就業(yè)業(yè)務流程來進行設計,對于高校學生就業(yè),由高校搭建一個平臺,對接校內(nèi)學生和校外企業(yè),將企業(yè)的招聘需求和校內(nèi)各專業(yè)學生的應聘需求有機的結合在一起,即解決了企業(yè)招聘難的問題,又解決了校內(nèi)應屆生就業(yè)難的難題。企業(yè)方可以登陸本系統(tǒng)進行招聘信息的發(fā)布,學生簡歷的查看,對學生進行而試邀請等等;校內(nèi)學生可以在系統(tǒng)上發(fā)布個人簡歷,查閱企業(yè)信息及招聘信息,并在線投遞簡歷等;而作為校方,是平臺的管理者,可以在系統(tǒng)平臺內(nèi)對相關的企業(yè)信息,招聘信息,學生信息,簡歷信息等進行管理工作。整個系統(tǒng)功能結構完整,頁面操作簡潔大方,業(yè)務流程完整,用戶使用體驗校好。