Vue+SpringBoot打造便利店仓库物资信息管理系统

news2024/11/18 21:30:20

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 系统登陆模块
    • 2.2 便利店管理员模块
    • 2.3 菜单权限模块
    • 2.4 商品管理模块
    • 2.5 商品进货模块
    • 2.6 商品出库模块
  • 三、系统设计
    • 3.1 总体设计
    • 3.2 可行性分析
      • 3.2.1 对现有系统的分析
      • 3.2.2 技术的可行性分析
      • 3.2.3 社会因素的分析
  • 四、系统实现
  • 五、核心代码
    • 5.1 新增供应商
    • 5.2 编辑供应商
    • 5.3 新增商品入库单
    • 5.4 新增商品出库单
    • 5.5 购买单个商品
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的便利店物资管理系统,包含了供应商模块、商品档案模块、商品进货模块、商品销售模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,便利店物资管理系统基于角色的访问控制,给管理员、店员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

通过对便利店实际需求的研究,我将便利店仓库物资信息管理系统的功能模块分为系统登陆模块、便利店管理员模块、菜单权限模块、商品管理模块、商品进货模块、商品出库模块,以下将分别进行阐述。

2.1 系统登陆模块

登陆注册模块用于便利店仓库物资信息管理系统的登陆,用户输入登陆账号、密码和图形验证码即可完成登陆,登陆界面要当简洁美观,无需对用户进行培训即可投入使用。

2.2 便利店管理员模块

便利店管理模块用于维护便利店工作人员的档案,包括对便利店员工的增加、删除、修改、编辑、导出操作。管理员的字段应包括登陆账号、登陆密码、姓名、性别、手机号、身份证号、家庭地址、备注信息等。

2.3 菜单权限模块

菜单权限模块用于管理每一个登陆角色拥有哪些菜单权限,如便利店管理员需要拥有全部菜单权限,而仓库管理员只需拥有进货菜单即可,无需看到用户管理模块。这个基于角色的访问控制,需要在菜单权限模块中设计和实现。

2.4 商品管理模块

商品管理模块用于管理便利店中全部商品类型,如方便面、火腿肠等等。这些商品类型需要为进货模块和出库模块提供基础数据支持,商品档案的字段应当包括商品ID、商品名称、商品类型、商品供应商、型号、商品单价、现有数量、总价等字段,在商品管理模块中,管理员可以对商品档案进行增加、删除、修改、更新操作。

2.5 商品进货模块

在商品档案的建立之后,仓库管理员可以对商品进行进货登记,增加商品的库存。仓库员需要先选择商品类型,然后输入进货发票号和入库数量,如有需要还可以输入备注信息,完成进货登记。进货模块的字段需要包括商品ID、商品名称、发票单号、商品型号、单价、入库数量、总价、备注信息。

2.6 商品出库模块

商品入库之后,如果投入到便利店中,需要进行出库操作,出库也是由出库管理员完成。出库员先选择商品类型,此时可以看到商品剩余的库存量,接着从用户档案中选择出库领用人,最后输入出库数量,完成商品出库操作。出库单需要包括商品ID、商品名称、商品型号、商品单价、出库数量、总价、领用人、备注信息。


三、系统设计

3.1 总体设计

通过对便利店实际需求的需求分析,我将便利店仓库物资信息管理系统的架构分为六大模块,分别是系统登陆模块、便利店管理员模块、菜单权限模块、商品管理模块、商品进货模块、商品出库模块如下图所示。

在这里插入图片描述

3.2 可行性分析

系统开发的可行性的评估,主要是从三个方面进行的,分别是对现有系统的分析、对技术的可行性分析和社会因素的分析。

3.2.1 对现有系统的分析

便利店仓库物资信息管理系统的设计与实现具有重要意义:用户管理商品更加方便快捷,只需注册账号进行登录,便可以在自己的电脑上进行出入库商品操作,可以根据需要修改自己的个人信息,用户也可以随时根据需要进行出入库,发送过程方便快捷;针对这一问题,便利店仓库物资信息管理系统有利于减少用户在出入库的操作时间,减轻出入库等待时间的占比,在一定程度上提高了用户的便利店工作效率。

