基于JAVA的生鲜超市销售系统 开源项目

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 商品档案模块
    • 2.2 商品进货模块
    • 2.3 商品销售模块
    • 2.4 供应商模块
    • 2.5 活动管理模块
    • 2.6 消息通知模块
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询商品
    • 4.2 商品入库
    • 4.3 商品出库
    • 4.4 查询商品类型
    • 4.5 查询店铺活动
  • 五、免责说明


一、摘要

1.1 项目介绍

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

1.2 项目录屏


二、功能模块

2.1 商品档案模块

生鲜超市销售系统的商品档案模块是系统中管理商品信息的重要组成部分。该模块主要用于对商品进行增加、删除、修改和查询等操作,管理员或操作员可以通过该功能在系统中添加新的商品信息。在增加商品时,需要输入商品的基本信息,如商品名称、商品编码、商品分类、商品描述、规格、单位、进价、售价等。系统还可以支持上传商品图片,以便更直观地展示商品。删除商品功能可以用于删除系统中已存在的商品信息。管理员或操作员可以通过商品的编码或其他唯一标识来选择需要删除的商品。删除商品时,系统会进行确认提示,防止误操作。修改商品功能用于修改已存在的商品信息。管理员或操作员可以通过商品的编码或其他标识来选择需要修改的商品。可以修改的信息包括商品名称、商品分类、商品描述、规格、单位、进价、售价等。修改商品信息前,系统会显示当前的商品信息,方便用户进行修改。查询商品功能用于查询系统中已存在的商品信息。管理员或操作员可以通过商品的编码、名称、分类等关键词进行查询。系统会根据输入的关键词进行模糊匹配,并展示符合条件的商品列表。用户可以通过查询结果查看商品的详细信息。通过以上四个功能,生鲜超市销售系统的商品档案模块可以有效管理和维护商品信息,提高商品管理的效率和准确性。

2.2 商品进货模块

生鲜超市销售系统的商品进货模块是用于管理商品进货信息的重要模块。该模块主要包括增加、删除、修改和查询商品进货记录的功能,管理员或操作员可以通过该功能添加新的进货记录。在添加进货记录时,需要输入相关的信息,如进货日期、供应商、商品名称、数量、进货价格等。系统还可以支持上传进货单据的图片,以便更直观地展示进货信息。删除进货记录功能可以用于删除系统中已存在的进货记录。管理员或操作员可以通过进货记录的编号或其他标识来选择需要删除的记录。删除进货记录时,系统会进行确认提示,以防误操作。修改进货记录功能用于修改已存在的进货记录。管理员或操作员可以通过进货记录的编号或其他标识来选择需要修改的记录。可以修改的信息包括进货日期、供应商、商品名称、数量、进货价格等。修改进货记录前,系统会显示当前记录的详细信息,方便用户进行修改。查询进货记录功能用于查询系统中已存在的进货记录。管理员或操作员可以通过进货日期、供应商、商品名称等关键词进行查询。系统会根据输入的关键词进行模糊匹配,并展示符合条件的进货记录列表。用户可以通过查询结果查看详细的进货信息。通过以上四个功能,生鲜超市销售系统的商品进货模块可以有效管理和记录商品的进货信息,提高进货管理的效率和准确性。

2.3 商品销售模块

生鲜超市销售系统的商品销售模块是系统中的核心模块之一,主要负责管理和处理商品的增加、删除、修改和查询操作,增加商品功能用于向系统中添加新的商品。在增加商品时,需要输入商品的相关信息,如商品名称、价格、库存数量、供应商信息等。系统会将新商品的信息存储在数据库中,并为该商品分配一个唯一的商品编号。删除商品功能用于从系统中删除不再销售的商品。在删除商品时,需要输入要删除的商品编号或名称。系统会根据输入的信息在数据库中查找对应的商品,并将其从数据库中删除。修改商品功能用于修改商品的信息。在修改商品时,可以选择输入要修改的商品编号或名称,系统会根据输入的信息在数据库中查找对应的商品,并显示出该商品的详细信息。然后,可以对商品的各个属性进行修改,如价格、库存数量、供应商信息等。修改完成后,系统会将修改后的信息保存到数据库中。查询商品功能用于查询系统中的商品信息。可以通过商品编号、名称、价格范围等条件进行查询。系统会根据输入的查询条件,在数据库中查找符合条件的商品,并将查询结果显示出来。查询结果可以包括商品的详细信息、库存数量、供应商信息等。通过以上四个功能,生鲜超市销售系统的商品销售模块可以方便地管理和处理商品的增加、删除、修改和查询操作,提高了系统的效率和准确性。同时,该模块还可以与其他模块(如库存管理、订单管理等)进行联动,实现全面的商品管理和销售流程控制。

