基于javaweb+mysql的springboot学生考勤系统(java+springboot+vue+mybatis+maven+mysql)

运行环境

Java≥8、MySQL≥5.7、Node.js≥10

开发工具

后端:eclipse/idea/myeclipse/sts等均可配置运行

前端:WebStorm/VSCode/HBuilderX等均可

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的SpringBoot学生考勤系统(java+springboot+vue+mybatis+maven+mysql)

一、项目运行 环境配置:

Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。

项目技术:

Spring + SpringBoot+ mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。

	@GetMapping("showChatrScore/{classes}")
	public Integer[]   showChatrScore(@PathVariable("classes") String classes){
		return attendService.showChatrScore(classes);
	}
	
	/**
	 * 查找单个考勤信息
	 * @param username
	 * @return
	 */
	@GetMapping("findAllByUsername/{username}")
	public Attend  findAllByUsername(@PathVariable("username") String username){
		return attendService.findAllByUsername(username);
	}
	
	/**
	 * 查找单个考勤信息(表格)
	 * @param username
	 * @return
	 */
	@GetMapping("findAllOwn/{username}")
	public Map<String,Object>   findAllOwn(@PathVariable("username") String username){
		Map<String,Object> returnMap = new HashMap<String,Object>();
		Attend attend =  attendService.findAllByUsername(username);
		List<Attend> list = new ArrayList<Attend>();
		returnMap.put("content", list);
		if(attend == null) {
			return returnMap;
		}else {
			list.add(attend);
			returnMap.put("content", list);
			return returnMap;
		}
	}
	
	/**
	 * 修改考勤信息
	 * @param attend
	 * @return
	 */
	@PostMapping("/updateAttend")
	public String updateAttend(@RequestBody Attend attend) {
		String username = attend.getUsername();
		Attend test = attendService.findAllByUsername(username);
		if (test != null) {
			 attendService.saveAttend(attend);
			 return "success";
		} else {
			return "empty";
		}
	}
	/**
	 * 删除考勤信息

@CrossOrigin
		Map<String, Object> returnMap = new HashMap<String, Object>();
		List<Attend> list = null;
		returnMap.put("content", list);
		list = attendService.FuzzyQueryByRealname(realname);

		returnMap.put("content", list);
		return returnMap;
	}

	/**
	 * 
	 * 按用户类型通过姓名模糊查询
	 * @param currentPage
	 * @param pageSize
	 * @param realname
	 * @param choice
	 * @return
	 */
	@GetMapping("FuzzyQuery/{currentPage}/{pageSize}/{realname}/{classes}")
	public Map<String, Object> FuzzyQueryByChoice(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize, @PathVariable("realname") String realname,
			@PathVariable("classes") String classes) {

		PageHelper.startPage(currentPage, pageSize);
		Map<String, Object> returnMap = new HashMap<String, Object>();
		List<Attend> list = null;
		returnMap.put("content", list);
		list = attendService.FuzzyQueryByChioce(realname, classes);

		returnMap.put("content", list);
		return returnMap;
	}
	
	/**
	 * 批量上传excel文件导入用户信息
	 * @param multipartFile
	 * @param request
	 * @return
	 * @throws IOException
	 */
	@SuppressWarnings("unused")
	@ResponseBody
	@RequestMapping(value = "/fileUpload")
	public String handlerForUpload(@RequestParam("fileList") MultipartFile multipartFile, HttpServletRequest request)
			throws IOException {
		// 判断所上传文件是否存在
		List<String> test = new ArrayList<String>();
		if (multipartFile.isEmpty()) {
			return "error";
		} else {
			InputStream in = null;
	
	/**
	 * 通过验证码修改邮箱
	 * @param user
	 * @return
	 */
	@PostMapping("/changeEmial")
	public String changeEmial(@RequestBody User user){
		String username = user.getUsername();
		String email = user.getEmail();
		String verifyCode = user.getVerifyCode();
		User test =  userService.findAllByUsername(username);
		if(test != null){
		
			String oldverifyCode = test.getVerifyCode();
			
			String matches =userService.matchesEncoder(verifyCode, oldverifyCode);
			if(matches.equals("success")) {
				userService.updateEmail(username, email);
				return "success";
			}else {
				return "error";
			}
		}else {
			return "empty";
		}
		
	}
	
	/**
	 * 发送邮箱并获取验证码
	 * @param user
	 * @return
	 */
	@PostMapping("/getCheckemail")
	public String sendCodeToMail(@RequestBody User user){
		String username = user.getUsername();
		String email = user.getEmail();
		String choice = user.getChoice();
		User test = userService.findAllByUsername(username);
		if(test != null){		//判断用户是否存在
			String mailAddress = test.getEmail();
			String checkchoice = test.getChoice();
			String checkusername = test.getUsername();
			if (checkusername.equals(username)&&choice.equals(checkchoice)) {
				//根据username获取保存的邮箱
		dataService.deleteDataByChoice(choice);
		
	}

	/**
	 * 批量上传excel文件导入用户信息
	 * @param multipartFile
	 * @param request
	 * @return
	 * @throws IOException
	 */

	@ResponseBody
	@RequestMapping(value = "/fileUpload")
	public String handlerForUpload(@RequestParam("fileList") MultipartFile multipartFile, HttpServletRequest request)
			throws IOException {
		// 判断所上传文件是否存在
		List<String> test = new ArrayList<String>();
		if (multipartFile.isEmpty()) {
			return "error";
		} else {
			InputStream in = null;
			try {
				// 将file转InputStream
				in = multipartFile.getInputStream();
			} catch (IOException e) {
				e.printStackTrace();
			}
			// 将InputStream转XLSX对象(即表格对象)

			@SuppressWarnings("resource")
			XSSFWorkbook xssfWorkbook = new XSSFWorkbook(in);
			// 获取表格的第一页
			XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
			// 获取该页有多少数据
			int rowNum = xssfSheet.getLastRowNum();
			for (int i = 1; i <= rowNum; i++) {
				// 获取当前行
				XSSFRow xssfRow = xssfSheet.getRow(i);
				if(xssfRow == null) {
					return "error";
				}
				// 由于年龄是纯数字,默认纯数字是以double传的,写进据库会变成科学计数法格式的,需要改为以string传进来
				xssfRow.getCell(2).setCellType(CellType.STRING);
	private AttendService attendService;
	

	/**
	 * 录入用户信息
	 * 
	 * @param data
	 * @return
	 */
	@PostMapping("/insertData")
	public String insertData(@RequestBody Data data) {
		String username = data.getUsername();
		Data test = dataService.findAllByUsername(username);
		if (test == null) {
			return dataService.InsertData(data);
		} else {
			return "repeat";
		}

	}

	/**
	 * 分页查询所有用户信息
	 * 
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	@GetMapping("findAll/{currentPage}/{pageSize}")
	public Map<String, Object> findAll(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize) {

		PageHelper.startPage(currentPage, pageSize);
		Map<String, Object> returnMap = new HashMap<String, Object>();
		List<Data> list = null;
		returnMap.put("content", list);
		list = dataService.findAll();

		returnMap.put("content", list);
		return returnMap;
	}

	/**
			){
		
		Map<String,Object> returnMap = new HashMap<String,Object>();
		Data data = dataService.findAllByUsername(username);
		List<Attend> attend = attendService.findAll();
		int[] arr = {0};
		if(data !=null || attend.isEmpty() == false) {
			String choice =data.getChoice();
			String dept = data.getDept();
			if(choice.equals("院领导")) {
				for(int i = 0; i<attend.size();i++) {
					String checkdept = attend.get(i).getDept();
					String checkclasses = attend.get(i).getClasses();
					if(checkdept.equals(dept)&&checkclasses.equals(classes)) {
						arr[0] = 1;
					}
				}
				if(arr[0] == 1) {
					PageHelper.startPage(currentPage, pageSize);
					List<Attend> list=null;
					returnMap.put("content", list);
					list = attendService.findByClass(classes);
					returnMap.put("content", list);
					return returnMap;
				}else {
					return returnMap;
				}
			}
			PageHelper.startPage(currentPage, pageSize);
			List<Attend> list=null;
			returnMap.put("content", list);
			list = attendService.findByClass(classes);
			returnMap.put("content", list);
			return returnMap;
		}
		return returnMap;
	}
	
	/**
	 * 将考勤信息单独传给后端做个人考勤信息柱状图
	 * @param username
	 * @return
	 */
	@GetMapping("showChatrStudent/{username}")
	public Integer[]  showChatrStudent(@PathVariable("username") String username){
		return attendService.showChartStudent(username);
	}
	/**
	 * 将考勤信息单独传给后端做考勤信息饼图图
	 * @param classes
	 * @return
	 */
	@GetMapping("showChatrAttend/{classes}")
	@Autowired
	private UserService userService;

	@Autowired
	private LeaveService leaveService;
	
	@Autowired
	private AttendService attendService;
	

	/**
	 * 录入用户信息
	 * 
	 * @param data
	 * @return
	 */
	@PostMapping("/insertData")
	public String insertData(@RequestBody Data data) {
		String username = data.getUsername();
		Data test = dataService.findAllByUsername(username);
		if (test == null) {
			return dataService.InsertData(data);
		} else {
			return "repeat";
		}

	}

	/**
	 * 分页查询所有用户信息
	 * 
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	@GetMapping("findAll/{currentPage}/{pageSize}")
	public Map<String, Object> findAll(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize) {

		PageHelper.startPage(currentPage, pageSize);
@RestController
@RequestMapping("/data")
public class DataController {

	@Autowired
	private DataService dataService;

	@Autowired
	private UserService userService;

	@Autowired
	private LeaveService leaveService;
	
	@Autowired
	private AttendService attendService;
	

	/**
	 * 录入用户信息
	 * 
	 * @param data
	 * @return
	 */
	@PostMapping("/insertData")
	public String insertData(@RequestBody Data data) {
		String username = data.getUsername();
		Data test = dataService.findAllByUsername(username);
		if (test == null) {
			return dataService.InsertData(data);
		} else {
			return "repeat";
		}

	}

	/**
	 * 分页查询所有用户信息
	 * 
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	@GetMapping("findAll/{currentPage}/{pageSize}")
	public Map<String, Object> findAll(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize) {

		PageHelper.startPage(currentPage, pageSize);
		Map<String, Object> returnMap = new HashMap<String, Object>();

@CrossOrigin
@RestController
@RequestMapping("/attend")
public class AttendController {
	@Autowired
	private AttendService attendService;
	@Autowired
	private DataService dataService;
	
	/**
	 * 添加学生考勤信息
	 * @param attend
	 * @return
	 */
	@PostMapping("/insertAttend")
	public String insertAttend(@RequestBody Attend attend) {
		String username = attend.getUsername();
		Attend test = attendService.findAllByUsername(username);
		if (test == null) {
			return attendService.insertAttend(attend);
		} else {
			return "repeat";
		}
	}
	
	/**
	 * 按用户类型显示学生考勤信息
	 * @param currentPage
@CrossOrigin
@RestController
@RequestMapping("/attend")
public class AttendController {
	@Autowired
	private AttendService attendService;
	@Autowired
	private DataService dataService;
	
	/**
	 * 添加学生考勤信息
	 * @param attend
	 * @return
	 */
	@PostMapping("/insertAttend")
	public String insertAttend(@RequestBody Attend attend) {
		String username = attend.getUsername();
		Attend test = attendService.findAllByUsername(username);
		if (test == null) {
			return attendService.insertAttend(attend);
		} else {
			return "repeat";
		}
	}
	
	/**
	 * 按用户类型显示学生考勤信息
	 * @param currentPage
	 * @param pageSize
	 * @param username
	 * @return
	 */
	@GetMapping("findAll/{currentPage}/{pageSize}/{username}")
	public Map<String,Object>  findAll(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize,
			@PathVariable("username") String username){
		Map<String,Object> returnMap=new HashMap<String,Object>();
		Data data =  dataService.findAllByUsername(username);
		if(data == null) {
			return returnMap;
		}else {
			
			String choice = data.getChoice();
			if(choice.equals("辅导员")) {
				String realname = data.getRealname();
		returnMap.put("content", list);
		list = leaveService.showAOldLeave(username,total,size);
		returnMap.put("content", list);

		return returnMap;
		
		}
	
	/**
	 * 按审核状态查询以往审核记录
	 * @param currentPage
	 * @param pageSize
	 * @param username
	 * @return
	 */
	@GetMapping("/ShowLeave/{currentPage}/{pageSize}/{username}/{state}")
	public Map<String, Object> ShowLeave(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize,
			@PathVariable("username") String username,
			@PathVariable("state") String state){
		Map<String, Object> returnMap = new HashMap<String, Object>();
		List<Leave> list = null;
		List<Leave> pagelist = null;
			returnMap.put("content", list);
			list = leaveService.showLeave(username, state);
			
			pagelist = leaveService.startPage(list, currentPage, pageSize);
			
			returnMap.put("content", pagelist);
			return returnMap;
		
		}

	/**
	 * 删除申请表
	 * @param id
	 */
	@DeleteMapping("deleteLeave/{id}")
	public void deleteData(@PathVariable("id") Integer id) {
		leaveService.deleteLeave(id);
	}
	
	/**
	 * 查找辅导员管理的班级
	 * @param checkname
	 * @return
	 */
				list = attendService.findAll();
				
				List<Attend> pageList = attendService.startPage(list, currentPage, pageSize);
				returnMap.put("content", pageList);
				return returnMap;
			}		
		}
	}
	
	/**
	 * 按班级查询
	 * @param currentPage
	 * @param pageSize
	 * @param classes
	 * @return
	 */
	@GetMapping("findByClass/{currentPage}/{pageSize}/{classes}/{username}")
	public Map<String,Object>  findByClass(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize,
			@PathVariable("classes") String classes,
			@PathVariable("username") String username
			){
		
		Map<String,Object> returnMap = new HashMap<String,Object>();
		Data data = dataService.findAllByUsername(username);
		List<Attend> attend = attendService.findAll();
		int[] arr = {0};
		if(data !=null || attend.isEmpty() == false) {
			String choice =data.getChoice();
			String dept = data.getDept();
			if(choice.equals("院领导")) {
				for(int i = 0; i<attend.size();i++) {
					String checkdept = attend.get(i).getDept();
					String checkclasses = attend.get(i).getClasses();
					if(checkdept.equals(dept)&&checkclasses.equals(classes)) {
						arr[0] = 1;
					}
				}
				if(arr[0] == 1) {
					PageHelper.startPage(currentPage, pageSize);
					List<Attend> list=null;
					returnMap.put("content", list);
					list = attendService.findByClass(classes);
					returnMap.put("content", list);
					return returnMap;
				}else {
					return returnMap;
//				dataService.InsertData(data);
				 String isRepeat = dataService.InsertData(data);
				 test.add(isRepeat);
//				 System.out.println("循环监视");
			}
			
			for(int j = 0;j <test.size();j++ ) {
				if(test.get(j).equals("success")) {
//					System.out.println(test.get(j));
					return "success";
				}else {
//					System.out.println(test.get(j));
					return "repeat";
				}
			}
			return "repeat";
		}
	}

	@GetMapping("/download")
	public void toExcel(HttpServletResponse response) throws IOException {
		List<Data> data = dataService.findAll();
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
		response.setContentType("application/vnd.ms-excel");
		response.setCharacterEncoding("utf-8");
		// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
		String fileName = URLEncoder.encode("用户信息表", "UTF-8");
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
		//   Student.class 是按导出类  data()应为数据库查询数据,这里只是模拟
		EasyExcel.write(response.getOutputStream(), Data.class).sheet("模板").doWrite(data);
	}

	@PostMapping("/upload")
	@ResponseBody
	public String upload(@RequestParam("file") MultipartFile file) throws IOException {

		try {
			EasyExcel.read(file.getInputStream(), Data.class, new DataListener(dataService)).sheet().doRead();
		}catch (Exception e){
			e.printStackTrace();
		}
		return "success";
	}
				String realname = xssfRow.getCell(0).getStringCellValue();
				String sex = xssfRow.getCell(1).getStringCellValue();
				String ageString = xssfRow.getCell(2).getStringCellValue();
				Double ageDouble = Double.valueOf(ageString);
				String username = xssfRow.getCell(3).getStringCellValue();
				String classes = xssfRow.getCell(4).getStringCellValue();
				String dept = xssfRow.getCell(5).getStringCellValue();
				String choice = xssfRow.getCell(6).getStringCellValue();
				Integer age = Integer.valueOf(ageDouble.intValue());
				// 将数据写入实体类
				Data data = new Data();
				data.setRealname(realname);
				data.setSex(sex);
				data.setAge(age);
				data.setUsername(username);
				data.setClasses(classes);
				data.setDept(dept);
				data.setChoice(choice);

				// 将实体类插入数据库
//				dataService.InsertData(data);
				 String isRepeat = dataService.InsertData(data);
				 test.add(isRepeat);
//				 System.out.println("循环监视");
			}
			
			for(int j = 0;j <test.size();j++ ) {
				if(test.get(j).equals("success")) {
//					System.out.println(test.get(j));
					return "success";
				}else {
//					System.out.println(test.get(j));
					return "repeat";
				}
			}
			return "repeat";
		}
	}

	@GetMapping("/download")
	public void toExcel(HttpServletResponse response) throws IOException {
		List<Data> data = dataService.findAll();
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
			returnMap.put("content", list);
			list = leaveService.showLeave(username, state);
			
			pagelist = leaveService.startPage(list, currentPage, pageSize);
			
			returnMap.put("content", pagelist);
			return returnMap;
		
		}

	/**
	 * 删除申请表
	 * @param id
	 */
	@DeleteMapping("deleteLeave/{id}")
	public void deleteData(@PathVariable("id") Integer id) {
		leaveService.deleteLeave(id);
	}
	
	/**
	 * 查找辅导员管理的班级
	 * @param checkname
	 * @return
	 */
	@GetMapping("/findClass/{checkname}")
	public List<String>  findClass(@PathVariable("checkname") String checkname) {
		List<Audit> audit =  leaveService.FindClass(checkname);
		List<String> list = new ArrayList<String>();
		for(int i = 0 ; i < audit.size(); i++) {
			String classes  =  audit.get(i).getClasses();
			list.add(classes);
		}
		return list;
	}
	/**
	 * 删除辅导员管理的班级
	 * @param classes
	 */
	@DeleteMapping("delClass/{classes}")
	public void delClass(@PathVariable("classes") String  classes) {
		 leaveService.delClass(classes);
	}
	/**
	}
	
	
	/**
	 * 通过旧密码或者验证码修改密码
	 * @param user
	 * @return
	 */
	@PostMapping("/updatePassword")
	public String updatePassword(@RequestBody User user) {
		String username = user.getUsername();
		
		String check = user.getChoice();//前端输入的密码或验证码
		String newpassword = user.getPassword();
		User test =  userService.findAllByUsername(username);
		if(test != null){
			String oldpassword = test.getPassword();
			String oldverifyCode = test.getVerifyCode();
			String passwordMatches =userService.matchesEncoder(check, oldpassword);
			String verifyCodeMatches =userService.matchesEncoder(check, oldverifyCode);
			if(passwordMatches.equals("success")||verifyCodeMatches.equals("success")) {
				userService.updatePassword(username,newpassword);
				return "success";
			}
			else {
				return "error";
			}
			
		
		}else {
			return "empty";
		}
				
	}
	
	/**
	 * 通过验证码修改邮箱
	 * @param user
	 * @return
	 */
	@PostMapping("/changeEmial")
	public String changeEmial(@RequestBody User user){
		String username = user.getUsername();
		String email = user.getEmail();
		String verifyCode = user.getVerifyCode();
		User test =  userService.findAllByUsername(username);
		if(test != null){
		
			String oldverifyCode = test.getVerifyCode();
			
			String matches =userService.matchesEncoder(verifyCode, oldverifyCode);
			if(matches.equals("success")) {
	 * @param realname
	 * @return
	 */
	@GetMapping("FuzzyQuery/{currentPage}/{pageSize}/{realname}")
	public Map<String, Object> FuzzyQuery(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize, @PathVariable("realname") String realname) {

		PageHelper.startPage(currentPage, pageSize);
		Map<String, Object> returnMap = new HashMap<String, Object>();
		List<Attend> list = null;
		returnMap.put("content", list);
		list = attendService.FuzzyQueryByRealname(realname);

		returnMap.put("content", list);
		return returnMap;
	}

	/**
	 * 
	 * 按用户类型通过姓名模糊查询
	 * @param currentPage
	 * @param pageSize
	 * @param realname
	 * @param choice
	 * @return
	 */
	@GetMapping("FuzzyQuery/{currentPage}/{pageSize}/{realname}/{classes}")
	public Map<String, Object> FuzzyQueryByChoice(@PathVariable("currentPage") Integer currentPage,
			@PathVariable("pageSize") Integer pageSize, @PathVariable("realname") String realname,
			@PathVariable("classes") String classes) {

		PageHelper.startPage(currentPage, pageSize);
		Map<String, Object> returnMap = new HashMap<String, Object>();
		List<Attend> list = null;
		returnMap.put("content", list);
		list = attendService.FuzzyQueryByChioce(realname, classes);

		returnMap.put("content", list);
		return returnMap;
	}
	
	/**
	 * 批量上传excel文件导入用户信息
	 * @param multipartFile
	 * @param request
	 * @return
	 * @throws IOException
	 */
	@SuppressWarnings("unused")
	@ResponseBody
	@RequestMapping(value = "/fileUpload")
	public String handlerForUpload(@RequestParam("fileList") MultipartFile multipartFile, HttpServletRequest request)

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