感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以关注一下,希望帮助更多的人顺利毕业~

摘 要

随着农业的现代化和互联网技术的快速发展,助农产品的销售渠道日益多样化,传统的销售模式面临着挑战。为了更好地促进农产品的流通,提升农民的销售能力,本系统借助先进的现代化技术设计并实现一个高效简便的助农产品展销系统。本系统后端采用SpringBoot框架实现业务逻辑和数据处理,前端基于Android结合uni-app框架实现移动端和跨平台的用户界面,数据库选用MySQL进行数据存储与管理。系统分为注册用户、商家用户和管理员三大核心部分,主要涵盖了系统用户、在线咨询管理、推送信息管理、系统管理、公告信息管理、资源管理、商城管理以及数据统计等功能,通过引入合理的流程设计和权限管理,确保各类用户在系统中进行高效的交互,能够实现对农产展销信息的全面管理。通过整合前后端技术,最终构建与实现了一个用户友好、功能齐全的助农产品展销平台。该系统的实施能够有效提高农产品的市场曝光率,缩短了农民与消费者之间的距离,为农村经济的发展注入了新的活力。通过数据分析功能,商家能够实时了解市场动态,优化产品运营策略,获得更高的销售额。同时本研究推动了农产展销管理的数字化和信息化发展,为后续助农项目的研究与推广提供了参考,具有良好的实践意义和推广价值。

关键词:助农产品展销系统;SpringBoot;Android;uni-app

ABSTRACT

With the modernization of agriculture and the rapid development of Internet technology, the sales channels of agricultural products are increasingly diversified, and the traditional sales model is facing challenges. In order to better promote the circulation of agricultural products and enhance the sales ability of farmers, this system utilizes advanced modern technology to design and implement an efficient and convenient sales system for agricultural products. The backend of this system adopts the SpringBoot framework to implement business logic and data processing. The frontend is based on Android combined with the uni app framework to implement mobile and cross platform user interfaces. MySQL is used for data storage and management. The system is divided into three core parts: registered users, merchant users, and administrators. It mainly covers functions such as system users, online consultation management, push information management, system management, announcement information management, resource management, mall management, and data statistics. By introducing reasonable process design and permission management, it ensures efficient interaction among various users in the system and enables comprehensive management of agricultural exhibition and sales information. By integrating front-end and back-end technologies, a user-friendly and fully functional platform for promoting and selling agricultural products was ultimately constructed and implemented. The implementation of this system can effectively increase the market exposure of agricultural products, shorten the distance between farmers and consumers, and inject new vitality into the development of rural economy. Through data analysis capabilities, merchants can gain real-time insights into market trends, optimize product operation strategies, and achieve higher sales. At the same time, this study has promoted the digitalization and informatization development of agricultural product exhibition and sales management, providing reference for the research and promotion of subsequent agricultural assistance projects, and has good practical significance and promotion value.

Key Words:  agricultural product exhibition and sales system; SpringBoot;Android; uni-app

目  录

第一章    绪  论

1.1研究背景与意义

1.1.1研究背景

1.1.2 研究意义

1.2 国内外研究现状

1.2.1 国外研究现状

1.2.2 国内研究现状

1.3 论文组织结构

第二章    相关技术介绍

2.1 Java语言

2.2 SpringBoot框架

2.3 uni-app框架

2.4 Android系统

2.5 MySQL数据库

2.6 B/S架构

第三章    需求分析

3.1  可行性分析

3.1.1 技术可行性

3.1.2 操作可行性

3.1.3 经济可行性

3.2功能需求分析

3.2.1 用例模型

3.2.2 功能分析

3.3 非功能需求分析

第四章    系统设计

4.1 系统架构设计

4.2 系统总体流程设计

4.2.1 用户登录流程

4.2.2 添加信息流程

4.2.3 修改信息流程

4.2.4 删除信息流程

4.3 系统总体功能设计

4.4 数据库设计

4.4.1 数据库概念设计

4.4.2 数据库表设计

第五章    系统实现

5.1 注册用户功能实现

5.1.1  用户注册模块

5.1.2 用户登录模块

5.1.3 首页模块

5.1.4 在线咨询模块

5.1.5 产品信息模块

5.1.6 我的模块

5.1.7 我的订单模块

5.2 商家用户功能实现

5.2.1 在线咨询管理模块

5.2.2 商城管理模块

5.3 管理员功能实现

5.3.1 后台首页模块

5.3.2 在线咨询管理模块

5.3.3 推送信息管理模块

5.3.4 商城管理模块

第六章    系统测试

6.1 测试目的

6.2 测试用例

6.3 测试结论

结  语

参考文献

致  谢

附  录A

第一章    绪  论

1.1研究背景与意义

1.1.1研究背景

随着信息技术的飞速发展和互联网的普及,电商行业迅速崛起,改变了传统零售业的格局,在线购物已经成为人们日常生活的重要组成部分。在这一变革中,农村经济的振兴也成为一个重要的课题。我国的农村地区拥有丰富的农产品资源,但由于地理位置偏远、信息不对称以及缺乏有效的市场体系,农民往往面临销售困境,农产品滞销现象时有发生。同时,消费者对新鲜和优质农产品的需求日益增加,农产需求与供应之间的矛盾亟待解决。在互联网时代背景下,助农电商平台的建设能够有效打破信息壁垒,提供一个农产品生产者与消费者的高效对接渠道。然而,现有的农村电商模式仍面临一定的短板,如产品种类单一、运营管理不足等。因此,积极探索和设计一款系统化的助农产品展销平台,以满足农民和消费者的多样化需求,将成为推动农村经济发展的重要举措。

1.1.2 研究意义

本研究主要通过采用SpringBoot框架,结合uni-app和Android技术构建一套功能完善且操作简便的助农产品展销系统,探讨如何提升助农产品展销管理效率和用户体验,具有重要的理论与实践价值。本研究将前沿技术应用于助农产品展销管理的实际场景,为助农领域提供新的视角和方法,丰富信息技术在农产展销管理中的研究理论,可以为其他农村电商平台的开发提供参考,促进农业与互联网的深度融合,推动乡村振兴和农产行业的数字化转型。该系统的研发能够有效整合农产资源,为用户提供一个一站式农产销售购物平台,提升用户购物体验和满意度。同时,借助系统可以为农商提供更为广阔多元的销售渠道和管理工具,以提升销售管理效率和质量,增加营收,提升农村居民的生活品质。这一系统的实现还能够促进农民与消费者之间的信息对接,提升透明度,增强消费信任。系统所提供的数据分析功能,还能够帮助农民及商家及时获取市场动态,优化产品结构与营销策略,提高市场竞争力。这不仅为农民带来了更高的经济收益,也为农村经济的现代化转型提供了数据支持与决策依据,具有积极的现实意义和良好的应用前景。

