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

news/2024/7/10 19:59:25 标签: 开源, spring boot, 后端, javascript, vue.js, java, spring

在这里插入图片描述


目录

  • 一、摘要
    • 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 查询免税种类

java">@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 查询物品档案

java">@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 新增顾客

java">@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 新增消费记录

java">@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 审核免税

java">@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.niftyadmin.cn/n/5417254.html

相关文章

题目 2021: 坐标排序

题目描述: 请将坐标x,y,z依照以下规则排序&#xff1a; x为第一关键字&#xff0c;当x相同时&#xff0c;依照y&#xff08;第二关键字&#xff09;大小来排序&#xff0c;当y相同时&#xff0c;依照z大小来排序&#xff08;第三关键字&#xff09; 给出了若干坐标&#xff0c…

YOLOv5-Openvino-ByteTrack【CPU】

纯检测如下&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注&#xff1a;YOLOv5和YOLOv6代码内容基本一致&#xff01; 全部代码Github&…

Linux上安装torch-geometric(pyg)1.7.2踩坑记录

重点&#xff1a;1.一定要在创建虚拟环境的时候设置好python版本。2.一定要先确定使用1.X还是2.X的pyg库&#xff0c;二者不兼容。3.一定要将cuda、torch、pyg之间的版本对应好。所以&#xff0c;先确定pyg版本&#xff0c;再确定torch和cuda的版本。 结论&#xff1a;如果在u…

HTML 学习笔记(六)文本修饰标签

b标签和strong标签均能加粗文本&#xff0c;但后者语义强化更强&#xff0c;表示该文本比较重要 比如盲人朋友在使用阅读器阅读页面时strong会重读&#xff0c;b标签则没有这个功能 <!DOCTYPE html> <html lang"en"><head><meta charset"…

查看Linux服务器配置

# chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务 # ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连…

PHP端口批量查询工具单文件

查询速度较慢&#xff0c;建议输入20个以内端口&#xff0c;暂未整理端口服务信息所以暂时不显示。 <?php error_reporting(0); //打开报错&#xff1a;去行首双斜杠 header(Content-type:text/html;charset utf-8); //如果乱码删行首双斜杠 header(Cache-Control: no-ca…

JavaScript数组方法常用方法大全

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. push()2. pop()3. unshift()4. shift()5. isArray()6. map()7. filter()8. every()9. some()10. splice()11. slice()12. indexOf()13. includes()14. concat()1…

Linux at任务调度命令行编辑错误

错误&#xff1a; 在at任务调度命令行语句编辑错误时&#xff0c;按backspace进行删除无法进行。 解决方案&#xff1a; 请按Ctrlbackspace进行删除&#xff0c;即可解决。