基于Node.js与Vue的农产品可视化销售平台设计与实现

基于Node.js与Vue的农产品可视化销售平台设计与实现

**技术说明:**本文围绕《基于Node.js与Vue的农产品可视化销售平台设计与实现》进行技术和设计过程整理,重点关注需求分析、系统架构、数据建模、功能实现和测试验证等内容。内容用于软件工程和信息系统设计复盘,不涉及商业推广或服务宣传。

摘 要

随着农业信息化进程以加速态势推进,针对传统农产品销售模式所存诸如供需对接不畅、信息透明度不足这类痛点,本研究对一个基于现代Web技术,能实现可视化的农产品销售平台进行了设计并予以实现;该研究采用B/S架构体系,借由VUE前端框架与Node.JS后端技术去构建分层式系统架构,还结合MySQL关系型数据库达成数据的高效存储与访问。系统将数据可视化组件创新性整合,以使平台能够把销售数据、统计分析以及产品溯源等关键信息直观展示,达成农产品流通全流程的可视化监控;研究着重对多源异构数据处理、用户画像精准建模、跨平台服务接口标准化等关键技术实现突破,开发出面向农户、消费者、管理方的三端协同业务系统,其中,农户端给予产品信息智能采集与溯源信息上传的支持,消费者端提供个性化推荐与可视化选购服务,管理端集成大数据分析仪表盘与智能决策支持模块。经实际应用测试表明,有效构建起"生产 - 流通 - 消费"数字化闭环,研究成果为破解农产品销售渠道狭窄、市场信息不对称等难题提供创新解决方案,通过构建"技术赋能 + 模式创新"双轮驱动机制,为推进农业产业数字化转型给出可复制的实践范式。

关键词:Node.JS;农产品;销售平台;B/S

ABSTRACT

With the process of agricultural informatization being acceleratedly promoted, this study which aims at those pain points like the poor supply - demand matching and the insufficient information transparency existing in the traditional agricultural product sales model, has designed and implemented a visualized agricultural product sales platform that is based on modern Web technology while adopting the B/S architecture system and building, by means of the VUE front - end framework and Node, a hierarchical system architecture.JS back-end technology, and combines the MySQL relational database to achieve efficient data storage and access. The system innovatively integrates data visualization components, enabling the platform to intuitively display key information such as sales data, statistical analysis, and product traceability, and realizes the visualized monitoring of the whole process of agricultural product circulation.The research which puts its emphasis on the aspect of breaking through some key technologies that include multi - source heterogeneous data processing with about 4 - 15 words per phrase, accurate user profile modeling as well as the standardization of cross - platform service interfaces, is engaged in the development of a three - terminal collaborative business system which is designed for farmers, consumers and management parties. The farmer terminal supports intelligent collection of product information and uploading of traceability information, the consumer terminal provides personalized recommendation and visualized purchasing services, and the management terminal integrates a big data analysis dashboard and an intelligent decision-making support module. Practical application tests, which play a crucial role in validating the effectiveness, indicate that through a series of processes, it effectively constructs a digital closed loop specifically regarding "production - circulation - consumption", and the research achievements, having been derived from extensive studies, provide an innovative solution aiming at addressing problems including the relatively narrow sales channels of agricultural products as well as the asymmetric market information, and by means of constructing a dual - driven mechanism that combines "technology empowerment + model innovation", it offers a replicable practical paradigm to facilitate the digital transformation within the agricultural industry despite potential challenges and uncertainties yet to be fully explored.

Key words:Node.JS;Agricultural products;Sales platform;B/S

第1章 绪论

伴随信息技术以极为迅猛的速度发展这一态势之下,传统农业处于正面临着涵盖转型升级方面的机遇以及挑战的局面之中,从全球的广阔范围来审视,农产品于生产领域、流通领域以及销售领域的诸多环节,正朝着数字化且智能化以及可视化这些特定的方向逐步地发生着发展与转变,而农产品可视化销售平台的得以出现,其目的在于借助现代信息技术的多样手段,达成提高农产品的流通效率这一目标,推动农业资源朝着优化配置方向前行,进而实现促使农民增收与给予消费者便捷购买这般的双赢良好局面,本论文将会针对基于Node.JS的农产品可视化销售平台在整体架构设计、核心功能模块以及实现方法等诸多方面展开探讨,通过对于该平台从设计直至实现这一过程,期望能够给农产品的销售提供具有创新性的一类新型解决方案,进而推动农业电商得以更好发展,与此同时,为农民与消费者带来更高效并且更便捷的交易体验。

1.1 研究目的和意义

本研究将设计且实现那种以Node.JS技术为基础的农产品可视化销售平台之目的,是用来解决像是传统农产品销售里信息不对称、销售渠道单一以及消费者体验不佳等之类问题。其具体的目标含有构建起高效的农产品销售平台,通过减少中间环节来提高销售效率与农民收入;借助前端可视化技术给予丰富且直观的产品展示,进而增强消费者的购买意愿跟满意度;引入区块链技术又或者先进溯源系统,使得农产品自生产至销售的每个环节都能够被追溯,以此增加消费者对于产品质量的信任度;给农民提供一个用以展示和销售农产品的全新渠道,以拓宽农产品市场并促进农村经济发展;运用大数据分析技术去实现智能化的运营管理,从而提高平台运营效率和服务质量;建立起用户评价体系及社交分享功能,增强用户彼此间的互动并且营造出积极向上的社区氛围;探索关于绿色种植与有机农产品的推广工作,推动农业可持续发展,为消费者给出健康环保的选择。通过对这些目标的达成,本设计不但解决了传统销售方面的问题,推动农业朝着现代化方向发展,而且提高消费者信任度,优化资源配置情况,强化社区互动效果,促进可持续发展进程,为推动我国农业现代化奉献力量。

1.2 国内外研究现状
1.2.1 国内研究现状

随着网络工程技术以迅猛之势以及互联网技术如飞速般的快速发展,那农产品出口所呈现出的前景处于日益广阔的状态,而基于这样一种已然形成的趋势,农产品销售系统的实施便如顺应局势般地应运而生了。在2019年的时候,孔令于那本名为《基于Java的掌上农产品销售系统》之中提出了一种掌上农产品销售系统,此系统是基于Java技术打造起来的,且选用Eclipse作为开发工具,还将MySQL当作数据库来使用,其前端页面则依靠JSP + CSS + JS技术来进行开发打造。该系统达成了诸如用户登录、注册这类以及购物车管理、订单信息管理还有农产品信息管理等多项功能,借由这一系统,传统那种单一的销售方式由此发生改变,销售渠道也得到了一定程度的拓展。掌上农产品交易凭借其高效便捷的特性显著提升了用户所体验到的购物感受,进而使得消费者能够随时去了解到最新的农产品市场行情,并且可以轻松获取到多样化的高质量农产品。2023年时,被知晓为唐双林的人在那篇名为《基于Vue和SpringBoot架构的智能推荐农产品团购销售系统》之中,成功开发出这样一套依据团购模式来运行的农产品电商销售系统;此系统前端所选用的乃是基于MVVM设计模式下的Vue渐进式框架,而后端则使用基于Java所构建的SpringBoot框架,就连数据库方面也是采用MySQL;这一系统达成了农产品浏览还有购买、农产品模糊查询以及订单管理等一系列功能,借由智能推荐算法,该系统得以更为精准地给用户去推荐其喜爱的农产品,实现了针对同一社区范围内销售的农产品实施统一配送,还去除掉传统销售过程当中的多层中间商,最终达成消费者、商家和网站三方共赢的良好局面。到了2024年,王宇鹏于《农产品销售数据可视化平台设计及实现》这一内容里,进一步对平台的设计跟实现进行优化,其提出去开发一个基于数据可视化原理的农产品销售平台,此平台前端运用Vue.js框架,后端使用Spring Boot框架,数据库同样选取MySQL,这个平台不仅提升销售效率、增强市场透明度,而且借助数据驱动的决策支持,助力农民优化种植结构,对绿色种植与有机农产品予以推广,从而推动农业可持续发展进程。此外,由平台所提供的具备用户友好特征以及丰富功能属性的界面,以一种显著的方式,不仅对用户的购物体验起到了增强的作用,而且还提升了用户在满意度与忠诚度方面的表现。于2020年,胡文强在其名为《农产品销售信息系统的设计与实现》的设计当中,设计出了一个基于浏览器/服务器(B/S)这种特定架构形式的农产品销售信息系统,并且对该销售管理系统所具有的具体需求展开了深入的分析,同时采用实体联系图以及数据流图这两种不同的方法,针对系统里的数据结构以及业务流程进行了详细的建模工作,另外还对系统的应用架构设计做出了详细的介绍,而这些全部内容,均为与之类似的信息系统在进行设计时提供了具备宝贵性质的参考与借鉴意义。贾德润南等人在《农产品社交电商推荐系统的设计》一文中,使用了Google开源的Flutter工具来开发一个集成了电子商务、社交互动和信息传播功能的农产品电商平台。该平台通过结合基于内容的推荐和基于矩阵分解的推荐技术,实现了对农产品商品页面及新闻资讯页面的个性化推荐优化。这项工作为设计类似的社交电商平台提供了重要的参考和借鉴价值。

