基于javaweb+mysql的springboot人才求职招聘管理系统(java+springboot+freemarker+jpa+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot人才求职招聘管理系统(java+springboot+freemarker+jpa+mysql)
项目介绍
基于SpringBoot框架开发的求职招聘管理系统。 本项目分三种角色:管理员、招聘人员、求职者。 用户可以以两种身份注册登录,一种是求职者,另一种是招聘者。 求职者可以浏览查询公司信息、职位信息,并且可以填写自己的简历,然后给自己心仪的职位投递简历。招聘者可以填写自己公司的信息,然后进行认证申请, 申请通过后,就可以进行发布职位,接收求职者投递来简历,并且进行审核和通知。 除此之外,该项目还附带后台管理功能,管理员可以登录后台管系统,进行职位类别添加、管理用户信息、通过审核来更改公司、职位的状态等。 项目功能:注册(引入邮箱验证码功能)、登录、修改密码、按条件查询、填写我的简历、填写公司信息、投递简历、发布职位、接收简历等等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 4.数据库:MySql 5.7版本; 5.是否Maven项目:是;
技术栈
SpringBoot + FreeMarker + JPA
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application-dev.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,项目运行成功后,在浏览器中输入网址: http://localhost:8082/home/index/index 访问的是网站首页面 http://localhost:8082/admin/system/login 访问的是后台管理页面
//从session的环境中获取发送邮件的对象
Transport transport = session.getTransport();
//连接邮件服务器
transport.connect("smtp.163.com", 25, username, password);
//设置收件人地址,并发送消息
transport.sendMessage(message, new Address[]{new InternetAddress(receiver)});
transport.close();
} catch (MessagingException e) {
//e.printStackTrace();
for (int i = 0; i < 100; i++) {
//假装邮件发送成功
System.out.println("邮箱验证码为:" + generatorVCode);
}
// return Result.error(CodeMsg.USER_EMAIL_SEND_ERROR);
return Result.success(true);
}
return Result.success(true);
}
}
@Autowired
private WorkShowService workShowService;
@Autowired
private PositionService positionService;
@Autowired
private ResumeService resumeService;
@Autowired
private CompanyService companyService;
/**
* 简历预览页面
* @param model
* @return
*/
@RequestMapping(value="/preview",method=RequestMethod.GET)
public String preview(Model model,HttpServletRequest request,Long user_id){
if(user_id != null) {
model.addAttribute("currentUser", userService.find(user_id));
model.addAttribute("ExpectWork", expectWorkService.findExpectWorkByUserId(user_id));
model.addAttribute("WorkExperience", workExperienceService.findWorkExperienceByUserId(user_id));
model.addAttribute("ProjectExperience", projectExperienceService.findProjectExperienceByUserId(user_id));
model.addAttribute("EducationBackground", educationBackgroundService.findEducationBackgroundByUserId(user_id));
model.addAttribute("WorkShow", workShowService.findWorkShowByUserId(user_id));
}else {
User user = (User) request.getSession().getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
model.addAttribute("currentUser", userService.find(user.getId()));
model.addAttribute("ExpectWork", expectWorkService.findExpectWorkByUserId(user.getId()));
model.addAttribute("WorkExperience", workExperienceService.findWorkExperienceByUserId(user.getId()));
model.addAttribute("ProjectExperience", projectExperienceService.findProjectExperienceByUserId(user.getId()));
model.addAttribute("EducationBackground", educationBackgroundService.findEducationBackgroundByUserId(user.getId()));
model.addAttribute("WorkShow", workShowService.findWorkShowByUserId(user.getId()));
}
return "home/resume/preview";
}
/**
* 我投递的简历页面
* @param model
* @return
*/
/**
* 前端简历管理控制器
*
*/
@RequestMapping("/home/resume")
@Controller
public class HomeResumeController {
@Autowired
private ExpectWorkService expectWorkService;
@Autowired
private UserService userService;
}
}
/**
* 公用的上传类
*
*/
@RequestMapping("/upload")
@Controller
public class UploadController {
@Value("${yjq.upload.photo.sufix}")
private String uploadPhotoSufix;
@Value("${yjq.upload.photo.maxsize}")
private long uploadPhotoMaxSize; //大小1024KB
private String uploadPhotoPath=System.getProperty("user.dir") + "/src/main/resources/upload/";
private Logger log = LoggerFactory.getLogger(UploadController.class);
/**
* 图片统一上传类
* @param photo
* @return
*/
@RequestMapping(value="/upload_photo",method=RequestMethod.POST)
@ResponseBody
public Result<String> uploadPhoto(@RequestParam(name="photo",required=true)MultipartFile photo){
//判断文件类型是否是图片
/**
* 后端用户管理控制器
*
*/
@RequestMapping("/admin/user")
@Controller
public class UserController {
@Autowired
private UserService userService;
@Autowired
ProjectExperience findProjectExperience = projectExperienceService.findProjectExperienceByUserId(session_user.getId());
if(findProjectExperience != null){
//进行修改操作
BeanUtils.copyProperties(projectExperience, findProjectExperience, "id","createTime","updateTime");
if(projectExperienceService.save(findProjectExperience) == null){
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_ERROR);
}
}else {
//进行添加操作
if(projectExperienceService.save(projectExperience) == null){
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_ERROR);
}
}
//更新最后一次修改时间
session_user.setUpdateTime(new Date());
if(userService.save(session_user) == null){
return Result.error(CodeMsg.USER_UPDATE_TIME_ERROR);
}
//把用户权限更新
User new_session_user = userService.find(session_user.getId());
request.getSession().setAttribute(SessionConstant.SESSION_USER_LOGIN_KEY, new_session_user);
return Result.success(true);
}
/**
* 保存教育背景
* @param educationBackground
* @param request
* @return
*/
@RequestMapping(value="/save_education_background",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> saveEducationBackgroundForm(EducationBackground educationBackground,HttpServletRequest request)
{
if(educationBackground == null){
return Result.error(CodeMsg.DATA_ERROR);
}
//检查学校名称是否为空
if(StringUtil.isEmpty(educationBackground.getSchool_name())){
return Result.error(CodeMsg.RESUME_EDUCATION_BACKGROUND_SCHOOL_NAME_EMPTY);
}
//检查专业名称是否为空
if(StringUtil.isEmpty(educationBackground.getMajor())) {
return Result.error(CodeMsg.RESUME_EDUCATION_BACKGROUND_MAJOR_EMPTY);
/**
* 前端用户控制器
*
*/
@RequestMapping("/home/user")
@Controller
public class HomeUserController {
@Autowired
private UserService userService;
/**
* 保存用户信息
* @param user
* @param request
* @return
*/
@RequestMapping(value="/save",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> saveUserForm(User user,HttpServletRequest request)
{
if(user == null){
return Result.error(CodeMsg.DATA_ERROR);
}
if(StringUtil.isEmpty(user.getUsername())) {
return Result.error(CodeMsg.USER_NAME_EMPTY);
}
if(StringUtil.isEmpty(user.getMobile())) {
return Result.error(CodeMsg.USER_MOBILE_EMPTY);
}
if(user.getMobile().length() != 11) {
return Result.error(CodeMsg.USER_MOBILE_NOT_CORRECT);
}
User session_user = (User) request.getSession().getAttribute("user");
User findById = userService.find(session_user.getId());
if(checkUsername(user,findById.getId())){
return Result.error(CodeMsg.USER_NAME_ALREADY_EXIST);
}
BeanUtils.copyProperties(user, findById, "id","createTime","updateTime","content","type","email","password");
findById.setUpdateTime(new Date());
if(userService.save(findById) == null){
return Result.error(CodeMsg.USER_SAVE_ERROR);
}
//更新权限
request.getSession().setAttribute(SessionConstant.SESSION_USER_LOGIN_KEY, userService.find(session_user.getId()));
return Result.success(true);
}
//先让用户填写名称和价值观基本信息
return Result.error(CodeMsg.COMPANY_NAME_AND_VALUE_PRIORITY);
}else {
//进行修改操作
company.setState("待审核");
BeanUtils.copyProperties(company, findCompany, "id","createTime","updateTime","user","name","value","photo","productPhoto","productTitle","productContent","introduction","locale","territory","scale","url","finance","founderName","founderPosition","founderPhoto");
if(companyService.save(findCompany) == null){
return Result.error(CodeMsg.COMPANY_TAGS_SAVE_ERROR);
}
}
return Result.success(true);
}
/**
* 保存公司产品
* @param company
* @param request
* @return
*/
@RequestMapping(value="/save_company_product",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> saveCompanyProduct(Company company,HttpServletRequest request)
{
if(company == null){
return Result.error(CodeMsg.DATA_ERROR);
}
//检测公司产品标题长度
if(company.getProductTitle().length() > 11) {
return Result.error(CodeMsg.COMPANY_PRODUCT_NAME_WORD_OVER);
}
User session_user = (User) request.getSession().getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
Company findCompany = companyService.findByUserId(session_user.getId());
if(findCompany == null) {
//先让用户填写名称和价值观基本信息
return Result.error(CodeMsg.COMPANY_NAME_AND_VALUE_PRIORITY);
}else {
//进行修改操作
if("".equals(company.getProductTitle())) {
company.setProductTitle(null);
}
if("".equals(company.getProductContent())) {
company.setProductContent(null);
}
company.setState("待审核");
BeanUtils.copyProperties(company, findCompany, "id","createTime","updateTime","tags","user","name","value","photo","introduction","locale","territory","scale","url","finance","founderName","founderPosition","founderPhoto");
if(companyService.save(findCompany) == null){
}
//检测公司地点是否为空
if(StringUtil.isEmpty(company.getLocale())) {
return Result.error(CodeMsg.COMPANY_LOCALE_EMPTY);
}
//检测公司领域是否为空
if(StringUtil.isEmpty(company.getTerritory())) {
return Result.error(CodeMsg.COMPANY_TERRITORY_EMPTY);
}
//检测公司规模是否为空
if(StringUtil.isEmpty(company.getScale())) {
return Result.error(CodeMsg.COMPANY_SCALE_EMPTY);
}
//检测公司网址是否为空
if(StringUtil.isEmpty(company.getUrl())) {
return Result.error(CodeMsg.COMPANY_URL_EMPTY);
}
User session_user = (User) request.getSession().getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
Company findCompany = companyService.findByUserId(session_user.getId());
if(findCompany == null) {
//先让用户填写名称和价值观基本信息
return Result.error(CodeMsg.COMPANY_NAME_AND_VALUE_PRIORITY);
}else {
//进行修改操作
company.setState("待审核");
BeanUtils.copyProperties(company, findCompany, "id","createTime","updateTime","user","name","tags","value","photo","productPhoto","productTitle","productContent","introduction","finance","founderName","founderPosition","founderPhoto");
if(companyService.save(findCompany) == null){
return Result.error(CodeMsg.COMPANY_BASIC_SAVE_ERROR);
}
}
return Result.success(true);
}
/**
* 保存公司融资阶段
* @param company
* @param request
* @return
*/
@RequestMapping(value="/save_company_finance",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> saveCompanyFinance(Company company,HttpServletRequest request)
{
if(company == null){
return Result.error(CodeMsg.DATA_ERROR);
}
User session_user = (User) request.getSession().getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
Company findCompany = companyService.findByUserId(session_user.getId());
if(findCompany == null) {
if(expectWork == null){
return Result.error(CodeMsg.DATA_ERROR);
}
User session_user = (User) request.getSession().getAttribute("user");
expectWork.setUser(session_user);
//检查有没有添加过期望工作
ExpectWork findExpectWork = expectWorkService.findExpectWorkByUserId(session_user.getId());
if(findExpectWork != null){
//进行修改操作
BeanUtils.copyProperties(expectWork, findExpectWork, "id","createTime","updateTime");
if(expectWorkService.save(findExpectWork) == null){
return Result.error(CodeMsg.RESUME_EXPECT_WORK_ERROR);
}
}else {
//进行添加操作
if(expectWorkService.save(expectWork) == null){
return Result.error(CodeMsg.RESUME_EXPECT_WORK_ERROR);
}
}
//更新最后一次修改时间
session_user.setUpdateTime(new Date());
if(userService.save(session_user) == null){
return Result.error(CodeMsg.USER_UPDATE_TIME_ERROR);
}
//把用户权限更新
User new_session_user = userService.find(session_user.getId());
request.getSession().setAttribute(SessionConstant.SESSION_USER_LOGIN_KEY, new_session_user);
return Result.success(true);
}
/**
* 保存工作经历信息
* @param workExperience
* @param request
* @return
*/
@RequestMapping(value="/save_work_experience",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> saveWorkExperienceForm(WorkExperience workExperience,HttpServletRequest request)
{
if(workExperience == null){
return Result.error(CodeMsg.DATA_ERROR);
}
return Result.error(validate);
}
//以上判断都通过后,进行判断密码是否正确
if(!findByAdminName.getPassword().equals(admin.getPassword()))
{
return Result.error(CodeMsg.USER_PASSWORD_ERROR);
}
//创建权限
request.getSession().setAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY, findByAdminName);
//添加操作日志
OperaterLog operaterLog = new OperaterLog();
operaterLog.setOperator("【"+findByAdminName.getAdminName()+"】:");
operaterLog.setContent("登录了拉勾网后台管理系统。");
operaterLogService.save(operaterLog);
return Result.success(true);
}
}
/**
* 管理员控制类
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
String requestURI = request.getRequestURI(); //取得被拦截的链接,比如:requestURI=/home/index/index
HttpSession session = request.getSession();
Object attribute = session.getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
if(attribute == null && requestURI.contains("/home/")){
log.info("用户还未登录或者session失效,重定向到登录页面,当前URL=" + requestURI);
//首先判断是否是ajax请求
if(StringUtil.isAjax(request)){
//表示是ajax请求
try {
response.setCharacterEncoding("UTF-8");
//JSON.parseObject,是将Json字符串转化为相应的对象;JSON.toJSONString则是将对象转化为Json字符串。
response.getWriter().write(JSON.toJSONString(CodeMsg.SESSION_EXPIRED));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
//说明是普通的请求,可直接重定向到登录页面
//用户还未登录或者session失效,重定向到登录页面
try {
response.sendRedirect("/home/system/login");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
log.info("该请求符合登录要求,放行" + requestURI);
return true;
}
}
}
//检查邮箱和用户昵称是否有重复
if(checkEmail(user,0l)){
request.getSession().setAttribute("user_register", null); //邮箱输入新的一个,需要重新发验证码确定
return Result.error(CodeMsg.USER_EMAIL_ALREADY_EXIST);
}
if(checkUsername(user,0l)){
return Result.error(CodeMsg.USER_NAME_ALREADY_EXIST);
}
//上面审核都通过后,准备添加数据库
if(userService.save(user) == null)
{
return Result.error(CodeMsg.USER_REGISTER_ERROR);
}
//把验证码权限销毁
request.getSession().setAttribute("user_register", null);
return Result.success(true);
}
//检查有没有重复的email
public boolean checkEmail(User user,Long id)
{
User findByEmail = userService.findByEmail(user.getEmail());
if(findByEmail == null)
return false; //没有重复
if(findByEmail.getId().longValue() == id.longValue())
return false; //没有重复
return true; //有重复
}
//检查有没有重复的username
public boolean checkUsername(User user,Long id)
{
User findByUsername = userService.findByUsername(user.getUsername());
if(findByUsername == null)
return false; //没有重复
if(findByUsername.getId().longValue() == id.longValue())
return false; //没有重复
return true; //有重复
}
}
if(StringUtil.isEmpty(projectExperience.getName())){
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_PROJECT_NAME_EMPTY);
}
//检查职位名称是否为空
if(StringUtil.isEmpty(projectExperience.getPosition())) {
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_POSITION_NAME_EMPTY);
}
//检查开始时间是否为空
if(projectExperience.getStartYear() == null || projectExperience.getStartMonth() == null || "开始年份".equals(projectExperience.getStartYear()) || "开始月份".equals(projectExperience.getStartMonth())) {
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_START_TIME_EMPTY);
}
//检查结束时间是否为空
if(projectExperience.getEndYear() == null || projectExperience.getEndMonth() == null || "结束年份".equals(projectExperience.getEndYear()) || "结束月份".equals(projectExperience.getEndMonth())) {
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_END_TIME_EMPTY);
}
//检查结束时间是否大于开始时间
if(Integer.valueOf(projectExperience.getStartYear()) > Integer.valueOf(projectExperience.getEndYear()) || (projectExperience.getStartYear().equals(projectExperience.getEndYear()) && Integer.valueOf(projectExperience.getStartMonth()) > Integer.valueOf(projectExperience.getEndMonth()))) {
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_TIME_NOT_CORRECT);
}
User session_user = (User) request.getSession().getAttribute("user");
projectExperience.setUser(session_user);
//检查有没有添加过项目经验
ProjectExperience findProjectExperience = projectExperienceService.findProjectExperienceByUserId(session_user.getId());
if(findProjectExperience != null){
//进行修改操作
BeanUtils.copyProperties(projectExperience, findProjectExperience, "id","createTime","updateTime");
if(projectExperienceService.save(findProjectExperience) == null){
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_ERROR);
}
}else {
//进行添加操作
if(projectExperienceService.save(projectExperience) == null){
return Result.error(CodeMsg.RESUME_PROJECT_EXPERIENCE_ERROR);
}
}
//更新最后一次修改时间
session_user.setUpdateTime(new Date());
if(userService.save(session_user) == null){
return Result.error(CodeMsg.USER_UPDATE_TIME_ERROR);
}
//把用户权限更新
User new_session_user = userService.find(session_user.getId());
request.getSession().setAttribute(SessionConstant.SESSION_USER_LOGIN_KEY, new_session_user);
return Result.success(true);
}
/**
* 保存教育背景
* @param educationBackground
* @param request
* @return
*/
@RequestMapping(value="/save_education_background",method=RequestMethod.POST)
/**
* 保存工作经历信息
* @param workExperience
* @param request
* @return
*/
@RequestMapping(value="/save_work_experience",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> saveWorkExperienceForm(WorkExperience workExperience,HttpServletRequest request)
{
if(workExperience == null){
return Result.error(CodeMsg.DATA_ERROR);
}
//检查公司名称是否为空
if(StringUtil.isEmpty(workExperience.getName())){
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_COMPANY_NAME_EMPTY);
}
//检查职位名称是否为空
if(StringUtil.isEmpty(workExperience.getPosition())) {
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_POSITION_NAME_EMPTY);
}
//检查开始时间是否为空
if(workExperience.getStartYear() == null || workExperience.getStartMonth() == null || "开始年份".equals(workExperience.getStartYear()) || "开始月份".equals(workExperience.getStartMonth())) {
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_START_TIME_EMPTY);
}
//检查结束时间是否为空
if(workExperience.getEndYear() == null || workExperience.getEndMonth() == null || "结束年份".equals(workExperience.getEndYear()) || "结束月份".equals(workExperience.getEndMonth())) {
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_END_TIME_EMPTY);
}
//检查结束时间是否大于开始时间
if(Integer.valueOf(workExperience.getStartYear()) > Integer.valueOf(workExperience.getEndYear()) || (workExperience.getStartYear().equals(workExperience.getEndYear()) && Integer.valueOf(workExperience.getStartMonth()) > Integer.valueOf(workExperience.getEndMonth()))) {
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_TIME_NOT_CORRECT);
}
User session_user = (User) request.getSession().getAttribute("user");
workExperience.setUser(session_user);
//检查有没有添加过工作经历
WorkExperience findWorkExperience = workExperienceService.findWorkExperienceByUserId(session_user.getId());
if(findWorkExperience != null){
//进行修改操作
BeanUtils.copyProperties(workExperience, findWorkExperience, "id","createTime","updateTime");
if(workExperienceService.save(findWorkExperience) == null){
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_ERROR);
}
}else {
//进行添加操作
if(workExperienceService.save(workExperience) == null){
return Result.error(CodeMsg.RESUME_WORK_EXPERIENCE_ERROR);
}
}
//更新最后一次修改时间
/**
* 删除职位信息
* @param id
* @param request
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> deletePosition(@RequestParam(name="id",required=true)Long id)
{
try {
List<Resume> findByPositionId = resumeService.findByPositionId(id);
//删除该职位下所有简历
for(Resume resume : findByPositionId)
{
resumeService.delete(resume.getId());
}
positionService.delete(id);
}catch(Exception e) {
e.printStackTrace();
return Result.error(CodeMsg.POSITION_SAVE_ERROR);
}
return Result.success(true);
}
/**
* 更改职位状态信息为下线
* @param id
* @param request
* @return
*/
@RequestMapping(value="/changeStateToOut",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> changeStateToOut(@RequestParam(name="id",required=true)Long id)
{
Position findById = positionService.findById(id);
findById.setState("out");
if(positionService.save(findById) == null){
return Result.error(CodeMsg.POSITION_CHANGE_STATE_TO_OUT_ERROR);
}
return Result.success(true);
}
/**
* 后端用户管理控制器
*
*/
@RequestMapping("/admin/user")
@Controller
public class UserController {