公寓租赁管理系统--附源码00161

摘  要

随着城市化进程的加快,公寓租赁市场需求日益增长,对高效管理工具的需求也愈发明显。在这样的背景下,“Spring Boot公寓租赁管理系统”应运而生,基于Java语言开发,利用其跨平台特性和强大的生态系统,构建了一个高效、稳定的在线租赁管理平台。系统采用Spring Boot框架,简化了后端开发流程,结合MySQL数据库实现数据存储与管理,设计支持前后端分离,提升了系统的灵活性和响应速度。该系统为房东提供了从房源信息发布到租赁合同管理等一系列功能,包括处理看房预约和退租请求等;租客则能够便捷地进行看房预约、租赁订单管理以及在线签署合同等操作。管理员模块涵盖用户管理、房屋分类审核、公告发布等功能,确保系统稳定运行。通过这一技术架构,系统实现了租赁流程的自动化与规范化,显著提升了用户体验和服务效率,为现代公寓租赁市场提供了一套全面且高效的解决方案。

关键词:公寓租赁系统;SpringBootJava语言

Abstract

With With the acceleration of urbanization, the demand for apartment rental is growing, and the need for efficient management tools is becoming more and more obvious. In this context, "Spring Boot Apartment Rental Management System" came into being, developed based on Java language, using its cross-platform characteristics and strong ecosystem to build an efficient and stable online rental management platform. The system adopts the Spring Boot framework, which simplifies the back-end development process, combines with MySQL database to achieve data storage and management, and is designed to support front-end and back-end separation, which improves the flexibility and response speed of the system. The system provides landlords with a range of functions from listing information to lease contract management, including processing viewing appointments and cancellation requests. Tenants can easily make appointments for viewings, manage rental orders, and sign contracts online. The administrator module covers functions such as user management, housing classification review, and announcement release to ensure the stable operation of the system. Through this technical architecture, the system realizes the automation and standardization of the leasing process, significantly improves the user experience and service efficiency, and provides a comprehensive and efficient solution for the modern apartment rental market.

Keywords: apartment rental system; SpringBoot; Java language

目  录

1 绪  论

1.1 研究背景

1.2 研究意义

1.3 研究现状

1.3.1 国内研究现状

1.3.2 国外研究现状

1.4 论文结构与章节安排

2 相关技术介绍

2.1 SpringBoot框架介绍

2.2 MySQL数据库

2.3 Java语言

3 系统分析

3.1 可行性分析

3.1.1 技术可行性

3.1.2 经济可行性

3.1.3 操作可行性

3.2 系统需求分析

3.2.1 功能性需求分析

3.2.2 非功能性需求分析

3.3 系统流程分析

3.3.1 程序操作流程

3.3.2 登录流程

3.3.3 注册流程

3.4 本章小结

4 系统设计

4.1 系统架构设计

4.2 系统整体功能模块设计

4.3 数据库设计

4.3.1 数据库实体设计

4.3.2 数据库表设计

4.4 本章小结

5 系统实现

5.1 注册用户功能实现

5.1.1 房东用户注册

5.1.2 用户登录

5.1.3 首页界面

5.1.4 个人中心

5.1.5 评论管理

5.2 租客用户功能实现

5.2.1

5.2.2 个人中心

5.2.3 看房预约

5.2.4 租赁合同

5.3 管理员功能实现

5.3.1 系统用户

5.3.2 房屋分类管理

5.3.3 房屋信息管理

5.3.4 租赁订单管理

5.3.5 系统管理

5.3.6 公告信息管理

5.3.7 资源管理

6 系统测试

6.1 系统测试目标

6.2 系统功能测试

6.3 测试结果总结

7总结

参考文献

致  谢

附 录

 

1    

1.1研究背景

随着城市化进程的加速和人口流动性的增加,公寓租赁市场正经历着前所未有的变革。传统的租赁管理模式由于依赖于纸质文件、人工协调等手段,效率低下且容易出错,难以满足现代租赁市场的需求。特别是在信息不对称、交易透明度低等问题上,传统方式显得尤为不足。为应对这些挑战并提高租赁市场的运行效率和服务质量,“Spring Boot公寓租赁管理系统”被开发出来。

该系统采用Java作为开发语言,这是一种广泛应用于企业级应用开发的语言,因其卓越的性能、稳定性和强大的生态系统而著称。数据库方面选择了MySQL,它是一个开源的关系型数据库管理系统,以其可靠性、稳定性和易用性受到开发者们的青睐。系统架构基于Spring + SpringMVC + Spring Boot + MyBatis框架组合构建,这种技术选型不仅利用了Spring框架的依赖注入和面向切面编程的优势,还结合了SpringMVC用于构建Web层的强大功能。Spring Boot通过自动配置和简化设置加快了开发速度,并提高了生产效率;MyBatis则提供了便捷的数据持久化解决方案,使得与MySQL数据库的交互更加简单高效。

这套集成化的在线平台旨在通过提供全面的功能支持,包括房源信息发布、预约管理、订单处理、合同签署等,来提升房东、租客以及管理员之间的交互效率和服务质量。这不仅有助于改善用户体验,还能促进租赁市场的健康发展,实现租赁流程的自动化与规范化,显著提升服务效率和市场透明度。

1.2研究意义

Spring Boot公寓租赁管理系统”具有重要的研究和实践意义,尤其是在当前城市化进程加快、人口流动性增强的背景下。以下是该系统的主要研究意义:

提升管理效率:通过采用Java语言以及Spring + SpringMVC + Spring Boot + MyBatis框架组合,系统能够高效处理大量数据和复杂业务逻辑,大大简化了房东、租客及管理员的操作流程,提高了整个租赁过程的管理效率。

增强市场透明度:该系统提供了一个集中化的平台,所有房源信息、租赁合同、看房预约等都可以在线查看和管理,减少了信息不对称的问题,增强了租赁市场的透明度和公平性。

促进资源优化配置:通过高效的线上平台,租客可以更快找到合适的房源,房东也能更迅速地完成租赁交易,从而实现资源的优化配置,减少空置率,提高房产使用效率。

推动行业数字化转型:在传统租赁管理模式面临挑战的今天,“Spring Boot公寓租赁管理系统”的开发与应用为行业提供了数字化转型的范例,展示了如何利用现代信息技术改进传统业务流程,为其他类似领域提供了宝贵的经验。

改善用户体验:系统设计充分考虑到了用户需求,无论是房东还是租客,都能在这个平台上享受到便捷的服务,如在线签署合同、提交退租申请、评价房源等,极大地提升了用户的满意度和忠诚度。

支持决策制定:对于管理员而言,系统的数据分析功能可以帮助他们更好地理解市场需求、用户行为等,从而做出更加科学合理的决策,进一步优化服务内容和质量。

综上所述,“Spring Boot公寓租赁管理系统”的开发不仅有助于解决当前租赁市场面临的实际问题,还对推动行业进步、实现资源优化配置等方面具有重要意义。

1.3研究现状

1.3.1国内研究现状