1.2 国内外研究现状

1.2.1 国外研究现状

国外方面,农村电商发展相对较早,存在许多成熟的模式和案例,各国根据当地的市场需求和农民的具体情况,探索出了不同的解决方案。国外注重推动本地化消费,通过建立线上线下相结合的市场,增强农民与消费者之间的联系。这种农村电商模式不仅提升了农民的收入,也促进了当地经济的可持续发展。例如,美国的“Farmers Market”倡导本地化消费,通过建立线上线下结合的销售方式,使农民直接与消费者对接,从而增加农民的收入。同时,结合线上平台,国外农场通过社交媒体进行产品宣传,并利用电商平台完成交易,推动农业与市场的紧密结合。

国外还探索了多样化的创新型电商平台,以适应农民和消费者的不同需求。研究利用新兴技术手段,如大数据和区块链,提升产品的可追溯性和透明度,增强消费者的信心。如印度的“Online Farmer’s Market”项目,通过创建在线市场,帮助农民直接将产品销售给消费者,减少中间环节。这一模式在提升农民收入的同时,也促进了消费者对本地优质农产品的认知与购买。

1.2.2 国内研究现状

随着我国互联网技术的不断进步,农村电商发展取得了一定成就,并在国家政策的支持与市场需求的不断增长的背景下,逐渐形成了较为成熟的体系。近年来,我国政府加大了对农村电商的政策扶持。例如,2015年国务院发布的《国务院关于大力发展电子商务促进消费的意见》提出,加速农村电商的培育和发展。这一政策的实施推动了各地方政府的积极响应,出台了一系列扶持政策,包括资金补助、税收减免等。

同时,国内多家电商平台纷纷进军农村市场,推出面向农村的业务,助力农民增收。如阿里巴巴的“农村淘宝”、京东的“京东帮”等农产电商平台的构建为农民提供了便捷的销售渠道,为广大消费者带来了更多的选择。研究表明,农村电商不仅提高了农产品的销量,也促进了当地经济的发展。例如,2018 年,河南省的“电商助农”项目通过培训和支持农民的网络销售,使当地的水果销售额显著提高,农民通过电商平台实现了较高的收益。

国内电商平台在技术应用上也不断创新,尤其是移动支付、社交电商和直播带货等概念深入农村电商领域。利用这些新兴技术和形式,农民能够更加便捷地进行产品展示和销售。比如,拼多多通过“农货上行”计划,鼓励农民利用社交媒体和团购模式推广自己的产品。通过拼团的形式,农民不仅能以较低的价格出售产品,也能够借助平台的流量优势获取更广阔的市场。然而,当前农村电商的发展仍然存在一些挑战,如形式众多的农产品管理、市场竞争加剧等问题,使得农村电商生态中的小农户面临生存压力,容易被市场淘汰。

总体来看,无论是在国内外,农村电商的发展前景广阔,但仍需不断探索创新,以应对市场变化和行业挑战。因此,设计和实施合适的助农产品展销系统,将是未来研究和实践的重要方向。

1.3 论文组织结构

本论文共分为七个主要章节,具体结构如下:

第一部分绪论,介绍研究背景与意义,回顾国内外研究现状,并概述论文的组织结构。

第二部分相关技术介绍,详细介绍与本研究相关的技术,包括Java语言、B/S框架、SpringBoot框架和MySQL数据库等技术。

第三部分需求分析,对系统的功能需求和非功能需求进行分析,明确用户和管理员的需求,并进行可行性分析,包括技术、操作和经济可行性。

第四部分系统设计,涵盖系统架构设计、总体流程设计和功能设计,并进行数据库的概念设计与表设计。

第五部分系统实现,具体描述各个功能模块的实现过程,展示系统如何根据需求进行开发。

第六部分系统测试,阐述测试的目的、方法和内容,分析测试结果并得出结论,以验证系统的稳定性和功能完整性。

最后,结语部分,总结研究的主要成果和贡献,指出存在的不足及未来的研究方向。

第二章    相关技术介绍

2.1 Java语言

Java语言是一种广泛使用的高级编程语言,具有平台无关性、面向对象特性和丰富的标准库[1]。Java的面向对象特性使得代码复用和模块化变得更加容易,促进了软件的维护和扩展。Java支持多线程编程,允许开发者在同一程序中同时执行多个任务,提升了应用程序的性能。Java语言的语法结构简洁且易于理解,吸引了大量开发者。Java的标准库包含数据结构、输入输出处理、网络编程等众多功能模块[2]。这使得开发者在构建应用程序时能够高效利用已有工具,减少重复劳动。Java广泛应用于企业级应用、移动应用、Web开发和大数据处理等领域。

2.2 SpringBoot框架

SpringBoot框架是基于Spring框架的开源项目,简化Java应用程序的开发过程。SpringBoot通过约定优于配置的理念,减少了传统Spring应用的繁琐配置,开发者可以快速搭建和部署应用程序[3]。SpringBoot框架提供了一系列默认配置,支持自动化配置,简化了应用启动的复杂性。SpringBoot内置了嵌入式Web服务器,使得开发者能够独立运行Java应用,无需外部容器。SpringBoot支持微服务架构,开发者可以轻松创建和管理多个微服务。SpringBoot集成了丰富的功能模块,包括安全、数据访问和消息中间件等,支持RESTful API和JSON数据格式的处理[4]。SpringBoot还提供了强大的监控和管理功能,允许开发者实时监控应用的健康状态和性能指标。借助SpringBoot,开发者能够高效构建和维护现代企业级应用,满足复杂业务需求。

2.3 uni-app框架

uni-app是一个使用Vue.js开发所有前端应用的框架,只需编写一套代码即可编译到iOS、Android、H5、以及各种小程序等多个平台,用户通过uni-app建立的移动端应用能够方便地进行各种功能操作[5]。对于需要跨多个平台部署的应用来说,uni-app能够极大地提高开发效率,减少了不同平台间开发的学习成本和维护成本。

2.4 Android系统

Android是由Google开发的基于Linux的开放源代码操作系统,主要用于移动设备如智能手机和平板电脑[6]。Android支持各种设备,包括智能手机、平板电脑、电视和汽车等。Android Studio等开发工具极大地简化了应用开发流程,提供了丰富的API和开发库。Android应用生态丰富,Google Play等应用商店提供了丰富的应用选择,用户体验优良。

2.5 MySQL数据库

MySQL是一种开源关系型数据库管理系统,广泛应用于Web应用和企业级数据存储。MySQL支持结构化查询语言,允许开发者通过标准语句进行数据的创建、读取、更新和删除操作。数据库通过表格形式组织数据,支持数据完整性和约束条件的定义[7]。MySQL的存储引擎机制使得用户可以根据具体需求选择不同的存储引擎,以优化性能和功能。MySQL具有高性能和可扩展性,支持大规模数据存储和高并发访问。系统提供了丰富的用户权限管理和数据加密安全特性。MySQL能够与多种编程语言和框架兼容,广泛应用于内容管理系统、电子商务平台和数据分析等各种场景[8]。

