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