在国内,在国内,随着高校信息化建设的不断推进以及后勤管理改革的深入发展,越来越多的高校和企业开始重视学生公寓管理系统和房屋租赁管理系统的开发与应用。目前市场上已经存在一些商业化的学生公寓管理系统和房屋租赁平台,这些系统通常具有较为完善的功能和良好的用户体验。同时,也有不少开源或自行开发的系统,在灵活性和定制性方面具有一定优势。然而,现有的系统在数据处理效率、安全性、智能化等方面仍有待进一步提升。国内的研究者们正在积极探索如何将物联网、大数据等新技术应用于这些系统中,以提供更加智能化和个性化的服务。

1.3.2国外研究现状

在国外,尤其是在欧美等发达国家,学生公寓管理和房屋租赁管理系统的起步较早且发展较为成熟。这些系统通常采用先进的技术架构和设计理念,注重系统的可扩展性和可维护性。例如,一些系统支持在线提交报修申请、查询维修进度等功能;还有一些集成了智能门锁、智能水电表等设备,实现了对学生行为的实时监控和智能化管理。此外,国外的高校和企业在学生公寓管理系统建设过程中更注重与其他后勤管理系统(如餐饮管理系统、校车管理系统等)的集成与协同工作,实现信息共享和资源优化配置。国外的研究者也在持续关注并探索新的技术趋势和管理模式,旨在为用户提供更加优质、便捷的服务体验。

综上所述,无论是国内还是国外,对于基于Java语言及Spring Boot框架组合的公寓租赁管理系统的研究和应用都在不断发展之中。国内外的研究均强调提高管理效率、增强用户体验、保障数据安全以及利用最新技术进行系统优化。不过,国外在系统集成和智能化应用方面似乎走得更远,而国内则更加关注于快速响应市场需求和技术创新的应用。

1.4论文结构与章节安排

本文共分为七章,章节内容安排如下:

第一章:绪论,主要介绍公寓租赁系统领域研究的背景、目的和意义,概述研究的现状。

第二章:相关技术介绍,主要探讨和说明实现公寓租赁系统的相关技术。

第三章:系统分析,主要从公寓租赁系统的可行性、功能性需求、非功能性能等方面进行分析,为后续系统设计提供理论支持。

第四章:系统设计,主要对公寓租赁系统功能模块、数据库进行功能设计。

第五章:系统实现,主要介绍了公寓租赁系统各个用户的功能、系统界面的实现。

第六章:系统测试,主要对公寓租赁系统进行测试,验证功能完整性、稳定性和安全性,评估系统在实际运行中的性能表现。

第七章:总结。主要对系统的开发设计工作进行总结。

2  相关技术介绍

2.1SpringBoot框架介绍

SpringBoot是Spring家族中的一个重要成员,它简化了Spring应用的初始搭建和开发过程[1]。通过提供一系列默认配置和自动装配机制,SpringBoot使得开发者能够更快地构建出生产级别的Spring应用。它支持多种开发工具和框架,如Maven、Gradle等,并且可以与多种数据库和缓存技术无缝集成[2]。SpringBoot的简洁性和高效性使其成为开发企业级应用的首选框架之一。在本次毕业设计中,SpringBoot框架为新能源汽车销售系统的后端开发提供了强大的支持。

2.2MySQL数据库

MySQL是一款开源的关系型数据库管理系统,它以其高性能、高可靠性和易用性而著称。MySQL支持多种存储引擎,如InnoDB、MyISAM等,能够满足不同应用场景的需求[3]。它提供了丰富的SQL语法和函数,使得开发者能够方便地进行数据查询、更新和删除操作。MySQL还支持事务处理、索引优化和复制等高级功能,为数据的完整性和安全性提供了有力保障。在本次毕业设计中,MySQL数据库作为新能源汽车销售系统的数据存储核心,承担着存储和管理资料信息、用户信息等重要数据的任务。而且通过合理的数据库设计和优化,确保了系统的数据访问效率和数据安全性[4]。

2.3Java语言

JAVA是一种广泛使用的编程语言,具有跨平台、面向对象、安全性高等特点。JAVA语言提供了丰富的类库和API,使得开发者能够轻松进行网络编程、数据库操作、图形界面开发等任务[4]。JAVA还支持多线程编程和分布式计算,为开发高性能和可扩展的应用提供了有力支持[5]。所以本次毕设选择了JAVA作为新能源汽车销售系统的开发语言。通过利用JAVA的面向对象特性和丰富的类库资源,成功实现系统的各个功能模块,并保证系统的稳定性和可扩展性。而且JAVA的跨平台特性也使得此次毕业设计能够在不同的操作系统和硬件平台上运行,为用户提供更加便捷的使用体验。

3  系统分析

系统分析是对系统开发的可行性进行研究,分析功能需求以确保系统满足用户期望。系统用例设计将明确定义系统与外部用户的交互场景,系统流程规划则细化系统内部功能流程,确保系统各模块协调工作。通过系统分析,可以建立清晰的系统框架,明确系统目标和功能,为系统开发和实施奠定基础。

3.1可行性分析

3.1.1技术可行性

开发SpringBoot公寓租赁管理系统在技术上是完全可行的。Java作为一种成熟、稳定的编程语言,具备强大的跨平台能力和丰富的开源库支持,能够高效实现系统的各种功能需求。现代数据库技术(如MySQL)可以确保数据的安全性和高效管理。此外,前端技术与后端服务的良好集成,能够提供流畅的用户体验。云计算和微服务架构的应用进一步增强了系统的可扩展性和灵活性,使得平台能够轻松应对未来业务增长的需求。整体而言,现有的技术条件完全可以支持该平台的开发与部署,并保障其稳定运行。

3.1.2经济可行性

该系统开发成本相对较低,主要投入在于人力与硬件资源。Spring Boot及MySQL均为开源技术,无需额外购买软件许可,降低了开发成本。如果系统上线可通过提供便捷、透明的服务,可吸引大量用户,进而通过广告、增值服务等方式实现盈利,具有良好的经济回报预期。此外,系统维护成本适中,便于长期运营与迭代升级。

3.1.3操作可行性

操作可行性体现在技术的稳定性和易实现性上。Java是一种广泛应用的编程语言,具备良好的兼容性和高效的运行能力,能够支持大量用户访问。Spring Boot框架能简化开发,提高系统的维护性,数据库可以使用MySQL来存储和管理数据,同时结合Redis缓存加快访问速度。前端采用Vue.js或React,提供流畅的操作体验,确保页面加载快速。用户数据安全通过JWT身份验证和数据加密来保护,避免信息泄露。服务器部署可以选择云端或本地,结合CDN优化访问速度,让系统在高并发情况下依然保持稳定。整体来看,平台的开发技术成熟,能够长期稳定运行,并且支持后续升级和扩展。

3.2系统需求分析

3.2.1功能性需求分析

Spring Boot公寓租赁管理系统"通过一个集成化的平台,简化房东、租客及管理员之间的交互流程,提供高效便捷的公寓租赁服务。以下是针对三个主要角色的功能分析:

