这个系统是做给油莎豆种植场景的:种植户录档案、报数据,农技员给指导,管理员统筹区域和知识库。技术上用 SpringBoot 3.3 + Vue 3 做前后端分离,推荐模块接的是 Weka 的随机森林。下面把从选题到落地的过程复盘一遍,背景、选型、模块设计、测试都写到了。
一、选题背景
油莎豆这东西,接到题目之前我完全没听过。
查了才知道它名字不少:油莎草、铁荸荠、地下核桃、洋地栗,说的都是同一个东西——莎草科的草本植物,吃的部分长在地下,是块茎不是种子。我第一次看到"地下核桃"这个叫法,还以为是核桃的某个品种,翻了半天资料才确认是两码事。
它的特点说白了就俩字:耐折腾。耐旱、耐涝、耐瘠薄,沙地盐碱地都能活,种下去管理粗放,杆叶还能喂牲口。块茎含油率大概 20%~30%,能榨油,也能直接煮着吃、酿酒、做饲料。国内六十年代引种过一轮,后来因为食用油料供给的问题又被翻出来推广,内蒙古、新疆、河北、山东这些地方现在都有种植。
但"能种"和"种得好"是两件事。
查资料的过程中我记下几个比较典型的场景:种植户大多凭经验,啥时候下种、施多少肥、啥时候收,靠的是上一季的记忆和邻里之间互相打听;农技员一个人管好几个乡镇,根本跑不过来,只能靠电话和微信群零散应付;收完之后产量多少、哪个品种表现好、哪块地掉了产,这些数据基本都没留下来,第二年还是从头摸。
细想下来,信息断在三个地方:地块和种植过程没绑定、技术指导没留痕、产量数据没沉淀。这三件事恰好都是信息系统该干的活。
也有人会问,市面上没有现成的吗?我专门搜过一圈"种植管理系统",找到的东西大致两类:一类是农产品商城,把油莎豆做成商品挂上去卖,本质是电商,跟"怎么种"一点关系没有;另一类是论文里的框架图,模块画得挺齐,但没有一块地、一份档案是真数据。真正围绕种植过程做的——档案、地块、产量预估、农技指导——几乎没有能直接参考的。
所以这个系统最后收敛成四件事:把地块和种植过程绑起来,把农技指导的过程留痕,把产量数据沉淀下来做横向对比,把知识整理成能查的库。后面讲技术选型和模块设计,基本都是围着这四件事转的。
二、技术选型
整个项目用到的技术如下:
|
技术 |
版本 |
用途 |
|
JDK |
17 |
运行环境 |
|
Spring Boot |
3.3.0 |
后端框架 |
|
MyBatis-Plus |
3.5.5 |
ORM 持久层 |
|
MySQL |
8.0 |
数据库 |
|
Vue |
3.5.13 |
前端框架 |
|
Element Plus |
2.11.3 |
UI 组件库 |
|
Vue Router |
4.5.1 |
前端路由 |
|
Axios |
1.9.0 |
HTTP 请求 |
|
Weka |
3.8.5 |
随机森林推荐模型 |
三、系统功能一览
这个系统包含前台种植户模块、后台模块(管理员、农技员)三部分,具体功能如下:
1. 前台种植户模块
- 基础功能模块:系统首页、农技员介绍、知识库、公告资讯、论坛交流、站内咨询(与农技员在线沟通);
- 个人中心功能:修改密码、个人信息维护、我的地块、种植档案管理(含档案完善、产量预测)、种植指导查看、我的收藏。
2. 后台管理员模块
- 全流程管理功能:系统首页、种植户管理、农技员管理、区域管理、地块管理、种植档案管理、种植指导管理、产量预测管理、知识库管理、档案完善管理、使用报告管理、公告资讯管理、论坛交流管理、系统管理(智能AI、轮播图管理)、个人中心。
3. 后台农技员模块
- 业务功能:系统首页、种植档案管理、种植指导管理、产量预测管理、档案完善管理、个人中心。
该系统聚焦农业种植服务场景:种植户在前台自助填报档案、获取知识和指导,农技员在后台执行指导业务,管理员统筹区域地块与知识资源,实现种植过程的数据化、规范化管理,提升农技服务效率。
四、项目截图






五、亮点模块:Weka 随机森林做混合推荐
这个项目里我自己最满意的模块是推荐部分。没有用毕设烂大街的"基于用户的协同过滤+自己手写相似度",而是接了 Weka:
// 推荐工厂:支持两种协同过滤 + 随机森林模型混合
@Component
public class RecommendAlgorithmFactory {
// 用户-物品矩阵推荐(用协)
private static final Map<Long, Map<Long, Double>> userItemMatrix
= new ConcurrentHashMap<>();
// 物品-用户矩阵推荐(物协)
private static final Map<Long, Map<Long, Double>> itemUserMatrix
= new ConcurrentHashMap<>();
// Weka RandomForest 训练模型,持久化到 models/ 目录,带缓存
}
设计思路是三层:先构建用户-物品矩阵做协同过滤,再用 Weka 的 RandomForest 训练分类模型,最后混合推荐——冷启动阶段靠协同过滤兜底,数据量上来之后机器学习模型的权重逐渐加大。模型持久化到 algorithm/recommend/models/ 目录,加了 ConcurrentHashMap 缓存避免每次请求都重新加载。
六、系统功能测试
按黑盒方式把主流程过了一遍:
|
序号 |
测试功能 |
操作 |
预期 |
结果 |
|
1 |
种植档案录入 |
填写地块、作物、生长周期信息 |
保存成功,列表可见 |
通过 |
|
2 |
区域与地块管理 |
新增区域并下挂地块 |
两级层级展示正确 |
通过 |
|
3 |
产量预测填报 |
录入预测数据 |
保存并可查看详情 |
通过 |
|
4 |
农技指导与站内聊天 |
农技员发指导,种植户提问 |
消息收发正常 |
通过 |
|
5 |
知识库与论坛 |
发帖并收藏 |
收藏列表实时更新 |
通过 |
|
6 |
个性化推荐 |
登录后进推荐页 |
返回混合推荐结果 |
通过 |
再补一组边界用例,验证录入的校验逻辑:
|
序号 |
测试功能 |
操作 |
预期 |
结果 |
|
1 |
档案录入 |
必填项地块留空提交 |
提示地块必填,不入库 |
通过 |
|
2 |
区域管理 |
新增重名区域 |
提示区域已存在 |
通过 |
|
3 |
用户登录 |
密码错误 |
提示账号或密码错误 |
通过 |
|
4 |
用户登录 |
普通用户选管理员角色登录 |
角色校验拦截 |
通过 |
|
5 |
知识库 |
删除已被收藏的帖子 |
级联校验,不允许直接删除 |
通过 |
七、写在最后
这个项目给我最大的收获是想清楚了一件事:农业信息化的难点不在技术,在数据从哪来。系统里档案填报的完整率是整个平台价值的地基,而让种植户愿意填、填得对,比写一个随机森林难多了——这个问题的答案在产品交互里,不在代码里。
后面会继续写这个系列的其他项目,下一篇讲图书馆座位预约系统的优化,核心是预约超卖问题怎么用原子扣减解决。感兴趣的可以关注。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_44209743/article/details/169564922






