土特产多商家论文
分类: Java springboot vue 专栏: java springboot vue 标签: 农产品-系统设计
2025-10-22 18:49:35 113浏览
1. 系统设计
4.1 系统设计思想
为满足特色农产品产销需求,该营销系统需实现以下核心目标:
(1)直观商品可视化呈现:采用分级式商品展示界面,农户可上传特色产品高清图片,消费者能清楚查看产品样式,支持按品类/时令智能筛选,直观呈现农产品的原生态特色。
4.2 系统模块划分
基于SpringBoot和Vue开发的智能物业平台大致可以分为以下几个模块:
(1) 用户注册登录模块:前台用户支持手机号注册,通过密码进行登录,自动关联历史订单和购物车数据,后台用户仅通过手机号和密码登录。
(2) 商品展示与分类模块:用户可按地域、品类等标签筛选商品,支持关键词搜索,用户、商家、管理员登录后自动跳转对应角色界面,功能权限隔离。
(3) 购物车与订单模块:用户可在购物车中添加/删除商品、修改规格数量,实时计算总价并支持批量结算,前台展示店铺名称、店铺详情、联系电话及地址,用户可进入店铺查看其上架的商品。
(4) 店铺与商品管理模块:前台展示店铺名称、详情、地址及联系方式,用户可查看商家信息,商家可发布/下架商品,编辑商品详情、价格及库存,查看店铺销售数据、用户评价分析,根据市场趋势调整商品定价或推广策略。
(5) 评价模块:用户收货后可对商品进行五星评分并文字评价,若用户对商品有问题,可申请退款/申请退货退款,待商户与用户协商一致后方可进行该流程。
(6) 后台管理核心功能:管理员可禁用异常账号、后台查看所有订单详情以及其评价,配置首页轮播图的图片、跳转链接及展示顺序,实时生效无需重启系统。
4.3 概要设计
4.3.1 系统功能模块图
基于SpringBoot和Vue的特色农产品营销系统的系统功能如图4-1系统功能模块所示。
图4-1 系统功能模块
4.3.2 角色功能模块图
(1) 管理员
管理员负责整个系统的全局管理与维护工作,主要职责包括对用户和商户账号的审核与管理,确保平台用户行为的合规性。他们通过后台对异常用户账号进行冻结或解冻操作,维护平台秩序;同时负责配置首页轮播图广告、设置商品分类标签(如按地域、时令划分),并管理公告通知及促销活动,保证信息展示的及时性和准确性。此外,管理员还需通过权限控制功能划分用户角色,例如限制商户仅能管理自有商品,避免数据交叉或越权操作,从而保障系统安全性与数据隔离。管理员角色功能模块图如图4-2所示。

图4-2 管理员功能模块
(2) 商户
商户作为农产品的直接供应方,其核心功能聚焦于商品销售与店铺运营。他们可在系统中发布新产品,上传高清图片和详细描述,设置商品的规格参数、价格及库存数量,并根据销售情况及时下架缺货或季节性商品。当用户下单后,商户会接收到订单提醒,确认订单后安排发货并录入物流单号信息,同时处理用户的退换货请求或异常订单沟通。商户还需定期更新店铺介绍、联系方式和经营地址,通过完善店铺信息增强消费者信任,提升品牌形象与市场竞争力。商户角色功能模块图如图4-3所示。

图4-3 商户功能模块
(3) 普通用户
普通用户作为平台的消费者,主要使用系统进行农产品选购与互动。他们能够通过分类筛选、关键词搜索或平台推荐榜单浏览商品,查看包含产地溯源、用户评价在内的详细信息,并将心仪商品加入购物车完成支付。订单生成后,用户可实时跟踪物流状态,确认收货后对商品质量及服务进行评分与文字反馈。在个人中心模块,用户可以管理常用收货地址、维护个人信息、查阅历史订单记录,并收藏感兴趣的商品,方便后续复购或参与促销活动。普通用户角色功能模块图如图4-4所示。

图4-4 普通用户功能模块
4.3.3 数据库设计
(1)数据库E-R图
E-R图能够将复杂的业务数据转化为直观的图形模型,帮助开发者理清数据之间的逻辑关系,从而高效完成数据库设计。它通过实体、属性及关联关系的可视化表达,构建出接近真实业务场景的信息结构。本系统的E-R图表现了特色农产品营销平台中各个实体之间的联系,总体设计E-R图如图4-5所示。

图4-5 总体E-R实体图
因本系统部分实体属性较多,无法在总体E-R图中详细展示,详细展示实体图各个属性请参考下方数据库实体。
(%1) 数据库实体
用户基础信息包括ID、手机号、密码、昵称、头像路径、用户角色、注册时间、性别、账号状态、禁用原因、禁用时间、商家审核状态、店铺名称、店铺LOGO、店铺地址、商家实名、商家联系电话、备注以及店铺描述。用户实体如图4-6所示。

图4-6 用户实体图
商品基础信息包括ID、商品名称、商品详情、商品标签、商品分类ID、销量、库存、商品规格、规格对应价格、展示价格、创建时间、上架时间、是否上架、商品图片、浏览量、平均评分、评价数量、是否特价商品、预售价格、商家用户ID、审核状态以及备注。商品实体如图4-7所示。

