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

Posted 编程指南针

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Springboot+Vue开发建筑工地用料管理系统相关的知识,希望对你有一定的参考价值。

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

文末获取源码 

项目编号:BS-XX-121

一,项目简介

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

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

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

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

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

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

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

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

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

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

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

二,环境介绍

语言环境:Java:  jdk1.8

数据库:mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

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

前端开发技术:Vue+Element

三,系统展示

管理员登陆:

材料管理:

生产商和供应商管理

采购管理:采购审核

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

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

报价管理:

工地管理:

工地用料详情:

系统管理

权限分配:

操作员管理

四,核心代码展示

package com.znz.server.controller;


import com.znz.server.common.constant.Constants;
import com.znz.server.entity.Admin;
import com.znz.server.entity.RespBean;
import com.znz.server.entity.Role;
import com.znz.server.service.IAdminService;
import com.znz.server.service.IRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 操作员信息
 *
 * @author znz
 * @since 2021-03-06
 */
@Api(value = "操作员控制器", tags = "操作员管理")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/system/admin")
public class AdminController 
    private final IAdminService adminService;
    private final IRoleService roleService;

    @ApiOperation(value = "获取所有操作员")
    @GetMapping("/")
    public List<Admin> getAllAdmins(String keywords) 
        return adminService.getAllAdmins(keywords);
    

    @ApiOperation(value = "更新操作员")
    @PutMapping("/")
    public RespBean updateAdmin(@RequestBody Admin admin) 
        if (adminService.updateById(admin)) 
            return RespBean.success(Constants.SUCCESS);
        
        return RespBean.error(Constants.FAIL);
    

    @ApiOperation(value = "删除操作员")
    @DeleteMapping("/id")
    public RespBean deleteAdmin(@PathVariable Integer id) 
        if (adminService.removeById(id)) 
            return RespBean.success(Constants.SUCCESS);
        
        return RespBean.success(Constants.FAIL);
    

    @ApiOperation(value = "获取所有角色")
    @GetMapping("/roles")
    public List<Role> getAllRoles() 
        return roleService.list();
    

    @ApiOperation(value = "更新操作员角色")
    @PutMapping("/role")
    public RespBean updateAdminRole(Integer adminId, Integer[] rids) 
        return adminService.updateAdminRole(adminId, rids);
    


package com.znz.server.controller;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.znz.server.common.core.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * 图片验证码
 * @Author znz
 * @Date 21-3-6 下午8:59
 * @Version 1.0
 */
@Api(value = "验证码控制器", tags = "验证码管理")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
public class CaptchaController extends BaseController 
    private final DefaultKaptcha defaultKaptcha;

    /**
     * 生成验证码
     * @param request
     * @param response
     */
    @ApiOperation(value = "验证码")
    @GetMapping(value = "/captcha", produces = "image/jpeg")
    public void captcha(HttpServletRequest request, HttpServletResponse response) 
        // 定义response输出类型为image/jpeg类型
        response.setDateHeader("Expires", 0);
        // Set standard HTTP/1.1 no-cache headers.
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        // Set standard HTTP/1.0 no-cache header.
        response.setHeader("Pragma", "no-cache");
        // return a jpeg
        response.setContentType("image/jpeg");
        // 获取验证码文本内容
        String text = defaultKaptcha.createText();
        logger.info("验证码内容: ", text);
        // 方便登录验证时用request获取,参考AdminServiceImpl#login()
        request.getSession().setAttribute("captcha", text);
        // 生成图形验证码
        BufferedImage image = defaultKaptcha.createImage(text);
        ServletOutputStream outputStream = null;
        try 
            outputStream = response.getOutputStream();
            // 输出流输出图片, 格式为jpg
            ImageIO.write(image, "jpg", outputStream);
            outputStream.flush();
         catch (IOException e) 
            e.printStackTrace();
         finally 
            if (null != outputStream) 
                try 
                    outputStream.close();
                 catch (IOException e) 
                    e.printStackTrace();
                
            
        
    

package com.znz.server.controller;

import com.znz.server.annotation.ApiLog;
import com.znz.server.common.constant.Constants;
import com.znz.server.entity.Admin;
import com.znz.server.entity.AdminLoginParam;
import com.znz.server.entity.RespBean;
import com.znz.server.service.IAdminService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.security.Principal;