3.2.2 技术的可行性分析

该系统分析了设计初期各种技术体系结构的优缺点,并最终采用了广泛而高安全性J2EE技术。J2EE技术的重点是系统的外部可拓展性以及开发早期的标准化部署。因此,J2EE技术可以完全支持便利店仓库物资管理系统的研究和开发。面向对象的思想将以上所说作为研究对象,来研究、分析、探索这些事物之间的关系。一般情况下,问题域里的所有内容都可以一个一个地转换为软件系统中的对象。面向对象技术使系统更易于开发人员理解和使用,这使系统的用户可以了解研发的原理和过程。MySQL是关系数据库,并且MySQL体积小,速度快,并且是开源代码,因此它拥有广泛的应用。综上,开发技术可行,不存在工程难题。

3.2.3 社会因素的分析

计算机和网络技术在ERP领域的应用,能够有效的解决用户仓库货物清点难、货物杂乱多等问题,可以节省时间、合理分配资源等,所以便利店仓库物资管理系统是具有重要意义的。


四、系统实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、核心代码

5.1 新增供应商

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增供应商")
public Result<Supplier> insert(Supplier supplier){
    iSupplierService.saveOrUpdate(supplier);
    return new ResultUtil<Supplier>().setData(supplier);
}

5.2 编辑供应商

@RequestMapping(value = "/update", method = RequestMethod.POST)
@ApiOperation(value = "编辑供应商")
public Result<Supplier> update(Supplier supplier){
    iSupplierService.saveOrUpdate(supplier);
    return new ResultUtil<Supplier>().setData(supplier);
}

5.3 新增商品入库单

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增商品入库单")
public Result<CommodityIn> insert(CommodityIn commodityIn){
    CommodityIn oldWarehousing = iCommodityInService.getById(commodityIn.getId());
    double oldNumber = 0.0;
    if(oldWarehousing != null){
        oldNumber = oldWarehousing.getNumber() == null ? 0.0 : Double.parseDouble(oldWarehousing.getNumber());
    }
    // 入库,更新库存
    Commodity assetsType = iCommodityService.getById(commodityIn.getAssetId());
    if(assetsType != null){
        // number = 现在仓库总数量 + 该入库单现增加数量 - 该入库单原有增加数量
        double number = Double.parseDouble(assetsType.getNumber()) + Double.parseDouble(commodityIn.getNumber()) - oldNumber;
        assetsType.setNumber(number + "");
        assetsType.setTotalPrice((Double.parseDouble(assetsType.getUnitPrice()) * number) + "");
        // existNumber = 现在仓库存在数量 + 该入库单现增加数量 - 该入库单原有增加数量
        double existNumber = Double.parseDouble(assetsType.getExistingNumber()) + Double.parseDouble(commodityIn.getNumber()) - oldNumber;
        if(existNumber < 0)  {
            return ResultUtil.error("入库数量大于已出库数量!");
        }
        assetsType.setExistingNumber(existNumber + "");
        iCommodityService.saveOrUpdate(assetsType);
    }
    iCommodityInService.saveOrUpdate(commodityIn);
    return new ResultUtil<CommodityIn>().setData(commodityIn);
}

5.4 新增商品出库单

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增商品出库单")
public Result<CommodityOut> insert(CommodityOut commodityOut){
    CommodityOut oldWarehouseOut = iCommodityOutService.getById(commodityOut.getId());
    double oldNumber = 0.0;
    if(oldWarehouseOut != null){
        oldNumber = Double.parseDouble(oldWarehouseOut.getNumber());
    }
    // outNumber 要出库的数量
    double outNumber = Double.parseDouble(commodityOut.getNumber());
    Commodity oldAssetsType = iCommodityService.getById(commodityOut.getAssetId());
    if(oldAssetsType != null){
        // newNumber 出库后还有的数量 = 仓库原本还有的数量 - 出库单的出库数量 + 原有出库单的出库数量
        Double newNumber = Double.parseDouble(oldAssetsType.getExistingNumber()) - outNumber + oldNumber;
        if(newNumber >= 0){
            oldAssetsType.setExistingNumber(newNumber + "");
            iCommodityService.saveOrUpdate(oldAssetsType);
        }else{
            return ResultUtil.error("手慢啦!库存不足!");
        }
    }
    iCommodityOutService.saveOrUpdate(commodityOut);
    return new ResultUtil<CommodityOut>().setData(commodityOut);
}

