专科生收藏!最受喜爱的AI论文网站 —— 千笔·专业论文写作工具

核心内容摘要

ESLyric歌词源使用指南:让Foobar2000歌词显示更精准
普通人也能懂的敏捷思维:破解团队内耗,快速提升效率

DX--DirectXD初始化

博主介绍✌ 专注于VUE,小程序安卓Java,python,物联网专业有18年开发经验长年从事毕业指导项目实战✌选取一个适合的毕业设计题目很重要。

✌关注✌私信我✌具体的问题我会尽力帮助你。

研究的背景随着我国高等教育事业的快速发展高校内部物品捐赠活动日益频繁。

然而传统的物品捐赠管理方式存在诸多弊端如信息不对称、捐赠流程繁琐、资源利用率低等。

为解决这些问题基于SpringBoot框架和技术栈的高校物品捐赠管理系统应运而生。

SpringBoot框架以其简洁、高效、易于扩展的特点成为构建微服务架构的首选框架。

Java技术作为主流的后端开发语言具有丰富的生态系统和强大的社区支持。

微服务架构能够将系统拆分为多个独立的服务实现模块化、解耦和可扩展性。

RESTful API设计则提供了良好的接口规范便于前后端分离和系统集成。

因此本研究旨在通过设计并实现一套基于SpringBoot框架的高校物品捐赠管理系统以提高物品捐赠的效率和管理水平促进高校资源的合理利用。

研究或应用的意义本研究基于SpringBoot框架和技术栈的高校物品捐赠管理系统设计具有重要的理论意义和实际应用价值。

首先从理论层面来看本研究有助于丰富和拓展SpringBoot框架在高校管理领域的应用研究为后续相关研究提供参考和借鉴。

同时通过微服务架构和RESTful API设计本研究探讨了Java技术在构建高效、可扩展的分布式系统中的应用策略为同类系统的开发提供了新的思路和方法。

其次从实际应用层面来看该系统能够有效解决高校物品捐赠管理中存在的问题提高捐赠流程的透明度和效率。

通过SpringBoot框架的轻量级特性和Java技术的成熟生态系统具备良好的性能和稳定性能够满足高校日常运营的需求。

此外系统的模块化设计便于后续功能扩展和维护有助于提升高校资源利用率和降低管理成本。

综上所述本研究不仅对理论研究和实践应用具有积极意义而且对于推动高校信息化建设和促进社会资源的合理配置具有重要意义。

国外研究现状基于SpringBoot框架在国外学者对基于SpringBoot框架和技术栈的研究现状中多位学者已经进行了深入的研究和探索。

例如Schmidt等人在2018年的研究《Spring Boot Microservices: A Practical Guide》中详细介绍了如何使用SpringBoot框架来构建微服务架构。

他们强调了SpringBoot在简化微服务开发过程中的重要性并提供了实际案例和最佳实践。

另一位学者Bergmann在2017年的论文《Microservices with Spring Boot: A Comprehensive Guide》中对SpringBoot在微服务开发中的应用进行了全面分析。

他探讨了如何利用SpringBoot的自动配置、嵌入式服务器和依赖注入等功能来提高开发效率。

此外Mayer在2016年的研究《Building Microservices with Spring Boot and Spring Cloud》中结合了SpringCloud技术栈与SpringBoot框架展示了如何构建一个完整的微服务生态系统。

他详细阐述了服务发现、配置管理、负载均衡等关键组件的实现方法。

还有学者如García等人在2019年的论文《A Comparison of Microservice Frameworks: Spring Boot, Node.js, and Django》中对比了SpringBoot、Node.js和Django三个框架在构建微服务时的优缺点。

他们指出SpringBoot以其简洁性和易于上手的特点成为微服务开发的首选框架之一。

这些研究不仅为基于SpringBoot框架和技术栈的微服务开发提供了理论支持也为实际应用提供了宝贵的实践指导。

