基于SpinrgBoot+Vue的智慧农业管理平台-031
一、项目技术栈
Java开发工具:JDK1.8
后端框架:SpringBoot
前端:采用HTML和Vue相结合开发
数据库:MySQL5.7和Navicat管理工具结合
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是
二、功能介绍
系统注册登录功能
◦用户注册流程
▪Vue 前端信息提交:在用户注册页面,Vue 前端通过表单收集用户输入的用户名、密码、确认密码等信息,并进行初步的格式校验,确保信息的完整性和正确性。
▪Java 后端处理与数据库存储:前端将收集到的用户信息发送到后端,Java 后端接收到请求后,对用户信息进行进一步的验证,如检查用户名是否唯一、密码强度是否符合要求等。验证通过后,将用户信息存储到数据库中。
▪注册成功确认与通知:如果用户信息存储成功,系统向用户返回注册成功的消息,并可以通过弹窗或页面提示等方式通知用户。同时,用户可以选择是否立即登录系统。
◦用户登录流程
▪Vue 前端输入与请求发送:在登录页面,用户通过 Vue 前端输入注册时的用户名和密码,并选择登录类型。前端将用户输入的信息打包发送到后端进行验证。
▪Java 后端验证与响应:Java 后端接收到登录请求后,从数据库中查询用户信息,并与用户输入的登录信息进行比对。如果信息正确,将用户登录状态设置为已登录,并根据用户的权限返回相应的功能页面数据给前端。如果信息错误,返回错误提示信息给前端,要求用户重新输入登录信息。
管理员功能模块
◦个人中心管理:管理员可以在个人中心查看和修改自己的个人信息,如用户名、密码、联系方式等。同时,个人中心还可以展示管理员的操作日志和系统公告等信息。
◦用户管理:管理员可以对系统中的用户进行管理,包括查看用户信息、修改用户权限、删除用户等操作。管理员可以根据用户的注册信息、登录记录等对用户进行筛选和排序,以便更好地管理用户。
◦统计分析模块:管理员可以查看环境监测、农田信息、专家咨询等页面,统计分析用Echarts渲染数据图,农田信息管理相关农田数据,专家咨询可以进行系统聊天。
◦农资管理模块:管理员可以看到农资采购、产品出售、库存等界面,农资采购可以管理采购记录,产品出售可以管理产品出售记录,库存界面可以管理库存内容。
◦系统管理功能:管理员可以对公告管理、职工管理、角色管理、菜单进行管理。
三、项目视频
基于SpinrgBoot+Vue的智慧农业管理平台-031
四、功能截图
五、代码实现
文件上传
package com.example.springboot.controller;import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springboot.common.Result;
import com.example.springboot.entity.Files;
import com.example.springboot.mapper.FileMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;//源码需要+V:HadesTYT/*** 文件上传相关接口*/
@RestController
@RequestMapping("/file")
public class FileController {@Value("${files.upload.path}")private String fileUploadPath;@Resourceprivate FileMapper fileMapper;/*** 文件上传接口* @param file 前端传递过来的文件* @return* @throws IOException*/@PostMapping("/upload")public String upload(@RequestParam MultipartFile file) throws IOException {String originalFilename = file.getOriginalFilename();String type = FileUtil.extName(originalFilename);long size = file.getSize();String fileUUID = IdUtil.fastSimpleUUID() + StrUtil.DOT + type;File uploadFile = new File(fileUploadPath + fileUUID);File parentFile = uploadFile.getParentFile();if(!parentFile.exists()) {parentFile.mkdirs();}String url;String md5 = SecureUtil.md5(file.getInputStream());Files dbFiles = getFileByMd5(md5);if (dbFiles != null) {url = dbFiles.getUrl();} else {file.transferTo(uploadFile);url = "http://localhost:9090/file/" + fileUUID;}Files saveFile = new Files();saveFile.setName(originalFilename);saveFile.setType(type);saveFile.setSize(size/1024);saveFile.setUrl(url);saveFile.setMd5(md5);fileMapper.insert(saveFile);return url;}/*** 文件下载接口 http://localhost:9090/file/{fileUUID}* @param fileUUID* @param response* @throws IOException*/@GetMapping("/{fileUUID}")public void download(@PathVariable String fileUUID, HttpServletResponse response) throws IOException {// 根据文件的唯一标识码获取文件File uploadFile = new File(fileUploadPath + fileUUID);// 设置输出流的格式ServletOutputStream os = response.getOutputStream();response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileUUID, "UTF-8"));response.setContentType("application/octet-stream");// 读取文件的字节流try {os.write(FileUtil.readBytes(uploadFile));} catch (Exception e) {System.err.println("文件下载失败,文件不存在");}os.flush();os.close();}/*** 通过文件的md5查询文件* @param md5* @return*/private Files getFileByMd5(String md5) {// 查询文件的md5是否存在QueryWrapper<Files> queryWrapper = new QueryWrapper<>();queryWrapper.eq("md5", md5);List<Files> filesList = fileMapper.selectList(queryWrapper);return filesList.size() == 0 ? null : filesList.get(0);}@PostMapping("/update")public Result update(@RequestBody Files files) {return Result.success(fileMapper.updateById(files));}@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {Files files = fileMapper.selectById(id);files.setIsDelete(true);fileMapper.updateById(files);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {// select * from sys_file where id in (id,id,id...)QueryWrapper<Files> queryWrapper = new QueryWrapper<>();queryWrapper.in("id", ids);List<Files> files = fileMapper.selectList(queryWrapper);for (Files file : files) {file.setIsDelete(true);fileMapper.updateById(file);}return Result.success();}/*** 分页查询接口* @param pageNum* @param pageSize* @param name* @return*/@GetMapping("/page")public Result findPage(@RequestParam Integer pageNum,@RequestParam Integer pageSize,@RequestParam(defaultValue = "") String name) {QueryWrapper<Files> queryWrapper = new QueryWrapper<>();// 查询未删除的记录queryWrapper.eq("is_delete", false);queryWrapper.orderByDesc("id");if (!"".equals(name)) {queryWrapper.like("name", name);}return Result.success(fileMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper));}}
菜单管理
package com.example.springboot.controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springboot.common.Constants;
import com.example.springboot.entity.Dict;
import com.example.springboot.mapper.DictMapper;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.List;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.springboot.common.Result;import com.example.springboot.service.IMenuService;
import com.example.springboot.entity.Menu;import org.springframework.web.bind.annotation.RestController;//源码需要+V:HadesTYT/*** <p>* 前端控制器* </p>*/
@RestController
@RequestMapping("/menu")
public class MenuController {@Resourceprivate IMenuService menuService;@Resourceprivate DictMapper dictMapper;// 新增或者更新@PostMappingpublic Result save(@RequestBody Menu menu) {menuService.saveOrUpdate(menu);return Result.success();}@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {menuService.removeById(id);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {menuService.removeByIds(ids);return Result.success();}@GetMapping("/ids")public Result findAllIds() {return Result.success(menuService.list().stream().map(Menu::getId));}@GetMappingpublic Result findAll(@RequestParam(defaultValue = "") String name) {return Result.success(menuService.findMenus(name));}@GetMapping("/{id}")public Result findOne(@PathVariable Integer id) {return Result.success(menuService.getById(id));}@GetMapping("/page")public Result findPage(@RequestParam String name,@RequestParam Integer pageNum,@RequestParam Integer pageSize) {QueryWrapper<Menu> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", name);queryWrapper.orderByDesc("id");return Result.success(menuService.page(new Page<>(pageNum, pageSize), queryWrapper));}@GetMapping("/icons")public Result getIcons() {QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();queryWrapper.eq("type", Constants.DICT_TYPE_ICON);return Result.success(dictMapper.selectList(queryWrapper));}}
销售管理
package com.example.springboot.controller;import cn.hutool.core.date.DateUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
import java.net.URLEncoder;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.springboot.common.Result;
import org.springframework.web.multipart.MultipartFile;
import com.example.springboot.entity.User;
import com.example.springboot.utils.TokenUtils;import com.example.springboot.service.ISalesService;
import com.example.springboot.entity.Sales;import org.springframework.web.bind.annotation.RestController;//源码需要+V:HadesTYT/*** <p>* 前端控制器* </p>*/
@RestController
@RequestMapping("/sales")
public class SalesController {@Resourceprivate ISalesService salesService;private final String now = DateUtil.now();// 新增或者更新@PostMappingpublic Result save(@RequestBody Sales sales) {if (sales.getId() == null) {//sales.setTime(DateUtil.now());//sales.setUser(TokenUtils.getCurrentUser().getUsername());}salesService.saveOrUpdate(sales);return Result.success();}@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {salesService.removeById(id);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {salesService.removeByIds(ids);return Result.success();}@GetMappingpublic Result findAll() {return Result.success(salesService.list());}@GetMapping("/{id}")public Result findOne(@PathVariable Integer id) {return Result.success(salesService.getById(id));}@GetMapping("/page")public Result findPage(@RequestParam(defaultValue = "") String product,@RequestParam Integer pageNum,@RequestParam Integer pageSize) {QueryWrapper<Sales> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");if (!"".equals(product)) {queryWrapper.like("product", product);}
// User currentUser = TokenUtils.getCurrentUser();
// if (currentUser.getRole().equals("ROLE_USER")) {
// queryWrapper.eq("user", currentUser.getUsername());
// }return Result.success(salesService.page(new Page<>(pageNum, pageSize), queryWrapper));}/*** 导出接口*/@GetMapping("/export")public void export(HttpServletResponse response) throws Exception {// 从数据库查询出所有的数据List<Sales> list = salesService.list();// 在内存操作,写出到浏览器ExcelWriter writer = ExcelUtil.getWriter(true);// 一次性写出list内的对象到excel,使用默认样式,强制输出标题writer.write(list, true);// 设置浏览器响应的格式response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");String fileName = URLEncoder.encode("Sales信息表", "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);out.close();writer.close();}/*** excel 导入* @param file* @throws Exception*/@PostMapping("/import")public Result imp(MultipartFile file) throws Exception {InputStream inputStream = file.getInputStream();ExcelReader reader = ExcelUtil.getReader(inputStream);// 通过 javabean的方式读取Excel内的对象,但是要求表头必须是英文,跟javabean的属性要对应起来List<Sales> list = reader.readAll(Sales.class);salesService.saveBatch(list);return Result.success();}private User getUser() {return TokenUtils.getCurrentUser();}}
上万套源码,每日分享源码,谢谢你的关注和喜欢~
🛰️HadesTYT