基于SpringBoot的在线护肤品销售与库存管理系统 - 源码深度解析

JavaJavaScriptHTMLCSSSpringboot框架SSM框架MavenMySQL
2026-02-0815 浏览

文章摘要

本项目是一款基于SpringBoot框架构建的在线护肤品销售与库存一体化管理解决方案,专为中小型护肤品零售商或品牌商设计。其核心业务价值在于解决了传统线下管理模式下,销售数据与库存信息脱节、人工操作易出错、经营状况无法实时掌握等核心痛点。系统通过将销售前端与库存后台深度整合,实现了商品信息、销售流水...

在现代零售业数字化转型的浪潮中,护肤品行业面临着独特的挑战:商品SKU繁多、保质期敏感、库存周转要求高。传统的手工记账或单机软件管理方式,容易导致销售数据与库存信息脱节,出现超卖缺货等经营风险。针对这一痛点,我们设计并实现了一套企业级护肤品电商管理平台,通过SpringBoot技术栈构建了完整的在线销售与库存一体化解决方案。

系统架构与技术栈

该平台采用经典的三层架构设计,后端基于SpringBoot 2.x框架,充分利用其自动配置和起步依赖的特性快速搭建项目骨架。数据持久层采用Spring Data JPA进行对象关系映射,简化了数据库操作。前端展示层使用JSP模板引擎结合HTML5、CSS3和JavaScript构建响应式用户界面。

核心技术栈配置:

# 应用服务器配置
server:
  port: 8080
  servlet:
    context-path: /boot_hfp_shop
    session:
      timeout: -1

# 数据库连接池配置
spring:
  datasource:
    url: jdbc:mysql://www.csbishe.cn/boot_hfp_shop?useSSL=false&serverTimezone=Asia/Shanghai
    username: boot_hfp_shop
    password: boot_hfp_shop
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: org.apache.commons.dbcp2.BasicDataSource
    dbcp2:
      max-wait-millis: 10000
      min-idle: 5
      initial-size: 5
      validation-query: SELECT 1 From dual

# JPA配置
  jpa:
    show-sql: true

系统通过Maven进行依赖管理,整合了MySQL数据库、DBCP2连接池、文件上传等功能模块。这种技术选型确保了系统的高性能、可扩展性和易维护性。

数据库设计亮点分析

商品表(goods)的精细化设计

商品表作为系统的核心数据载体,其设计充分考虑了护肤品行业的特殊需求:

