• 基于Springboot+Vue开发建筑工地用料管理系统


    项目编号:BS-XX-121

    一,项目简介

    本项目基于Springboot+Vue开发实现一个建筑工地用料管理系统,基于前后端分离的方式来开发实现,符合现在主流的开发方式。主要功能模块包含:

    材料管理:材料类型的增删改查处理

    供货商管理:供货商的增删改查处理

    生产商管理:材料生产商的增删改查处理

    采购管理:包含采购审核、我的采购信息管理

    库存管理:材料库存信息管理,新增材料后根据采购计划来进行导入库存

    报价管理:导入供货商的材料报价清单EXCEL表格,也可以导出EXCEL

    工地管理:包含建筑工地的基本信息管理和用料详情管理

    系统管理:包含角色、权限和用户管理

    另带有背景音乐在线播放功能

    基本业务流程:先添加库存材料信息---》导入供应商报价清单---》生成采购计划(库存中操作点击采购)---》采购审批----》采购入库---》工具用料

    二,环境介绍

    语言环境:Java:  jdk1.8

    数据库:Mysql: mysql5.7

    应用服务器:Tomcat:  tomcat8.5.31

    开发工具:IDEA或eclipse

    后端开发技术:Springboot+Mybatis+SpringSecurity

    前端开发技术:Vue+Element

    三,系统展示

    管理员登陆:

    材料管理:

    生产商和供应商管理

    采购管理:采购审核

    采购管理:我的采购信息管理

    库存管理:先新增材料,再点采购根据报价清单生成采购计划,审核后入库

    报价管理:

    工地管理:

    工地用料详情:

    系统管理

    权限分配:

    操作员管理

    四,核心代码展示

    1. package com.znz.server.controller;
    2. import com.znz.server.common.constant.Constants;
    3. import com.znz.server.entity.Admin;
    4. import com.znz.server.entity.RespBean;
    5. import com.znz.server.entity.Role;
    6. import com.znz.server.service.IAdminService;
    7. import com.znz.server.service.IRoleService;
    8. import io.swagger.annotations.Api;
    9. import io.swagger.annotations.ApiOperation;
    10. import lombok.RequiredArgsConstructor;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import org.springframework.web.bind.annotation.*;
    13. import java.util.List;
    14. /**
    15. * 操作员信息
    16. *
    17. * @author znz
    18. * @since 2021-03-06
    19. */
    20. @Api(value = "操作员控制器", tags = {"操作员管理"})
    21. @RequiredArgsConstructor(onConstructor_ = @Autowired)
    22. @RestController
    23. @RequestMapping("/system/admin")
    24. public class AdminController {
    25. private final IAdminService adminService;
    26. private final IRoleService roleService;
    27. @ApiOperation(value = "获取所有操作员")
    28. @GetMapping("/")
    29. public List getAllAdmins(String keywords) {
    30. return adminService.getAllAdmins(keywords);
    31. }
    32. @ApiOperation(value = "更新操作员")
    33. @PutMapping("/")
    34. public RespBean updateAdmin(@RequestBody Admin admin) {
    35. if (adminService.updateById(admin)) {
    36. return RespBean.success(Constants.SUCCESS);
    37. }
    38. return RespBean.error(Constants.FAIL);
    39. }
    40. @ApiOperation(value = "删除操作员")
    41. @DeleteMapping("/{id}")
    42. public RespBean deleteAdmin(@PathVariable Integer id) {
    43. if (adminService.removeById(id)) {
    44. return RespBean.success(Constants.SUCCESS);
    45. }
    46. return RespBean.success(Constants.FAIL);
    47. }
    48. @ApiOperation(value = "获取所有角色")
    49. @GetMapping("/roles")
    50. public List getAllRoles() {
    51. return roleService.list();
    52. }
    53. @ApiOperation(value = "更新操作员角色")
    54. @PutMapping("/role")
    55. public RespBean updateAdminRole(Integer adminId, Integer[] rids) {
    56. return adminService.updateAdminRole(adminId, rids);
    57. }
    58. }
    1. package com.znz.server.controller;
    2. import com.google.code.kaptcha.impl.DefaultKaptcha;
    3. import com.znz.server.common.core.BaseController;
    4. import io.swagger.annotations.Api;
    5. import io.swagger.annotations.ApiOperation;
    6. import lombok.RequiredArgsConstructor;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.web.bind.annotation.GetMapping;
    9. import org.springframework.web.bind.annotation.RestController;
    10. import javax.imageio.ImageIO;
    11. import javax.servlet.ServletOutputStream;
    12. import javax.servlet.http.HttpServletRequest;
    13. import javax.servlet.http.HttpServletResponse;
    14. import java.awt.image.BufferedImage;
    15. import java.io.IOException;
    16. /**
    17. * 图片验证码
    18. * @Author znz
    19. * @Date 21-3-6 下午8:59
    20. * @Version 1.0
    21. */
    22. @Api(value = "验证码控制器", tags = {"验证码管理"})
    23. @RequiredArgsConstructor(onConstructor_ = @Autowired)
    24. @RestController
    25. public class CaptchaController extends BaseController {
    26. private final DefaultKaptcha defaultKaptcha;
    27. /**
    28. * 生成验证码
    29. * @param request
    30. * @param response
    31. */
    32. @ApiOperation(value = "验证码")
    33. @GetMapping(value = "/captcha", produces = "image/jpeg")
    34. public void captcha(HttpServletRequest request, HttpServletResponse response) {
    35. // 定义response输出类型为image/jpeg类型
    36. response.setDateHeader("Expires", 0);
    37. // Set standard HTTP/1.1 no-cache headers.
    38. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    39. // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
    40. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
    41. // Set standard HTTP/1.0 no-cache header.
    42. response.setHeader("Pragma", "no-cache");
    43. // return a jpeg
    44. response.setContentType("image/jpeg");
    45. // 获取验证码文本内容
    46. String text = defaultKaptcha.createText();
    47. logger.info("验证码内容: {}", text);
    48. // 方便登录验证时用request获取,参考AdminServiceImpl#login()
    49. request.getSession().setAttribute("captcha", text);
    50. // 生成图形验证码
    51. BufferedImage image = defaultKaptcha.createImage(text);
    52. ServletOutputStream outputStream = null;
    53. try {
    54. outputStream = response.getOutputStream();
    55. // 输出流输出图片, 格式为jpg
    56. ImageIO.write(image, "jpg", outputStream);
    57. outputStream.flush();
    58. } catch (IOException e) {
    59. e.printStackTrace();
    60. } finally {
    61. if (null != outputStream) {
    62. try {
    63. outputStream.close();
    64. } catch (IOException e) {
    65. e.printStackTrace();
    66. }
    67. }
    68. }
    69. }
    70. }

    1. package com.znz.server.controller;
    2. import com.znz.server.annotation.ApiLog;
    3. import com.znz.server.common.constant.Constants;
    4. import com.znz.server.entity.Admin;
    5. import com.znz.server.entity.AdminLoginParam;
    6. import com.znz.server.entity.RespBean;
    7. import com.znz.server.service.IAdminService;
    8. import io.swagger.annotations.Api;
    9. import io.swagger.annotations.ApiOperation;
    10. import lombok.RequiredArgsConstructor;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import org.springframework.web.bind.annotation.GetMapping;
    13. import org.springframework.web.bind.annotation.PostMapping;
    14. import org.springframework.web.bind.annotation.RequestBody;
    15. import org.springframework.web.bind.annotation.RestController;
    16. import javax.servlet.http.HttpServletRequest;
    17. import java.security.Principal;
    18. /**
    19. * 登录验证
    20. * @Author znz
    21. * @Date 21-3-6 下午5:03
    22. * @Version 1.0
    23. */
    24. @Api(value = "登录控制器", tags = {"登录管理"})
    25. @RequiredArgsConstructor(onConstructor_ = @Autowired)
    26. @RestController
    27. public class LoginController {
    28. private final IAdminService adminService;
    29. @ApiLog
    30. @ApiOperation(value = "登录之后返回token")
    31. @PostMapping("/login")
    32. public RespBean login(@RequestBody AdminLoginParam adminLoginParam, HttpServletRequest request) {
    33. return adminService.login(adminLoginParam.getUsername(), adminLoginParam.getPassword(), adminLoginParam.getCode(),request);
    34. }
    35. @ApiLog
    36. @ApiOperation(value = "获取当前登录用户信息")
    37. @GetMapping("/admin/info")
    38. public Admin getAdminInfo(Principal principal) {
    39. if (null == principal) {
    40. return null;
    41. }
    42. String username = principal.getName();
    43. Admin admin = adminService.getAdminByUserName(username);
    44. admin.setPassword(null);
    45. // 设置用户角色
    46. admin.setRoles(adminService.getRoles(admin.getId()));
    47. return admin;
    48. }
    49. @ApiOperation(value = "退出登录")
    50. @PostMapping("/logout")
    51. public RespBean logout() {
    52. return RespBean.success(Constants.LOGOUT);
    53. }
    54. }


    1. package com.znz.server.controller;
    2. import com.znz.server.common.Result;
    3. import com.znz.server.common.constant.Constants;
    4. import com.znz.server.entity.MaterialCategory;
    5. import com.znz.server.entity.RespBean;
    6. import com.znz.server.entity.RespPageBean;
    7. import com.znz.server.service.IMaterialCategoryService;
    8. import io.swagger.annotations.Api;
    9. import io.swagger.annotations.ApiOperation;
    10. import lombok.RequiredArgsConstructor;
    11. import org.springframework.beans.factory.annotation.Autowired;
    12. import org.springframework.web.bind.annotation.*;
    13. import java.time.LocalDateTime;
    14. import java.util.Arrays;
    15. import java.util.List;
    16. /**
    17. * 材料分类Controller
    18. * @author znz
    19. * @since 2021-03-10
    20. */
    21. @Api(value = "材料分类控制器", tags = {"材料分类管理"})
    22. @RequiredArgsConstructor(onConstructor_ = @Autowired)
    23. @RestController
    24. @RequestMapping("/material/materialCategory/mc")
    25. public class MaterialCategoryController {
    26. private final IMaterialCategoryService materialCategoryService;
    27. @ApiOperation(value = "条件分页")
    28. @GetMapping("/")
    29. public RespPageBean getMaterialCategoryPage(String materialCategoryName,
    30. @RequestParam(defaultValue = "1") Integer pageIndex,
    31. @RequestParam(defaultValue = "10") Integer pageSize) {
    32. return materialCategoryService.findMaterialCategoryByPage(materialCategoryName, pageIndex, pageSize);
    33. }
    34. @ApiOperation(value = "新增")
    35. @PostMapping("/")
    36. public RespBean addMaterialCategory(@RequestBody MaterialCategory materialCategory) {
    37. /** 日期处理 */
    38. materialCategory.setCreateDate(LocalDateTime.now());
    39. if (materialCategoryService.save(materialCategory)) {
    40. return RespBean.success(Constants.ADD_SUCCESS);
    41. }
    42. return RespBean.error(Constants.ADD_FAIL);
    43. }
    44. @ApiOperation(value = "更新")
    45. @PutMapping("/")
    46. public RespBean updateMaterialCategory(@RequestBody MaterialCategory materialCategory) {
    47. if (materialCategoryService.updateById(materialCategory)) {
    48. return RespBean.success(Constants.UPDATE_SUCCESS);
    49. }
    50. return RespBean.error(Constants.UPDATE_FAIL);
    51. }
    52. @ApiOperation(value = "根据id删除")
    53. @DeleteMapping("/{id}")
    54. public RespBean deleteMaterialCategory(@PathVariable Integer id) {
    55. if (materialCategoryService.removeById(id)) {
    56. return RespBean.success(Constants.DELETE_SUCCESS);
    57. }
    58. return RespBean.error(Constants.DELETE_FAIL);
    59. }
    60. @ApiOperation(value = "批量删除")
    61. @DeleteMapping("/")
    62. public RespBean deleteMaterialCategories(Integer[] ids) {
    63. if (materialCategoryService.removeByIds(Arrays.asList(ids))) {
    64. return RespBean.success(Constants.DELETE_SUCCESS);
    65. }
    66. return RespBean.error(Constants.DELETE_FAIL);
    67. }
    68. @ApiOperation(value = "查询列表")
    69. @GetMapping("/list")
    70. public Result list() {
    71. return new Result("1001", Constants.SELECT_SUCCESS, materialCategoryService.list());
    72. }
    73. }

    五,项目总结

    项目界面清晰,通过AJAX进行异步交互,非常适合毕业使用。

  • 相关阅读:
    短信接口防盗刷解决方案
    Linux卷组管理
    华为鸿蒙 adb
    【AI视野·今日CV 计算机视觉论文速览 第248期】Mon, 18 Sep 2023
    【有营养的算法笔记】快速排序
    从零实现深度学习框架——LSTM从理论到实战【理论】
    【日常-bug】文件上传oss报错-跨域- ‘Access-Control-Allow-Origin
    pod 镜像拉取策略
    Shell Protocol空投价值几何,一文带你详细分析
    华清 Qt day2 9月18
  • 原文地址:https://blog.csdn.net/BS009/article/details/126062339