2.4 供应商模块

生鲜超市销售系统的供应商模块是管理和处理供应商信息的模块,主要负责供应商的增加、删除、修改和查询操作,增加供应商功能用于向系统中添加新的供应商。在增加供应商时,需要输入供应商的相关信息,如供应商名称、联系人、联系电话、地址等。系统会将新供应商的信息存储在数据库中,并为该供应商分配一个唯一的供应商编号。删除供应商功能用于从系统中删除不再合作的供应商。在删除供应商时,需要输入要删除的供应商编号或名称。系统会根据输入的信息在数据库中查找对应的供应商,并将其从数据库中删除。修改供应商功能用于修改供应商的信息。在修改供应商时,可以选择输入要修改的供应商编号或名称,系统会根据输入的信息在数据库中查找对应的供应商,并显示出该供应商的详细信息。然后,可以对供应商的各个属性进行修改,如联系人、联系电话、地址等。修改完成后,系统会将修改后的信息保存到数据库中。查询供应商功能用于查询系统中的供应商信息。可以通过供应商编号、名称、联系人等条件进行查询。系统会根据输入的查询条件,在数据库中查找符合条件的供应商,并将查询结果显示出来。查询结果可以包括供应商的详细信息、联系方式、供货产品等。通过以上四个功能,生鲜超市销售系统的供应商模块可以方便地管理和处理供应商的增加、删除、修改和查询操作,提高了系统的效率和准确性。同时,该模块还可以与其他模块进行联动,实现全面的供应链管理和流程控制。

2.5 活动管理模块

生鲜超市销售系统的活动管理模块是用于管理各种促销活动和优惠活动的模块,主要包括活动的增加、删除、修改和查询操作,增加活动功能用于向系统中添加新的促销活动或优惠活动。在增加活动时,需要输入活动的相关信息,如活动名称、时间范围、参与商品等。系统会将新活动的信息存储在数据库中,并为该活动分配一个唯一的活动编号。删除活动功能用于从系统中删除已经结束或不再进行的活动。在删除活动时,需要输入要删除的活动编号或名称。系统会根据输入的信息在数据库中查找对应的活动,并将其从数据库中删除。修改活动功能用于修改活动的信息。在修改活动时,可以选择输入要修改的活动编号或名称,系统会根据输入的信息在数据库中查找对应的活动,并显示出该活动的详细信息。然后,可以对活动的各个属性进行修改,如时间范围、参与商品等。修改完成后,系统会将修改后的信息保存到数据库中。查询活动功能用于查询系统中的活动信息。可以通过活动编号、名称、时间范围等条件进行查询。系统会根据输入的查询条件,在数据库中查找符合条件的活动,并将查询结果显示出来。查询结果可以包括活动的详细信息、参与商品、优惠内容等。通过以上四个功能,生鲜超市销售系统的活动管理模块可以方便地管理和处理各种促销活动和优惠活动,提高了系统的营销效果和客户满意度。同时,该模块还可以与其他模块进行联动,实现全面的销售活动管理和效果跟踪。

2.6 消息通知模块

生鲜超市销售系统的消息通知模块是用于管理和发送系统内部通知的模块,主要包括消息的增加、删除、修改和查询操作,增加消息功能用于向系统中添加新的消息通知。在增加消息时,需要输入消息的标题、内容、接收人等相关信息。系统将新的消息保存在数据库中,并为每条消息分配一个唯一的消息编号。删除消息功能用于从系统中删除已经发送或不再需要的消息。在删除消息时,需要输入要删除的消息编号或标题。系统根据输入的信息在数据库中查找对应的消息,并将其从数据库中删除。修改消息功能用于修改已存在的消息内容或接收人。在修改消息时,可以选择输入要修改的消息编号或标题,系统根据输入的信息在数据库中查找对应的消息,并显示出消息的详细内容。可以对消息的标题、内容、接收人等进行修改,并将修改后的信息保存到数据库中。查询消息功能用于查询系统中的消息。可以通过消息编号、标题、接收人等条件进行查询。系统根据输入的查询条件在数据库中查找符合条件的消息,并将查询结果显示出来。查询结果可以包括消息的标题、内容、发送时间等信息。通过以上四个功能,生鲜超市销售系统的消息通知模块可以方便地管理和处理内部通知的增加、删除、修改和查询操作,实现了消息的灵活管理和及时传达。同时,该模块也可以与其他模块(如订单管理、售后服务等)进行联动,实现系统内部各功能模块之间的信息交流和协作。


