SSM厂区宿舍管理系统--附源码24392

摘要

基于SSM(Spring + SpringMVC + MyBatis)框架的厂区宿舍管理系统旨在提高厂区宿舍管理效率,优化员工居住环境。该系统通过信息化手段实现了对宿舍公告、宿舍信息、报修管理、换宿申请、签到情况以及卫生检查等多方面的综合管理。管理员可通过系统后台高效地进行宿舍资源分配、维修任务调度和员工签到监控;员工用户则能够便捷地提交报修请求、申请更换宿舍及反馈沟通意见。此外,系统还支持维修工人对维修任务的实时更新与物资申请,确保了维修工作的及时性和有效性。通过这一系统,不仅加强了管理层与员工之间的沟通,同时也提高了整个厂区宿舍管理的透明度和效率。

系统设计采用了模块化结构,各模块间既保持相对独立又紧密联系,便于系统的维护和扩展。在技术实现上,前端采用HTML5、CSS3和JavaScript等技术构建用户界面,提供了良好的用户体验。后端基于SSM框架,充分发挥了Spring的依赖注入、SpringMVC的请求映射以及MyBatis的数据持久化功能,实现了业务逻辑层和数据访问层的有效分离。数据库方面,选用MySQL作为数据存储解决方案,确保了数据的安全性和完整性。此外,系统还引入了权限控制机制,确保不同角色用户只能访问与其权限相符的功能模块,进一步保障了系统的安全性和稳定性。整体而言,该系统为厂区宿舍管理提供了一套全面、高效且易于操作的解决方案。

关键词:宿舍管理;SSM框架;Java



Abstract

The factory dormitory management system based on SSM (Spring + SpringMVC + MyBatis) framework aims to improve the efficiency of factory dormitory management and optimize the living environment of employees. The system realizes the comprehensive management of dormitory announcement, dormitory information, repair management, application for changing accommodation, sign-in and health inspection by means of information technology. Administrators can efficiently allocate dormitory resources, schedule maintenance tasks and monitor employee check-in through the system background; Employee users can easily submit repair requests, apply for dormitory changes, and communicate feedback. In addition, the system also supports maintenance workers to update maintenance tasks and apply for materials in real time, ensuring the timeliness and effectiveness of maintenance work. Through this system, not only strengthen the communication between management and employees, but also improve the transparency and efficiency of the entire plant dormitory management.

The modular structure is adopted in the system design, and each module is relatively independent and closely connected, which is convenient for the maintenance and expansion of the system. In terms of technical implementation, the front-end uses HTML5, CSS3, JavaScript and other technologies to build the user interface, providing a good user experience. The back-end is based on SSM framework, which gives full play to the dependency injection of Spring, the request mapping of SpringMVC and the data persistence function of MyBatis, and realizes the effective separation of business logic layer and data access layer. In terms of database, MySQL is selected as a data storage solution to ensure the security and integrity of data. In addition, the system also introduces a permission control mechanism to ensure that users of different roles can only access the functional modules corresponding to their permissions, which further guarantees the security and stability of the system. Overall, the system provides a comprehensive, efficient and easy to operate solution for dormitory management in the factory.

Keywords: Dormitory management; SSM framework; Java

目录

摘要

  Abstract

1 绪论

1.1选题背景

1.2研究现状

1.3研究意义

1.4研究的主要内容

1.5论文结构与章节安排

2 系统分析

2.1 可行性分析

(1)操作可行性:

(2)技术可行性:

(3)法律可行性:

2.2 系统功能分析

2.2.1 功能性分析

2.2.2 非功能性分析

2.3 系统用例分析

2.4本章小结

3 系统总体设计

3.1 系统架构设计

3.2 系统功能模块设计

3.2.1整体功能模块设计

3.3系统流程设计

3.3.1用户登录流程

3.3.2系统操作流程

3.3.3添加信息流程

3.3.4修改信息流程

3.3.5删除信息流程

3.4 数据库设计

3.4.1 数据库概念结构设计

3.4.2 数据库逻辑结构设计

3.5本章小结

4 系统详细设计与实现

4.1员工用户功能模块

4.1.1宿舍信息管理界面

4.1.2 签到信息管理界面

4.2管理员功能模块

4.2.1系统用户界面

4.2.2 宿舍公告管理界面

4.2.3 签到信息管理界面

4.2.4 宿舍报修管理界面

4.2.3宿舍信息管理界面

4.2.4物资申请管理界面

4.2.5申请换宿舍管理界面

4.3维修工人功能模块

4.3.1报修任务管理界面

5系统测试

5.1系统测试的目的

5.2 系统测试用例

5.3 系统测试结果

结 论

参考文献

致  谢

附录

1 绪论

1.1选题背景

随着信息技术的快速发展,企业对内部管理效率的要求日益提高。在厂区宿舍管理方面,传统的手工记录和管理方式已无法满足现代化、信息化的需求。尤其是在员工数量庞大、信息更新频繁的情况下,如何高效地进行宿舍资源分配、维护维修调度及员工日常生活管理成为了一个亟待解决的问题。基于此,采用现代信息技术构建一个全面的宿舍管理系统显得尤为重要[1]。贾琴在其研究中提到,Java编程语言凭借其强大的跨平台能力和丰富的库支持[2],为开发此类系统提供了理想的技术基础。

与此同时,随着物联网技术的发展及其在各领域的广泛应用,智慧宿舍的概念逐渐被提出并应用于实际场景。智慧宿舍不仅能够实现对宿舍环境的智能监控,还能通过信息化手段优化宿舍管理流程,提升管理效率和服务质量[3]。这为基于SSM框架的企业宿舍管理系统的设计与实现提供了新的思路和技术支持。利用SSM框架的特性,可以有效地整合前端展示、后端业务逻辑处理以及数据库操作,从而构建出一个功能齐全、易于扩展的宿舍管理系统[4]。

1.2研究现状

目前,宿舍管理系统的研究与应用已经取得了一定的进展。涂华燕探讨了基于MySQL的宿舍管理系统数据库设计[5],强调了合理数据结构和安全性对系统运行的重要性。陈湘瑾等人深入分析了基于数据库和Java语言的宿舍管理系统,提出了多种有效的解决方案以应对宿舍管理中的常见问题[6]。这些研究表明,通过科学合理的数据库设计和灵活的程序开发,可以有效提升宿舍管理系统的实用性和用户体验。此外,周凌翱和卞茹萍在其研究中提到,企业员工宿舍的设计不仅需要考虑物理空间的布局优化,还需结合信息化手段实现宿舍资源的有效管理和分配,为现代企业管理提供了新的思路[7]。