1.2.2 国外研究现状

国外学者早在2018年就对农产品销售系统开发方面开展了研究。当时国外电子商务销售模式在农产品中的应用还不普遍,但随着农业电子商务网站增加,网上销售成为了国家农业经济发展的驱动力。2018年,Delima R, Santoso H B, Aditya G H, etal.在《Development of sales modules for agricultural e-commerce using dynamic system development method》中提出开发了一个农产品电子商务销售系统,该系统使用PHP和HTML5作为网站编程语言,MySQL作为数据库,Sublime工具作为程序代码编辑器,以及XAMPP控制面板软件系统实现了用户管理,商品管理,商品交易管理等功能。随着系统实施,农产品电子商务的持续增加为农业打造了与电子商务相关的新机会,刺激了农民的销售积极性,降低了农产品销售过程中的运营成本,为消费者节省了大量的购物时间。2021年,Wibowo A, Delima R, Rachmat C A.在《Designing and Developing an Agricultural Product Sales Application Catalog with a Hybrid Application Development Framework》中提出通过使用混合方法开发了一个基于移动的农产品销售应用程序,该应用程序使用Google制作的混合框架Flutter构建,MySQL作为数据库,通过PHP程序设计语言与数据库建立链接。该应用实现了用户管理,购物车,商品管理等功能。该被设计出来的事物凭借对满足移动应用程序以及移动设备平台那具备的多样性的达成,促使农民所采用的进行农产品销售的方式呈现出多样化情形,且这一应用程序的实施以直接的方式实现了农民销售农产品在数量方面的增加,同时也让购买者在选择和订购所需农产品这件事上变得更为容易。在2024年的时候,由Daoud Urdu等人在《Aligning Interoperability Architectures for Digital Agri - Food Platforms》之中,对数字农业食品平台所涉及的互操作性架构这一关键问题展开了深入探讨,他们明确指出,互操作性作为农业食品数字化进程里至关重要的关键挑战之一,必须与欧洲数据战略达成一致的契合,进而实现对泛欧合作以及创新的有力促进,并达成成本的降低与市场竞争的推动。此项研究不单单有助于对当前农业数字化平台互操作性处于何种现状予以理解,而且为政策制定者以及行业从业者提供了具备实用价值的相关建议,用于对农业食品系统向数字化转型的推动。

1.3 研究内容

本文所聚焦的乃是设计以及实现这样一个以Node.JS作为基础打造出来的、融入现代化理念的农产品可视化销售平台,此平台采用的是B/S架构,同时结合了HTML5以及Node.JS还有智能推荐相关技术;开发工具选用的是Visual Studio Code这一工具,数据库方面则是运用MySQL来进行管理工作,而主要的测试浏览器选择的是Google Chrome。借助对功能需求以及非功能性需求的详细分析,精心设计出平台的功能结构、智能推荐模型还有数据库架构,其目的在于满足现代农业电商的需求。

平台之中涵盖多个具有核心意义的模块,像是用户登录以及管理、个人和农产品信息管理、农产品展示和销售、订单处理、个性化推荐、评价管理、售后服务、产品溯源、公告发布以及系统用户权限控制。这些模块共同作用为用户提供一个具备便捷性、安全性且高效的在线购物体验,与此同时也为商家给予全面的产品管理和客户服务相关支持。特别要指出的是,平台在性能优化、数据安全还有用户体验等方面均进行了强化操作,比如借助缓存机制来加快响应速度,通过SSL/TLS加密用以确保数据传输安全,利用响应式设计保障跨设备能够有良好的访问效果。总而言之,本设计目标是打造出一个高效且安全、对用户友好的农产品电商平台,从而助力农业电商行业实现健康发展。

第2章 相关技术介绍

2.1 B/S架构

那种被称之为B/S(Browser/Server,也就是浏览器/服务器)的架构,它其实是一种以Web为基石进而构建起来的软件架构模式,在这种模式之下,用户往往是经由浏览器来达成对于服务器上所存在着的应用程序的访问操作的,并且不需要额外去安装具有客户端性质的软件。该架构它有着不少主要的特点,比如像是客户端呈现出轻量化这一特性、具备良好的跨平台性、在部署以及维护方面有着易于操作的优势、能够实现动态交互的效果、具备较高程度的安全性、拥有可扩展性以及获得丰富多样的开发工具以及框架的有力支持。在在线办公系统、电子商务平台这样以及社交网络、教育平台和医疗健康等诸多领域中,B/S架构被广泛地加以应用,依靠其本身所具备的诸多显著优势,已然成为在现代Web应用开发领域里处于主流地位的架构模式,对于各种不管是何种规模的又或者是何种类型的应用场景来说都有一定的适用性。

2.2 Vue框架

Vue,一个以简洁易用和专注视图层为显著特质且广受欢迎的渐进式JavaScript框架,其支持的组件化开发使得开发者能够将应用拆解成诸多小的、具备可重用性的组件,它采用声明式编程以通过模板语法让UI状态与DOM变化的映射显得更为直观,凭借虚拟DOM技术实现渲染性能的提升,并提供双向数据绑定来简化数据模型与视图之间的同步;核心库十分轻量的Vue即便在移动设备上也可高效运行,拥有活跃社区及丰富插件生态系统等优势,十分适合快速搭建响应式强且交互性出色的用户界面,在构建基于Node.JS的农产品可视化销售平台过程中,能被用来快速搭建响应式及交互性强的用户界面、提升用户体验,还可对前端开发流程起到简化作用。

2.3 Node.JS

Node.JS这一运行环境是基于Google Chrome V8 JavaScript引擎所打造的开源且跨平台的JavaScript运行环境,其被设计出来的核心设计理念采用的是事件驱动以及非阻塞I/O模型,凭借这样的设计它能够在处理高并发请求时做到高效运行,尤其是面对大量I/O密集型任务时的表现更显突出,该运行环境允许开发者使用JavaScript这种编程语言去编写服务器端代码,从而将JavaScript的应用范围予以极大扩展,它运用事件循环机制进而能够在等待像文件读写或者网络通信此类I/O操作完成期间还可以继续执行其他任务,由此避免了传统多线程模型中必然会出现的上下文切换开销以及线程阻塞之类的问题。拥有庞大的模块生态系统(NPM),提供丰富的第三方库,可在多种操作系统上运行,适用于快速开发Web服务器、API接口、实时应用和命令行工具等,是现代Web开发的重要组成部分。

2.4 HTML5

HTML5这一被认定为最新的超文本标记语言标准之物,借由引入涵盖语义化标签、多媒体支持、离线存储以及增强的表单控件这类以及图形绘制像Canvas和SVG还有地理位置定位等诸多新特性,进而达成了为网页提供更丰富的内容与功能这般的成果,且以主动简化网页开发流程的方式来被动提升用户体验,与此同时又实现了跨平台兼容性以支持各种设备和浏览器,凭借着这些在竞争中脱颖而出的优势,HTML5已然成为现代Web开发核心技术,为构建那种互动性颇为强且功能十分丰富的网站与应用奠定坚实基础。

2.5 MySQL

MySQL作为被广大使用者因高性能、可靠性、易用性与低成本而广泛青睐的开源关系型数据库管理系统,它所支持的标准SQL语言适用于涵盖从小型网站直至大型企业级应用这般各类场景,其具有关系型数据管理、优化过的查询处理及缓存机制、分布式数据库管理连同集群技术、多层次安全措施、跨平台兼容性以及强大社区支持等众多主要特点,不仅在处理中小型数据方面表现令人瞩目,在复杂后端开发及大型企业高性能应用中也得以适应,无疑是构建数据驱动应用的一种理想之选但句子完整性仅维持在一定程度。

第3章 系统分析

3.1 可行性分析
3.1.1 经济可行性

软件供用户免费下载,并且已经配置好了开发环境。一旦项目顺利实施,将为商家带来显著的工作效率提升,使管理流程更加便捷高效,同时有效节约人力资源成本。对于消费者而言,无需出门便可通过网络轻松购买所需农产品。系统简单花费少,所以从经济上是可行的。

3.1.2 技术可行性

本系统之所以能够得以开发依靠的是结合诸如HTML5这种应用普遍且生态成熟稳定的技术、MySQL数据库这种有着强大数据管理能力以及Vue框架和Node.JS等,被广泛应用且生态成熟稳定的它们不仅在开发与后续维护系统方面可以提供强有力支持,并且相互之间良好的兼容性与集成性使得开发者能迅速搭建一个稳定高效的平台,从技术这个层面来讲其实现是有一定可行性的,不过相关细节或许还需要进一步考量。

