【开源】基于Vue+SpringBoot的网上药店系统

在这里插入图片描述
项目编号: S 062 ,文末获取源码。 \color{red}{项目编号:S062,文末获取源码。} 项目编号:S062,文末获取源码。


目录

  • 一、摘要
    • 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 药品订单表
      • 3.2.4 药品收藏表
      • 3.2.5 药品留言表
  • 四、系统展示
  • 五、核心代码
    • 5.1 查询药品
    • 5.2 查询药品类型
    • 5.3 药品收藏
    • 5.4 药品加购
    • 5.5 新增药品留言
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的网上药店系统,包含了药品类型模块、药品档案模块、药品收藏模块、药品订单模块、药品资讯模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,网上药店系统基于角色的访问控制,给药店管理员、消费者使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏

源码下载


二、功能模块

网上药店系统的功能性需求主要包含数据中心模块、药品类型模块、药品档案模块、药品订单模块、药品收藏模块和药品资讯模块这六大模块,系统是基于浏览器运行的web管理后端。

在这里插入图片描述

2.1 数据中心模块

数据中心模块包含了网上药店系统的系统基础配置,如登录用户的管理、运营公司组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。

其中登录用户管理模块,由管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。

组织架构,指的是高校的组织架构,该模块适用于管理这些组织架构的部门层级和教师的部门归属情况。

用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。

系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。

公用云盘管理模块,用于统一化维护网上药店系统中的图片,如合同签订文件、合同照片等等。

2.2 药品类型模块

不同的药品有着不同的类型,适合不同的患者使用,所以需要建立药品类型模块,药品类型的数据包括类型名称、类型状态、排序值、备注、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询药品类型数据,用户可以查询管理员发布的药品类型数据。

2.3 药品档案模块

药品是网上药店系统的核心实体,需要建立药品档案模块对管理员发布的药品数据进行管理,药品的字段包括药品名称、药品类型、药品介绍、药品图片、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询药品数据,用户可以查询管理员发布的药品数据。

2.4 药品订单模块

有了药品的数据之后,用户就可以对齐进行购买下单操作,药品订单的数据包括药品、下单状态、下单数量、付款状态、创建人、创建时间、更新人、更新时间,用户可以对药品进行加购、下单和付款操作,管理员可以对用户发起的药品订单进行条件查询。

2.5 药品收藏模块

为了更好的满足用户的个性化需求,网上药店系统支持用户对药品进行收藏,以便于快速的选择药品,药品收藏字段包括药品ID、药品名称、药品介绍、药品图片、收藏人、收藏时间、更新人、更新时间,用户可以对药品进行收藏、取消收藏操作,管理员可以查询用户的药品收藏数据。

2.6 药品资讯模块

为了更好的和用户去做交互,网上药店系统支持留言功能,留言的字段包括留言内容、留言人、留言时间、状态、备注、回复内容、回复时间、回复人,用户可以对药品发起留言,管理员可以对其进行回复,或进行删除留言操作。


三、系统设计

3.1 用例设计

在这里插入图片描述

3.2 数据库设计

3.2.1 角色表

在这里插入图片描述

3.2.2 药品表

在这里插入图片描述

3.2.3 药品订单表

在这里插入图片描述

3.2.4 药品收藏表

在这里插入图片描述

3.2.5 药品留言表

在这里插入图片描述


四、系统展示

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


五、核心代码

5.1 查询药品

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询药品")
public Result<IPage<DishVariety>> getByPage(@ModelAttribute DishVariety dishVariety ,@ModelAttribute PageVo page){
    QueryWrapper<DishVariety> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dishVariety.getTitle())) {
        qw.like("title",dishVariety.getTitle());
    }
    if(!ZwzNullUtils.isNull(dishVariety.getType())) {
        qw.eq("type",dishVariety.getType());
    }
    if(!ZwzNullUtils.isNull(dishVariety.getContent())) {
        qw.like("content",dishVariety.getContent());
    }
    IPage<DishVariety> data = iDishVarietyService.page(PageUtil.initMpPage(page),qw);
    User currUser = securityUtil.getCurrUser();
    for (DishVariety vo : data.getRecords()) {
        QueryWrapper<DishCollect> collQw = new QueryWrapper<>();
        collQw.eq("collect_id",currUser.getId());
        collQw.eq("dish_id",vo.getId());
        vo.setCollectFlag(iDishCollectService.count(collQw));
        QueryWrapper<DishOrder> orderQw = new QueryWrapper<>();
        orderQw.eq("dish_id",vo.getId());
        orderQw.eq("status","已加购");
        orderQw.last("limit 1");
        DishOrder order = iDishOrderService.getOne(orderQw);
        vo.setBuyNumber(order == null ? BigDecimal.ZERO : order.getNumber());
    }
    return new ResultUtil<IPage<DishVariety>>().setData(data);
}