3.2.1.1房东用户功能

  1. 注册登录:新用户可以通过注册成为系统用户,注册后后可以用账号密码登录系统。
  2. 首页:用户可以查看首页展示的轮播图,包括公告信息、新闻资讯、房源信息。
  3. 个人中心
  1. 个人首页:展示个人信息概览。
  2. 房源信息:管理自己的房源列表。
  3. 看房预约:查看租客预约看房的时间安排,并进行确认或拒绝操作。
  4. 租赁订单:跟踪所有与自己房源相关的租赁订单状态。
  5. 租赁合同:查看和下载与租客签订的电子合同。
  6. 退租信息:处理租客提出的退租请求。
  7. 收藏:保存感兴趣的房源或其他信息。
  8. 评论管理:查看并回复租客对房源的评价。

注册用户角色用例如下图所示。

图3.1房东用户用例图

3.2.1.2.租客用户功能

(1)个人首页:显示租客用户个人信息,及近期活动。

(2)看房预约:租客用户可以选择心仪的房源并预约看房时间。

(3)租赁订单:租客用户可以管理自己的租赁订单,包括下单、支付等操作。

(4)租赁合同:租客用户可以在线签署或下载租赁合同。

(5)退租信息:租客用户通过提交退租申请,经房东和管理员审核同意后可以在线办理退租,并查询办理进度。

(6)收藏:租客用户可以保存喜欢的房源以便日后参考。

(7)评论管理:租客用户可以对自己居住过的房源进行评价,便于其他用户参考。

租客用户角色用例如下图所示。

图3.2租客用户用例图

3.2.1.3管理员功能

  1. 后台首页:管理员可以根据后台首页展示的功能列表进行一系列管理。
  2. 系统用户管理:对房东用户、租客用户以及管理员账号进行增删改查操作。
  3. 房屋分类管理,在该模块管理员可以对房屋分类列表进行管理和进行房屋分类添加。如点击“房屋分类列表”进入页面可以查看列表中某个房屋分类的详情。
  1. 房屋分类列表:管理和维护房屋分类目录。
  2. 房屋分类添加:新增房屋类别。
  1. 房源信息管理:在该模块管理员可以对房源信息列表进行管理和进行房源信息添加。如点击“房源信息列表”进入页面可以查看列表中某个房源信息的详情和评论。
  1. 房屋信息列表:审核和管理所有房源信息。
  2. 房屋信息添加:直接添加房源信息(通常用于特殊情况)
  1. 看房预约管理:监控和协调所有用户的看房预约情况。
  2. 租赁订单管理:审查和处理租赁交易记录。
  3. 租赁合同管理:存储和检索租赁协议文档。
  4. 退租信息管理:处理并记录所有退租事宜。
  5. 系统管理
  1. 轮播图管理:更新首页轮播广告内容。
  1. 公告信息管理:发布公告和重要通知给所有用户。
  2. 资源管理
  1. 新闻资讯:发布行业新闻或政策变动信息。
  2. 资讯分类:为不同类型的信息创建分类标签。

管理员功能用例如下图所示。

图3.3管理员用例图

3.2.2非功能性需求分析

非功能性需求分析主要是分析本系统的安全性怎么样(是否会泄露用户个人信息),可靠性怎么样(用户操作的时候是不是能够根据实际操作显示信息),性能怎么样(运行是否操作流畅),可拓展性怎么样(功能能否继续拓展)等。具体可以表示在如下3-1表格中:

3-1公寓租赁系统非功能需求表

需求类型

描述

性能

系统应具有高性能,能够快速响应用户请求,保持稳定的性能水平,支持高并发访问和大规模数据处理。

可靠性

系统应具有高可靠性,确保系统稳定运行,防止系统故障和数据丢失,提供数据备份和恢复机制。

安全性

系统应具有高安全性,保护用户隐私信息和数据安全,采用加密传输技术、访问控制和身份验证机制。

可用性

系统应具有高可用性,保证系统全天候运行,最大限度减少系统故障和维护时间,提供灾备和故障转移功能。

易用性

系统应具有良好的易用性,用户界面设计友好,操作简单直观,提供清晰的指导和帮助文档。

可维护性

系统应具有良好的可维护性,易于维护和升级,提供模块化和结构化代码,方便开发人员进行维护和修改。

可扩展性

系统应具有良好的可扩展性,支持新增功能和模块的集成,具备良好的架构设计和扩展性能。

3.3系统流程分析

3.3.1程序操作流程

用户访问系统,可以选择进行注册或登录操作。注册成功后,用户可以使用注册的账号登录平台。登录后的用户可以进入系统功能界面,使用自己权限内的功能操作。程序操作流程图如下图所示。

图3.4程序操作流程图

3.3.2登录流程

用户访问系统,进入登录页面页面,入其用户名和密码,后端服务接收登录请求,验证用户提供的用户名和密码是否匹配数据库中存储的信息,验证通过即可登录成功。登录流程图如下图所示。

图3.5登录流程图

3.3.3注册流程

未有账号的用户可进入注册界面进行注册操作,填写注册表格,包括用户名、密码、邮箱等必要信息。后台系统验证并保存用户提交的信息。分配唯一用户标识符。注册成功后,用户可以使用账号密码进行登录。用户注册流程图如下图所示。

图3.6注册流程图

3.4本章小结

本章主要通过对公寓租赁系统的可行性分析、功能分析、系统用例分析、流程分析,确定整个系统要实现的功能。同时也为系统的代码实现和测试提供了标准。

4  系统设计

本章主要介绍公寓租赁系统的架构设计、功能模块设计和数据库系统设计。

4.1系统架构设计

在系统架构设计中,我将确定系统的整体结构和组件之间的关系。这包括选择适当的架构风格,划分系统的层次结构,并定义各个模块的职责和交互方式。架构图如下图所示。

图4.1系统架构设计图

表示层(Presentation Layer):负责与用户进行交互,将系统的功能和数据以易于理解和操作的方式展示给用户。通常包括用户界面、页面设计和用户输入验证等。

业务逻辑层(Business Logic Layer):处理系统的核心业务逻辑,包括对用户请求的处理、业务规则的执行以及数据的处理和转换。它独立于表现层和数据层,实现了业务逻辑的封装和复用。

数据层(Data Layer):负责数据的存储、访问和管理,包括数据库和持久化机制。数据层提供了对数据的增删改查操作,并与业务逻辑层进行交互,使系统能够有效地存储和检索数据。

这三个层次相互独立,通过明确的接口和协议进行通信,实现了系统的模块化和可扩展性。表现层负责将用户的请求传递给业务逻辑层,业务逻辑层处理请求并返回结果,最后数据层负责与数据库交互并提供数据支持。这种分层架构有助于实现系统的可维护性、灵活性和可测试性。

4.2系统整体功能模块设计

功能模块设计是系统开发过程中的重要阶段,它旨在将系统划分为不同的模块,每个模块负责完成特定的功能或任务。公寓租赁系统由多个功能模块组成,每个模块下又包含具体的功能操作。功能整体功能结果图如下图所示。

