1. 项目背景与核心价值
去年帮农科院做技术咨询时,发现许多乡镇合作社还在用excel登记农产品销售,经常出现订单漏记、库存不准的问题。这个基于SpringBoot+微信小程序的农产品销售管理系统,正是为了解决这类传统农业销售场景中的痛点而生。
系统最大的特色在于打通了微信生态与农产品供应链管理。农户通过小程序就能完成商品上架、订单处理、物流跟踪全套流程,采购方则能实时查看产地直供的农产品信息。我实测过三个版本,目前这套方案在操作便捷性和系统稳定性上表现最好,特别适合作为计算机专业毕业设计的实战项目。
2. 技术架构设计解析
2.1 整体技术栈选型
采用SpringBoot 2.7 + Vue.js 2.x + UniApp的技术组合,主要基于以下考量:
- 微信小程序要求前端必须支持WXML语法,UniApp的跨端特性可以一套代码同时生成小程序和H5页面
- SpringBoot的自动配置特性大幅简化了农产品业务模块的开发复杂度
- MyBatis-Plus的ActiveRecord模式特别适合快速构建农产品CRUD功能
java复制// 典型农产品实体类设计示例
@Data
@TableName("agri_product")
public class Product {
@TableId(type = IdType.AUTO)
private Long id;
private String name; // 商品名称
private String origin; // 产地
private BigDecimal price;
private String unit; // 计量单位(斤/公斤)
@TableField(exist = false)
private List<String> imageUrls; // 商品图片
}
2.2 微信小程序端关键技术
小程序端采用分包加载策略,主要功能模块包括:
- 商品展示模块(首页、分类页)
- 订单交易模块(购物车、支付)
- 农户后台模块(商品管理、订单处理)
- 物流跟踪模块(对接快递鸟API)
特别注意:微信小程序request域名必须配置在服务器域名白名单中,建议在application.yml提前配置好https域名
3. 核心业务功能实现
3.1 农产品信息管理
采用七牛云OSS存储商品图片,前端通过uni.uploadFile上传后返回URL。关键实现点:
- 农产品分类采用三级树形结构(大类->品种->具体产品)
- 价格字段使用DECIMAL(10,2)保证计算精度
- 库存预警设置监听器,低于阈值自动通知农户
sql复制-- 商品表结构设计
CREATE TABLE `agri_product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL COMMENT '三级分类ID',
`farm_id` bigint(20) NOT NULL COMMENT '农户ID',
`name` varchar(100) NOT NULL,
`spec` varchar(50) DEFAULT NULL COMMENT '规格',
`price` decimal(10,2) NOT NULL,
`stock` int(11) DEFAULT '0',
`status` tinyint(4) DEFAULT '1' COMMENT '上架状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 微信支付集成
支付流程特别注意:
- 需要申请农业类目的微信商户号
- 采用JSAPI支付方式
- 支付成功后通过微信模板消息通知农户
支付核心代码逻辑:
java复制@RestController
@RequestMapping("/api/pay")
public class PaymentController {
@PostMapping("/create")
public Result createOrder(@RequestBody OrderDTO dto) {
// 1. 校验库存
// 2. 生成支付流水号
// 3. 调用微信支付统一下单接口
WxPayMpOrderResult result = wxPayService.createOrder(
new WxPayUnifiedOrderRequest()
.setBody("农产品订单-" + dto.getProductName())
.setOutTradeNo(orderNo)
.setTotalFee(dto.getTotalFee())
.setSpbillCreateIp(request.getRemoteAddr())
.setNotifyUrl(notifyUrl)
.setTradeType("JSAPI")
.setOpenid(dto.getOpenid()));
return Result.success(result);
}
}
4. 系统部署与性能优化
4.1 生产环境部署方案
推荐采用Docker Compose部署:
yaml复制version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: agri@123
volumes:
- ./mysql/data:/var/lib/mysql
redis:
image: redis:alpine
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
- redis
4.2 性能优化要点
- 商品列表接口添加Redis缓存,设置30分钟过期
- 使用Hutool的BloomFilter防止缓存穿透
- 微信access_token采用集中管理,避免重复获取
java复制// 缓存配置示例
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(30))
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
}
}
5. 毕业设计扩展建议
- 增加农产品溯源功能:通过区块链技术记录种植、采收、检测全流程
- 开发智能推荐模块:基于用户浏览历史推荐相关农产品
- 集成地图API:显示农产品原产地地理位置
- 添加预售功能:支持时令农产品提前预定
我在实际部署时发现,Nginx配置gzip压缩后,小程序页面加载速度能提升40%左右。建议在server配置中添加:
nginx复制gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
这个项目最值得深入的是微信生态与农业场景的结合点,后续可以考虑接入视频号直播带货功能,实现更立体的农产品销售渠道。