三、系统展示

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


四、核心代码

4.1 查询商品

equestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询商品")
public Result<IPage<Commodity>> getByPage(@ModelAttribute Commodity commodity ,@ModelAttribute PageVo page){QueryWrapper<Commodity> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(commodity.getNature())) {qw.eq("nature",commodity.getNature());}if(!ZwzNullUtils.isNull(commodity.getAssetName())) {qw.like("asset_name",commodity.getAssetName());}if(!ZwzNullUtils.isNull(commodity.getShopId())) {qw.eq("shop_id",commodity.getShopId());}if(!ZwzNullUtils.isNull(commodity.getTypeId())) {qw.eq("type_id",commodity.getTypeId());}User currUser = securityUtil.getCurrUser();BigDecimal discount = currUser.getDiscount();String today = DateUtil.today();IPage<Commodity> data = iCommodityService.page(PageUtil.initMpPage(page),qw);for (Commodity co : data.getRecords()) {Integer shopDiscount = null;if(!ZwzNullUtils.isNull(co.getSupplierId())) {Supplier supplier = iSupplierService.getById(co.getSupplierId());if(supplier != null) {co.setSupplierName(supplier.getName());}}if(!ZwzNullUtils.isNull(co.getTypeId())) {CommodityType type = iCommodityTypeService.getById(co.getTypeId());if(type != null) {co.setTypeName(type.getTitle());}}if(!ZwzNullUtils.isNull(co.getShopId())) {Shop shop = iShopService.getById(co.getShopId());if(shop != null) {co.setShopName(shop.getTitle());QueryWrapper<ShopActivity> saQw = new QueryWrapper<>();saQw.eq("shop_id",shop.getId());saQw.le("start_date",today);saQw.ge("end_date",today);List<ShopActivity> shopActivityList = iShopActivityService.list(saQw);if(shopActivityList.size() > 0) {int number = 100;for (ShopActivity sa : shopActivityList) {if(sa.getDiscount().intValue() < number) {number = sa.getDiscount().intValue();}}if(shopDiscount == null) {shopDiscount = number;} else if(shopDiscount > number){shopDiscount = number;}}}}if(shopDiscount == null) {shopDiscount = 100;}if(discount != null) {if(discount.intValue() < shopDiscount) {shopDiscount = discount.intValue();}}co.setDiscount(shopDiscount);}return new ResultUtil<IPage<Commodity>>().setData(data);
}

4.2 商品入库

@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);
}

4.3 商品出库

@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("手慢啦!库存不足!");}}commodityOut.setDate(DateUtil.now());iCommodityOutService.saveOrUpdate(commodityOut);return new ResultUtil<CommodityOut>().setData(commodityOut);
}

4.4 查询商品类型

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询商品类型")
public Result<IPage<CommodityType>> getByPage(@ModelAttribute CommodityType commodityType ,@ModelAttribute PageVo page){QueryWrapper<CommodityType> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(commodityType.getCreateBy())) {}IPage<CommodityType> data = iCommodityTypeService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<CommodityType>>().setData(data);
}

4.5 查询店铺活动

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询店铺活动")
public Result<IPage<ShopActivity>> getByPage(@ModelAttribute ShopActivity shopActivity ,@ModelAttribute PageVo page){QueryWrapper<ShopActivity> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(shopActivity.getShopId())) {qw.eq("shop_id",shopActivity.getShopId());}if(!ZwzNullUtils.isNull(shopActivity.getTitle())) {qw.eq("title",shopActivity.getTitle());}IPage<ShopActivity> data = iShopActivityService.page(PageUtil.initMpPage(page),qw);for (ShopActivity activity : data.getRecords()) {String shopId = activity.getShopId();if(!ZwzNullUtils.isNull(shopId)) {Shop shop = iShopService.getById(shopId);if(shop != null) {activity.setShopName(shop.getTitle());}}}return new ResultUtil<IPage<ShopActivity>>().setData(data);
}

五、免责说明

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

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CloudCanal x Hive 构建高效的实时数仓