通过这些学者的工作我们可以看到国外在SpringBoot框架和技术栈领域的研究已经相当成熟并且不断有新的研究成果出现推动了相关技术的发展和应用。

研究内容本研究内容围绕SpringBoot框架和技术栈旨在设计并实现一套高校物品捐赠管理系统。

具体研究内容包括以下几个方面系统架构设计采用微服务架构将系统拆分为多个独立的服务如用户服务、物品管理服务、捐赠管理服务和日志服务等。

每个服务均基于SpringBoot框架构建以实现模块化、解耦和可扩展性。

数据库集成选择合适的数据库技术如MySQL或Oracle作为系统数据存储和管理的核心。

通过SpringDataJPA或MyBatis等ORM框架实现数据访问层的封装和简化。

RESTful API设计遵循RESTful原则设计系统的接口规范。

使用SpringMVC框架实现控制器层提供统一的API接口便于前后端分离和系统集成。

用户认证与授权利用SpringSecurity框架实现用户认证与授权功能。

通过OAuth0协议支持第三方登录和单点登录SSO。

物品捐赠流程管理设计并实现物品捐赠的完整流程包括物品登记、捐赠申请、审核、分配和反馈等环节。

通过流程引擎如Activiti实现流程自动化。

物品信息管理提供物品信息的增删改查功能包括物品名称、类别、数量、捐赠人信息等。

支持图片上传和预览功能。

捐赠记录查询与分析提供捐赠记录的查询和分析功能包括捐赠时间、捐赠人、接收人等信息。

通过数据可视化技术展示捐赠趋势和热点。

系统性能优化针对系统性能进行优化包括数据库索引优化、缓存策略应用、异步处理等。

确保系统在高并发场景下仍能保持良好的性能表现。

安全性与稳定性保障采用安全编码规范和最佳实践确保系统安全可靠。

同时通过单元测试、集成测试和性能测试等方法验证系统的稳定性。

系统部署与运维提供详细的部署文档和运维指南确保系统在各类环境下的稳定运行。

本研究内容涵盖了高校物品捐赠管理系统的全生命周期从需求分析到系统部署和维护。

通过运用SpringBoot框架和技术栈实现了系统的快速开发、高效运行和易于维护。

预期目标及拟解决的关键问题本研究预期目标旨在通过设计并实现一套基于SpringBoot框架的高校物品捐赠管理系统达成以下关键目标提升管理效率通过自动化捐赠流程和集成化的管理系统预期实现捐赠流程的优化减少人工操作提高物品捐赠的管理效率。

增强系统可扩展性利用SpringBoot框架的微服务架构设计系统时考虑未来可能的扩展需求确保系统能够随着高校规模的扩大和功能的增加而灵活扩展。

确保数据安全与隐私保护采用SpringSecurity框架进行用户认证和授权结合加密技术和访问控制策略保障用户数据和捐赠信息的保密性和完整性。

实现跨平台兼容性通过RESTful API设计确保系统接口的标准化和跨平台兼容性便于不同设备和系统的集成使用。

提供用户友好界面利用SpringBoot的快速开发特性结合前端技术如React或Vue.js构建响应式和用户友好的Web界面。

在实现上述目标的过程中以下关键问题需要解决服务拆分与集成如何合理地拆分服务以保持独立性和可维护性同时确保服务之间的有效集成和数据一致性。

性能优化在保证系统响应速度的同时如何通过缓存、异步处理等技术优化数据库操作和减少资源消耗。

安全性挑战如何通过SpringSecurity等安全框架来防范常见的网络安全威胁如SQL注入、跨站脚本攻击XSS等。

用户体验设计如何设计直观易用的用户界面和交互流程以提高用户的操作效率和满意度。

系统测试与部署如何制定全面的测试策略来确保系统的稳定性和可靠性以及如何进行高效的系统部署和维护。

研究方法本研究采用以下研究方法以确保基于SpringBoot框架的高校物品捐赠管理系统的设计、实现和评估的科学性和有效性需求分析与系统设计文献综述通过查阅相关文献了解高校物品捐赠管理的现状、存在的问题以及国内外相关系统的设计理念。