图4.2系统整体功能结构图

4.3数据库设计

数据库设计是系统开发中至关重要的环节,为系统提供高效、规范的数据存储和管理方案。设计过程包括需求分析、实体设计、表设计和逻辑结构设计。首先,通过分析业务需求,确定系统的核心实体及其属性,同时明确实体间的关系。接着,将实体抽象为具体的数据库表,为每张表定义字段名、数据类型、主键和外键,通过主外键关系和关联表设计,保证数据的完整性和一致性。最后,数据库逻辑设计进一步优化表之间的关系,通过索引、视图和存储过程提升查询效率和操作性能。整个设计需严格遵循规范,避免数据冗余和冲突,确保系统在高并发访问和复杂数据处理场景下的稳定性和高效性。

4.3.1数据库实体设计

数据库实体设计是数据库设计的关键步骤,对实际业务逻辑中涉及的实体及其属性进行抽象建模,明确系统中的主要信息对象及其关系[9]。在实体设计中,根据需求分析确定系统的核心实体,如用户、角色、权限等,提取实体的主要属性,如用户的ID、姓名、性别、联系方式等,同时定义各实体之间的关系,包括一对一、一对多、多对多等。在设计过程中,注重实体的完整性、规范性和唯一性,确保设计能够满足系统功能需求,并为后续的表设计提供清晰的结构框架。实体设计需遵循数据库设计的标准化要求,避免数据冗余和不必要的复杂度。以下将展示系统的全局E-R图。系统全局E-R图如图4.3所示。

图4.3总E-R图

4.3.2数据库表设计

数据库表设计基于实体设计,将抽象的实体映射为具体的表结构。设计过程中,为每个实体定义表名、字段名及数据类型 [10]。根据业务需求,合理定义主键、外键及约束条件,确保表之间的关联性,例如通过外键建立用户表和角色表之间的关系。表设计时注重数据存储的完整性、一致性,并通过索引优化查询效率,最终确保数据库结构能够支持系统的功能需求。以下是系统的主要数据库表设计展示。

表 4-1-access_token(登陆访问时长)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

token_id

int

临时访问牌ID

2

token

varchar

64

临时访问牌

3

info

text

65535

信息

4

maxage

int

最大寿命:默认2小时

5

create_time

timestamp

创建时间

6

update_time

timestamp

更新时间

7

user_id

int

用户编号

表 4-2-article(文章)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

article_id

mediumint

文章id

2

title

varchar

125

标题

3

type

varchar

64

文章分类

4

hits

int

点击数

5

praise_len

int

点赞数

6

create_time

timestamp

创建时间

7

update_time

timestamp

更新时间

8

source

varchar

255

来源

9

url

varchar

255

来源地址

10

tag

varchar

255

标签

11

content

longtext

4294967295

正文

12

img

varchar

255

封面图

13

description

text

65535

文章描述

表 4-3-article_type(文章分类)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

type_id

smallint

分类ID

2

display

smallint

显示顺序

3

name

varchar

16

分类名称

4

father_id

smallint

上级分类ID

5

description

varchar

255

描述

6

icon

text

65535

分类图标

7

url

varchar

255

外链地址

8

create_time

timestamp

创建时间

9

update_time

timestamp

更新时间

表 4-4-auth(用户权限管理)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

auth_id

int

授权ID

2

user_group

varchar

64

用户组

3

mod_name

varchar

64

模块名

4

table_name

varchar

64

表名

5

page_title

varchar

255

页面标题

6

path

varchar

255

路由路径

7

parent

varchar

64

父级菜单

8

parent_sort

int

父级菜单排序

9

position

varchar

32

位置

10

mode

varchar

32

跳转方式

11

add

tinyint

是否可增加

12

del

tinyint

是否可删除

13

set

tinyint

是否可修改

14

get

tinyint

是否可查看

15

field_add

text

65535

添加字段

16

field_set

text

65535

修改字段

17

field_get

text

65535

查询字段

18

table_nav_name

varchar

500

跨表导航名称

19

table_nav

varchar

500

跨表导航

20

option

text

65535

配置

21

create_time

timestamp

创建时间

22

update_time

timestamp

更新时间

表 4-5-code_token(验证码)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

code_token_id

int

验证码ID

2

token

varchar

255

令牌

3

code

varchar

255

验证码

4

expire_time

timestamp

失效时间

5

create_time

timestamp

创建时间

6

update_time

timestamp

更新时间

表 4-6-collect(收藏)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

collect_id

int

收藏ID

2

user_id

int

收藏人ID

3

source_table

varchar

255

来源表

4

source_field

varchar

255

来源字段

5

source_id

int

来源ID

6

title

varchar

255

标题

7

img

varchar

255

封面

8

create_time

timestamp

创建时间

9

update_time

timestamp

更新时间

表 4-7-comment(评论)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

comment_id

int

评论ID

2

user_id

int

评论人ID

3

reply_to_id

int

回复评论ID

4

content

longtext

4294967295

内容

5

nickname

varchar

255

昵称

6

avatar

varchar

255

头像地址

7

create_time

timestamp

创建时间

8

update_time

timestamp

更新时间

9

source_table

varchar

255

来源表

10

source_field

varchar

255

来源字段

11

source_id

int

来源ID

表 4-8-hits(用户点击)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

hits_id

int

点赞ID

2

user_id

int

点赞人

3

create_time

timestamp

创建时间

4

update_time

timestamp

更新时间

5

source_table

varchar

255

来源表

6

source_field

varchar

255

来源字段

7

source_id

int

来源ID

表 4-9-house_appointment(看房预约)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

house_appointment_id

int

看房预约ID

2

tenant_user

int

租客用户

3

landlord_user

int

房东用户

4

user_name

varchar

64

用户姓名

5

user_gender

varchar

64

用户性别

6

user_phone

varchar

64

用户电话

7

house_no

varchar

64

房屋编号

8

house_name

varchar

64

房屋名称

9

type_of_house

varchar

64

房屋类型

10

city

varchar

64

所在城市

11

street

varchar

64

所在街道

12

community

varchar

64

所在小区

13

house_floor

varchar

64

房屋楼层

14

appointment_date

date

预约日期

15

appointment_details

text

65535

预约详情

16

examine_state

varchar

16

审核状态

17

examine_reply

varchar

16

审核回复

18

create_time

datetime

创建时间

19

update_time

timestamp

更新时间

20

source_table

varchar

255

来源表

21

source_id

int

来源ID

22

source_user_id

int

来源用户

表 4-10-house_classification(房屋分类)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

house_classification_id

int

房屋分类ID

2

type_of_house

varchar

64

房屋类型

3

create_time

datetime

创建时间

4

update_time

timestamp

更新时间

表 4-11-housing_information(房源信息)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

housing_information_id

int

房源信息ID

2

landlord_user

int

房东用户

3

house_no

varchar

64

房屋编号

4

house_name

varchar

64

房屋名称

5

type_of_house

varchar

64

房屋类型

