基于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

三,系统展示

管理员登陆:

材料管理:

生产商和供应商管理

采购管理:采购审核

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

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

报价管理:

工地管理:

工地用料详情:

系统管理

权限分配:

操作员管理

四,核心代码展示

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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程千纸鹤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值