5.2 查询药品类型

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询药品类型")
public Result<IPage<DishType>> getByPage(@ModelAttribute DishType dishType ,@ModelAttribute PageVo page){
    QueryWrapper<DishType> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dishType.getTitle())) {
        qw.like("title",dishType.getTitle());
    }
    if(!ZwzNullUtils.isNull(dishType.getStatus())) {
        qw.eq("status",dishType.getStatus());
    }
    IPage<DishType> data = iDishTypeService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<DishType>>().setData(data);
}

5.3 药品收藏

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增收藏")
public Result<DishCollect> addOne(@RequestParam String id){
    DishVariety dish = iDishVarietyService.getById(id);
    if(dish == null) {
        return ResultUtil.error("药品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<DishCollect> qw = new QueryWrapper<>();
    qw.eq("dish_id",id);
    qw.eq("collect_id",currUser.getId());
    if(iDishCollectService.count(qw) > 0L) {
        return ResultUtil.success();
    }
    DishCollect dishCollect = new DishCollect();
    dishCollect.setDishId(dish.getId());
    dishCollect.setTitle(dish.getTitle());
    dishCollect.setType(dish.getType());
    dishCollect.setContent(dish.getContent());
    dishCollect.setImage(dish.getImage());
    dishCollect.setPrice(dish.getPrice());
    dishCollect.setCollectId(currUser.getId());
    dishCollect.setCollectName(currUser.getNickname());
    dishCollect.setCollectTime(DateUtil.now());
    iDishCollectService.saveOrUpdate(dishCollect);
    return ResultUtil.success();
}

5.4 药品加购

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "加购")
public Result<DishOrder> addOne(@RequestParam String id, @RequestParam BigDecimal number){
    DishVariety dish = iDishVarietyService.getById(id);
    if(dish == null) {
        return ResultUtil.error("药品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<DishOrder> qw = new QueryWrapper<>();
    qw.eq("dish_id",dish.getId());
    qw.eq("status","已加购");
    qw.eq("order_id",currUser.getId());
    qw.last("limit 1");
    DishOrder order = iDishOrderService.getOne(qw);
    if(order != null) {
        order.setNumber(order.getNumber().add(number));
        iDishOrderService.saveOrUpdate(order);
        return ResultUtil.success();
    }
    DishOrder o = new DishOrder();
    o.setDishId(dish.getId());
    o.setTitle(dish.getTitle());
    o.setType(dish.getType());
    o.setContent(dish.getContent());
    o.setImage(dish.getImage());
    o.setPrice(dish.getPrice());
    o.setStatus("已加购");
    o.setNumber(number);
    o.setOrderId(currUser.getId());
    o.setOrderName(currUser.getNickname());
    o.setOrderTime(DateUtil.now());
    iDishOrderService.saveOrUpdate(o);
    return ResultUtil.success();
}

5.5 新增药品留言

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增药品留言")
public Result<Message> insert(Message message){
    User currUser = securityUtil.getCurrUser();
    message.setUserId(currUser.getId());
    message.setUserName(currUser.getNickname());
    message.setUserTime(DateUtil.now());
    message.setReplyContent("");
    message.setReplyName("");
    message.setReplyTime("");
    message.setReplyId("");
    iMessageService.saveOrUpdate(message);
    return new ResultUtil<Message>().setData(message);
}

六、免责说明

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

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一:对爬虫的简单认识

一&#xff1a;爬虫前导知识 1.爬虫引入&#xff1a; ​ 网络爬虫又称为网络蜘蛛&#xff1b;网络蚂蚁&#xff1b;网络机器人等&#xff0c;可以自动高效地从互联网的海量信息中浏览获取到我们感兴趣的信息&#xff0c;在浏览信息的时候需要按照我们制定的规则进行&#xff…

打开率高的开发信主题?邮件的标题怎么写?

如何写高点击率的开发信主题&#xff1f;推荐的邮件标题模板&#xff1f; 一封高效的开发信可以是你争取客户的第一步。但是&#xff0c;要让你的邮件在收件人的收件箱中引起关注并被打开&#xff0c;你需要选择一个吸引人的主题。蜂邮将介绍一些打开率高的开发信主题&#xf…

tensorflow模型的加载及保存,以及在C++端的部署

一、模型保存和加载 参考文章:TensorFlow2.0 —— 模型保存与加载 方法一、 仅保存模型权重(model.save_weights) 有两种保存模型权重的方法,一种是保存.h5形式。model.save_weights("adasd.h5") # 模型权重保存 model.load_weights("adasd.h5") # 模型…

数组划分问题

文章目录 移动零 移动零 class Solution { public: void moveZeroes(vector<int>& nums) {int dest -1;int cur 0;while(cur < nums.size()){if (nums[cur] ! 0){dest;swap(nums[cur], nums[dest]);}cur;} } };

前端路由(front-end routing)和后端路由(back-end routing)的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

C# WebSocket简单使用

文章目录 前言Fleck调试工具初始化 前言 最近接到了一个需求&#xff0c;需要网页实现上位机的功能。那就对数据传输的实时性要求很高。那就只能用WebSocket了。这里简单说一下我的WebSocket如何搭建 Fleck C# WebSocket(Fleck) 客户端:html Winfrom Fleck Github官网 我这里…

【蓝桥杯选拔赛真题74】Scratch九九乘法表 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch九九乘法表 一、题目要求 编程实现 二、案例分析 1、角色分析

Python下划线的五个作用介绍,初学者的妙招

文章目录 前言1、用在 Python 解释器&#xff0c;表示上一次的执行结果2、代码中一个独立的下划线&#xff0c;表示这个变量不重要3、双下划线开头和结尾的方法&#xff0c;是魔术方法4、作为变量名中间的一部分5、作为数字中间的一部分&#xff0c;更易读关于Python技术储备一…

我的NPI项目之Android 安全系列 -- 天地混沌初开

最近在因为有新项目启动&#xff0c;目前处在kickoff之后research阶段&#xff0c;预计在1st March能拿到到Pre-EVT&#xff1b; 在此之前最主要的就是需求分析/可行性分析/风险评估。 而对于软件来说&#xff0c;作为传说中的software project leader&#xff0c;要做的最重要…

个人测试面试问题总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f4d1;设计软件测试用例的方…

云数据库详细介绍

为您的项目选择正确的数据库是一项复杂的任务。许多数据库选项都适合不同的用例&#xff0c;很快就会导致决策疲劳。 我们希望这份备忘单提供高级指导&#xff0c;以找到符合您项目需求的正确服务并避免潜在的陷阱。 注意&#xff1a;Google 关于其数据库用例的文档有限。尽管…

CleanMyMac X2024最新版本mac优化软件好用吗?

为了维护mac系统健康&#xff0c;优化系统功能&#xff0c;我们需要定期给电脑进行清理。那么作为mac清理软件CleanMyMac X软件具备哪些独特性和实用性呢&#xff1f;今天就给大家说明一下。 CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 1、 简…

腾讯云轻量应用服务器挂载对象存储详细说明

腾讯云轻量对象存储LighthouseCOS是腾讯云专为中小企业开发者打造的轻量级数据存储服务&#xff0c;适用于云端网站、小程序、课堂演示、云盘/图床等场景下的数据存储和处理任务。腾讯云百科txybk.com详细介绍腾讯云轻量对象存储使用、开通和收费价格说明&#xff1a; 轻量对象…

【收藏!】Mysql 自定义目录安装

1、Mysql版本我这里选择的是8.0&#xff0c;下边有下载链接&#xff0c;其他的版本也行&#xff0c;操作都是一样的 Mysql8.0下载链接&#xff1a;MySQL :: Download MySQL Installer (Archived Versions) &#xff0c;MySQL :: Download MySQL Installer 2、下载完之后我们双击…

项目实战之RabbitMQ重试机制进行消息补偿通知

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 文章目录 &#x1f31f;架构图&#x…

C++中单引号‘‘和双引号““的区别

操作系统&#xff1a;Windows 10 IDE&#xff1a;CLion 单引号&#xff1a;表示一个字符&#xff0c;例如 a 双引号""&#xff1a;表示一个字符串&#xff0c;例如 "a" 在C中&#xff0c;使用双引号可以方便地创建字符串&#xff0c;而使用单引号可以方便…

计算机组成原理-数据寻址-(相对寻址 基址寻址 变址寻址 )

文章目录 指令寻址vs数据寻址总览偏移寻址基址寻址基址寻址的作用变址寻址变址寻址的作用基址&变址复合寻址相对寻址相对寻址的作用 总结硬件如何实现数的比较 指令寻址vs数据寻址 总览 偏移寻址 变址寄存器&#xff1a;IX 基址寄存器&#xff1a;BR 基址寻址 没有基址…

springboot+vue服装原材料库存进销存管理系统7t14x

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

UE4/UE5 材质实现带框环形进度条

UE4/UE5 材质实现带框环形进度条 此处使用版本&#xff1a;UE4.27 原理&#xff1a;大圆减小圆可以得到圆环&#xff0c;大圆环减小圆环&#xff0c;可以得到圆环外围线框 实现效果&#xff1a; 实现&#xff08;为了给大家放进一张面前能看的图&#xff0c;我费劲了心思&…

C# OpenCvSharp DNN 深度神经网络下的风格迁移模型

目录 介绍 效果 项目 代码 下载 C# OpenCvSharp DNN 深度神经网络下的风格迁移模型 介绍 深度神经网络下的风格迁移模型&#xff0c;适用于OpenCv、EmguCv。 斯坦福大学李飞飞团队的风格迁移模型是一种基于深度学习的图像处理技术&#xff0c;可以将一张图像的风格转移…