基于Java+SpringBoot+vue的智能农场管理系统详细设计和实现

基于Java+SpringBoot+vue的智能农场管理系统详细设计和实现

博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域
作者主页 央顺技术团队
Java毕设项目精品实战案例《1000套》
欢迎点赞 收藏 ⭐留言
文末获取源码联系方式

文章目录

  • 基于Java+SpringBoot+vue的智能农场管理系统详细设计和实现
  • 研究背景意义
  • 主要模块设计:
  • 语言技术:
  • 功能截图:
    • 用户管理:
    • 角色菜单:
    • 菜单列表:
    • 地块档案:
    • 种植计划:
    • 生产资料:
    • 预警管理:
    • 通知公告:
    • 文件资料:
  • 论文报告:
  • 关键源码:
  • 总结:
  • 获取源码:

研究背景意义

中国是农业大国,农业经济在整个国民经济和社会发展中一直有着非常重要的意义。20世纪90年代以来,电子信息、网络通讯、自动控制等信息技术在农业领域得到广泛应用。目前,我国农业发展已经由传统农业向现代化农业发展。农业信息化就是利用信息技术,促进农业持续稳定的过程。它及时、有效、尤误的把农场信息他送到农场主的手中,实现农场生产、管理、销售信息化,提高农场经营效率。中国一直重视农业的发展,但是对于农业现代化建设缺没能跟上现代化的步伐。当前阶段我国的农业信息化建设任然处于刚刚起步的阶段。在政策上我国政府在多地建设了信息化农场的试点地区。而在技术层次,各类农场管理系统也被开发和应用各类农场。农产管理系统配合传感器是目前使用较广泛的信息技术。通过对农场调查研究,分析建立数据库和农场信息管理系统、加工处理传感器数据,帮助管理人做出正确的决策。通过传统渠道的信息搜集和查询,非常繁琐而目效率低下,很难把握时间上。在这种情况下,我决定开发一套基于Java前后端分离的网页的在线智能农场管理系统包括登录模块,普通用户管理,农场数据分析展示、地块信息管理、种植计划管理、生产预警管理、生产资料管理等模块组成,用来发搜集整理和发布相关信息。极大的提高了效率,和缩短时间。让大家可以更方便的体验和实践与传统方式截然不同的管理方式。

主要模块设计:

在这里插入图片描述

语言技术:

开发工具:IDEA 2021.3、navicat for mysql 、postman。

开发语言:java、jdk1.8、mysql5、node.js 14。

硬件环境:Windows 10操作系统、Google浏览器等。

主要技术:springboot、mybatis-plus、vue、element UI、mysql等

功能截图:

用户输入登录地址:http://localhost:8001/#/login进入到登录页面、输入账号密码进行登录验证
在这里插入图片描述
农场信息管理首页:首页基本介绍、可以自定义展示图文视频都可以的
在这里插入图片描述
这里采用echarts树状图图标模拟实现。
在这里插入图片描述

用户管理:

在这里插入图片描述
在这里插入图片描述

角色菜单:

在这里插入图片描述

菜单列表:

可以具体控制到按钮级别
在这里插入图片描述

地块档案:

在这里插入图片描述

种植计划:

在这里插入图片描述

生产资料:

在这里插入图片描述

预警管理:

在这里插入图片描述
在这里插入图片描述

通知公告:

在这里插入图片描述
在这里插入图片描述

文件资料:

查看上传下载等
在这里插入图片描述
在这里插入图片描述

论文报告:

在这里插入图片描述
在这里插入图片描述

关键源码:

用户登录:

 /*** 登录相关** @author lyy*/