3.1.3 操作可行性

本系统采用了B/S架构,确保了用户在浏览购物页面时的直观体验。该系统操作简便,无论是商家操作商品还是用户购物跟随引导就能轻松完成各种操作,因此从操作的角度来看,该系统的可行性非常高。

3.2 功能需求分析

为构建既具高效用户体验又良好的农产品可视化销售平台,从农户、用户以及管理员这三个不同审视系统设计与实现的角度出发,由于每个角色分别有特定需求和操作范围,所以对其功能需求将予以详细阐述。那系统会凭借可视化界面为农户提供全方位支持服务,在确保输入正确账号密码前提下,农户可顺利登录店铺账号,能进行发布和管理农产品信息等操作,诸如设置吸引更多消费者的促销活动;首页展示的最新公告消息,目的是便于农户及时知悉平台动态;于农产品信息管理模块内,产品名称、描述、价格、库存等详细信息可被农户便捷地发布和编辑,同时图片与视频资料能被上传,溯源码得以生成及溯源详情可被填写,使得买家对农产品从种植至收获的全过程追溯成为可能,进而增强产品可信度与吸引力。模块里的库存数据可视化展示,可以直观的呈现各种农产品各类农产品的库存状态,以便更好的对农产品进行管理。订单管理功能支持查看订单详情、确认订单和发货操作,并通过关注买家反馈不断优化服务质量。优惠券管理功能允许农户设定优惠券的额度和有效期限,提供更多福利并丰富平台活动。个人中心则让农户方便地修改个人信息。这一系列直观且易用的功能设计,旨在帮助农户高效管理和推广其农产品,提升在线销售的成功率和服务质量。农户用例图如图3-1所示。

图3-1 农户用例图

系统凭借直观可视化界面为用户供应涵盖全面的支持与服务,于此种情形下,用户需借由输入恰当账号及密码以登录的平台,能够享用涵盖密码找回以及修改的账户安全管理类功能;依据用户购买过往经历与个人偏好而智能实施推荐相应农产品之举的系统,使得用户可对推荐列表开展浏览与筛选操作;具备购物车管理功能的平台,它允许买家能按自身意愿自由添加、删除与调整购物车内商品数量,从而实现方便灵活管理购物清单的目的;支持买家对个人资料查看与编辑、对收货地址等个人信息实施管理的个人中心模块;让用户能够查看如商品详情、订单状态这般详细订单信息,并完成订单提交、支付或取消操作的订单管理功能;使用户可针对已购农产品进行评价与反馈、分享购物体验的评价管理功能;此外,提供产品售后管理及产品溯源服务的平台,让用户可以轻松提交退换货申请、查询售后处理进度,并借助全程溯源信息来保障消费透明度与产品质量;此一系列具备易用性和强大功能的设计,其目的在于提升用户购物体验和满意度,以确保每个环节呈现便捷、透明及高效的状态,至于用户用例图则如图3 - 2所展示那般。

图3-2 用户用例图

系统借助直观可视界面给管理员供应涵盖多方面的支持与管理功能,以此来确保平台得以高效运行及维持服务质量;所有注册用户账户能由管理员管理,这之中包括审核农户所发产品信息使其真实性与合规性得以确保且监控全部订单状态并及时处理异常订单;用户间评价交流也被管理员监控,防止出现不当言论进而维护良好社区环境;同时,管理员可通过直观数据可视化展示完成系统安全维护、数据备份并分析市场趋势以保证平台稳定运行;售后问题方面,买家与农户之间的售后问题由管理员解决来提高客户满意度且确保农户上传溯源信息真实完整增强消费者信任;凭借公告管理功能重要通知能被管理员发布给用户以保持信息透明与及时沟通,这一系列强大可视化管理工具协助管理员执行各项任务提升平台整体运营效率与用户体验,至于管理员用例图则如那图3 - 3所示。

图3-3 管理员用例图

3.3 非功能需求分析

(1)性能与可扩展性

系统会以确保用户请求平均响应时间于高并发情形下也不超2秒这样的方式,来维系其性能的稳定,而这种稳定的达成借助了支持水平扩展的手段,此手段可以使得通过增加服务器节点以处理更多并发用户访问得以实现,从而保证系统稳定性与响应速度,不仅如此,采用诸如Redis这般的内存缓存技术,来对频繁查询的数据读取进行加速,这一操作能够有效减少数据库所承受的压力,朝着实现高效稳定运行以及良好用户体验这一目标迈进。

(2)可靠性与可用性

为确保在部分组件失效情境下系统仍能凭借多节点冗余架构而正常运行以此达成高可用性,系统于设计时在可靠性与可用性方面作出考量;数据库与重要文件会被定期备份,且针对数据完整性与业务连续性,详细的灾难恢复计划得以制定;与此同时,实时监控系统的建立旨在对关键指标加以跟踪,并设置了自动报警机制,凭借此机制以便能及时发现并解决问题,最终实现系统稳定可靠运行这一目标尽管句子完整程度或许有所降低而逻辑复杂程度达至100%。

3.4 业务流程分析

在那具备各类功能构建出的产品可视化销售平台之中,凭借着其完备且合理的布局设计,用户拥有能够轻松浏览涵盖丰富品类的各种农产品相关信息的能力,同时还可以针对自身心仪不已的产品进行评价以及反馈行为,并分享他们独一无二的购物体验过程;而在此平台上,用户不仅可以选择把那些自身感兴趣的产品加入到购物车以便稍后实施购买行动,亦或者直接采取下单购买操作,而且在结算相关流程环节内能够使用商家所提供的优惠券,进而享受更多优惠政策。要是在完成购买之后对所购产品存在不满意的状况,用户便能够借助平台所精心打造的完善售后服务系统提交退款申请或者其他各类售后请求内容。于此同时,农户这一方不但能够对用户所给出的评价进行回复,以增强双方之间的互动程度,而且还能与平台管理员一同对农产品信息以及售后服务进行管理和审核工作,其目的在于确保所有相关内容准确无误并且符合平台预先设定的各项标准要求。上述这种全面的功能设计体系,从结果上看,不仅能够提升用户在整个使用过程里的体验感受,还在一定程度上增强了平台自身所具备的可靠性以及透明度,从而促进买卖双方基于相互信任基础之上的合作关系得以更好发展。其主要业务流程,大致情形如同图3 - 4所展示出来的那样。

图3-4 业务流程图

第4章 系统设计

本系统作为那基于Node.JS所构建起来的农产品可视化销售平台,其前端选用的是Vue框架来进行构建打造,而后端则同样是运用Node.JS去加以实现运转。这个系统被划分成包含农户、买家以及管理员在内的三个角色类别,其能够提供十分全面且覆盖广泛的业务处理相关功能。用户将会被提供便捷的登录服务、获得智能农产品推荐以及拥有高效的购物车管理权限,而该平台还会采用那种基于用户行为以及偏好状况的智能协同推荐算法,以此来达成精准的个性化推荐这一目的。借助Echarts图表工具,平台会把农产品数据、统计分析等关键信息进行直观展示,从而保证订单管理、评价、售后以及系统管理等功能能够实现高效运行状态,最终达到对整个农产品销售流程予以优化,提升用户体验这样的效果。

4.1 系统模块设计

农产品可视化销售平台是从农户、买家和管理员三个角度进行设计,如下功能介绍:

1.农户

农户登录:农户通过账号密码登录平台。支持找回密码和修改密码功能。

农户农产品信息管理:以农户个人名义发布和编辑农产品信息,包括名称、描述、价格、库存等。上传农产品图片和视频资料。并以可视化图表的方式展示自己发布的农产品库存信息情况。

农户优惠卷管理:设置购买农户发布的农产品的促销活动和折扣。

农户订单管理:查看订单详情,包括买家信息、订单状态、支付状态等。确认订单、发货和修改订单状态。可以处理售后相关问题,处理买家的退换货请求,解决买家在使用产品过程中遇到的问题。

农户评价管理:查看买家的评价和反馈。回复处理买家的评价。

产品溯源:上传产品从种植到收获的全过程信息,供买家查询。

2.用户

用户登录这一环节,即买家需凭借账号密码实现对平台的登录操作,而此过程中找回密码功能与修改密码功能皆被系统所支持。农产品智能推荐方面,系统会依据买家往昔的购买历史以及其个人偏好来对农产品展开推荐,且买家能够对推荐列表予以查看并在此基础上进行筛选操作。购物车管理,涵盖了对购物车中商品数量的添加、删除及修改行为,同时也能够查看购物车里面商品所对应的总价。关于修改用户个人信息,这涉及到查看与编辑个人资料以及管理收货地址等相关事宜。个人订单处理模块这部分,可查看包含商品信息、订单状态、物流信息等详情的订单,还可以执行提交订单、支付订单以及取消订单操作,亦能提交退换货申请并对售后进度进行查询。产品评价环节,指的是针对所购买的农产品作出评价与反馈的行为。产品溯源,即为能够查询所购买农产品相关溯源信息的功能。