2.6 B/S架构

B/S(Browser/Server)架构是一种基于浏览器和服务器的系统架构模式,用户通过浏览器与服务器进行交互[9]。B/S架构简化了客户端的部署和管理,用户无需在本地安装复杂的软件,只需使用标准浏览器即可访问应用程序。服务器端负责处理业务逻辑和数据存储,客户端则主要负责展示用户界面和数据交互[10]。B/S架构通常采用Web技术进行实现,包括HTML、CSS和JavaScript等。用户在浏览器中发起请求,服务器响应并返回数据。数据传输通常通过HTTP或HTTPS协议进行,B/S架构的灵活性使其适用于在线购物、信息管理系统和社交网络等各类应用场景。由于其易于扩展性,B/S架构可以方便地支持大规模用户访问,适应不断变化的业务需求。

第三章    需求分析

3.1  可行性分析

3.1.1 技术可行性

系统选择当前主流的Java编程语言,并采用Spring Boot作为后端开发框架,可以充分利用其强大的生态系统和自动配置能力,加速开发进程。同时,利用Android和uni-app开发前端能够为用户提供友好的界面,确保应用在不同平台上的兼容性和一致性,降低开发成本。MySQL作为关系型数据库解决方案,能够提供稳定的数据存储和管理功能。另个人拥有丰富的相关技术经验,能够有效应对潜在技术挑战。整体而言,这些技术的选择都是成熟可靠的,具备较高的技术可行性。

3.1.2 操作可行性

本系统设计采用B/S架构,用户只需要通过浏览器或App就能访问系统,极大地降低了用户的使用门槛。同时系统具备直观友好的用户界面,支持简便的导航和功能访问,极大地提升了用户的使用体验。系统还提供了自定义的工作流程和角色权限管理,使不同层级的用户能够快速上手,完成各自的任务。所以,该系统具有很高的操作可行性。

3.1.3 经济可行性

系统所使用的软件为开源技术,能够降低了开发和使用费用,同时硬件成本较低,使得整体初始投入相对合理,具备较高性价比。在开发完成上线后,可通过广告或其他增值服务支持系统后期运维成本。因此,系统在经济上是完全可行的。

3.2功能需求分析

3.2.1 用例模型

本文将对系统按照角色模块进行需求分析。UML(统一建模语言)用例图是需求分析阶段常用的工具,通过直观的图形方式表示系统的功能需求和参与者。每个用例图包含一系列用例,即系统能够执行的特定功能,以及与之交互的参与者。根据用户分析,本助农产品展销系统可以划分为注册用户角色、商家用户角色和管理员角色,各角色的用例图如下所示。

(1)注册用户角色用例

本助农产品展销系统的注册用户角色模块主要包含注册登录、首页(轮播图、公告信息、在线咨询、产品信息)、购物车、行业资讯、我的(基本信息、我的订单、收货地址、收藏、在线咨询、推送信息、订单配送)等功能。注册用户角色用例图如下图3.1 所示。

图3.1  注册用户角色用例图

(2)商家用户角色用例

本助农产品展销系统的商家用户角色模块含有注册登录、后台首页、在线咨询管理、商城管理(产品信息、分类列表、订单列表、订单配送)等功能。商家用户角色用例图如下图3.2 所示。

图3.2  商家用户角色用例图

(3)管理员角色用例

本助农产品展销系统的管理员角色模块则涵盖了登录、后台首页、系统用户、在线咨询管理、推送信息管理、系统管理、公告信息管理、资源管理、商城管理(产品信息、分类列表、订单列表、订单配送)等功能。管理员角色用例图如下图3.3 所示。

图3.3  管理员角色用例图

3.2.2 功能分析

按照用户需求和角色用例图分析,可以得出本助农产品展销系统主要划分为注册用户模块、商家用户模块和管理员模块三大部分,各角色功能模块详细说明如下所示。

(1)注册用户功能模块

注册登录:提供注册登录功能,游客可以通过注册成为系统用户,使用账号密码可登录系统前台,使用权限内功能操作。

首页:用户登录系统后首先进入首页界面,该界面主要提供系统功能导航和系统重要信息概览和推荐信息(根据协同过滤优先推荐购买过的同类型产品),包括可查看轮播图、公告信息等内容;并提供在线咨询、产品信息等系统子功能链接入口。

公告信息:当用户点击首页的“公告信息”时,可查看管理员发布的系统公告内容。

在线咨询:当用户点击首页的“在线咨询”时,可输入咨询内容,向管理员或商家进行咨询,由对应人员在后台处理回复。

产品信息:当用户点击首页的“产品信息”时,可搜索和浏览所有的产品信息,进入详情页可评论(购买后才可发表评论)、收藏产品信息,并提供客服、加入购物车、立即购买操作。

购物车:注册用户可查看和管理加入购物车的商品信息,批量选择商品进行购买或删除操作。

行业资讯:注册用户可搜索和浏览发布的所有行业资讯信息,包括相关新闻、文章等资讯内容,进行点赞、收藏和评论资讯信息。

我的:“我的”模块主要提供包括基本信息、我的订单、收货地址、收藏、在线咨询、推送信息、订单配送等子功能管理操作,注册用户可根据需求对自己各类信息进行管控和处理。具体如下:

基本信息:支持修改个人资料和密码信息。

我的订单:支持管理我的订单,展示待付款、已付款、已取消等订单信息。

收货地址:支持增改删查自己的收货地址信息。

收藏:支持查看管控自己收藏的各类系统信息。

在线咨询:支持查询自己提交的在线咨询信息,查看咨询回复内容。

推送信息:支持查阅管理员向自己的推送信息,查看详细内容。

订单配送:支持查询跟踪订单配送情况,实现签收操作。

(2)商家用户功能模块

注册登录:提供注册登录功能,商家可以通过注册成为系统用户,使用账号密码可登录系统后台,实现权限内管理操作。

后台首页:商家用户登录系统后首先进入后台首页界面,该界面主要提供系统信息概览和数据统计分析图表,包括商品销售金额统计、商品销售数量统计等图表。

在线咨询管理:商家用户可搜索和浏览自己接收的在线咨询信息,支持进入详情页回复咨询信息。

商城管理:商家用户可管理自己的商城信息,提供包括产品信息、分类列表、订单列表、订单配送等商城管理子功能。支持上架、下架和更新产品信息,进行分类管理;可处理订单,更新配送信息,跟踪和更新物流签收情况。

(3)管理员功能模块