6

city

varchar

64

所在城市

7

street

varchar

64

所在街道

8

community

varchar

64

所在小区

9

house_floor

varchar

64

房屋楼层

10

description_of_house

varchar

64

房屋描述

11

supporting_facilities

varchar

64

配套设施

12

house_status

varchar

64

房屋状态

13

monthly_rent

double

每月租金

14

house_cover

varchar

255

房屋封面

15

house_remarks

longtext

4294967295

房屋备注

16

praise_len

int

点赞数

17

collect_len

int

收藏数

18

comment_len

int

评论数

19

examine_state

varchar

16

审核状态

20

house_appointment_limit_times

int

看房限制次数

21

lease_order_limit_times

int

租赁限制次数

22

create_time

datetime

创建时间

23

update_time

timestamp

更新时间

表 4-12-landlord_user(房东用户)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

landlord_user_id

int

房东用户ID

2

landlords_name

varchar

64

房东姓名

3

landlord_phone

varchar

16

房东电话

4

landlord_gender

varchar

64

房东性别

5

examine_state

varchar

16

审核状态

6

user_id

int

用户ID

7

create_time

datetime

创建时间

8

update_time

timestamp

更新时间

表 4-13-lease_contract(租赁合同)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

lease_contract_id

int

租赁合同ID

2

landlord_user

int

房东用户

3

tenant_user

int

租客用户

4

user_name

varchar

64

用户姓名

5

user_gender

varchar

64

用户性别

6

user_phone

varchar

64

用户电话

7

house_no

varchar

64

房屋编号

8

house_name

varchar

64

房屋名称

9

type_of_house

varchar

64

房屋类型

10

monthly_rent

varchar

64

每月租金

11

contract_no

varchar

64

合同编号

12

contract_documents

varchar

255

合同文件

13

effective_date

date

生效日期

14

contract_status

varchar

64

合同状态

15

contract_remarks

text

65535

合同备注

16

create_time

datetime

创建时间

17

update_time

timestamp

更新时间

18

source_table

varchar

255

来源表

19

source_id

int

来源ID

20

source_user_id

int

来源用户

表 4-14-lease_order(租赁订单)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

lease_order_id

int

租赁订单ID

2

order_number

varchar

64

订单编号

3

landlord_user

int

房东用户

4

tenant_user

int

租客用户

5

user_name

varchar

64

用户姓名

6

user_gender

varchar

64

用户性别

7

user_phone

varchar

64

用户电话

8

house_no

varchar

64

房屋编号

9

house_name

varchar

64

房屋名称

10

type_of_house

varchar

64

房屋类型

11

monthly_rent

varchar

64

每月租金

12

lease_date

date

租赁日期

13

lease_remarks

text

65535

租赁备注

14

examine_state

varchar

16

审核状态

15

pay_state

varchar

16

支付状态

16

pay_type

varchar

16

支付类型: 微信、支付宝、网银

17

lease_contract_limit_times

int

合同发送限制次数

18

lease_withdraw_information_limit_times

int

退租限制次数

19

create_time

datetime

创建时间

20

update_time

timestamp

更新时间

21

source_table

varchar

255

来源表

22

source_id

int

来源ID

23

source_user_id

int

来源用户

表 4-15-lease_withdraw_information(退租信息)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

lease_withdraw_information_id

int

退租信息ID

2

order_number

varchar

64

订单编号

3

tenant_user

int

租客用户

4

landlord_user

int

房东用户

5

user_name

varchar

64

用户姓名

6

user_gender

varchar

64

用户性别

7

user_phone

varchar

64

用户电话

8

house_no

varchar

64

房屋编号

9

house_name

varchar

64

房屋名称

10

type_of_house

varchar

64

房屋类型

11

monthly_rent

varchar

64

每月租金

12

lease_surrender_date

date

退租日期

13

reason_for_lease_surrender

varchar

64

退租原因

14

refund_details

text

65535

退租详情

15

examine_state

varchar

16

审核状态

16

create_time

datetime

创建时间

17

update_time

timestamp

更新时间

18

source_table

varchar

255

来源表

19

source_id

int

来源ID

20

source_user_id

int

来源用户

表 4-16-notice(公告)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

notice_id

mediumint

公告ID

2

title

varchar

125

标题

3

content

longtext

4294967295

正文

4

create_time

timestamp

创建时间

5

update_time

timestamp

更新时间

表 4-17-praise(点赞)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

praise_id

int

点赞ID

2

user_id

int

点赞人

3

create_time

timestamp

创建时间

4

update_time

timestamp

更新时间

5

source_table

varchar

255

来源表

6

source_field

varchar

255

来源字段

7

source_id

int

来源ID

8

status

tinyint

点赞状态:1为点赞,0已取消

表 4-18-score(评分)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

score_id

int

评分ID

2

user_id

int

评分人

3

nickname

varchar

64

昵称

4

score_num

double

评分

5

create_time

timestamp

创建时间

6

update_time

timestamp

更新时间

7

source_table

varchar

255

来源表

8

source_field

varchar

255

来源字段

9

source_id

int

来源ID

表 4-19-slides(轮播图)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

slides_id

int

轮播图ID

2

title

varchar

64

标题

3

content

varchar

255

内容

4

url

varchar

255

链接

5

img

varchar

255

轮播图

6

hits

int

点击量

7

create_time

timestamp

创建时间

8

update_time

timestamp

更新时间

表 4-20-tenant_user(租客用户)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

tenant_user_id

int

租客用户ID

2

user_name

varchar

64

用户姓名

3

user_gender

varchar

64

用户性别

4

user_phone

varchar

16

用户电话

5

examine_state

varchar

16

审核状态

6

user_id

int

用户ID

7

create_time

datetime

创建时间

8

update_time

timestamp

更新时间

表 4-21-upload(文件上传)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

upload_id

int

上传ID

2

name

varchar

64

文件名

3

path

varchar

255

访问路径

4

file

varchar

255

文件路径

5

display

varchar

255

显示顺序

6

father_id

int

父级ID

7

dir

varchar

255

文件夹

8

type

varchar

32

文件类型

表 4-22-user(用户账户)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

user_id

int

用户ID

2

state

smallint

账户状态:(1可用|2异常|3已冻结|4已注销)

3

user_group

varchar

32

所在用户组

4

login_time

timestamp

上次登录时间

5

phone

varchar

11

手机号码

6

phone_state

smallint

手机认证:(0未认证|1审核中|2已认证)

7

username

varchar

16

用户名

8

nickname

varchar

16

昵称

9

password

varchar

64

密码

10

email

varchar

64

邮箱

11

email_state

smallint

邮箱认证:(0未认证|1审核中|2已认证)

12

avatar

varchar

255

头像地址

13

open_id

varchar

255

针对获取用户信息字段

14

create_time

timestamp

创建时间

表 4-23-user_group(用户组)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

group_id

mediumint

用户组ID

2

display

smallint

显示顺序

3

name

varchar

16

名称

4

description

varchar

255

描述

5

source_table

varchar

255