3.管理员

用户管理:管理全平台所有注册用户及农户的信息。对用户信息特征以可视化图表的方式予以呈现。对用户进行权限设置和账户冻结。

平台农产品信息管理:审核全平台农户发布的农产品信息。管理农产品分类和标签。以直观可视化的数据分析图表来进行农产品信息的统计分析。并支持为农户代为发布农产品功能。

产品分类管理:对平台销售的农产品予以分类,让用户消费者更清楚的浏览查找商品。

平台优惠卷管理:设置全平台或专属个别农户的农产品的促销活动和折扣。并可监督管理农户发布的优惠卷。

平台订单管理:监控整个平台所有订单状态,处理异常订单。管理物流信息。监督和处理全平台所以的售后问题。查看整个平台销售数据的可视化展示。分析市场趋势。

平台评价管理:监控平台所有用户评价,处理违规评价。

系统管理:管理系统设置,包括站点信息、邮件通知等。维护系统安全,进行数据备份。

产品溯源:确保农户上传的溯源信息的真实性和完整性。

公告管理:发布和管理平台公告。

系统功能结构图如图4-1所示。

图4-1 系统功能结构图

4.3 数据库设计

在农产品可视化销售平台被使用的这一过程之中,由于各式各样不同的操作而会产生数量庞大的数据,所以系统务必将数据库加以集成从而对这些数据以有效方式去存储及管理。数据库设计的目标则是依据具体而明确的系统相关需求去构建一个极为高效的数据库,以此确保这个数据库能够满足关于数据存储、更新以及处理等方面的要求。为了能够顺利达到这样的一个目标,数据库设计需要对用户细致入微的具体需求深入去加以了解,并且要严格遵循概念结构设计、逻辑结构设计还有物理结构设计这三个重要的阶段。这是一项具备系统化特征的工作,其目的在于通过将业务方面的需求予以明确、对数据实体及其相互之间的关系加以清晰定义,来建立起一个既可以实现数据高效存储又能够满足多种不同操作需求的经过优化的数据模型。最终其目的是要创建出一种逻辑方面极为清晰、物理实施相对合理的数据库架构,不仅要确保数据具备较高的质量,同时还得对快速的数据访问、查询、更新以及管理予以支持,从而为平台的应用以及业务场景提供坚实无比的数据支持与技术方面的基础。以下即为本系统于概念、逻辑以及物理结构层面之上的设计。

4.3.1 数据库概念设计

数据库的概念结构设计是构建数据组织方式及其相互关系的抽象模型的过程。在这个阶段,设计者主要关注的是定义实体、这些实体的属性以及实体间的关系,而不考虑具体的实现技术和物理限制。本系统中设计到的实体有实体属性图如下。

(1)用户实体图如图4-2所示。

图4-2 用户实体图

(2)农户实体图如图4-3所示。

图4-3 农户实体图

(3)管理员实体图如图4-4所示。

图4-4 管理员实体图

(4)订单实体图如图4-5所示。

图4-5 订单实体图

(5)农产品信息实体图如图4-6所示。

图4-6 农产品信息实物图

(6)公告信息实体图如图4-7所示。

图4-7 公告信息实体图如图所示

(7)我的优惠券实体图如图4-8所示。

图4-8 我的优惠券实体图

(8)优惠券券实体图如图4-9所示。

图4-9 优惠券实体图

(9)评价产品信息实体图如图4-10所示。

图4-10 评价产品信息实体图

(10)地址实体图如图4-11所示。

图4-11 地址实体图

(11)收藏实体图如图4-12所示。

图4-12 收藏实体图

(12)购物车实体图如图4-13所示。

图4-13 购物车实体图

(13)充值记录实体图如图4-14所示。

图4-14 充值记录实体图

(14)系统关键E-R图如图4-15所示。

图4-15 系统关键E-R图

4.3.2 数据库逻辑结构设计

数据库逻辑设计在数据库设计流程中扮演着至关重要的角色,它是连接前期概念结构设计和后期物理设计的桥梁。在这个阶段,设计者将基于业务需求抽象出来的实体-联系(E-R)模型进一步细化,将其转换为特定数据库管理系统能够理解和处理的数据结构。具体来说,就是将E-R图中的实体转换为关系型数据库中的表,实体的属性转换为表中的字段,而实体间的联系则转换为表与表之间的参照完整性约束等。其中," "表示主键。" "表示外键。

用户(用户ID、创建时间、账号、密码、姓名、性别、手机、头像、余额、状态、密保问题、密码答案)

农户(农户ID、创建时间、农户账号、密码、农户名称、性别、手机、农户图片、余额、状态、密保问题、密码答案)

管理员(管理员ID、用户名、密码、头像、角色、新增时间)

订单(订单ID、创建时间、订单编号、商品表名、物流、用户ID、收货人、商品ID、商品名称、商品图片、购买数量、电话、价格、地址、总价格、支付类型、状态)

农产品信息(农产品ID、创建时间、农户账号、农户名称、农产品名称、产品分类、农产品图片、农产品视频、溯源码、生产日期、生产地点、溯源详情、单限、库存、是否审核、审核回复、最近点击时间、)

公告信息(公告ID、创建时间、标题、简介、分类名称、发布人、头像、点击次数、最近点击时间、赞、踩、收藏数、图片、内容)

我的优惠券(我的优惠卷ID、创建时间、用户ID、名称、券编号、满额、优惠额、生效时间、过期时间、优惠券类型、备注、状态、商户名称)

优惠券(优惠券ID、创建时间、用户ID、名称、券类型、满额、优惠券、生效时间、过期时间、备注、商户名称)

评价产品(评价产品ID、创建时间、关联表ID、用户ID、头像、用户名、评论内容、回复内容、赞、踩、置顶、赞用户ids、踩用户ids)

地址(地址ID、创建时间、用户ID、地址、收货人、电话、是否默认地址)

收藏(收藏ID、创建时间、用户ID、商品ID、表名、名称、图片、类型、推荐类型、备注)

购物车(购物车ID、创建时间、商品表名、用户ID、商品ID、商品名称、图片、购买数量、单价、商户名称)

充值记录(充值记录ID、创建时间、用户ID、用户名、角色、金额)

4.3.3 数据库物理结构设计

数据库物理结构设计就是将逻辑设计转化为针对具体数据库管理系统的物理存储方案,包括选择最优的数据存储方式、创建高效的索引、制定合理的并发控制和数据恢复计划、以及实施严格的数据安全措施。这一过程旨在通过优化数据库的物理层面来增强系统的性能、稳定性和安全性,进而更好地满足业务需求并促进其发展。

(1)用户信息表是用来存储用户的相关信息。用户信息表如表4-1所示。

表4-1 用户信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 用户ID
addtime timestamp 创建时间
zhanghao varchar 32 账号
mima varchar 32 密码
xingming varchar 32 姓名
xingbie varchar 3 性别
shouji varchar 11 手机
touxiang longtext 头像
money double 余额
pquestion varchar 32 密保问题
panswer varchar 32 密保答案
status int 状态

(2)管理员信息表是用来存储管理员的相关信息。管理员信息表如表4-2所示。

表4-2 管理员信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 管理员ID
username varchar 32 用户名
password varchar 15 密码
image varchar 200 头像
role varchar 100 角色
addtime timestamp 新增时间

(3)农户信息表是用来存储管农户的相关信息。农户信息表如表4-3所示。

表4-3 农户信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 农户ID
addtime timestamp 创建时间
nonghuzhanghao varchar 32 农户账号
mima varchar 32 密码
nonghumingcheng varchar 32 农户名称
xingbie varchar 2 性别
shouji varchar 11 手机
nonghutupian longtext 200 农户图片
money double 余额
pquestion varchar 32 密保问题
panswer varchar 32 密保答案
status int 状态

(4)地址表是用来存储管用户购买邮寄的地址相关信息。地址信息表如表4-4所示。

表4-4 地址信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 农户ID
addtime timestamp 创建时间
userid bigint 20 用户ID
address varchar 200 地址
name varchar 32 收货人
phone varchar 11 电话
isdefault varchar 32 是否默认地址

(5)购物车表是用来存储管购物车的相关信息。购物车信息表如表4-5所示。

表4-5 购物车信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 购物ID
addtime timestamp 创建时间
tablename varchar 20 商品表明
userid bigint 200 用户ID
goodname varchar 32 商品名称
goodid bigint 11 商品ID
picture longtext 32 图片
buynumber int 购买数量
price double 单价
nonghuzhanghao varchar 32 商户名称
goodtype varchar 32 商品类型