在智慧宿舍管理系统方面,盛培雷等讨论了基于物联网技术的智慧宿舍管理系统,展示了如何通过物联网技术实现宿舍环境的智能化监控和控制[8]。纪程诚等人关于宿舍考勤管理系统的设计与实现,则提供了一种简化考勤流程、提高管理效率的新方法[9]。这些研究不仅拓宽了宿舍管理系统的应用场景,也为本课题的研究提供了宝贵的参考经验。与此同时,张浩详细阐述了SSM框架在Web应用开发中的优势,并指出了其在提高开发效率和系统可维护性方面的显著作用。吴丹林和李梦雅提出的B/S模式宿舍管理系统,实现了宿舍管理的网络化,进一步提升了用户的使用便利性。上述研究成果共同表明,基于SSM框架开发的宿舍管理系统具有广阔的应用前景和发展潜力,并为现代化宿舍管理提供了强有力的技术支持。

1.3研究意义

  基于SSM框架的厂区宿舍管理系统的研究与实现,旨在通过信息化手段解决传统宿舍管理中存在的诸多问题,如信息更新滞后、资源分配不合理及管理效率低下等。该系统将提供一个集成化的平台,使管理员能够高效地进行宿舍资源分配、维修任务调度以及员工考勤监控等工作。同时,员工也能够便捷地提交报修请求、申请更换宿舍和反馈意见,这不仅极大地提升了宿舍管理的整体效率,还改善了员工的生活质量。此外,系统的自动化处理功能减少了人工干预的需求,降低了人为错误的发生概率,有助于建立更加透明和公平的管理制度。

从长远来看,这一研究对于推动企业管理模式的创新和升级具有重要意义。智慧宿舍管理系统不仅仅是一个技术工具,更是企业文化和价值观的具体体现。通过优化宿舍管理流程,可以增强员工对企业的认同感和归属感,促进企业文化建设。同时,系统具备良好的扩展性和兼容性,便于未来与其他管理系统(如人力资源管理系统、财务管理系统等)进行集成,为构建全面的企业信息化管理体系奠定基础。这种全方位的信息整合不仅能进一步提升企业的管理效能,还能为企业决策提供强有力的数据支持,助力企业在激烈的市场竞争中保持领先地位。

1.4研究的主要内容

本研究主要内容之一是针对不同用户角色设计并实现定制化的功能模块,首先是管理员角色。管理员作为系统的核心管理者,拥有最高权限,能够对系统的各个方面进行操作和管理。这包括但不限于宿舍公告的发布与管理、宿舍信息的维护更新、员工签到情况的监控以及卫生检查记录的查看等。此外,管理员还可以处理员工的报修请求、换宿申请,并能实时跟踪维修工人的任务进度。通过为管理员提供一个全面而细致的管理平台,可以极大地提升宿舍管理的效率和透明度,确保所有操作都有条不紊地进行。

对于员工用户和维修工人角色,系统同样提供了针对性的功能支持。员工用户可以通过系统方便地查看宿舍公告、提交报修请求、申请更换宿舍,并能随时了解自己报修请求或换宿申请的处理进度。同时,员工还可以进行日常签到操作,反馈宿舍生活中的问题或建议,增强了与管理部门之间的沟通交流。而对于维修工人来说,系统不仅允许他们查看分配给自己的维修任务列表,还提供了填写维修记录、反馈物资需求以及与其他部门沟通的渠道。这些功能的设计旨在简化工作流程,提高工作效率,同时也确保了维修工作的及时性和有效性。通过满足不同角色的具体需求,整个系统形成了一个高效运转、互动良好的管理体系。

1.5论文结构与章节安排

论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对系统需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:

第一章:引言。第一章主要介绍了课题研究的背景,研究现状、研究意义和系统开发的现状和本文的研究内容与主要工作。

第二章:系统需求分析。第二章主要从系统的用户、功能等方面进行需求分析。

第三章:系统设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。

第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。

第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试

第六章:总结。

2 系统分析

系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。

2.1 可行性分析

1)操作可行性:

此次项目设计参考了几个该模式下网站的开发案例,对他们的操作界面分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。

因此操作可行性也没有问题。

(2)技术可行性:

技术可行性指的是对于搭建框架的可行性,以及有更优秀的技术出现时系统的技术更新换代的纳新性如何,开发时间成本费用比如何。

现有的Java技术能够迎合所有电子商务系统的搭建。开发这个厂区宿舍管理系统的时候我采用了Java+MYSQL用以运行整体程序。

综上所述技术可行性也没有问题。

(3)法律可行性:

从开发者角度来看,Java和MYSQL是网上开源且免费的,在知识产权方面不会产生任何法律纠纷。

从用户使用角度来看,只要不再系统上贩卖违禁品,对系统做出条约协议,杜绝非法支付即可。

综上所述法律可行性也没有问题。

2.2 系统功能分析

2.2.1 功能性分析

按照厂区宿舍管理系统的角色,划分为了管理员、员工用户和维修工人三大模块:

1.员工用户:

(1)登录:员工用户的账号是有管理员在后台添加的,可直接使用账号秘密进行登录。

(2)宿舍公告管理:员工用户点击可查看宿管公告列表。

(3)宿舍信息管理:员工用户点击可查看宿舍信息列表,可点击查看宿舍信息详情,可点击“报修”、“申请换宿”按钮添加报修信息和申请换宿信息。报修信息包括上报时间、报修标题、维修内容和报修图片。

(4)宿舍报修管理:员工用户点击可查看宿舍报修列表。

(5)维修记录管理:员工用户点击可查看维修记录列表。

(6)沟通反馈管理:员工用户点击可查看沟通反馈列表。

(7)申请换宿管理:员工用户点击可查看申请换宿列表。

(8)签到信息管理:员工用户点击查看签到信息列表,同时可点击“签到”按钮添加签到信息,包括员工签到日期、当前位置、是否签到和未到原因。

(9)员工签到管理:员工用户点击可查看员工签到列表。

(10)卫生检查管理:员工用户点击可查看卫生检查列表。

2.管理员

(1)登录:管理员账号密码由系统生成,可使用账号密码可进行登录系统后台,使用系统功能进行管理,并可对自己的个人信息和密码进行管控。

(2)系统用户:管理员点击可查看管理员、员工用户和维修工人。管理员点击进入“员工用户”可添加员工用户信息,同时可添加员工宿舍信息。

(3)宿舍公告管理:管理员点击可查看宿舍公告列表和宿舍公告添加;点击进入“宿舍公告添加”可填写相关信息,包括公告标题、发布日期、公告类型、发布宿管、公告内容和相关附件。

(4)宿舍信息管理:管理员点击可查看宿舍信息列表,同时可在此页面添加卫生检查信息,包括检查日期、检查评价、卫生情况、整改方案和检查照片。

