一、前言
随着信息技术的飞速发展和互联网的广泛普及,电子商务在各个行业中的应用日益深入。农产品销售领域也面临着新的机遇和挑战。传统的农产品销售模式存在着信息不对称、销售渠道单一、流通环节多、损耗大等问题。在当前消费市场对农产品品质、安全、便捷性要求不断提高的背景下,构建一个高效、便捷、信息透明的农产品销售系统具有重要意义。
在农产品销售系统中,采用 HTML、MySQL 和 SpringBoot 的技术组合极具优势。HTML 用于构建系统的前端界面,它能创建直观、易用的交互页面,方便用户浏览农产品信息、下单等操作。MySQL 作为关系型数据库管理系统,负责存储各类数据,如农产品详情、用户信息、订单记录等,提供强大的数据存储与管理能力。SpringBoot 框架则在后端发挥关键作用,简化了项目的配置和开发流程,提高开发效率,并有效地处理业务逻辑,确保系统的稳定性和可扩展性。
二、技术环境
前端:HTML、CSS、JavaScript
后端:SpringBoot、SpringMVC、Mybatis、Redis
插件:Maven Helper、Lombok、MybatisLog
工具:IDEA、Postman、Maven、Git、Navicat
环境:Windows10、MySQL
三、功能设计
3.1 管理员用例图如下图所示:
3.2 商家用例图如下图所示:
3.3 用户用例图如下图所示:
四、数据库设计
数据库的 E-R 图(实体 - 关系图)是一种强大的工具,用于直观地表示数据库中的实体及其之间的关系。在数据库设计中,E-R 图可以帮助我们清晰地理解数据的结构和流向。限于篇幅要求,仅列出关键部分实体属性图和E-R图,如下所述。
五、部分效果展示
5.1 用户首页界面分为三部分。上部是轮播图,展示热门农产品。中部以卡片形式列出各类农产品,有名称、缩略图和价格。下部是推荐农产品区,展示根据用户浏览历史推荐的产品,页面设有返回顶部按钮。
5.2 分类查询界面左侧为农产品分类目录,包含果蔬、谷物、肉类等。点击分类,右侧区域显示该类下的农产品列表,展示名称、产地和价格。页面顶部设有搜索框,可对分类下的产品进行精准搜索。
5.3 下单收货地址界面包含多个输入框。顶部是地址标题栏,下方依次为姓名输入框、联系电话输入框、详细地址输入框(可具体到门牌号),还有省市区的下拉菜单选项,底部设有保存和默认地址勾选框。
5.5 商品详情界面上部展示农产品大图。中部有名称、价格、产地等基本信息,还有详细的产品描述,包括种植方式、保质期等。下部显示已购用户的评价与晒单,页面右侧设有加入购物车和立即购买按钮。
5.6 购物车界面以列表形式呈现。每行展示一款农产品的缩略图、名称、单价、数量及小计金额。有数量增减按钮来调整购买数量,底部显示总价以及结算和删除商品的按钮。
5.7 我的订单界面以列表展示订单。每个订单项显示订单编号、下单时间、农产品缩略图、名称、数量、总价。订单有不同状态标识,待付款、已付款、已发货等。
5.8 评价订单界面上方显示所购农产品名称、缩略图。中间是评分区域,可选择 1 - 5 星评价。下方为评价内容输入框,可输入文字描述使用感受、产品质量等,底部设有提交评价按钮,提交后显示评价成功提示。
5.9 管理员统计界面分三部分。上部是统计时间选择框。中部以图表呈现,柱状图展示不同农产品的销售数量,折线图反映销售额走势。下部是数据表格,列出各农产品的订单量、销售额等详细数据。
5.10 管理员管理用户界面左侧为用户列表,显示用户名、注册时间等基本信息。右侧为操作区,可查看用户详细资料,修改用户权限,封禁或解封用户账号,还能对用户进行分类筛选以便高效管理。
5.11 管理员管理商品界面,左侧栏为商品分类目录。右侧显示商品列表,含名称、图片、价格等信息。管理员可新增商品,输入详细信息上传图片;也能编辑已有商品信息,或下架商品。
5.12 管理员订单界面以表格形式呈现。表头包含订单编号、下单用户、下单时间、商品名称、数量、总价、订单状态等。管理员可按订单状态筛选,查看详情,对未发货订单修改发货状态,处理退款申请并记录操作日志。
5.13 商家退货界面顶部展示退货订单编号。中间部分呈现退货商品名称、图片、退货数量、退货原因(买家填写)。下方有审核按钮,商家可选择同意退货并填写退款金额,或拒绝退货并填写拒绝理由。
5.14 商家店铺界面上部显示店铺名称与标志。中部展示商家主营农产品的分类标签,点击可查看对应商品列表,列表包含商品图片、名称、价格、库存。
5.15 商家个人信息界面上部显示商家名称。中部为基本信息栏,有商家联系人、联系电话、电子邮箱等可编辑项。下方是店铺相关信息,如店铺地址、经营范围,底部设有保存修改按钮,用于更新信息。
六、部分功能代码
6.1 下单
public Result add(Order order) {
Goods goods = goodsService.findById(order.getOrderDetailsList().get(0).getGoodsId());
if (null == goods){
return ResultGenerator.genFailResult(ResultCode.GOODS_NULL_ERROR,"商品不存在,请重新下单");
}
if (null == goods.getRepertory()){
return ResultGenerator.genFailResult(ResultCode.GOODS_REPERTORY_ERROR,"商品不足,请联系管理员补货");
}
int count = orderDetailsService.getCountByGoodsId(order.getOrderDetailsList().get(0).getGoodsId());
if (goods.getRepertory().intValue() < count){
return ResultGenerator.genFailResult(ResultCode.GOODS_REPERTORY_ERROR,"商品不足,请联系管理员补货");
}
order.setId(DigitUtil.generatorLongId());
//批量添加订单详情
if (order.getOrderDetailsList().size() > 0){
for (OrderDetails d: order.getOrderDetailsList()) {
d.setOrderId(order.getId());
d.setCreatedAt(new Date());
d.setCreatedBy(order.getCreatedBy());
d.setIsDelete(false);
}
orderDetailsService.save(order.getOrderDetailsList());
}
order.setBusinessId(1678286883L);
order.setCreatedAt(new Date());
order.setIsDelete(false);
save(order);
//下单成功库存-1
goods.setRepertory(goods.getRepertory().subtract(BigDecimal.valueOf(1)));
goodsService.update(goods);
//同步删除购物车数据
if (order.getCartId() != null && order.getCartId().size() > 0){
Cart cart;
for (Long id:order.getCartId()) {
cart = new Cart();
cart.setId(id);
cart.setIsDelete(true);
cartService.update(cart);
}
}
Result result= ResultGenerator.genSuccessResult();
result.setData(order);
return result;
}