该项目是一个面向农业领域的综合服务平台,旨在为农民、农业合作社提供全方位的技术支持和服务。平台通过整合线上线下资源,帮助用户快速解决农业生产中的各类问题,并提升农业生产的效率与质量
主要目标包括:
提高农业生产效率:通过智能化的问题解答系统,帮助农户及时获取专业指导。
优化服务流程:建立完善的工单管理系统,实现从问题提出到解决的全流程跟踪。
增强用户体验:提供便捷的操作界面和多样化的交互方式(如语音输入、地图定位等),满足不同用户的需求
核心功能模块:
问题管理模块
用户可提交农业生产相关问题,系统自动分配给对应的专家或特派员进行处理。
支持问题分类、状态追踪(待办理、处理中、已解决等)、历史记录查看等功能。
提供“一键解答”入口,方便用户快速发起咨询。
工单管理模块
实现线上线下的无缝衔接,支持工单创建、分配、处理、办结等全生命周期管理。
包含时间计算、现场照片上传、服务结果反馈等功能,确保服务质量可控。
支持工单状态筛选(全部、线上处理中、线下处理中、已解决等),便于管理者监控进度。
消息通知模块
实时推送工单状态变更、专家回复、系统公告等重要信息。
支持文本、链接等多种消息类型,提升沟通效率。
地图定位与打卡签到模块
集成高德地图API,支持地址搜索、位置解析、经纬度获取等功能。
特派员可通过地图打卡签到,记录实际服务地点和时间,保障服务真实性。
文件上传与管理模块
支持图片、文档等多种格式文件上传,用于记录服务过程或问题详情。
提供文件存储路径管理和访问权限控制,确保数据安全。
用户认证与权限管理模块
支持多角色登录(普通用户、特派员、管理员等),根据不同角色展示相应功能。
提供实名认证、标签管理等功能,完善用户画像。
政策宣传模块
展示国家及地方农业相关政策法规,帮助用户了解最新动态。
支持政策解读、案例分享等内容发布。
数据分析与报表模块
对工单数量、解决率、用户满意度等关键指标进行统计分析。
生成可视化图表,辅助决策制定。业务流程与功能路径描述
典型业务流程:
用户提问 → 问题受理 → 分配专家 → 在线沟通 → 工单创建
用户在前端页面提交问题,系统将其存入ProblemInfo表。
后台根据问题类型匹配合适的特派员或专家,并发送消息通知。
若需进一步处理,则创建工单并进入下一阶段。
工单处理 → 线上沟通/线下服务 → 办结归档
特派员接收工单后,可通过聊天窗口与用户在线交流解决问题。
如需现场服务,可将工单转为线下模式,填写服务时间、地点等信息。
服务完成后,在FinishPage.vue页面录入开始时间、结束时间、服务结果、反馈意见等内容,并上传现场照片。
数据同步至后端WorkOrderInfo实体,更新工单状态为“已结束”。
整体架构
该项目采用前后端分离的设计模式,前端基于 Vue.js 构建,后端基于 Spring Boot 开发。整体架构清晰,职责分明,便于维护和扩展。
前端架构
使用 Vue CLI 构建单页应用(SPA),通过 vue-router 实现路由管理。
引入 Element UI 组件库提升开发效率和用户体验。
通过 axios 封装统一的 HTTP 请求工具(Request.js),集中处理请求拦截、响应拦截和错误提示。
状态管理使用 Vuex,用于全局状态共享(如用户登录信息、工单列表等)。
图片上传功能集成第三方服务(如本地服务器 /upload 接口),支持多图上传并回显。
后端架构
基于 Spring Boot 搭建 RESTful API 服务,使用 MyBatis Plus 作为 ORM 框架简化数据库操作。
数据库选用 MySQL,通过 XML 映射文件实现复杂 SQL 查询。
使用 JWT 进行用户身份认证,结合拦截器(AuthorizationConfig)保护接口安全。
文件上传功能通过独立控制器(FileUploadController)处理,支持静态资源访问。
引入 WebSocket 支持实时通信(如消息推送)。
问题描述:前端调用后端接口时报错:“No 'Access-Control-Allow-Origin' header is present on the requested resource.”
原因分析:浏览器同源策略限制了跨域请求。
解决方案:
后端配置 CORS 支持,在 CorsConfig.java 中设置允许跨域的域名、方法和头部。
2)JWT 认证失效或过期
问题描述:用户登录后一段时间内无法继续访问受保护接口。
原因分析:JWT 令牌未正确刷新或验证逻辑有缺陷。
解决方案:
在拦截器中增加 Token 刷新机制,若 Token 快过期则自动续签。
客户端每次请求前检查 Token 有效期,临近过期时主动刷新。
(3)文件上传路径问题
问题描述:上传的图片无法正常显示,提示 404 错误。
原因分析:后端保存文件路径与前端访问路径不一致。
解决方案:
后端返回完整的访问 URL(如 http://localhost:8089/uploads/filename.jpg)。
前端使用绝对路径而非相对路径加载图片。
(4)时间格式化异常
问题描述:前后端传递的时间字段格式不一致导致解析失败。
原因分析:Java 默认时间格式与前端期望格式不符。
解决方案:
后端使用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm") 注解统一序列化/反序列化时间字段。