✨作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目
一、前言
随着社会的发展,支教志愿者活动越来越受到关注。传统的支教志愿者招聘方式存在着信息不透明、流程繁琐等问题,给招募方和志愿者带来了很大的不便。因此,开发一款便捷的支教志愿者招聘系统具有重要的现实意义。
本课题旨在设计并实现一款基于Java技术的支教志愿者招聘系统,以满足现代支教志愿者招聘的需求。该系统将采用B/S架构,用户可以通过浏览器访问系统,实现对支援学校信息、简历投递、职位招聘信息等功能的实时监控和管理。通过职位招聘信息管理、简历投递管理、支援学校信息管理等功能模块的设计,提高支教志愿者招聘的效率和质量,增进支教志愿者活动的信息化建设。
本课题的研究目的是开发一款支教志愿者招聘系统,利用信息化技术提高招募效率和质量。该系统将具备以下功能:
线上招募:通过系统发布招募信息,扩大宣传范围,吸引更多的志愿者参与;
简历筛选:系统对申请人进行简历筛选,节省人工筛选的时间和精力;
志愿者管理:系统对志愿者进行信息化管理,包括个人信息、服务记录等。
通过这些功能,该系统能够提高支教志愿者的招募和管理效率,为偏远地区提供更多的教育资源和机会。
本课题的研究意义在于:
提高支教志愿者招募效率:通过信息化技术,该系统能够快速处理大量申请信息,提高招募效率;
降低招募成本:通过线上招募和面试等功能,可以降低人力和物力的投入;
提高志愿者管理效率:通过系统对志愿者进行信息化管理,方便快捷地掌握志愿者的服务记录和个人信息;
增进教育公平:该系统的实施能够为偏远地区提供更多的教育资源和机会,增进教育公平;
推动社会公益事业发展:该系统的实践应用能够推动社会公益事业的发展,吸引更多的人参与到支教工作中来。
二、开发环境
- 开发语言:Java
- 数据库:MySQL
- 系统架构:B/S
- 后端:SSM(Spring+SpringMVC+Mybatis)/SpringBoot
- 前端:Vue
三、系统界面展示
- 支教志愿者招聘系统界面展示:
四、代码参考
- Java项目实战代码参考:
@RestController
@RequestMapping("/job")
@CrossOrigin(origins = "*")
public class JobController {
@Autowired
JobService jobService;
@Autowired
JobMapper jobMapper;
@Autowired
EmployerService employerService;
@Autowired
EmployerMapper employerMapper;
/**
* 分页查询
* @param page
* @param pageSize
* @param category
* @return
*/
@GetMapping("/findListJob")
public R<Page> getListJob(int page, int pageSize,String category){
Page<Job> pageInfo=new Page<>(page,pageSize);
Page<JobAll> JobAllPage=new Page<>();
LambdaQueryWrapper<Job> lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(category!=null,Job::getCategory,category);
lambdaQueryWrapper.orderByAsc(Job::getId);
jobService.page(pageInfo,lambdaQueryWrapper);
BeanUtils.copyProperties(pageInfo,JobAllPage,"records");
List<Job> records=pageInfo.getRecords();
List<JobAll> list=records.stream().map((item)->{
String bossId=item.getBossId();
String companyId =item.getCompanyId();
String jobId=item.getId();
JobAll jobOne = jobMapper.getJobAllListByBossId(bossId,companyId,jobId);
return jobOne;
}).collect(Collectors.toList());
JobAllPage.setRecords(list);
return R.success(JobAllPage);
}
/**
* 修改工作招聘状态
* @param status
* @param id
* @return
*/
@PostMapping("/status/")
public R<Boolean> updateStatus( Integer status,@RequestParam List<String> id){
log.info("statusid:"+id+"===>"+status);
LambdaUpdateWrapper<Job> lambdaUpdateWrapper=new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(Job::getStatus,status);
lambdaUpdateWrapper.in(Job::getId,id);
boolean flag = jobService.update(lambdaUpdateWrapper);
if(flag){
return R.success((status==0)? false:true );
}
return R.error((status==0)? "停招失败":"起招失败" );
}
/**
* 修改工作
* @param jobList
* @return
*/
@PostMapping("/modifyJob")
public R<String> modifyJob(@RequestBody List<Job> jobList){
boolean flag = jobService.updateBatchById(jobList);
if(flag==true){
return R.success("修改成功");
}else {
return R.error("修改失败");
}
}
/**
* 根据id删除工作
*
* @param job
* @return
*/
@PostMapping("/delete")
public R<String> deleteJob(@RequestBody Job job){
if(job!=null&&job.getId()!=null){
int i = jobMapper.deleteById(job.getId());
if(i>0){
return R.success("删除成功");
}
}
return R.error("删除失败");
}
/**
* 添加工作
* @param job
* @return
*/
@PostMapping("/addJob")
public R<Job> addJob(@RequestBody Job job){
if(job.getBossId()!=null&&job.getCompanyId()!=null){
int insert = jobMapper.insert(job);
if(insert>0){
return R.success(job);
}
}
return R.error("添加失败");
}
/**
* 查询hr发布的工作
* @param
* @return
*/
@GetMapping("/employerAddjob")
public R<List<Job>> employeeAddJobList(String bossId){
LambdaUpdateWrapper<Job> lambdaUpdateWrapper=new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(Job::getBossId,bossId);
List<Job> jobList = jobMapper.selectList(lambdaUpdateWrapper);
return R.success(jobList);
}
@GetMapping("/getDetail")
public R<JobDetail> getJobDetail(String jobId){
JobDetail jobDetail = jobMapper.getJobDetailByJobId(jobId);
return R.success(jobDetail);
}
}
/**
* 简历
*/
@RestController
@RequestMapping("/resume")
@CrossOrigin(origins = "*")
@Slf4j
public class ResumeController {
@Value("${recruit.path}")
private String basePath;
@Autowired
UserService userService;
/**
* 简历上传
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> uploadFile(String id,MultipartFile file){
log.info("id"+id);
User user = userService.getById(id);
if(user==null){
return R.error("上传失败");
}
String baseFile=file.getOriginalFilename();
String suffix=baseFile.substring(baseFile.lastIndexOf("."));
if(!".pdf".equals(suffix)){
return R.error("请上传pdf格式的文件");
}
String filename= UUID.randomUUID()+suffix;
log.info(filename);
user.setResume(filename);
userService.updateById(user);
File dir=new File(basePath);
if(!dir.exists()){
dir.mkdirs();
}
try {
file.transferTo(new File(basePath+filename));
} catch (IOException e) {
e.printStackTrace();
}
return R.success(filename);
}
/**
* 简历下载
* @param
* @param response
*/
@GetMapping("/download")
public void download(String id, HttpServletResponse response){
User user = userService.getById(id);
String name=user.getResume();
//输入流读取文件内容
log.info(name);
try {
File file=new File(basePath+name);
FileInputStream fileInputStream=new FileInputStream(file);
//输出流,将文件写回浏览器,展示图片
ServletOutputStream outputStream = response.getOutputStream();
response.setHeader("Content-Type","application/pdf");
response.addHeader("Content-Disposition","attachment;filename=" + new String(file.getName().getBytes(),"utf-8"));
response.addHeader("Content-Length","" + file.length());
byte[] bytes=new byte[2048];
int len=0;
while ((len=fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
outputStream.flush();
}
outputStream.close();
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 用户管理类
* loginUser
* getCode
* registerUser
*/
@RestController
@RequestMapping("/user")
@Slf4j
@CrossOrigin(origins = "*")
public class UserController {
@Autowired
UserService userService;
@Autowired
UserMapper userMapper;
@Autowired
EmployerMapper employerMapper;
/**
* 登录
*/
@PostMapping("/login")
public R<User> loginUser(@RequestBody Map map,HttpServletRequest request){
String phone=(String) map.get("phone");
String password=(String)map.get("password");
String code=(String) map.get("code");
log.info("login,电话号码:"+phone);
if(!RegxPhoneNumber.regxPhone(phone)){
return R.error("请输入正确的手机号");
}
HttpSession session = request.getSession();
log.info("login:session"+session.getId());
// String vertifyCode= (String) session.getAttribute(phone);
// session.removeAttribute(phone);
if(true){
User user=new User();
user.setPhone(phone);
user.setPassword(password);
LambdaUpdateWrapper<User> lambdaUpdateWrapper=new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getPhone,phone).eq(User::getPassword,password);
User user_login = userService.getOne(lambdaUpdateWrapper);
if(user_login!=null){
user_login.setPassword("");
return R.success(user_login);
}
}else {
R.error("验证码错误");
}
return R.error("登录失败");
}
/**
* 图片验证码
*/
@GetMapping("/getCode")
public R<String> getCode( String phone, HttpServletRequest request, HttpServletResponse response){
if(phone==null){
return R.error("请输入手机号");
}
log.info("电话号码"+phone);
if(!RegxPhoneNumber.regxPhone(phone)){
return R.error("请输入正确的手机号");
}
HttpSession session = request.getSession();
log.info("sessionID:"+session.getId());
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
try {
captcha.write(response.getOutputStream());
String code = captcha.getCode();
session.setAttribute(phone,code);
log.info("验证码:"+code);
log.info("验证码:session:"+session.getId());
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
return R.success("验证码获取成功");
}
@PostMapping("/register")
public R<User> registerUser(@RequestBody Map map,HttpServletRequest request){
String phone=(String) map.get("phone");
String password=(String) map.get("password");
String passwordAgain=(String) map.get("passwordAgain");
String name=(String) map.get("name");
int sex= Integer.parseInt( (String) map.get("sex"));
// String code= (String) map.get("code");
if(!RegxPhoneNumber.regxPhone(phone)){
return R.error("请输入正确的手机号");
}
if("".equals(passwordAgain)||"".equals(passwordAgain)){
return R.error("注册失败");
}
if(!password.equals(passwordAgain)){
return R.error("注册失败");
}
HttpSession session = request.getSession();
// String vertifyCode = (String) session.getAttribute(phone);
// session.removeAttribute(phone);
if(true){
User user=new User();
user.setUserName(name);
user.setPhone(phone);
user.setPassword(password);
user.setSex(sex);
if(user!=null&&user.getPassword()!=null&&user.getPhone()!=null){
userService.save(user);
return R.success(user);
}
}
return R.error("注册失败");
}
/**
* 获取所有
* @return
*/
// @GetMapping("/searchAll")
// public R<List<EmployerCompany>> searchAll(){
// List<EmployerCompany> employerCompanyList = employerMapper.getEmployerAllList();
// return R.success(employerCompanyList);
// }
/**
* 根据ID获取user
*/
@GetMapping("/userInfo")
public R<User> getUserById(String ID){
log.info("ID"+ID);
User user = userService.getById(ID);
if(user!=null){
user.setPassword(MD5.create().digestHex(new Date().toString()));
log.info(user.toString());
}
return R.success(user);
}
/**
* 修改基本信息
* @param user
* @return
*/
@PostMapping("/changeInfo")
public R<User> updateUser(User user){
boolean flag = userService.updateById(user);
if(flag){
return R.success(user);
}
return R.error("修改失败");
}
/**
* 修改密码
* @return
*/
@PostMapping("/changePassword")
public R<String> updatePassword(@RequestBody Map map){
long userId= Long.parseLong((String) map.get("userId"));
String oldPassword= (String) map.get("oldPassword");
LambdaQueryWrapper<User> lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getId,userId).eq(User::getPassword,oldPassword);
User userOne = userService.getOne(lambdaQueryWrapper);
if(userOne!=null){
String newPassword= (String) map.get("newPassword");
String newPasswordAgain= (String) map.get("newPasswordAgain");
if(!(newPassword.trim().equals("")&&newPasswordAgain.trim().equals(""))){
if(newPassword.equals(newPasswordAgain)){
userOne.setPassword(newPassword);
boolean flag = userService.updateById(userOne);
if(flag){
return R.success("修改成功");
}
}
}
}
return R.error("修改失败");
}
}
五、论文参考
- 计算机毕业设计选题推荐-支教志愿者招聘系统论文参考:
六、系统视频
支教志愿者招聘系统项目视频:
计算机毕业设计选题推荐-支教志愿者招聘系统-Java项目实战
结语
计算机毕业设计选题推荐-支教志愿者招聘系统-Java项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我