(5)宿舍报修管理:管理员点击可查看宿舍报修列表,可点击查看详情,同时可点击“报修任务”添加任务信息,包括维修用户、任务标题、紧急程度、预计时间和任务内容。

(6)报修任务管理:管理员点击可查看报修任务列表。

(7)维修记录管理:管理员点击可查看维修记录列表。

(8)沟通反馈管理:管理员点击可查看沟通反馈列表,同时可对沟通反馈进行审核回复。

(9)物资申请管理:管理员点击可查看物资申请列表,同时可对物资申请进行审核回复。

(10)申请换宿管理:管理员点击可查看申请换宿列表,同时可对申请换宿进行审核回复。

(11)签到信息管理:管理员点击可查看签到信息列表和签到信息添加;点击进入“签到信息添加”可填写相关信息,包括签到标题、签到地点、签到时间、签到信息、签到要求和签到限次。

(12)员工签到管理:管理员点击可查看员工签到列表。

(13)卫生检查管理:管理员点击可查看卫生检查列表。

3.维修工人

(1)登录:维修工人的账号是有管理员在后台添加的,可直接使用账号秘密进行登录。

(2)宿舍公告管理:维修工人点击可查看宿管公告列表。

(3)报修任务列表:维修任务点击可查看报修任务列表,维修工人可在此页面添加维修记录信息、沟通反馈信息和物资申请信息。维修记录包括维修时间、维修结果、维修记录和详细信息。填写完维修记录后,页面会出现“物资申请”按钮,可点击填写物资申请信息。最后点击“沟通反馈”按钮添加沟通信息。

(4)维修记录管理:维修工人点击可查看维修记录列表。

(5)沟通反馈管理:维修工人点击可查看沟通反馈列表。

(6)物资申请管理:维修工人点击可查看物资申请列表。

2.2.2 非功能性分析

厂区宿舍管理系统的非功能性需求比如厂区宿舍管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下2-1表格中:

2-1厂区宿舍管理系统非功能需求表

安全性

主要指厂区宿舍管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。

可靠性

可靠性是指厂区宿舍管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。

性能

性能是影响厂区宿舍管理系统占据市场的必要条件,所以性能最好要佳才好。

可扩展性

比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。

易用性

用户只要跟着厂区宿舍管理系统的页面展示内容进行操作,就可以了。

可维护性

厂区宿舍管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题

2.3 系统用例分析

通过2.2功能的分析,得出了本厂区宿舍管理系统的用例图:

员工用户角色用例如图2-2所示。

图2-2 员工用户角色用例图

维修工人角色用例如图2-3所示。

图2-3 维修工人角色用例图

后台管理上的管理员是维护整个厂区宿舍管理系统中所有数据信息的。管理员角色用例如图2-4所示。

图2-4 管理员角色用例图

2.4本章小结

本章主要通过对厂区宿舍管理系统的可行性分析、功能需求分析、系统用例分析,确定整个厂区宿舍管理系统要实现的功能。同时也为厂区宿舍管理系统的代码实现和测试提供了标准。

3 系统总体设计

本章主要讨论的内容包括厂区宿舍管理系统的功能模块设计、数据库系统设计。

3.1 系统架构设计

本厂区宿舍管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。

图3-1厂区宿舍管理系统系统架构设计图

表现层(UI):又称UI层,主要完成本厂区宿舍管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本厂区宿舍管理系统时的舒适度。UI的界面设计也要适应不同版本的厂区宿舍管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。

业务逻辑层(BLL):主要完成本厂区宿舍管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。

数据层(DL):由于本厂区宿舍管理系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本厂区宿舍管理系统的数据存储和管理功能。

3.2 系统功能模块设计

3.2.1整体功能模块设计

在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本厂区宿舍管理系统中的用例。那么接下来就要开始对本厂区宿舍管理系统的架构、主要功能和数据库开始进行设计。厂区宿舍管理系统根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。

图3-2 厂区宿舍管理系统功能模块图

3.3系统流程设计

系统开发流程的主要步骤,从需求分析到系统完成的全过程。流程包括需求分析、总体设计(结构、功能、数据)、详细设计(模块、编码)、模块整合与调用,以及测试、扩展和完善,最终完成系统的开发。本系统的开发流程如图3-3所示

图3-3系统开发流程图

3.3.1用户登录流程

用户输入用户名和密码后,系统先检查输入是否为空,再验证用户名是否存在,若存在则通过用户名获取密码并校验。若密码正确则登录成功,否则提示密码错误。若用户名不存在或无法登录,提示用户操作无效。如图3-4所示。

图3-4登录流程图

3.3.2系统操作流程

用户首先进入系统登录界面,输入用户名和密码后,系统验证信息是否正确。若验证失败,返回登录界面重新输入;若验证成功,则进入功能界面,执行相应功能处理后结束操作流程。操作流程如图3-5所示。

图3-5系统操作流程图

3.3.3添加信息流程

管理员可以添加信息,用户添加可以自己权限内的信息,输入信息后,要想利用这个软件来进行系统的安全管理,首先需要登录到该软件中。添加信息流程如图3-6所示。

图3-6添加信息流程图

3.3.4修改信息流程

用户首先选择需要修改的记录,输入修改后的数据,系统判断输入数据是否合法。若数据不合法,提示重新输入;若数据合法,则将修改后的数据写入数据库,完成操作后流程结束。修改信息流程图如图3-7所示。

图3-7 修改信息流程图

3.3.5删除信息流程

用户选择需要删除的记录后,系统判断是否确认删除。若未确认,返回选择环节;若确认删除,则更新数据库,删除对应记录,完成操作后流程结束。删除信息流程图如图3-8所示。

图3-8删除信息流程图

3.4 数据库设计

数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。

3.4.1 数据库概念结构设计

下面根据厂区宿舍管理系统的数据库可以得出厂区宿舍管理系统需要很多E-R图,下面是系统的整体的数据库E-R模型图。

图3-9 厂区宿舍管理系统ER图

3.4.2 数据库逻辑结构设计

通过上一小节中厂区宿舍管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。

3-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

用户编号

表 3-2-apply_for_a_change_of_accommodation(申请换宿)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

apply_for_a_change_of_accommodation_id

int

申请换宿ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

employee_gender

varchar

64

员工性别

5

name_of_dormitory

varchar

64

宿舍名称

6

dormitory_floor

varchar

64

宿舍楼层

7

dormitory_room_no

varchar

64

宿舍室号

8

check_in_date

date

入住日期

9

application_date

date

申请日期

10

shen_change_hostel_name

varchar

64

申换宿名

11

change_floor

varchar

64

申换楼层

12

shen_changsu_no

varchar

