毕业设计实战:基于Spring Boot的农事管理系统设计与实现全攻略

47 阅读12分钟

毕业设计实战:基于Spring Boot的农事管理系统设计与实现全攻略

在开发“基于Spring Boot的农事管理系统”毕业设计时,曾因“农事安排与土地规划数据关联脱节”踩过关键坑——初期未设计清晰的农事安排状态机和土地-农作物关联机制,导致员工安排农事任务后土地状态未同步更新、农作物种植记录无法追溯,耗费4天重构农事安排模块、引入状态流转和土地-农作物关联机制才解决问题📝。基于此次实战经验,本文精简拆解核心开发流程,附避坑要点与实操细节,为同类毕设提供可落地的实施参考。

一、需求分析:聚焦农事+土地双核心,避免功能冗余

部分同学易陷入“功能堆砌”误区,比如我曾耗时3天开发“农事地图可视化”模块,最终因偏离“土地规划、农作物管理、农事安排、气象监测”核心需求被导师要求删减。明确“土地规划→农作物种植→农事安排→气象监测→商品销售”的业务闭环,是降低返工率的关键。

1. 核心角色与功能(精简版)

角色核心功能
管理员用户管理、员工管理、土地规划管理、农作物管理、农事安排审核、商品管理、订单处理、公告发布、论坛管理
员工农事安排执行、监控记录上传、选苗育种管理、气象数据录入、商品出库管理
用户土地查看、农作物浏览、商品购买(积分/余额支付)、订单查询、气象数据查看、论坛交流、个人信息维护

2. 需求避坑要点

  • 拒绝空想调研:邀请8名农业相关人员模拟“土地规划→农作物种植→农事安排→收获→商品销售”完整流程,基于“用户需要知道农事进度和气象预警”需求,增设“农事进度跟踪”和“气象预警通知”模块,实用性远大于冗余的“农事地图”;
  • 明确约束条件:提前规定“土地编号自动生成(格式:TD+年月日+序号)”“农事安排需关联具体土地和农作物”“商品库存不足时自动预警”“气象数据每日自动更新”,为系统实现提供明确依据。

二、技术选型:稳定框架+数据实时同步,新手可上手

前期曾尝试引入Redis缓存气象数据,因数据实时性难保证且学习成本高,调试耗时4天。最终确定“成熟框架+定时任务”组合:

技术工具选型理由避坑提醒
Spring Boot 2.x + MyBatis-Plus快速开发,简化配置,高效实现CRUD和业务逻辑,声明式事务管理方便事务注解@Transactional记得在Service层添加;农事安排和库存操作必须加事务
Vue 2.x + ElementUI组件丰富,快速构建前后台界面,表格和表单组件好用农事状态用标签展示;气象数据用图表实时显示
MySQL 5.7存储用户、土地、农作物、商品等核心业务数据土地面积字段用Decimal类型;事务要保证订单和库存一致性
Quartz定时任务实现气象数据定时采集、农事提醒、库存预警等功能定时任务配置单独文件;注意任务执行时间错峰
ECharts数据可视化展示,适合展示气象趋势、农事进度毕设加分项,用于首页数据看板

三、数据库设计:业务关联清晰,支撑土地-农事-商品闭环

数据库设计直接影响后续开发效率。前期因未设计“农事进度记录表”和“土地状态字段”,导致农事安排和土地规划无法联动。