来源表

6

source_field

varchar

255

来源字段

7

source_id

int

来源ID

8

register

smallint

注册位置

9

create_time

timestamp

创建时间

10

update_time

timestamp

更新时间

4.4本章小结

整个公寓租赁系统的需求分析主要对系统架构以及功能模块的设计,通过建立数据库实体和数据库表设计完成了数据库系统设计。

5  系统实现

本系统的实现主要是根据前面的系统需求分析和系统总体设计来设计页面并实现业务逻辑。主要从公寓租赁系统界面实现、业务逻辑实现这两部分进行介绍。

5.1注册用户功能实现

5.1.1房东用户注册

用户注册:输入账号、设置密码、确认密码、昵称、邮箱、选择用户身份、填写用户姓名、性别等个人信息,点击“注册”按钮,待管理员后台审核通过即可完成注册。其界面如下图5.1所示。

图5.1房东用户注册界面设计

5.1.2用户登录

用户登录:输入用户名、密码和验证码后点击“登录”按钮,校验通过后即可登录,同时提供找回密码的选项。其界面如下图5.2所示。

图5.2用户登录界面设计

5.1.3首页界面

首页界面是用户访问系统的入口页面,它展示系统的主要功能和特色。用户可以查看首页展示的轮播图、公告信息、新闻资讯、房源等信息并进行相关操作。其界面图如下图5.3所示。

图5.3首页界面设计

5.1.4个人中心

用户点击我的头像下拉菜单“个人中心”可以查看个人首页、房源信息、房屋评分、收藏和评论管理并进行相关操作。例如,点击“房源信息”可以添加房源信息,可以对已有的房源信息进行查询、重置和删除操作。个人中心界面图如下图5.4所示。

图5.4个人中心界面设计

5.1.5评论管理

房东用户可以在评论管理功能查看并回复租客对房源的评价。界面图如下所示。

图5.5评论管理界面设计

5.2租客用户功能实现

5.2.1

首页:显示个人信息摘要及近期活动,界面图如下图5.5所示。

图5.6租客首页界面设计

5.2.2个人中心

租客用户个人中心功能涵盖看房预约、租赁订单、租赁合同、退租信息、收藏、评论管理等功能。界面图如下图所示。

图5.7租客个人中心界面设计

5.2.3看房预约

租客用户可以选择心仪的房源并预约看房时间,提交申请,待房东通过审核即可看房。界面图如下图所示。

图5.8看房预约界面设计

5.2.4租赁合同

租客用户可以在此功能管理自己的租赁订单,包括下单、支付等操作。界面图如下图所示。

图5.9租赁合同界面设计

5.3管理员功能实现

5.3.1系统用户

管理员可以查看所有用户(房东用户、租客用户、管理员)信息并进行增删改查操作。例如,点击某个用户后面的“详情”可以查看该用户的信息详情并可以对用户状态等信息进行修改。其界面图如下图5.9所示。

图5.10系统用户界面设计

5.3.2房屋分类管理

在该模块管理员可以对房屋分类列表进行管理和进行房屋分类添加。如点击“房屋分类列表”进入页面可以查看列表中某个房屋分类的详情;点击“房屋分类添加”进入页面填写分类名称后点击“提交”即可完成房屋分类的添加。以房屋分类列表为例,其界面图如下图5.10所示。

图5.11房屋分类管理界面设计

5.3.3房屋信息管理

管理员可以在房屋信息管理功能查看房屋审核和管理所有房源信息;直接添加房源信息。其界面图如下图5.11所示。

图5.12房屋信息管理界面设计

5.3.4租赁订单管理

在该模块管理员可以审查和处理租赁交易记录,其界面图如下图5.12所示。

图5.13租赁订单管理界面设计

5.3.5系统管理

在该模块管理员可以对系统轮播图信息进行增删改查操作。点击“添加”进入页面上传轮播图图片和填写标题、链接后点击“提交”即可完成轮播图的添加。其界面图如下图5.13所示。

图5.14系统管理界面设计

5.3.6公告信息管理

该模块是管理员用来管理系统中的公告信息的界面。管理员可以通过该界面进行公告信息的创建、编辑、发布和删除等操作,以便向用户传达各种重要信息、公告、更新或事件等内容。其界面图如下图5.14所示。

图5.15公告信息管理界面设计

5.3.7资源管理

在该模块管理员可以对新闻资讯和资讯分类信息进行增删改查操作。例如,点击“新闻资讯”可以查看资讯列表中某个资讯的详情和评论,勾选某个或多个资讯信息点击“删除”并确认删除即可删除资讯信息。以新闻资讯为例,其界面图如下图5.15所示。

图5.16资源管理界面设计

6  系统测试

6.1系统测试目标

为了保证“公寓租赁系统 ”的质量,使其能够稳定的运行,并排除其可能存在的未知隐患,解除软件可能存在的故障,理清楚测试与纠错的关系,如图6-1所示。

图6-1测试与纠错信息流程

6.2系统功能测试

通过对系统中所含的主要实体对象及其功能操作进行测试用例设计。系统功能测试包括:用户注册登录功能测试、用户发表评论功能测试,用户在线评分功能测试、管理员添加轮播图功能测试、管理员删除房屋资讯功能测试,如表6-1、6-2、6-3、6-4、6-5所示:

表6-1用户注册登录测试表

用户注册登录测试用例:

用例说明

测试目的

测试步骤

预期结果

输出结果

通过情况

用户注册、登录

测试用户正确注册、登录

  1. 在首页界面注册一个新用户,按规定输入合理的注册信息,提交。
  2. 用户在登录界面输入账户密码登录

用户注册成功,登录成功

结果输出符合预期

通过

表6-2用户发表评论测试表

用户发表评论测试用例:

用例说明

测试目的

测试步骤

预期结果

输出结果

通过情况

用户发表评论

测试注册用户发表评论操作

  1. 在导航栏点击“房屋资讯”并看某个房屋资讯的详情; 
  2. 在详情页面下方发表对该房屋资讯的评论

用户发表评论成功,展示用户评论信息

结果输出符合预期

通过

表6-3用户在线评分测试表

房东用户评价管理测试用例:

用例说明

测试目的

测试步骤

预期结果

输出结果

通过情况

用户评价管理测试

测试注册用户评价管理功能

  1. 在首页点击“房源信息”;
  2. 点击列表中某个房源信息进入详情页面,点击“评价管理”填写相关信息后点击“提交”

用户可以在线提交评价

结果输出符合预期

通过

表6-4管理员添加轮播图测试表

管理员添加轮播图测试用例:

用例说明

测试目的

测试步骤

预期结果

输出结果

通过情况

管理员添加轮播图测试

测试轮播图信息添加

  1. 管理员点击“系统管理”下方的“轮播图管理”;
  2. 点击:添加输入相关信息后点击“提交”

轮播图信息添加成功,前端用户可以查看该轮播图信息

结果输出符合预期

通过

表6-5管理员删除房屋资讯测试表

管理员删除房屋资讯测试用例:

用例说明

