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

相关文章
|
3天前
|
Web App开发 编解码 Java
B/S基层卫生健康云HIS医院管理系统源码 SaaS模式 、Springboot框架
基层卫生健康云HIS系统采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。
26 4
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的微信课堂助手小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的微信课堂助手小程序的详细设计和实现
31 3
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的电子商城购物平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的电子商城购物平台的详细设计和实现
28 3
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的英语学习交流平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的英语学习交流平台的详细设计和实现
21 2
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的微信阅读网站小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的微信阅读网站小程序的详细设计和实现
29 2
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的移动学习平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的移动学习平台的详细设计和实现
30 1
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的教师管理系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的教师管理系统的详细设计和实现
31 2
|
1天前
|
缓存 JavaScript
【vue】如何搭建拦截器和设置路由守卫(基于token认证)
【vue】如何搭建拦截器和设置路由守卫(基于token认证)
9 0
|
1天前
|
JavaScript
Vue 如何新建一个项目(如何安装依赖)
Vue 如何新建一个项目(如何安装依赖)
7 0
|
1天前
|
资源调度 JavaScript 开发者
插件使用:扩展Vue功能与第三方插件
【4月更文挑战第23天】Vue凭借其轻量级和灵活性在Web开发中备受青睐,而插件则进一步增强了其功能。本文探讨了如何在Vue项目中选择、安装、配置和管理插件,以适应不同需求。要点包括:选择可靠且兼容的插件,使用npm或yarn安装,根据文档配置,以及注意性能影响。明智使用插件能提升开发效率,但需避免过度依赖,确保与项目目标和技术栈匹配。不断学习新插件,可保持技术领先并优化项目实践。