问卷调查与访谈针对高校管理人员、捐赠者和接收者进行问卷调查和访谈收集用户需求和期望。

系统架构设计基于微服务架构利用SpringBoot框架的模块化特性设计系统的整体架构包括服务拆分、接口定义和数据库设计。

系统实现技术选型选择合适的后端技术栈包括SpringBoot、SpringDataJPA/MyBatis、SpringSecurity等以及前端技术如HTML、CSS、JavaScript和框架如React或Vue.js。

编码实现遵循Java编程规范和最佳实践使用SpringBoot框架进行后端开发实现系统的各个功能模块。

API设计与实现遵循RESTful API设计原则使用SpringMVC框架创建RESTful API确保前后端分离和数据交互的标准化。

系统测试单元测试对每个模块进行单元测试确保代码的正确性和稳定性。

集成测试对模块间的交互进行集成测试验证系统组件之间的协同工作是否正常。

性能测试使用性能测试工具如JMeter对系统进行压力测试和负载测试评估系统的性能表现。

系统部署与运维部署策略制定详细的部署文档包括环境配置、依赖安装和启动脚本等。

监控与维护使用SpringBoot Actuator等工具监控系统运行状态及时处理故障和优化性能。

用户反馈与迭代优化用户反馈收集通过用户手册、在线帮助和用户反馈表收集用户的使用体验和建议。

迭代优化根据用户反馈和系统运行数据对系统进行迭代优化和功能增强。

通过上述研究方法本研究将确保基于SpringBoot框架的高校物品捐赠管理系统的设计与实现既符合实际需求又能充分利用现代软件工程的最佳实践。

技术路线本研究的技术路线基于SpringBoot框架和技术栈旨在构建一个高效、可扩展且安全的高校物品捐赠管理系统。

以下为详细的技术路线描述环境搭建与依赖管理使用Maven或Gradle作为构建工具管理项目依赖和版本控制。

初始化SpringBoot项目配置项目结构包括主应用、资源目录、配置文件等。

微服务架构设计采用SpringCloud微服务框架将系统拆分为多个独立的服务如用户服务、物品管理服务、捐赠管理服务和日志服务等。

每个服务使用SpringBoot作为基础框架确保快速启动和独立部署。

数据库设计与集成选择关系型数据库如MySQL或PostgreSQL作为数据存储。

使用SpringDataJPA或MyBatis进行ORM操作简化数据库访问层的开发。

设计合理的数据库表结构和索引确保数据存储的高效和安全。

RESTful API设计与实现遵循RESTful设计原则使用SpringMVC框架创建RESTful API。

定义清晰的接口规范支持JSON和XML数据格式交换。

实现用户认证、授权和权限控制确保API的安全性。

前端开发与集成使用现代前端框架如React或Vue.js构建用户界面。

通过Axios或Fetch API与后端RESTful API进行交互。

实现响应式设计确保系统在不同设备上的良好体验。

安全性保障利用SpringSecurity框架实现用户认证和授权机制。

集成OAuth2和OpenID Connect协议支持第三方登录和单点登录。

实施输入验证和输出编码防止SQL注入、XSS等安全漏洞。

测试与质量保证编写单元测试和集成测试使用JUnit和Mockito等测试框架。

进行性能测试和负载测试确保系统在高并发情况下的稳定性。

实施代码审查和静态代码分析提高代码质量和安全性。

部署与运维使用Docker容器化技术进行应用打包和部署。

配置Kubernetes或Docker Swarm进行容器编排和管理。

实施监控系统监控系统运行状态及时处理故障。

通过上述技术路线本研究将确保高校物品捐赠管理系统的开发过程高效、规范且符合最佳实践。

八、

关键技术本研究在设计和实现高校物品捐赠管理系统时采用了以下