64

申换宿号

13

reason_for_change

text

65535

申换原因

14

examine_state

varchar

16

审核状态

15

examine_reply

varchar

255

审核回复

16

create_time

datetime

创建时间

17

update_time

timestamp

更新时间

18

source_table

varchar

255

来源表

19

source_id

int

来源ID

20

source_user_id

int

来源用户

表 3-3-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

更新时间

表 3-3-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

更新时间

表 3-5-communicate_feedback(沟通反馈)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

communicate_feedback_id

int

沟通反馈ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

reporting_time

datetime

上报时间

8

repair_title

varchar

64

报修标题

9

maintenance_user

int

维修用户

10

communication_title

varchar

64

沟通标题

11

type_of_communication

varchar

64

沟通类型

12

communication_content

text

65535

沟通内容

13

examine_state

varchar

16

审核状态

14

examine_reply

varchar

255

审核回复

15

create_time

datetime

创建时间

16

update_time

timestamp

更新时间

17

source_table

varchar

255

来源表

18

source_id

int

来源ID

19

source_user_id

int

来源用户

表 3-6-dormitory_announcement(宿舍公告)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

dormitory_announcement_id

int

宿舍公告ID

2

announcement_title

varchar

64

公告标题

3

release_date

date

发布日期

4

announcement_type

varchar

64

公告类型

5

release_cebu

varchar

64

发布宿管

6

announcement_content

text

65535

公告内容

7

related_attachments

varchar

255

相关附件

8

create_time

datetime

创建时间

9

update_time

timestamp

更新时间

表 3-7-dormitory_information(宿舍信息)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

dormitory_information_id

int

宿舍信息ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

check_in_date

date

入住日期

8

occupancy

text

65535

入住情况

9

dormitory_information

text

65535

宿舍信息

10

dormitory_repair_limit_times

int

报修限制次数

11

apply_for_a_change_of_accommodation_limit_times

int

申请换宿限制次数

12

hygiene_inspection_limit_times

int

卫生检查限制次数

13

create_time

datetime

创建时间

14

update_time

timestamp

更新时间

15

source_table

varchar

255

来源表

16

source_id

int

来源ID

17

source_user_id

int

来源用户

表 3-8-dormitory_repair(宿舍报修)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

dormitory_repair_id

int

宿舍报修ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

reporting_time

datetime

上报时间

8

repair_title

varchar

64

报修标题

9

maintenance_content

text

65535

维修内容

10

repair_picture

text

65535

报修图片

11

repair_task_limit_times

int

报修任务限制次数

12

create_time

datetime

创建时间

13

update_time

timestamp

更新时间

14

source_table

varchar

255

来源表

15

source_id

int

来源ID

16

source_user_id

int

来源用户

表 3-9-employee_sign_in(员工签到)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

employee_sign_in_id

int

员工签到ID

2

sign_in_title

varchar

64

签到标题

3

sign_in_location

varchar

64

签到地点

4

check_in_time

varchar

64

签到时间

5

employee_user

int

员工用户

6

employee_name

varchar

64

员工姓名

7

employee_sign_in

datetime

员工签到

8

current_location

varchar

64

当前位置

9

check_in

varchar

64

是否签到

10

not_to_the_reason

text

65535

未到原因

11

create_time

datetime

创建时间

12

update_time

timestamp

更新时间

13

source_table

varchar

255

来源表

14

source_id

int

来源ID

15

source_user_id

int

来源用户

表 3-10-employee_user(员工用户)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

employee_user_id

int

员工用户ID

2

employee_no

varchar

64

员工工号

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

employee_gender

varchar

64

员工性别

8

whether_the_host

varchar

64

是否宿长

9

employees_birthday

varchar

64

员工生日

10

examine_state

varchar

16

审核状态

11

dormitory_information_limit_times

int

宿舍信息限制次数

12

user_id

int

用户ID

13

create_time

datetime

创建时间

14

update_time

timestamp

更新时间

表 3-11-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

表 3-12-hygiene_inspection(卫生检查)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

hygiene_inspection_id

int

卫生检查ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

date_of_inspection

date

检查日期

8

inspection_and_evaluation

varchar

64

检查评价

9

health_situation

text

65535

卫生情况

10

rectification_scheme

text

65535

整改方案

11

check_photos

text

65535

检查照片

12

create_time

datetime

创建时间

13

update_time

timestamp

更新时间

14

source_table

varchar

255

来源表

15

source_id

int

来源ID

16

source_user_id

int

来源用户

表 3-13-maintenance_records(维修记录)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

maintenance_records_id

int

维修记录ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

reporting_time

datetime

上报时间

8

repair_title

varchar

64

报修标题

9

maintenance_user

int

维修用户

10

task_title

varchar

64

任务标题

11

degree_of_urgency

varchar

64

紧急程度

12

maintenance_time

datetime

维修时间

13

repair_results

varchar

64

维修结果

14

maintenance_records

text

65535

维修记录

15

details

text

65535

详细信息

16

material_application_limit_times

int

物资申请限制次数

17

create_time

datetime

创建时间

18

update_time

timestamp

更新时间

19

source_table

varchar

255

来源表

20

source_id

int

来源ID

21

source_user_id

int

来源用户

表 3-13-maintenance_worker(维修工人)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

maintenance_worker_id

int

维修工人ID

2

maintenance_worker_number

varchar

64

维修工号

3

repair_name

varchar

64

维修姓名

4

examine_state

varchar

16

审核状态

5

user_id

int

用户ID

6

create_time

datetime

创建时间

7

update_time

timestamp

更新时间

表 3-15-material_application(物资申请)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

material_application_id

int

物资申请ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

reporting_time

datetime

上报时间

8

repair_title

varchar

64

报修标题

9

maintenance_user

int

维修用户

10

task_title

varchar

64

任务标题

11

required_items

varchar

64

所需物品

12

item_quantity

double

物品数量

13

item_use

text

65535

物品用途

14

examine_state

varchar

16

审核状态

15

examine_reply

varchar

255

审核回复

16

create_time

datetime

创建时间

17

update_time

timestamp

更新时间

18

source_table

varchar

255

来源表

19

source_id

int

来源ID

20

source_user_id

int

来源用户

表 3-16-repair_task(报修任务)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

repair_task_id

int

报修任务ID

2

employee_user

int

员工用户

3

employee_name

varchar

64

员工姓名

4

name_of_dormitory

varchar

64

宿舍名称

5

dormitory_floor

varchar

64

宿舍楼层

6

dormitory_room_no

varchar

64

宿舍室号

7

reporting_time

datetime

上报时间

8

repair_title

varchar

64

报修标题

9

maintenance_content

text

65535

维修内容

10

maintenance_user

int

维修用户