5.5 购买单个商品

@RequestMapping(value = "/buy", method = RequestMethod.GET)
@ApiOperation(value = "购买单个商品")
public Result<Commodity> buy(@RequestParam String id,@RequestParam float number){
    Commodity commodity = iCommodityService.getById(id);
    if(commodity == null) {
        return ResultUtil.error("商品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    double oldNumber = 0.0;
    double outNumber = number;
    Commodity oldAssetsType = iCommodityService.getById(id);
    if(oldAssetsType != null){
        // newNumber 出库后还有的数量 = 仓库原本还有的数量 - 出库单的出库数量 + 原有出库单的出库数量
        Double newNumber = Double.parseDouble(oldAssetsType.getExistingNumber()) - outNumber + oldNumber;
        if(newNumber >= 0){
            oldAssetsType.setExistingNumber(newNumber + "");
            iCommodityService.saveOrUpdate(oldAssetsType);
        }else{
            return ResultUtil.error("手慢啦!库存不足!");
        }
    }
    CommodityOut out = new CommodityOut();
    out.setAssetId(commodity.getId());
    out.setAssetName(commodity.getAssetName());
    out.setRecipientsId(currUser.getId());
    out.setRecipients(currUser.getNickname());
    out.setNature(commodity.getNature());
    out.setModel(commodity.getModel());
    out.setUnitPrice(commodity.getUnitPrice());
    out.setNumber(number + "");
    out.setRemarks("买家主动购买");
    iCommodityOutService.saveOrUpdate(out);
    return new ResultUtil<Commodity>().setData(iCommodityService.getById(id));
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1484997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas库

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、主要特点和功能介绍二、Series 示例代码三、DataFrame示例代码四、数据导入/导出示例代码五、数据清洗示例代码六、数据选择和过滤示例代码七、数据合并和连接示例代码八、数据分组和聚…

网络编程(IP、端口、协议、UDP、TCP)【详解】

目录 1.什么是网络编程&#xff1f; 2.基本的通信架构 3.网络通信三要素 4.UDP通信-快速入门 5.UDP通信-多发多收 6.TCP通信-快速入门 7.TCP通信-多发多收 8.TCP通信-同时接收多个客户端 9.TCP通信-综合案例 1.什么是网络编程&#xff1f; 网络编程是可以让设…

Tomcat负载均衡、动静分离

目录 引言 实验图解 1.实验环境搭建 2.部署Nginx服务器及配置静态页面Web服务 3.部署Tomcat服务及配置动态页面Web服务 4.实验验收 动态页面 静态页面 引言 tomcat服务既可以处理动态页面&#xff0c;也可以处理静态页面&#xff1b;但其处理静态页面的速度远远不如…

【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”

我们在做ArcGIS Engine二次开发时&#xff0c;特别是新手&#xff0c;安装好了开发环境&#xff0c;满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后&#xff0c;却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…

猫耳语音下载(mediadown)

猫耳语音下载(mediadown) 一、介绍 猫耳语音下载,能够帮助你下载猫耳音频节目。如果你是会员,它还能帮你下载会员节目。 二、下载地址 下载:猫耳语音下载(mediadown) 百度网盘下载:猫耳语音下载(mediadown) 三、安装教程 将下载的文件解压到D:\xibinhui,D:\Pr…

数据结构 - Trie树(字符串统计、最大异或对)

文章目录 前言Part 1&#xff1a;Trie字符串统计1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;最大异或对1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍Trie树的常见应用&#xff0c;包括&#xff1a;Trie…

服务器硬件基础知识

1. 服务器分类 服务器分类 服务器的分类没有一个统一的标准。 从多个多个维度来看服务器的分类可以加深我们对各种服务器的认识。 N.B. CISC: complex instruction set computing 复杂指令集计算 RISC: reduced instruction set computer 精简指令集计算 EPIC: explicitly p…

flurl升级之后没有FlurlNewtonsoftJsonSerializer

新建NewtonsoftJsonSerializer.cs /// <summary> /// ISerializer implementation based on Newtonsoft.Json. /// Default serializer used in calls to GetJsonAsync, PostJsonAsync, etc. /// </summary> public class NewtonsoftJsonSerializer : IJsonSerial…

Project_Euler-45 题解

Project_Euler-45 题解 题目 思路 非常简单&#xff0c;枚举六边形数字&#xff0c;然后判断他们是不是三角形和五边形数&#xff0c;如果是&#xff0c;那么输出。 代码 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.…

【详识JAVA语言】逻辑控制

概述 我的曾经&#xff1a; 早上8:00起床--->洗漱--->吃早饭--->上课--->吃午饭--->上课--->运动--->吃完饭--->玩手机--->睡觉 每天的生活貌似都是这么规律&#xff0c;顺序的做着每件事&#xff0c;前途一片渺茫~~~ 直到有一天&#xff1a; 我…

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统&#xff0c;在此环境下&#xff0c;各个任务可以在独立的节点上运行。它有助于提升资源利用率&#xff0c;增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…

snakeyaml1.x升级2.x导致项目启动报错

snakeyaml1.x升级2.x,修复漏洞 1.背景 在工作中&#xff0c;经常会有漏洞扫描&#xff0c;有一次看到了snakeyaml的漏洞&#xff1a; 项目框架&#xff1a;springBoot 版本&#xff1a;2.2.6.RELEASE snakeyaml 中央仓库信息 snakeyaml中央仓库地址&#xff1a;https://m…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践&#xff0c;无论是 ToC 面向玩家的游戏社区场景&#xff0c;还是 ToB 面向游戏工作室的美术制作场景&#xff0c;都可以发挥很大的价值&#xff0c;如何更好地使用 Stable Dif…

程序项目打包发布方法,采用InstallShield软件

重点&#xff1a; 1.程序项目做出来了&#xff0c;需要打包发布给用户。如何打包是关键。 2.采用InstallShield软件进行发布。 步骤一&#xff1a;创建一个依赖三方库配置环境的bat文件的项目。 &#xff08;主要测试三方库打包 和如果有bat文件&#xff0c;需要先创建环境&…

YOLOv9独家原创改进|使用DySample超级轻量的动态上采样算子

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、DySample论文摘要 尽管最近的基于内核的动态上采样器如CARAFE、FADE和SAPA取得了令人印象深刻的性能提升&#xff0c;但它们引入了大量的工作量&…

Canvas笔记03:Canvas元素功能、属性、获取、原理等一文讲透

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas元素的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas元素是HTML5中的一个重…

加密隧道技术

在现在的互联网上传输数据&#xff0c;首要考虑的就是安全。这关乎到你的隐私&#xff0c;个人信息&#xff0c;财产安全等等重大问题。如果你的程序本身传输的信息没有加密&#xff0c;也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的&#xff0c;…

【二分】第k个缺失的数

第K个缺失的数 链接 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/kth-missing-positive-number/ 题目 题解 二段…

【GPU驱动开发】-mesa简介

前言 不必害怕未知&#xff0c;无需恐惧犯错&#xff0c;做一个Creator&#xff01; 一、mesa介绍 Mesa 是一个开源的3D图形库&#xff0c;它实现了多种图形API&#xff0c;包括 OpenGL、Vulkan 和 OpenCL。Mesa 的目标是提供一个开源、跨平台的图形库&#xff0c;使得开发者…