【开源】SpringBoot框架开发免税店商城管理系统

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、系统设计
    • 2.1 功能模块设计
    • 2.2 研究方法
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询免税种类
    • 4.2 查询物品档案
    • 4.3 新增顾客
    • 4.4 新增消费记录
    • 4.5 审核免税
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的免税店商城管理系统,包含了顾客模块、免税物品模块、免税费率模块、购买登记模块和免税审核模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,免税店商城管理系统基于角色的访问控制,给免税管理员、免税工作人员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、系统设计

本项目是基于Vue和SpringBoot的免税店商城管理系统,是一个前后端分离的项目,是当下软件开发主流模式。

2.1 功能模块设计

在这里插入图片描述

该项目中包括三个角色,分别是免税店管理员、审核员、系统管理员。对于免税店管理员而言,免税店管理员主要负责对顾客信息和购买物品进行登记并上传到系统,以便审核员审核顾客信息。对于审核员而言,审核员负责发布免税最新比例在系统中,设置各类商品的免税比例,方便物品税率改变后物品价值计算,以及免税物品发货审核,经过审核之后的商品才会发货。对于系统管理员而言,系统管理员负责在审核员审核顾客不满足购买免税店商品条件之后的会员卡退费,以及对会员和审核员的登陆账号、角色、权限进行配置,还有维护数据库稳定。

登录方面,系统前端将账号、密码、验证码转化为 JSON 格式,使用 ajax 请求后端 API 接口,后端接口完成业务逻辑判断,再将登陆结果返回给前端,前端将根据返回结果判断接下来的页面跳转。登陆页面包含账号密码和手机号码两个选择来进行登录。输入账号、密码和验证码后点击登陆,即可登陆系统,此处账号密码不能为空,如果密码输入错误,系统将进行密码错误提示,不能登陆系统,如果验证码过期,则需要重新获取验证。登陆鉴权功能由后端完成。 此系统用于三类人群进行登陆、使用,分别是免税店管理员、系统管理员、审核员。界面方面块使用了 View UI 的 Table 组件,和 Form 组件作为搜索栏。添加弹窗使用了 View UI 的 Drawer 抽屉组件。确认弹窗使用了 View UI 的 Modal 组件。

2.2 研究方法

采用的研究方法主要是文献研究法、功能分析法、描述研究法。首先文献研究法是根据所研究的目的或课题,通过调查文献获取资料,从而全面地、正确地了解掌握免税店商城管理方面的相关知识。然后用描述研究法对于相关的技术进行进一步了解,最后通过功能分析法对要完成的设计进行功能模块具体分析,从而实现整个系统。

首先是进行文献分析。大量收集有关免税店商城管理系统的文献,进行研究。为后续的系统分析建立基础。

第二是系统分析。学习有关SpringBoot、Vue、MySQL等技术以及免税店商城管理系统相关的技术。然后对系统进行可行性和需求分析,包括对该系统操作、技术和管理员等方面的分析论证,以及对系统的登录、审核管理、顾客信息登记功能进行需求分析论证。

第三是系统设计。先对设计思想、目标和系统结构进行简单概述。然后对各角色的实现要求进行分析,最后根据以上功能涉及的数据库结构设计进行详细描述,展示该系统的全部功能。

最后是系统开发。对以上的分析进行逐步开发设计,搭建后台,实现框架后填充各个功能,并且不断完善不足之处。


三、系统展示

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


四、核心代码

4.1 查询免税种类

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询免税种类")
public Result<IPage<Insurance>> getByPage(@ModelAttribute Insurance insurance ,@ModelAttribute PageVo page){QueryWrapper<Insurance> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(insurance.getTitle())) {qw.like("title",insurance.getTitle());}if(!ZwzNullUtils.isNull(insurance.getContent())) {qw.like("content",insurance.getContent());}IPage<Insurance> data = iInsuranceService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<Insurance>>().setData(data);
}

4.2 查询物品档案

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询物品档案")
public Result<IPage<Operation>> getByPage(@ModelAttribute Operation operation ,@ModelAttribute PageVo page){QueryWrapper<Operation> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(operation.getTitle())) {qw.like("title",operation.getTitle());}if(!ZwzNullUtils.isNull(operation.getType())) {qw.like("type",operation.getType());}if(!ZwzNullUtils.isNull(operation.getDescribed())) {qw.like("described",operation.getDescribed());}IPage<Operation> data = iOperationService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<Operation>>().setData(data);
}