登录:管理员账号密码由系统生成,可使用账号密码进行登录系统后台,负责管理和维护系统各类信息,提供个人信息和密码管理功能。

后台首页:管理员登录系统后首先进入后台首页界面,该界面主要提供系统信息概览和数据统计分析图表,包括商品销售金额统计、商品销售数量统计等图表。

系统用户:管理员可对系统用户信息进行管理,包括注册用户、商家用户和管理员等用户,实现添加、删除、封禁和审核用户信息等操作。

在线咨询管理:管理员可对所有在线咨询信息进行管理,实现增改删查操作,提供关键字搜索,支持进入详情页回复咨询。

推送信息管理:管理员可管理所有推送信息,进行添加、删除、更新和查询等操作。

系统管理:管理员可对首页的轮播图进行管理,支持上传更新轮播图和更新图片跳转链接,提供标题搜索功能。

公告信息管理:管理员可对公告信息进行管理,实现增删改查操作,支持标题搜索,可查看其详情信息。

资源管理:管理员可管理行业资讯和资讯分类等资源信息,可发布、删除和更新行业资讯内容,并进行资讯分类管理,支持关键字搜索,提供评论查看和管控功能。

商城管理:管理员可管理包括产品信息、分类列表、订单列表、订单配送等商城信息。支持上架、下架和更新产品信息,进行分类管理;可处理订单,更新配送信息,跟踪和更新物流签收情况。

3.3 非功能需求分析

(1)可用性  

系统应具备高可用性,用户在任何时间都能顺畅访问。系统的正常运行时间应达到99.9%以上,用户不会因系统故障而影响操作体验。用户界面设计应简洁明了,降低操作复杂性。

(2)可靠性  

系统需要具备高可靠性,在故障发生时能够快速恢复。系统应具备故障检测机制,自动识别并处理潜在问题。在并发操作情况下,系统应能确保数据的一致性并定期备份,避免出现数据冲突或数据丢失现象。

(3)安全性  

系统应实现严格的安全控制,保护用户数据的隐私和完整性。用户信息应加密存储,传输过程中的数据也需采用加密协议,防止数据泄露。系统应具备权限管理功能,不同用户只能访问相应的数据和功能。

(4)可扩展性  

系统设计应具备良好的可扩展性,模块化设计使得新功能可以方便地集成,系统能够支持更高的用户负载而无需重构基础架构。

(5)性能  

系统的响应时间应控制在合理范围内,通常不超过2秒。系统应支持至少500名并发用户进行操作,且不影响系统性能。

(6)兼容性

系统应支持主流浏览器(如Chrome、Firefox、Safari、Edge)和移动设备的访问,确保用户在不同设备上具有一致的体验。如果需要与第三方系统(如支付接口、物流系统)集成,系统的API应遵循RESTful标准,并提供良好的文档支持。

第四章    系统设计

4.1 系统架构设计

本助农产品展销系统的架构设计将采用分层架构,确保系统的可扩展性和维护性。架构主要将分为前端、后端和数据库三部分。用户界面层(前端)负责与用户交互,基于Android使用uni-app实现移动端应用,支持H5和微信小程序,能够适配多个终端,提高用户体验。业务逻辑层(后端)使用Spring Boot 实现系统的核心业务逻辑,并提供RESTful接口,为前端提供数据支持,实现前后端分离,提高了系统的灵活性和可扩展性,让前端能够独立开发和更新。使用Spring Data JPA或MyBatis与数据库进行交互,提供数据的持久化操作,负责数据的CRUD(创建、读取、更新、删除)。数据库层(数据库)使用MySQL作为后端的数据库,存储用户信息、系统数据和操作日志等。该助农产品展销系统的架构设计充分考虑了可扩展性、维护性和用户体验,各个模块的合理分离确保系统在未来能够顺利进行优化与扩展,整个系统架构如图4.1所示。

图4.1  系统架构图

4.2 系统总体流程设计

4.2.1 用户登录流程

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

图4.2 登录流程图

4.2.2 添加信息流程

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

图4.3  添加信息流程图

4.2.3 修改信息流程

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

图4.4  修改信息流程图

4.2.4 删除信息流程

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

图4.5  删除信息流程图

4.3 系统总体功能设计

根据需求分析的结果,可以将助农产品展销系统的功能划分为不同的模块。该系统主要可以划分为注册用户、商家用户和管理员三大模块,每个模块负责实现特定的功能,又可细分不同子模块,并与其他模块进行协作。本助农产品展销系统的功能结构图如图4.6所示。

图4.6  系统功能结构图

4.4 数据库设计

4.4.1 数据库概念设计

概念设计是数据库设计的第一步,其主要目标是对系统的数据需求进行全面的理解和抽象。在进行数据库设计时,概念设计可以帮助明确系统的整体结构和需求。在这一阶段,需要确定实体、属性以及它们之间的关系,为后续的数据库表设计奠定基础。接下来,将深入探讨数据库表设计的具体细节,实现更高效的数据存储和管理。本助农产品展销系统全局E-R图如图4.7所示。

图4.7  系统总体E-R图

4.4.2 数据库表设计

数据库表设计的重点是将概念模型转换为实际的数据库结构,包括表的创建、字段的定义及数据类型的选择。每个实体通常对应于数据库中的一张表,而实体的属性则转化为表的字段。以下是系统的数据库表设计具体内容展示,在此主要罗列部分主要功能数据表结构。

表4.1  business_user(商家用户)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

business_user_id

int

商家用户ID

2

shop_name

varchar

64

店铺名称

3

merchant_name

varchar

64

商家姓名

4

examine_state

varchar

16

审核状态

5

user_id

int

用户ID

6

create_time

datetime

创建时间

7

update_time

timestamp

更新时间

表4.2  registered_user(注册用户)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

registered_user_id

int

注册用户ID

2

user_name

varchar

64

用户姓名

3

user_gender

varchar

64

用户性别

4

users_mobile_phone

varchar

16

用户手机

5

examine_state

varchar

16

审核状态

6

user_id

int

用户ID

7

create_time

datetime

创建时间

8

update_time

timestamp

更新时间

表4.3  online_consultation(在线咨询)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

online_consultation_id

int

在线咨询ID

2

registered_user

int

注册用户

3

user_name

varchar

64

用户姓名

4

business_user

int

商家用户

5

advisory_title

varchar

64

咨询标题

6

consulting_category

varchar

64

咨询类别

7

consulting_content

text

65535

咨询内容

8

reply_content

text

65535

回复内容

9

create_time

datetime

创建时间

10

update_time

timestamp

更新时间

表4.4  order(订单)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

order_id

int

订单ID

2

order_number

varchar

64

订单号

3

goods_id

mediumint

商品ID

4

title

varchar

255

商品标题

5

img

