【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **
基于SpringBoot+Vue实现的一个比较全面的进销存管理系统。系统整体功能比较强大,操作人机交互性比较好,无论是从开发模式还是易用性和技术,都是比较优秀的一个项目,适合有些难度或要求较高的毕业设计项目使用。系统有着完备的权限管理控制,可以自行定义角色和用户并自由分配权限,不同的角色用户进入系统拥有的操作权限也不相同。主要完成的功能 有:
- 用户注册登陆
- 首页仪表盘信息统计功能
- 图形报表统计展示功能
- 系统管理模块
- 部门管理
- 用户管理
- 菜单管理
- 角色管理
- 商品分类管理
- 供应商管理
- 客户管理
- 采购管理模块
- 采购订单管理模块
- 采购入库管理模块
- 销售管理模块
- 销售订单管理模块
- 销售出库管理模块
- 库存管理模块
- 消息中心模块
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql8 Redis:redis5.0
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:Springboot+Mybatis-plus
前端开发技术:Nodejs+Vue+ElemenetUI
第三方技术:七牛云
三,系统展示
用户登陆
首页统计
消息管理
个人消息
采购订单
采购入库
销售订单
销售出库
库存管理
部门管理
菜单管理
角色管理
用户管理
商品分类管理
客户管理
供应商管理
四,核心代码展示
package cn.toesbieya.jxc.controller;
import cn.toesbieya.jxc.model.vo.LoginParam;
import cn.toesbieya.jxc.model.vo.PasswordUpdateParam;
import cn.toesbieya.jxc.model.vo.RegisterParam;
import cn.toesbieya.jxc.model.vo.UserVo;
import cn.toesbieya.jxc.service.AccountService;
import cn.toesbieya.jxc.util.SessionUtil;
import cn.toesbieya.jxc.util.IpUtil;
import cn.toesbieya.jxc.model.vo.R;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
@RestController
@RequestMapping("account")
public class AccountController {
@Resource
private AccountService service;
@PostMapping("login")
public R login(HttpServletRequest request, @Valid @RequestBody LoginParam param) {
return service.login(param, IpUtil.getIp(request));
}
@GetMapping("logout")
public R logout(HttpServletRequest request) {
UserVo user = SessionUtil.get(request);
return service.logout(user, IpUtil.getIp(request));
}
@PostMapping("register")
public R register(@Valid @RequestBody RegisterParam param) {
return service.register(param);
}
@PostMapping("updatePwd")
public R updatePwd(@RequestBody PasswordUpdateParam param) {
UserVo user = SessionUtil.get();
param.setId(user.getId());
String errMsg = validateUpdatePwdParam(param);
if (errMsg != null) return R.fail(errMsg);
return service.updatePwd(param);
}
@GetMapping("updateAvatar")
public R updateAvatar(@RequestParam String key) throws UnsupportedEncodingException {
if (StringUtils.isEmpty(key)) return R.fail("参数错误");
return service.updateAvatar(SessionUtil.get(), URLDecoder.decode(key, "utf-8"));
}
@GetMapping("validate")
public R validate(@RequestParam String pwd) {
UserVo current = SessionUtil.get();
if (!pwd.equals(current.getPwd())) {
return R.fail("校验失败");
}
return R.success("校验通过");
}
@GetMapping("checkLoginName")
public R checkLoginName(@RequestParam(required = false) Integer id, @RequestParam String name) {
if (StringUtils.isEmpty(name)) {
return R.success();
}
return R.success(service.isLoginNameExist(name, id) ? "该登录名已存在" : null);
}
@GetMapping("checkNickName")
public R checkNickName(@RequestParam(required = false) Integer id, @RequestParam String name) {
if (StringUtils.isEmpty(name)) {
return R.success();
}
return R.success(service.isNickNameExist(name, id) ? "该昵称已存在" : null);
}
private String validateUpdatePwdParam(PasswordUpdateParam vo) {
if (vo.getId() == null) return "修改失败,参数错误";
if (StringUtils.isEmpty(vo.getOldPwd())) return "修改失败,原密码不能为空";
if (StringUtils.isEmpty(vo.getNewPwd())) return "修改失败,新密码不能为空";
if (vo.getOldPwd().equals(vo.getNewPwd())) return "修改失败,新密码不得与旧密码相同";
if (vo.getNewPwd().length() != 32) return "修改失败,密码参数有误";
return null;
}
}
package cn.toesbieya.jxc.controller;
import cn.toesbieya.jxc.model.vo.search.StockSearch;
import cn.toesbieya.jxc.service.BizStockService;
import cn.toesbieya.jxc.model.vo.R;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@RestController
@RequestMapping("stock/current")
public class BizStockController {
@Resource
private BizStockService service;
@PostMapping("search")
public R search(@RequestBody StockSearch vo) {
return R.success(service.search(vo));
}
@GetMapping("getDetail")
public R getDetail(@RequestParam String cids) {
if (StringUtils.isEmpty(cids)) return R.fail("参数错误");
return R.success(service.getDetail(cids));
}
@GetMapping("getDetailById")
public R getDetailById(@RequestParam String ids) {
if (StringUtils.isEmpty(ids)) return R.fail("参数错误");
return R.success(service.getDetailById(ids));
}
@PostMapping("export")
public void export(@RequestBody StockSearch vo, HttpServletResponse response) throws Exception {
service.export(vo, response);
}
}
package cn.toesbieya.jxc.controller.sys;
import cn.toesbieya.jxc.model.entity.SysCategory;
import cn.toesbieya.jxc.model.vo.search.CategorySearch;
import cn.toesbieya.jxc.service.sys.SysCategoryService;
import cn.toesbieya.jxc.model.vo.R;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("system/category")
public class CategoryController {
@Resource
private SysCategoryService service;
@GetMapping("getAll")
public R getAll() {
return R.success(service.getAll());
}
@PostMapping("search")
public R search(@RequestBody CategorySearch vo) {
return R.success(service.search(vo));
}
@PostMapping("add")
public R add(@RequestBody SysCategory category) {
String errMsg = validateCategoryCreateParam(category);
if (errMsg != null) return R.fail(errMsg);
category.setId(null);
category.setCtime(System.currentTimeMillis());
return service.add(category);
}
@PostMapping("update")
public R update(@RequestBody SysCategory category) {
String errMsg = validateCategoryUpdateParam(category);
if (errMsg != null) return R.fail(errMsg);
return service.update(category);
}
@PostMapping("del")
public R del(@RequestBody SysCategory category) {
if (category.getId() == null) return R.fail("删除失败,参数错误");
return service.del(category);
}
private String validateCategoryCreateParam(SysCategory category) {