图4-8 商品实体图
订单基础信息包括ID、订单号、商品ID、用户ID、商户规格、商品单价、创建时间、收货地址、购买数量、订单总价、用户备注、是否支付、支付时间、支付方式、发货时间、是否发货、是否收货、收货时间、评价时间、是否评价、是否退款、退款申请时间、退款完成时间、是否显示、删除时间、物流单号以及退款单号。订单实体如图4-8所示。

图4-8 订单实体图
商品分类基础信息包括ID、分类名称、创建时间以及排序字段。商品分类实体如图4-9所示。

图4-9 商品分类实体图
商品标签基础信息包括ID、标签名称、创建时间以及分类ID。商品标签实体如图4-10所示。

图4-10 商品标签实体图
用户标签基础信息包括ID、用户ID、创建时间、标签ID、以及分类ID。用户标签实体如图4-11所示。

图4-11 用户标签实体图
库存记录基础信息包括ID、商品ID、变动数量、操作时间、类型以及备注。库存记录实体如图4-12所示。

图4-12 库存记录实体图
用户反馈基础信息包括ID、用户ID、反馈内容、回复内容、回复时间、是否回复以及反馈时间。用户反馈实体如图4-13所示。

图4-13 用户反馈实体图
(%1) 数据库设计表
用户表(sp_users)
用户表(sp_users)用于保存用户的相关基本信息。如表4.1所示。
表4.1 sp_users
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | phone | varchar | 255 | 否 | 手机号 |
3 | upass | varchar | 255 | 否 | 密码 |
4 | nickname | varchar | 255 | 否 | 昵称 |
5 | faceimg | varchar | 255 | 否 | 头像路径 |
6 | role | varchar | 255 | 否 | 用户角色(admin/pt/store) |
7 | cts | varchar | 255 | 否 | 注册时间 |
8 | sex | varchar | 255 | 否 | 性别 |
9 | state | varchar | 255 | 否 | 账号状态 |
10 | nouse_msg | varchar | 255 | 否 | 禁用原因 |
11 | nouse_date | varchar | 255 | 否 | 禁用时间 |
12 | sh | varchar | 255 | 否 | 商家审核状态 |
13 | store_name | varchar | 255 | 否 | 店铺名称 |
14 | store_logo | varchar | 255 | 否 | 店铺LOGO |
15 | store_address | varchar | 255 | 否 | 店铺地址 |
16 | store_realname | varchar | 255 | 否 | 商家实名 |
17 | store_phone | varchar | 255 | 否 | 商家联系电话 |
18 | msg | varchar | 255 | 否 | 备注 |
19 | store_desc | varchar | 255 | 否 | 店铺描述 |
广告表(sp_ad)
广告表(sp_ad)管理首页轮播图、促销弹窗等营销内容。如表4.1所示。
表4.2 sp_ad
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | img | varchar | 255 | 否 | 广告图片路径 |
3 | href | varchar | 255 | 否 | 广告跳转链接 |
4 | tsort | varchar | 255 | 否 | 排序字段 |
5 | cts | varchar | 255 | 否 | 创建时间 |
6 | type | varchar | 255 | 否 | 广告类型(如轮播图) |
7 | msg | varchar | 255 | 否 | 广告描述 |
用户地址表(sp_address)
用户地址表(sp_address)记录用户填写的收货地址信息。如表4.3所示。
表4.3 sp_address
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | aname | varchar | 255 | 否 | 收货人姓名 |
3 | cts | varchar | 255 | 否 | 创建时间 |
4 | is_def | varchar | 255 | 否 | 是否默认地址 |
5 | phone | varchar | 255 | 否 | 联系电话 |
6 | a_add | varchar | 255 | 否 | 详细地址 |
7 | uid | int | 11 | 否 | 关联用户ID |
购物车表(sp_carts)
购物车表(sp_carts)临时保存用户未结算的商品选择,记录商品ID、数量、规格及实时计算的总价。如表4.4所示。
表4.4 sp_carts
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | gid | int | 11 | 否 | 商品ID |
3 | uid | int | 11 | 否 | 用户ID |
4 | num | int | 11 | 否 | 商品数量 |
5 | cts | varchar | 255 | 否 | 创建时间 |
6 | ginfo | varchar | 255 | 否 | 商品规格信息 |
7 | gprice | double | - | 否 | 商品单价 |
8 | total_price | double | - | 否 | 总价 |
商品表(sp_goods)
商品表(sp_goods)详细描述农户或商户发布的农产品信息。如表4.5所示。
表4.5 sp_goods
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | gname | varchar | 255 | 否 | 商品名称 |
3 | gdesc | longtext | - | 否 | 商品详情描述 |
4 | tags | text | - | 否 | 商品标签 |
5 | gtype | int | 11 | 否 | 商品分类ID |
6 | sales | int | 11 | 否 | 销量 |
7 | stock | int | 11 | 否 | 库存 |
8 | gsize | varchar | 255 | 否 | 商品规格 |
9 | spec_price | text | - | 否 | 规格对应价格 |
10 | showprice | double | - | 否 | 展示价格 |
11 | cts | varchar | 255 | 否 | 创建时间 |
12 | putaway_ts | varchar | 255 | 否 | 上架时间 |
13 | is_putaway | varchar | 255 | 否 | 是否上架 |
14 | imgs | text | - | 否 | 商品图片列表 |
15 | view_num | int | 11 | 否 | 浏览量 |
16 | evel | int | 11 | 否 | 平均评分 |
17 | evaluation_num | int | 11 | 否 | 评价数量 |
18 | is_especially | varchar | 255 | 否 | 是否特价商品 |
19 | pre_price | double | 10 | 否 | 预售价格 |
20 | uid | int | 11 | 否 | 商家用户ID |
21 | sh | varchar | 255 | 否 | 审核状态 |
22 | msg | varchar | 255 | 否 | 备注 |
商品销售统计表(sp_goods_sales)
商品销售统计表(sp_goods_sales)按月汇总商品销量与销售额,关联商品ID与月份标记。如表4.6所示。
表4.6 sp_goods_sales
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | goods_id | int | 11 | 否 | 商品ID |
3 | sales | int | 11 | 否 | 月销量 |
4 | smonth | varchar | 255 | 否 | 统计月份 |
5 | cts | varchar | 255 | 否 | 创建时间 |
6 | total_money | double | - | 否 | 销售额 |
收藏表(sp_evaluation)
收藏表(sp_evaluation)收藏表记录用户所收藏的商品信息。如表4.7所示。
表4.7 sp_collect
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | uid | int | 11 | 否 | 用户ID |
3 | gid | int | 11 | 否 | 商品ID |
4 | cts | varchar | 255 | 否 | 收藏时间 |
评价表(sp_evaluation)
评价表(sp_evaluation)保存用户对已购商品的评分与文字反馈。如表4.8所示。
表4.8 sp_evaluation
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | oid | int | 11 | 否 | 订单ID |
3 | uid | int | 11 | 否 | 用户ID |
4 | evel | int | 11 | 否 | 评分(1-5分) |
5 | context | varchar | 255 | 否 | 评价内容 |
6 | cts | varchar | 255 | 否 | 创建时间 |
7 | gid | int | 11 | 否 | 商品ID |
订单表(sp_orders)
订单表(sp_orders)订单表存储用户购买行为全流程数据。如表4.9所示。
表4.9 sp_orders
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | orderNo | varchar | 255 | 否 | 订单号 |
3 | gid | int | 11 | 否 | 商品ID |
4 | uid | int | 11 | 否 | 用户ID |
5 | ginfo | varchar | 255 | 否 | 商品规格信息 |
6 | gprice | double | - | 否 | 商品单价 |
7 | cts | varchar | 255 | 否 | 创建时间 |
8 | addressinfo | varchar | 255 | 否 | 收货地址信息 |
9 | num | int | 11 | 否 | 购买数量 |
10 | total_price | double | - | 否 | 订单总价 |
11 | note | varchar | 255 | 否 | 用户备注 |
12 | is_pay | varchar | 255 | 否 | 是否支付 |
13 | pay_ts | varchar | 255 | 否 | 支付时间 |
14 | pay_method | varchar | 255 | 否 | 支付方式 |
15 | send_ts | varchar | 255 | 否 | 发货时间 |
16 | is_send | varchar | 255 | 否 | 是否发货 |
17 | is_accept | varchar | 255 | 否 | 是否收货 |
18 | accept_ts | varchar | 255 | 否 | 收货时间 |
19 | evaluate_ts | varchar | 255 | 否 | 评价时间 |
20 | is_evaluate | varchar | 255 | 否 | 是否评价 |
21 | is_refund | varchar | 255 | 否 | 是否退款 |
22 | refund_ts | varchar | 255 | 否 | 退款申请时间 |
23 | refunded_ts | varchar | 255 | 否 | 退款完成时间 |
24 | is_show | varchar | 255 | 否 | 是否显示 |
25 | del_ts | varchar | 255 | 否 | 删除时间 |
26 | swuh | varchar | 255 | 否 | 物流单号 |
27 | rwuh | varchar | 255 | 否 | 退款单号 |
用户标签表(sp_user_tags)
用户标签表(sp_user_tags)记录消费者的兴趣偏好。如表4.10所示。
表4.10 sp_tags
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | tid | int | 11 | 否 | 分类ID |
3 | tagid | int | 11 | 否 | 标签ID |
4 | cts | varchar | 255 | 否 | 创建时间 |
5 | uid | int | 11 | 否 | 用户ID |
商品标签表(sp_tags)
商品标签表(sp_tags)记录细化的商品特征。如表4.11所示。
表4.11 sp_tags
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | tag_name | varchar | 255 | 否 | 标签名称 |
3 | cts | varchar | 255 | 否 | 创建时间 |
4 | tid | int | 11 | 否 | 分类ID |
用户反馈表(sp_tip)
用户反馈表(sp_tip)用户反馈表收集消费者对商品、服务或平台功能的意见。如表4.12所示。
表4.12 sp_tip
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | uid | int | 11 | 否 | 用户ID |
3 | context | varchar | 255 | 否 | 反馈内容 |
4 | replay | varchar | 255 | 否 | 回复内容 |
5 | cts | varchar | 255 | 否 | 反馈时间 |
6 | is_replay | varchar | 255 | 否 | 是否已回复 |
7 | replay_ts | varchar | 255 | 否 | 回复时间 |
库存记录表(sp_inventory_record)
库存记录表(sp_inventory_record)跟踪商品的库存变动历史。如表4.13所示。
表4.13 sp_inventory_record
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | gid | int | 11 | 否 | 商品ID |
3 | num | int | 11 | 否 | 变动数量 |
4 | cts | varchar | 255 | 否 | 操作时间 |
5 | rtype | varchar | 255 | 否 | 类型(入库/出库) |
6 | note | varchar | 255 | 否 | 备注 |
商品分类表(sp_users)
商品分类表(sp_users)定义商品的层级结构。如表4.14所示。
表4.14 sp_users
序号 | 列名 | 数据类型 | 长度 | 不为空 | 注释 |
1 | id | int | 11 | 是 | 主键 |
2 | gid | int | 11 | 否 | 商品ID |
3 | num | int | 11 | 否 | 变动数量 |
4 | cts | varchar | 255 | 否 | 操作时间 |
5 | rtype | varchar | 255 | 否 | 类型(入库/出库) |
6 | note | varchar | 255 | 否 | 备注 |
5.系统实现
用户分为普通消费者、商户、管理员三大角色。普通消费者通过注册时绑定的手机号及密码登录,进入商品浏览与购买界面,可查看商品详情、管理订单及参与促销活动;商户需输入手机号码及密码,登录后进入店铺管理后台,进行商品上架、订单处理及销售数据分析;管理员通过专属管理员账号及密码登录系统后台,负责配置平台广告、管理用户账号,确保平台运营合规高效。各角色权限严格隔离,保障系统安全与用户体验。
考虑到该系统功能模块较多,故此只展示核心功能模块实现场景。
5.1 登录注册功能模块实现
5.1.1用户登录
当用户登录系统时,需输入注册时绑定的手机号及对应密码。系统会实时校验账号有效性,并根据用户角色跳转至对应功能界面。用户登录界面图如图5-1所示。