1. 核心表结构(精选12张表)

  • 管理员表(users):id、username、password(MD5加密)、role、addtime;
  • 用户表(yonghu):id、yonghu_uuid_number(用户编号)、yonghu_name、yonghu_phone、yonghu_id_number、yonghu_photo、yonghu_email、new_money(余额)、jinyong_types(账户状态)、create_time;
  • 员工表(yuangong):id、yuangong_uuid_number(员工编号)、yuangong_name、yuangong_phone、yuangong_id_number、yuangong_photo、yuangong_email、jinyong_types、create_time;
  • 土地规划表(tudi):id、tudi_name、tudi_uuid_number(土地编号)、tudi_photo、tudi_address、zan_number、cai_number、tudi_types(土地类型)、tudi_mianji(面积)、tudi_clicknum、tudi_time(规划时间)、tudi_content、shangxia_types(是否上架)、insert_time、create_time;
  • 农作物表(nongzuowu):id、tudi_id(关联土地)、nongzuowu_uuid_number、nongzuowu_name、nongzuowu_photo、zan_number、cai_number、nongzuowu_types、nongzuowu_kucun_number(种植数量)、nongzuowu_clicknum、nongzuowu_kaishi_time(开始时间)、nongzuowu_yujijieshu_time(预计结束时间)、nongzuowu_content、shangxia_types、insert_time、create_time;
  • 农事安排表(nongshianpai):id、yuangong_id(执行员工)、nongshianpai_uuid_number(安排编号)、nongshianpai_name、nongshianpai_file(附件)、nongshianpai_address、insert_time(安排时间)、nongshianpai_time(执行时间)、nongshianpai_types(安排类型)、nongshianpai_content、nongshianpai_zhuangtai_types(状态:0待执行/1执行中/2已完成/3延期)、create_time;
  • 监控节点表(jiankongjiedian):id、jiankongjiedian_uuid_number、jiankongjiedian_name、jiankongjiedian_photo、jiankongjiedian_address、jiankongjiedian_types、jiankongjiedian_content、insert_time、create_time;
  • 监控记录表(jiankongjiedian_jilu):id、jiankongjiedian_id(关联节点)、jiankongjiedian_jilu_uuid_number、jiankongjiedian_jilu_name、jiankongjiedian_jilu_photo(监拍照片)、jiankongjiedian_shuzhi(监控数值)、jiankongjiedian_jilu_content、insert_time、create_time;
  • 气象数据表(qixiangshuju):id、qixiangshuju_name、qixiangshuju_uuid_number、qixiangshuju_photo、qixiangshuju_address、zan_number、cai_number、qixiangshuju_types、qixiangshuju_da_zhi(最大值)、qixiangshuju_xiao_zhi(最小值)、qixiangshuju_clicknum、qixiangshuju_time(所属时间)、qixiangshuju_content、shangxia_types、insert_time、create_time;
  • 商品表(shangpin):id、shangpin_name、shangpin_uuid_number、shangpin_photo、shangpin_address(出产地点)、zan_number、cai_number、shangpin_types、shangpin_kucun_number(库存)、shangpin_yuzhi(阈值)、shangpin_old_money、shangpin_new_money、shangpin_cangku(所属仓库)、shangpin_clicknum、shangpin_content、shangxia_types、insert_time、create_time;
  • 商品订单表(shangpin_order):id、shangpin_order_uuid_number(订单编号)、address_id、shangpin_id、yonghu_id、buy_number、shangpin_order_true_price(实付金额)、shangpin_order_courier_name(快递公司)、shangpin_order_courier_number(快递单号)、shangpin_order_types(订单状态)、shangpin_order_payment_types(支付类型)、insert_time、create_time;
  • 选苗育种表(xuanmiaoyuzhong):id、xuanmiaoyuzhong_uuid_number、xuanmiaoyuzhong_name、xuanmiaoyuzhong_photo、xuanmiaoyuzhong_address、xuanmiaoyuzhong_types、xuanmiaoyuzhong_tiaoxuan_number(挑选数量)、xuanmiaoyuzhong_tiaoxuanhou_number(挑选出数量)、xuanmiaoyuzhong_time(挑选时间)、xuanmiaoyuzhong_content、insert_time、create_time;
  • 公告信息表(gonggao):id、gonggao_name、gonggao_photo、gonggao_types、insert_time、gonggao_content、create_time。

2. 关键业务SQL示例

示例SQL(查询指定土地的全部农事安排及执行状态):

-- 查询土地关联的所有农事安排,包含执行员工和状态
SELECT 
    n.*,
    y.yuangong_name,
    t.tudi_name as land_name
FROM nongshianpai n
LEFT JOIN yuangong y ON n.yuangong_id = y.id
LEFT JOIN nongzuowu nz ON n.nongzuowu_id = nz.id
LEFT JOIN tudi t ON nz.tudi_id = t.id
WHERE t.id = #{landId}
ORDER BY n.nongshianpai_time DESC

关键避坑:农事安排状态用整数表示(0待执行/1执行中/2已完成/3延期);土地状态和农作物生长周期联动;商品库存低于阈值时自动预警;气象数据定时采集需记录数据来源。

四、核心功能实现:8大模块满足答辩需求

