前后端分离demo 旅馆管理系统(Angular+Springboot)

news2024/11/24 4:22:04

模型设计

  旅馆管理系统,主要涉及到登记入住,退房以及客房和客人信息管理;经过分析抽像出涉及到的实体以及各实体之间的关系:

  可以看出整个业务以客房为中心,入住,退房,定价,收费都是以客房为基本单位,所以需要以客房为中心来设计各实体之间的关系。
  我们来看一下,各实体中的字段以及各实体之间的关系图:

业务流程

登记入住

退房

管理

客房信息管理

客人信息管理

页面设计

登记入住

退房

管理

客房信息管理

增加客房

更改房型

床铺管理

更改可预订状态

客人信息管理

功能设计

登记入住

使用背景
  登记功能是当客人来办理入住时使用,需要填写客人的基本信息,入住客房以及入住日期等信息。
主要逻辑
用户在填写客人信息时,前端会对相应数据的有效性进行校验,主要校验包括:

  • 填写过程中需要对填写的信息进行有效性校验,比如身份证号/手机号等;

  • 入住日期的选择需要根据所入住的房型来决定是选择到天还是到分钟,而且选择的日期不能晚于当天。
    后端也会对进行有效性以及其它的一些判断:

  • 也需要对传入的身份证号/手机号进行相同校验.

  • 判断入住的客房是否存在,所选的客房是否是不可订,所选客房是否有床铺和价格

  • 身份证号的客人是否存在多个以及相同身份证号不能两次登记入住同一房间等
    还有一些铺助功能,方便用户使用,减少错误,提高效率:

  • 前端用户在输入客房号时,会有一个下拉帮助框,显示客房的状态,房型等信息,有助于用户简间明了解所入住客房状态;

  • 当用户选择的是已经有客的客户时,日期则变为灰色,自动显示客房当前的入住和退房时间,不可更改。

  • 客房号在登记时,不会显示不可订状态的客房;
    请求到达服务器后,在判断数据合法后,查询入住的客房信息,将其添加进客房信息中,然后保存(客房-客人关系由客房维护);

退房

使用背景
  退房是客人登记入住后,到时间后退房使用;
主要逻辑
  退房功能首先是用户通过条件查询到需要退的客房,确认信息无误后,点击退房按钮,后端会根据入住,退房时间以及当前房价进行计算,如果退房成功,则返回用户退房结果,包括客人入住的时间以及房费。

管理

客房管理

使用背景
  客房管理是当新增客房,修改房型,管理床铺等时使用;不能删除客户,因为客户会参与到一系列的业务中,不允许删除,允许置为不可预订状态;
主要逻辑
  首先会分页列出所有客房信息,包括客房当前状态,房型,房价,床铺数,客人数以及总收入,并可进行相应排序与筛选。
  客房当前有客时,不可以修改房型与可预订状态。
  用户点击新增客房按钮时,会弹出对话框,填写客房号以及房型,确认房存,当然前端会要求房号和房型必填,后端也会进行相应判断,而且还会判断客房号是否已存在,如果不存在,则添加客房默认状态,并新增,新增成功后,前端会将后端返回的新客房信息放入列表中。
  用户点击更改房型时,弹出对话框,用户选择房型(小时房、天房、月房),会带出这几个房型当前最新价格以及有效期(没有,则截止日期默认为9999-12-31 23:59:59),当用户选择小时房时,有效期精确到分钟,其它房型到天,用户可以更改当前房价,有效期间也可以不更改,确定保存,浏览器等待服务器返回正确或错误的消息,然后进行相应提示,如果成功,则更改前端客房信息为最新信息。
  用户点击床铺管理时,弹出对话框,用户可以进行新增,修改,删除床铺,如果没有保存,则不会影响前端客房信息,确定时会等待后端处理返回,并给出相应消息提示,成功则个性前端客房信息,失败则不修改;
  用户点击可预订与不可预订状态开关时,会请求服务器,此时前端会等待,当服务器返回成功时,才修改前端客房当前状态,失败则给出消息,不做任何修改;

客人管理

使用背景
  客人管理是当需要修改或清理客人信息时使用;不能用于新增客人,因为新增客人通过登记入口添加。