图5-1 登录功能界面图
用户登录功能核心代码如下。
public MessUntil login(SpUsers u) throws IOException {
MessUntil mess=new MessUntil();
u.setUpass(MD5Until.getMD5(u.getUpass()));
List<SpUsers> uli=spUsersService.queryList(u);
if(uli!=null&&uli.size()>0){
u=uli.get(0);
if(!u.getState().equals("1")){
mess.setStatus(0);
mess.setMsg( "该账号被禁用("+u.getNouse_msg()+")");
return mess;
}
//用户是否已选择喜欢好标签
SpUserTags ut=new SpUserTags();
ut.setUid(u.getId());
List<SpUserTags> utli=spUserTagsService.queryList(ut);
mess.setStatus(1);
mess.setMsg( "成功登录");
mess.setObj(u);
mess.setObj2((utli!=null&&utli.size()>0)?1:0);
return mess;
}else{
mess.setStatus(0);
mess.setMsg( "请输入正确的账号和密码");
return mess;
}
}
5.1.2用户注册
普通消费者和商户通过手机号进行注册,设置密码、昵称、性别等基本信息即可完成账号创建,注册后即可使用该系统。用户注册界面图如图5-2所示。

图5-1 注册功能界面图
用户注册功能核心代码如下。
public MessUntil reg( SpUsers u) throws IOException {
MessUntil mess=new MessUntil();
SpUsers ucon=new SpUsers();
ucon.setPhone(u.getPhone());
List<SpUsers> uli=spUsersService.queryList(ucon);
if(uli!=null&&uli.size()>0){
mess.setStatus( 0);
mess.setMsg( "该手机号已注册");
return mess;
}else{
u.setCts(DateUtils. getNowDateString());
u.setFaceimg(Sys.Upimg.noimg);
u.setStore_logo(Sys.Upimg.noimg);
u.setUpass(MD5Until.getMD5(u.getUpass()));
u.setState("1");
spUsersService.add(u);
mess.setStatus(1);
mess.setMsg( "注册成功");
mess.setObj(u);
return mess;
}
}
5.2 前台核心功能模块实现
5.2.1个人中心功能模块
个人中心模块根据不同用户角色提供定制化功能,确保操作权限与需求精准匹配。消费者可在此修改个人信息,包括上传头像、更新联系方式或调整收货地址,实时管理历史订单记录并追踪物流状态,确认收货后对商品质量进行评分与文字评价。收藏夹功能支持用户保存感兴趣的商品或优质店铺,便于后续复购或参与限时促销活动。此外,对于商户和管理员,个人中心设有进入后台管理选项栏。个人中心面图如图5-3所示。