4.3 新增顾客

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增顾客")
public Result<Roster> insert(Roster roster){Insurance insurance = iInsuranceService.getById(roster.getInsuranceId());if(insurance != null) {roster.setInsuranceName(insurance.getTitle());}iRosterService.saveOrUpdate(roster);return new ResultUtil<Roster>().setData(roster);
}

4.4 新增消费记录

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增消费记录")
public Result<SeeDoctor> insert(SeeDoctor seeDoctor){Roster roster = iRosterService.getById(seeDoctor.getUserId());if(roster == null) {return ResultUtil.error("顾客不存在");}seeDoctor.setUserName(roster.getName());seeDoctor.setDate(DateUtil.today());iSeeDoctorService.saveOrUpdate(seeDoctor);roster.setMoney(seeDoctor.getBalanceNew());iRosterService.saveOrUpdate(roster);// 生成审核单Examine examine = new Examine();examine.setUserId(roster.getId());examine.setUserName(roster.getName());examine.setExemptionId(roster.getInsuranceId());examine.setExemptionName(roster.getInsuranceName());examine.setMoney(seeDoctor.getPriceYou());examine.setStatus(0);examine.setMessage("");examine.setRemark("");iExamineService.saveOrUpdate(examine);return new ResultUtil<SeeDoctor>().setData(seeDoctor);
}

4.5 审核免税

@RequestMapping(value = "/audit", method = RequestMethod.POST)
@ApiOperation(value = "审核免税")
public Result<Object> audit(@RequestParam String id,@RequestParam String msg){Examine examine = iExamineService.getById(id);if(examine == null) {return ResultUtil.error("审核单不存在");}examine.setStatus(1);examine.setMessage(msg);iExamineService.saveOrUpdate(examine);return ResultUtil.success();
}

五、免责说明

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

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

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

在这里插入图片描述

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

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

相关文章

【文本编辑】Typora v1.8.6 绿色版

下载地址 Typora v1.8.6 绿色版 简介 Typora 是一款简洁、直观的跨平台 Markdown 编辑器&#xff0c;旨在提供优雅的写作体验。与传统的 Markdown 编辑器不同&#xff0c;Typora 提供所见即所得的编辑界面&#xff0c;使用户可以即时预览 Markdown 文档的渲染效果&#xff0…

prometheus 原理(架构,promql表达式,描点原理)

大家好&#xff0c;我是蓝胖子&#xff0c;提到监控指标&#xff0c;不得不说prometheus&#xff0c;今天这篇文章我会对prometheus 的架构设计&#xff0c;promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。 架构设计 先来看看&am…

性能测试干2年,还不会这个技术点?

nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具&#xff0c;记录的信息比较全面&#xff0c;结合nmon_analyzer工具产生数据文件与图形化结果。 nmon可监控的数据类型 内存使用情况、磁盘适配器、文件系统中的可用空间、CPU使用率等等数据信息 特点 ①占用…

Java零基础-数组的访问和遍历

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

使用CSS制作动态的环形图/饼图

使用纯 CSS Animation conic-gradient 实现一个环形图。 饼图的实现思路和环形图一样&#xff0c;去掉中间的圆形遮盖 after 伪类元素即可。 一、构建基础样式 构建圆形节点和中间的遮盖元素。 <style>body {background-color: rgb(130, 226, 255);}.circle {top: 16…

持续更新 | 与您分享 Flutter 2024 年路线图

作者 / Michael Thomsen Flutter 是一个拥有繁荣社区的开源项目&#xff0c;我们致力于确保我们的计划公开透明&#xff0c;并将毫无隐瞒地分享从问题到设计规范的所有内容。我们了解到许多开发者对 Flutter 的功能路线图很感兴趣。我们往往会在一年中不断更改并调整这些计划&a…

Clock Verification IP

Clock Verification IP IP 参数及接口 IP 例化界面 相关函数 start_clock //产生时钟 <hierarchy_path>.IF.start_clockstop_clock //停止时钟 <hierarchy_path>.IF.stop_clockset_initial_value //设置时钟初始值为 0 <hierarchy_path>IF.set_initia…

Python和Google Colab进行卫星图像二维小波变化和机器学习