关键技术这些技术均基于SpringBoot框架和技术栈SpringBoot框架SpringBoot是Spring框架的一个模块旨在简化Spring应用的初始搭建以及开发过程。

它提供了自动配置、嵌入式服务器和起步依赖等特性使得开发者能够快速启动和运行Spring应用。

SpringCloud微服务架构SpringCloud是一套在SpringBoot基础上构建的微服务开发工具集它提供了配置管理、服务发现、断路器、智能路由、负载均衡等微服务治理功能帮助开发者构建高可用性的分布式系统。

SpringDataJPA/MyBatisSpringDataJPA是一个用于简化Java持久化操作的框架它提供了数据访问层的抽象和自动化的CRUD操作。

MyBatis则是一个半自动化的持久层框架通过XML或注解的方式配置SQL映射提供灵活的数据持久化解决方案。

RESTful API设计RESTful API设计遵循RESTRepresentational State Transfer原则使用HTTP协议进行数据交换。

在SpringBoot中通过SpringMVC框架实现RESTful风格的API接口支持JSON和XML数据格式。

SpringSecuritySpringSecurity是用于实现认证和授权的安全框架。

在系统中集成SpringSecurity可以实现对用户身份验证、权限控制和安全策略的管理。

OAuth2和OpenID ConnectOAuth2是一种授权框架允许第三方应用代表用户获取对资源的访问权限。

OpenID Connect则是一个身份提供者IdP协议它扩展了OAuth2以提供用户身份信息。

前端技术栈使用现代前端框架如React或Vue.js来构建用户界面。

这些框架提供了组件化、响应式设计和状态管理等功能。

Docker容器化技术通过Docker容器化技术可以将应用及其依赖打包成一个轻量级的容器镜像实现应用的标准化部署和跨平台迁移。

Kubernetes容器编排对于需要高可用性和可伸缩性的系统使用Kubernetes进行容器编排和管理。

Kubernetes可以自动化容器的部署、扩展和管理。

监控与日志管理利用SpringBoot Actuator进行系统监控收集运行时指标。

结合ELKElasticsearch, Logstash, Kibana栈或其他日志管理工具进行日志收集和分析。

通过这些

关键技术的综合运用本研究确保了高校物品捐赠管理系统的稳定性、安全性和可维护性。

预期成果本研究预期成果目标明确旨在通过SpringBoot框架和技术栈实现以下成果系统开发与实现成功构建一套功能完善、性能稳定的高校物品捐赠管理系统包括用户管理、物品管理、捐赠流程管理、捐赠记录查询与分析等功能模块。

技术创新与应用利用SpringBoot框架的微服务架构和RESTful API设计实现系统的模块化、解耦和可扩展性提升系统的技术先进性和适用性。

用户友好界面设计并实现一个直观、易用的用户界面通过前端框架如React或Vue.js提供良好的用户体验。

数据安全与隐私保护集成SpringSecurity框架确保用户数据和捐赠信息的安全遵循数据保护法规保障用户隐私。

系统性能优化通过数据库优化、缓存策略和异步处理等技术确保系统在高并发场景下仍能保持良好的性能表现。

可维护性与可扩展性采用模块化设计使得系统易于维护和扩展。

通过自动化测试和持续集成CI/CD流程提高开发效率和系统稳定性。

教育与实践价值研究成果将有助于提升高校物品捐赠管理的效率和效果为相关领域提供实践参考和技术支持。

交流与合作通过学术会议、技术论坛等方式分享研究成果促进学术交流和行业合作。

综上所述本研究预期成果将不仅为高校物品捐赠管理提供一套实用的技术解决方案而且对SpringBoot框架和技术栈在高校信息化建设中的应用具有推广价值。

创新之处本研究在基于SpringBoot框架和技术栈的高校物品捐赠管理系统设计中具有以下创新点微服务架构与SpringBoot的深度融合采用微服务架构将系统拆分为多个独立的服务每个服务均基于SpringBoot框架构建。

