当前位置: 首页 > news >正文

[尚庭公寓]01-项目概述

业务概述

尚庭公寓是一个公寓租赁平台项目,包含移动端和后台管理系统

  1. 其中移动端面向广大用户,提供找房、看房预约、租约管理等功能,
  2. 后台管理系统面向管理员,提供公寓(房源)管理、租赁管理、用户管理等功能。

下面分别介绍两端的具体业务功能

移动端的线上体验地址为: http://39.99.159.121:8002

其主要业务功能如下图所示

各功能模块具体内容如下

  1. 房源检索
  • 用户可以使用这个功能来搜索和检索符合其需求的房源。他们可以根据不同的条件,如地理位置、租金范围、支付方式等,快速找到适合的房源。
  1. 看房预约管理
  • 用户可以通过这个功能预约看房。他们可以选择合适的时间,预约在特定的公寓讲行实地看房,以便更好地了解房源的情况和环境。
  1. 租约管理
  • 这个功能允许用户查看和管理他们的租约信息。他们可以在移动端查看租约合同,以及提交租约终止或延长的请求。
  1. 房源浏览历史
  • 用户可以在这里查看他们曾经浏览过的房源历史记录。这个功能可以帮助用户追踪之前感兴趣的房源,方便他们重新查看或做出决策。

后台管理系统的线上体验地址为: http://39.99.159.121:8001

主要业务功能如下图所示

各功能模块具体内容如下

  1. 公寓信息管理
  • 这个模块负责管理所有公寓的基本信息,包括公寓名称、地址、联系方式等。管理员可以在这里添加、编辑、删除公寓信息。
  1. 房间信息管理
  • 该模块负责管理每个公寓内各个房间的详细信息,包括房间号、户型、面积、租金等。管理员可以在这里进行房间信息的添加、编辑和删除。
  1. 公寓/房间属性管理
  • 这个模块允许管理员定义公寓和房间的各种属性,比如公寓和房间的配套设施,方便管理员在维护公寓信息和房间信息时进行选择。
  1. 看房预约管理
  • 该模块用于管理用户的看房预约请求。用户可以在移动端提交看房预约,管理员可以在后台管理系统中查看和处理这些请求,以方便安排人员接待用户。
  1. 租约管理
  • 这个模块用于管理租约的创建、修改和终止。管理员可以在这里生成租约合同,并发送给用户签约。

业务流程

本项目的核心业务流程为签约、续约、退租,具体流程如下图所示

在上述的业务流程中,会涉及到租约状态的多次变化,下面详细介绍一下租约状态。

租约共有7个状态,分别是签约待确认、已签约、已取消、已到期、 退租待确认、已退租、续约待确认,以下是这些状态的变化流程

技术选型

本项目的技术架构如下图所示。

项目采用前后端分离的模式,下面介绍各模块用到的技术。

  1. 前端
  • 框架: VUE3
  1. 后端
  • 框架: Spring Boot
  • 数据库访问: MyBatis、MyBatis Plus
    • MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
  • Web: Spring MVC
  1. 数据存储
  • 关系型数据库: MySQL
  • 缓存: Redis
  • 对象存储: MinlO
    • 对象存储是用于存储非结构化数据的数据存储架构,它将一个数据单元称为一个对象,每个对象都包含数据本身、元数据(描述数据的信息)和一个唯一标识符(通常是一个URL地址)。
    • 在2001年,亚马逊推出了Simple storage service(简称S3),这是第一个商业化的、面向互联网的对象存储服务。随后国内众多云服务厂商也都推出了自己的对象存储服务,例如阿里云的OSS,华为云的OBS,百度云的BOS等等。
    • MinIO是一个开源的对象存储方案,兼容亚马逊S3协议。
    • 对于对象存储,我们可以选择直接购买各大云厂商提供的服务,也可以选择使用开源的服务,自行安装和维护。本项目采用开源的对象存储Minio来存储图片信息。
  1. 部署
  • 前端服务器: Nginx
    • 所以的网站的网络请求可以分为两类, 静态资源请求和数据接口请求

    • 网站先请求静态资源, 比如html, css, js, 请求到js文件后浏览器会执行js文件, 由js发起网络请求, 获取数据
    • 静态资源+网络数据就可以渲染出完整的页面供用户使用

    • Nginx在项目中的作用一般就是做 静态资源HTTP服务器(静态资源托管) 和 后台接口代理转发服务器

    • 使用Nginx的好处有很多, 比如前端只请求代理服务, 可以避免对外暴露服务端地址, 减少被攻击的风险, 如果项目用户增加很多, 多台服务器组成服务集群, 代理层可以进行负债均衡, 且不影响客户端

