作者主页:Java李杨勇
简介:Java领域优质创作者、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】
文末获取源码联系
研究背景意义
中国是农业大国,农业经济在整个国民经济和社会发展中一直有着非常重要的意义。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树状图图标模拟实现。
用户管理:
角色菜单:
菜单列表:可以具体控制到按钮级别
地块档案:
种植计划:
生产资料:
预警管理:
通知公告:
文件资料:查看上传下载等
论文报告:
关键源码:
用户登录:
@RestController public class SysLoginController extends AbstractController { @Autowired private SysUserService sysUserService; @Autowired private SysUserTokenService sysUserTokenService; @Autowired private 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 Maplogin(@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层实现:
@Service("sysUserService") public class SysUserServiceImpl extends ServiceImplimplements SysUserService { @Autowired private SysUserRoleService sysUserRoleService; @Autowired private SysRoleService sysRoleService; @Override public PageUtils queryPage(Map params) { String username = (String)params.get("username"); Long createUserId = (Long)params.get("createUserId"); IPage page = this.page( new Query ().getPage(params), new QueryWrapper () .like(StringUtils.isNotBlank(username),"username", username) .eq(createUserId != null,"create_user_id", createUserId) ); return new PageUtils(page); } @Override public List queryAllPerms(Long userId) { return baseMapper.queryAllPerms(userId); } @Override public List queryAllMenuId(Long userId) { return baseMapper.queryAllMenuId(userId); } @Override public SysUserEntity queryByUserName(String username) { return baseMapper.queryByUserName(username); } @Override @Transactional public 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 @Transactional public 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()); } @Override public void deleteBatch(Long[] userId) { this.removeByIds(Arrays.asList(userId)); } @Override public boolean updatePassword(Long userId, String password, String newPassword) { SysUserEntity userEntity = new SysUserEntity(); userEntity.setPassword(newPassword); return this.update(userEntity, new QueryWrapper ().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 roleIdList = sysRoleService.queryRoleIdList(user.getCreateUserId()); //判断是否越权 if(!roleIdList.containsAll(user.getRoleIdList())){ throw new RRException("新增用户所选角色,不是本人创建"); } } }
权限控制:
@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过滤 Mapfilters = new HashMap<>(); filters.put("oauth2", new OAuth2Filter()); shiroFilter.setFilters(filters); Map filterMap = new linkedHashMap<>(); filterMap.put("/webjars*.xml #实体扫描,多个package用逗号或者分号分隔 typeAliasesPackage: io.renren.modules.*.entity global-config: #数据库相关配置 db-config: #主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; id-type: AUTO logic-delete-value: -1 logic-not-delete-value: 0 banner: false #原生配置 configuration: map-underscore-to-camel-case: true cache-enabled: false call-setters-on-nulls: true jdbc-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、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。
源码获取:大家点赞、收藏、关注、评论啦 、查看微信公众号获取联系方式
打卡 文章 更新 115/ 365天
精彩专栏推荐订阅:在下方专栏
Java项目精品实战案例《100套》
web前端期末大作业网页实战《100套》
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)