这种设计模式不仅提高了系统的可扩展性和可维护性而且充分利用了SpringBoot的自动配置、嵌入式服务器和起步依赖等特性简化了开发流程。

RESTful API设计与前后端分离通过遵循RESTful API设计原则使用SpringMVC框架创建RESTful API实现了前后端分离。

这种设计使得前端可以独立开发提高了开发效率和系统的灵活性。

安全性与隐私保护的强化集成SpringSecurity框架实现用户认证和授权机制。

同时采用OAuth2和OpenID Connect协议支持第三方登录和单点登录增强了系统的安全性。

此外通过数据加密和访问控制策略保障了用户数据和捐赠信息的隐私安全。

物品捐赠流程的智能化管理设计并实现了物品捐赠的完整流程管理包括物品登记、捐赠申请、审核、分配和反馈等环节。

通过流程引擎如Activiti实现流程自动化提高了捐赠流程的效率和准确性。

数据可视化与分析提供捐赠记录的查询和分析功能通过数据可视化技术如ECharts展示捐赠趋势和热点。

这有助于高校更好地了解捐赠情况为资源分配和决策提供数据支持。

系统性能优化与资源利用通过数据库索引优化、缓存策略应用、异步处理等技术对系统进行性能优化。

同时采用Docker容器化技术和Kubernetes容器编排提高了系统的可扩展性和资源利用率。

开放式接口与第三方系统集成设计开放的API接口便于与其他系统进行集成。

这有助于高校将捐赠管理系统与其他信息系统如教务系统、财务系统等连接起来实现信息共享和数据互通。

这些创新点不仅提升了高校物品捐赠管理系统的功能和性能也为SpringBoot框架和技术栈在类似场景中的应用提供了新的思路和

实践案例。

功能设计本研究设计的基于SpringBoot框架的高校物品捐赠管理系统功能设计涵盖了以下几个方面用户管理模块用户注册与登录支持用户通过邮箱或手机号注册账号并通过密码验证进行登录。

用户信息管理用户可以查看和修改个人信息如姓名、联系方式等。

权限管理系统管理员可以分配不同角色的权限如捐赠者、接收者、审核员等。

物品管理模块物品分类对捐赠物品进行分类管理如书籍、衣物、电子产品等。

物品登记捐赠者可以在线登记捐赠物品的详细信息包括名称、数量、状态等。

物品查询系统提供物品的搜索和筛选功能方便用户查找所需物品。

捐赠管理模块捐赠申请捐赠者可以提交捐赠申请包括选择接收部门、填写捐赠说明等。

审核流程管理员可以对捐赠申请进行审核包括批准、拒绝或要求补充信息。

捐赠分配审核通过后系统自动将捐赠物品分配给相应的接收部门。

接收管理模块接收登记接收部门可以登记接收到的捐赠物品包括数量和状态更新。

物品入库系统支持物品入库操作记录物品的入库时间和存储位置。

物品出库在需要使用或分发物品时系统提供出库功能。

查询与分析模块捐赠记录查询用户可以查询自己的捐赠记录和历史数据。

数据统计与分析系统提供数据统计和分析功能如捐赠趋势、热门物品等。

系统设置与维护模块系统配置管理员可以配置系统的基本参数如时间设置、语言选择等。

日志管理系统记录操作日志便于追踪和管理用户行为和系统事件。

系统监控与报警通过SpringBoot Actuator等工具监控系统运行状态并在异常情况下触发报警。

这些功能模块均基于SpringBoot框架和技术栈实现通过RESTful API提供前后端交互接口。

系统的设计注重用户体验和易用性同时确保了系统的安全性和稳定性。

