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

简介: 基于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

三,系统展示


管理员登陆:

image.png

材料管理:

image.png

生产商和供应商管理

image.png

image.png

采购管理:采购审核

image.png

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

image.png

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

image.png

报价管理:

image.png

工地管理:

image.png

工地用料详情:

image.png

系统管理

image.png

权限分配:

image.png

操作员管理

image.png

四,核心代码展示


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进行异步交互,非常适合毕业使用。

相关文章
|
13天前
|
Java 数据库连接 应用服务中间件
基于springboot的母婴健康交流系统
本平台旨在为新手父母提供专业、系统的婴幼儿健康知识与交流空间,整合权威资源,解决育儿信息碎片化与误导问题,支持经验分享与情感互助,助力科学育儿。
|
11天前
|
JavaScript Java 关系型数据库
基于springboot的电影购票管理系统
本系统基于Spring Boot框架,结合Vue、Java与MySQL技术,实现电影信息管理、在线选座、购票支付等核心功能,提升观众购票体验与影院管理效率,推动电影产业数字化发展。
|
15天前
|
JavaScript Java 关系型数据库
基于springboot的小区车位租售管理系统
针对城市化进程中小区停车难问题,本文设计基于SpringBoot的车位租售管理系统,结合Vue前端与MySQL数据库,实现车位信息数字化、租售流程自动化。系统支持在线查询、申请、支付及数据统计,提升管理效率与用户体验,促进资源优化配置。
|
14天前
|
JavaScript Java 关系型数据库
基于springboot的家政服务预约系统
随着社会节奏加快与老龄化加剧,家政服务需求激增,但传统模式存在信息不对称、服务不规范等问题。基于Spring Boot、Vue、MySQL等技术构建的家政预约系统,实现服务线上化、标准化与智能化,提升用户体验与行业效率,推动家政服务向信息化、规范化发展。
|
9天前
|
存储 JavaScript Java
基于springboot的大学公文收发管理系统
本文介绍公文收发系统的研究背景与意义,分析其在数字化阅读趋势下的必要性。系统采用Vue、Java、Spring Boot与MySQL技术,实现高效、便捷的公文管理与在线阅读,提升用户体验与信息处理效率。
|
11天前
|
人工智能 JavaScript Java
基于springboot的大学生创新能力比赛系统
本研究聚焦大学生能力培养系统,结合AI、大数据、区块链及VR/AR等前沿技术,构建个性化、全过程的能力发展框架。通过Java、Spring Boot、MySQL与Vue技术实现系统开发,旨在提升学生综合素质与社会竞争力,推动高等教育改革与创新发展。
|
18天前
|
搜索推荐 算法 JavaScript
基于springboot的健康饮食营养管理系统
本系统基于Spring Boot、Vue与MySQL技术,融合大数据与AI算法,构建个性化健康饮食管理平台。结合用户身体状况、目标需求,智能推荐营养方案,助力科学饮食与健康管理。
|
12天前
|
JavaScript Java 数据库连接
基于springboot的网球场场地预约系统
本系统基于Vue、Spring Boot、Java等技术,构建智能化网球场预约平台,提升用户体验与场地利用率,推动体育产业数字化发展。
|
15天前
|
JavaScript Java 关系型数据库
基于springboot的校内跑腿管理系统
针对校园跑腿服务效率低、信任难等问题,本研究设计基于Spring Boot与Vue的校内跑腿管理系统,融合MySQL数据库与智能化调度技术,实现任务发布、智能匹配、实时追踪与评价反馈一体化,提升服务效率与质量,助力智慧校园建设。
|
16天前
|
JavaScript Java 关系型数据库
基于springboot的快递分拣管理系统
本系统基于SpringBoot框架,结合Java、MySQL与Vue技术,构建智能化快递分拣管理平台。通过自动化识别、精准分拣与实时跟踪,提升分拣效率与准确性,降低人力成本,推动快递行业向智能化、高效化转型,助力电商物流高质量发展。