11

task_title

varchar

64

任务标题

12

degree_of_urgency

varchar

64

紧急程度

13

estimated_time

datetime

预计时间

14

task_content

text

65535

任务内容

15

maintenance_records_limit_times

int

维修记录限制次数

16

communicate_feedback_limit_times

int

沟通反馈限制次数

17

create_time

datetime

创建时间

18

update_time

timestamp

更新时间

19

source_table

varchar

255

来源表

20

source_id

int

来源ID

21

source_user_id

int

来源用户

表 3-17-sign_in_information(签到信息)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

sign_in_information_id

int

签到信息ID

2

sign_in_title

varchar

64

签到标题

3

sign_in_location

varchar

64

签到地点

4

check_in_time

varchar

64

签到时间

5

sign_in_information

text

65535

签到信息

6

sign_in_requirements

text

65535

签到要求

7

employee_sign_in_limit_times

int

签到限制次数

8

create_time

datetime

创建时间

9

update_time

timestamp

更新时间

表 3-18-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

文件类型

表 3-19-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

创建时间

表 3-20-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

更新时间

3.5本章小结

整个厂区宿舍管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。

4 系统详细设计与实现

厂区宿舍管理系统的详细设计与实现主要是根据前面的厂区宿舍管理系统的需求分析和厂区宿舍管理系统的总体设计来设计页面并实现业务逻辑。主要从厂区宿舍管理系统界面实现、业务逻辑实现这两部分进行介绍。

4.1员工用户功能模块

4.1.1宿舍信息管理界面

宿舍信息管理:员工用户点击可查看宿舍信息列表,可点击查看宿舍信息详情,可点击“报修”、“申请换宿”按钮添加报修信息和申请换宿信息。报修信息包括上报时间、报修标题、维修内容和报修图片;换宿申请包括申请日期、申换宿舍、申换楼层、申换宿号、申换原因。界面展示如下图所示。

图4-1宿舍信息管理界面图

图4-2报修界面图

图4-3换宿申请界面图

4.1.2 签到信息管理界面

签到信息管理:员工用户点击查看签到信息列表,同时可点击“签到”按钮添加签到信息,包括员工签到日期、当前位置、是否签到和未到原因。界面图如下图所示。

图4-4签到信息管理界面图

图4-5签到信息添加界面图

4.2管理员功能模块

4.2.1系统用户界面

系统用户:管理员点击可查看管理员、员工用户和维修工人。管理员可添加员工用户和维修工人账号,同时可添加员工宿舍信息。界面如下图所示。

图4-6员工用户添加界面图

图4-7宿舍信息添加界面图

图4-8维修工人添加界面图

4.2.2 宿舍公告管理界面

宿舍公告管理:管理员点击可查看宿舍公告列表和宿舍公告添加;点击进入“宿舍公告添加”可填写相关信息,包括公告标题、发布日期、公告类型、发布宿管、公告内容和相关附件。界面如下图所示。

图4-10宿舍公告添加界面图

4.2.3 签到信息管理界面

签到信息管理:管理员点击可查看签到信息列表和签到信息添加;点击进入“签到信息添加”可填写相关信息,包括签到标题、签到地点、签到时间、签到信息、签到要求和签到限次。界面如下图所示。

图4-11签到信息添加界面图

4.2.4 宿舍报修管理界面

宿舍报修管理:管理员点击可查看宿舍报修列表,可点击查看详情,同时可点击“报修任务”添加任务信息,包括维修用户、任务标题、紧急程度、预计时间和任务内容。界面如下图所示。

图4-13维修任务添加界面图

4.2.3宿舍信息管理界面

宿舍信息管理:管理员点击可查看宿舍信息列表,同时可在此页面添加卫生检查信息,包括检查日期、检查评价、卫生情况、整改方案和检查照片。界面如下图所示。

图4-14宿舍信息管理界面图

图4-15卫生检查添加界面图

4.2.4物资申请管理界面

物资申请管理:管理员点击可查看物资申请列表,同时可对物资申请进行审核回复。界面如下图所示。

图4-16物资申请管理界面图

4.2.5申请换宿舍管理界面

申请换宿管理:管理员点击可查看申请换宿列表,同时可对申请换宿进行审核回复。界面如下图所示。

图4-17申请换宿管理界面图

4.3维修工人功能模块

4.3.1报修任务管理界面

报修任务列表:维修任务点击可查看报修任务列表,维修工人可在此页面添加维修记录信息、沟通反馈信息和物资申请信息。维修记录包括维修时间、维修结果、维修记录和详细信息。填写完维修记录后,页面会出现“物资申请”按钮,可点击填写物资申请信息。最后点击“沟通反馈”按钮添加沟通信息。界面如下图所示。

图4-18报修任务管理界面图

图4-19维修记录添加界面图

图4-20物资申请添加界面图

图4-21沟通反馈添加界面图

5系统测试

5.1系统测试的目的

系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。

5.2 系统测试用例

系统测试包括:用户登录功能测试、宿舍信息查看功能测试、宿舍信息添加、宿舍信息搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:

用户登录功能测试:

表5-1 用户登录功能测试表

用例名称

用户登录系统

目的

测试用户通过正确的用户名和密码可否登录功能

前提

未登录的情况下

测试流程

1) 进入登录页面

2) 输入正确的用户名和密码

预期结果

用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入

实际结果

实际结果与预期结果一致

宿舍信息查看功能测试:

表5-2 宿舍信息查看功能测试表

用例名称

宿舍信息查看

目的

测试宿舍信息查看功能

前提

用户登录

测试流程

点击宿舍信息

预期结果

可以查看到所有宿舍信息信息

实际结果

实际结果与预期结果一致

添加宿舍信息界面测试:

表5-3 添加宿舍信息界面测试表

用例名称

宿舍信息测试用例

目的

测试宿舍信息添加功能

前提

管理员正常登录情况下

测试流程

1)管理员点击“系统用户”,然后添加员工宿舍相关信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的宿舍信息 

实际结果

实际结果与预期结果一致

宿舍信息搜索功能测试:

表5-4宿舍信息搜索功能测试表

用例名称

宿舍信息搜索测试

目的

测试宿舍信息搜索功能

前提

测试流程

1)在搜索框填入搜索关键字。

2)点击搜索按钮。

预期结果

页面显示包含有搜索关键字的宿舍信息

实际结果

实际结果与预期结果一致

密码修改功能测试:

表5-5 密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

5.3 系统测试结果

通过编写厂区宿舍管理系统的测试用例,已经检测完毕用户登录模块、宿舍信息查看、添加和搜索模块、密码修改功能测试,通过这5大模块为厂区宿舍管理系统的后期推广运营提供了强力的技术支撑。

 论

