基于javaweb+mysql的ssm+maven在线汽车租赁系统(前台+后台)(java+jsp+ssm+layui+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM+Maven在线汽车租赁系统(前台+后台)(java+jsp+ssm+layui+mysql)
一、项目简述 环境配置:
Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)
项目技术:
JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等
/**
* 统计分析
*/
@RequestMapping("stat")
@Controller
public class StatController {
@Autowired
private StatService statService;
@Autowired
private CustomerService customerService;
@Autowired
private RentService rentService;
/**
* 跳转到客户地区统计页面
*/
@RequestMapping("toCustomerAreaStat")
public String toCustomerAreaStat(){
return "stat/customerAreaStat";
}
/**
* 加载客户地区数据
* @return
*/
@RequestMapping("loadCustomerAreaStatJson")
@ResponseBody
public List<BaseEntity> loadCustomerAreaStatJson(){
return this.statService.loadCustomerAreaStatList();
}
* @return
*/
@RequestMapping("loadAllUser")
public DataGridView loadAllUser(UserVo userVo){
return this.userService.queryAllUser(userVo);
}
/**
* 添加用户
* @param userVo
* @return
*/
@RequestMapping("addUser")
public ResultObj addUser(UserVo userVo){
try {
this.userService.addUser(userVo);
return ResultObj.ADD_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.ADD_ERROR;
}
}
/**
* 修改用户
* @param userVo
* @return
*/
@RequestMapping("updateUser")
public ResultObj updateUser(UserVo userVo){
try {
this.userService.updateUser(userVo);
return ResultObj.UPDATE_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.UPDATE_ERROR;
}
}
/**
* 删除用户
* @param userVo
* @return
*/
@RequestMapping("deleteUser")
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 文件下载
* @param response
* @param path
* @param oldName
* @return
*/
public static ResponseEntity<Object> downloadFile(HttpServletResponse response, String path, String oldName) {
//4,使用绝对路径+相对路径去找到文件对象
File file=new File(AppFileUtils.PATH,path);
//5,判断文件是否存在
if(file.exists()) {
try {
try {
//如果名字有中文 要处理编码
oldName=URLEncoder.encode(oldName, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
//把file转成一个bytes
byte [] bytes=FileUtils.readFileToByteArray(file);
HttpHeaders header=new HttpHeaders();
//封装响应内容类型(APPLICATION_OCTET_STREAM 响应的内容不限定)
header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//设置下载的文件的名称
header.setContentDispositionFormData("attachment", oldName);
//创建ResponseEntity对象
ResponseEntity<Object> entity=
new ResponseEntity<Object>(bytes, header, HttpStatus.CREATED);
return entity;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}else {
PrintWriter out;
try {
out = response.getWriter();
out.write("文件不存在");
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 加载车辆列表返回DataGridView
*
* @param carVo
* @return
*/
@RequestMapping("loadAllCar")
public DataGridView loadAllCar(CarVo carVo) {
return this.carService.queryAllCar(carVo);
}
/**
* 添加一个车辆
*
* @param carVo
* @return
*/
@RequestMapping("addCar")
public ResultObj addCar(CarVo carVo) {
try {
carVo.setCreatetime(new Date());
//如果不是默认图片就去掉图片的_temp的后缀
if (!carVo.getCarimg().equals(SysConstant.DEFAULT_CAR_IMG)) {
String filePath = AppFileUtils.updateFileName(carVo.getCarimg(), SysConstant.FILE_UPLOAD_TEMP);
carVo.setCarimg(filePath);
}
this.carService.addCar(carVo);
return ResultObj.ADD_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.ADD_ERROR;
}
}
/**
* 修改一个车辆
*
* @param carVo
* @return
*/
@RequestMapping("updateCar")
public ResultObj updateCar(CarVo carVo) {
try {
String carimg = carVo.getCarimg();
if (carimg.endsWith(SysConstant.FILE_UPLOAD_TEMP)) {
/**
* (TbUser)表控制层
*
*/
@Controller
public class TbUserController {
/**
* 服务对象
*/
@Autowired
private TbUserService tbUserService;
/*首页*/
@RequestMapping(value = "/user/index.action")
public String showCarIndex(Model mv,HttpSession httpSession){
System.out.println("打开首页成功");
TbUser tbUser = new TbUser();
List<BusCar> arrayList = tbUserService.carAllByLimit(1,6);
mv.addAttribute("car",arrayList);
tbUser = (TbUser) httpSession.getAttribute("tbuser");
mv.addAttribute("tbuser",tbUser);
return "user/index";
}
@RequestMapping("carDetail.action")
public String carDetail(String car,Model model){
BusCar busCarcar = tbUserService.carByCarNumber(car);
model.addAttribute("car",busCarcar);
System.out.println("车牌号是"+car);
return "user/car_detail";
}
/**
* 跳转登录页面
* @param model
* @return
}
/**
* 根据id判断当前菜单有没有子节点
* 有返回code=>0
* @param menuVo
* @return
*/
@RequestMapping("checkMenuHasChildren")
public ResultObj checkMenuHasChildren(MenuVo menuVo){
Integer count = menuService.queryMenuByPid(menuVo.getId());
if (count>0){
return ResultObj.STATUS_TRUE;
}else {
return ResultObj.STATUS_FALSE;
}
}
/**
* 删除菜单
* @param menuVo
* @return
*/
@RequestMapping("deleteMenu")
public ResultObj deleteMenu(MenuVo menuVo){
try {
this.menuService.deleteMenu(menuVo);
return ResultObj.DELETE_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.DELETE_ERROR;
}
}
}
package com.alfred.bus.controller;
public ResultObj updateMenu(MenuVo menuVo){
try {
this.menuService.updateMenu(menuVo);
//修改成功
return ResultObj.UPDATE_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
//修改失败
return ResultObj.UPDATE_ERROR;
}
}
/**
* 根据id判断当前菜单有没有子节点
* 有返回code=>0
* @param menuVo
* @return
*/
@RequestMapping("checkMenuHasChildren")
public ResultObj checkMenuHasChildren(MenuVo menuVo){
Integer count = menuService.queryMenuByPid(menuVo.getId());
if (count>0){
return ResultObj.STATUS_TRUE;
}else {
return ResultObj.STATUS_FALSE;
}
}
/**
* 删除菜单
* @param menuVo
* @return
*/
@RequestMapping("deleteMenu")
public ResultObj deleteMenu(MenuVo menuVo){
try {
this.menuService.deleteMenu(menuVo);
return ResultObj.DELETE_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.DELETE_ERROR;
}
}
* @param rentVo
* @return
*/
@RequestMapping("checkCustomerExist")
public ResultObj checkCustomerExist(RentVo rentVo){
Customer customer = customerService.queryCustomerByIdentity(rentVo.getIdentity());
if(customer!=null){
return ResultObj.STATUS_TRUE;
}else {
return ResultObj.STATUS_FALSE;
}
}
/**
* 初始化添加出租单的表单的数据
* @param rentVo
* @return
*/
@RequestMapping("initRentFrom")
public RentVo initRentFrom(RentVo rentVo){
//生成出租单号
rentVo.setRentid(RandomUtils.createRandomStringUseTime(SysConstant.CAR_ORDER_CZ));
//设置起租时间
rentVo.setBegindate(new Date());
//设置操作员
User user = (User) WebUtils.getHttpSession().getAttribute("user");
rentVo.setOpername(user.getRealname());
return rentVo;
}
/**
* 保存出租单信息
* @param rentVo
* @return
*/
@RequestMapping("saveRent")
public ResultObj saveRent(RentVo rentVo) {
try {
//设置创建时间
rentVo.setCreatetime(new Date());
//设置归还状态
rentVo.setRentflag(SysConstant.RENT_BACK_FALSE);
//保存
this.rentService.addRent(rentVo);
return ResultObj.ADD_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
logInfoVo.setLoginname(user.getRealname()+"-"+user.getLoginname());
logInfoVo.setLoginip(WebUtils.getHttpServletRequest().getRemoteAddr());
logInfoService.addLogInfo(logInfoVo);
WebUtils.getServletRequestAttributes().setAttribute("user",user,1);
return "system/main/index";
}else {
model.addAttribute("error", SysConstant.USER_LOGIN_ERROR_MSG);
return "system/main/login";
}
}else {
model.addAttribute("error", SysConstant.USER_LOGIN_CODE_ERROR_MSG);
return "system/main/login";
}
}
@RequestMapping("getCode")
public void getCode(HttpServletResponse response, HttpSession session) throws IOException {
//定义图形验证码的长和宽
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(116,36,4,5);
session.setAttribute("code",lineCaptcha.getCode());
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(lineCaptcha.getImage(),"JPEG",outputStream);
}
}
package com.alfred.sys.utils;
public class AppFileUtils {
/**
* 得到文件上传的路径
*/
public static String PATH;
static {
InputStream stream = AppFileUtils.class.getClassLoader().getResourceAsStream("file.properties");
/**
* web的工具类
*
*/
public class WebUtils {
public static ServletRequestAttributes getServletRequestAttributes() {
return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
}
/**
* 得到当前线程的请求对象
* @return
*/
public static HttpServletRequest getHttpServletRequest() {
return getServletRequestAttributes().getRequest();
}
/**
* 得到当前线程的响应对象
*/
public static HttpServletResponse getHttpServletResponse() {
return getServletRequestAttributes().getResponse();
}
/**
* 得到session对象
*/
public static HttpSession getHttpSession() {
return getHttpServletRequest().getSession();
}
/**
* 得到servletContext对象
*/
public static String getServletContext() {
return getHttpServletRequest().getServletPath();
}
/**
*/
@RestController
@RequestMapping("news")
public class NewsController {
@Autowired
private NewsService newsService;
/**
* 加载公告列表返回DataGridView
* @param newsVo
* @return
*/
@RequestMapping("loadAllNews")
public DataGridView loadAllNews(NewsVo newsVo){
return this.newsService.queryAllNews(newsVo);
}
/**
* 添加公告
* @return
*/
@RequestMapping("addNews")
public ResultObj addNews(NewsVo newsVo){
try {
newsVo.setCreatetime(new Date());
User user=(User) WebUtils.getHttpSession().getAttribute("user");
busCar.setPrice(arrayList.get(i).getPrice());
//租金
busCar.setRentprice(arrayList.get(i).getRentprice());
linkedList.add(busCar);
}
model.addAttribute("car",arrayList);
model.addAttribute("tbuser",tbUser);
httpSession.setAttribute("tbuser",tbUser);
return "user/index";
}
}
/*登录成功后进入用户中心*/
@RequestMapping("/user/userCenter.action")
public String userCenter(Model model,HttpSession httpSession){
TbUser tbUser = new TbUser();
tbUser = (TbUser) httpSession.getAttribute("tbuser");
model.addAttribute("tbuser",tbUser);
return "user/user_center";
}
/**
* 登录成功后用户可以退出
* @param request
* @return
*/
@RequestMapping(value = "/user/user_out.action",method = RequestMethod.GET)
public String user_out(HttpServletRequest request){
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
session.removeAttribute("tbuser");
System.out.println("用户退出成功");
return "user/user_out";
}
/**
* 跳转注册页面
* @returner
*/
@RequestMapping("/user/register.action")
public String register(Model model) {
TbUser tbUser = new TbUser();
@RequestMapping("loadAllCar")
public DataGridView loadAllCar(CarVo carVo) {
return this.carService.queryAllCar(carVo);
}
/**
* 添加一个车辆
*
* @param carVo
* @return
*/
@RequestMapping("addCar")
public ResultObj addCar(CarVo carVo) {
try {
carVo.setCreatetime(new Date());
//如果不是默认图片就去掉图片的_temp的后缀
if (!carVo.getCarimg().equals(SysConstant.DEFAULT_CAR_IMG)) {
String filePath = AppFileUtils.updateFileName(carVo.getCarimg(), SysConstant.FILE_UPLOAD_TEMP);
carVo.setCarimg(filePath);
}
this.carService.addCar(carVo);
return ResultObj.ADD_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.ADD_ERROR;
}
}
/**
* 修改一个车辆
*
* @param carVo
* @return
*/
@RequestMapping("updateCar")
public ResultObj updateCar(CarVo carVo) {
try {
String carimg = carVo.getCarimg();
if (carimg.endsWith(SysConstant.FILE_UPLOAD_TEMP)) {
String filePath = AppFileUtils.updateFileName(carVo.getCarimg(), SysConstant.FILE_UPLOAD_TEMP);
carVo.setCarimg(filePath);
//把原来的删除
Car car = this.carService.queryCarByCarNumber(carVo.getCarnumber());
AppFileUtils.removeFileByPath(car.getCarimg());
*/
@RestController
@RequestMapping("menu")
public class MenuController {
@Autowired
private MenuService menuService;
@RequestMapping("loadIndexLeftMenuJson")
public List<TreeNode> loadIndexLeftMenuJson(MenuVo menuVo) {
//得到当前用户登录的对象
User user = (User) WebUtils.getHttpSession().getAttribute("user");
List<Menu> list = null;
menuVo.setAvailable(SysConstant.AVAILABLE_TRUE);//只用于查询可用的
if (user.getType() == SysConstant.USER_TYPE_SUPER) {
list = menuService.queryAllMenuForList(menuVo);
} else {
list = menuService.queryMenuByUserIdForList(menuVo, user.getUserid());
}
List<TreeNode> nodes = new ArrayList<>();
//把list里的数据方到nodes
for (Menu menu : list) {
Integer id = menu.getId();
Integer pid = menu.getPid();
String title = menu.getTitle();
String icon = menu.getIcon();
String href = menu.getHref();
Boolean spread = menu.getSpread() == SysConstant.SPREAD_TRUE ? true : false;
String target = menu.getTarget();
nodes.add(new TreeNode(id, pid, title, icon, href, spread, target));
}
return TreeNodeBuilder.builder(nodes, 1);
}
/**
* 加载菜单管理左边的菜单树
* @param menuVo
* @return
*/
@RequestMapping("loadMenuManagerLeftTreeJson")
public DataGridView loadMenuManagerLeftTreeJson(MenuVo menuVo) {
menuVo.setAvailable(SysConstant.AVAILABLE_TRUE);
List<Menu> list = this.menuService.queryAllMenuForList(menuVo);
List<TreeNode> nodes = new ArrayList<>();
for (Menu menu : list) {
Integer id = menu.getId();
Integer pid = menu.getPid();
* web的工具类
*
*/
public class WebUtils {
public static ServletRequestAttributes getServletRequestAttributes() {
return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
}
/**
* 得到当前线程的请求对象
* @return
*/
public static HttpServletRequest getHttpServletRequest() {
return getServletRequestAttributes().getRequest();
}
/**
* 得到当前线程的响应对象
*/
public static HttpServletResponse getHttpServletResponse() {
return getServletRequestAttributes().getResponse();
}
/**
* 得到session对象
*/
public static HttpSession getHttpSession() {
return getHttpServletRequest().getSession();
}
/**
* 得到servletContext对象
*/
public static String getServletContext() {
return getHttpServletRequest().getServletPath();
}
}
package com.alfred.sys.controller;
*/
@Controller
@RequestMapping("login")
public class LoginController {
@Autowired
private UserService userService;
@Autowired
private LogInfoService logInfoService;
/**
* @return 跳转到登录页面的方法
*/
@RequestMapping("toLogin")
public String toLogin(){
return "system/main/login";
}
/**
* .登陆方法
* @param userVo
* @param model
* @return
*/
@RequestMapping("login")
public String login(UserVo userVo, Model model){
String code = "";
if(WebUtils.getHttpSession().getAttribute("code").toString() == null){
return "/";
}else{
code = WebUtils.getHttpSession().getAttribute("code").toString();
}
if(userVo.getCode().equals(code)){
User user = this.userService.login(userVo);
System.out.println("user = " + user);
if(null!=user){
//放入到session
WebUtils.getHttpSession().setAttribute("user",user);
//记录登录日志向sys_login_log里插入数据
* @param checkVo
* @return
*/
@RequestMapping("loadAllCheck")
public DataGridView loadAllCheck(CheckVo checkVo){
return this.checkService.queryAllCheck(checkVo);
}
/**
* 删除一个检查单
* @param checkVo
* @return
*/
@RequestMapping("deleteCheck")
public ResultObj deleteCheck(CheckVo checkVo){
try{
this.checkService.deleteCheck(checkVo);
return ResultObj.DELETE_SUCCESS;
}catch (Exception e){
e.printStackTrace();
return ResultObj.DELETE_ERROR;
}
}
/**
* 批量删除检查单
* @return
*/
@RequestMapping("deleteBatchCheck")
public ResultObj deleteBatchCheck(CheckVo checkVo){
try{
this.checkService.deleteBatchCheck(checkVo.getIds());
return ResultObj.DELETE_SUCCESS;
}catch (Exception e){
e.printStackTrace();
return ResultObj.DELETE_ERROR;
}
}
/**
* 更新检查单
* @param checkVo
* @return
*/
@RequestMapping("updateCheck")
public ResultObj updateCheck(CheckVo checkVo){
try {
this.checkService.updateCheck(checkVo);
return ResultObj.UPDATE_SUCCESS;
}catch (Exception e){
e.printStackTrace();
public List<BaseEntity> loadCustomerAreaSexStatJson(String area){
System.out.println("HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
System.out.println(this.statService.loadCustomerAreaSexStatList(area));
return this.statService.loadCustomerAreaSexStatList(area);
}
/**
* 跳转到业务员年度业务统计
* @return
*/
@RequestMapping("toOpernameYearGradeStat")
public String toOpernameYearGradeStat(){
return "stat/opernameYearGradeStat";
}
/**
* 加载业务员年度业务统计数据
* @return
*/
@RequestMapping("loadOpernameYearGradeStatJson")
@ResponseBody
public Map<String,Object> loadOpernameYearGradeStatJson(String year){
List<BaseEntity> entities = this.statService.loadOpernameYearGradeStatList(year);
Map<String,Object> map = new HashMap<String, Object>();
List<String> names = new ArrayList<String>();
List<Double> values = new ArrayList<Double>();
for (BaseEntity baseEntity : entities) {
names.add(baseEntity.getName());
values.add(baseEntity.getValue());
}
map.put("name",names);
map.put("value",values);
return map;
}
/**
* 跳转到公司年度业务统计
* @return
*/
@RequestMapping("toCompanyYearGradeStat")
public String toCompanyYearGradeStat(){
return "stat/companyYearGradeStat";
}
/**
* 加载公司年度业务统计数据
* @return
*/
@RequestMapping("loadCompanyYearGradeStatJson")
@ResponseBody
public List<Double> loadCompanyYearGradeStatJson(String year){