技术栈

  • 后端框架:Spring Boot 2.7.x(简化配置,快速开发)
  • 前端技术:Thymeleaf + Bootstrap 5(响应式布局),或 Vue.js/React(可选)
  • 数据库:MySQL 8.0(关系型)或 MongoDB(可选用于药品分类)
  • 安全框架:Spring Security(权限控制)
  • 工具库:Lombok(简化代码),Hibernate Validator(数据校验)
  • 构建工具:Maven/Gradle

核心功能模块设计

药品管理
  • 药品信息CRUD:支持药品名称、编码、分类、价格、库存预警值等字段
  • 批次管理:记录药品生产批次号、有效期(自动预警临期药品)
  • 多条件查询:支持按分类、价格区间、库存状态筛选
库存管理
  • 入库/出库记录:关联采购单和销售单,自动更新库存
  • 库存预警:库存低于阈值时触发通知(邮件或站内消息)
  • 盘点功能:生成差异报告,支持手动调整库存
销售管理
  • 收银台功能:药品扫码录入,支持会员折扣计算
  • 销售统计:按日/月/季度生成销售额、毛利报表
  • 退换货处理:记录原因并关联原始订单
会员管理
  • 会员等级体系:不同等级享受差异化折扣
  • 积分系统:消费积分兑换规则配置
  • 健康档案:记录客户购买药品历史(需隐私保护)
采购管理
  • 供应商管理:评估供应商交货及时率
  • 采购订单:支持生成采购计划单(基于库存预警)
  • 药品比价:同一药品不同供应商的历史报价对比
系统管理
  • RBAC权限控制:基于角色的菜单和按钮级权限
  • 操作日志:记录关键操作的IP、时间、操作人
  • 数据备份:定时任务自动备份数据库

数据库设计(关键表)

药品表(medicine)
CREATE TABLE `medicine` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `code` VARCHAR(32) UNIQUE COMMENT '药品编码',
  `name` VARCHAR(100) NOT NULL,
  `spec` VARCHAR(50) COMMENT '规格',
  `category_id` INT COMMENT '分类ID',
  `price` DECIMAL(10,2) UNSIGNED,
  `stock` INT DEFAULT 0,
  `warning_stock` INT COMMENT '库存预警值',
  `product_date` DATE COMMENT '生产日期',
  `expire_date` DATE COMMENT '有效期'
);

库存操作记录表(inventory_log)
CREATE TABLE `inventory_log` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `medicine_id` BIGINT NOT NULL,
  `quantity` INT COMMENT '正数入库/负数出库',
  `type` TINYINT COMMENT '1采购入库 2销售出库 3盘点调整',
  `reference_id` BIGINT COMMENT '关联单据ID',
  `operator_id` BIGINT,
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
);

订单表(order)
CREATE TABLE `order` (
  `id` VARCHAR(32) PRIMARY KEY COMMENT '订单号',
  `member_id` BIGINT COMMENT '会员ID',
  `total_amount` DECIMAL(12,2),
  `discount_amount` DECIMAL(10,2) DEFAULT 0,
  `payment_type` TINYINT COMMENT '1现金 2支付宝 3微信',
  `status` TINYINT DEFAULT 1 COMMENT '1待支付 2已完成 3已退款',
  `cashier_id` BIGINT COMMENT '收银员ID',
  `create_time` DATETIME
);

系统测试设计

单元测试(示例)
@Test
public void testStockWarning() {
    Medicine medicine = new Medicine()
        .setStock(5)
        .setWarningStock(10);
    
    assertTrue(medicineService.checkStockWarning(medicine));
}

API测试用例(Postman)
  • 采购入库:POST /api/inventory/purchase
    • 测试场景:批量导入20种药品库存
    • 验证点:库存总量变化,操作日志记录完整性
压力测试(JMeter)
  • 模拟200并发用户连续执行:
    1. 药品查询API
    2. 收银结算流程
  • 监控指标:TPS > 50,错误率 < 0.1%

源码结构建议

src/
├── main/
│   ├── java/
│   │   └── com/pharmacy/
│   │       ├── config/       # 安全配置/Swagger配置
│   │       ├── controller/   # 按模块分包
│   │       ├── service/      # 业务逻辑层
│   │       ├── repository/   # JPA接口
│   │       └── entity/       # 数据库实体
│   └── resources/
│       ├── static/           # JS/CSS
│       ├── templates/        # Thymeleaf页面
│       └── application.yml   # 多环境配置
└── test/                     # 单元测试/集成测试

扩展性设计

  • OpenAPI支持:集成Swagger UI自动生成文档
  • 数据导出:EasyExcel实现销售报表导出
  • 短信通知:阿里云短信服务集成库存预警
  • 分布式部署:Redis缓存热点药品数据

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