简述 CloudCanal 最近对于全周期数据流动进行了初步探索&#xff0c;打通了Hive 目标端的实时同步&#xff0c;为实时数仓的构建提供了支持&#xff0c;这篇文章简要做下分享。 基于临时表的增量合并方式基于 HDFS 文件写入方式临时表统一 Schema任务级的临时表 基于临时表的…

MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实

2月26日&#xff0c;在MWC 2024世界移动通信大会上&#xff0c;美格智能正式宣布推出5G-A模组SRM817WE以及全新的5G-A FWA解决方案&#xff0c;包含5G-A CPE解决方案SRT858M、5G-A MiFi解决方案SRT878H和5G-A ODU解决方案SRT853MX&#xff0c;旨在进一步提升网络性能&#xff0…

持安科技孙维伯:零信任在攻防演练下的最佳实践|DISCConf 2023

近日&#xff0c;在2023数字身份安全技术大会上&#xff0c;持安科技联合创始人孙维伯应主办方的特别邀请&#xff0c;发表了主题为“零信任在攻防演练下的最佳实践”的演讲。 孙维伯在2023数字身份安全技术大会上发表演讲 以下为本次演讲实录&#xff1a; 我是持安科技的联合…

网络卡顿是怎么回事?

网络卡顿是指在网络通信过程中&#xff0c;数据传输出现延迟或中断&#xff0c;导致用户在使用网络时出现卡顿、延迟或不流畅的情况。例如&#xff1a;系统响应时间长&#xff0c;网页加载速度慢&#xff1b;视频或游戏掉帧&#xff0c;导致画面卡顿或不流畅&#xff1b;音视频…

基于springboot+vue的公寓报修管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

springboot+vue+mysql项目使用的常用注解

实体类常用注解 Data Data 是一个 Lombok 提供的注解&#xff0c;使用 Data 注解可以简化代码&#xff0c;使代码更加简洁易读。 作用&#xff1a;自动为类生成常用的方法&#xff0c;包括 getter、setter、equals、hashCode 和 toString 等需要加Lombok的依赖 <depende…

针对KZG承诺和高效laconic OT的extractable witness encryption

1. 引言 2024年以太坊基金会等成员论文 Extractable Witness Encryption for KZG Commitments and Efficient Laconic OT&#xff0c;开源代码实现见&#xff1a; https://github.com/rot256/research-we-kzg&#xff08;Rust&#xff09; 在该论文中&#xff0c;提供了一种…

nginx出现 “414 request-uri too large”

nginx出现 “414 request-uri too large” 1.修改传参方式 POST 2.字段能变成后端获取就自己获取&#xff0c;不用前端传 3.修改nginx配置&#xff0c;添加client_header_buffer_size 512k;large_client_header_buffers 4 512k;配置

网络工程师学习笔记——VRP配置命令大全

VRP是Versatile Routing Platform的简称&#xff0c;它是华为公司数据通信产品的通用网络操作系统。它以IP业务为核心&#xff0c;采用组件化的体系结构&#xff0c;在实现丰富功能特性的同时&#xff0c;还提供了基于应用的可裁剪和可扩展的功能&#xff0c;使得路由器和交换机…

#单片机(TB6600驱动42步进电机)

1.IDE:keil 2.设备:保密 3.实验&#xff1a;使用单片机通过普通IO口控制TB6600驱动42步进电机 4.时序图&#xff1a; TB6600 ENA、ENA-DIR-、DIRPUL-、PULB-、BA、A-VCC、GND使能电机&#xff08;直接悬空不接&#xff09;方向脉冲输入&#xff08;普通IO口模拟即可&#xff…

AI Word Helper (Chorme Extentions) AI单词助手(谷歌浏览器插件)

AI Word Helper (Chorme Extentions) AI单词助手&#xff08;谷歌浏览器插件&#xff09; 英文网站&#xff0c;划词查单词&#xff0c;还是看不懂&#xff1f;因为单词意思那么多&#xff0c;词性搞不清&#xff0c;上下文搞不清&#xff0c;出来的意思就没法用&#xff0c;G…

kafka文件存储机制和消费者

1.broker文件存储机制 去查看真正的存储文件&#xff1a; 在/opt/module/kafka/datas/ 路径下 kafka-run-class.sh kafka.tools.DumpLogSegments --files ./00000000000000000000.index 如果是6415那么这个会存储在563的log文件之中&#xff0c;因为介于6410和10090之间。 2.…