varchar

255

商品图片

6

price

double

价格

7

price_ago

double

原价

8

num

int

数量

9

price_count

double

总价

10

norms

varchar

255

规格

11

type

varchar

64

商品分类

12

contact_name

varchar

32

联系人姓名

13

contact_email

varchar

125

联系人邮箱

14

contact_phone

varchar

11

联系人手机

15

contact_address

varchar

255

收件地址

16

postal_code

varchar

9

邮政编码

17

user_id

int

买家ID

18

merchant_id

mediumint

商家ID

19

create_time

timestamp

创建时间

20

update_time

timestamp

更新时间

21

description

varchar

255

描述

22

state

varchar

16

订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成

23

remark

text

65535

订单备注

24

delivery_state

varchar

16

发货状态:未配送,已配送

25

vip_discount

double

折扣

表4.5  product_information(产品信息)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

product_information_id

int

产品信息ID

2

business_user

int

商家用户

3

product_name

varchar

64

产品名称

4

product_variety

varchar

64

产品品种

5

product_origin

varchar

64

产品产地

6

hits

int

点击数

7

collect_len

int

收藏数

8

comment_len

int

评论数

9

recommend

int

智能推荐

10

cart_title

varchar

125

标题

11

cart_img

text

65535

封面图

12

cart_description

varchar

255

描述

13

cart_price_ago

double

原价

14

cart_price

double

卖价

15

cart_inventory

int

商品库存

16

cart_type

varchar

64

商品分类

17

cart_content

longtext

4294967295

正文

18

cart_img_1

text

65535

主图1

19

cart_img_2

text

65535

主图2

20

cart_img_3

text

65535

主图3

21

cart_img_4

text

65535

主图4

22

cart_img_5

text

65535

主图5

23

create_time

datetime

创建时间

24

update_time

timestamp

更新时间

表4.6  push_information(推送信息)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

push_information_id

int

推送信息ID

2

push_title

varchar

64

推送标题

3

registered_user

int

注册用户

4

user_name

varchar

64

用户姓名

5

push_type

varchar

64

推送类型

6

push_time

datetime

推送时间

7

push_content

text

65535

推送内容

8

create_time

datetime

创建时间

9

update_time

timestamp

更新时间

表4.7  logistics_delivery(物流配送)

编号

字段名

类型

长度

是否非空

是否主键

注释

1

logistics_delivery_id

int

物流配送ID

2

order_number

varchar

64

订单号

3

product_name

varchar

64

商品名称

4

purchase_quantity

varchar

64

购买数量

5

total_transaction_amount

double

交易总额

6

the_date_of_issuance

date

发货日期

7

delivery_number

varchar

30

配送订单

8

ordinary_users

int

普通用户

9

shipping_address

varchar

64

收货地址

10

delivery_status

varchar

64

配送状态

11

signing_status

varchar

64

签收状态

12

recommend

int

智能推荐

13

contact_name

varchar

255

联系人名字

14

merchant_id

int

商家id

15

create_time

datetime

创建时间

16

update_time

timestamp

更新时间

第五章    系统实现

5.1 注册用户功能实现

5.1.1  用户注册模块

用户可以通过注册功能创建个人账户,便于使用系统提供的各项服务。用户在注册界面,填写用户名、密码、邮箱、手机号等基本信息,点击“注册”按钮,系统进行数据校验,若信息有效,则创建账户。界面如下图所示。

图5.1  用户注册界面

5.1.2 用户登录模块

用户通过登录功能访问其个人账户,享受个性化的服务。用户需在登录界面输入已注册的用户名或邮箱及密码进行登录。用户成功登录后,系统将用户引导至首页,显示个性化内容。若登录失败,系统会提示错误信息(如用户名或密码错误)。界面如下图所示。

图5.2  用户登录界面

5.1.3 首页模块

用户登录系统后首先进入首页界面,该界面主要提供系统功能导航和系统重要信息概览和推荐信息(根据协同过滤优先推荐购买过的同类型产品),包括可查看轮播图、公告信息等内容;并提供在线咨询、产品信息等系统子功能链接入口。界面如下图所示。

图5.3  首页界面

5.1.4 在线咨询模块

当用户点击首页的“在线咨询”时,可输入咨询内容,向管理员或商家进行咨询,由对应人员在后台处理回复。界面如下图所示。

图5.4  在线咨询界面

5.1.5 产品信息模块

当用户点击首页的“产品信息”时,可搜索和浏览所有的产品信息,进入详情页可评论(购买后才可发表评论)、收藏产品信息,并提供客服、加入购物车、立即购买操作。界面如下图所示。

图5.5   产品信息界面

5.1.6 我的模块

“我的”模块主要提供包括基本信息、我的订单、收货地址、收藏、在线咨询、推送信息、订单配送等子功能管理操作,注册用户可根据需求对自己各类信息进行管控和处理。界面如下图所示。

图5.6  我的界面

5.1.7 我的订单模块

派遣信息子模块展示用户的待付款、已付款、已取消等订单信息,支持管理订单信息,提供查询和删除操作,支持支付待付款订单,或取消订单。界面如下图所示。

图5.7  我的订单界面

5.2 商家用户功能实现

5.2.1 在线咨询管理模块

商家用户可搜索和浏览自己接收的在线咨询信息,支持进入详情页回复咨询信息。界面如下图所示。

图5.8  在线咨询回复界面

5.2.2 商城管理模块

商家用户可管理自己的商城信息,提供包括产品信息、分类列表、订单列表、订单配送等商城管理子功能。支持上架、下架和更新产品信息,进行分类管理;可处理订单,更新配送信息,跟踪和更新物流签收情况。界面如下图所示。

图5.9  产品信息添加界面

5.3 管理员功能实现

5.3.1 后台首页模块

管理员登录系统后首先进入后台首页界面,该界面主要提供系统信息概览和数据统计分析图表,包括商品销售金额统计、商品销售数量统计等图表。界面如下图所示。

图5.10  后台首页界面

5.3.2 在线咨询管理模块

管理员可对所有在线咨询信息进行管理,实现增改删查操作,提供关键字搜索,支持进入详情页回复咨询。界面如下图所示。

图5.11  在线咨询管理界面

5.3.3 推送信息管理模块

管理员可管理所有推送信息,进行添加、删除、更新和查询等操作。界面如下图所示。

图5.12  推送信息管理界面

5.3.4 商城管理模块

管理员可管理包括产品信息、分类列表、订单列表、订单配送等商城信息。支持上架、下架和更新产品信息,进行分类管理;可处理订单,跟踪和更新物流签收情况。界面如下图所示。

图5.13  商城管理界面

第六章    系统测试

6.1 测试目的