本研究成功设计并实现了一个基于SSM框架的厂区宿舍管理系统,通过系统化的解决方案显著提升了宿舍管理的效率和智能化水平。该系统不仅实现了对宿舍公告、宿舍信息、报修与维修任务、换宿申请、签到情况以及卫生检查等多个方面的综合管理,还根据管理员、员工用户及维修工人等不同角色的需求,提供了定制化的功能模块。在实际应用中,管理员能够更加高效地进行资源分配和任务调度;员工用户的日常生活需求得到了快速响应;维修工人也能及时获取任务信息并反馈工作进展,整个管理体系运行顺畅,达到了预期目标。

从技术角度总结,采用SSM框架进行开发为系统的稳定性、扩展性和维护性奠定了坚实的基础。Spring的依赖注入和面向切面编程特性简化了业务逻辑层的设计,SpringMVC有效处理了前端请求映射,而MyBatis则实现了灵活的数据持久化操作。此外,系统结合MySQL数据库,确保了数据的安全性和完整性。这些技术选择共同保障了系统的高性能表现。然而,任何系统都存在改进空间,未来的工作可以着眼于进一步优化用户体验、增强系统的智能化程度,以及探索与其他企业管理系统(如HR系统)的深度融合,以满足不断变化的企业管理需求。通过持续的技术创新和功能完善,基于SSM的厂区宿舍管理系统有望为企业提供更为全面、高效的管理支持。

参考文献

  1. 陈斐,吴林韩,张朝阳,等.智慧宿舍管理系统设计与实现[J].信息技术与信息化,2023,(12):142-147.
  2. 贾琴.Java编程语言的应用策略分析[J].集成电路应用,2024,41(10):84-85.DOI:10.19339/j.issn.1674-2583.2024.10.034.
  3. 吴丹林,李梦雅.B/S模式宿舍管理系统设计与实现[J].电脑编程技巧与维护,2021,(01):98-99+105.DOI:10.16184/j.cnki.comprg.2021.01.034.
  4. 张浩.SSM框架在Web应用开发中的设计与实现研究[J].电脑知识与技术,2023,19(08):52-54.DOI:10.14004/j.cnki.ckt.2023.0353.
  5. 涂华燕.基于MySQL宿舍管理系统数据库设计[J].电脑编程技巧与维护,2021,(12):104-106.DOI:10.16184/j.cnki.comprg.2021.12.038.
  6. 陈湘瑾,于孔亮,祖子帅,等.基于数据库和Java的宿舍管理系统[J].科学技术创新,2021,(09):96-97.
  7. 周凌翱,卞茹萍.企业员工宿舍的设计与实现[J].电子世界,2020,(02):160-161.DOI:10.19353/j.cnki.dzsj.2020.02.083.
  8. 盛培雷,庄旭菲,孙瑞,等.基于物联网技术的智慧宿舍管理系统[J].无线互联科技,2021,18(15):56-57.
  9. 纪程诚,岳龚涛,杨永生,等.基于宿舍考勤管理系统的设计与实现[J].电子制作,2021,(19):57-60.DOI:10.16589/j.cnki.cn11-3571/tn.2021.19.018.
  10. 柯灵.Java编程语言在计算机软件开发中的应用与问题处理探析[J].电脑知识与技术,2024,20(27):45-47.DOI:10.14004/j.cnki.ckt.2024.1389.
  11. 陈玥.基于Java语言开发的宿舍管理系统[J].信息与电脑(理论版),2021,33(21):38-40.
  12. 李洋,胡茵茵,宣宏坤,等.智慧宿舍管理信息系统的设计与分析[J].无线互联科技,2021,18(20):42-44+49.
  13. 麦家裕,吴家辉,伦文康.智能宿舍安全管理系统设计[J].网络安全技术与应用,2021,(10):43-44.
  14. 李高鹏,熊作顺,颜宏伟,等.智慧宿舍管理系统[J].电子测试,2021,(20):127-128.DOI:10.16520/j.cnki.1000-8519.2021.20.050.
  15. Kewei W ,Yong F .Daily Information Management System for Postgraduates to Check In and Out of the Dormitory Based on Mobile Edge Computing[J].Mobile Information Systems,2021,2021
  16. 帅珍冕.基于嵌入式平台的智慧宿舍系统设计与实现[D].南昌大学,2021.DOI:10.27232/d.cnki.gnchu.2021.002598.
  17. 于君君,吴祥飞,甘润,等.基于物联网的宿舍管理系统[J].安徽科技学院学报,2021,35(01):51-57.DOI:10.19608/j.cnki.1673-8772.2017.0883.

 谢

至此论文结束,感谢您的阅读。在此我要特别的感谢我的导师,虽然我在实习期间很忙,论文撰写的时候经常是停停改改,但是我的导师依旧十分的负责,时不时的询问我的任务进展情况,跟进我的论文进度,在指导老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识和经验,这些知识和经验令我受益匪浅。同时我也从导师身上看到了自己的不足,不论是在技术层面上还是在对待工作的态度上,导师如同明镜一般照出了我的缺点我的不足。此外,我还要感谢在我实习期间在论文和程序上帮助过我的同学和社会人士,此前我对于SSM框架方面的一些知识还不了解,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测。没有他们我是不能顺利完成本次毕业设计的。至此,我的毕业设计就花上了一个圆满的句号了。

附录

(1)springMVC及spring配置文件在server/src/main/webapp/WEB-INF/web.xml,代码如下:

  <servlet>

    <servlet-name>SpringDispatcherServlet</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

      <param-name>contextConfigLocation</param-name>

      <!-- 引入spring配置文件 -->

      <param-value>classpath:spring/spring-*.xml</param-value>

    </init-param>

  </servlet>

  <servlet-mapping>

    <servlet-name>SpringDispatcherServlet</servlet-name>

    <url-pattern>/</url-pattern>

  </servlet-mapping>

(2)项目统一采用utf-8,避免中文乱码,代码如下:

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>UTF-8</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

(3)字符串常量定义代码在FindConfig.java文件中,代码如下:

package com.project.demo.constant;

public class FindConfig {

    public static String PAGE = "page";

    public static String SIZE = "size";

    public static String LIKE = "like";

    public static String ORDER_BY = "orderby";

    public static String FIELD = "field";

    public static String GROUP_BY = "groupby";

    public static String MIN_ = "_min";

    public static String MAX_ = "_max";

}

(4)entity实体类,使用java类去映射数据库中的数据库表,以AccessToken.java为例,里面含有数据库表名称,表中的主键字段,表中其他字段与Java属性间的映射,代码如下:

@TableName("access_token")

@Data

@EqualsAndHashCode(callSuper = false)