开发流程

前后端分离项目的完整开发流程如下

第一步

  1. 由产品经理负责分析市场、用户需求,并将其转化为详细的产品需求。然后创建初步的产品原型,以便更好地理解和传达产品的设计和功能。
  2. 原型通常指的是产品、系统或概念的初步版本或样品,旨在展示设计概念、功能、外观或其他关键特征。

第二步

  1. 由U设计师基于产品需求和初步原型,设计用户界面的外观和交互,得到高保真的原型。高保真原型可能包含更具体的设计元素,如颜色、字体、布局等。

第三步

  1. 由架构师根据高保真原型,规划软件系统的整体结构和组件。他们会设计数据库架构和定义接口,输出API文档,以便开发团队进行后续工作。
  2. API文档是关于接口的详细说明文档,其会包含接口所提供的功能,所需参数、返回值、错误处理等细节。接口文档的目的是为开发人员、集成人员以及其他利益相关者提供清晰的指导,以便他们能够正确地使用和集成接口。

第四步

  1. 前后端开发工程师根据API文档,分别开发前端和后端的业务逻辑和功能。前端工程师负责构建用户交互界面,而后端工程师负责数据处理逻辑和数据存储。

第五步

  1. 测试工程师进行各种测试,以确保软件的质量和稳定性。

第六步

  1. 运维工程师负责配置、部署和维护应用程序的生产环境,确保应用程序能够正常运行并具备良好的性能和可用性。

项目原型