测试目的

测试步骤

预期结果

输出结果

通过情况

管理员删除房屋资讯

测试管理员删除房屋资讯功能

  1. 管理员点击“资讯管理”下方的“房屋资讯”;
  2. 选择一个房屋资讯点击“删除”并确认删除

房屋资讯信息删除成功,前端不在展示该房屋资讯信息

结果输出符合预期

通过

6.3测试结果总结

通过编写公寓租赁系统的功能测试用例,已经检测完毕系统测试,用户注册登录功能测试、用户发表评论功能测试,用户评论管理功能测试、管理员添加轮播图功能测试、管理员删除房屋资讯功能测试,通过这五大模块功能测试将为公寓租赁系统的后期推广运营提供了强力的技术支撑。

7总结

"Spring Boot公寓租赁管理系统"为房东、租客及管理员提供了全面的在线管理解决方案。房东可通过系统发布房源信息,处理看房预约、租赁订单及退租请求,同时还能管理评论和收藏。租客则能方便地预约看房、管理租赁订单、签署合同以及提交退租申请,并对居住体验进行评价。管理员角色功能丰富,包括用户管理、房源分类与信息审核、预约与订单处理等,确保系统的顺畅运行。此外,还负责公告信息发布、新闻资讯更新及轮播图管理,增强平台的信息传播能力。该系统通过集成化的管理平台,简化了租赁流程中的各个环节,提高了操作效率和服务质量,为用户提供便捷、透明且高效的公寓租赁体验。各角色的功能设计充分考虑到了实际需求,使得整个租赁过程更加规范化和自动化。

在开发本系统的过程中,我收获颇丰,学到了许多书本上学不到的知识。尽管系统已经基本完成,但由于个人专业知识的局限,系统仍有许多需要改进的地方,例如界面布局的优化、代码编写的规范性等。未来,我将继续努力学习,不断提升自己的技术水平,对系统进行进一步的完善。

参考文献

[1]韦珍娜,陈宇佳. 基于Springboot的服装租赁系统设计 [J]. 电脑编程技巧与维护, 2025, (01): 35-38. DOI:10.16184/j.cnki.comprg.2025.01.005.

[2]姚佰允,张豪,杜瑞庆. 基于SpringBoot与Vue的学院人员管理系统设计与实现 [J]. 无线互联科技, 2025, 22 (02): 78-83.

[3]谢海明,张佐中,林顺福.基于自动化技术的MySQL故障处理系统的设计与实现[J].电脑知识与技术,2024,20(33):73-75.DOI:10.14004/j.cnki.ckt.2024.1721.

[4]陈芳.基于MySQL数据库的数据录入系统设计研究[J].科技资讯,2024,22(20):35-37.DOI:10.16661/j.cnki.1672-3791.2405-5042-7194.

[5]谢帅虎.基于Java语言的翻页功能接口程序设计与实现[J].数字通信世界,2024,(11):92-94.

[6]贾琴.Java编程语言的应用策略分析[J].集成电路应用,2024,41(10):84-85.DOI:10.19339/j.issn.1674-2583.2024.10.034.

[7]张靖旭,曾晓晶,郭玉坤. 基于SpringBoot的校园植物信息网建设研究 [J]. 信息与电脑(理论版), 2024, 36 (22): 119-121.

[8]戴亚哲,李尤,赵利宏,等. 基于SpringBoot+Vue的文旅平台设计与研究 [J]. 无线互联科技, 2024, 21 (21): 70-72.

[9]朴明,邱翠花,苗子. 基于SpringBoot+小程序的信息采集系统设计与实现 [J]. 电子技术, 2024, 53 (10): 47-49.

[10]李巧玲.共享发展视角下档案资料管理信息化平台建设研究[J].参花,2025,(06):122-124.

[11]李俊萌.计算机软件测试技术与开发应用策略分析[J].信息记录材料,2023,24(03):50-52.

[12]安康.长租公寓模式中的合同风险与纠纷防范机制研究[D].西北师范大学,2024.DOI:10.27410/d.cnki.gxbfu.2024.002227.

[13]张玄梁.J公寓业务运营管理优化研究[D].华东师范大学,2023.DOI:10.27149/d.cnki.ghdsu.2023.004578.

[14]孙雪鹏.租赁住房建设运营经验分享[C]//中国房地产估价师与房地产经纪人学会,中国建设报社,建信住房服务有限责任公司.新发展模式下的住房租赁——2023中国住房租赁发展论坛论文集.华润置地(北京)股份有限公司;,2023:240-245.DOI:10.26914/c.cnkihy.2023.121526.

[15]李莎.新形势下集中式租赁社区运营管理研究[C]//中国房地产估价师与房地产经纪人学会,中国建设报社,建信住房服务有限责任公司.规范发展与最佳实践——中国住房租赁发展论坛论文集.之寓置业有限公司;,2023:653-658.DOI:10.26914/c.cnkihy.2023.037326.

[16]Karto I ,Christianto ,Grace M H .Property selling system with support for validation and verification process[J].Procedia Computer Science,2023,216186-193.

[17]王永红.A公司公寓租赁市场营销策略研究[D].重庆理工大学,2021.DOI:10.27753/d.cnki.gcqgx.2021.000414.

[18]Patents; Researchers Submit Patent Application, "System and Method for Facilitating Real Estate Sales", for Approval (USPTO 20150278971)[J].Computer Weekly News,2015,

[19]Manhattan Residential Real Estate Attorney Peter Zinkovetsky Releases Insightful Article on Apartment Lease Buyouts[J].M2 Presswire,2024,

[20]Engerstam S ,Warsame A ,Wilhelmsson M .Exploring the Effects of Municipal Land and Building Policies on Apartment Size in New Residential Construction in Sweden[J].Journal of Risk and Financial Management,2023,16(4):

致  谢

这次毕业设计能够完成,最重要的就是来自指导老师的帮助,老师不厌其烦的对我的论文及毕业设计提出非常有建设性的建议,我的毕设施能够完成离不开老师的帮助。我对老师由衷的表示感谢,

其次要感谢大学四年里学院里所有的任课老师的教导,老师们在我整个大学四年里给予了我丰富的知识,让我能够在大学中不虚度光阴,踏踏实实的学习,没有这些老师不辞辛劳的教诲,我无法完成这四年的学业。

最后,我要感谢我的家人和同学们。感谢父母在物质与精神上给予我无限的支持和鼓励。感谢我的同学们,在论文写作期间,你们给予了我许多宝贵的建议和帮助,让我在学术研究的道路上不再孤单。

再次感谢所有在我大学生活中给予我帮助和支持的人们。您们的关怀和鼓励将永远铭刻在我的心中,成为我未来前行的动力。

附 录

系统关键代码