public class AccessToken implements Serializable {

    private static final long serialVersionUID = 913269304437207500L;

    @TableId(value = "token_id", type = IdType.AUTO)

    private Integer tokenId;

    @TableField(value = "token")

    private String token;

    @TableField(value = "maxage")

    private Integer maxage;

(5)项目方法集成在BaseController.java文件中,增的代码如下:

    @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

    }

(6)项目方法集成在BaseController.java文件中,删的代码如下:

     @RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

    }

(7)项目方法集成在BaseController.java文件中,改的代码如下:

    @PostMapping("/set")

@Transactional

    public Map<String, Object> set(HttpServletRequest request) throws IOException {

        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));

        return success(1);

}

(8)项目方法集成在BaseController.java文件中,查询一条数据的代码如下:

    @RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

(9)项目方法集成在BaseController.java文件中,查询列表数据的代码如下:

    @RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

    }

(10)项目方法集成在BaseController.java文件中,上传文件的方法代码如下:

    @PostMapping("/upload")

    public Map<String, Object> upload(@RequestParam(value = "file",required=false) MultipartFile file,HttpServletRequest request) {

        log.info("进入方法");

        if (file.isEmpty()) {

            return error(30000, "没有选择文件");

        }

        try {

            //判断有没路径,没有则创建

            String filePath = request.getSession().getServletContext().getRealPath("\\") +"upload\\";

            File targetDir = new File(filePath);

            if (!targetDir.exists() && !targetDir.isDirectory()) {

                if (targetDir.mkdirs()) {

                    log.info("创建目录成功");

                } else {

                    log.error("创建目录失败");

                }

            }

            String fileName = file.getOriginalFilename();

            int lastIndexOf = fileName.lastIndexOf(".");

            String suffix = fileName.substring(lastIndexOf);

            fileName = IdWorker.getId()+suffix;

            File dest = new File(filePath + fileName);

            log.info("文件路径:{}", dest.getPath());

            log.info("文件名:{}", dest.getName());

            file.transferTo(dest);

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("url", "/api/upload/" + fileName);

            return success(jsonObject);

        } catch (IOException e) {

            log.info("上传失败:{}", e.getMessage());

        }

        return error(30000, "上传失败");

}

(11)项目方法集成在BaseController.java文件中,格式化的方法代码如下:

    public Map<String, Object> success(Object o) {

        Map<String, Object> map = new HashMap<>();

        if (o == null) {

            map.put("result", null);

            return map;

        }

        if (o instanceof List) {

            if (((List) o).size() == 1) {

               o =  ((List) o).get(0);

                map.put("result", o);

            }else {

                String jsonString = JSONObject.toJSONString(o);

                JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));

                map.put("result", objects);

            }

        } else if (o instanceof Integer || o instanceof String) {

            map.put("result", o);

        } else {

            String jsonString = JSONObject.toJSONString(o);

            JSONObject jsonObject = JSONObject.parseObject(jsonString);

            JSONObject j = service.covertObject(jsonObject);

            map.put("result", j);

        }

        return map;

}

(12)项目方法集成在BaseController.java文件中,错误处理的方法代码如下:

    public Map<String, Object> error(Integer code, String message) {

        Map<String, Object> map = new HashMap<>();

        map.put("error", new HashMap<String, Object>(4) {{

            put("code", code);

            put("message", message);

        }});

        return map;

}

(13)在登陆方法钟,有一个map类型的参数,用于存储从浏览器中发送过来的数据,方法的返回值也是一个map类型,键值对结构,非空校验通过后会调用service层的一个select方法,该方法主要是格式化生成一个sql查询语句,生成的sql语句会作为参数传给,servece层的另外一个方法,该方法会直接调用dao层的方法操作数据库,而之前生成的sql语句也会作为参数传送过去,登陆使用了MD5加密,登陆成功后,会给登陆成功的用户发送登陆令牌,登陆令牌为实体类,映射到数据库中的AccessToken表,该实体类含有令牌ID,使用UUID工具,创建不重复的字符串作为ID,然后会将用户的信息同样作为属性,加入到令牌对象中,之后执行service的save方法,与用户登陆时查询用户原理一致,会将令牌信息存入到数据库中,之后采用json格式封装返回给浏览器的数据,返回的数据封装好时,调用success方法,格式化返回的数据,以特定的格式返回给浏览器,浏览器写通用的代码,对返回的数据进行验证和处理,登陆代码如下:

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        QueryWrapper wrapper = new QueryWrapper<User>();

        Map<String, String> map = new HashMap<>();

(14)项目dao层都声明为interface接口,具体的操作在XML中体现,XML使用namespace后面填上interface的权限命名,实现当前XML与我们的interface之间的绑定,并调用select方法,通过占位符表达式,将参数原封不动的绑定到方法中,mybatis调用此方法时,就会将sql语句,发送给数据库执行,执行后会将结果传给mybatis框架,mybatis框架会根据我们定义的返回结果类型,对数据进行封装,封装成我们的Java对象,代码如下:

<mapper namespace="com.project.demo.dao.base.BaseMapper">

    <select id="selectBaseList" resultType="java.util.LinkedHashMap">

        ${select}

    </select>

    <select id="selectBaseCount" resultType="Integer">

        ${count}

    </select>

    <select id="selectBaseOne" resultType="Object">

        ${select}

    </select>

    <update id="updateBaseSql">

        ${sql}

    </update>

    <delete id="deleteBaseSql">

        ${sql}

    </delete>

</mapper>

(15)Java对象返回后,会到我们的service层,service拿到数据后会执行一系列操作,这里面时将其中的数据用一个工具类转换成this对象,返回集合结果,代码如下:

    public List selectBaseList(String select) {

        List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

            list.add(JSON.parseObject(JSON.toJSONString(map),eClass));

        }

        return list;

}

(16)MD5加密的实现方法,使用了jdk中的工具,生成的为字节数组,经过一系列操作,会转换为MD5加密密码,代码如下:

    public String encryption(String plainText) {

        String re_md5 = new String();

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

            md.update(plainText.getBytes());

            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");

            for (int offset = 0; offset < b.length; offset++) {

                i = b[offset];

                if (i < 0)

                    i += 256;

                if (i < 16)

                    buf.append("0");

                buf.append(Integer.toHexString(i));

            }

            re_md5 = buf.toString();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return re_md5;

}

(17)登陆拦截管理器,在interceptor文件夹下的LoginInterceptor.java文件,拦截器会首先对用户登陆注册的接口放行,之后会对用户登陆的身份令牌进行校验,如果没有身份令牌,为“未登录用户”,无身份令牌的游客依然允许访问,固对请求做了限制,post请求要求必须要有身份令牌,所以在post请求没有身份令牌的情况下,会禁止用户登陆,并禁止用户访问相关的接口,拦截器中,做了跨域处理,代码如下:

