基于Sprngboot+Vue的分布式酒店管理系统

简介: 基于Sprngboot+Vue的分布式酒店管理系统

使用技术:dubbo+zookeeper实现分布式


开发技术:springboot+springmvc+mybatis+shiro(权限管理)


开发工具:IDEA、ECLIPSE


数据库:MYSQL


第三方存储:阿里云OSS存储照片


依赖管理:Maven


前端技术:Vue


开发方式:前后端分离


项目编号:BS-XX-028


本系统功能完整,运行无误,页面交互性强,使用技术先进,适合做毕业设计使用。


部分功能展示:


登陆界面

image.png

宾客管理

image.png

客房管理

image.png

客人登记入住:

image.png

历史记录

image.png

角色管理

image.png

image.png

权限管理

image.png

本项目功能强大,技术先进,适合做毕业设计使用。

部分实现代码:

package gmail.zxm.dubboz1jdglweb.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import d.z1.entity.Authority;
import d.z1.entity.Message;
import d.z1.jdgl.api.IAuthorityService;
import gmail.zxm.dubboz1jdglweb.oss.OSSUtil;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.websocket.server.PathParam;
@RestController
@RequestMapping("/authority")
public class AuthorityController {
    @Reference
    private IAuthorityService authorityService;
    private Message msg = new Message();
    private static Logger log = LoggerFactory.getLogger(AuthorityController.class);
    @PostMapping("/add")
    public Message add(Authority authority, @RequestParam(value = "file",required = false) MultipartFile file) throws Exception {
        try {
//            文件不为null时,添加文件
            if (!file.isEmpty()) {
                String fileType = file.getContentType().replace("/", "_");
                authority.setPicture(OSSUtil.uploadDocument(file, fileType));
            }
            msg.setData(authorityService.add(authority));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/del")
    public Message del(Authority authority) throws Exception {
        if (authority == null)
            return msg;
        try {
//            获取文件的url访问地址
            String fileName = authority.getPicture().substring(authority.getPicture().indexOf("images"));
            msg.setData(authorityService.del(authority));
//            对象删除成功,删除图片
            OSSUtil.deleteDocument(fileName);
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @RequiresAuthentication
    @PostMapping("/rep")
    public Message rep(Authority authority,
                       @RequestParam(value = "file", required = false) MultipartFile file) throws Exception {
        try {
//            删除旧文件,并上传新文件
            if (file != null) {
                authority.setPicture(OSSUtil.updateDocument(file,
                        file.getContentType().replace("/", "_"),
                        authority.getPicture().substring(authority.getPicture().indexOf("images"))));
            }
            msg.setData(authorityService.rep(authority));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @RequiresAuthentication
    @GetMapping("/getAll/{startIndex}/{endSize}")
    public Message getAll(@PathVariable Integer startIndex,
                          @PathVariable Integer endSize) throws Exception {
        try {
            msg.setData(authorityService.getAll(startIndex, endSize));
            msg.setPageSizes(authorityService.getSize());
            msg.setStatus(200);
            System.out.println(authorityService.getAll(startIndex, endSize));
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/getT")
    public Message getT(Authority authority, @RequestParam("startIndex") Integer startIndex,
                        @RequestParam("endSize") Integer endSize) throws Exception {
        try {
            msg.setData(authorityService.getT(authority, startIndex, endSize));
            msg.setPageSizes(authorityService.getSize());
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    /**
     * 接口默认方法,根据权限名,返回,该权限的状态,是否启用权限
     *
     * @param auth 权限名
     * @return 返回满足条件的一个字段
     */
    @GetMapping("/getAuthority/{auth}")
    public Message getAuthority(@PathVariable String[] auth) throws Exception {
        try {
            msg.setData(authorityService.getAuthority(auth));
            msg.setStatus(200);
            System.out.println(msg);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
}
package gmail.zxm.dubboz1jdglweb.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import d.z1.entity.Book;
import d.z1.entity.Message;
import d.z1.jdgl.api.IBookService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import javax.websocket.server.PathParam;
@RestController
@RequestMapping("/book")
public class BookController {
    @Reference
    private IBookService bookService;
    private Message msg = new Message();
    @PostMapping("/add")
    @RequiresPermissions("book:add")
    public Message add(Book book)throws Exception {
        try {
            msg.setData(bookService.add(book));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/del")
    @RequiresPermissions("book:del")
    public Message del(Book book)throws Exception {
        System.out.println(book.getRecord());
        if (book == null)
            return msg;
        try {
            msg.setData(bookService.del(book));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/rep")
    @RequiresPermissions("book:rep")
    public Message rep(Book book)throws Exception {
        try {
            msg.setData(bookService.rep(book));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @GetMapping("/getAll/{startIndex}/{endSize}")
    @RequiresAuthentication
    public Message getAll(@PathVariable Integer startIndex, @PathVariable Integer endSize)throws Exception {
        try {
            msg.setData(bookService.getAll(startIndex,endSize));
            msg.setPageSizes(bookService.getSize());
            msg.setStatus(200);
            System.out.println(bookService.getAll(startIndex,endSize));
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/getT")
    @RequiresAuthentication
    public Message getT(Book book, @RequestParam("startIndex") Integer startIndex,
                        @RequestParam("endSize") Integer endSize)throws Exception {
        try {
            msg.setData(bookService.getT(book,startIndex,endSize));
            msg.setPageSizes(bookService.getSize());
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
}
package gmail.zxm.dubboz1jdglweb.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import d.z1.entity.Message;
import d.z1.jdgl.api.ICustomerService;
import d.z1.entity.Customer;
import gmail.zxm.dubboz1jdglweb.oss.OSSUtil;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.websocket.server.PathParam;
@RestController
@RequestMapping("/customer")
public class CustomerController {
    @Reference
    private ICustomerService customerService;
    private Message msg = new Message();
    @PostMapping("/add")
    @RequiresPermissions("customer:add")
    public Message add(Customer customer, @RequestParam(value = "file",required = false) MultipartFile file) throws Exception {
        try {
//            文件不为null时,添加新文件
            if (file != null)
                customer.setCustomerPicture(OSSUtil.uploadDocument(file, file.getContentType().replace("/","_")));
            msg.setData(customerService.add(customer));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/del")
    @RequiresPermissions("customer:del")
    public Message del(Customer customer) throws Exception {
        if (customer == null)
            return msg;
        try {
//            获取文件url访问地址
            String fileName = customer.getCustomerPicture().substring(customer.getCustomerPicture().indexOf("images"));
            msg.setData(customerService.del(customer));
//            对象删除成功时,根据文件名删除文件
            OSSUtil.deleteDocument(fileName);
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/rep")
    @RequiresPermissions("customer:rep")
    public Message rep(Customer customer, @RequestParam(value = "file",required = false) MultipartFile file) throws Exception {
        try {
//            删除旧文件,并上传新文件
            if (file != null){
                customer.setCustomerPicture(OSSUtil.updateDocument(file,
                        file.getContentType().replace("/","_"),
                        customer.getCustomerPicture().substring(customer.getCustomerPicture().indexOf("upload"))));
            }
            msg.setData(customerService.rep(customer));
            msg.setPageSizes(1);
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @RequiresAuthentication
    @GetMapping("/getAll/{startIndex}/{endSize}")
    public Message getAll(@PathVariable Integer startIndex,
                          @PathVariable Integer endSize) throws Exception {
        try {
            msg.setData(customerService.getAll(startIndex, endSize));
            msg.setPageSizes(customerService.getSize());
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
    @PostMapping("/getT")
    @RequiresAuthentication
    public Message getT(Customer customer, @RequestParam("startIndex") Integer startIndex,
                        @RequestParam("endSize") Integer endSize) throws Exception {
        try {
            msg.setData(customerService.getT(customer, startIndex, endSize));
            msg.setPageSizes(customerService.getSize());
            msg.setStatus(200);
        } catch (Exception e) {
            throw e;
        }
        return msg;
    }
}
相关文章
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
92 2
|
23天前
|
JavaScript 网络架构
Vue中实现分布式动态路由:基础步骤详解
Vue中实现分布式动态路由:基础步骤详解
19 2
|
2月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
3月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的大学生入伍人员管理系统附带文章源码部署视频讲解等
90 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp宿舍管理系统的附带文章源码部署视频讲解等
82 3
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的地方特色美食分享管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的地方特色美食分享管理系统附带文章源码部署视频讲解等
36 2
|
24天前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
103 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
下一篇
无影云桌面