/**
 * 登录验证
 * @Author znz
 * @Date 21-3-6 下午5:03
 * @Version 1.0
 */
@Api(value = "登录控制器", tags = "登录管理")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
public class LoginController 
    private final IAdminService adminService;

    @ApiLog
    @ApiOperation(value = "登录之后返回token")
    @PostMapping("/login")
    public RespBean login(@RequestBody AdminLoginParam adminLoginParam, HttpServletRequest request) 
        return adminService.login(adminLoginParam.getUsername(), adminLoginParam.getPassword(), adminLoginParam.getCode(),request);
    

    @ApiLog
    @ApiOperation(value = "获取当前登录用户信息")
    @GetMapping("/admin/info")
    public Admin getAdminInfo(Principal principal) 
        if (null == principal) 
            return null;
        
        String username = principal.getName();
        Admin admin = adminService.getAdminByUserName(username);
        admin.setPassword(null);
        // 设置用户角色
        admin.setRoles(adminService.getRoles(admin.getId()));
        return admin;
    

    @ApiOperation(value = "退出登录")
    @PostMapping("/logout")
    public RespBean logout() 
        return RespBean.success(Constants.LOGOUT);
    


package com.znz.server.controller;


import com.znz.server.common.Result;
import com.znz.server.common.constant.Constants;
import com.znz.server.entity.MaterialCategory;
import com.znz.server.entity.RespBean;
import com.znz.server.entity.RespPageBean;
import com.znz.server.service.IMaterialCategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * 材料分类Controller
 * @author znz
 * @since 2021-03-10
 */
@Api(value = "材料分类控制器", tags = "材料分类管理")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/material/materialCategory/mc")
public class MaterialCategoryController 

    private final IMaterialCategoryService materialCategoryService;

    @ApiOperation(value = "条件分页")
    @GetMapping("/")
    public RespPageBean getMaterialCategoryPage(String materialCategoryName,
                                               @RequestParam(defaultValue = "1") Integer pageIndex,
                                               @RequestParam(defaultValue = "10") Integer pageSize) 
        return materialCategoryService.findMaterialCategoryByPage(materialCategoryName, pageIndex, pageSize);

    

    @ApiOperation(value = "新增")
    @PostMapping("/")
    public RespBean addMaterialCategory(@RequestBody MaterialCategory materialCategory) 
        /** 日期处理 */
        materialCategory.setCreateDate(LocalDateTime.now());
        if (materialCategoryService.save(materialCategory)) 
            return RespBean.success(Constants.ADD_SUCCESS);
        
        return RespBean.error(Constants.ADD_FAIL);
    

    @ApiOperation(value = "更新")
    @PutMapping("/")
    public RespBean updateMaterialCategory(@RequestBody MaterialCategory materialCategory) 
        if (materialCategoryService.updateById(materialCategory)) 
            return RespBean.success(Constants.UPDATE_SUCCESS);
        
        return RespBean.error(Constants.UPDATE_FAIL);
    

    @ApiOperation(value = "根据id删除")
    @DeleteMapping("/id")
    public RespBean deleteMaterialCategory(@PathVariable Integer id) 
        if (materialCategoryService.removeById(id)) 
            return RespBean.success(Constants.DELETE_SUCCESS);
        
        return RespBean.error(Constants.DELETE_FAIL);
    

    @ApiOperation(value = "批量删除")
    @DeleteMapping("/")
    public RespBean deleteMaterialCategories(Integer[] ids) 
        if (materialCategoryService.removeByIds(Arrays.asList(ids))) 
            return RespBean.success(Constants.DELETE_SUCCESS);
        
        return RespBean.error(Constants.DELETE_FAIL);
    

    @ApiOperation(value = "查询列表")
    @GetMapping("/list")
    public Result list() 
        return new Result("1001", Constants.SELECT_SUCCESS, materialCategoryService.list());
    

五,项目总结

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

以上是关于基于Springboot+Vue开发建筑工地用料管理系统的主要内容,如果未能解决你的问题,请参考以下文章

单片机俱乐部基于单片机的建筑工地降尘的设计仿真设计

单片机俱乐部基于单片机的建筑工地降尘的设计实物设计

计算机毕业设计之java+springboot基于vue的医院信管系统

Web3D智慧数字三维工地 HTML5+Threejs实战开发

如何加强建筑工地的安全监控

基于5G和MEC的新型智慧工地应用研究