主要逻辑
  用户首先根据客人信息模糊查询客人信息,然后进行更改或删除,当客人当前正入住时,则不允许删除(前后端都校验),修改包括修改客人姓名,身份证号,手机号,身份证号和手机号要符合相应的校验规则(前后端都校验),而且在保存时,后端还会判断身份证号不能与现在其它客人身份证号相同,确定无误后进行更新;在请求服务器时,浏览器会等待直到服务器返回结果;

接口设计

接口概览

  目前restful接口类共有两个,一个是客房接口,一个是客人接口

  其中客人接口查询,更新,删除,没有单独的增加接口,因为新增客人信息是通过客房的登记接口实现;
  客房的接口包括查询,新增,更改,其中查询有模糊查询和根据客房ID查询,而更新实质上有三个接口,一个是普通的更新接口,客房数据结构中有值的字段更新,null的字段则不更新;其它两个更新一个是登记,一个退房,这两个是特殊的更新,因逻辑与普通更新逻辑相差太大,所以单独拿出来;

返回类型

  返回类型统一为:ResponseEntity
  ResultDto 包括返回成功失败标识,消息码,消息,数据;ResponseEntity是Spring自带的类,使用它可以灵活自定义返回的HttpCode;这样当返回错误消息时,可以设置HttpCode为400或500等,而不是200,使语义一致。
  特殊情况:前端需要直接使用返回的结果情况下(比如自动补全搜索框,由前端请求服务端,直接得到结果,不需要封装),不能使用这样的返回类型;
  前端通过service向服务器发起请求,统一处理服务器返回结果以及http错误消息,不用再到component中处理;

异常处理

  前后端异常都是统一处理;前端是在service中处理,后端在统一的异常处理类中处理;异常处理类可以处理异常,还可以统一处理校验异常,包括controller方法参数的直接校验以及dto中的校验异常,不用在controller每个方法体中判断;

开发工具

  • webstorm
  • Intellij Idea

开发技术

名称框架版本
前端框架angular^6.0.3
UI框架ng-zorro-antd^1.1.1
Web框架springboot1.5.14.RELEASE

在线演示

如果文中有什么不合理的地方,请指出!如果对您有所帮助,欢迎Star

GitHub: https://github.com/Cool-Coding/angular-springboot-demo

bug反馈及建议: https://github.com/Cool-Coding/angular-springboot-demo/issues

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Build an SAP Fiori App(一)后面更新中

1.登录 SAP BTP Trial 地址: https://account.hanatrial.ondemand.com 流程可以参考 点击 serviced marketplace 搜索studio 点击创建 点击创建,点击view subscription 点击go to application 创建完成后 添加新链接 Field Value Name ES5 - if you’…

Shell基础入门实战

写在前面 好久没在项目内做自动化了,主要是现阶段在项目内做自动化收益不大,最近开发做batch run的正好缺人,我看了一下代码,就是通过代码读取jar包和远程服务器连接,然后通过shell脚本,向数据库插入数据&a…

如何成为一名优秀的接口自动化测试工程师?了解这些技能是关键

摘要: 随着互联网行业的不断发展,越来越多的应用程序通过API接口提供服务。因此,接口自动化测试成为了保障软件质量的重要环节。本文将介绍接口自动化测试所需掌握的技能,以及相关的历史进程。 B站首推!2023最详细自…

什么是 Java 垃圾回收器~

什么是 Java 垃圾回收器 Java 垃圾回收器是 Java 虚拟机 (JVM) 的三个重要模块 (另外两个是解释器和多线程机制) 之一,为应用程序提供内存的自动分配 (Memory Allocation)、自动回收 (Garbage Collect) 功能,这两个操作都发生在 Java 堆上 (一段内存快)…

sqoop安装

文章目录 1. 上传安装包至虚拟机2. 解压安装包到指定路径3. 修改目录名4. 配置环境变量5. 修改配置文件6. 拷贝mysql驱动包7. 验证安装是否成功8. 测试sqoop连接mysql 注:sqoop安装的前提条件是环境已安装java和hadoop 1. 上传安装包至虚拟机 上传安装包sqoop-1.4.…

信通初试第一:无科研无竞赛一战上岸上海交大819学硕感悟

笔者来自通信考研小马哥23上交819全程班学员 信通初试第一:无科研无竞赛一战上岸上海交大819学硕感悟 原创2023-04-27 11:04通信考研小马哥 笔者来自通信考研小马哥23上交819全程班学员 本人情况: 本人是19届交本,本科成绩很差,…

赎金信(Hash的应用)

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 来源:力扣&#xff0…

Java 实现 YoloV7 目标检测