CREATE TABLE `goods` (
  `goods_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `goods_type_id` int(11) DEFAULT 0 COMMENT '商品类型ID',
  `goods_no` varchar(50) DEFAULT NULL COMMENT '商品编号',
  `goods_name` varchar(225) DEFAULT NULL COMMENT '商品名称',
  `goods_pic` varchar(225) DEFAULT NULL COMMENT '商品图片',
  `goods_publisher` varchar(225) DEFAULT NULL COMMENT '商品发布者',
  `goods_price` double DEFAULT 0 COMMENT '商品价格',
  `goods_discount` double DEFAULT NULL COMMENT '商品折扣',
  `goods_date` varchar(50) DEFAULT NULL COMMENT '商品日期',
  `goods_desc` text DEFAULT NULL COMMENT '商品描述',
  PRIMARY KEY (`goods_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COMMENT='商品表'

设计亮点分析:

  1. 扩展性设计:通过goods_type_id字段实现商品分类管理,支持护肤品按功效、品牌、肤质等多维度分类
  2. 业务完整性:包含goods_pricegoods_discount字段,支持灵活的促销策略
  3. 富文本支持goods_desc使用TEXT类型,满足护肤品详细成分、用法说明等长文本需求
  4. 多媒体支持goods_pic字段存储商品图片路径,支持多图展示

购物车表(gouwuche)的会话管理设计

购物车表设计体现了电商系统的实时性要求:

CREATE TABLE `gouwuche` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `goods_id` int(11) DEFAULT NULL COMMENT '商品ID',
  `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
  `time` date DEFAULT NULL COMMENT '添加时间',
  `count` int(11) NOT NULL DEFAULT 1 COMMENT '商品数量',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=162 DEFAULT CHARSET=utf8 COMMENT='购物车表'

关键技术点:

  • 用户关联:通过user_id实现多用户并发购物车管理
  • 数量控制count字段支持商品数量调整,默认值为1
  • 时间追踪time字段记录添加时间,用于清理过期购物车项
  • 性能优化:合理的索引设计支持快速查询用户购物车内容

订单表(dingdan)的事务一致性设计

订单表确保了销售业务的原子性和一致性:

CREATE TABLE `dingdan` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `goods_id` int(11) DEFAULT NULL COMMENT '商品ID',
  `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
  `time` date DEFAULT NULL COMMENT '订单时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COMMENT='订单表'

订单管理界面

核心功能实现深度解析

用户购物流程实现

系统实现了完整的电商购物流程,从商品浏览到订单生成:

// 购物车业务逻辑实现
@Service
public class ShoppingCartService {
    
    @Autowired
    private GouwucheRepository gouwucheRepository;
    
    @Autowired
    private GoodsRepository goodsRepository;
    
    @Transactional
    public void addToCart(Integer goodsId, Integer userId, Integer count) {
        // 检查商品库存
        Goods goods = goodsRepository.findById(goodsId)
            .orElseThrow(() -> new RuntimeException("商品不存在"));
        
        // 创建或更新购物车项
        Gouwuche cartItem = gouwucheRepository
            .findByGoodsIdAndUserId(goodsId, userId)
            .orElse(new Gouwuche());
        
        if (cartItem.getId() == null) {
            cartItem.setGoodsId(goodsId);
            cartItem.setUserId(userId);
            cartItem.setTime(new Date());
        }
        
        cartItem.setCount(cartItem.getCount() + count);
        gouwucheRepository.save(cartItem);
    }
}

加入购物车功能

库存管理的关键技术

库存管理是系统的核心难点,通过数据库事务确保数据一致性:

@Service
public class InventoryService {
    
    @Autowired
    private GoodsRepository goodsRepository;
    
    @Autowired
    private DingdanRepository dingdanRepository;
    
    @Transactional
    public void processOrder(Integer goodsId, Integer userId, Integer quantity) {
        // 悲观锁锁定商品记录
        Goods goods = goodsRepository.findWithLockingById(goodsId);
        
        if (goods.getStock() < quantity) {
            throw new RuntimeException("库存不足");
        }
        
        // 扣减库存
        goods.setStock(goods.getStock() - quantity);
        goodsRepository.save(goods);
        
        // 生成订单
        Dingdan order = new Dingdan();
        order.setGoodsId(goodsId);
        order.setUserId(userId);
        order.setTime(new Date());
        order.setQuantity(quantity);
        dingdanRepository.save(order);
    }
}

管理员商品管理功能

管理员可以通过后台系统全面管理商品信息:

@Controller
@RequestMapping("/admin/goods")
public class GoodsAdminController {
    
    @Autowired
    private GoodsService goodsService;
    
    @PostMapping("/update")
    public String updateGoods(@Valid Goods goods, 
                             @RequestParam("file") MultipartFile file) {
        try {
            // 处理图片上传
            if (!file.isEmpty()) {
                String fileName = fileStorageService.storeFile(file);
                goods.setGoodsPic(fileName);
            }
            
            goodsService.saveOrUpdate(goods);
            return "redirect:/admin/goods/list";
        } catch (Exception e) {
            // 异常处理逻辑
            return "admin/goods-edit";
        }
    }
    
    @GetMapping("/list")
    public String goodsList(@RequestParam(defaultValue = "0") int page,
                           Model model) {
        Page<Goods> goodsPage = goodsService.findAll(PageRequest.of(page, 10));
        model.addAttribute("goodsPage", goodsPage);
        return "admin/goods-list";
    }
}

商品管理界面

资讯管理模块实现

系统内置了资讯发布功能,用于营销和客户沟通:

@Entity
@Table(name = "zixun")
public class Zixun {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    
    @Column(name = "title", length = 50)
    private String title;
    
    @Column(name = "content", length = 50)
    private String content;
    
    @Column(name = "time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date time;
    
    // Getter和Setter方法
}

@Repository
public interface ZixunRepository extends JpaRepository<Zixun, Integer> {
    List<Zixun> findByOrderByTimeDesc(Pageable pageable);
}

资讯管理界面

实体模型设计

系统采用面向对象的设计思想,构建了完整的实体模型体系:

// 基础实体类设计
public abstract class BaseDomain implements Serializable {
    private static final long serialVersionUID = -3308831596689250063L;
    
    private int start;
    private int limit = 20;
    private int end;
    private String sort;
    private String order;
    private String dir;
    
    // 分页和排序相关的方法
    public int getStart() {
        return start;
    }
    
    public void setStart(int start) {
        this.start = start;
    }
    
    public int getEnd() {
        return end;
    }
    
    public void setEnd(int end) {
        this.end = end;
    }
    
    // 其他getter和setter方法
}

这种设计提供了统一的分页、排序支持,确保了数据访问层的一致性。

功能展望与优化方向

基于当前系统架构,以下是几个值得深入优化的方向:

1. 引入Redis缓存层提升性能

现状分析:商品信息、用户会话等高频访问数据直接查询数据库,存在性能瓶颈。

优化方案

@Service
public class GoodsServiceWithCache {
    
    @Autowired
    private RedisTemplate<String, Goods> redisTemplate;
    
    @Cacheable(value = "goods", key = "#goodsId")
    public Goods findById(Integer goodsId) {
        // 先查缓存,缓存不存在再查数据库
        String cacheKey = "goods:" + goodsId;
        Goods goods = redisTemplate.opsForValue().get(cacheKey);
        
        if (goods == null) {
            goods = goodsRepository.findById(goodsId).orElse(null);
            if (goods != null) {
                redisTemplate.opsForValue().set(cacheKey, goods, 30, TimeUnit.MINUTES);
            }
        }
        return goods;
    }
}

2. 微服务架构改造

现状分析:单体架构在业务扩展时存在部署和扩展困难。

改造思路:将系统拆分为用户服务、商品服务、订单服务、库存服务等微服务,通过Spring Cloud实现服务治理。

3. 增加Elasticsearch商品搜索

实现方案:集成Elasticsearch提供强大的商品搜索功能,支持按成分、功效、品牌等多维度搜索。

4. 消息队列异步处理订单

技术选型:使用RabbitMQ或Kafka处理高并发订单,提高系统吞吐量。

@Component
public class OrderMessageProducer {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void sendOrderMessage(OrderMessage orderMessage) {
        rabbitTemplate.convertAndSend("order.exchange", 
                                   "order.routing.key", 
                                   orderMessage);
    }
}

5. 移动端适配与PWA支持

技术方案:开发响应式前端,支持PWA(渐进式Web应用),提供接近原生应用的移动端体验。

总结

该护肤品电商管理平台通过SpringBoot技术栈实现了完整的在线销售与库存管理功能。系统架构设计合理,数据库模型充分考虑业务需求,核心功能实现稳定可靠。特别是在库存管理方面,通过数据库事务确保了数据的一致性,避免了超卖等业务风险。

系统的扩展性设计为后续功能升级奠定了良好基础。通过引入缓存、微服务改造、搜索引擎集成等优化措施,可以进一步提升系统性能和用户体验。这种架构模式不仅适用于护肤品行业,也可以为其他零售行业的数字化转型提供参考价值。

用户订单查看界面

平台的成功实践证明了SpringBoot在中小型电商系统开发中的技术优势,为同类项目的技术选型提供了有价值的参考案例。

本文关键词
SpringBoot护肤品销售库存管理系统源码解析数据库设计

上下篇

上一篇
没有更多文章
下一篇
没有更多文章