@RestController
public class SysLoginController extends AbstractController {@Autowiredprivate SysUserService sysUserService;@Autowiredprivate SysUserTokenService sysUserTokenService;@Autowiredprivate SysCaptchaService sysCaptchaService;/*** 验证码*/@GetMapping("captcha.jpg")public void captcha(HttpServletResponse response, String uuid)throws IOException {response.setHeader("Cache-Control", "no-store, no-cache");response.setContentType("image/jpeg");//获取图片验证码BufferedImage image = sysCaptchaService.getCaptcha(uuid);ServletOutputStream out = response.getOutputStream();ImageIO.write(image, "jpg", out);IOUtils.closeQuietly(out);}/*** 登录*/@PostMapping("/sys/login")public Map<String, Object> login(@RequestBody SysLoginForm form)throws IOException {boolean captcha = sysCaptchaService.validate(form.getUuid(), form.getCaptcha());
//		if(!captcha){
//			return R.error("验证码不正确");
//		}//用户信息SysUserEntity user = sysUserService.queryByUserName(form.getUsername());//账号不存在、密码错误if(user == null || !user.getPassword().equals(new Sha256Hash(form.getPassword(), user.getSalt()).toHex())) {return R.error("账号或密码不正确");}//账号锁定if(user.getStatus() == 0){return R.error("账号已被锁定,请联系管理员");}//生成token,并保存到数据库R r = sysUserTokenService.createToken(user.getUserId());return r;}/*** 退出*/@PostMapping("/sys/logout")public R logout() {sysUserTokenService.logout(getUserId());return R.ok();}}

service层实现:

 
/*** 系统用户** @author admin*/
@Service("sysUserService")
public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUserEntity> implements SysUserService {@Autowiredprivate SysUserRoleService sysUserRoleService;@Autowiredprivate SysRoleService sysRoleService;@Overridepublic PageUtils queryPage(Map<String, Object> params) {String username = (String)params.get("username");Long createUserId = (Long)params.get("createUserId");IPage<SysUserEntity> page = this.page(new Query<SysUserEntity>().getPage(params),new QueryWrapper<SysUserEntity>().like(StringUtils.isNotBlank(username),"username", username).eq(createUserId != null,"create_user_id", createUserId));return new PageUtils(page);}@Overridepublic List<String> queryAllPerms(Long userId) {return baseMapper.queryAllPerms(userId);}@Overridepublic List<Long> queryAllMenuId(Long userId) {return baseMapper.queryAllMenuId(userId);}@Overridepublic SysUserEntity queryByUserName(String username) {return baseMapper.queryByUserName(username);}@Override@Transactionalpublic void saveUser(SysUserEntity user) {user.setCreateTime(new Date());//sha256加密String salt = RandomStringUtils.randomAlphanumeric(20);user.setPassword(new Sha256Hash(user.getPassword(), salt).toHex());user.setSalt(salt);this.save(user);//检查角色是否越权checkRole(user);//保存用户与角色关系sysUserRoleService.saveOrUpdate(user.getUserId(), user.getRoleIdList());}@Override@Transactionalpublic void update(SysUserEntity user) {if(StringUtils.isBlank(user.getPassword())){user.setPassword(null);}else{user.setPassword(new Sha256Hash(user.getPassword(), user.getSalt()).toHex());}this.updateById(user);//检查角色是否越权checkRole(user);//保存用户与角色关系sysUserRoleService.saveOrUpdate(user.getUserId(), user.getRoleIdList());}@Overridepublic void deleteBatch(Long[] userId) {this.removeByIds(Arrays.asList(userId));}@Overridepublic boolean updatePassword(Long userId, String password, String newPassword) {SysUserEntity userEntity = new SysUserEntity();userEntity.setPassword(newPassword);return this.update(userEntity,new QueryWrapper<SysUserEntity>().eq("user_id", userId).eq("password", password));}/*** 检查角色是否越权*/private void checkRole(SysUserEntity user){if(user.getRoleIdList() == null || user.getRoleIdList().size() == 0){return;}//如果不是超级管理员,则需要判断用户的角色是否自己创建if(user.getCreateUserId() == Constant.SUPER_ADMIN){return ;}//查询用户创建的角色列表List<Long> roleIdList = sysRoleService.queryRoleIdList(user.getCreateUserId());//判断是否越权if(!roleIdList.containsAll(user.getRoleIdList())){throw new RRException("新增用户所选角色,不是本人创建");}}
}

权限控制:

 
/*** Shiro配置** @author admin */
@Configuration
public class ShiroConfig {@Bean("securityManager")public SecurityManager securityManager(OAuth2Realm oAuth2Realm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(oAuth2Realm);securityManager.setRememberMeManager(null);return securityManager;}@Bean("shiroFilter")public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();shiroFilter.setSecurityManager(securityManager);//oauth过滤Map<String, Filter> filters = new HashMap<>();filters.put("oauth2", new OAuth2Filter());shiroFilter.setFilters(filters);Map<String, String> filterMap = new LinkedHashMap<>();filterMap.put("/webjars/**", "anon");filterMap.put("/druid/**", "anon");filterMap.put("/app/**", "anon");filterMap.put("/sys/login", "anon");filterMap.put("/swagger/**", "anon");filterMap.put("/v2/api-docs", "anon");filterMap.put("/swagger-ui.html", "anon");filterMap.put("/swagger-resources/**", "anon");filterMap.put("/captcha.jpg", "anon");filterMap.put("/aaa.txt", "anon");filterMap.put("/virtuel/**", "anon");filterMap.put("/**", "oauth2");shiroFilter.setFilterChainDefinitionMap(filterMap);return shiroFilter;}@Bean("lifecycleBeanPostProcessor")public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {return new LifecycleBeanPostProcessor();}@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();advisor.setSecurityManager(securityManager);return advisor;}}

全局配置:

# Tomcat
server:tomcat:uri-encoding: UTF-8max-threads: 1000min-spare-threads: 30port: 8080connection-timeout: 5000msservlet:context-path: /renren-fastspring:# 环境 dev|test|prodprofiles:active: dev# jackson时间格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ssservlet:multipart:max-file-size: 100MBmax-request-size: 100MBenabled: truemvc:throw-exception-if-no-handler-found: true
#  resources:
#    add-mappings: false#mybatis
mybatis-plus:mapper-locations: classpath*:/mapper/**/*.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: io.renren.modules.*.entityglobal-config:#数据库相关配置db-config:#主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";id-type: AUTOlogic-delete-value: -1logic-not-delete-value: 0banner: false#原生配置configuration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: truejdbc-type-for-null: 'null'#文件虚拟路径
virtuel:#  filePath: D:/training/filePath: C:/Users/Administrator/Desktop/lyy/

总结:

经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间本教育教学系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及地块管理管理平台的功能测试,阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。比如管理员添加用户的时候报java.lang.NullPointException、解决的方法:查看控制台打印信息、发现添加的时候未填写相关信息、报java.lang.NullPointException、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。

获取源码:

大家点赞、收藏、关注、评论啦
🍅查看下方微信号获取联系方式 📝
🚀🚀🚀精彩系列推荐
Java毕设项目精品实战案例《1000套》
精彩专栏推荐订阅:在下方专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

printf的栈

#include<stdio.h> #include<stdlib.h> int main() {int *p;pmalloc(8);*p1;*p2;p--;printf("%d %d\n",*p,*p);return 0; }

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息1.代码实例…

如何在群晖用Docker本地搭建Vocechat聊天服务并无公网ip远程交流协作

文章目录 1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 如何拥有自己的一个聊天软件服务? 本例介绍一个自己本地即可搭建的聊天工具,不仅轻量,占用小,且功能也停强大,它就是Vocechat. Vocechat是一套支持…

LabVIEW飞机液压基础试验台测试系统

LabVIEW飞机液压基础试验台测试系统 为解决飞机液压基础实验台人工控制操作复杂、测试时间长、测试流程易出错等问题&#xff0c;开发了一套基于LabVIEW的飞机液压基础试验台测试系统。该系统通过计算机控制&#xff0c;实现了高度自动化的测试流程&#xff0c;有效提高了测试…

图片编辑器tui-image-editor

提示&#xff1a;图片编辑器tui-image-editor 文章目录 前言一、安装tui-image-editor二、新建components/ImageEditor.vue三、修改App.vue四、效果五、遇到问题 this.getResolve is not a function总结 前言 需求&#xff1a;图片编辑器tui-image-editor 一、安装tui-image-ed…

手写简易操作系统(八)--特权级以及TSS

前情提要 我们在这里梳理一下上面几节讲的内容 首先是计算机开机&#xff0c;BIOS接过第一棒&#xff0c;将第一个扇区MBR的内容导入到内存 0x7c00 的位置。 然后就是MBR中我们自己写的内容&#xff0c;将Loader导入到 0x600 的地址&#xff0c;Loader设置了GDT&#xff0c;…

WebAssembly探索篇(二)引入第三库的简单demo

文章目录 开发环境demo简单介绍实践出真知各个文件内容CMakeLists.txtmain.cpp cmake 编译结果 遇到问题错误1&#xff1a;both async and sync fetching of the wasm failedvscode安装Preview on Web Server插件 最近因为项目原因&#xff0c;研究了一下WebAssembly。2015年上…

Java研学-SSM综合案例(二)

二 MyBatis逆向工程 1 介绍 Maven中的插件&#xff0c;可根据数据表生成实体类 Mapper 接口和 Mapper XML&#xff0c;可单独创建一个Maven项目&#xff0c;将所需的资源生成后&#xff0c;拷贝到对应的项目中(推荐)&#xff0c;或者直接在项目中使用。 2 配置pom依赖插件 &…

信息检索(十一):Nonparametric Decoding for Generative Retrieval

Nonparametric Decoding for Generative Retrieval 摘要1. 引言2. 相关工作3. 非参数解码3.1 关键优势3.2 Base Np3.3 异步 Np3.4 对比 Np3.5 聚类 4. 实验设置4.1 基线4.2 数据集和评价指标4.3 构建CE 的细节 5. 实验结果5.1 普通解码 vs Np 解码5.2 非参数解码的优点5.3 什么…

IPFoxy的正确打开方式

IPFoxy是一个全球动静态代理IP服务器软件&#xff0c;为全球用户提供优质的大数据代理服务&#xff0c;促进网络业务高校进行。目前拥有千万真实纯净IP资源&#xff0c;覆盖超过220个国家和地区&#xff0c;汇聚成优质海外代理池&#xff0c;支持http、https、socks5多种协议类…

visa卡支持美区苹果Apple id绑定

苹果手机我相信大家都很熟悉&#xff0c;所以很多小伙伴都需要绑定卡来进行一系列的体验&#xff0c;这里我使用的是559666 在绑定之前我们需要先开一张visa卡&#xff0c;点击获取 开卡步骤如下&#xff0c;按图片步骤即可开卡 卡片信息在卡中心cvc安全码里面

ATFX汇市:日本首相称尚未摆脱通缩问题,日央行加息时点或再度推迟,日系货币普跌

ATFX汇市&#xff1a;关于日本是否已经“克服通缩”的消息出现巨大矛盾。3月2日&#xff0c;外媒援引知情人士表示&#xff0c;日本政府正在讨论正式宣布经济已经克服通缩&#xff0c;日本首相岸田文雄或内阁成员之后可能会在政府会议和新闻发布会上公开发布这一声明&#xff0…

在win10下搭建linux环境的LORAWAN服务器chirpstack

文章目录 前言一、安装WSL第一步以管理员模式打开PowerShell第二步 安装WSL第三步 设置Linux用户信息 二、将WSL迁移到其他磁盘第一步 输入wsl -l -v查看ubuntu状态第二步 迁移第三步 注销原来的Ubuntu第四步 从D:\wsl-ubuntu导入 三、安装chirpstack第一步 安装git第二步 下载…

wxss和css的区别

目录 1. 语法差异 2. 尺寸单位 3. 样式导入 WXSS 示例代码&#xff1a; CSS 示例代码&#xff1a; 4. 组件和属性的支持 总结 WXSS (WeiXin Style Sheets) 和 CSS (Cascading Style Sheets) 都是用于描述文档样式的语言&#xff0c;但它们在微信小程序和网页开发中有一些…

JavaScript进阶:js的一些学习笔记-原型

文章目录 js面向对象1. 原型2. constructor属性3. 对象原型4. 原型继承5. 原型链 js面向对象 构造函数 属性和方法 function Person(name,age){this.name name;this.age age;this.play ()>{console.log(玩&#xff01;);} } const a new Person(1,12),b new Person(2…

redis中的zset的原理

一、zset有序集合的原理 如果有序集合元素个数少于128个且元素值小于64字节&#xff0c;使用压缩列表&#xff08;新版本已经废弃压缩列表改用listpack数据结构了&#xff09; 如果不满足上述条件&#xff0c;采用跳表作为redis的底层数据结构 二、压缩列表 1.由连续内存块组…

漏洞复现-金和OA系列

漏洞复现-金和OA系列 🗡金和OA jc6 RCE金和OA GetTreeDate.aspx SQL注入【新】金和OA RssModulesHttp.aspx接口SQL注入漏洞复现C6-GetSgIData.aspx SQL注入金和OA C6 GetTreeDate.aspx SQL注入金和OA C6 GetTreeDate.aspx未授权金和OA JC6 OfficeServer 任意文件上传漏洞金和…

全栈之路-新坑就绪-星野空间

感觉自己的技术栈一直没有形成一个很好的闭环 开新坑&#xff0c;准备把自己的技术栈链路打通&#xff0c; Don‘t think too much&#xff0c; just act&#xff01;[得意]

C++ 网络编程学习五

C网络编程学习五 网络结构的更新单例模式懒汉单例模式饿汉单例模式懒汉式指针智能指针设计单例类 服务器优雅退出asio的多线程模型IOServiceasio多线程IOThreadPoolepoll 和 iocp的一些知识点 网络结构的更新 asio网络层&#xff0c;会使用io_context进行数据封装&#xff0c;…

1.下载安装ESP32开发环境ESP-IDE

ESP32简介 ESP32介绍 说到ESP32&#xff0c;首先ESP32不是一个芯片&#xff0c;ESP32是一个系列芯片&#xff0c; 是乐鑫自主研发的一系列芯片微控制器。它主要的功能就是支持WiFi和蓝牙&#xff0c; ESP32指的是ESP32裸芯片。但是&#xff0c;“ESP32”一词通常指ESP32系列芯…