@Slf4j

public class LoginInterceptor implements HandlerInterceptor {

    private String tokenName = "x-auth-token";

    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String token = request.getHeader(this.tokenName);

        setHeader(request, response);

        log.info("[请求接口] - {} , [请求类型] - {}",request.getRequestURL().toString(),request.getMethod());

private void setHeader(HttpServletRequest request, HttpServletResponse response) {

        response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));

        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");

        response.setHeader("Access-Control-Allow-Credentials", "true");

        response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));

        response.setHeader("Access-Control-Max-Age", "1800");

        response.setHeader("Content-Type", "application/json;charset=UTF-8");

        response.setStatus(HttpStatus.OK.value());

}

(18)注册方法执行过程中,会调用service下的readBody方法,并将我们的request对象传递进去,将传递过去的数据转换成map形式,并且访问了controller,之后可以在map对象中拿到相应的用户数据,首先判断用户名是否已存在,是否已被其他人注册,保证用户名的唯一性,此处将输入的用户名进行查询数据库,获取一个集合,若该集合非空,则证明该用户名已经被注册,返回一条错误信息“用户已存在”,若用户名可用,先将用户传入进来的密码加密,加密后将用户的信息发给service相应的方法,service层调用dao层相应的方法,将用户注册的信息,存储到数据库中,代码如下:

    @PostMapping("register")

    public Map<String, Object> signUp(HttpServletRequest request) throws IOException {

        Map<String, String> query = new HashMap<>();

        Map<String,Object> map = service.readBody(request.getReader());

        query.put("username",String.valueOf(map.get("username")));

        List list = service.selectBaseList(service.select(query, new HashMap<>()));

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        map.put("password",service.encryption(String.valueOf(map.get("password"))));

        service.insert(map);

        return success(1);

}

(19)用户的权限,存储在实体类entity下的UserGroup.java中,数据库表中,该表格存储的是用户的相应权限,每一个user用户表下的每一条数据,代表一个用户,里面都有一个UserGroup字段,来判断当前所具有的身份和权限,浏览器通过访问UserGroupController.java相应的方法,获取当前用户具有的权限,根据相应的权限定制该用户菜单显示,代码如下:

@TableName("user_group")

@Data

@EqualsAndHashCode(callSuper = false)

public class UserGroup implements Serializable {

private static final long serialVersionUID = 968356951391304707L;

}

(20)Mybatis框架,是对数据库进行操作的框架,存在一个独立的配置文件mybatis-config.xml,配置使用一些特定的操作,对Java对象中的数据库进行映射配置,项目使用的是mybatis-plus框架,该框架是对mybatis框架的又一层封装,框架提供一些基础的功能,如插入数据到数据库中的insert方法,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <settings>

        <setting name="lazyLoadingEnabled" value="true" />

        <setting name="aggressiveLazyLoading" value="false" />

        <setting name="useGeneratedKeys" value="true" />

        <setting name="useColumnLabel" value="true" />

        <setting name="mapUnderscoreToCamelCase" value="false" />

    </settings>

</configuration>

    <!--mybatis-->

    <dependency>

      <groupId>com.baomidou</groupId>

      <artifactId>mybatis-plus</artifactId>

      <version>3.3.1</version>

    </dependency>

(21)Mybatis框架,当前接口的具体映射为mapper下的xml文件,可以使用很多mybatis已经定义好的标签,如增删改查的四个标签,在标签中间写的是具体的sql语句,如include标签,会执行固定的sql语句,这样在选取字段时,就不需要重复书写,where标签则为动态查询标签,去除空格的标签为trim,循环遍历标签为foreach,代码如下:

    <sql id="selectAccessTokenVo">

        select token_id, token, maxage, create_time, update_time, user_id from access_token

    </sql>

    <select id="selectAccessTokenList" parameterType="com.project.demo.entity.AccessToken" resultMap="AccessTokenResult">

        <include refid="selectAccessTokenVo"/>

        <where>

            <if test="token != null  and token != ''"> and token = #{token}</if>

            <if test="maxage != null "> and maxage = #{maxage}</if>

            <if test="userId != null "> and user_id = #{userId}</if>

        </where>

    </select>

    <select id="selectAccessTokenById" parameterType="Integer" resultMap="AccessTokenResult">

        <include refid="selectAccessTokenVo"/>

        where token_id = #{tokenId}

    </select>

    <insert id="insertAccessToken" parameterType="com.project.demo.entity.AccessToken" useGeneratedKeys="true" keyProperty="tokenId">

        insert into access_token

        <trim prefix="(" suffix=")" suffixOverrides=",">

            <if test="token != null  and token != ''">token,</if>

            <if test="maxage != null ">maxage,</if>

            <if test="createTime != null ">create_time,</if>

            <if test="updateTime != null ">update_time,</if>

            <if test="userId != null ">user_id,</if>

         </trim>

        <trim prefix="values (" suffix=")" suffixOverrides=",">

            <if test="token != null  and token != ''">#{token},</if>

            <if test="maxage != null ">#{maxage},</if>

            <if test="createTime != null ">#{createTime},</if>

            <if test="updateTime != null ">#{updateTime},</if>

            <if test="userId != null ">#{userId},</if>

         </trim>

    </insert>

    <update id="updateAccessToken" parameterType="com.project.demo.entity.AccessToken">

        update access_token

        <trim prefix="SET" suffixOverrides=",">

            <if test="token != null  and token != ''">token = #{token},</if>

            <if test="maxage != null ">maxage = #{maxage},</if>

            <if test="createTime != null ">create_time = #{createTime},</if>

            <if test="updateTime != null ">update_time = #{updateTime},</if>

            <if test="userId != null ">user_id = #{userId},</if>

        </trim>

        where token_id = #{tokenId}

    </update>

    <delete id="deleteAccessTokenById" parameterType="Integer">

        delete from access_token where token_id = #{tokenId}

    </delete>

    <delete id="deleteAccessTokenByIds" parameterType="String">

        delete from access_token where token_id in

        <foreach item="tokenId" collection="array" open="(" separator="," close=")">

            #{tokenId}

        </foreach>

    </delete>

(21)项目中,除basecontroller外,其他controlller里面基本不含其他方法,均来自于basecontroller的继承,个别特定controller无法使用通用方法时,会重写相应的增上改查方法,原理是将浏览器中传递过来的数据,直接调用addMap方法、代码如下:

    @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        Map<String,Object> paramMap = service.readBody(request.getReader());

        this.addMap(paramMap);

        return success(1);

}

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

请关注点赞+私信博主,免费领取项目源码

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值