拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于微信小程序的农产品销售商城设计与实现

基于微信小程序的农产品销售商城设计与实现 温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与意义随着移动互联网的普及和微信生态的快速发展微信小程序凭借其「即用即走、无需下载安装」的轻量化特点已成为连接用户与服务的重要入口。在农产品流通领域传统销售模式长期面临信息不对称、中间环节多、产销对接不畅等问题农户难以直接触达终端消费者而消费者也难以便捷地购买到新鲜、可溯源的本地农产品。基于微信小程序的农产品销售商城旨在搭建一个连接农户与消费者的线上交易平台具有以下现实意义减少流通环节去除多层中间商让农户获得更高收益消费者享受更优价格。拓宽销售渠道帮助农户突破地域限制将优质农产品销往更广阔的市场。提升购物体验用户通过微信即可完成浏览、下单、支付、售后全流程操作便捷。促进产销对接通过订单数据反向指导生产减少盲目种植带来的滞销风险。2. 技术栈选型本系统采用前后端分离架构整体技术栈如下层次技术选型说明客户端微信小程序WXML / WXSS / JS面向消费者的商城前端运行于微信生态后端框架Spring Boot提供 RESTful API处理业务逻辑与数据校验持久层MyBatis-Plus简化数据库操作支持分页与条件查询数据库MySQL 8.0存储用户、商品、订单、购物车等核心数据缓存Redis缓存热门商品与登录会话提升并发响应能力对象存储阿里云 OSS存储商品图片等静态资源接口文档Swagger / Knife4j自动生成接口文档便于前后端联调3. 系统功能模块设计系统按用户角色划分为消费者端和管理员端两大模块具体功能如下3.1 消费者端用户登录基于微信授权获取 openid实现一键登录与注册。商品浏览按分类展示农产品支持关键词搜索、销量与价格排序。商品详情展示图文详情、产地信息、库存与评价。购物车支持添加、修改数量、删除与批量结算。订单管理提交订单、微信支付、查看订单状态、确认收货。个人中心管理收货地址、浏览历史、收藏与售后申请。3.2 管理员端商品管理上架、下架、编辑商品信息与库存。订单管理查看订单列表、处理发货与退款。分类管理维护商品分类层级。数据统计按日/周/月统计销售额、订单量与热门商品。4. 数据库设计核心数据表包括用户表、商品表、分类表、购物车表、订单表与订单明细表其关系如下erDiagram USER ||--o{ CART : 拥有 USER ||--o{ ORDERS : 下单 USER ||--o{ ADDRESS : 维护 CATEGORY ||--o{ PRODUCT : 包含 PRODUCT ||--o{ CART : 加入 PRODUCT ||--o{ ORDER_ITEM : 明细 ORDERS ||--|{ ORDER_ITEM : 包含 USER { int id PK string openid string nickname string avatar } PRODUCT { int id PK int category_id FK string name decimal price int stock string image } ORDERS { int id PK int user_id FK string order_no decimal total_amount int status }其中订单表通过状态字段区分待付款、待发货、待收货、已完成与已取消等状态订单明细表记录每件商品的快照信息保证历史订单可追溯。5. 核心代码实现5.1 微信登录接口后端接收小程序端传来的 code调用微信接口换取 openid并完成用户注册或登录。RestController RequestMapping(/api/user) public class UserController { Autowired private UserService userService; PostMapping(/login) public Result login(RequestBody LoginRequest request) { String openid userService.getOpenid(request.getCode()); User user userService.findOrCreate(openid); String token JwtUtil.generateToken(user.getId()); return Result.success(token); } }5.2 商品分页查询使用 MyBatis-Plus 实现按分类、关键词与排序条件的分页查询。Service public class ProductServiceImpl implements ProductService { Autowired private ProductMapper productMapper; Override public PageResultProductVO pageQuery(ProductQuery query) { LambdaQueryWrapperProduct wrapper new LambdaQueryWrapper(); wrapper.eq(query.getCategoryId() ! null, Product::getCategoryId, query.getCategoryId()) .like(StringUtils.hasText(query.getKeyword()), Product::getName, query.getKeyword()) .orderByDesc(Product::getSales); PageProduct page productMapper.selectPage( new Page(query.getPageNum(), query.getPageSize()), wrapper); return PageResult.of(page); } }5.3 提交订单提交订单时需校验库存、计算总价并生成订单号整个过程使用事务保证数据一致性。Transactional(rollbackFor Exception.class) public Order createOrder(Long userId, ListCartItemDTO items) { String orderNo AG System.currentTimeMillis(); BigDecimal total BigDecimal.ZERO; ListOrderItem orderItems new ArrayList(); for (CartItemDTO item : items) { Product product productMapper.selectById(item.getProductId()); if (product null || product.getStock() item.getQuantity()) { throw new BusinessException(商品库存不足); } total total.add(product.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))); orderItems.add(buildOrderItem(orderNo, product, item.getQuantity())); product.setStock(product.getStock() - item.getQuantity()); productMapper.updateById(product); } Order order new Order(); order.setOrderNo(orderNo); order.setUserId(userId); order.setTotalAmount(total); order.setStatus(0); orderMapper.insert(order); orderItemMapper.batchInsert(orderItems); return order; }5.4 小程序端商品列表页小程序端通过 wx.request 调用后端接口渲染商品列表并支持下拉刷新与触底加载。Page({ data: { products: [], pageNum: 1, pageSize: 10, hasMore: true }, onLoad() { this.loadProducts(); }, loadProducts() { wx.request({ url: https://api.example.com/api/product/page, data: { pageNum: this.data.pageNum, pageSize: this.data.pageSize }, success: (res) { const list res.data.data.records; this.setData({ products: this.data.products.concat(list), hasMore: this.data.products.length list.length res.data.data.total }); } }); }, onReachBottom() { if (this.data.hasMore) { this.setData({ pageNum: this.data.pageNum 1 }); this.loadProducts(); } } })6. 总结本文围绕基于微信小程序的农产品销售商城从项目背景、技术栈、功能模块、数据库设计到核心代码进行了系统阐述。系统充分利用微信生态的流量优势结合 Spring Boot 与 MySQL 构建了稳定可靠的后端服务实现了从商品展示、在线下单到支付售后的完整交易闭环。未来可进一步引入农产品溯源、智能推荐与社区团购等能力持续提升平台的用户体验与商业价值。
返回列表