本项目是基于Java语言的SSM框架作为后台进行设计,页面采用JSP,前端使用的是JS、CSS、JQUEY、BootStrap来实现并设计页面;数据库采用目前比较流行的MYSQL数据库进行信息存储,应用服务器采用Tomcat8.0。
系统架构图:
数据结构图:
景点库:
景点详情:
旅游线路:
线路详情:
酒店列表:
酒店详情:
前台个人管理:
后台登陆:
后台管理页面:
景点管理:
线路活动管理:
酒店管理:
后台管理员可以对前端的信息进行添加、修改、发布、删除、查看等操作。
主要包括旅游线路管理、景点信息管理、订单管理、留言评论管理、酒店管理、管理员登录退出模块。
酒店管理控制器代码:
@Controller
@RequestMapping("/hotel")
public class HotelController {
@Autowired
private HotelService hotelService ;/**
* 旅游酒店前台:分页查询
*/
@RequestMapping("/pageQuery")
@ResponseBody
public PageBean<Hotel> pageQuery(String currentPage,String pageSize,String cid){int cids = 3;//类别id
//2.处理参数
if(cid != null && cid.length() > 0 && !"null".equals(cid)){
cids = Integer.parseInt(cid);
}
int currentPages = 0;//当前页码,如果不传递,则默认为第一页
if(currentPage != null && currentPage.length() > 0){
currentPages = Integer.parseInt(currentPage);
}else{
currentPages = 1;
}int pageSizes = 0;//每页显示条数,如果不传递,默认每页显示5条记录
if(pageSize != null && pageSize.length() > 0){
pageSizes = Integer.parseInt(pageSize);
}else{
pageSizes = 5;
}//3. 调用service查询PageBean对象
PageBean<Hotel> pb = hotelService.pageQuery(cids, currentPages, pageSizes);//4. 将pageBean对象序列化为json,返回
return pb;
}/**
* 根据id查询一个旅游酒店的详细信息
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/findOne")
@ResponseBody
public Hotel findOne(String tid){
//1.调用service查询hotel对象
Hotel hotel = hotelService.findOne(tid);
//2.转为json写回客户端
return hotel;
}/**
* 首页查询旅游酒店酒店
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/findAll")
@ResponseBody
public ResultInfo findAll(String limit){
int limitNum = 12;
if (limit != null && limit.length() > 0) {
limitNum = Integer.parseInt(limit);
}
List<Hotel> hotels = new ArrayList<>();boolean flag = true;
try {
hotels = hotelService.findAll(limitNum);} catch (Exception ex) {
flag = false;
ex.printStackTrace();
}
ResultInfo info = new ResultInfo();
info.setData(hotels);
info.setFlag(true);return info;
}/**
* 后台管理:旅游酒店酒店
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/findAdminAll")
public ModelAndView findAdminAll(String currentPage,String pageSize,String cid) {int cids = 3;//类别id
//2.处理参数
if(cid != null && cid.length() > 0 && !"null".equals(cid)){
cids = Integer.parseInt(cid);
}
int currentPages = 0;//当前页码,如果不传递,则默认为第一页
if(currentPage != null && currentPage.length() > 0){
currentPages = Integer.parseInt(currentPage);
}else{
currentPages = 1;
}int pageSizes = 0;//每页显示条数,如果不传递,默认每页显示5条记录
if(pageSize != null && pageSize.length() > 0){
pageSizes = Integer.parseInt(pageSize);
}else{
pageSizes = 5;
}
//3. 调用service查询PageBean对象
PageBean<Hotel> pb = hotelService.pageQueryAdmin(cids, currentPages, pageSizes);
ModelAndView mv = new ModelAndView();
mv.addObject("pb", pb);
mv.setViewName("/admin/pages/hotel-list.jsp");
return mv;
}
/**
* 后台管理:旅游酒店酒店添加
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/addHotel")
public String addHotel(HttpServletRequest request,Hotel hotel, MultipartFile myFile) throws ServletException, IOException, ParseException {
String path = request.getServletContext().getRealPath("/img/product/small/");
String newFileName = "";
if(myFile!=null&&!myFile.isEmpty()) {
String fileName = myFile.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf("."));
newFileName = UUID.randomUUID() + suffix;
File file = new File(path + newFileName);
try{
myFile.transferTo(file);
}catch (Exception ex){
ex.printStackTrace();;
}}
hotel.setTdate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
hotel.setTimg("/img/product/small/"+newFileName);//执行添加功能
boolean result = hotelService.addHotel(hotel);return "redirect:/hotel/findAdminAll";
}/**
* 后台旅游酒店管理:修改查询单个酒店初始化
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/findHotelByRid")
public ModelAndView findHotelByRid(String rid){
Hotel hotel = hotelService.findOne(rid);
ModelAndView mv = new ModelAndView();
mv.addObject("hotel", hotel);
mv.setViewName("/admin/pages/hotel-update.jsp");
return mv;
}/**
* 后台管理:旅游酒店酒店添加
*
* @param request
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/addHotelImages")
public String addHotelImages(HttpServletRequest request,String tid,@RequestParam("myFiles") MultipartFile[] myFiles) throws IOException{HotelImg hotelImg = new HotelImg();
hotelImg.setTid(Integer.parseInt(tid));String path = request.getServletContext().getRealPath("/img/product/size6/");
for (MultipartFile multipartFile:myFiles) {
if(!multipartFile.isEmpty()&&multipartFile.getSize()>0) {
String fileName = multipartFile.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf("."));
String newFileName = UUID.randomUUID() + suffix;
File file = new File(path + newFileName);
multipartFile.transferTo(file);
hotelImg.setSmallPic("/img/product/size6/" + newFileName);
hotelImg.setBigPic("/img/product/size6/" + newFileName);
//循环插入图片
hotelService.addHotelImgs(hotelImg);
}
}//跳转到
return "redirect:/hotel/findAdminAll";}
/**
* 后台管理:旅游酒店酒店下架---酒店不要删除,因为有关联的订单
* @param request
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/updateHotel")
public String updateHotel(HttpServletRequest request,Hotel hotel,String nowimg,MultipartFile myFile) throws IOException {
String path = request.getServletContext().getRealPath("/img/product/small/");if(myFile!=null&&!myFile.isEmpty()) {
String fileName = myFile.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf("."));
String newFileName = UUID.randomUUID() + suffix;
File file = new File(path + newFileName);
myFile.transferTo(file);
hotel.setTdate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
hotel.setTimg("img/product/small/"+newFileName);
}else{
hotel.setTimg(nowimg);
}
hotel.setTdate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
//执行修改功能
boolean result = hotelService.updateHotel(hotel);
return "redirect:/hotel/findAdminAll";}
/**
* 后台旅游酒店管理:旅游酒店下线
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/updateFlag")
public String updateFlag(String rid, String rflag){
hotelService.updateFlag(rid,rflag);return "redirect:/hotel/findAdminAll";
}
}