测试的主要目的是确保系统的功能和性能满足预期的需求,同时识别和修复潜在的缺陷。通过系统测试,可以验证各个功能模块的正确性和稳定性,确保系统在不同使用场景下的表现符合设计要求。测试目的包括确认系统功能的完整性、验证数据处理的准确性、评估系统的性能和安全性。测试还可以提高用户满意度,保证用户在使用系统时获得流畅和可靠的体验。通过全面的测试,可以降低后期维护成本,减少系统上线后出现故障的风险,从而保障系统的长期稳定运行。

6.2 测试用例

在本系统中,测试方法主要依赖于测试用例的设计与执行。测试用例是根据系统需求文档编写的,覆盖所有功能模块及其边界情况。每个测试用例包含输入数据、预期结果和实际结果的对比,以验证系统的功能是否按预期工作。

用户注册功能测试用例表是用来验证用户能否成功注册成为系统用户的测试用例。用户注册功能测试用例如下表所示。

表6.1  用户注册功能测试用例

测试描述

测试用例

预期结果

结论

正常用户注册

根据提示输入完整正确的注册信息并点击注册

注册成功,跳转至登录页面

与预期一致

注册时用户名已存在

输入已存在的用户名

提示用户名已存在

与预期一致

注册时邮箱格式错误

输入无效的邮箱格式

提示邮箱格式错误

与预期一致

注册时必填信息未填写

注册信息未填写完整

提示请输入完整信息

与预期一致

用户登录功能测试用例表是用来验证用户能否成功登录成为系统用户的测试用例。用户登录功能测试用例如下表所示。

表6.2  用户登录功能测试用例

测试描述

测试用例

预期结果

结论

正常用户登录

输入正确的用户名和密码

登录成功,跳转至系统首页

与预期一致

登录时用户名错误

输入错误的用户名

提示用户名或密码错误

与预期一致

登录时密码错误

输入错误的密码

提示用户名或密码错误

与预期一致

在线咨询管理功能测试用例表是用来验证注册用户、商家用户和管理员能否正确完成在线咨询的测试用例。在线咨询管理功能测试用例如下表所示。

表6.3  在线咨询管理功能测试用例

测试描述

测试用例

预期结果

结论

在线咨询查看功能测试

打开在线咨询页面

页面正常加载,显示在线咨询列表及操作选项

与预期一致

在线咨询搜索功能测试

输入关键字搜索特定在线咨询内容

目标在线咨询成功显示在界面

与预期一致

在线咨询添加功能测试

点击添加在线咨询,输入添加内容并提交

成功加载到在线咨询添加界面,信息输入并保存添加成功

与预期一致

在线咨询修改功能测试

选择修改在线咨询内容,输入修改内容并提交

加载到目标在线咨询编辑界面,信息输入并保存更新成功

与预期一致

在线咨询删除功能测试

选择在线咨询内容,点击删除按钮

在线咨询成功从在线咨询列表中删除

与预期一致

在线咨询回复功能测试

选择恢复在线咨询内容,更新回复内容并提交

加载到目标在线咨询回复界面,信息输入并保存更新成功

与预期一致

推送信息管理功能测试用例表是用来验证管理员能否正确管理推送信息的测试用例。推送信息管理功能测试用例如下表所示。

表6.3  推送信息管理功能测试用例

测试描述

测试用例

预期结果

结论

推送信息查看功能测试

打开推送信息管理页面

页面正常加载,显示推送信息列表及操作选项

与预期一致

推送信息搜索功能测试

输入关键字搜索特定推送信息内容

目标推送信息成功显示在界面

与预期一致

推送信息添加功能测试

点击添加推送信息,输入添加内容并提交

成功加载到推送信息添加界面,信息输入并保存添加成功

与预期一致

推送信息修改功能测试

选择修改推送信息内容,输入修改内容并提交

加载到目标推送信息编辑界面,信息输入并保存更新成功

与预期一致

推送信息删除功能测试

选择推送信息内容,点击删除按钮

推送信息成功从推送信息列表中删除

与预期一致

产品信息管理功能测试用例表是用来验证管理员或商家用户能否正确管理产品信息内容的测试用例。产品信息管理功能测试用例如下表所示。

表6.5  产品信息管理功能测试用例

测试描述

测试用例

预期结果

结论

产品信息查看功能测试

打开产品信息管理页面

页面正常加载,显示产品信息列表及操作选项

与预期一致

产品信息搜索功能测试

输入关键字搜索特定产品信息内容

目标产品信息成功显示在界面

与预期一致

产品信息添加功能测试

点击添加产品信息,输入添加内容并提交

成功加载到产品信息添加界面,信息输入并保存添加成功

与预期一致

产品信息修改功能测试

选择修改产品信息内容,输入修改内容并提交

加载到目标产品信息编辑界面,信息输入并保存更新成功

与预期一致

产品信息删除功能测试

选择产品信息内容,点击删除按钮

产品信息成功从产品信息列表中删除

与预期一致

订单管理功能测试用例表是用来验证注册用户、商家用户和管理员能否成功完成订单操作的测试用例。订单管理功能测试用例表如下表所示。

表6.6 订单功能测试用例

测试项

测试用例

预期结果

结论

订单创建功能测试

用户打开目标产品信息页面点击立即购买

页面正常加载,并成功进入订单创建界面

与预期一致

订单内容输入功能测试

用户填写输入订单内容,点击提交

信息成功输入并保存页面提示信息提交成功

与预期一致

订单支付功能测试

用户打开订单管理页面,点击支付并确认支付

支付页面正常加载,提示支付成功

与预期一致

订单内容查看功能测试

管理员或商家用户打开订单管理页面

页面正常加载,显示订单列表及操作选项

与预期一致

订单删除功能测试

管理员或用户选择订单信息,点击删除按钮

产品信息成功从订单列表中删除

与预期一致

6.3 测试结论

通过对用户注册、用户登录、在线咨询管理、推送信息管理、产品信息管理、订单管理等核心功能的测试,所有关键功能模块均能按照预期工作,系统主要业务逻辑和操作无误。用户能够成功注册并登录系统实现各项操作,可浏览发布的产品信息,实现立即购买操作,支付和管理自己的订单信息,并顺利向商家发送在线咨询信息。商家用户可快速上下架产品信息,处理用户的订单,回复用户在线咨询信息,管理员可以高效管理和维护系统各类信息。同时在测试过程中未发现明显的用户体验问题,所有操作均能够顺利完成且反馈及时准确。同时,系统能够在不同操作下保持稳定运行,未出现异常崩溃或数据丢失现象。

结  语

