基于Springboot+Vue实现前后端分离进销存管理系统_系统计划采用spring boot、vue为主要开发技术,基于web开发,前后端分离开发模

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **

基于SpringBoot+Vue实现的一个比较全面的进销存管理系统。系统整体功能比较强大,操作人机交互性比较好,无论是从开发模式还是易用性和技术,都是比较优秀的一个项目,适合有些难度或要求较高的毕业设计项目使用。系统有着完备的权限管理控制,可以自行定义角色和用户并自由分配权限,不同的角色用户进入系统拥有的操作权限也不相同。主要完成的功能 有:

  1. 用户注册登陆
  2. 首页仪表盘信息统计功能
  3. 图形报表统计展示功能
  4. 系统管理模块
    1. 部门管理
    2. 用户管理
    3. 菜单管理
    4. 角色管理
    5. 商品分类管理
    6. 供应商管理
    7. 客户管理
  5. 采购管理模块
    1. 采购订单管理模块
    2. 采购入库管理模块
  6. 销售管理模块
    1. 销售订单管理模块
    2. 销售出库管理模块
  7. 库存管理模块
  8. 消息中心模块

二,环境介绍

语言环境: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) {
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值