温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系名片!
一、项目背景与意义
随着乡村振兴战略的深入推进,农村土地经营权流转规模不断扩大,传统的线下登记、纸质合同、人工统计方式已经难以满足土地流转信息透明化、流程规范化和监管数字化的需求。土地流转涉及农户、承包方、村集体和乡镇农业主管部门等多方主体,信息分散、合同管理混乱、流转过程缺乏留痕等问题较为突出。
基于 Spring Boot + Vue3 构建农村土地流转管理平台,可以将土地信息发布、流转申请、合同签订、备案审核、数据统计等环节统一到线上完成,既降低了农户和承包方的沟通成本,也为基层管理部门提供了可追溯的数据支撑,具有较强的现实意义和工程实践价值。
二、系统需求分析
2.1 角色划分
- 农户:发布自家土地流转信息,查看流转申请,确认合同。
- 承包方:浏览土地信息,提交流转申请,签订合同。
- 村集体/管理员:审核土地信息与流转申请,管理合同备案。
- 系统管理员:用户管理、角色权限管理、字典与日志管理。
2.2 核心功能需求
| 模块 | 主要功能 |
|---|---|
| 土地信息管理 | 土地发布、编辑、下架、地块位置与面积维护、图片上传 |
| 流转申请管理 | 申请提交、状态流转、审核意见、申请记录查询 |
| 合同管理 | 合同生成、在线签订、备案归档、到期提醒 |
| 审核备案 | 村级初审、乡镇复审、备案结果公示 |
| 统计分析 | 流转面积统计、流转趋势、区域分布图表 |
| 系统管理 | 用户、角色、菜单权限、操作日志 |
三、技术选型
3.1 后端技术栈
- Spring Boot 3.x:快速构建 RESTful 服务,内置 Tomcat 容器。
- MyBatis-Plus:简化单表 CRUD,支持分页与逻辑删除。
- MySQL 8.0:存储用户、土地、申请、合同等业务数据。
- Redis:缓存登录令牌与字典数据,提升访问性能。
- Spring Security + JWT:实现无状态认证与接口级权限控制。
- MinIO:对象存储,用于土地图片与合同附件管理。
3.2 前端技术栈
- Vue 3:使用 Composition API 组织页面逻辑。
- Vite:前端构建工具,启动与热更新速度快。
- Element Plus:提供表格、表单、弹窗等基础组件。
- Pinia:状态管理,保存用户信息与权限菜单。
- Vue Router:路由与动态菜单加载。
- ECharts:实现流转面积与趋势的可视化统计。
四、系统架构设计
系统采用前后端分离架构,前端通过 Axios 调用后端 RESTful 接口,后端按 Controller、Service、Mapper 三层组织代码,公共能力抽取为独立模块。
flowchart TD A[Vue3 前端] -->|HTTP/JSON| B[Spring Boot 接口层] B --> C[业务服务层] C --> D[MyBatis-Plus 持久层] D --> E[(MySQL)] C --> F[(Redis 缓存)] C --> G[MinIO 文件存储] B --> H[JWT 认证与权限拦截]五、数据库设计
核心表围绕土地、申请、合同三条主线设计,并通过用户表与角色表完成权限关联。
| 表名 | 说明 | 关键字段 |
|---|---|---|
| sys_user | 用户表 | id、username、password、real_name、phone、role_id |
| land_info | 土地信息表 | id、owner_id、title、area、location、price、status |
| transfer_apply | 流转申请表 | id、land_id、applicant_id、apply_time、status、remark |
| contract_info | 合同表 | id、apply_id、contract_no、start_date、end_date、file_url、status |
| audit_record | 审核记录表 | id、biz_id、biz_type、auditor_id、result、opinion、create_time |
六、核心功能实现
6.1 登录认证与权限控制
用户登录成功后由后端签发 JWT,前端将令牌存入 Pinia 与 localStorage,并在 Axios 请求拦截器中统一携带。后端通过拦截器解析令牌并校验接口权限。
@PostMapping("/login") public Result<LoginVO> login(@RequestBody LoginDTO dto) { SysUser user = userService.getByUsername(dto.getUsername()); if (user == null || !passwordEncoder.matches(dto.getPassword(), user.getPassword())) { return Result.fail("用户名或密码错误"); } String token = jwtUtil.generateToken(user.getId(), user.getUsername()); LoginVO vo = new LoginVO(token, user.getRealName(), user.getRoleId()); return Result.ok(vo); }6.2 土地信息发布
农户填写地块名称、面积、位置、期望价格并上传图片,提交后进入待审核状态,审核通过后在前台列表展示。
@PostMapping("/land") public Result<Long> publish(@RequestBody @Valid LandDTO dto) { LandInfo land = new LandInfo(); BeanUtils.copyProperties(dto, land); land.setOwnerId(SecurityUtils.getUserId()); land.setStatus(LandStatus.PENDING.getCode()); landService.save(land); return Result.ok(land.getId()); }6.3 流转申请与状态流转
承包方对已上架土地提交申请,申请状态按「待审核 → 审核通过 → 已签约 → 已完成」流转,每次状态变更写入审核记录表,保证过程可追溯。
@Transactional(rollbackFor = Exception.class) public void audit(Long applyId, Integer result, String opinion) { TransferApply apply = applyMapper.selectById(applyId); if (apply == null || !ApplyStatus.PENDING.getCode().equals(apply.getStatus())) { throw new BizException("申请状态不允许审核"); } apply.setStatus(result == 1 ? ApplyStatus.APPROVED.getCode() : ApplyStatus.REJECTED.getCode()); applyMapper.updateById(apply); auditRecordService.saveRecord(applyId, "APPLY", result, opinion); }6.4 合同生成与备案
审核通过后系统根据土地信息与申请信息生成合同编号,前端展示合同模板供双方确认,确认后上传签署文件并完成备案归档。
6.5 数据统计可视化
统计模块按区域、时间维度聚合流转面积与申请数量,前端使用 ECharts 渲染柱状图与折线图,帮助管理部门掌握流转趋势。
const res = await getTransferStat({ year: 2026 }) const option = { tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: res.data.months }, yAxis: { type: 'value', name: '流转面积(亩)' }, series: [{ type: 'bar', data: res.data.areas, name: '流转面积' }] } chart.setOption(option)七、系统部署与运行
- 准备 JDK 17、Node.js 18、MySQL 8.0、Redis 与 MinIO 环境。
- 导入数据库脚本,修改后端
application.yml中的数据源与存储配置。 - 后端执行
mvn clean package打包并启动。 - 前端执行
npm install与npm run dev启动开发服务。 - 生产环境使用 Nginx 托管前端静态资源,并反向代理后端接口。
八、总结与展望
本文围绕农村土地流转业务,完成了基于 Spring Boot + Vue3 的管理平台需求分析、架构设计与核心功能实现。系统通过前后端分离、权限控制和流程留痕,提升了土地流转业务的规范性与透明度。
后续可在此基础上扩展移动端小程序、电子签章对接、地块地图可视化以及流转风险预警等能力,进一步提升平台的实用价值。