本文基于SpringBoot技术设计并实现了一个高效便捷的助农产品展销系统,旨在解决传统助农产品展销管理中信息不透明、操作繁琐及用户互动性差等问题。通过对国内外助农电商系统发展现状的分析,本文总结了当前领域的研究情况和痛点,并提出了系统的设计目标。系统采用前后端分离架构,后端使用SpringBoot框架实现业务逻辑,前端基于Android使用uni-app技术构建用户界面,数据库选用MySQL进行数据存储。系统功能涵盖注册用户模块、商家用户模块和管理员模块等三大部分,注册用户可通过平台快速获取和选择产品,实现客服资讯、立即购买及加入购物车等操作,支持跟踪配送信息和接收推送内容。商家用户可以高效地管理自己的商品内容,上下架产品,处理订单,更新配送信息,并可快速响应回复咨询。管理员则负责管理和更新系统各类信息等操作,处理系统请求,保证系统正常运转。通过功能测试,系统各项功能均运行正常,达到了预期设计目标。

系统的实现为助农产品展销管理提供了一个高效、透明且用户友好的解决方案。通过优化信息共享流程和简化管理操作,系统显著提升了用户体验和管理效率。同时,系统的模块化设计和可扩展性为未来功能升级提供了便利。测试结果表明,系统在功能完整性、操作流畅性及数据安全性方面均表现良好。未来,可进一步引入推荐算法、人工智能和区块链技术,以增强系统的智能化和数据可信度。本文的研究为助农产品展销领域的数字化转型提供了参考,具有一定的理论价值和实践意义。

参考文献

  1. 张帅.计算机软件Java编程特点与技术探究[J].科技资讯,2024,22(17):23-25.DOI:10.16661/j.cnki.1672-3791.2404-5042-5333.
  2. 尹应荆.JAVA编程语言在计算机软件开发中的应用[J].石河子科技,2023,(05):45-47.
  3. 郭甲天,陈婷,向阳.一种基于SpringBoot框架校园宿舍管理系统的设计与实现[J].电脑知识与技术,2024,20(07):37-40.DOI:10.14004/j.cnki.ckt.2024.0444.
  4. 王志亮,纪松波.基于SpringBoot的Web前端与数据库的接口设计[J].工业控制计算机,2023,36(03):51-53.
  5. 张玮,廖若飞.基于uni-App的小程序开发技术路线及系统研究[J].无线互联科技,2024,21(22):41-44.
  6. 白鱼秀,郑欢欢.基于Android的农产品信息系统的设计与实现[J].电子制作,2022,30(24):46-49.DOI:10.16589/j.cnki.cn11-3571/tn.2022.24.015.
  7. 王希,戴靓婕.MySQL数据库技术在Web动态网页设计中的运用研究[J].软件,2024,45(07):77-79.
  8. 李艳杰.MySQL数据库下存储过程的综合运用研究[J].现代信息科技,2023,7(11):80-82+88.
  9. 王志涛.基于B/S模式的项目管理信息系统开发与设计[J].办公自动化,2024,29(24):84-86.
  10. 张丹丹,李弘.基于B/S架构的办公管理系统设计与开发[J].铁路通信信号工程技术,2024,21(09):44-48+106.
  11. 李金忠,胡志明,陈建钢,等.基于SpringBoot和Uni-App框架的自习室平台的设计与实现[J].河北水利电力学院学报,2024,34(02):77-82.DOI:10.16046/j.cnki.issn2096-5680.2024.02.014.
  12. Xu N ,Wu J .Analysis of the Idea of Promoting Rural Economic Development through Live Broadcast of E-Commerce Selling Agricultural Products Based on New Media Perspective[J].Agricultural & Forestry Economics and Management,2025,8(1):
  13. 陆向艳,柳明洲.基于SpringBoot的农产品溯源系统的设计与实现[J].电脑知识与技术,2024,20(26):35-36+39.DOI:10.14004/j.cnki.ckt.2024.1351.
  14. 黄灿辉,王宁.电子商务在农产品销售中的应用与挑战[J].河南农业,2024,(13):14-15.DOI:10.15904/j.cnki.hnny.2024.13.005.
  15. 彭正锋.基于微信小程序的社区生鲜农产品销售平台的设计与实现[D].云南农业大学,2024.
  16. 邹筱,刘鹏德,张中隆.物流平台农产品助农销售模式研究[J].贵州商学院学报,2024,37(02):43-57.
  17. 唐双林.基于Vue和SpringBoot架构的智能推荐农产品团购销售系统[D].重庆三峡学院,2023.DOI:10.27883/d.cnki.gcqsx.2023.000390.
  18. 李剑辉.基于Android的爱心助农公益平台系统设计与实现[D].仲恺农业工程学院,2022.DOI:10.27700/d.cnki.gzcny.2022.000223.
  19. 焦自程.基于uni-app框架的购物商城小程序的设计与实现[J].信息与电脑(理论版),2022,34(08):168-170.
  20. Jia B ,Yu Z ,Zhao Y .Design of online service reputation system for agricultural products sales platform based on P2P network[J].Acta Agriculturae Scandinavica, Section B — Soil & Plant Science,2021,71(4):284-294.
  21. 刘科课.基于Android的生鲜农产品商城设计[D].浙江海洋大学,2020.DOI:10.27747/d.cnki.gzjhy.2020.000313.

致  谢

在本项目的实施过程中,许多人给予了我无私的支持和帮助,令我深感感谢。

我要衷心感谢我的指导老师。不仅在项目的初期提供了宝贵的建议,还在整个过程中给予了我细致入微的指导。专业知识和严谨态度始终激励着我,让我在遇到困难时能够保持信心,继续前行。每一次的讨论都让我对项目有了更深刻的理解,帮助我克服了许多技术难题。

我也要感谢参与用户测试的同学们。你们的反馈和建议为我们系统的优化提供了重要的参考,帮助我们更好地理解用户需求。正是因为有了你们的参与,我们才能够不断改进,提升系统的用户体验。感谢所有支持我的家人和朋友。你们的理解与鼓励让我在项目的紧张时刻始终能够保持积极的心态,成为我前进的动力。每当我遇到挑战时,想到你们的支持,我就能够重新振作,继续努力。最后,我要感谢所有在我职业发展过程中给予帮助的人。每一次的交流与分享都让我受益匪浅,拓宽了我的视野,让我在这条道路上走得更加坚定。

项目的完成不仅是我个人努力的结果,更是许多人共同支持与协作的成果。在此,我再次向所有关心和支持我的人表达衷心的感谢。希望未来我们能够继续携手,共同创造更多的价值和成就。

附  录A  

系统核心代码设计

连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:

server:

  port: 5000

  servlet:

    context-path: /api