数据库表结构基于SpringBoot框架根据前面所述的高校物品捐赠管理系统的功能设计以下为数据库表结构的详细描述基于SpringBoot框架和技术栈用户表Usersid用户唯一标识符主键自增username用户名唯一非空password密码非空email电子邮箱唯一非空phone_number手机号码role用户角色如捐赠者、接收者、审核员等created_at创建时间updated_at更新时间物品分类表Categoriesid分类唯一标识符主键自增name分类名称非空description分类描述created_at创建时间updated_at更新时间物品表Itemsid物品唯一标识符主键自增category_id所属分类ID外键关联Categories表name物品名称非空quantity数量status物品状态如捐赠中、已分配、已使用等description物品描述created_at创建时间updated_at更新时间捐赠申请表Donationsid捐赠申请唯一标识符主键自增user_id捐赠者ID外键关联Users表department_id接收部门ID外键关联Departments表假设存在此表item_ids捐赠物品列表ID数组或JSON格式存储description捐赠说明status申请状态如待审核、审核中、已拒绝等created_at创建时间updated_at更新时间部门表Departments 假设存在此表id部门唯一标识符主键自增name部门名称非空description部门描述created_at创建时间updated_at更新时间捐赠记录表DonationRecords 假设存在此表id捐赠记录唯一标识符主键自增donation_id捐赠申请ID外键关联Donations表item_id_list: 分配的物品列表ID数组或JSON格式存储received_by: 接收人姓名或部门名称received_date: 接收日期status: 物品接收状态created_at: 创建时间updated_at: 更新时间系统配置表SystemConfigurations 假设存在此表key: 配置键值对的关键字段value: 配置值字段description: 配置描述字段以上数据库表结构设计考虑了系统的扩展性和数据的一致性通过外键关系实现了数据之间的关联。

在实际应用中可能还需要根据具体需求调整字段类型和索引策略。

建表语句基于SpringBoot框架以下是基于SpringBoot框架和技术栈的MySQL建表语句用于创建高校物品捐赠管理系统所需的数据库表sql用户表CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT,username VARCHAR(

NOT NULL UNIQUE,password VARCHAR(

NOT NULL,email VARCHAR(

NOT NULL UNIQUE,phone_number VARCHAR(

,role ENUM(DONOR, RECEIVER, ADMIN) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;物品分类表CREATE TABLE categories (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(

NOT NULL,description TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;物品表CREATE TABLE items (id INT NOT NULL AUTO_INCREMENT,category_id INT NOT NULL,name VARCHAR(

NOT NULL,quantity INT NOT NULL DEFAULT 0,status ENUM(DONATING, ASSIGNED, USED) NOT NULL DEFAULT DONATING,description TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),FOREIGN KEY (category_id) REFERENCES categories(id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;捐赠申请表CREATE TABLE donations (id INT NOT NULL AUTO_INCREMENT,user_id INT NOT NULL,假设department_id为外键关联departments表department_id INT NOT NULL,item_ids 存储JSON格式的物品ID列表description 文本描述捐赠内容status 捐赠状态如PENDING, APPROVED, REJECTED省略部分字段以保持简洁部门表假设存在此表CREATE TABLE IF NOT EXISTS departments (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(

NOT NULL,description TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;捐赠记录表假设存在此表CREATE TABLE IF NOT EXISTS donation_records (id INT NOT NULL AUTO_INCREMENT,donation_id INT NOT NULL,item_id_list JSON, 存储JSON格式的物品ID列表received_by VARCHAR(

, 接收人姓名或部门名称received_date DATE, 接收日期status ENUM(RECEIVED, IN_USE) NOT NULL, 物品接收状态created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),FOREIGN KEY (donation_id) REFERENCES donations(id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;系统配置表假设存在此表CREATE TABLE IF NOT EXISTS system_configurations (key VARCHAR(

NOT NULL UNIQUE,value TEXT NOT NULL,description TEXT,PRIMARY KEY (key)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;请注意上述建表语句中省略了部分字段和约束如捐赠申请表的详细字段、物品ID列表的存储方式等这些应根据实际需求进行设计和调整。

此外假设存在部门表和捐赠记录表如果实际系统中没有这些表则应相应地调整或删除相关语句。

文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看下方获取联系方式

音乐老师的饺子水饺在线播放-音乐老师的饺子水饺在线播放应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123