无需复杂功能,优先完成以下8个核心模块,其中土地-农作物-农事安排的联动是答辩重点。

1. 土地规划管理(基础资源模块)

  • 核心逻辑:管理员添加土地信息(位置、面积、类型)→用户可查看土地详情→土地关联农作物;
  • 页面设计:土地列表卡片式展示,显示土地照片、位置、面积、热度;详情页展示关联农作物和农事安排;
  • 代码要点(土地新增):
public void addLand(Tudi tudi) {
    // 生成土地编号:TD+年月日+随机4位
    String uuid = "TD" + new SimpleDateFormat("yyyyMMdd").format(new Date()) 
                  + String.format("%04d", new Random().nextInt(10000));
    tudi.setTudiUuidNumber(uuid);
    tudi.setTudiClicknum(0);
    tudi.setShangxiaTypes(1); // 默认上架
    tudi.setInsertTime(new Date());
    tudi.setCreateTime(new Date());
    tudiMapper.insert(tudi);
}

2. 农作物管理(核心业务模块)

  • 核心逻辑:在土地上种植农作物→设置种植周期→关联农事安排;
  • 页面设计:农作物列表显示名称、类型、种植时间、预计收获时间;详情页展示生长进度条;
  • 代码要点:农作物必须关联土地;种植开始后自动创建初始农事安排模板。

3. 农事安排管理(关键业务流程)

  • 核心逻辑:员工创建农事安排(关联土地和农作物)→管理员审核→安排执行→状态更新;
  • 页面设计:安排列表显示标题、执行时间、状态标签;详情页可上传执行附件;
  • 代码要点(状态更新核心):
@Transactional
public void updateNongshianpaiStatus(Long id, Integer status, String remarks) {
    // 1. 更新农事安排状态
    Nongshianpai安排 = nongshianpaiMapper.selectById(id);
    安排.setNongshianpaiZhuangtaiTypes(status);
    安排.setUpdateTime(new Date());
    nongshianpaiMapper.updateById(安排);
    
    // 2. 如果安排完成,更新土地关联农作物的生长状态
    if (status == 2) { // 已完成
        Nongzuowu农作物 = nongzuowuMapper.selectById(安排.getNongzuowuId());
        // 根据农事类型更新农作物生长阶段
        if (安排.getNongshianpaiTypes() == 1) { // 播种
            农作物.setShengzhangJieduan("苗期");
        } else if (安排.getNongshianpaiTypes() == 3) { // 施肥
            农作物.setShengzhangJieduan("生长期");
        }
        nongzuowuMapper.updateById(农作物);
        
        // 3. 记录农事日志
        insertNongshiLog(安排, status);
    }
}

4. 监控节点与记录(物联网模拟)

  • 核心逻辑:管理员设置监控节点(位置、类型)→员工定期上传监控记录(照片、数值);
  • 页面设计:节点列表显示在线状态;记录列表显示监拍照片和数值;
  • 代码要点:监控数值超出阈值时自动预警;记录按时间倒序排列。

5. 气象数据管理(数据可视化)

  • 核心逻辑:定时任务采集气象数据(或手动录入)→前端用图表展示趋势;
  • 页面设计:气象列表显示日期、气温、湿度;详情页用ECharts展示周趋势;
  • 代码要点(定时任务示例):
@Component
public class WeatherDataTask {
    
    @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点执行
    public void fetchWeatherData() {
        // 模拟调用气象API
        Qixiangshuju weather = new Qixiangshuju();
        weather.setQixiangshujuName("2024-05-20 气象数据");
        weather.setQixiangshujuUuidNumber("QX" + System.currentTimeMillis());
        weather.setQixiangshujuTime(new Date());
        weather.setQixiangshujuDaZhi(new BigDecimal(28.5)); // 最高温
        weather.setQixiangshujuXiaoZhi(new BigDecimal(18.2)); // 最低温
        weather.setQixiangshujuTypes(1); // 日常气象
        weather.setShangxiaTypes(1);
        weather.setInsertTime(new Date());
        weather.setCreateTime(new Date());
        qixiangshujuMapper.insert(weather);
    }
}

6. 商品管理与销售(变现模块)

  • 核心逻辑:管理员上架农产品(关联农作物)→用户浏览购买→订单生成→库存扣减;
  • 页面设计:商品卡片展示图片、价格、库存;订单列表显示物流状态;
  • 代码要点:商品库存与农作物收获量联动;订单支付时校验余额和库存。