spring:

  mvc:

    static-path-pattern: /upload/**

  resources:

    static-locations: file:此处填写地址/project93355/server/src/main/resources/static

datasource:    

jdbc:mysql://127.0.0.1:3306/projectxxxxx?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8

    username: root

    password: root

    driver-class-name: com.mysql.cj.jdbc.Driver

    type: com.alibaba.druid.pool.DruidDataSource

  jackson:

    property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES

    default-property-inclusion: ALWAYS

    time-zone: GMT+8

    date-format: yyyy-MM-dd HH:mm:ss

  servlet:

    multipart:

      max-file-size: 500MB

      max-request-size: 500MB

  redis:

    host: 127.0.0.1

    port: 6379

    password:

    database: 2

    lettuce:

      pool:

        max-idle: 30

        min-idle: 10

        max-active: 30

        max-wait: 10000

mybatis-plus:

  mapper-locations: classpath*:mapper/*.xml

  type-aliases-package: com.project.demo.entity

  configuration:

    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    use-column-label: true

    map-underscore-to-camel-case: false

    lazy-loading-enabled: true

    aggressive-lazy-loading: false

use-generated-keys: true

项目采用三层架构controller(每一个实体对应一个controller),entity(项目表实体),service

,Controller 均继承自BaseController,注入两个对象,一个是实体类(以Auth为例),另一个是其AuthService:

@RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

Controller用于spring控制请求的地址

新增一条数据,通过post传入一个json对象,然后经过request.getReader(),最后经过readBody()转成一个Map,含有String和Object,key用的是字段名,Object存放数据,最终得到Map,insert用拼装sql,读取body,组装成一个insert对象,runCountSql()语句,代码如下:

    @PostMapping("/add")

    @Transactional

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

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

        return success(1);

    }

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

    service.insert(map);

     return success(1);

 }

修改一个数据,原理与add基本一致,不同点在于通过readConfig()读取关键字,以及通过readQuery()获取URL后面?指定位置的标识,转成Map对象后,执行update操作,同样通过拼接的sql语句执行,执行过程读取query,toWhereSql()语句完成数据库操作,body为修改对象的值,代码如下:

    @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);

    }

删除一条数据,通过readQuery(),获取URL后面的对象地址,删除FROM具体的table,query删除查询FindConfig语句,代码如下:

    @RequestMapping(value = "/del")

    @Transactional

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

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

        return success(1);

    }

    public void delete(Map<String,String> query,Map<String,String> config){

        QueryWrapper wrapper = new QueryWrapper<E>();

        toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);

        baseMapper.delete(wrapper);

        log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());

    }

通过请求的参数获取一条数据,通过readQuery(),获取URL后面的对象地址,查询FindConfig语句,select筛选Map对象,FIELD为查询字段,未传输的情况下传入“*”,代码如下:

    @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);

        }

    }

通过请求的参数获取列表数据,代码如下:

    @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);

    }

获取某个组下面的数量,代码如下:

    @RequestMapping(value = {"/count_group", "/count"})

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

        Integer value= service.selectSqlToInteger(service.groupCount(service.readQuery(request), service.readConfig(request)));

        return success(value);

    }

获取某个组下面的总计值,代码如下:

    @RequestMapping(value = {"/sum_group", "/sum"})

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

        Integer value = service.selectSqlToInteger(service.sum(service.readQuery(request), service.readConfig(request)));

        return success(value);

    }

图片/文件/视频等的上传方法通过MultipartFile,代码如下:

   @PostMapping("/upload")

    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {

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

        if (file.isEmpty()) {

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

        }

        try {

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

            String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";

            File targetDir = new File(filePath);

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

                if (targetDir.mkdirs()) {

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

                } else {

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

                }

            }

            String fileName = file.getOriginalFilename();

            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, "上传失败");

    }

注册页UserController.java,传入user对象,并将"user_id"、 "state"、 "user_group"、"login_time"、"phone"、"phone_state"、 "username"、"nickname"、"password"、"email"、"email_state"、"avatar"、"create_time"输入,重点是 "username"、"nickname"、"password"必须输入,通过获取username,数据库查询是否有该用户,如果存在,则提示“用户已存在”,否则执行将UserId置为空(数据库表中该字段已设置自动递增),代码如下:

    /**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

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

        Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));

        query.put("username",user.getUsername());

        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);

}     

注册页password则使用了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;

}

登录页,首先传入"username"、"email"、"phone"、"password",用户可通过用户名、邮箱、手机号进行登录,通过判断resultList来确定查询结果,然后执行查询用户组UserGroup,用户组里面不存在,依然报“用户不存在”,执行完以上代码,最后涉及到用户带有“审核”的,会查询examine_state(用户的审核状态),数据库表user_group中含有source_table和source_field进行查询,以上步骤完成,对输入的密码进行存储Token到数据库,匹对账号和密码,数据库中的AccessToken为令牌,用于身份认证,其代码如下:

 /**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @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;

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

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

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

        }

        User byUsername = (User) resultList.get(0);

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

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));

        if (groupList.size()<1){

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

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());

            if (res==null){

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

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            Duration duration = Duration.ofSeconds(7200L);

            redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

    }

找回密码,接收用户输入的用户名、密码、验证码,并进行条件判断,代码如下:

    /**

     * 找回密码

     * @param form

     * @return

     */

    @PostMapping("forget_password")

    public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {

        JSONObject ret = new JSONObject();

        String username = form.getUsername();

        String code = form.getCode();

        String password = form.getPassword();

        // 判断条件

        if(code == null || code.length() == 0){

            return error(30000, "验证码不能为空");

        }

        if(username == null || username.length() == 0){

            return error(30000, "用户名不能为空");

        }

        if(password == null || password.length() == 0){

            return error(30000, "密码不能为空");

        }

        // 查询用户

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

        query.put("username",username);

        List list = service.selectBaseList(service.select(query, service.readConfig(request)));

        if (list.size() > 0) {

            User o = (User) list.get(0);

            JSONObject query2 = new JSONObject();

            JSONObject form2 = new JSONObject();

            // 修改用户密码

            query2.put("user_id",o.getUserId());

            form2.put("password",service.encryption(password));

            service.update(query, service.readConfig(request), form2);

            return success(1);

        }

        return error(70000,"用户不存在");

    }

修改密码,通过请求data,获取旧密码,并将新密码重新赋值,期间都是需要通过加密,代码如下:

    /**

     * 修改密码

     * @param data

     * @param request

     * @return

     */

    @PostMapping("change_password")

    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){

        // 根据Token获取UserId

        String token = request.getHeader("x-auth-token");

        Integer userId = tokenGetUserId(token);

        // 根据UserId和旧密码获取用户

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

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

        query.put("user_id" ,String.valueOf(userId));

        query.put("password" ,service.encryption(o_password));

        int count = service.selectBaseCount(service.count(query, service.readConfig(request)));

        if(count > 0){

            // 修改密码

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

            form.put("password",service.encryption(data.get("password")));

            service.update(query,service.readConfig(request),form);

            return success(1);

        }

        return error(10000,"密码修改失败!");

}

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