酒店预订系统
1.引言
1.1编制目的
1.详细完成对酒店预订系统的概要设计,
2.达到指导详细设计和开发的目的,
3.同时实现和测试人员及用户的沟通。
3.本报告面向开发人员,测试人员及最终用户的编写额,是了解系统的导航。
1.2词汇表
词汇名称 | 词汇含义 | 备注 |
---|---|---|
NJUSE | 酒店预订系统 |
2.产品概述
2.1 项目前景
2.1.1 背景与机遇
- 因为目的地往往是外地,无法全面了解当地的酒店情况,选择范围大大受限,难以选择到最适合的酒店;
- 提前预订的双方都有风险,酒店担心恶意预订,顾客担心酒店不符合预期;
- 酒店要及时掌握预订顾客的行程变化也会比 较麻烦,需要频繁的长途联系;
- 虽然过去的体验能够给未来带来参考,但是时间一长很多信息就会被遗忘掉,过去的参考作用就受到限制。(事实上,过去的出行体验会大大影响人们未来的选择)
2.1.2 业务需求
- 全面展现任一个地域内的酒店信息,帮助顾客进行更好地比较与选择;
- 执行信用累计制度,防范恶意预订;
- 进行房客评价,反映酒店与描述的相符程度;
- 让酒店可以及时了解到所有预订订单的变化动态;
- 帮助顾客建立体验历史记录,在顾客预订时发挥历史记录的作用。另外,为了进行网站推广,吸引酒店和顾客的入驻,该网站会在系统中补贴费用帮助酒店进行促销。
2.2 项目功能
2.2.1 客户
- 个人基本信息管理
- 浏览酒店详细信息
- 搜索酒店信息
- 生成订单(订单生成时计算多种优惠策略,选择价格最低的方案。不需要 考虑预付订金)
- 评价,包括评分和评论
- 查看订单
- 注册会员(会员分两种普通会员、企业会员。普通会员登记生日、企业会 员登记企业名称)
2.2.2 酒店工作人员
- 个⼈基本信息管理
- 维护酒店基本信息(地址、商圈、简介、设施服务、星级)
- 录入可用客房(类型、数量、原始价格)
- 制定酒店促销策略
- 更新入住和退房信息
- 浏览订单
- 订单执行
2.2.3 网站营销人员
- 制定网站促销策略
- 浏览异常订单执行情况
- 信用充值
2.2.4 网站管理员
- 添加酒店及其工作人员,查询、更改酒店工作人员信息
- 更改管理员密码
- 用户管理(客户、酒店工作人员、网站营销人员)
2.3 用户特征
- 客户:预订酒店的人员。
- 酒店工作人员:酒店中负责管理空房数量、优惠政策、预订房型的人员,需要对计算机有较高的操作能力。
- 网站营销人员:网站中主要负责制定营销策略的人员,需要对计算机有较高的操作能力。
- 网站管理员:构建与维护整个预订系统的人员,需要对计算机有较高的操作能力。
3.逻辑视图
-
处理静态设计模型
- 在NJU酒店预订系统中,选择了分层体系结构风格,将系统分为3层(前端展示层、业务逻辑层、数据层)能够很好地示意整个高层抽象。前端展示层包含web页面的实现,业务逻辑层包含业务逻辑处理的实现,数据层负责数据的持久化和访问。
4.组合视图
4.1开发包图
- 表示软件组件在开发时环境中的静态组织
- 描述开发包以及相互间的依赖
开发包 | 依赖的其他开发包 |
---|---|
mainui | userui, adminui, vo, couponui, hotelui, ordreui |
adminui | adminblservice, 界面类库包, vo |
adminblservice | |
adminbl | adminblservice, admindataservice, userbl |
admindataservice | Java RMI, po |
admindata | databaseutility, po, admindataservice, Java RMI |
userui | userblservice, 界面类库包,vo |
userblservice | |
userbl | UserInterface, UserDataClient, UserPo |
userdataservice | Iava RMI,po |
userdata | userdataservice,po,databaseutility, Java RMI |
hotelui | hotelblservice, 界面类库包, vo |
hotelblservice | |
hotelbl | hotelblservice, hoteldataservice, orderbl |
hoteldataservice | Iava RMI,po |
hoteldata | Java RMI,po,databaseutility, hoteldataservice |
couponui | couponblservice, 界面类库包, vo |
couponblservice | |
couponbl | couponblservice, coupondataservice,hotelbl, userbl |
coupondataservice | Iava RMI,po |
coupondata | Java RMI,po,databaseutility, coupondataservice |
orderui | orderblservice, 界面类库包, vo |
orderblservice | |
orderbl | orderblservice, orderdataservice, userbl, hotelbl, couponbl |
orderdataservice | Iava RMI,po |
orderdata | Java RMI,po,databaseutility, orderdataservice |
vo | |
po | |
utilitybl | |
界面类库包 | |
databaseutility | JDBC |
4.2运行时进程
- 表示软件在运行时进程间的交互,描述系统的动态结构
4.3物理部署
- 处理如何将软件组件映射到硬件基础设施
5.架构设计
5.1模块职责
- 各层职责
层 | 职责 |
---|---|
启动模块 | 负责初始化网络通信机制,启动用户界面 |
展示层 | 展示界面 |
业务逻辑层 | 对于用户界面的输入响应和业务处理逻辑 |
数据层 | 负责数据的持久化及数据访问接口 |
- 层之间调用接口
接口 | 服务调用方 | 服务提供方 |
---|---|---|
AdminService.* | 客户端展示层 | 客户端业务逻辑层 |
HotelService.* | 客户端展示层 | 客户端业务逻辑层 |
RoomService.* | 客户端展示层 | 客户端业务逻辑层 |
OrderService.* | 客户端展示层 | 客户端业务逻辑层 |
UserService.* | 客户端展示层 | 客户端业务逻辑层 |
CouponService.* | 客户端展示层 | 客户端业务逻辑层 |
CreditService.* | 客户端展示层 | 客户端业务逻辑层 |
RemarkService.* | 客户端展示层 | 客户端业务逻辑层 |
*Mapper.* | 客户端业务逻辑层 | 数据层 |
5.2用户界面层分解
用户页面跳转
职责
模块 | 职责 |
---|---|
adminUI | 酒店管理人员的操作界面 |
userUI | 用户界面 |
orderUI | 订单界面 |
hotelUI | 酒店管理界面 |
接口规范
adminUI需要的服务
服务名 | 服务 |
---|---|
AdminController. addManager | 增加酒店管理员 |
AdminController. getAllManagers | 获取所有酒店管理员的信息 |
AdminController. retrieveByUserId | 检索某用户管理的所有酒店Id |
AdminController. deleteUser | 删除制定的酒店管理人员 |
RoomController. deleteRoomsByHotelId | 删除某酒店下的所有房间 |
RoomController. insertRoomInfo | 添加酒店客房信息 |
CouponController. getHotelAllCoupon | 添加酒店满减优惠策略 |
CouponController. addHotelTimeCoupon | 添加酒店限时优惠策略 |
CouponController. addHotelMultipleRoomCoupon | 添加酒店多间优惠策略 |
userUI需要的服务
服务名 | 服务 |
---|---|
AccountController. registerAccount | 创建新的user |
AccountController. login | 查找是否存在相应的user,根据输入的userForm返回登陆验证的结果。 |
AccountController. getUserInfo | 根据输入的id查找是否存在相应的user,返回结果 |
AccountController. updateUserInfo | 根据输入的id查找是否存在相应的user,根并返回修改验证结果。 |
CreditController. retrieveCreditRecord | 获取用户信用记录 |
hotelUI需要的服务
服务名 | 服务 |
---|---|
HotelController. addHotel | 根据输入的HotelVO返回创建验证的结果。 |
HotelController. updateRoomInfo | 根据输入的资料返回修改结果 |
HotelController. retrieveHotelDetails | 返回酒店列表 |
RemarkController. retrieveHotelRemark | 获取某个酒店的全部评论给信息 |
RemarkController. addHotelRemark | 用户添加评论 |
CreditController. retrieveCreditRecord | 获取用户信用记录 |
RoomController. updateRoomInfo | 预订酒店后更新客房房间数量 |
RoomController. getRoomCurNum | 获取酒店指定房间剩余数量 |
RoomController. getRoomInfo | 获取某房间的信息 |
orderUI需要的服务
服务名 | 服务 |
---|---|
OrderController. addOrder | 向数据库添加订单 |
OrderController. getAllOrders | 向数据库查询所有的订单 |
OrderController. getUserOrders | 根据用户id向数据库查询该用户订单 |
OrderController. getManageOrders | 获得酒店管理人员管理的酒店下的所有订单 |
OrderController. annulOrder | 撤销订单 |
OrderController. getHotelOrders | 查看酒店的所有订单 |
OrderController. getRoomOrders | 查看某房间的所有订单 |
OrderController. orderCheckIn | 订单check in |
OrderController. orderCheckOut | 订单check out |
OrderController. rmErrorOrder | 删除错误订单,并返回信用值 |
OrderController. errorOrder | 如果时间在超过最晚订单执行时间后还没有办理入住,系统自动将其置为异常订单 |
5.3 业务逻辑层的分解
业务逻辑层的开发包图参见软件体系结构文档。
5.3.1 adminbl模块
-
模块概述
adminbl模块承担的需求:
i. 用户管理(客户、酒店工作人员)
\1. 查询用户信息
\2. 查询,更改酒店工作人员信息。
ii. 添加酒店及其工作人员
\1. 需要先添加工作人员,才能为其添加管理的酒店;
\2. 一个酒店只有一个工作人员账号
iii. 信用充值
\1. 如果用户线下充值(系统不予考虑),营销人员可以为用户进行信用 增加
\2. 增加的信用值为(充值额度*100)
adminbl模块的职责及接口参见软件系统结构描述文档。
-
整体结构
根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加AdminService接口。业务逻辑层和数据层之间添加AdminMapper接口。由AdminController作为前后端的连接点。
adminbl模块各个类的职责:
模块 | 职责 |
---|---|
AdminController | 负责管理员操作所需要的服务 |
AdminService | 负责管理员操作所需要的服务的实现 |
-
模块内部类的接口规范
AdminService的接口规范
接口名 语法 ResponseVO addManager(UserForm userForm); AdminService.addManager 前置条件 userFrom符合规范 后置条件 调用adminMapper.addManager方法 接口名 语法 List<User> getAllManagers(); AdminService.getAllManagers 前置条件 无 后置条件 调用adminMapper.getAllManagers方法 接口名 语法 List<User> getAllClients(); AdminService.getAllClients 前置条件 无 后置条件 调用adminMapper.getAllClients方法 接口名 语法 ResponseVO deleteUser(int userId); AdminService.deleteUser 前置条件 userId不为空 后置条件 调用adminMapper.deleteUser(userId)方法 接口名 语法 ResponseVO rechargeCredit(int rechargePoint,int userId); AdminService.rechargeCredit 前置条件 信息符合规范 后置条件 调用accountService.updateCredit方法 AdminService需要的服务
服务名 | 服务 |
---|---|
AdminMapper.addManager | 在数据库建立一个新的酒店管理人员账号 |
AdminMapper.getAllManagers | 返回数据库里的所有酒店工作人员 |
AdminMapper.getAllClients | 返回数据库里的所有普通用户 |
AdminMapper.deleteUser | 删除用户 |
-
业务逻辑层的设计原理
利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。
5.3.2 couponbl模块
-
模块概述
couponbl模块承担的需求:
i. 制定酒店促销策略
\1. 生日特惠折扣
\2. 三间及以上预订特惠
\3. 满减折扣
\4. 限时折扣(在特定的期间住宿有折扣)
ii. 调用所有可使用的优惠券
couponbl模块的职责及接口参见软件系统结构描述文档。
-
整体结构
根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加CouponService接口和CouponMatchStrategy接口。业务逻辑层和数据层之间添加CouponMapper接口。由CouponController作为前后端的连接点。
couponbl模块各个类的职责:
模块 | 职责 |
---|---|
CouponController | 负责优惠券相关操作所需要的服务 |
CouponService | 负责优惠券相关操作所需要的服务的实现 |
CouponMatchStrategy | 负责各种类型的优惠券的匹配服务 |
-
模块内部类的接口规范
CouponService的接口规范
接口名 | 语法 | List<Coupon> getMatchOrderCoupon(OrderVO orderVO); |
---|---|---|
CouponService.getMatchOrderCoupon | 前置条件 | orderVO符合规范 |
后置条件 | 调用CouponMatchStrategy的isMatch方法 |
接口名 | 语法 | List<Coupon> getHotelAllCoupon(Integer hotelId); |
---|---|---|
CouponService.getHotelAllCoupon | 前置条件 | hotelId不为空 |
后置条件 | 调用couponMapper.selectByHotelId方法 |
接口名 | 语法 | CouponVO addHotelTargetMoneyCoupon(HotelTargetMoneyCouponVO couponVO); |
---|---|---|
CouponService.addHotelTargetMoneyCoupon | 前置条件 | couponVO符合规范 |
后置条件 | 调用couponMapper.insertCoupon方法 |
接口名 | 语法 | CouponVO addHotelBirthdayCoupon(HotelBirthdayCouponVO couponVO); |
---|---|---|
CouponService.addHotelBirthdayCoupon | 前置条件 | couponVO符合规范 |
后置条件 | 调用couponMapper.insertCoupon方法 |
接口名 | 语法 | CouponVO addHotelMultipleRoomCoupon(HotelMultipleRoomCouponVO couponVO); |
---|---|---|
CouponService.addHotelMultipleRoomCoupon | 前置条件 | couponVO符合规范 |
后置条件 | 调用couponMapper.insertCoupon方法 |
接口名 | 语法 | CouponVO addHotelTimeCoupon(HotelTimeCouponVO couponVO); |
---|---|---|
CouponService.addHotelTimeCoupon | 前置条件 | couponVO符合规范 |
后置条件 | 调用couponMapper.insertCoupon方法 |
CouponService需要的服务
服务名 | 服务 |
---|---|
ManageMapper.selectByHotelId | 返回某一订单可用的优惠策略列表 |
ManageMapper.insertCoupon | 添加新的优惠券 |
CouponMatchStrategy的接口规范
接口名 | 语法 | boolean isMatch(OrderVO orderVO, Coupon coupon); |
---|---|---|
CouponMatchStrategy.isMatch | 前置条件 | orderVO 和 coupon 不为 null |
后置条件 | 无 |
-
业务逻辑层的设计原理
利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。
5.3.3 hotelbl模块
-
模块概述
hotelbl模块承担的需求:
i. 创建酒店
ii. 获得所需的酒店列表
iii. 添加房间
iv. 维护房间信息(数量)
v. 维护酒店信息(姓名、地址、所属商圈、简介、设施服务、星级)
vi. 删除酒店
vii. 添加评论
hotelbl模块的职责及接口参见软件系统结构描述文档。
-
整体结构
根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加HotelService接口、RoomService接口、RemarkService接口。业务逻辑层和数据层之间添加HotelMapper接口、RoomMapper接口、RemarkMapper接口。由HotelController作为前后端的连接点。
hotelbl模块各个类的职责:
模块 | 职责 |
---|---|
HotelController | 负责酒店相关操作所需要的服务 |
HotelService | 负责酒店相关操作所需要的服务的实现 |
CouponMatchStrategy | 负责酒店房间相关操作所需要的服务的实现 |
RemarkService | 负责酒店评论相关操作所需要的服务的实现 |
-
模块内部类的接口规范
HotelService的接口规范
接口名 语法 void addHotel(HotelVO hotelVO) throws ServiceException; HotelService.addHotel 前置条件 输入的HotelVO符合规范 后置条件 调用hotelMapper.insertHotel方法 接口名 语法 void updateRoomInfo(Integer hotelId, String roomType,Integer rooms); HotelService.updateRoomInfo 前置条件 更新的资料符合规范 后置条件 调用roomService.updateRoomInfo方法 接口名 语法 List<HotelVO> retrieveHotels(); HotelService.retrieveHotels 前置条件 无 后置条件 调用hotelMapper的selectAllHotel方法 接口名 语法 HotelVO retrieveHotelDetails(Integer hotelId); HotelService.retrieveHotelDetails 前置条件 酒店id符合规范 后置条件 调用hotelMapper.selectById方法 接口名 语法 int getRoomCurNum(Integer hotelId,String roomType); HotelService.getRoomCurNum 前置条件 输入的id符合规范 后置条件 调用roomService.getRoomCurNum方法 接口名 语法 List<HotelVO> retrieveHotelsByManagerId(Integer userId); HotelService.retrieveHotelsByManagerId 前置条件 输入userId不为空 后置条件 调用hotelMapper.selectManagerHotel方法 接口名 语法 HotelRoom getRoomInfo(Integer roomId); HotelService.getRoomInfo 前置条件 输入roomId不为空 后置条件 调用roomService.getRoomInfo方法 接口名 语法 ResponseVO deleteHotel(Integer hotelId); HotelService.deleteHotel 前置条件 输入hotelId不为空 后置条件 调用roomService.deleteRoomsByHotelId和hotelMapper.deleteHotel方法 接口名 语法 ResponseVO updateHotelInfo(HotelInfoVO hotelInfoVO,Integer id); HotelService.updateHotelInfo 前置条件 输入信息不为空 后置条件 调用hotelMapper.updateHotelInfo方法 接口名 语法 ResponseVO updateHotelRate(Integer id, String rate); HotelService.updateHotelRate 前置条件 输入信息不为空 后置条件 调用hotelMapper.updateHotelRate方法 HotelService需要的服务
服务名 服务 HotelMapper.insertHotel 在数据库插入一个hotel HotelMapper.selectAllHotel 返回数据库所有的hotel HotelMapper.selectById 根据id返回数据库对应的hotel HotelMapper.deleteHotel 删除酒店 HotelMapper.updateHotelInfo 维护酒店信息 HotelMapper.updateHotelRate 更新酒店的评分 HotelMapper.selectManagerHotel 获取某管理员管理的所有hotel RoomService的接口规范
接口名 语法 List<HotelRoom> retrieveHotelRoomInfo(Integer hotelId); RoomService.retrieveHotelRoomInfo 前置条件 输入的酒店id符合规范 后置条件 调用roomMapper.selectRoomsByHotelId方法 接口名 语法 void insertRoomInfo(HotelRoom hotelRoom); RoomService.insertRoomInfo 前置条件 输入的HotelRoom符合规范 后置条件 调用roomMapper.insertRoom 方法 接口名 语法 void updateRoomInfo(Integer hotelId, String roomType, Integer rooms); RoomService.updateRoomInfo 前置条件 输入的修改信息符合规范 后置条件 调用roomMapper.updateRoomInfo方法 接口名 语法 HotelRoom getRoomInfo(Integer roomId); RoomService.getRoomInfo 前置条件 输入的roomId不为空 后置条件 调用roomMapper.getRoomById方法 接口名 语法 int getRoomCurNum(Integer hotelId, String roomType); RoomService.getRoomCurNum 前置条件 输入的资料符合规范 后置条件 调用roomMapper.getRoomCurNum方法 接口名 语法 void deleteRoomsByHotelId(Integer hotelId); RoomService.deleteRoomsByHotelId 前置条件 输入的hotelId不为null 后置条件 调用deleteRoomsByHotelId方法 接口名 语法 ResponseVO updateRoomTotalNum(Integer roomId, Integer totalChange); RoomService.updateRoomTotalNum 前置条件 输入有效的信息 后置条件 调用roomMapper.updateRoomTotalNum方法 RoomService需要的服务
服务名 服务 RoomMapper.updateRoomInfo 向数据库更新酒店信息 RoomMapper.insertRoom 向数据库插入酒店 RoomMapper.selectRoomsByHotelId 从数据库根据酒店id查找房间 RoomMapper.getRoomCurNum 从数据库查询酒店房间现在的数量 RoomMapper.getRoomById 从数据库根据id查找房间 RoomMapper.deleteRoomsByHotelId 根据hotelId删除房间 RoomMapper.updateRoomTotalNum 更新房间的总数 RemarkService的接口规范
接口名 | 语法 | List<Remark> retrieveHotelRemark(Integer hotelId); |
---|---|---|
RemarkService.retrieveHotelRemark | 前置条件 | hotelId 不为空 |
后置条件 | 调用RemarkMapper.getRemarkByHotelId方法 |
接口名 | 语法 | List<Remark> retrieveUserRemark(Integer userId); |
---|---|---|
RemarkService.retrieveUserRemark | 前置条件 | userId 不为空 |
后置条件 | 调用RemarkMapper.getRemarkByUserId方法 |
接口名 | 语法 | void addHotelRemark(Remark remark) throws ServiceException; |
---|---|---|
RemarkService.addHotelRemark | 前置条件 | remark不为null |
后置条件 | 调用RemarkSMapper.insertRemark方法 |
RemarkService需要的服务
服务名 | 服务 |
---|---|
RemarkMapper.getRemarkByHotelId | 获取某个酒店的全部评论给信息 |
RemarkMapper.getRemarkByUserId | 获取某个用户的全部评论给信息 |
RemarkMapper.insertRemark | 用户添加评论 |
-
业务逻辑层的设计原理
利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。
5.3.4 orderbl模块
-
模块概述
orderbl模块承担的需求:
i. 预订酒店
ii.撤销订单
iii. 更新入住和退房信息
\1. 如果有订单执行情况,实时更新入住信息(入住时间、预计 离开时间);
\2. 更新订单的退房信息(实际离开时间)
\3. 房间只有在实际退房后才可以被再次预定
\4. 如果有非订单(线下)的入住/退房导致的可用房间发生变化,也要 及时更新信息;
iv. 浏览订单
\1. 浏览未执行的房间预订的订单
\2. 浏览已执行的订单
\3. 浏览异常和已撤销的订单
v. 订单执行
\1. 当用户已入住,改变订单状态为已执行。
\2. 置为异常订单
a. 酒店工作人员可以查看本地的异常订单,并手工为其补登记执行 情况(即延迟入住), 该订单置为已执行订单,恢复扣除的信用值
b. 置为异常的同时扣除用户等于订单的总价值的信用值
\3. 已执行的订单用户可以获得等于订单价值的信用值增加
orderbl模块的职责及接口参见软件系统结构描述文档。
-
整体结构
根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加OrderService接口。业务逻辑层和数据层之间添加OrderMapper接口。由OrderController作为前后端的连接点。
orderbl模块各个类的职责:
模块 | 职责 |
---|---|
OrderController | 负责订单相关操作所需要的服务 |
OrderService | 负责订单相关操作所需要的服务的实现 |
-
模块内部类的接口规范
OrderService的接口规范
接口名 语法 ResponseVO addOrder(OrderVO orderVO); OrderService.addOrder 前置条件 输入的OrderVO符合规范 后置条件 调用orderMapper.addOrder方法 接口名 语法 List<Order> getAllOrders(); OrderService.getAllOrders 前置条件 输入的OrderVO符合规范 后置条件 调用orderMapper.getAllOrders方法 接口名 语法 List<Order> getUserOrders(int userid); OrderService.getUserOrders 前置条件 输入的用户id符合规范 后置条件 调用orderMapper.getUserOrders方法 接口名 语法 List<Order> getManageOrders(int userId); OrderService.getManageOrders 前置条件 输入的用户id符合规范 后置条件 调用orderMapper.getHotelOrders方法 接口名 语法 ResponseVO annulOrder(int orderId); OrderService.annulOrder 前置条件 输入的orederid符合规范 后置条件 调用orderMapper.annulOrder方法 接口名 语法 List<Order> getHotelOrders(Integer hotelId); OrderService.getHotelOrders 前置条件 输入的hotelid符合规范 后置条件 调用orderMapper.getHotelOrders方法 接口名 语法 List<Order> getRoomOrders(Integer roomId) OrderService.getRoomOrders 前置条件 输入的roomid符合规范 后置条件 调用orderMapper.getRoomOrders方法 接口名 语法 ResponseVO orderCheckIn(Integer orderId); OrderService.orderCheckIn 前置条件 输入的orderid符合规范 后置条件 调用orderMapper.updateCheckInTime和orderMapper.updateState方法 接口名 语法 ResponseVO orderCheckOut(Integer orderId); OrderService.orderCheckOut 前置条件 输入的orderid符合规范 后置条件 调用orderMapper.updateCheckOutTime和orderMapper.updateState方法 接口名 语法 ResponseVO errorOrder(Integer orderId); OrderService.errorOrder 前置条件 输入的orderid符合规范 后置条件 调用orderMapper.updateErrorTime和orderMapper.updateState方法 接口名 语法 ResponseVO rmErrorOrder(Integer orderId); OrderService.rmErrorOrder 前置条件 输入的orderid符合规范 后置条件 调用checkIn方法 接口名 语法 ResponseVO getOrderByOrderId(Integer orderId); OrderService.getOrderByOrderId 前置条件 输入的orderid符合规范 后置条件 调用orderMapper.getOrderById方法 OrderService需要的服务
服务名 服务 OrderMapper.addOrder 向数据库添加订单 OrderMapper.getAllOrders 向数据库查询所有的订单 OrderMapper.getUserOrders 根据用户id向数据库查询该用户订单 OrderMapper.annulOrder 撤销订单 OrderMapper.getHotelOrders 查看酒店的所有订单 OrderMapper.getRoomOrders 查看某房间的所有订单 OrderMapper.updateCheckInTime 增加订单check in时间 OrderMapper.updateCheckOutTime 增加订单check out时间 OrderMapper.updateErrorTime 增加订单异常时间 OrderMapper.updateState 更改订单状态 -
业务逻辑层的设计原理
利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。
5.3.5 userbl模块
-
模块概述
userbl模块承担的需求:
i. 个人基本信息
\1. 维护基本信息(姓名或名称,联系方式、信用)
a. 信用不能修改,只能查看
\2. 浏览自己未执行的正常订单
a. 可以撤销自己未执行的正常订单
b. 如果撤销的订单距离最晚订单执行时间不足 6 个小时,撤销的同时扣除信用值,信用值 为订单的(总价值*1/2)
c. 撤销的订单并不会删除数据,只是置为已撤销状态,记录撤销时间
\3. 浏览自己已执行的正常订单
\4. 浏览自己异常订单和已撤销订单
\5. 信用记录查看:查看自己每一次的信用变化情况
a. 时间,订单号,动作(订单执行、订单异常、订单撤销、充值), 信用度变化、信用度结果
ii. 注册
iii. 登陆
iv. 数据加密
\1.采用了Base64加密解密方法(用户的账号、密码、姓名、联系方式必须密文存储)
userbl模块的职责及接口参见软件系统结构描述文档。
-
整体结构
根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加AccountService接口、EncryptionService接口、CreditService接口。业务逻辑层和数据层之间添加AccountMapper接口和CreditMapper接口。由AccountController作为前后端的连接点。
userbl模块各个类的职责:
模块 | 职责 |
---|---|
AccountController | 负责用户相关操作所需要的服务 |
AccountService | 负责用户相关操作所需要的服务的实现 |
EncrytionService | 对用户的信息进行加密和解密 |
CreditService | 负责用户信用值相关操作所需要的服务的实现 |
-
模块内部类的接口规范
AccountService的接口规范
接口名 语法 ResponseVO registerAccount(UserVO userVO); AccountService.registerAccount 前置条件 userVO符合规范 后置条件 创建新的user 接口名 语法 User login(UserForm userForm); AccountService.login 前置条件 userFrom符合规范 后置条件 调用accountMapper.getAccountByEmail方法 接口名 语法 User getUserInfo(int id); AccountService.getUserInfo 前置条件 输入id合法且存在 后置条件 调用accountMapper.getAccountById方法 接口名 语法 ResponseVO updateUserInfo(int id, String password,String username,String phonenumber); AccountService.updateUserInfo 前置条件 1. 输入的id合法且存在 2. 更改的信息符合规范。 后置条件 调用accountMapper.updateAccount方法 接口名 语法 void updateCredit(int id,double credit); AccountService.updateCredit 前置条件 1. 输入的id合法且存在 2. 更改的信息符合规范。 后置条件 调用AccountMapper.updateCredit方法 接口名 语法 String getNameById(int id); AccountService.getNameById 前置条件 1. 输入的id合法且存在 后置条件 调用AccountMapper.getNameById方法
AccountService需要的服务
服务名 | 服务 |
---|---|
AccountMapper.createNewAccount | 在数据库创建一个新的账号 |
AccountMapper.getAccountByEmail | 在数据库根据email查找账号信息 |
AccountMapper.getAccountById | 在数据库根据用户ID查找账号信息 |
AccountMapper.getNameById | 在数据库根据id查找姓名 |
AccountMapper.updateAccount | 在数据库更新用户信息 |
EncryptionService 接口规范
接口名 | 语法 | String encryptionOfData(String data); |
---|---|---|
EncryptionService.encryptionOfData | 前置条件 | 输入不为null |
后置条件 |
接口名 | 语法 | String decryptionOfData(String data); |
---|---|---|
EncryptionService.decryptionOfData | 前置条件 | 输入不为null |
后置条件 | 无 |
接口名 | 语法 | User encryptionOfUser(User user); |
---|---|---|
EncryptionService.encryptionOfUser | 前置条件 | 输入不为null |
后置条件 | 无 |
接口名 | 语法 | User decryptionOfUser(User user); |
---|---|---|
EncryptionService.decryptionOfUser | 前置条件 | 输入不为null |
后置条件 | 无 |
接口名 | 语法 | UserForm encryptionOfUserForm(UserForm userForm); |
---|---|---|
EncryptionService.encryptionOfUserForm | 前置条件 | 输入不为null |
后置条件 | 无 |
接口名 | 语法 | UserForm decryptionOfUserForm(UserForm userForm); |
---|---|---|
EncryptionService.decryptionOfUserForm | 前置条件 | 输入不为null |
后置条件 | 无 |
CreditService的接口规范
接口名 | 语法 | List<Credit> retrieveCreditRecord(Integer userId); |
---|---|---|
CreditService.retrieveCreditRecord | 前置条件 | userId不为空 |
后置条件 | 调用creditMapper.selectByUserId方法 |
接口名 | 语法 | void addCreditRecord(Credit credit); |
---|---|---|
CreditService.addCreditRecord | 前置条件 | credit不为null |
后置条件 | 调用creditMapper.addCreditRecord方法 |
接口名 | 语法 | void rmCreditRecord(Integer orderId); |
---|---|---|
CreditService.rmCreditRecord | 前置条件 | orderId符合规范 |
后置条件 | 调用creditMapper.rmCreditRecord方法 |
CreditService需要的服务
服务名 | 服务 |
---|---|
CreditMapper.addCreditRecord | 在数据库中增加一条信用记录 |
CreditMapper.rmCreditRecord | 在数据库中删除一条信用记录 |
CreditMapper.selectByUserId | 在数据库中获取指定用户的信用记录 |
-
业务逻辑层的设计原理
利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。
5.4数据层分解
职责
模块 | 职责 |
---|---|
AccountMapper | 基于Account的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务 |
AdminMapper | 基于Admin的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务 |
HotelMapper | 基于Hotel的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务 |
RoomMapper | 基于Room的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务 |
OrderMapper | 基于Order的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务 |
RemarkMapper | 基于Remark的持久化数据库的接口,提供集体载入、集体保存、增、改、查服务 |
CreditMapper | 基于Credit的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务 |
接口规范
AccountMapper
接口名 | 语法 | int createNewAccount(User user); |
---|---|---|
AccountMapper. createNewAccount | 前置条件 | 同样id的user不存在 |
后置条件 | 增加一个user |
接口名 | 语法 | User getAccountByName(@Param(“email”) String email); |
---|---|---|
AccountMapper. getAccountByName | 前置条件 | 无 |
后置条件 | 按Email查找返回相应的user结果 |
接口名 | 语法 | User getAccountById(@Param(“id”) int id); |
---|---|---|
AccountMapper. getAccountById | 前置条件 | 无 |
后置条件 | 按id查找并返回相应的user结果 |
接口名 | 语法 | int updateAccount(@Param(“id”) int id, @Param(“password”) String password,@Param(“userName”) String username, @Param(“phoneNumber”) String phonenumber); |
---|---|---|
AccountMapper. updateAccount | 前置条件 | 在数据库中存在同样id的user |
后置条件 | 更新一个user |
AdminMapper
接口名 | 语法 | int addManager(User user); |
---|---|---|
AdminMapper. addManager | 前置条件 | 同样id的user不存在 |
后置条件 | 创建一个user |
接口名 | 语法 | List<User> getAllManagers(); |
---|---|---|
AdminMapper. getAllManagers | 前置条件 | 无 |
后置条件 | 返回包含所有user的列表 |
HotelMapper
接口名 | 语法 | int insertHotel(Hotel hotel); |
---|---|---|
HotelMapper. insertHotel | 前置条件 | 同样id的hotel不存在 |
后置条件 | 创建一个hotel |
接口名 | 语法 | List<HotelVO> selectAllHotel(); |
---|---|---|
HotelMapper. selectAllHotel | 前置条件 | 无 |
后置条件 | 返回包含所有的hotel的列表 |
接口名 | 语法 | HotelVO selectById(@Param(“id”) Integer id); |
---|---|---|
HotelMapper. selectById | 前置条件 | 在数据库存在同样id的hotel |
后置条件 | 按id查找并返回相应的hotel |
RoomMapper
接口名 | 语法 | int updateRoomInfo(@Param(“hotelId”) Integer hotelId,@Param(“roomType”) String roomType,@Param(“curNum”) Integer curNum); |
---|---|---|
RoomMapper. updateRoomInfo | 前置条件 | 在数据库存在同样id的room |
后置条件 | 更新一个room |
接口名 | 语法 | int insertRoom(HotelRoom hotelRoom); |
---|---|---|
RoomMapper. insertRoom | 前置条件 | 同样id的room不存在 |
后置条件 | 创建一个room |
接口名 | 语法 | List<HotelRoom> selectRoomsByHotelId(@Param(“hotelId”) Integer hotelId); |
---|---|---|
RoomMapper. selectRoomsByHotelId | 前置条件 | 无 |
后置条件 | 按hotel的id查找并返回相应的room |
接口名 | 语法 | int getRoomCurNum(@Param(“hotelId”) Integer hotelId,@Param(“roomType”) String roomType); |
---|---|---|
RoomMapper. getRoomCurNum | 前置条件 | 无 |
后置条件 | 按hotel的id以及roomType查找并返回相应的room的数量 |
OrderMapper
接口名 | 语法 | int addOrder(Order order); |
---|---|---|
OrderMapper. addOrder | 前置条件 | 同样id的order不存在 |
后置条件 | 创建一个order |
接口名 | 语法 | List<Order> getAllOrders(); |
---|---|---|
OrderMapper. getAllOrders | 前置条件 | 无 |
后置条件 | 返回包含所有order的列表 |
接口名 | 语法 | List<Order> getUserOrders(@Param(“userid”) int userid); |
---|---|---|
OrderMapper. getUserOrders | 前置条件 | 数据库存在同样id的user |
后置条件 | 按userid查找并返回相应的order列表 |
RemarkMapper
接口名 | 语法 | int insertRemark(Remark remark); |
---|---|---|
RemarkMapper. insertRemark | 前置条件 | 同样id的Remark不存在 |
后置条件 | 创建一个remark |
接口名 | 语法 | List getRemarkByHotelId(@Param(“hotelId”) Integer hotelId); |
---|---|---|
RemarkMapper. getRemarkByHotelId | 前置条件 | 无 |
后置条件 | 返回包含某一个酒店评论的列表 |
接口名 | 语法 | List getRemarkByUserId(@Param(“userId”) Integer userId); |
---|---|---|
RemarkMapper. getRemarkByUserId | 前置条件 | 无 |
后置条件 | 返回包含某一个用户评论的列表 |
CreditMapper
接口名 | 语法 | int addCreditRecord(Credit credit); |
---|---|---|
CreditMapper. addCreditRecord | 前置条件 | |
后置条件 | 创建一个creditRecord |
接口名 | 语法 | int rmCreditRecord(@Param(“orderId”) Integer orderId); |
---|---|---|
CreditMapper. rmCreditRecord | 前置条件 | 无 |
后置条件 | 删除某一条订单的信用改变 |
接口名 | 语法 | List selectByUserId(@Param(“userId”) Integer userId); |
---|---|---|
CreditMapper. selectByUserId | 前置条件 | 无 |
后置条件 | 返回包含某一个用户评论的信用 |
6.信息视角
- 描述数据持久化对象(PO)
-
属性及其定义
-
Coupon类
包含了优惠券id、描述、名称、优惠金额、使用门槛、时间
public class Coupon { // 优惠券难道不是 每个人有的优惠券种类不一样吗???????????????????好像没实现? /** * 优惠券id */ private int id; /** * 优惠券描述 */ private String description; /** * 如果为-1 代表是网站推出的优惠 */ private Integer hotelId; /** * 优惠券类型 1生日特惠 2多间特惠 3满减优惠 4限时优惠 */ private Integer couponType; /** * 优惠券名称 */ private String couponName; /** * 优惠券使用门槛 */ private double targetMoney; /** * 折扣 */ private double discount; /** * 优惠券优惠金额 */ private double discountMoney; /** * 可用时间 */ private LocalDateTime startTime; /** * 失效时间 */ private LocalDateTime endTime; /** * 优惠券状态 是否已经失效 1可用 0失效 */ private Integer status;
-
Hotel类
包含了id、名称、地址、商圈、酒店管理员id、电话
public class Hotel { private Integer id; private String hotelName; private String address; /** * 商圈 */ private BizRegion bizRegion; private HotelStar hotelStar; private Double rate; private String description; private String phoneNum; /** * 酒店管理员id */ private Integer managerId; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getHotelName() { return hotelName; } public void setHotelName(String hotelName) { this.hotelName = hotelName; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public BizRegion getBizRegion() { return bizRegion; } public void setBizRegion(BizRegion bizRegion) { this.bizRegion = bizRegion; } public HotelStar getHotelStar() { return hotelStar; } public void setHotelStar(HotelStar hotelStar) { this.hotelStar = hotelStar; } public Double getRate() { return rate; } public void setRate(Double rate) { this.rate = rate; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public Integer getManagerId() { return managerId; } public void setManagerId(Integer managerId) { this.managerId = managerId; } }
-
HotelRoom类
包含了id、房间类型、酒店id、总量、金额、剩余房间数
public class HotelRoom { private Integer id; private RoomType roomType; private Integer hotelId; private double price; /** * 当前剩余可预定房间数 */ private int curNum; /** * 某类型房间总数 */ private int total; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public RoomType getRoomType() { return roomType; } public void setRoomType(RoomType roomType) { this.roomType = roomType; } public Integer getHotelId() { return hotelId; } public void setHotelId(Integer hotelId) { this.hotelId = hotelId; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getCurNum() { return curNum; } public void setCurNum(int curNum) { this.curNum = curNum; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } }
-
Order类
包含id、用户id、酒店id、酒店名称、入住时间、离开时间、房间类型、房间数量、人数、是否有儿童、创建时间、金额、客户名称、电话、取消日期,错误信息
public class Order { private Integer id; private Integer userId; private Integer hotelId; private String hotelName; private String checkInDate; private String checkOutDate; private String roomType; private Integer roomNum; private Integer roomId; private Integer peopleNum; private boolean haveChild; private String createDate; private Double price; private String clientName; private String phoneNumber; private String orderState; private String cancellationDate; private String checkInTime; private String checkOutTime; private String errorDate;
-
User类
包含id、Email、密码、用户名、电话、信用值、用户类型
public class User { private Integer id private String email; private String password; private String userName; private String phoneNumber; private double credit; private UserType userType; private String birthday;
6.Manage类
public class Manage { private Integer id; private Integer userId; private Integer hotelId; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public Integer getHotelId() { return hotelId; } public void setHotelId(Integer hotelId) { this.hotelId = hotelId; } }
7.Credit类
public class Credit { private int id; private String changeTime; private Integer userId; private Integer orderId; /** * 行为类型 1订单执行 2订单异常 3订单撤销 4充值 */ private String actionType; private double creditChange; private double creditResult;
8.Remark类
public class Remark { private Integer id; private Integer userId; private Integer hotelId; private String content; private Integer star; private String remarkTime;
-
-
♻️ 资源
大小: 62KB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248618