7. 论坛管理(社区互动)

  • 核心逻辑:用户发布种植心得、提问→管理员审核→用户间交流;
  • 页面设计:论坛列表显示帖子标题、作者、状态;详情页可评论回复;
  • 代码要点:帖子状态控制(0待审核/1已通过/2驳回);支持图片上传。

8. 数据看板(答辩加分项)

  • 核心逻辑:首页展示土地分布、农事进度、气象趋势、商品销售等统计数据;
  • 页面设计:卡片式统计+ECharts图表+最近待办事项;
  • 代码要点:使用ECharts展示周气象变化、月农事完成量。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、农事特色功能设计(关键加分项)

农事管理系统的核心在于“农事闭环”,即土地规划→农作物种植→农事安排→收获销售全流程可追溯,以下是实测有效的设计方案:

1. 土地-农作物-农事全流程追溯

环节记录内容可追溯信息
土地规划土地编号、位置、面积、类型谁在什么时间规划了哪块地
农作物种植农作物编号、品种、种植时间这块地种了什么、什么时候种的
农事安排安排编号、类型、执行人、执行时间什么时间做了什么农事操作
收获销售收获数量、商品编号、销售订单收获的农产品去了哪里

2. 农事进度自动计算

// 根据农事安排完成情况自动计算农作物生长进度
public Integer calculateGrowthProgress(Long nongzuowuId) {
    // 查询该农作物关联的所有农事安排
    List<Nongshianpai> list = nongshianpaiMapper.selectList(
        new LambdaQueryWrapper<Nongshianpai>()
            .eq(Nongshianpai::getNongzuowuId, nongzuowuId)
    );
    
    if (list.isEmpty()) return 0;
    
    // 计算完成比例
    long completed = list.stream()
        .filter(n -> n.getNongshianpaiZhuangtaiTypes() == 2)
        .count();
    
    return (int) (completed * 100 / list.size());
}

3. 库存预警机制

-- 定时任务扫描库存低于阈值的商品
SELECT * FROM shangpin 
WHERE shangpin_kucun_number < shangpin_yuzhi 
AND shangxia_types = 1;

六、测试与答辩:流程演示为主,突出农事闭环

1. 核心测试用例

测试场景操作步骤预期结果
土地规划全流程管理员新增土地→查看土地列表土地信息正确显示;编号自动生成
农事安排全流程员工创建安排→管理员审核→员工执行完成安排状态更新;农作物生长阶段变化
商品购买流程用户选购商品→余额支付→管理员发货订单生成;库存扣减;余额扣减
气象数据采集定时任务执行→查看气象列表每日气象数据自动录入
库存预警商品库存低于阈值系统自动发送预警通知

2. 答辩准备技巧

  • 演示流程:分角色演示(管理员端 + 员工端 + 用户端)→ 土地规划 → 农作物种植 → 农事安排 → 气象监测 → 收获商品 → 用户购买 → 展示完整的农事-销售闭环;
  • 业务讲解:准备一页PPT展示系统功能结构图(图4.1),说明每个模块的作用和角色定位;
  • 技术亮点:重点讲解农事安排与土地-农作物的事务一致性、气象数据定时采集机制、库存预警实现方案;
  • 突出问题解决:讲清“如何保证农事安排不冲突”(时间校验+状态控制)、“气象数据如何保证实时性”(定时任务+手动补录)、“商品库存和农作物收获如何联动”(事务管理);提前预判“为什么要设计农事进度跟踪”,回答“让用户直观了解农作物生长情况,提升种植管理效率”。

结语

本文核心是“聚焦土地-农作物-农事安排核心业务、实现农事流程闭环、设计完整的农事管理系统”。毕设无需复杂系统,把土地规划+农作物管理+农事安排+气象监测+商品销售的业务逻辑讲透、实现一个可运行的农事管理系统、展示完整的农事闭环,即可成为答辩亮点。

若需完整项目源码(带详细注释)、测试数据SQL脚本、农事进度表完整设计,可在评论区留言“SpringBoot农事管理系统”获取;开发中遇问题(如事务一致性、农事状态流转、定时任务配置),也可留言咨询~ 祝毕设顺利!🎉