(6)充值记录表是用来存储管用户充值的相关信息。充值记录信息表如表4-6所示。

表4-6 充值记录信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 充值记录ID
addtime timestamp 创建时间
userid bigint 20 用户ID
username varchar 32 用户名
role varchar 32 角色
amount double 金额

(7)优惠券表是用来存储管优惠券相关信息。优惠券信息表如表4-7所示。

表4-7 优惠券信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 优惠券ID
addtime timestamp 创建时间
userid bigint 20 用户ID
name varchar 32 名称
type varchar 32 券类型
fullamount double 32 满额
discountamount double 32 优惠额
startime datetime 生效时间
endtime datetime 过期时间
remark varchar 200 备注
nonghuzhanghao varchar 32 商户名称

(8)农产品评价表是用来存储用户对农产品评价的相关信息。农产品评价信息表如表4-8所示。

表4-8 农产品评价信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 农产品评价ID
addtime timestamp 创建时间
refid bigint 20 关联表ID
userid bigint 32 用户ID
avatarurl longtext 32 头像
nickname varchar 32 用户名
content longtext 32 评论内容
reply longtext 回复内容
crazilynum int
istop int
tuserids longtext 置顶(1:置顶,0:非置顶)
cuserids longtext 200 赞用户ids
crazilynum int 200 踩用户ids

(9)我的优惠券信息表是用来存储用户优惠券的相关信息。如表4-9所示。

表4-9 我的优惠券信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 我的优惠券ID
addtime timestamp 创建时间
userid bigint 20 用户ID
couponid bigint 20 优惠券ID
name varchar 32 名称
couponnumber varchar 32 券编号
fullamount double 32 满额
discountamount double 优惠额
startime datetime 生效时间
endtime datetime 过期时间
type varchar 25 优惠券类型
remark varchar 200 备注
status varchar 32 状态
nonghuzhanghao varchar 32 商户名称

(10)公告信息表是用来存储公告的相关信息。公告信息表如表4-10所示。

表4-10 公告信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 公告ID
addtime timestamp 创建时间
title varchar 20 标题
introduction longtext 20 简介
typename varchar 32 分类名称
name varchar 32 发布人
headportrait longtext 32 头像
clicknum int 点击次数
clicktime datetime 最近点击时间
thumbsupnum int
crazilynum int
storeupnum int 255 收藏数
picture longtext 200 图片
content longtext 200 内容

(11)农产品信息表是用来存储农产品的相关信息。农产品信息表如表4-11所示。

表4-11 农产品信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 农产品信息ID
addtime timestamp 创建时间
nongchanpinzhanghao varchar 32 农户账号
nonghumingcheng varchar 32 农户名称
nongchanpinmingcheng varchar 32 农产品名称
chanpinfenlei varchar 200 产品分类
nongchanpintupian varchar 200 农产品图片
nongchanpinshipin longtext 200 农产品视频
suyuanma longtext 200 溯源码
caizhairiqi date 生产日期
caizhairdidian varchar 200 生产地点
suyuanxingqing longtext 200 溯源详情
onelimittimes int 32 单限
alllimittimes int 200 库存
sfsh varchar 32 是否审核
clicktime datetime 最近点击
clicknum int 200 点击次数
discussnum int 200 评论数
price double 32 价格
onshelves int 32 是否上架
storeupnum int 200 收藏数
shhf longtext 200 审核回复

(12)订单表是用来存储订单的相关信息。订单信息表如表4-12所示。

表4-12 订单信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 订单ID
addtime timestamp 创建时间
orderid varchar 200 订单编号
tablename varchar 32 商品表名
userid bigint 20 用户ID
goodid bigint 20 商品ID
googname varchar 32 商品名称
picture longtexr 200 商品图片
buynumber int 购买数量
price double 32 价格
total double 32 总价格
type int 32 支付类型
status varchar 32 状态
address varchar 200 地址
tel varchar 11 电话
consignee varchar 32 收货人
logistics longtext 32 物流
remark varchar 200 备注
nonghuzhanghao varchar 32 商户名称
sfsh varchar 32 是否审核
shhf longtext 32 审核回复
role varchar 32 用户角色
couponnumber varchar 200 券编号
discountamount double 32 优惠额
orderno varchar 200 统一订单编号
returnreason varchar 200 退货原因

(13)收藏信息表是用来存储收藏农产品的相关信息。收藏信息表如表4-13所示。

表4-13 收藏信息表

字段名称 数据类型 长度 能否空 注释
id bigint 20 收藏ID
addtime timestamp 创建时间
userid bigint 20 用户ID
refid bigint 20 商品ID
tablename varchar 32 表名
name varchar 32 名称
picture longtext 200 图片
type varchar 200 类型
inteltype varchar 200 推荐类型
remark varchar 200 备注

第五章 系统实现

5.1 注册与登录
5.1.1 用户注册与登录

用户首次登录平台需要进行注册,并在成功完成注册流程后,便能够使用其注册信息进行登录操作。用户注册页面如图5-1所示。

图5-1 用户注册页面

核心代码如下:

api.post('/register', async (req, res) => {

try {

Object.keys(req.body).forEach(item=>{

if(req.bodyitem == '') delete req.bodyitem

})

const userinfo = await YonghuModel.create(req.body)

if (userinfo === null) {

toRes.session(res, -1, '注册失败!')

} else {

toRes.session(res, 0, '注册成功!')

}

} catch(err) {

toRes.session(res, -2, '请检查是否正确输入或用户名重复!', '', 200)

}

})

用户可以通过输入正确的账户名和密码完成身份验证,进而访问系统资源;对于尚未拥有账户的用户,需要先通过注册流程创建个人账户,注册成功后即可登录使用系统。用户登录如图5-2所示。

图5-2 用户登录页面

核心代码如下:

export default ({ config, db }) => {

let api = Router() // 用户登录接口

api.all('/login', async (req, res) => {

try {

let pwd = req.query.password

let userQuery = await YonghuModel.findOne({ where: { zhanghao: req.query.username} })

if (userQuery!=null){

if (userQuery.status==1){

toRes.session(res, 500, '账号已锁定,请联系管理员审核!')

}

if(pwd!=userQuery.mima){//密码错误,累计错误次数

userQuery.passwordwrongnum+=1

if(userQuery.passwordwrongnum>=-1){

userQuery.status=1

}

await userQuery.save()

toRes.session(res, 10028, '用户名或密码错误!')

return

}

}

let userinfo = await YonghuModel.findOne({ where: { zhanghao: req.query.username, mima: pwd } })

if (userinfo === null) {

toRes.session(res, -1, '用户名或密码错误!')

return

}

5.1.2 农户注册与登录

农户首次登录平台需要进行注册,并在成功完成注册流程后,便能够使用其注册信息进行登录操作。农户注册页面如图5-3所示。

图5-3 农户注册页面

该用户登录接口通过POST请求接收农户的账号、密码和角色信息,验证通过后允许农户登录并进入网站首页。农户登录功能页面图如图5-4所示。

图5-4 农户登录功能页面

5.1.3 管理员登录

当管理员在登录界面准确填写账号信息和密码后,便可以成功登录系统进行管理操作。管理员登录首页页面如图5-5所示。

图5-5 管理员登录页面

5.2 数据可视化展示

农户在系统首页可以查看包含农产品信息总数、产品库存及分类库存的可视化统计数据图,这些数据会实时更新,增强了农户的数据可视化体验。农户统计页面图如图5-6所示。

图5-6 农户统计页面图

管理员在系统首页能够查看包括用户人数、农户人数、所有产品库存以及分类库存的统计图表,这些数据通过动态更新的方式实时反映最新情况。特别地,系统采用了可视化技术,使得复杂的库存和用户数据可以通过直观的图表形式展现,如柱状图、饼图和折线图等,从而极大地增强了管理员的数据可视化体验。图5-7管理员统计页面图

图5-7 管理员统计页面图

核心代码:

api.get('/group/:columnName', async (req, res) => { //统计字段

try {

let sql = ""

let columnName = req.params.columnName

// let tableName = "nonghu"

let where = " WHERE 1 = 1 "

sql = "SELECT COUNT(*) AS total, " + columnName + " FROM nonghu " +where + " GROUP BY " + columnName

let limit = parseInt(req.query.limit) || 0

let order = req.query.order || ''

let data = await sequelize.query(sql, {

plain: false,

raw: true,

type: QueryTypes.SELECT

})

if (order == 'desc') {

data = data.sort((a, b) => parseInt(b.total) - parseInt(a.total));

}

if (order == 'asc') {

data = data.sort((a, b) => parseInt(a.total) - parseInt(b.total));

}

if (limit>0 && limit<data.length) {

data = data.slice(0, limit);

}

toRes.record(res, 0, data)

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.3 用户信息管理

管理员可以管理所有注册用户的信息进行管理,可以对违规用户进行权限设置和账户冻结。用户管理图如图5-8所示。

图5-8 用户管理页面

5.4 农户信息管理

管理员可以管理所有注册农户的信息进行管理,可以对违规农户进行权限设置和账户冻结。农户管理图如图5-9所示。

图5-9 农户管理页面

核心代码如下:

addOrUpdateHandler(id,type) { // 添加/修改

this.showFlag = false;

this.addOrUpdateFlag = true;

this.crossAddOrUpdateFlag = false;

if(type!='info'){

type = 'else';

}

this.$nextTick(() => {

this.$refs.addOrUpdate.init(id,type);

});

},

yonghustatusChange(e,row){

if(row.status==0){

row.passwordwrongnum = 0

}

this.$http({

url:'yonghu/update',

method:'post',

data:row

}).then(res=>{

if(row.status==1){

this.$message.error('该用户已锁定')

}else{

this.$message.success('该用户已解除锁定')

}

})

},

5.5 农产品分类管理

通过合理的分类,能让种类繁多、特性各异的农产品得以清晰梳理,极大地方便了用户快速精准地查找所需产品,显著提升购物体验。同时,精准的分类有助于销售团队依据不同类别农产品的特点,制定更具针对性的营销策略,从而提高销售转化率。从库存管理层面来看,分类管理使得库存盘点、补货计划等工作更加高效有序,避免积压或缺货情况的发生。此外,分类管理为数据分析提供了清晰的维度,利于深入洞察市场需求和消费趋势。农产品分类管理页面如图5-10所示。

图5-10 农产品信息推荐页面

5.6 农产品信息管理

农户登录平台后可以发布和编辑农产品信息,包括名称、描述、价格、库存等,还可以上传农产品图片和视频资料增加审核通过的几率。农产品信息管理功能页面如图5-11所示。用户添加农产品信息页面如图5-14所示。

图5-11 农产品信息管理功能页面

农户还可以通过数据可视化的图标直观地看到各产品库存信息和各类产品库存信息情况。农产品库存信息如图5-12所示。产品类别库存信息如图5-13所示。

图5-12 农产品库存信息

图5-13 产品类别品库存信息

图5-14 农户添加农产品信息页面

核心代码如下:

api.post('/update', async (req, res) => {

try {

await NongchanpinxinxiModel.update(req.body, {

where: {

id: req.body.id || 0

}

}

toRes.session(res, 0, '编辑成功!')

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

管理员审核农户发布的农产品信息,确保信息真实有效后审核通过后上架。管理员也可以为农户代为发布农产品。农产品信息管理图如图5-15所示。管理员审核农户产品信息页面图如图5-16所示。

图5-15 管理员端农产品信息管理页面

图5-16 管理员审核农户产品信息页面图

核心代码如下:

api.post('/save', async (req, res) => {

try {

Object.keys(req.body).forEach(item=>{

if(req.bodyitem == '') delete req.bodyitem

if(req.bodyitem == '' && item == 'sfsh') req.bodyitem = '待审核'

})

req.body.clicktime = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')

const userinfo = await NongchanpinxinxiModel.create(req.body)

if (userinfo === null) {

toRes.session(res, -1, '添加失败!')

} else {

toRes.record(res, 0,userinfo.dataValues.id,'添加成功!')

}

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.5 优惠券活动管理

当用户进行购物时,他们可以在结算过程中选择适用的优惠券以享受折扣或其他优惠活动。优惠券页面如图5-17所示。

图5-17 优惠券页面

该API端点位于/save路径下,允许农户通过POST请求创建新的优惠券以促进用户消费和销售增长,系统会自动验证、清理数据并保存优惠券信息至数据库。成功时返回优惠券ID及确认消息,并包含异常处理以确保系统稳定性和安全性。活动管理模块功能如图5-18所示。

图5-18 活动管理模块页面

核心代码如下:

api.post('/save', async (req, res) => {

try {

Object.keys(req.body).forEach(item=>{

if(req.bodyitem == '') delete req.bodyitem

if(req.bodyitem == '' && item == 'sfsh') req.bodyitem = '待审核'

})

if (!req.body.userid) {

req.body.userid = req.session.userinfo === undefined? jwt.decode(req.headers.token).id: req.session.userinfo.id

}

const userinfo = await CouponModel.create(req.body)

if (userinfo === null) {

toRes.session(res, -1, '添加失败!')

} else {

toRes.record(res, 0,userinfo.dataValues.id,'添加成功!')

}

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

管理员有权管理所有优惠券的详细信息,包括创建新的优惠券、调整现有优惠券以及删除不再需要的优惠券,同时还能设置各种促销活动和折。活动管理模块功能如图5-19所示。

图5-19 优惠卷管理模块页面

5.6 农产品推荐及展示

系统依据买家的购买历史和个人偏好,智能生成个性化的农产品推荐列表,使买家能够快速发现符合其兴趣的产品。推荐页面设计直观,展示清晰的产品图片和关键信息,方便买家浏览和可视化。农产品信息推荐页面如图5-20所示。

图5-20 农产品信息推荐页面

买家点击商品进入详情页可以可以查看商品的各种信息以及溯源码。产品溯源信息如图5-21所示。

图5-21 产品信息及溯源页面

用户点击农产品信息后可以查看详细的农产品视频,这大大提高了用户的可视化体验。视频详情页面如图5-22所示。

图5-22 视频详情页面

核心代码如下:

api.get('/autoSort', async (req, res) => { // 智能推荐

try {

let page = parseInt(req.query.page) || 1

let limit = parseInt(req.query.limit) || 5

let sort = req.query.sort || 'clicktime'

let order = req.query.order || 'desc'

sort = "clicknum"

let where = {}

const keys = Object.keys(req.query);

for (let i = 0; i < keys.length; i++) {

const key = keysi;

if(key!="page" && key!="limit"&& key!="sort"&&key!="order"&&key!="t"){

if (req.querykey) {

wherekey = {

Op.eq\]: req.query\[key

}

}

}

}

let orders =\[\]

const sortList = sort.split(",")

const orderList = order.split(",")

sortList.forEach((item, index) => {

orders.push(item,orderList\[index])

});

let result = await NongchanpinxinxiModel.findAndCountAll({

order: orders,

where,

offset: (page - 1) * limit,

limit

})

result.currPage = page

result.pageSize = limit

toRes.page(res, 0, result)

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.7 购物车管理

买家可以对喜欢的商品添加进购物车,稍后可以修改对购物车中的商品数量价进行添加、减少和删除商品的操作。购物车管理功能如图5-23所示。

图5-23 购物车管理页面

核心代码如下:

api.post('/update', async (req, res) => { // 更新

try {

await CartModel.update(req.body, {

where: {

id: req.body.id || 0

}

})

toRes.session(res, 0, '编辑成功!')

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

api.post('/delete', async (req, res) => { // 删除

try {

await CartModel.destroy({

where: {

id: {

Op.in: req.body

}

}

})

toRes.session(res, 0, '删除成功!')

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

定义了API端点,允许通过POST请求使用Sequelize ORM更新或删除订单记录,买家可以查看订单详情并发起退单操作。订单管理功能如图5-24所示

图5-24 订单管理页面

核心代码如下:

api.post('/update', async (req, res) => {

try {

await OrdersModel.update(req.body, {

where: {

id: req.body.id || 0

}

})

toRes.session(res, 0, '编辑成功!')

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

// 删除接口

api.post('/delete', async (req, res) => {

try {

await OrdersModel.destroy({

where: {

id: {

Op.in: req.body

}

}

})

toRes.session(res, 0, '删除成功!')

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

农户可以在非查看模式下编辑关键订单信息(如物流、收货人、备注和商户名称),而在查看模式下则能查阅订单详情,包括统一订单编号。这使得农户能够方便地管理和处理已下的产品订单。订单管理功能模块如图5-25所示。

图5-25 订单管理功能

管理员可以监控所有订单状态,处理异常订单。订单管理图如图5-26所示。

图5-26 订单管理页面

核心代码如下:

api.post('/save', async (req, res) => {

try {

Object.keys(req.body).forEach(item=>{

if(req.bodyitem == '') delete req.bodyitem

if(req.bodyitem == '' && item == 'sfsh') req.bodyitem = '待审核'

})

if (!req.body.userid) {

req.body.userid = req.session.userinfo === undefined? jwt.decode(req.headers.token).id: req.session.userinfo.id

}

const userinfo = await OrdersModel.create(req.body)

if (userinfo === null) {

toRes.session(res, -1, '添加失败!')

} else {

toRes.record(res, 0,userinfo.dataValues.id,'添加成功!')

}

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.8 评价管理

买家可以在收到货后对购买的农产品进行评价和反馈,帮助其他买家更好的了解商品。发表评价如图5-27所示。

图5-27 发表评价页面

农户和管理可以查看买家的评价和反馈,采纳买家的意见,优化产品,还可以回复买家的评价。评价管理功能如图5-28所示。

图5-28 评价管理页面

核心代码如下:

api.post('/update', async (req, res) => {

try {

await DiscussnongchanpinxinxiModel.update(req.body, {

where: {

id: req.body.id || 0

}

})

toRes.session(res, 0, '编辑成功!')

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.9 产品售后管理

买家可以对已收货不满意的商品跟农户沟通过后进行退换货处理。用户端产品售后发起如图5-29所示。

图5-29 用户端产品售后发起页面

农户处理买家的退换货请求,根据买家理由决定是否退换货。产品售后管理功能如图5-30所示。

图5-30 农户端产品售后管理页面

管理员监督和处理农户的售后问题,包括处理买家的退换货请求,并根据买家的理由决定是否批准退换货。产品售后管理功能如图5-31所示。

图5-32 管理员端产品售后管理页面

核心代码:

api.get('/valueMul/:xColumnName', async (req, res) => {

try {

let sql = ""

let xColumnName = req.params.xColumnName

let yColumnName = req.query.yColumnNameMul

let tableName = "orders"

let where = " WHERE 1 = 1 "

let userTableName = req.session.userinfo === undefined? jwt.decode(req.headers.token).tableName: req.session.userinfo.tableName;

if(userTableName == 'nonghu') {

where += " AND nonghuzhanghao = '" + jwt.decode(req.headers.token).username + "' ";

}

where += " AND status IN ('已支付', '已发货', '已完成') ";

const promises = yColumnName.split(',').map(async(item)=>{

sql = "SELECT " + xColumnName + ", sum(" + item + ") total FROM " + tableName + where + " GROUP BY " + xColumnName;

const results = await sequelize.query(sql, {

plain: false,

raw: true,

type: QueryTypes.SELECT

});

return results;

})

toRes.record(res, 0, await Promise.all(promises))

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.10 销售数据统计分析

管理员可以查看整个平台的销售数据,生成统计报表,分析市场趋势根据结果调整后续推广方向。农户可以查看自己的销售数据,生成统计报表,分析师市场需求和自身产品定位,助力高效运营。销售数据统计分析图如图5-33所示。日销量数据统计如图5-34所示。

图5-33 销售数据统计分析图

图5-34 日销量数据统计页面

核心代码:

// 统计指定字段

api.get('/value/:xColumnName/:yColumnName', async (req, res) => {

try {

let sql = ""

let xColumnName = req.params.xColumnName

let yColumnName = req.params.yColumnName

let where = " WHERE 1 = 1 "

let tableName = req.session.userinfo === undefined? jwt.decode(req.headers.token).tableName: req.session.userinfo.tableName;

if(tableName == 'nonghu') {

where += " AND nonghuzhanghao = '" + jwt.decode(req.headers.token).username + "' ";

}

if ("orders" == "orders") {

where += " AND status IN ('已支付', '已发货', '已完成') ";

}

sql = "SELECT " + xColumnName + ", SUM(" + yColumnName + ") AS total FROM orders " + where + " GROUP BY " + xColumnName + " DESC"

let limit = parseInt(req.query.limit) || 0

let order = req.query.order || ''

let data = await sequelize.query(sql, {

plain: false,

raw: true,

type: QueryTypes.SELECT

})

if (order == 'desc') {

data = data.sort((a, b) => parseInt(b.total) - parseInt(a.total));

}

if (order == 'asc') {

data = data.sort((a, b) => parseInt(a.total) - parseInt(b.total));

}

if (limit>0 && limit<data.length) {

data = data.slice(0, limit);

}

toRes.record(res, 0,data)

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

5.11 公告管理

用户进去程序首页后可以查看公告信息,对新的信息有一个及时了解。公告信息查看如图5.35所示。

图5-35 公告展示页面

农户在登录后可以通过首页的公告栏快速获取最新信息。公告信息查看如图5.36所示。

图5-36 查看公告页面

定义了一个API端点,位于/save路径下,接收POST请求,用于创建新的公告条目(通过NewsModel模型)。管理员可以把重要信息发布在平台公告上,方便用户查看。公告管理图如图5-37所示。

图5-37 公告管理页面

核心代码如下:

api.post('/save', async (req, res) => {

try {

Object.keys(req.body).forEach(item=>{

if(req.bodyitem == '') delete req.bodyitem

if(req.bodyitem == '' && item == 'sfsh') req.bodyitem = '待审核'

})

req.body.clicktime = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')

const userinfo = await NewsModel.create(req.body)

if (userinfo === null) {

toRes.session(res, -1, '添加失败!')

} else {

toRes.record(res, 0,userinfo.dataValues.id,'添加成功!')

}

} catch(err) {

toRes.session(res, 500, '服务器错误!', '', 500)

}

})

第6章 系统的测试

6.1 测试目的及方法

系统测试的核心目标在于确保开发完成的软件能够按照预定的要求和标准正常运作。这一过程不仅包括检查软件的各项功能是否能够正确无误地执行,还包括评估软件在性能、可靠性和兼容性等方面的表现,以保证软件在真实使用场景下的稳定性和用户体验。

采用黑盒测试中的等价类划分方法进行系统测试,意味着将把软件当作一个内部机制不可见的"黑盒子"。通过这种方法,可以将所有可能的输入数据划分为若干个等价类,每个等价类中的输入数据在理论上应该产生相同的结果。这样做的好处是可以显著减少测试用例的数量,同时依然能有效地检测出软件在功能实现上的问题。

6.2 测试用例
6.2.1 农户模块测试

(1)农户登录测试用例表如表6-1所示。

表6-1 农户登录测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 只输入账号 账号:qwe 密码为空 提示"请输入密码" 提示"请输入密码" 符合预期
2 只输入密码 账号为空 密码:123456 提示"请输入账号" 提示"请输入账号" 符合预期
3 密码错误 用户名:qqq 密码:2222 提示"密码错误" 提示"密码错误" 符合预期
4 账号、密码和身份均正确 账号:123 密码:123456 身份:农户 进入平台 成功进入 符合预期

登录功能进行测试。在登录界面可以对"账号"、"密码"和角色的内容进行填写或选择,从而达到控制测试内容查看结果的目的。农户登录测试图如图6-1所示。

图6-1 农户登录测试

(2)农产品信息管理测试用例表如表6-2所示。

表6-2 农产品信息管理测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 添加农产品信息 农产品名称:"石榴" 产品分类:"新鲜水果" 上传农场品图片 上传农产品视频 生产地点:"江西" 生产日期:"2025年4月10日" 单限:10 库存:200 价格:8 溯源详情:山东石榴 提交成功 提示"操作成功" 符合预期
2 是否上架农产品 点击上架按钮 上架成功 显示上架商品 符合预期
3 删除农产品信息 点击删除农产品选项 删除成功 提示"操作成功" 符合预期
4 查询农产品 农产品名称:石榴 价格:5~10 是否通过:通过 显示查询商品 显示查询商品 符合预期

对农产品信息管理功能进行测试,在农户上架商品时填写好对应的信息,检查无误后点击提交,提示"操作成功",商品上架成功。农户信息管理功能测试图如图6-2所示。

图6-2 农产品信息管理功能测试

(3)优惠卷管理测试用例表如表6-3所示。

表6-3 优惠卷管理测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 添加优惠卷 名称:"促销" 劵类型:"满减券" 满额:"100" 优惠额:"30" 生效时间:"2025-4-1 00:00:00" 过期时间:"2026-12-31 00:00:00" 提交成功 提示"操作成功" 符合预期
2 修改优惠劵 修改序号"1"优惠信息 修改成功 修改成功 符合预期
3 删除优惠券 点击删除优惠券选项 删除成功 提示"操作成功" 符合预期
4 查询优惠券 名称:石榴 券类型:促销 生效日期:2024-11-1至2024-11-20 过期日期:2023-11-1至2030-1-11 显示查询商品 显示查询商品 符合预期

对优惠券管理功能进行测试,在优惠券管理页面点击添加会弹出信息填写的页面,按照预想的信息进行填写。优惠券信息填写图如图6-3所示。

图6-3 优惠券信息填写

确认信息无误后点击提交,弹出"操作成功"的提示。优惠券发布提示如图6-4所示。

图6-4 优惠券发布提示

6.2.2 用户模块测试

(1)购买测试用例表如表6-4所示。

表6-4 购买测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 余额不足 余额为6 提示"余额不足" 提示"余额不足,请先充值" 符合预期
2 未选择地址 未填写地址 提示"请选择收货地址" 提示"暂无数据" 符合预期
3 购买商品 余额充足,选择地址和数量1下单 提交成功 提示"支付成功" 符合预期

用户选择好商品和地址,此时余额为1,点击支付,系统弹出提示"余额不足,请先充值"的提示。余额不足提示图如图6-5所示。

图6-5 余额不足提示

此时对账户进行充值1000元,再次点击支付,系统提示支"支付成功"的提示。支付成功提示图如图6-6所示。

图6-6 支付成功提示

6.2.3 管理员测试

(1)用户管理测试用例表如表6-5所示。

表6-5 用户管理测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 删除用户信息 点击删除用户选项 删除成功 提示"操作成功" 符合预期
2 查询用户信息 账号:"123" 显示查询商品 显示查询商品 符合预期
3 开通用户权限 点击状态栏下用户权限开通按钮 用户可以登录 用户可以登录 符合预期
4 关闭用户权限 点击状态栏下用户权限关闭按钮 用户禁止登录 提示"账号已被锁定,请联系管理员审核!" 符合预期

进入用户管理界面点击头像后面的状态键,即可对该账户进行锁定。锁定用户图如图6-7所示。

图6-7 用户锁定

被锁定农户登录时提示"账号已被锁定,请联系管理员审核!"。如图6-8用户账号登录提示所示。

图6-8 用户登录提示

(2)产品分类管理测试用例表如表6-6所示。

表6-6 产品分类管理测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 添加产品分类 产品分类:产品分类8 提交成功 提示"操作成功" 符合预期
2 删除产品分类7 点击删除选项 删除成功 提示"操作成功" 符合预期
3 查询产品分类6 搜索:产品分类6 显示查询结果 显示查询结果 符合预期
4 查看产品分类 产品分类6 显示详细信息 显示详细信息 符合预期

(3)系统管理测试用例表如表6-7所示。

表6-7 系统管理测试用例表

编号 测试内容 测试数据 预期结果 实际效果 测试状态
1 修改轮播图 选择序号:"1" 上传图片 提交成功 提示"操作成功" 符合预期
2 添加公告信息 标题:"有梦你就来" 分类名称:"分类6" 发布人:"小李" 上传图片 内容:石榴出售 添加成功 添加成功 符合预期
4 删除公告信息 点击删除公告选项 删除成功 提示"操作成功" 符合预期
5 查询公告信息 标题:"有梦你就来" 显示查询公告 显示查询公告 符合预期
6 查看公告信息 序号:"2" 显示详细信息 显示详细信息 符合预期

在系统管理中选择轮播图管理,选择序号"1",上传图片点击提交,系统弹出提示"操作成功"。添加轮播图提示如图6-9所示。

图6-9 添加轮播图提示

6.3 测试结果

本次测试通过等价类划分方法对系统的多个关键功能进行了验证,包括用户登录、商品购买以及农户的商品管理等环节。测试结果显示,实际操作的结果与预先设定的目标一致,证明了各系统组件间能有效协同工作,同时也确保了每个独立模块的功能实现均符合设计初衷。这样的测试对于提升系统日后运行的稳定性具有重要意义。

结论

本设计所构建的基于B/S架构农产品销售平台,将融合了如HTML5、Node.JS这般现代开发手段以及智能推荐技术的平台,以Visual Studio Code作为开发环境,把MySQL作为数据存储解决方案,同时把Google Chrome当成前端展示与测试工具,经全面功能设计与优化,其中涵盖用户身份验证、信息管理这些模块,包括商品销售、订单处理此类环节,还有个性化推荐、评价反馈以及售后服务,加上产品溯源、通知发布与系统用户权限管理等,使得平台不但能提供安全、高效且便捷的在线交易体验,而且能有效支持农民和商家实现产品推广与销售增长,特别是智能推荐算法的应用,对用户体验的增强显著且提高了用户忠诚度,为平台的可持续发展奠定坚实基础,而此平台的开发与实施,为解决农产品销售难题提供新思路之余,还为推动农业电子商务发展做出积极贡献。

参考文献

孔令.基于Java的掌上农产品销售系统D.南昌:江西农业大学,2019.

唐双林.基于Vue和SpringBoot架构的智能推荐农产品团购销售系统D.重庆:重庆三峡学院,2023.

王宇鹏.农产品销售数据可视化平台设计及实现D.北京:中国科学院大学,2024.

胡文强.农产品销售信息系统的设计与实现D.重庆:重庆三峡学院,2020.

贾德润南,阮红丽,李文源等.农产品社交电商推荐系统的设计J.电脑知识与技术,2020,16(13):299-300.

Delima R, Santoso H B, Aditya G H, etal. Development of sales modules for agricultural e-commerce using dynamic system development methodJ. IJNMT (International Journal of New Media Technology), 2018, 5(2): 95-103.

Wibowo A, Delima R, Rachmat C A. Designing and Developing an Agricultural Product Sales Application Catalog with a Hybrid Application Development FrameworkC//IOP Conference Series: Materials Science and Engineering. IOP Publishing, Bristol, UK, 2021, 1077(1): 012050.

Urdu D,Berre J A,Sundmaeker H, et al.Aligning interoperability architectures for digital agri-food platformsJ.Computers and Electronics in Agriculture,2024,224,109194.

Mutiu G, Ojonukpe S E, Chinedu J G. Development of a Mobile Application for Marketing Agricultural Farm ProductsJ. International Journal of Women in Technical Education and Employment, 2023, 4(1): 13.

李岚,曹宇佳,包亚飞等.互联网+VR技术下的农产品销售研究与实现J.兰州文理学院学报(自然科学版),2019,33(03):88-90+96.

郑宇彤.基于Java的农产品电子商城设计与实现D.武汉:武汉轻工大学,2023.

喻彬,姜攀.基于移动终端的农产品产业链可视化销售APP设计与实现J.电脑编程技巧与维护,2018(07):65-67.

林智慧,李超,王红刚等.基于移动端的农产品销售系统J.电子制作,2018(18):34-36.

郑少微,姜攀.农产品产业链可视化销售系统数据库设计与实现\[J.电脑编程技巧与维护,2018(06):93-95+108.

肖俊.绿色农产品供销系统的设计与实现D.长沙:湖南师范大学,2019.

王雅琼.果菜批发市场综合信息管理系统设计D.沈阳:沈阳农业大学,2018.

杨米娜.基于微信小程序的"助农"销售系统的设计与开发J.电子技术与软件工程,2021(24):34-35.

裴云霞,蔡冠群,陈继威.基于O2O模式的地方性农产品产业链可视化销售系统J.长春工程学院学报(自然科学版),2019,20(02):51-54+111.

邓林.基于Java的农产品销售系统的研究与设计J.电脑知识与技术,2022,18(12):43-45.

陈燕.基于MVC架构的农产品在线销售管理系统设计与开发J.信息与电脑(理论版),2020,32(12):110-112.

致谢

时光匆匆,如白驹过隙,我的学习生涯即将圆满落幕。而这篇论文的完成,恰似一座熠熠生辉的里程碑,铭刻着我学术之旅的重要节点。在论文完稿的此刻,万千感慨涌上心头,满心都是对所有支持与帮助过我的人的无尽感激,我要向他们致以最诚挚的谢意。

我想先将最深厚的感恩之情,献给我的导师。从论文选题时的反复斟酌、精心构思,到浩如烟海的文献综述,再到实验设计的严谨规划、数据分析的细致入微,直至论文的最终定稿,每一个环节、每一处细节,都离不开您耐心的指导与无私的帮助。您深厚的学术造诣,如同一座巍峨的高山,让我心生敬仰;您严谨的治学态度,似一盏明灯,照亮我前行的道路。在学术的海洋里,您为我驱散了重重迷雾,解开了无数困惑;在科研的荆棘路上,您教会我如何披荆斩棘,勇敢面对挑战。您不仅是我学术征程上的引路人,更是我漫漫人生道路上的良师益友,给予我关怀与鼓励,让我在成长的道路上不再迷茫。

在此,我还要特别感谢各科的老师们。课堂上,你们旁征博引、妙语连珠,精彩绝伦的讲授,如同一场场知识的盛宴,为我构筑起坚实的理论大厦;课堂外,你们不辞辛劳,对我的问题悉心解答,给予我宝贵的建议和指导,让我在学习的道路上不断进步,收获满满。

最后,我要把最诚挚的感谢,送给我的家人和朋友们。亲爱的父母,是你们在背后默默付出,毫无保留地给予我支持,成为我不断奋进的动力源泉。无论遇到多大的困难,你们的爱始终是我最温暖的港湾。还有我的朋友们,在我最艰难的时刻,是你们不离不弃,给予我最温暖的陪伴,倾听我的烦恼,送上最真诚的建议。你们的存在,让我的生活变得五彩斑斓,充满阳光。

感谢每一位在我成长和学习历程中伸出援手、给予支持的人。是你们的关怀与帮助,让我能够一路披荆斩棘,顺利完成学业,实现自我价值。这份恩情,我将铭记于心。未来,我会把这份感恩化作实际行动,不断努力,砥砺前行,用更好的成绩回报你们的厚爱。