目前市面上有很多功能强大的原型设计工具,这些工具设计出的原型美观且具备交互逻辑,

  1. 常用的有
  • 墨刀 (https://modao.cc/),
  • Figma (https://www.figma.com/)
  1. 移动端地址:

墨刀 #租赁平台APP-分享

  1. 后台管理系统:

墨刀 #租赁平台后台管理-分享

数据库设计

设计理论

数据库模型

数据库设计中最常采用的模型为 实体(Entity)关系(Relationship)模型,简称ER模型。其核心思想是将现实世界中的复杂数据表示为一组实体,并描述这些实体之间的关系。

  • 实体通常对应现实世界中的一个对象,例如:学生、班级、教师、课程。
  • 每个实体都包含一组属性,这些属性用于描述实体,例如学生实体包含姓名、年龄、性别等属性。
  • 关系用于描述各实体之间的联系,例如学生和班级之间存在从属关系

其中关系可分为一对一、一对多、多对多三种,例如学生和班级之间的系为一对多、学生和课程之间的关系为多对多

  • 实体关系模型通常使用实体关系图(ER diagram)进行表示。
  • 下图是个简易的选课系统的实体关系图,其中方框代表实体,方框之间的连线则代表实体间的关系,连线两端的不同符号用于表示一对一、一多、多对多的关系。

  • 符号说明如下:

  • 上述符号通常是两个成对使用,其分别表示最小值和最大值。
  • 例如上述ER图中的班级和学生之间的连线,班级一侧的符号表示一(最小值和最大值都是一),学生一侧的符号表示多(最小值是一,最大值是多),其表达的含义就是班级和学生之间的关系为一对多,一个学生只对应一个班级,而一个班级会对应多个学生(且至少对应一个学生)。

数据库设计流程

传统的数据库设计流程分为三个阶段,分别是概念模型设计阶段、逻辑模型设计阶段物理模型设计阶段。三个阶段由粗略到详细,由抽象到具体。

概念模型设计

概念模型是一个粗略的初步设计,其只关注实体和关系,不体现最终建表所需的各种细节信息(例如实体的属性)。下图便是一个典型的简易选课系统数据库的概念模型。

逻辑模型设计

相较于概念模型,逻辑模型会包含更多的细节信息,例如实体的属性、用于关联两个实体的字段等等。需要注意的是,逻辑模型并不关注具体的数据库实现(例如MySQL或者Oracle)。下图是上述选课系统数据库的逻辑模型。

物理模型设计

相较于逻辑模型,物理模型会包含更多的与所选数据库相关的具体信息,例如存储引擎、字段类型、索引等信息。一般而言,物理模型会包含最终建表所需的所有信息,下图是上述选课系统数据库的物理模型

设计实战

概念模型设计

根据原型可得,本项目包含的实体有公寓、房间、用户(租客)、租约(合同)、看房预约、浏览历史和后台管理系统用户,各实体间的关系如下

逻辑模型设计

根据原型明确各实体所需属性并明确各表关联字段,得到的完整的逻辑模型如下图所示。下面逐一分析。

公寓信息

公寓信息包含的属性有公寓名称、公寓简介、公寓地址、公寓联系方式、公寓图片、公寓标签、公寓杂费、公寓发布状态,这部分的逻辑模型如下图所示

图片信息表的设计思路

  1. 把图片信设计为表的一个字段

  • 优点: 简单直接
  • 缺点: 对图片的操作不方便
  1. 把图片信息设计为表的多个字段

  • 优点: 操作比较方便
  • 缺点: 冗余的数据较多, 数据的一致性存在风险
  1. 把图片信息设计为独立的表

  • 优点: 操作方便, 结构清晰
  • 缺点: 多维护一张表, 多表的查询性能有所降低
  1. 字段说明
  • 图片名称
  • 图片所属对象类型: 公寓和房间都有图片, 用这个字段进行区分
  • 图片所属对象ID: 图片所属公寓或房间的ID
  • 图片地址: 图片的访问URL

杂费信息表的设计思路

  1. 把杂费设计为一张表

  • 优点: 公寓和杂费通过一张关系表管理, 杂费表中存储杂费名称和杂费值, 简单且查询性能好
  • 缺点: 杂费表存在冗余信息, 因为每项杂费可能存在多项杂费值,
  1. 把杂费设计为两张表

  • 优点: 公寓和杂费值通过一张关系表管理, 杂费值表中只存储值信息, 名称信息单独放在一张表
  • 缺点: 杂费值和杂费名解耦合, 修改杂费名时不影响杂费值表, 易于维护但是查询性能低一些
房间信息

房间信息包含的属性有`房间号`、`房间租金`、`房间所属公寓`、`房间可选租期`、`房间可选支付方式`、`房间属性`、`房间标签`、`房间配套`、`房间图片`、`房间发布状态`,这部分的逻辑模型如下图所示

用户信息

用户信息包含的属性有 手机号码、 密码、头像、昵称、账号状态,这部分的逻辑模型如下

看房预约信息

看房预约包含的属性有`预约用户信息`、`预约公寓信息`、`预约时间`、`备注信息`、`预约状态`,这部分的逻辑模型如下

租约信息

租约信息包含`签约用户信息`,`签约房间信息`、`租期`、`支付方式`、`租约来源`、`租金`、`押金`,这部分的逻辑模型如下

浏览历史信息

浏览历史指的是用户浏览房间详情的历史,包含的属性有`用户信息`、`房间信息`、`浏览时间`,这部分的逻辑模型如下

后台管理用户信息

后台管理系统用户包含的属性有,这部分的逻辑模型如下

物理模型设计

本项目采用MySQL数据库,所有表均使用InnoDB存储引擎,完整的物理模型如下图,详细信息可参考资料中的数据库初始化文件`lease.sql`。

  1. 所有表均省略了`create_time`、`update_time`、`is_deleted`三个字段。
  2. 所有的状态或类型字段(例如租约状态),均使用数字表示。

相关文章:

  • PKIX path building failed问题小结
  • 向量几何的二元性:叉乘模长与内积投影的深层联系
  • Flutter状态管理框架RiverPod入门
  • rk3506上移植lvgl应用
  • ui框架-文件列表展示
  • 【TVM 教程】如何使用 TVM Pass Infra
  • 力扣热题100 k个一组反转链表题解
  • 【Java基础】​​向上转型(Upcasting)和向下转型(Downcasting)
  • PLC入门【4】基本指令2(SET RST)
  • 手游刚开服就被攻击怎么办?如何防御DDoS?
  • Python importlib 动态加载
  • 在 Windows 11/10 中打开任务管理器的 6 种方法(无需 Ctrl+Alt+Delete)
  • Linux线程与进程关系及底层实现
  • 现代Vue状态管理:Pinia完全指南
  • python爬虫之数据存储
  • Day 17: 粒子系统(osgParticle)实战
  • 解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
  • 【网络安全】开源系统getshell漏洞挖掘
  • XCTF-web-easyupload
  • 每日算法刷题Day27 6.9:leetcode二分答案2道题,用时1h20min
  • 北京高端网站建设制作设计/成都推广团队
  • 网站制作推荐新鸿儒/google手机官网
  • 青岛哪家做网站的公司好/电商运营培训学费多少
  • 做网站用空间好还是服务器好/网站排名优化外包公司
  • 自己建一个网站做电子商务/公众号开发
  • 银川做网站的 公司有哪些/seo快速上排名