2D 小波分解是图像处理中的一种流行技术,使用不同的滤波器将图像分解为不同的频率分量(“近似”和“细节”系数)。该技术对于各种图像处理任务特别有用,例如压缩、去噪、特征提取和边缘检测。 在本文中,我们将演示如何在 Google Colab 中使用 Python 下载高分辨率样本卫星…

解决火狐浏览器访问地址受限制问题(This address is restricted)

问题如下图&#xff1a; This address is restrictedThis address uses a network port which is normally used for purposes other than Web browsing. Firefox has canceled the request for your protection. 此地址受到限制 此地址使用通常用于 Web 浏览以外的目的的网…

【Pytorch】进阶学习:基于矩阵乘法torch.matmul()实现全连接层

【Pytorch】进阶学习&#xff1a;基于矩阵乘法torch.matmul()实现全连接层 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448…

深入了解304缓存原理:提升网站性能与加载速度

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

微信小程序开发系列(十八)·wxml语法·声明和绑定数据

目录 1. 双大括号写法用法一&#xff1a;展示内容 步骤一&#xff1a;创建一个data对象 步骤二&#xff1a;双大括号写法的使用 步骤三&#xff1a;拓展 2. 双大括号写法用法二&#xff1a;绑定属性值 步骤一&#xff1a;给对象赋一个属性值 步骤二&#xff1a;双大括…

激光打标机红光与激光不重合:原因及解决方案

激光打标机红光和激光不在一个位置的问题可能由多种原因导致。以下是一些可能的原因和解决方法&#xff1a; 1. 激光器光路调整不当&#xff1a;激光器光路调整不当会导致激光束偏移&#xff0c;从而使红光与激光不重合。解决方法是重新调整激光器的光路&#xff0c;确保激光束…

【文档智能】再谈基于Transformer架构的文档智能理解方法论和相关数据集

前言 文档的智能解析与理解成为为知识管理的关键环节。特别是在处理扫描文档时&#xff0c;如何有效地理解和提取表单信息&#xff0c;成为了一个具有挑战性的问题。扫描文档的复杂性&#xff0c;包括其结构的多样性、非文本元素的融合以及手写与印刷内容的混合&#xff0c;都…

C# winform 重启电脑

一、重启电脑指令 windows7系统的启动文件夹为“开始菜单”——“所有程序”里面就有“启动”文件夹&#xff0c;其位置是 “C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” 如果没有&#xff0c;则需要将其中的"administrator…

【正点原子STM32探索者】CubeMX+Keil开发环境搭建

文章目录 一、简单开箱二、资料下载三、环境搭建3.1 安装Keil MDK3.2 激活Keil MDK3.3 安装STM32CubeMX3.4 安装STM32F4系列MCU的Keil支持包 四、GPIO点灯4.1 查阅开发板原理图4.2 创建STM32CubeMX项目4.3 配置系统时钟和引脚功能4.4 生成Keil项目4.5 打开Keil项目4.6 编译Keil…

Java学习笔记NO.18

T1.理工超市 &#xff08;1&#xff09;题目描述 编写一个程序&#xff0c;设计理工超市功能菜单并完成注册和登录功能的实现。显示完菜单后&#xff0c;提示用户输入菜单项序号。当用户输入<注册>和<登录>菜单序号时模拟完成注册和登录功能&#xff0c;最后提示…

使用Python快速提取PPT中的文本内容

直接提取PPT中的文本内容可以方便我们进行进一步处理或分析&#xff0c;也可以直接用于其他文档的编撰。通过使用Python程序&#xff0c;我们可以快速批量提取PPT中的文本内容&#xff0c;从而实现高效的信息收集或对其中的数据进行分析。本文将介绍如何使用Python程序提取Powe…

HTML5基础2

drag 可以把拖放事件拆分成4个步骤 设置元素为可拖放。为了使元素可拖动&#xff0c;把 draggable 属性设置为 true 。 <img draggable"true"> 拖动什么。ondragstart 和 setData() const dragestart (ev)>{ev.dataTransfer.setData(play,ev.target.id)} …

Pytorch线性回归实现(原理)

设置梯度 直接在tensor中设置 requires_gradTrue&#xff0c;每次操作这个数的时候&#xff0c;就会保存每一步的数据。也就是保存了梯度相关的数据。 import torch x torch.ones(2, 2, requires_gradTrue) #初始化参数x并设置requires_gradTrue用来追踪其计算历史 print(x…