登录代码如下:

 def Login(self, ctx):

        print("===================登录=====================")

        ret = {

            "error": {

                "code": 70000,

                "message": "账户不存在",

            }

        }

        body = ctx.body

        password = md5hash(body["password"]) or ""

        obj = service_select("user").Get_obj(

            {"username": body["username"]}, {"like": False}

        )

        if obj:

            user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})

            if user_group and user_group['source_table'] != '':

                user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']},                                                                       {"like": False})

                if user_obj['examine_state'] == '未通过':

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "账户未通过审核",

                        }

                    }

                    return ret

                if user_obj['examine_state'] == '未审核':

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "账户未审核",

                        }

                    }

                    return ret

            if obj["state"] == 1:

                if obj["password"] == password:

                    timeout = timezone.now()

                    timestamp = int(time.mktime(timeout.timetuple())) * 1000

                    token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))

                    ctx.request.session[token] = obj["user_id"]

                    service_select("access_token").Add(

                        {"token": token, "user_id": obj["user_id"]}

                    )

                    obj["token"] = token

                    ret = {

                        "result": {"obj": obj}

                    }

                else:

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "密码错误",

                        }

                    }

            else:

                ret = {

                    "error": {

                        "code": 70000,

                        "message": "用户账户不可用,请联系管理员",

                    }

                }

        return ctx.response(json.dumps(ret, ensure_ascii=False))

注册代码如下:

    def Register(self, ctx):

        print("===================注册=====================")

        userService = service_select("user")

        body = ctx.body

        if "username" not in body and body["username"] == '':

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "用户名不能为空",

                }

            }, ensure_ascii=False))

        if "user_group" not in body and body["user_group"] == '':

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "用户组不能为空",

                }

            }, ensure_ascii=False))

        if "password" not in body and body["password"] == '':

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "密码不能为空",

                }

            }, ensure_ascii=False))

        post_param = body

        post_param['nickname'] = body["nickname"] or ""

        post_param['password'] = md5hash(body["password"])

        obj = userService.Get_obj({"username": post_param['username']}, {"like": False})

        if obj:

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "用户名已存在",

                }

            }, ensure_ascii=False))

        ret = {

            "error": {

                "code": 70000,

                "message": "注册失败",

            }

        }

        bl = userService.Add(post_param)

        if bl:

            ret = {

                "result": {

                    "bl": True,

                    "message": "注册成功"

                }

            }

        return ctx.response(json.dumps(ret, ensure_ascii=False))

找回密码代码如下:

 def Forget_password(self, ctx):

        print("===================修改密码=====================")

        ret = {

            "error": {

                "code": 70000,

                "message": "用户信息不能没有"

            }

        }

        body = ctx.body

        if not body["code"]:

            return {

                "error": {

                    "code": 70000,

                    "message": "验证码不存在或者错误"

                }

            }

        obj = service_select("user").Get_obj(

            {"username": body["username"]}, {"like": False}

        )

        if not obj:

            return {

                "error": {

                    "code": 70000,

                    "message": "用户名不存在或者错误"

                }

            }

        password = md5hash(body["password"])

        if not password:

            return {

                "error": {

                    "code": 70000,

                    "message": "密码不存在或者错误"

                }

            }

        bl = service_select("user").Set({"user_id": obj["user_id"]}, {"password": password})

        if bl:

            ret = {"result": {"bl": True, "message": "修改成功"}}

        else:

            ret = {

                "error": {

                    "code": 70000,

                    "message": "修改失败",

                }

            }

        return ctx.response(json.dumps(ret, ensure_ascii=False))

修改密码代码如下:

 def Change_password(self, ctx):

        print("===================修改密码=====================")

        ret = {

            "error": {

                "code": 70000,

                "message": "账号未登录",

            }

        }

        request = ctx.request

        headers = request.headers

        if ("x-auth-token" in headers) and headers["x-auth-token"]:

            token = headers["x-auth-token"]

            user_id = tokenGetUserId(token, request)

            userService = service_select("user")

            body = ctx.body

            password = md5hash(body["o_password"])

            obj = userService.Get_obj({"user_id": user_id, "password": password}, {"like": False})

            if obj:

                password = md5hash(body["password"])

                bl = userService.Set({"user_id": user_id}, {"password": password})

                if bl:

                    ret = {"result": {"bl": True, "message": "修改成功"}}

                else:

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "修改失败",

                        }

                    }

            else:

                ret = {

                    "error": {

                        "code": 70000,

                        "message": "密码错误",

                    }

                }

        else:

            ret = {

                "error": {

                    "code": 70000,

                    "message": "账户未登录",

                }

            }

        return ctx.response(json.dumps(ret, ensure_ascii=False))

增删查改代码如下:

def Add(self, ctx):

body = ctx.body

unique = self.config.get("unique")

obj = None

if unique:

qy = {}

for i in range(len(unique)):

key = unique[i]

qy[key] = body.get(key)

obj = self.service.Get_obj(qy)

if not obj:

error = self.Add_before(ctx)

if error["code"]:

return {"error": error}

error = self.Events("add_before", ctx, None)

if error["code"]:

return {"error": error}

result = self.service.Add(body, self.config)

if self.service.error:

return {"error": self.service.error}

res = self.Add_after(ctx, result)

if res:

result = res

res = self.Events("add_after", ctx, result)

if res:

result = res

return {"result": result}

else:

return {"error": {"code": 10000, "message": "已存在"}}

def Del(self, ctx):

if len(ctx.query) == 0:

errorMsg = {"code": 30000, "message": "删除条件不能为空!"}

return errorMsg

result = self.service.Del(ctx.query, self.config)

if self.service.error:

return {"error": self.service.error}

return {"result": result}

def Set(self, ctx):

error = self.Set_before(ctx)

if error["code"]:

return {"error": error}

error = self.Events("set_before", ctx, None)

if error["code"]:

return {"error": error}

query = ctx.query

if 'page' in query.keys():

del ctx.query['page']

if 'size' in query.keys():

del ctx.query['size']

if 'orderby' in query.keys():

del ctx.query['orderby']

result = self.service.Set(ctx.query, ctx.body, self.config)

if self.service.error:

return {"error": self.service.error}

res = self.Set_after(ctx, result)

if res:

result = res

res = self.Events("set_after", ctx, result)

if res:

result = res

return {"result": result}

查多条数据:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "field" in query:

field = query.pop("field")

config_plus["field"] = field

if "page" in query:

config_plus["page"] = query.pop("page")

if "size" in query:

config_plus["size"] = query.pop("size")

if "orderby" in query:

config_plus["orderby"] = query.pop("orderby")

if "like" in query:

config_plus["like"] = query.pop("like")

if "groupby" in query:

config_plus["groupby"] = query.pop("groupby")

count = self.service.Count(query)

lst = []

if self.service.error:

return {"error": self.service.error}

elif count:

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

if self.service.error:

return {"error": self.service.error}

self.interact_list(ctx, lst)

return {"result": {"list": lst, "count": count}}

查一条数据:

def Get_obj(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "field" in query:

field = query.pop("field")

config_plus["field"] = field

obj = self.service.Get_obj(query, obj_update(self.config, config_plus))

if self.service.error:

return {"error": self.service.error}

if obj:

self.interact_obj(ctx, obj)

return {"result": {"obj": obj}}

免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值