【Java毕设】智慧药店药品信息管理系统 SpringBoot+Vue框架 计算机毕业设计项目 Idea+Navicat+MySQL安装 附源码+文档+讲解

53 阅读3分钟

一、个人简介

💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

开发语言:Java+Python 数据库:MySQL 系统架构:B/S 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django 前端:Vue+HTML+CSS+JavaScript+jQuery

智慧药店药品信息管理系统是一个基于Spring Boot和Vue框架开发的现代化药店管理解决方案。该系统采用前后端分离的架构设计,后端使用Spring Boot整合Spring、SpringMVC和MyBatis框架构建RESTful API服务,前端采用Vue.js结合ElementUI组件库开发用户界面,数据存储基于MySQL关系型数据库。系统涵盖了药店日常运营的核心业务流程,包括用户权限管理、药品分类体系建立、药品基础信息维护、库存入出库操作、采购流程管控、定期盘点统计以及订单全生命周期管理等功能模块。通过数字化手段替代传统的手工记录方式,系统能够实现药品信息的标准化录入、库存数据的实时更新、销售流程的规范化操作,有效降低人工操作错误率,提升药店运营效率。系统界面简洁直观,操作流程符合药店工作人员的使用习惯,支持多用户角色权限分配,确保数据安全性和操作规范性,为中小型药店提供了一套完整的信息化管理工具。

三、视频解说

智慧药店药品信息管理系统

四、部分功能展示

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

五、部分代码展示

import org.apache.spark.sql.SparkSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Date;
import java.math.BigDecimal;

@Service
public class PharmacyManagementService {
    
    private SparkSession spark = SparkSession.builder().appName("PharmacyDataAnalysis").master("local[*]").getOrCreate();
    
    @Autowired
    private DrugMapper drugMapper;
    @Autowired
    private InventoryMapper inventoryMapper;
    @Autowired
    private OrderMapper orderMapper;
    
    @Transactional
    public Result addDrugInfo(Drug drug) {
        if (drug.getDrugName() == null || drug.getDrugName().trim().isEmpty()) {
            return Result.error("药品名称不能为空");
        }
        if (drug.getPrice() == null || drug.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
            return Result.error("药品价格必须大于0");
        }
        Drug existingDrug = drugMapper.findByNameAndSpec(drug.getDrugName(), drug.getSpecification());
        if (existingDrug != null) {
            return Result.error("相同名称和规格的药品已存在");
        }
        drug.setCreateTime(new Date());
        drug.setStatus(1);
        drug.setDrugCode("DRUG" + System.currentTimeMillis());
        if (drug.getExpiryDate() != null && drug.getExpiryDate().before(new Date())) {
            return Result.error("药品有效期不能早于当前日期");
        }
        drugMapper.insert(drug);
        Inventory inventory = new Inventory();
        inventory.setDrugId(drug.getId());
        inventory.setCurrentStock(0);
        inventory.setMinStock(drug.getMinStock() != null ? drug.getMinStock() : 10);
        inventory.setMaxStock(drug.getMaxStock() != null ? drug.getMaxStock() : 1000);
        inventory.setLastUpdateTime(new Date());
        inventoryMapper.insert(inventory);
        return Result.success("药品信息添加成功", drug);
    }
    
    @Transactional
    public Result processInventoryIn(InventoryIn inventoryIn) {
        if (inventoryIn.getDrugId() == null || inventoryIn.getQuantity() <= 0) {
            return Result.error("药品ID和入库数量必须有效");
        }
        Drug drug = drugMapper.findById(inventoryIn.getDrugId());
        if (drug == null) {
            return Result.error("药品信息不存在");
        }
        if (inventoryIn.getBatchNumber() == null || inventoryIn.getBatchNumber().trim().isEmpty()) {
            return Result.error("批次号不能为空");
        }
        InventoryIn existingBatch = inventoryMapper.findByDrugIdAndBatch(inventoryIn.getDrugId(), inventoryIn.getBatchNumber());
        if (existingBatch != null) {
            return Result.error("相同批次号的药品已存在,请使用不同的批次号");
        }
        if (inventoryIn.getExpiryDate() == null || inventoryIn.getExpiryDate().before(new Date())) {
            return Result.error("药品有效期不能为空且不能早于当前日期");
        }
        inventoryIn.setInTime(new Date());
        inventoryIn.setStatus(1);
        inventoryIn.setRemainingQuantity(inventoryIn.getQuantity());
        inventoryIn.setTotalAmount(inventoryIn.getUnitPrice().multiply(new BigDecimal(inventoryIn.getQuantity())));
        inventoryMapper.insertInventoryIn(inventoryIn);
        Inventory inventory = inventoryMapper.findByDrugId(inventoryIn.getDrugId());
        inventory.setCurrentStock(inventory.getCurrentStock() + inventoryIn.getQuantity());
        inventory.setLastUpdateTime(new Date());
        inventoryMapper.updateInventory(inventory);
        if (inventory.getCurrentStock() > inventory.getMaxStock()) {
            return Result.warning("入库成功,但当前库存已超过最大库存预警值");
        }
        return Result.success("药品入库操作完成", inventoryIn);
    }
    
    @Transactional
    public Result processOrderSale(Order order) {
        if (order.getOrderItems() == null || order.getOrderItems().isEmpty()) {
            return Result.error("订单商品列表不能为空");
        }
        BigDecimal totalAmount = BigDecimal.ZERO;
        for (OrderItem item : order.getOrderItems()) {
            if (item.getDrugId() == null || item.getQuantity() <= 0) {
                return Result.error("订单中存在无效的药品信息或数量");
            }
            Drug drug = drugMapper.findById(item.getDrugId());
            if (drug == null) {
                return Result.error("药品ID为" + item.getDrugId() + "的商品不存在");
            }
            Inventory inventory = inventoryMapper.findByDrugId(item.getDrugId());
            if (inventory.getCurrentStock() < item.getQuantity()) {
                return Result.error("药品'" + drug.getDrugName() + "'库存不足,当前库存:" + inventory.getCurrentStock());
            }
            List<InventoryIn> availableBatches = inventoryMapper.findAvailableBatchesByDrugId(item.getDrugId());
            int remainingQuantity = item.getQuantity();
            for (InventoryIn batch : availableBatches) {
                if (remainingQuantity <= 0) break;
                if (batch.getExpiryDate().before(new Date())) {
                    continue;
                }
                int deductQuantity = Math.min(remainingQuantity, batch.getRemainingQuantity());
                batch.setRemainingQuantity(batch.getRemainingQuantity() - deductQuantity);
                inventoryMapper.updateInventoryIn(batch);
                remainingQuantity -= deductQuantity;
            }
            if (remainingQuantity > 0) {
                return Result.error("药品'" + drug.getDrugName() + "'可用库存不足");
            }
            item.setUnitPrice(drug.getPrice());
            item.setSubtotal(drug.getPrice().multiply(new BigDecimal(item.getQuantity())));
            totalAmount = totalAmount.add(item.getSubtotal());
            inventory.setCurrentStock(inventory.getCurrentStock() - item.getQuantity());
            inventory.setLastUpdateTime(new Date());
            inventoryMapper.updateInventory(inventory);
        }
        order.setOrderNumber("ORDER" + System.currentTimeMillis());
        order.setOrderTime(new Date());
        order.setTotalAmount(totalAmount);
        order.setOrderStatus(1);
        orderMapper.insertOrder(order);
        for (OrderItem item : order.getOrderItems()) {
            item.setOrderId(order.getId());
            orderMapper.insertOrderItem(item);
        }
        return Result.success("订单处理完成", order);
    }
}

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