基于javaweb+mysql的ssm+maven校园共享自行车管理系统(java+ssm+jsp+easyui+bootstrap+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SSM+Maven校园共享自行车管理系统(java+ssm+jsp+easyui+bootstrap+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项目:是;
技术栈
- 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+EasyUI+BootStrap+jQuery
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
/**
*/
@Controller
@RequestMapping("/orders")
public class OrdersController {
@Autowired
OrdersService ordersService;
//跳转到租赁管理页面
@RequestMapping("/ordersManage")
public String ordersMange(){
return "orders";
}
//添加或修改订单
@RequestMapping("/addOrUpdate")
@ResponseBody
public JsonResult addOrUpdate(Orders orders){
if(orders.getOid() == null) return ordersService.add(orders);
return ordersService.update(orders);
}
//点击修改按钮,加载订单表单
@RequestMapping("/loadForm")
@ResponseBody
public Orders loadForm(Integer oid){
return ordersService.findById(oid);
}
//显示所有的订单
@RequestMapping("/showAll")
@ResponseBody
public Page<Orders> show(Integer page, Integer rows){
return ordersService.findAllToPage(page,rows);
}
//删除订单
@RequestMapping("/remove")
@ResponseBody
public JsonResult remove(Integer oid,Integer oBid,String oState){
return ordersService.deleteById(oid,oBid,oState);
}
//回显服务点的表单数据
@RequestMapping("/loadForm")
@ResponseBody
public Place loadForm(Integer pid){
return placeService.findById(pid);
}
}
/**
* 登陆拦截器
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
//判断请求的地址 如果是 /admin/login 或 /admin/logout 就放行
String requestURI = httpServletRequest.getRequestURI();
String contextPath = httpServletRequest.getContextPath();
if(requestURI.equals(contextPath+"/admin/login") || requestURI.equals(contextPath+"/admin/logout") )
return true;
HttpSession session = httpServletRequest.getSession();
if(session.getAttribute("admin") == null){
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/login.jsp");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
/**
*/
@Controller
@RequestMapping("/orders")
public class OrdersController {
@Autowired
OrdersService ordersService;
//跳转到租赁管理页面
@RequestMapping("/ordersManage")
public String ordersMange(){
return "orders";
}
//添加或修改订单
@RequestMapping("/addOrUpdate")
@ResponseBody
public JsonResult addOrUpdate(Orders orders){
if(orders.getOid() == null) return ordersService.add(orders);
return ordersService.update(orders);
}
//点击修改按钮,加载订单表单
@RequestMapping("/loadForm")
@ResponseBody
public Orders loadForm(Integer oid){
return ordersService.findById(oid);
}
//显示所有的订单
@RequestMapping("/showAll")
@ResponseBody
public Page<Orders> show(Integer page, Integer rows){
return ordersService.findAllToPage(page,rows);
}
//删除订单
@RequestMapping("/remove")
@ResponseBody
public JsonResult remove(Integer oid,Integer oBid,String oState){
return ordersService.deleteById(oid,oBid,oState);
}
/**
*/
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminMapper adminMapper;
@Autowired
private PlaceMapper placeMapper;
@Override
public String checkUserPwd(Admin admin) {
String password = MD5Util.getMD5(admin.getaPassword());
Admin realAdmin = findByUsername(admin.getaUsername());
if(realAdmin != null ){
if(password.equals(realAdmin.getaPassword())){
return "成功";
}
return "密码错误~";
}
return "没有此账号~";
}
@Override
public boolean upDate(Admin admin) {
AdminExample adminExample = new AdminExample();
adminExample.createCriteria().andAUsernameEqualTo(admin.getaUsername());
int i = adminMapper.updateByExampleSelective(admin, adminExample);
return i > 0 ? true : false;
}
@Override
public Admin findByUsername(String username) {
AdminExample adminExample = new AdminExample();
adminExample.createCriteria().andAUsernameEqualTo(username);
List<Admin> admins = adminMapper.selectByExample(adminExample);
if(admins != null && admins.size() > 0){
Admin admin = admins.get(0);
//pid不为空设置站点对象
if(admin.getaPid() != null) {
admin.setPlace(placeMapper.selectByPrimaryKey(admin.getaPid()));
}
@RequestMapping("/loadPlace")
@ResponseBody
public List<Place> loadPlace(){
return adminService.loadPlace();
}
//回显用户表单
@RequestMapping("/loadForm")
@ResponseBody
public Admin loadForm(String username){
Admin admin = adminService.findByUsername(username);
return admin;
}
//addOrUpdate
@RequestMapping("/addOrUpdate")
@ResponseBody
public JsonResult addOrUpdate(MultipartFile adminIcon, Admin admin, HttpServletRequest request){
if(admin.getAid() == null) return adminService.add(adminIcon,admin,request);
return adminService.update(adminIcon,admin,request);
}
}
}
/**
*/
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public Student findBySno(String sno) {
StudentExample studentExample = new StudentExample();
studentExample.createCriteria().andSnoEqualTo(sno);
List<Student> students = studentMapper.selectByExample(studentExample);
if(students != null && students.size() > 0) return students.get(0);
return null;
}
@Override
public Page findAllToPage(Integer page, Integer rows) {
Page<Student> sPage = new Page<>();
List<Student> lists = studentMapper.findToPage((page-1)*rows,rows);
sPage.setRows(lists);
}
//添加或更新bike
@RequestMapping(value = "/addOrUpdate",method = RequestMethod.POST)
@ResponseBody
public JsonResult addOrUpdate(MultipartFile bikeIcon, Bike bike, HttpServletRequest request,Integer bCount){
if(bCount != null) return bikeService.add(bikeIcon,bike,request,bCount);
return bikeService.update(bikeIcon,bike,request);
}
//showAll bike
@RequestMapping("/showAll")
@ResponseBody
public Page<Bike> show(Integer page, Integer rows){
return bikeService.findAllToPage(page,rows);
}
//删除单车和更新单车的分类
@RequestMapping(value = "/remove",method = RequestMethod.POST)
@ResponseBody
public JsonResult remove(String bids,String cids){
return bikeService.deleteById(bids,cids);
}
//点击修改回显bike弹出表单
@RequestMapping("/loadForm")
@ResponseBody
public Bike loadForm(Integer bid){
return bikeService.findById(bid);
}
//回显bike分类
@RequestMapping(value = "/loadCategory",method = RequestMethod.POST)
@ResponseBody
public List<Category> loadCategory(){
return categoryService.findAll();
}
}
}
/**
*/
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
//跳转到student管理 jsp页面
@RequestMapping("/studentManage")
public String studentManage(){
return "student";
}
//添加或更新一个学生
@RequestMapping(value = "/addOrUpdate",method = RequestMethod.POST)
@ResponseBody
public JsonResult add(MultipartFile studentIcon, Student student, HttpServletRequest request){
if(student.getSid() == null || "".equals(student.getSid()))
return studentService.add(studentIcon,student,request);
return studentService.update(studentIcon,student,request);
}
//显示所有的学生
@RequestMapping("/showAll")
@ResponseBody
public Page<Student> show(Integer page,Integer rows){
return studentService.findAllToPage(page,rows);
}
/**
*/
@Controller
@RequestMapping("/place")
public class PlaceController {
@Autowired
private PlaceService placeService;
//跳转到 place 页面
@RequestMapping("/placeManage")
public String placeMange(){
return "place";
}
//显示所有服务点
@RequestMapping("/showAll")
@ResponseBody
public List<Place> showAll(){
return placeService.findAll();
}
//添加或更新服务点 addOrUpdate
@RequestMapping(value = "/addOrUpdate",method = RequestMethod.POST)
@ResponseBody
public JsonResult addOrUpdate(Place place){
if(place == null) return new JsonResult(false, ResultEnum.SYSTEM_ERROR);
if(place.getPid() == null ) return placeService.add(place);
return placeService.update(place);
}
return studentService.removeById(sid);
}
//回显 指定一个student数据到student页面的弹出框表单中
@RequestMapping("/loadForm")
@ResponseBody
public Student loadForm(Integer sid){
return studentService.findById(sid);
}
}
/**
*/
@Controller
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
//跳转到category页面
@RequestMapping("/categoryManage")
public String categoryMange(){
return "category";
/**
*/
@Service
public class BikeControllerImpl implements BikeService {
@Autowired
private BikeMapper bikeMapper;
@Autowired
private CategoryService categoryService;
//事务控制 该单车分类剩余量+1
@Transactional
@Override
public JsonResult add(MultipartFile bikeIcon, Bike bike, HttpServletRequest request,Integer bCount) {
if(!bikeIcon.isEmpty()){
String path = FileUtil.uploadImage(bikeIcon, "bikeIcon", request);
if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);
bike.setbIcon(path);
}
bike.setbState(BikeStateEnum.AVAILABLE.getState());
bike.setbCreateTime(new Date());
bike.setbUpdateTime(new Date());
try{
int row = 0;
for (int i = 0; i < bCount; i++) {
row += bikeMapper.insertSelective(bike);
}
if(row == bCount){
return categoryService.updateRemainById(bike.getbCid(),bCount) ?
new JsonResult(true, ResultEnum.ADD_SUCCESS):new JsonResult(false, ResultEnum.ADD_FAIL);
}else{
throw new RuntimeException();
}
}catch (Exception e){
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return new JsonResult(false,ResultEnum.SYSTEM_ERROR);
}
}
@Override
public JsonResult update(MultipartFile bikeIcon, Bike bike, HttpServletRequest request) {
try{
if(!bikeIcon.isEmpty()){
private CategoryService categoryService;
//跳转到 bike管理页面
@RequestMapping("/bikeManage")
public String bikeManage(){
return "bike";
}
//添加或更新bike
@RequestMapping(value = "/addOrUpdate",method = RequestMethod.POST)
@ResponseBody
public JsonResult addOrUpdate(MultipartFile bikeIcon, Bike bike, HttpServletRequest request,Integer bCount){
if(bCount != null) return bikeService.add(bikeIcon,bike,request,bCount);
return bikeService.update(bikeIcon,bike,request);
}
//showAll bike
@RequestMapping("/showAll")
@ResponseBody
public Page<Bike> show(Integer page, Integer rows){
return bikeService.findAllToPage(page,rows);
}
//删除单车和更新单车的分类
@RequestMapping(value = "/remove",method = RequestMethod.POST)
@ResponseBody
public JsonResult remove(String bids,String cids){
return bikeService.deleteById(bids,cids);
}
//点击修改回显bike弹出表单
@RequestMapping("/loadForm")
@ResponseBody
public Bike loadForm(Integer bid){
return bikeService.findById(bid);
}
//回显bike分类
@RequestMapping(value = "/loadCategory",method = RequestMethod.POST)
@ResponseBody
public List<Category> loadCategory(){
return categoryService.findAll();
}
/**
*/
public class FileUtil {
/**
*
* @param multipartFile 上传的文件
* @param saveDir 在images文件夹下面的哪个文件夹
* @param request
* @return 返回一个文件路径 如果null则上传失败
*/
public static String uploadImage(MultipartFile multipartFile,String saveDir, HttpServletRequest request){
if(!multipartFile.getContentType().startsWith("image/"))
return null;
String filename = multipartFile.getOriginalFilename();
String type = filename.substring(filename.lastIndexOf("."));
String newFilename = UUIDUtil.getUUIDByTime()+type;
String path = request.getServletContext().getRealPath("/images/"+saveDir)+"/"+newFilename;
try{
FileCopyUtils.copy(multipartFile.getInputStream(), new FileOutputStream(path));
return "images/"+saveDir+"/"+newFilename;
}catch (IOException e){
e.printStackTrace();
return null;
}
}
}
/**
//显示用户页面
@RequestMapping("/showAll")
@ResponseBody
public Page<Admin> showAll(Integer page, Integer rows){
return adminService.findAllToPage(page,rows);
}
//删除用户
@RequestMapping("/remove")
@ResponseBody
public JsonResult remove(Integer aid){
return adminService.deleteById(aid);
}
// 加载服务点到表单下拉框 loadPlace
@RequestMapping("/loadPlace")
@ResponseBody
public List<Place> loadPlace(){
return adminService.loadPlace();
}
//回显用户表单
@RequestMapping("/loadForm")
@ResponseBody
public Admin loadForm(String username){
Admin admin = adminService.findByUsername(username);
return admin;
}
//addOrUpdate
@RequestMapping("/addOrUpdate")
@ResponseBody
public JsonResult addOrUpdate(MultipartFile adminIcon, Admin admin, HttpServletRequest request){
if(admin.getAid() == null) return adminService.add(adminIcon,admin,request);
return adminService.update(adminIcon,admin,request);
}
@ResponseBody
public JsonResult remove(Integer pid){
return placeService.deleteById(pid);
}
//回显服务点的表单数据
@RequestMapping("/loadForm")
@ResponseBody
public Place loadForm(Integer pid){
return placeService.findById(pid);
}
}
/**
* 登陆拦截器
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
//判断请求的地址 如果是 /admin/login 或 /admin/logout 就放行
String requestURI = httpServletRequest.getRequestURI();
String contextPath = httpServletRequest.getContextPath();
if(requestURI.equals(contextPath+"/admin/login") || requestURI.equals(contextPath+"/admin/logout") )
return true;
HttpSession session = httpServletRequest.getSession();
if(session.getAttribute("admin") == null){
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/login.jsp");
JsonResult update(MultipartFile bikeIcon,Bike bike,HttpServletRequest request);
Page<Bike> findAllToPage(Integer page, Integer rows);
//当前bike d掉 和 更新该分类的数量
JsonResult deleteById(String bids,String cids);
Bike findById(Integer bid);
}
/**
*/
@Controller
@RequestMapping("total")
public class TotalController {
@Autowired
private TotalService totalService;
@RequestMapping("/totalManage")
public String totalMange(Model model){
Total totalBean = totalService.getTotalBean();
model.addAttribute("total",totalBean);
return "total";
}
}
/**
*/
}
@Override
public JsonResult add(MultipartFile adminIcon, Admin admin, HttpServletRequest request) {
if(!adminIcon.isEmpty()){
String path = FileUtil.uploadImage(adminIcon, "adminIcon", request);
if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);
admin.setaIcon(path);
}
if(admin.getaRole() == null) admin.setaRole(RoleEnum.MANAGER.getMassage());
admin.setaPassword(MD5Util.getMD5(admin.getaPassword()));
admin.setaCreateTime(new Date());
admin.setaUpdateTime(new Date());
try{
int row = adminMapper.insertSelective(admin);
return row > 0 ? new JsonResult(true, ResultEnum.ADD_SUCCESS)
: new JsonResult(false, ResultEnum.ADD_FAIL);
}catch (Exception e){
e.printStackTrace();
return new JsonResult(false, ResultEnum.REPEAT_ERROR);
}
}
@Override
public JsonResult update(MultipartFile adminIcon, Admin admin, HttpServletRequest request) {
try{
if(!adminIcon.isEmpty()){
//更新首先要先删除原来的文件
if(admin.getaIcon() != null){
File file = new File(request.getServletContext().getRealPath("/" + admin.getaIcon()));
// if(file != null) file.delete();
}
String path = FileUtil.uploadImage(adminIcon, "adminIcon", request);
if(path == null) return new JsonResult(false, ResultEnum.UPLOAD_TYPE_ERROR);
admin.setaIcon(path);
}
admin.setaUpdateTime(new Date());
int i = adminMapper.updateByPrimaryKeySelective(admin);
return i > 0 ? new JsonResult(false, ResultEnum.UPDATE_SUCCESS)
: new JsonResult(false, ResultEnum.UPDATE_FAIL);
}catch (Exception e){
e.printStackTrace();
return new JsonResult(false, ResultEnum.SYSTEM_ERROR);
}
}
}