1 OpenCV 环境的准备 这个项目中需要用到 opencv 进行图片的读取与处理操作,因此我们需要先配置一下 opencv 在 java 中运行的配置。 首先前往 opencv 官网下载 opencv-4.6 :点此下载;下载好后仅选择路径后即可完成安装。 此时将 opencv\b…

WMS是什么?

WMS(Warehouse Management System)中文译作仓库管理系统,是一种专用于物流仓储管理的IT系统。它主要应用于企业物流中心、配送中心、供应商物料储备中心、电子商务配送中心等仓库管理过程中。 WMS系统可以帮助企业管理和控制其物流仓储流程。…

线程池的设计

一.什么是线程池? 线程池就是创建若干个可执行的线程放到容器中,有任务处理时,会提交到线程池中的任务队列中,线程处理完不是销毁,而是阻塞等待下一个任务。 二.为何要使用线程池? 降低资源消耗。重复利用创建好的线程减少线…

NLP原理和应用入门:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)

目录 一、梯度裁剪 1.1设定范围值裁剪 1. 全部参数裁剪(默认) 2. 部分参数裁剪 1.2 通过L2范数裁剪 1.3通过全局L2范数裁剪 二. 模型导出ONNX协议 三、动态图转静态图 3.1两种图定义 3.2 什么场景下需要动态图转静态图 3.3为什么动态图模式越来…

k8s 部署 seata1.6.0 集群 基于 nacos 注册中心 + mysql 数据库

k8s 部署 seata1.6.0 集群 基于 nacos 注册中心 mysql 数据库 大纲 1 镜像制作2 准备configmap3 准备deploy 部署文件4 部署seata到k8s 镜像制作 下载seata 选择1.6.0。下载后得到 seata-server-1.6.0.zip 已经上传到百度云盘 下载地址:http://seata.io/zh-cn…

Maven 依赖下载失败解决方案——配置国内源 + 具体解决办法

目录 前言 一、配置 Maven 国内源 二、重新下载jar包 三、其他问题 前言 最近发现 spring-boot 框架更新到 2.7.11 了,由于以前一直使用的是 2.7.9 ,所以一直出现依赖下载失败的问题,实际上这是由于 IDEA 会先加载之前下载好的依赖&#xf…

openharmony内核中不一样的双向链表

不一样的双向链表 链表初识别遍历双向链表参考链接 链表初识别 最近看openharmony的内核源码时看到一个有意思的双向链表,结构如下 typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev; //前驱节点struct LOS_DL_LIST *pstNext; //后继节点 }LOS_DL_LIST;不…

FPGA入门系列12--RAM的使用

文章简介 本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码…

Spring IOC DI - 整合MyBatis

Spring IOC目录 主要内容Spring 框架介绍Spring 框架的优势(对比以前项目的缺点)Spring 框架引入历史发展框架学习三要素Spring 模块介绍 Spring IoC/DI - 引入IoC/DI 概念辨析使用IoC/DI的好处IoC/DI具体应用场景 Spring IoC/DI - 代码实现环境准备Spring 框架环境搭建创建Mav…

图的遍历和应用

文章目录 图的遍历深度优先遍历对于无向图的邻接矩阵的深度优先遍历无向非连通图的深度优先遍历 对于无向图的邻接表的深度优先遍历非递归实现深度优先遍历无向图的邻接矩阵代码实现无向图的邻接表代码实现递归和非递归的同异 广度优先遍历邻接表BFS邻接矩阵BFS 图的应用生成树…

Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)

前言 在项目研发中,相信大家都遇到过给用户增加头像照片的需求。 随着手机版本的不断更新,android 8、android 9、android 10、android 12、android 13、鸿蒙系统等等;遇到这个功能需求,大家肯定会想,“这还不好写&…

“双碳”目标下二氧化碳地质封存技术应用前景及模型构建实践方法

二氧化碳地质封存技术起步较晚,目前仍没有一套相对完整的行业规范;且就该技术而言,涉及环节众多,理论相对复杂,对于行业的新入局者不太友好。因此,结合时代背景,我们首次尝试对二氧化碳地质封存…

【裸金属服务器】安装VMware ESXi

官方安装操作ESXi地址 一、虚拟化服务器分类: 寄居架构(Hosted Architecture)和裸金属架构(Bare Metal Architecture)。 1、寄居架构(Hosted Architecture):在操作系统之上安装和运…