图5-3 个人中心界面图
个人中心功能核心代码如下。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo, SpOrders a,String _type) throws IOException {
MessUntil mess=new MessUntil();
if(_type==null)_type="all";
if(_type.equals("waitpay")){
a.setIs_pay("0");
a.setIs_send("0");
a.setIs_accept("0");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("wait_deliver_goods")){
a.setIs_pay("1");
a.setIs_send("0");
a.setIs_accept("0");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("wait_sure_accept")){
a.setIs_pay("1");
a.setIs_send("1");
a.setIs_accept("0");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("wait_evaluation")){
a.setIs_pay("1");
a.setIs_send("1");
a.setIs_accept("1");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("finish")){
a.setIs_pay("1");
a.setIs_send("1");
a.setIs_accept("1");
a.setIs_evaluate("1");
a.setIs_refund("0");
}else if(_type.equals("refund")){
a.setIs_pay("1");
a.setIs_refund("2");
}else if(_type.equals("refunded")){
a.setIs_pay("1");
a.setIs_refund("1");
}
a.setIs_show("1");
PageHelper.startPage(pageNo,Sys.Common.pageSize," o.id desc ");
List<SpOrders> li=spOrdersService.queryList(a);
PageInfo pageInfo = new PageInfo(li,Sys.Common.pageSize);
li=pageInfo.getList();
if(li!=null&&li.size()>0){
for(SpOrders o:li){
if(o.getMain_img()!=null&&o.getMain_img().trim().length()>0)o.setMain_img(o.getMain_img().split(",")[0]);
if(o.getIs_pay().equals("0")&&o.getIs_send().equals("0")&&o.getIs_accept().equals("0")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("waitpay");
if(o.getIs_pay().equals("1")&&o.getIs_send().equals("0")&&o.getIs_accept().equals("0")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("wait_deliver_goods");
if(o.getIs_pay().equals("1")&&o.getIs_send().equals("1")&&o.getIs_accept().equals("0")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("wait_sure_accept");
if(o.getIs_pay().equals("1")&&o.getIs_send().equals("1")&&o.getIs_accept().equals("1")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("wait_evaluation");
if(o.getIs_pay().equals("1")&&o.getIs_send().equals("1")&&o.getIs_accept().equals("1")&&o.getIs_evaluate().equals("1")&&o.getIs_refund().equals("0"))o.setOrder_type("finish");
if(o.getIs_pay().equals("1") &&o.getIs_refund().equals("2"))o.setOrder_type("refund");
if(o.getIs_pay().equals("1") &&o.getIs_refund().equals("1"))o.setOrder_type("refunded");
}
}
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.2.2首页浏览商品功能模块
用户可以在首页浏览商品,系统通过协同过滤算法,根据用户的喜好标签来推送商品,用户可根据选择心仪的商品点击查看详情。首页浏览商品页面图如图5-4所示。

图5-4 首页浏览商品界面图
首页核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo,@RequestParam(value="pageSize",defaultValue="10")int pageSize, SpGoods g) throws IOException {
MessUntil mess=new MessUntil();
g.setIs_putaway("1");
String orderby=" cts desc ";
if(g.getOrderby()!=null){
if(g.getOrderby().equals("cts_desc")) orderby=" cts desc ";
if(g.getOrderby().equals("sales_desc")) orderby=" sales desc ";
if(g.getOrderby().equals("evel_desc")) orderby=" evel desc ";
if(g.getOrderby().equals("view_num_desc")) orderby=" view_num desc ";
}
PageHelper.startPage(pageNo,pageSize,orderby);
List<SpGoods> li=spGoodsService.queryList(g);
PageInfo<SpGoods> pageInfo = new PageInfo<SpGoods>(li, pageSize);
li=pageInfo.getList();
if(li.size()>0) {
for(SpGoods spg:li){
if(spg.getImgs()!=null&&spg.getImgs().trim().length()>0)spg.setMain_img(spg.getImgs().split(",")[0]);
spg.setGdesc(null);
}
}
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.2.3商品详情功能模块
消费者可以从商品详情中了解农产品信息、做出购买决策的核心页面,整合了商品基础信息、多媒体展示及用户互动功能。首页商品详情页面图如图5-5所示。

图5-5 商品详情界面图
商品详情核心代码如下所示。
public MessUntil detail( SpGoods g) throws IOException {
MessUntil mess=new MessUntil();
//添加浏览量
g=spGoodsService.queryById(g.getId());
SpGoods gc=new SpGoods();
gc.setView_num(g.getView_num()+1);
gc.setId(g.getId());
spGoodsService.update(gc);
//商品平均分
int avg_evel=5;
if(g.getEvel()>0&&g.getEvaluation_num()>0){
avg_evel=g.getEvel()/g.getEvaluation_num();
}
//用ip访问项目需要替换
g.setGdesc(g.getGdesc().replace(Sys.Common.httpurl,Sys.Common.httpurlip));
g.setGdesc(g.getGdesc().replace("<img","<img width='100%' "));
mess.setStatus(1);
mess.setObj(g);
mess.setObj2(avg_evel);
return mess;
}
5.2.4购物车功能模块
购物车模块为用户提供临时的商品暂存与批量结算服务,支持灵活管理选购清单。消费者浏览商品时,可将不同规格的农产品加入购物车,系统自动记录商品ID、单价及数量,并实时计算当前总价。购物车页面图如图5-6所示。

图5-6 购物车详情界面图
购物车核心代码如下所示。
public MessUntil list( SpCarts a) throws IOException {
MessUntil mess=new MessUntil();
List<SpCarts> li=spCartsService.queryList(a);
for(SpCarts c:li){
if(c.getMain_img()!=null&&c.getMain_img().trim().length()>0)c.setMain_img(c.getMain_img().split(",")[0]);
}
mess.setStatus(1);
mess.setObj(li);
return mess;
} mess.setObj(g);
mess.setObj2(avg_evel);
return mess;
}
5.2.5下单商品功能模块
用户可以确认购物车商品或商品详情页直接购买,待选择收货地址后系统生成唯一订单号,并基于商品规格与数量计算总价。支付成功后自动更新订单为“代发货”。商家端接收订单通知,准备发货并上传物流单号,用户可在个人中心查看订单信息,形成从下单到收货的完整闭环。下单支付页面图如图5-7所示。

图5-7 下单商品界面图
下单商品核心代码如下所示。
public MessUntil save(HttpServletRequest request ) throws IOException {
MessUntil mess=new MessUntil();
try{
String[] ids=request.getParameter("ids").split(",");
String[] nums=request.getParameter("nums").split(",");
List<SpOrders> li=new ArrayList<SpOrders>();
String orderNos="";
String msg="";
for(String id:ids){
if(id!=null&&id.trim().length()>0) {
SpCarts c=spCartService.queryById(Integer.parseInt(id));
if(!c.getIs_putaway().equals("1") ){
msg+=c.getGname()+" 已下架<br>";
}
if( c.getNum()>c.getStock() ){
msg+=c.getGname()+" 库存不足<br>";
}
}
}
if(msg.trim().length()>0){
mess.setStatus(0);
mess.setMsg("生成订单失败<br>"+msg);
return mess;
}
for(int i=0;i<ids.length;i++){
String idstr=ids[i];
if(idstr!=null&&idstr.trim().length()>0){
SpCarts c=spCartService.queryById(Integer.parseInt(idstr));
if(c.getNum()<=c.getStock()&&c.getIs_putaway().equals("1")){
int num=Integer.parseInt(nums[i]);
SpOrders o=new SpOrders();
o.setOrderNo(OrderUntil.getOrderNo());
o.setCts(DateUtils.getNowDateString());
o.setGid(c.getGid());
o.setUid(c.getUid());
o.setGinfo(c.getGinfo());
o.setGprice(c.getGprice());
o.setNum(num);
o.setTotal_price(num*c.getGprice());
spOrdersService.add(o);
li.add(o);
spCartService.delete(Integer.parseInt(idstr));
orderNos+=o.getOrderNo()+"_";
}
}
}
mess.setStatus(1);
mess.setMsg("已生成订单");
mess.setObj(orderNos);
return mess;
}catch(Exception e){
mess.setStatus(0);
mess.setMsg("生成订单异常");
return mess;
}
}
5.3 后台核心功能模块实现
5.3.1订单和评价功能模块
管理员可以查看所有订单信息,以及订单下的评价信息。商户则可以查看所属自己店铺的订单信息,并对其选择确定发货、确定退款等状态进行变更,同时允许查看此订单下的评论。订单和评价页面图如图5-7、图5-8所示。

图5-7 订单管理界面图

图5-8 评价管理界面图
订单管理核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo, HttpServletRequest request, SpOrders a) throws IOException {
MessUntil mess=new MessUntil();
String _type=request.getParameter("_type");
if(_type.equals("waitpay")){
a.setIs_pay("0");
a.setIs_send("0");
a.setIs_accept("0");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("wait_deliver_goods")){
a.setIs_pay("1");
a.setIs_send("0");
a.setIs_accept("0");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("wait_sure_accept")){
a.setIs_pay("1");
a.setIs_send("1");
a.setIs_accept("0");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("wait_evaluation")){
a.setIs_pay("1");
a.setIs_send("1");
a.setIs_accept("1");
a.setIs_evaluate("0");
a.setIs_refund("0");
}else if(_type.equals("finish")){
a.setIs_pay("1");
a.setIs_send("1");
a.setIs_accept("1");
a.setIs_evaluate("1");
a.setIs_refund("0");
}else if(_type.equals("refund")){
a.setIs_pay("1");
a.setIs_refund("2");
}else if(_type.equals("refunded")){
a.setIs_pay("1");
a.setIs_refund("1");
}
PageHelper.startPage(pageNo,Sys.Common.pageSize," cts desc ");
List<SpOrders> li=spOrdersService.queryList(a);
PageInfo pageInfo = new PageInfo(li,Sys.Common.pageSize);
li=pageInfo.getList();
if(li!=null&&li.size()>0){
for(SpOrders o:li){
if(o.getMain_img()!=null&&o.getMain_img().trim().length()>0)o.setMain_img(o.getMain_img().split(",")[0]); if(o.getIs_pay().equals("0")&&o.getIs_send().equals("0")&&o.getIs_accept().equals("0")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("waitpay"); if(o.getIs_pay().equals("1")&&o.getIs_send().equals("0")&&o.getIs_accept().equals("0")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("wait_deliver_goods"); if(o.getIs_pay().equals("1")&&o.getIs_send().equals("1")&&o.getIs_accept().equals("0")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("wait_sure_accept"); if(o.getIs_pay().equals("1")&&o.getIs_send().equals("1")&&o.getIs_accept().equals("1")&&o.getIs_evaluate().equals("0")&&o.getIs_refund().equals("0"))o.setOrder_type("wait_evaluation");
if(o.getIs_pay().equals("1")&&o.getIs_send().equals("1")&&o.getIs_accept().equals("1")&&o.getIs_evaluate().equals("1")&&o.getIs_refund().equals("0"))o.setOrder_type("finish");
if(o.getIs_pay().equals("1") && o.getIs_refund().equals("2"))o.setOrder_type("refund");
if(o.getIs_pay().equals("1") && o.getIs_refund().equals("1"))o.setOrder_type("refunded");
}
}
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.3.2分类管理功能模块
管理员的商品分类管理涵盖分类管理与标签管理两大核心功能,用于构建结构化的商品展示体系,提升用户检索效率与购物体验。分类管理聚焦商品层级的定义与维护。管理员可创建一级分类,设置分类名称、排序值。标签管理用于细化商品特征,补充分类的筛选维度。管理员可创建标签,商户在商家商品时可以将商品绑定到特定分类下,确保标签与商品逻辑一致。分类管理页面图如图5-10、5-11所示。

图5-10 分类管理界面图

图5-11 标签管理界面图
分类管理核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo, SpType t) throws IOException {
MessUntil mess=new MessUntil();
PageHelper.startPage(pageNo, Sys.Common.pageSize," cts desc ");
List<SpType> li=spTypeService.queryList(t);
PageInfo pageInfo = new PageInfo(li,Sys.Common.pageSize);
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.3.3商品管理功能模块(管理员)
管理员通过后台系统对平台商品进行监管,核心目标是确保商品信息合规、分类准确且展示规范,维护平台内容质量与用户体验。管理员可查看所有商户发布的商品详情,包括名称、描述、价格、库存及关联的图文素材,对存在虚假宣传、违规内容或资质不全的商品执行强制下架操作。商品管理页面图如图5-12所示。

图5-12 商品管理界面图
商品管理核心代码如下所示。
public MessUntil list( SpGoods g) {
MessUntil mess=new MessUntil();
List<SpGoods> li=spGoodsService.queryList(g);
if(li.size()>0) {
for(SpGoods spg:li){
if(spg.getImgs()!=null&&spg.getImgs().trim().length()>0){
spg.setMain_img(spg.getImgs().split(",")[0]);
}
}
}
mess.setStatus(1);
mess.setObj(li);
return mess;
}
5.3.4商品统计功能模块
管理员和商户可以通过商品统计模块全面掌握平台商品的销售动态与市场趋势,为运营决策提供数据支撑,确保管理员基于最新信息调整运营策略,最终提升平台商品质量与用户满意度。商品管理页面图如图5-13、5-14所示。

图5-12 商品统计界面图

图5-13 商品统计界面图
商品统计核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo, HttpServletRequest request, HttpServletResponse response, HttpSession session,
Model model, SpGoodsSales t) throws IOException {
MessUntil mess=new MessUntil();
PageHelper.startPage(pageNo, Sys.Common.pageSize," gs.id desc ");
List<SpGoodsSales> li=spGoodsSalesService.queryList(t);
PageInfo pageInfo = new PageInfo(li,Sys.Common.pageSize);
li=pageInfo.getList();
if(li.size()>0) {
for(SpGoodsSales spg:li){
if(spg.getMain_img()!=null&&spg.getMain_img().trim().length()>0){
spg.setMain_img(spg.getMain_img().split(",")[0]);
}
}
}
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.3.5轮播图管理功能模块
轮播图模块是管理员配置平台首页及活动页广告的核心工具,用于吸引用户注意力并引导点击,提升商品曝光与活动参与度。管理员可通过后台新增、编辑或删除轮播图,上传高清广告图片并设置跳转链接。每个轮播图需指定展示顺序,确保不同场景的广告内容精准投放。轮播图管理页面图如图5-15所示。

图5-15 轮播图管理界面图
轮播图管理核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo, SpAd t) throws IOException {
MessUntil mess=new MessUntil();
PageHelper.startPage(pageNo, Sys.Common.pageSize," cts desc ");
List<SpAd> li=spAdService.queryList(t);
PageInfo pageInfo = new PageInfo(li,Sys.Common.pageSize);
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.3.6用户管理功能模块
管理员通过商品统计模块全面掌握平台商品的销售动态与市场趋势,为运营决策提供数据支撑,确保管理员基于最新信息调整运营策略,最终提升平台商品质量与用户满意度。商品管理页面图如图5-16所示。

图5-16 轮播图管理界面图
轮播图管理核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo, SpUsers u) throws IOException {
MessUntil mess=new MessUntil();
PageHelper.startPage(pageNo,Sys.Common.pageSize," cts desc ");
List<SpUsers> li=spUsersService.queryList(u);
PageInfo pageInfo = new PageInfo(li,Sys.Common.pageSize);
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
5.3.7商品管理功能模块(商户)
商户的商品管理功能围绕农产品的上下架、展示与销售全流程设计,旨在帮助商户高效维护商品信息并响应市场需求。商品管理页面图如图5-12所示。

图5-12 商品管理界面图
商品管理核心代码如下所示。
public MessUntil page(@RequestParam(value="pageNo",defaultValue="1")int pageNo,@RequestParam(value="pageSize",defaultValue="10")int pageSize, SpGoods g) throws IOException {
MessUntil mess=new MessUntil();
g.setIs_putaway("1");
String orderby=" cts desc ";
if(g.getOrderby()!=null){
if(g.getOrderby().equals("cts_desc")) orderby=" cts desc ";
if(g.getOrderby().equals("sales_desc")) orderby=" sales desc ";
if(g.getOrderby().equals("evel_desc")) orderby=" evel desc ";
if(g.getOrderby().equals("view_num_desc")) orderby=" view_num desc ";
}
PageHelper.startPage(pageNo,pageSize,orderby);
List<SpGoods> li=spGoodsService.queryList(g);
PageInfo<SpGoods> pageInfo = new PageInfo<SpGoods>(li, pageSize);
li=pageInfo.getList();
if(li.size()>0) {
for(SpGoods spg:li){
if(spg.getImgs()!=null&&spg.getImgs().trim().length()>0)spg.setMain_img(spg.getImgs().split(",")[0]);
spg.setGdesc(null);
}
}
mess.setStatus(1);
mess.setObj(pageInfo);
return mess;
}
6.系统测试
6.1 系统测试目的
在软件开发的最终阶段,系统测试是验证产品可靠性的重要关卡。由于代码实现、功能交互等环节可能存在疏漏,测试的核心目标是通过模拟真实使用场景,全面检查系统功能是否正常、性能是否达标、安全是否存在漏洞,以及操作是否符合用户习惯。
6.2 测试方法
系统测试是保障软件质量的核心步骤,需对每个环节严格把关,通过细致排查发现潜在问题,逐步优化系统功能,最终实现操作流畅且全面满足用户需求的目标。测试过程中通常采用以下方法,经过多轮验证才能确认系统是否存在缺陷。只有通过反复测试,才能确保系统在实际使用中稳定可靠。
(1) 黑盒测试:模拟真实用户的操作行为,检验系统是否能正确执行功能并返回预期结果。
(2) 白盒测试:深入系统内部代码结构,检测程序运行逻辑是否合理高效。
(3) 模块测试:针对系统的独立功能单元进行专项验证。
由于系统功能模块复杂且交互场景多样,故采用抽样测试,优先覆盖高频使用功能及核心业务流程。
6.3 测试用例
6.3.1 注册模块测试
(1)测试用例
模块名称:注册
测试方法:黑盒测试
测试时间:2025年4月2日
测试人员:XXX
用例描述:登陆注册模块进行测试检验
前置条件:系统成功运行且显示注册界面
测试类别:功能测试
期望结果:用户登录成功
真实结果:注册功能正常
(2)测试结果
在用户注册测试中,测试人员进入注册页面后输入手机号,设置密码、昵称等息后提交,页面提示“已注册”并自动跳转至选择用户喜好标签界面。登录测试图如图6-1所示。

图6-1 注册测试图
6.3.2 登录模块测试
(1)测试用例
模块名称:登录
测试方法:黑盒测试
测试时间:2025年4月2日
测试人员:XXX
用例描述:登陆模块进行测试检验
前置条件:系统成功运行且显示登录界面
测试类别:功能测试
期望结果:用户登录成功
真实结果:登录功能正常
(2)测试结果
在用户登录测试中,测试人员进入登录页面后输入手机号和密码后提交,系统自动跳转至个人中心界面。登录测试图如图6-2所示。

图6-2 登录测试图
6.3.3 商品详情模块测试
(1)测试用例
模块名称:商品详情
测试方法:黑盒测试
测试时间:2025年4月2日
测试人员:XXX
用例描述:商品模块进行测试检验
前置条件:用户成功登录且显示首页界面
测试类别:功能测试
期望结果:展示商品信息
真实结果:商品信息展示正常
(2)测试结果
在页面展示测试中,测试人员从首页中点击任意商品,进入商品详情页面展示数据,测试人员核对验证商品名称、价格、库存状态与后台数据一致。测试图如图6-3所示。

图6-3 商品详情页测试图
6.3.4 购物车模块测试
(1)测试用例
模块名称:购物车
测试方法:黑盒测试
测试时间:2025年4月2日
测试人员:XXX
用例描述:购物车模块进行测试检验
前置条件:用户成功登录且显示商品详情界面
测试类别:功能测试
期望结果:商品成功加入购物车
真实结果:商品成功加入购物车
(2)测试结果
在购物车测试中,测试人员将不同商品加入购物车后,测试页面正确展示商品列表、规格、单价及总价。修改商品数量时,检查库存实时更新提示。删除某商品后,确认列表同步刷新且总价重新计算。测试图如图6-4、图6-5所示。

图6-4 商品加入购物车测试图

图6-5 商品加入购物车测试图
6.3.5 下单商品模块测试
(1)测试用例
模块名称:下单商品
测试方法:黑盒测试
测试时间:2025年4月2日
测试人员:XXX
用例描述:购买商品模块进行测试检验
前置条件:用户成功登录且显示商品详情页/首页
测试类别:功能测试
期望结果:商品成功下单,状态显示待发货
真实结果:商品成功下单,状态显示待发货
(2)测试结果
在购物车测试中,测试人员从购物车勾选商品进入结算页,或者在商品详情页直接点击购买按钮,生成订单后选择已保存的收货地址或新增地址,确认订单金额与优惠抵扣无误后,选择支付并完成扫码操作,测试人员在订单管理查看最新一笔订单状态为待发货。测试图如图6-6、图6-7、图6-8所示。

图6-6 下单商品测试图

图6-7 下单商品测试图
图6-8 下单商品测试图
6.4测试结果
本次测试整体达到预期目标,成功定位并修复了系统运行中的关键问题。例如,在数据查询模块测试时,发现评价分数统计时未对空值数据进行校验,修正后增加非空判断逻辑,功能运行稳定。
本次测试整体达成预期目标,有效识别并修复了系统核心流程中的潜在风险。测试中对于问题的改进显著提升了系统稳定性与用户体验,为平台正式上线奠定可靠基础。
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论








java
vue
springboot
Mysql
ssm
小程序
uniapp
js和jquery