基于javaweb+mysql的springboot校园维修管理系统(java+springboot+jsp+bootstrap+maven+mysql)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot校园维修管理系统(java+springboot+jsp+bootstrap+maven+mysql)
项目介绍
本项目为后台管理系统,包括管理员与学生两种角色; 学生包含以下功能: 学生提交报修,添加维修,催单,水电缴费,登录页面等功能。
管理员包含以下功能: 查看所有报修单,催单,维修安排,学生管理,添加学生,维修人员管理等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目:是;
技术栈
- 后端:SpringBoot 2. 前端:JSP+CSS+JavaScript+jquery+bootstrap
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
byte[] buffer = new byte[2048];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
// 往数据库中插入维修单记录
repairService.submitRepair(detail, place, picMD5, student.getId());
}
return "redirect:/student/dashboard";
}
/**
* 获取显示的主页面
*
* @param model
* @return
*/
@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
public String board(Model model, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
List<Repair> repairs = repairService.getRepqirByStudentId(id);
List<RepairInfoVo> repairInfoVos = new ArrayList<>();
for(Repair repair: repairs){
repair.setPicMD5("/"+repair.getPicMD5());
RepairInfoVo repairInfoVo = new RepairInfoVo(repair);
repairInfoVo.setStatesInfo(RepairEnumCN.stateOf(repair.getStatus()).getStateInfo());
repairInfoVos.add(repairInfoVo);
}
model.addAttribute("repairInfoVos", repairInfoVos);
return "/student/dashboard";
}
/**
* 报修单详情
*
* @param repairId
* @param model
* @return
*/
);
}
model.addAttribute("students", studentResults);
return "admin/student";
}
@RequestMapping(value = "/addstudent", method = RequestMethod.GET)
public String addStudent(Model model) {
return "/admin/addStudent";
}
@RequestMapping(value = "/addstudent", method = RequestMethod.POST)
public String addStudent(@RequestParam("name") String name, @RequestParam("email") String email,
@RequestParam("password") String password, @RequestParam("sexual") String sexual,
@RequestParam("phone") String phone,@RequestParam("door") String door, Model model, HttpServletRequest httpServletRequest) {
int sex = sexual.equals("男") ? 0 : 1;
studentService.addStudent(System.currentTimeMillis()+"", name, password, sex, email, phone, door);
Door door2 = doorDao.queryByName(door);
if (door2==null) {
Door doorObject = new Door();
doorObject.setDate(new Date(System.currentTimeMillis()));
doorObject.setId(System.currentTimeMillis()+"");
doorObject.setName(door);
doorObject.setPower("100");
doorObject.setWater("100");
doorDao.add(doorObject);
}
return "redirect:/admin/student";
}
@RequestMapping(value = "/technician", method = RequestMethod.GET)
public String technician(Model model) {
List<Technician> techniciens = technicianService.getAllTechnician();
model.addAttribute("techniciens", techniciens);
return "admin/technician";
}
/**
* 添加维修人员 GET方法
* @param model
* @return
*/
/**
* 退出的控制
*
* @param httpSession
* @return
*/
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession httpSession) {
httpSession.removeAttribute(StudentConst.STUDENT_EMAIL);
return "redirect:/student/login";
}
/**
* 提交报修单的POST方法
*
* @param model
* @return
*/
@RequestMapping(value = "/commit", method = RequestMethod.GET)
public String commit(Model model) {
return "/student/commit";
}
@RequestMapping(value = "/commit", method = RequestMethod.POST)
public String commit(@RequestParam("detail") String detail, @RequestParam("place") String place,
@RequestParam("file") MultipartFile file, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
Student student = studentService.getStudentById(id);
String picMD5 = "";
logger.info(detail);
logger.info(place);
logger.info(picMD5);
try {
logger.info(file.getInputStream().toString());
} catch (IOException e) {
e.printStackTrace();
}
if (file != null) {
try {
studentService.changeOtherInfo(student.getId(), Integer.valueOf(sexual), name, phone);
httpServletResponse.addCookie(new Cookie(StudentConst.STUDENT_NAME, student.getName()));
return new LoginResult(true);
}
}
/**
* 系统管理员端的控制器
*
*/
@Controller
@RequestMapping(value = "/admin")
model.addAttribute("list", urgentRepairResults);
return "/admin/urgent";
}
@RequestMapping(value = "/urgent/{repairId}/delete", method = RequestMethod.GET)
public String deleteUrgent(@PathVariable("repairId") int repairId) {
urgentRepairService.checkUrgentRepair(repairId);
return "redirect:/admin/urgent";
}
@RequestMapping(value = "/arrange", method = RequestMethod.GET)
public String arrange(Model model) {
List<Maintenance> maintenances = maintenanceService.getAll();
List<MaintenanceResult> maintenanceResults = new ArrayList<MaintenanceResult>();
Repair repair;
Technician technician;
for (Maintenance maintenance : maintenances) {
repair = repairService.getRepairById(maintenance.getRepairId());
// 以下状态的报修单对应的维修记录就没必要显示了
// 1. 被学生删除
// 2. 学生同意取消
// 3. 已经验收
if (repair.getStatus() == RepairEnum.DELETED_BY_STUDENT.getState()
|| repair.getStatus() == RepairEnum.CANCELED_AGREE.getState()
|| repair.getStatus() == RepairEnum.CONFIRM.getState())
{
continue;
}
technician = technicianService.getById(maintenance.getTechnicianId());
maintenanceResults.add(
new MaintenanceResult(
maintenance.getId(),
maintenance.getRepairId(), repair.getDetail(),
maintenance.getTechnicianId(), technician.getName(),
new Timestamp(System.currentTimeMillis())
)
);
}
List<Repair> repairs = repairService.getAllToBeCanceledById(id);
List<RepairInfoVo> repairInfoVos = new ArrayList<>();
for(Repair repair:repairs){
repair.setPicMD5("/"+repair.getPicMD5());
RepairInfoVo repairInfoVo = new RepairInfoVo(repair);
repairInfoVo.setStatesInfo(RepairEnumCN.stateOf(repair.getStatus()).getStateInfo());
repairInfoVos.add(repairInfoVo);
}
model.addAttribute("repairInfoVos", repairInfoVos);
return "student/tobecanceled";
}
/**
* 同意取消报修单
*
* @param repairId
* @param httpServletRequest
* @return
*/
@RequestMapping(value = "/tobecanceled/{repairId}/agree", method = RequestMethod.GET)
public String agreeCanceled(@PathVariable("repairId") int repairId, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
Student student = studentService.getStudentByEmail(id);
repairService.agreeToBeCanceled(repairId);
return "redirect:/student/tobecanceled";
}
/**
* 拒绝取消报修单
*
* @param repairId
* @param httpServletRequest
* @return
*/
@RequestMapping(value = "/tobecanceled/{repairId}/reject", method = RequestMethod.GET)
public String rejectCanceled(@PathVariable("repairId") int repairId, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
repairService.rejectToBeCanceled(repairId);
return "redirect:/student/tobecanceled";
public String addTechnician(Model model) {
return "/admin/addTechnician";
}
/**
* 添加维修人员 POST方法
* @param model
* @return
*/
@RequestMapping(value = "/addtechnician", method = RequestMethod.POST)
public String addTechnician(@RequestParam("name") String name,@RequestParam("number") String number,@RequestParam("phone") String phone, Model model, HttpServletRequest httpServletRequest) {
technicianService.addTechnician(name,number,phone);
return "redirect:/admin/technician";
}
}
/**
* 学生登录验证的拦截器
*
*/
public class StudentSessionInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
Object email = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_EMAIL);
if (email == null) {
logger.info("用户尚未登录,将其重定向至登录页面");
httpServletResponse.sendRedirect("/student/login");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest hsr, HttpServletResponse hsr1, Object o, ModelAndView mav) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest hsr, HttpServletResponse hsr1, Object o, Exception excptn) throws Exception {
}
*
* @param repairId
* @param httpServletRequest
* @return
*/
@RequestMapping(value = "/urgent/{repairId}/delete", method = RequestMethod.GET)
public String deleteUrgent(@PathVariable("repairId") int repairId, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
Student student = studentService.getStudentById(id);
urgentRepairService.deleteUrgentRepair(repairId);
return "redirect:/student/urgent";
}
/**
* 重新提交某条催单
*
* @param repairId
* @return
*/
@RequestMapping(value = "/urgent/{repairId}/resubmit", method = RequestMethod.GET)
public String reSubmitUrgent(@PathVariable("repairId") int repairId) {
urgentRepairService.reSubmit(repairId);
return "redirect:/student/urgent";
}
/**
* 获取所有待取消的报修单
*
* @param httpServletRequest
* @param model
* @return
*/
@RequestMapping(value = "/tobecanceled", method = RequestMethod.GET)
public String toBeCanceled(HttpServletRequest httpServletRequest, Model model) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
List<Repair> repairs = repairService.getAllToBeCanceledById(id);
}
/**
* 验收报修单
*
* @param repairId
* @return
*/
@RequestMapping(value = "/repair/{repairId}/acceptance", method = RequestMethod.GET)
public String acceptance(@PathVariable("repairId") int repairId) {
repairService.Acceptance(repairId);
return "redirect:/student/dashboard";
}
/**
* 将报修单标记为催单
*
* @param repairId
* @param httpServletRequest
* @return
*/
@RequestMapping(value = "/repair/{repairId}/urgent", method = RequestMethod.GET)
public String urgent(@PathVariable("repairId") int repairId, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
Student student = studentService.getStudentById(id);
urgentRepairService.submitUrgentRepair(repairId, student.getId());
return "redirect:/student/urgent";
}
/**
* 查看所有的催单
*
* @param httpServletRequest
* @param model
* @return
*/
@RequestMapping(value = "/urgent", method = RequestMethod.GET)
public String showUrgent(HttpServletRequest httpServletRequest, Model model) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
Student student = studentService.getStudentById(id);
/**
* 用户的web层
*
*/
@Controller
@CrossOrigin(origins = {"http://localhost:18084", "null"})
@RequestMapping("/student")
public class StudentController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private StudentService studentService;
@Resource
private RepairService repairService;
@Resource
private UrgentRepairService urgentRepairService;
@Resource
private DoorDao doorDao;
@RequestMapping(value = "/introduce", method = RequestMethod.GET)
public String index() {
return "student/introduce";
}
/**
* 登录的GET方法
*
* @return
*/
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "student/login";
}
/**
* 登录的POST方法
*
* @param id
* @param password
* @param httpSession
* @return
*/
*/
@RequestMapping(value = "/tobecanceled/{repairId}/reject", method = RequestMethod.GET)
public String rejectCanceled(@PathVariable("repairId") int repairId, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
repairService.rejectToBeCanceled(repairId);
return "redirect:/student/tobecanceled";
}
/**
* 获取个人信息的控制器
*
* @param httpServletRequest
* @param model
* @return
*/
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String infomation(HttpServletRequest httpServletRequest, Model model) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
Student student = studentService.getStudentById(id);
StudentResult studentResult = new StudentResult(
student.getId(), student.getName(), student.getPassword(),
student.getSexual(), student.getSexual() == 0 ? "男" : "女",
student.getEmail(), student.getPhone(), student.getDoor());
model.addAttribute("student", studentResult);
return "student/info";
}
/**
* 修改密码的控制器
*
* @param password
* @param httpSession
* @param httpServletResponse
* @param httpServletRequest
* @return
*/
@RequestMapping(value = "/changepassword", method = RequestMethod.POST)
public
@ResponseBody
model.addAttribute("repair", repair);
model.addAttribute("techniciens", techniciens);
return "/admin/addArrange";
}
@RequestMapping(value = "/maintenance/{repairId}/add", method = RequestMethod.POST)
public String submitArrange(@PathVariable("repairId") int repairId, @RequestParam("technicianId") String technicianId) {
// 解决表单提交时乱码的问题(JSP在表单提交时默认采用ISO-8859-1编码)
try {
technicianId = new String(technicianId.getBytes("ISO-8859-1"), "utf8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
repairService.arrangeRepair(repairId, Integer.valueOf(technicianId));
return "redirect:/admin/dashboard";
}
@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String finish(Model model) {
List<Repair> repairs = repairService.getAllFinish();
Student student;
List<RepairInfoVo> repairInfoVos = new ArrayList<>();
for(Repair repair: repairs){
student = studentService.getStudentById(repair.getStudentId());
RepairInfoVo repairInfoVo = new RepairInfoVo(student, repair);
repairInfoVo.setStatesInfo(RepairEnumCN.stateOf(repair.getStatus()).getStateInfo());
repairInfoVos.add(repairInfoVo);
}
model.addAttribute("repairInfoVos", repairInfoVos);
return "/admin/finish";
}
@RequestMapping(value = "/urgent", method = RequestMethod.GET)
public String urgent(Model model) {
List<UrgentRepair> urgentRepairs = urgentRepairService.getAllUrgentRepair();
List<UrgentRepairResult> urgentRepairResults = new ArrayList<UrgentRepairResult>();
Student student;
Repair repair;
for (UrgentRepair urgentRepair : urgentRepairs) {
repair = repairService.getRepairById(urgentRepair.getRepairId());
student = studentService.getStudentById(urgentRepair.getStudentId());
urgentRepairResults.add(
// 登录成功后,为该学生生成session
httpSession.setAttribute(StudentConst.STUDENT_ID, id);
httpServletResponse.addCookie(new Cookie(StudentConst.STUDENT_ID, id));
System.out.println("StudentName:"+StudentConst.STUDENT_NAME);
httpServletResponse.addCookie(new Cookie(StudentConst.STUDENT_NAME, stuName));
}
logger.info("***************************************************************************");
logger.info("登录: " + String.valueOf(loginResult.isSuccess()) + " id : " + id + " password : " + password);
logger.info("***************************************************************************");
return loginResult;
}
/**
* 退出的控制
*
* @param httpSession
* @return
*/
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession httpSession) {
httpSession.removeAttribute(StudentConst.STUDENT_EMAIL);
return "redirect:/student/login";
}
/**
* 提交报修单的POST方法
*
* @param model
* @return
*/
@RequestMapping(value = "/commit", method = RequestMethod.GET)
public String commit(Model model) {
return "/student/commit";
}
@RequestMapping(value = "/commit", method = RequestMethod.POST)
public String commit(@RequestParam("detail") String detail, @RequestParam("place") String place,
@RequestParam("file") MultipartFile file, HttpServletRequest httpServletRequest) {
public class StudentSessionInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
Object email = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_EMAIL);
if (email == null) {
logger.info("用户尚未登录,将其重定向至登录页面");
httpServletResponse.sendRedirect("/student/login");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest hsr, HttpServletResponse hsr1, Object o, ModelAndView mav) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest hsr, HttpServletResponse hsr1, Object o, Exception excptn) throws Exception {
}
}
/**
* 系统管理员登录验证拦截器
*
*/
public class AdminSessionInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
Object email = httpServletRequest.getSession().getAttribute("ADMIN_EMAIL");
if (email == null) {
logger.info("管理员尚未登录,将其重定向至登录页面");
httpServletResponse.sendRedirect("/admin/login");
InputStream inputStream = file.getInputStream();
OutputStream outputStream = new FileOutputStream(targetFile);
byte[] buffer = new byte[2048];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
// 往数据库中插入维修单记录
repairService.submitRepair(detail, place, picMD5, student.getId());
}
return "redirect:/student/dashboard";
}
/**
* 获取显示的主页面
*
* @param model
* @return
*/
@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
public String board(Model model, HttpServletRequest httpServletRequest) {
String id = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
List<Repair> repairs = repairService.getRepqirByStudentId(id);
List<RepairInfoVo> repairInfoVos = new ArrayList<>();
for(Repair repair: repairs){
repair.setPicMD5("/"+repair.getPicMD5());
RepairInfoVo repairInfoVo = new RepairInfoVo(repair);
repairInfoVo.setStatesInfo(RepairEnumCN.stateOf(repair.getStatus()).getStateInfo());
repairInfoVos.add(repairInfoVo);
}
model.addAttribute("repairInfoVos", repairInfoVos);
String sno = httpServletRequest.getSession().getAttribute(StudentConst.STUDENT_ID).toString();
int id = repairId;
String picMD5 = "";
logger.info(detail);
logger.info(place);
logger.info(picMD5);
if (file != null) {
try {
picMD5 = MD5.getMD5(sno + String.valueOf(System.currentTimeMillis()) + file.getOriginalFilename());
} catch (Exception e) {
e.printStackTrace();
System.out.println("*************************************************");
}
// 保存现场照片
String path = httpServletRequest.getSession().getServletContext().getRealPath("/");
System.out.println("图片路径:" + path);
String fileName = picMD5;
File targetFile = new File(path, fileName);
try {
OutputStream outputStream = new FileOutputStream(targetFile);
InputStream inputStream = file.getInputStream();
byte[] buffer = new byte[2048];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 调用修改报修单接口
repairService.changeRepair(id, detail, place, picMD5);
technician = technicianService.getById(maintenance.getTechnicianId());
maintenanceResults.add(
new MaintenanceResult(
maintenance.getId(),
maintenance.getRepairId(), repair.getDetail(),
maintenance.getTechnicianId(), technician.getName(),
new Timestamp(System.currentTimeMillis())
)
);
}
model.addAttribute("list", maintenanceResults);
return "/admin/arrange";
}
@RequestMapping(value = "/arrange/{maintenanceId}/cancel", method = RequestMethod.GET)
public String cancelArrange(@PathVariable("maintenanceId") int maintenanceId) {
Maintenance maintenance = maintenanceService.getById(maintenanceId);
// 删除检修安排记录
maintenanceService.cancelMaintenance(maintenanceId);
// 同时也修改相应的维修单的状态
repairService.unArrangeRepair(maintenance.getRepairId());
return "redirect:/admin/arrange";
}
@RequestMapping(value = "/student", method = RequestMethod.GET)
public String student(Model model) {
List<Student> students = studentService.getAll();
List<StudentResult> studentResults = new ArrayList<StudentResult>();
for (Student student : students) {
studentResults.add(new StudentResult(
student.getId(), student.getName(), student.getPassword(),
student.getSexual(), student.getSexual() == 0 ? "男" : "女",
student.getEmail(), student.getPhone(), student.getDoor())
);
}
model.addAttribute("students", studentResults);
return "admin/student";
}
@RequestMapping(value = "/addstudent", method = RequestMethod.GET)
public String addStudent(Model model) {
return "/admin/addStudent";
}
/**
* 用户的web层
*
*/
@Controller
@CrossOrigin(origins = {"http://localhost:18084", "null"})
@RequestMapping("/student")
public class StudentController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private StudentService studentService;
@Resource
private RepairService repairService;
@Resource
private UrgentRepairService urgentRepairService;
@Resource
private DoorDao doorDao;
@RequestMapping(value = "/introduce", method = RequestMethod.GET)
public String index() {
return "student/introduce";
}
/**
* 登录的GET方法
*
* @return
*/
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "student/login";
}