基于SSM框架的电器商城在线购物与库存管理系统 - 源码深度解析

JavaJavaScriptMavenHTMLCSSSSM框架MySQL
2026-03-243 浏览

文章摘要

本项目是一款基于SSM(Spring+SpringMVC+MyBatis)框架整合开发的综合性电器商城管理系统,旨在为电器销售企业提供一套集前端在线购物与后端库存管理于一体的高效运营解决方案。其核心业务价值在于打通了从消费者浏览下单到商家内部库存管控的全链路,有效解决了传统电器销售中线上交易与线下库...

在当今电子商务蓬勃发展的时代,电器销售行业面临着线上交易与线下库存管理协同的严峻挑战。传统模式下,消费者在网上下单后,库存数据无法实时同步,极易导致超卖或订单延迟发货等问题,严重影响用户体验和商家信誉。针对这一行业痛点,一套整合了在线购物与库存管理的综合性解决方案应运而生。

该系统采用成熟的SSM(Spring + SpringMVC + MyBatis)技术栈构建,为中小型电器零售商提供了从商品展示、用户下单到库存监控、订单处理的全流程数字化管理能力。通过业务流程的深度整合,系统实现了订单流与库存流的实时同步,有效提升了企业的运营效率和市场竞争力。

技术架构深度解析

系统采用经典的三层架构设计,确保了代码的高内聚和低耦合特性。Spring框架作为核心控制容器,负责管理所有Bean的生命周期和依赖注入。其声明式事务管理功能为购物车下单、库存扣减等关键业务操作提供了原子性保障。

<!-- Spring事务管理配置 -->
<bean id="transactionManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="submitOrder" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

Web层由SpringMVC框架承担,通过精心设计的控制器处理前端请求。以下是商品查询功能的控制器实现:

@Controller
@RequestMapping("/product")
public class ProductController {
    
    @Autowired
    private ProductService productService;
    
    @RequestMapping("/list")
    public String getProductList(@RequestParam(value="categoryId", required=false) Integer categoryId,
                               Model model,
                               @RequestParam(value="page", defaultValue="1") int page) {
        PageHelper.startPage(page, 12);
        List<Product> productList = productService.getProductsByCategory(categoryId);
        PageInfo<Product> pageInfo = new PageInfo<>(productList);
        
        model.addAttribute("pageInfo", pageInfo);
        model.addAttribute("categoryId", categoryId);
        return "product/list";
    }
    
    @RequestMapping("/detail/{productId}")
    public String getProductDetail(@PathVariable("productId") Integer productId, Model model) {
        Product product = productService.getProductById(productId);
        model.addAttribute("product", product);
        return "product/detail";
    }
}

数据持久层采用MyBatis框架,通过XML映射文件实现对象关系映射。以下是商品库存更新的SQL映射配置:

<!-- 商品库存更新映射 -->
<update id="updateProductStock" parameterType="map">
    UPDATE product 
    SET stock_quantity = stock_quantity - #{quantity},
        update_time = NOW()
    WHERE product_id = #{productId} 
    AND stock_quantity >= #{quantity}
</update>

<!-- 复杂商品查询映射 -->
<select id="selectProductsWithConditions" parameterType="map" resultMap="productResultMap">
    SELECT p.*, c.category_name 
    FROM product p 
    LEFT JOIN category c ON p.category_id = c.category_id
    WHERE 1=1
    <if test="categoryId != null">
        AND p.category_id = #{categoryId}
    </if>
    <if test="keyword != null and keyword != ''">
        AND (p.product_name LIKE CONCAT('%', #{keyword}, '%') 
             OR p.description LIKE CONCAT('%', #{keyword}, '%'))
    </if>
    <if test="minPrice != null">
        AND p.price >= #{minPrice}
    </if>
    <if test="maxPrice != null">
        AND p.price &lt;= #{maxPrice}
    </if>
    ORDER BY p.create_time DESC
</select>

数据库设计精要

系统数据库包含12个核心表,围绕用户、商品、订单、库存等关键实体构建。以下重点分析几个核心表的设计:

商品表(product)采用层次化分类设计,支持电器商品的精细化分类管理:

CREATE TABLE product (
    product_id INT PRIMARY KEY AUTO_INCREMENT,
    product_name VARCHAR(200) NOT NULL,
    category_id INT NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    stock_quantity INT DEFAULT 0,
    description TEXT,
    image_url VARCHAR(500),
    status TINYINT DEFAULT 1 COMMENT '1-上架 0-下架',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (category_id) REFERENCES category(category_id),
    INDEX idx_category_status (category_id, status),
    INDEX idx_price (price),
    INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

订单表(order)采用主从表结构设计,有效支持复杂的订单业务逻辑:

CREATE TABLE order (
    order_id VARCHAR(32) PRIMARY KEY,
    user_id INT NOT NULL,
    total_amount DECIMAL(10,2) NOT NULL,
    status TINYINT NOT NULL COMMENT '1-待付款 2-已付款 3-配送中 4-已完成 5-已取消',
    payment_method TINYINT COMMENT '1-支付宝 2-微信 3-银行卡',
    shipping_address TEXT,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES user(user_id),
    INDEX idx_user_status (user_id, status),
    INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE order_item (
    item_id INT PRIMARY KEY AUTO_INCREMENT,
    order_id VARCHAR(32) NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    unit_price DECIMAL(10,2) NOT NULL,
    subtotal DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (order_id) REFERENCES order(order_id),
    FOREIGN KEY (product_id) REFERENCES product(product_id),
    INDEX idx_order_id (order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

库存预警表(stock_alert)实现了智能库存监控机制:

CREATE TABLE stock_alert (
    alert_id INT PRIMARY KEY AUTO_INCREMENT,
    product_id INT NOT NULL,
    current_stock INT NOT NULL,
    threshold INT NOT NULL COMMENT '库存阈值',
    alert_level TINYINT COMMENT '1-提醒 2-警告 3-严重',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    is_handled TINYINT DEFAULT 0 COMMENT '0-未处理 1-已处理',
    FOREIGN KEY (product_id) REFERENCES product(product_id),
    INDEX idx_product_handled (product_id, is_handled),
    INDEX idx_alert_level (alert_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

核心功能实现深度剖析

  1. 智能商品展示与搜索系统

商品展示模块采用响应式设计,支持多维度筛选和分页展示。前端通过AJAX技术与后端交互,实现无刷新页面更新。

// 商品搜索与筛选功能
function searchProducts() {
    var keyword = $('#searchKeyword').val();
    var categoryId = $('#categoryFilter').val();
    var minPrice = $('#minPrice').val();
    var maxPrice = $('#maxPrice').val();
    
    $.ajax({
        url: '/product/search',
        type: 'GET',
        data: {
            keyword: keyword,
            categoryId: categoryId,
            minPrice: minPrice,
            maxPrice: maxPrice
        },
        success: function(data) {
            renderProductList(data.products);
            renderPagination(data.pageInfo);
        }
    });
}

// 商品详情页动态交互
function loadProductDetail(productId) {
    $.get('/product/detail/' + productId, function(data) {
        $('#productName').text(data.productName);
        $('#productPrice').text('¥' + data.price);
        $('#productStock').text('库存: ' + data.stockQuantity);
        $('#productDescription').html(data.description);
        
        // 库存预警显示
        if (data.stockQuantity < 10) {
            $('#stockAlert').show().text('库存紧张,欲购从速!');
        }
    });
}

商品浏览页面

  1. 购物车与订单处理流程

购物车模块采用Session存储临时数据,支持商品增删改查操作。订单提交时系统会执行库存校验,确保数据一致性。

@Service
@Transactional
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private OrderMapper orderMapper;
    
    @Autowired
    private ProductMapper productMapper;
    
    @Override
    public OrderResult submitOrder(OrderSubmitRequest request) {
        // 1. 验证库存
        for (OrderItem item : request.getItems()) {
            Product product = productMapper.selectById(item.getProductId());
            if (product.getStockQuantity() < item.getQuantity()) {
                throw new BusinessException("商品[" + product.getProductName() + "]库存不足");
            }
        }
        
        // 2. 生成订单号
        String orderId = generateOrderId();
        
        // 3. 创建订单主表
        Order order = new Order();
        order.setOrderId(orderId);
        order.setUserId(request.getUserId());
        order.setTotalAmount(calculateTotalAmount(request.getItems()));
        order.setStatus(OrderStatus.PENDING_PAYMENT);
        orderMapper.insertOrder(order);
        
        // 4. 创建订单明细并扣减库存
        for (OrderItem item : request.getItems()) {
            item.setOrderId(orderId);
            orderMapper.insertOrderItem(item);
            
            // 扣减库存
            Map<String, Object> params = new HashMap<>();
            params.put("productId", item.getProductId());
            params.put("quantity", item.getQuantity());
            int affectedRows = productMapper.updateStock(params);
            if (affectedRows == 0) {
                throw new BusinessException("库存更新失败,商品可能已售罄");
            }
        }
        
        return new OrderResult(orderId, "订单提交成功");
    }
    
    private String generateOrderId() {
        return "ORD" + System.currentTimeMillis() + 
               String.format("%04d", new Random().nextInt(10000));
    }
}

购物车页面

  1. 库存预警与智能补货系统

系统实时监控库存水平,当库存低于预设阈值时自动触发预警机制,并通过消息队列通知管理人员。

@Component
public class StockMonitorScheduler {
    
    @Autowired
    private ProductService productService;
    
    @Autowired
    private StockAlertService stockAlertService;
    
    @Autowired
    private EmailService emailService;
    
    @Scheduled(fixedRate = 300000) // 每5分钟执行一次
    public void monitorStockLevels() {
        List<Product> lowStockProducts = productService.getLowStockProducts();
        
        for (Product product : lowStockProducts) {
            StockAlert alert = new StockAlert();
            alert.setProductId(product.getProductId());
            alert.setCurrentStock(product.getStockQuantity());
            alert.setThreshold(product.getAlertThreshold());
            alert.setAlertLevel(calculateAlertLevel(product));
            
            stockAlertService.createAlert(alert);
            
            // 发送预警邮件
            if (alert.getAlertLevel() >= 2) {
                sendAlertEmail(alert, product);
            }
        }
    }
    
    private int calculateAlertLevel(Product product) {
        int stock = product.getStockQuantity();
        int threshold = product.getAlertThreshold();
        
        if (stock <= threshold * 0.2) return 3; // 严重
        else if (stock <= threshold * 0.5) return 2; // 警告
        else return 1; // 提醒
    }
}

库存管理页面

  1. 销售数据分析与报表系统

系统提供多维度的销售数据分析功能,帮助管理者制定精准的营销策略。

@Service
public class SalesAnalysisServiceImpl implements SalesAnalysisService {
    
    @Autowired
    private OrderMapper orderMapper;
    
    @Override
    public SalesReport generateSalesReport(Date startDate, Date endDate, 
                                         ReportType reportType) {
        SalesReport report = new SalesReport();
        
        // 销售总额统计
        BigDecimal totalSales = orderMapper.getTotalSalesByPeriod(startDate, endDate);
        report.setTotalSales(totalSales);
        
        // 商品销量排名
        List<ProductSales> topProducts = orderMapper.getTopSellingProducts(startDate, endDate, 10);
        report.setTopSellingProducts(topProducts);
        
        // 分类销售占比
        List<CategorySales> categorySales = orderMapper.getSalesByCategory(startDate, endDate);
        report.setCategorySales(categorySales);
        
        // 销售趋势分析
        List<DailySales> dailySales = orderMapper.getDailySalesTrend(startDate, endDate);
        report.setDailySalesTrend(dailySales);
        
        return report;
    }
    
    @Override
    public InventoryTurnover calculateInventoryTurnover(Integer productId, 
                                                      Date startDate, Date endDate) {
        return orderMapper.getInventoryTurnover(productId, startDate, endDate);
    }
}

销售统计页面

实体模型设计与业务逻辑

系统采用领域驱动设计(DDD)思想,构建了丰富的实体模型。以商品实体为例,其包含了完整的业务逻辑:

public class Product {
    private Integer productId;
    private String productName;
    private Integer categoryId;
    private BigDecimal price;
    private Integer stockQuantity;
    private Integer alertThreshold;
    private String description;
    private String imageUrl;
    private ProductStatus status;
    private Date createTime;
    private Date updateTime;
    
    // 业务方法
    public boolean isAvailable() {
        return status == ProductStatus.ON_SHELF && stockQuantity > 0;
    }
    
    public boolean needsRestocking() {
        return stockQuantity <= alertThreshold;
    }
    
    public void reduceStock(Integer quantity) {
        if (quantity <= 0) {
            throw new IllegalArgumentException("扣减数量必须大于0");
        }
        if (this.stockQuantity < quantity) {
            throw new InsufficientStockException("库存不足");
        }
        this.stockQuantity -= quantity;
        this.updateTime = new Date();
    }
    
    public void increaseStock(Integer quantity) {
        if (quantity <= 0) {
            throw new IllegalArgumentException("增加数量必须大于0");
        }
        this.stockQuantity += quantity;
        this.updateTime = new Date();
    }
    
    // Getter和Setter方法
    // ...
}

性能优化与安全考量

系统在性能优化方面采取了多项措施。数据库层面通过合理的索引设计和查询优化提升响应速度:

-- 复合索引优化
CREATE INDEX idx_order_user_date ON order(user_id, create_time);
CREATE INDEX idx_product_category_price ON product(category_id, price, status);

-- 查询优化示例
EXPLAIN SELECT p.product_name, COUNT(oi.item_id) as sales_count
FROM product p 
LEFT JOIN order_item oi ON p.product_id = oi.product_id
LEFT JOIN order o ON oi.order_id = o.order_id 
WHERE o.create_time BETWEEN '2024-01-01' AND '2024-12-31'
AND p.status = 1
GROUP BY p.product_id
ORDER BY sales_count DESC
LIMIT 10;

安全方面,系统实现了完整的权限控制和数据加密:

@Component
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/dashboard")
            .and()
            .logout()
            .logoutSuccessUrl("/login")
            .and()
            .csrf().disable();
    }
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

未来优化方向

  1. 微服务架构迁移:将单体应用拆分为商品服务、订单服务、用户服务等独立微服务,提升系统可扩展性和维护性。可采用Spring Cloud技术栈实现服务治理。

  2. 大数据分析集成:引入Elasticsearch实现商品搜索的智能化,集成Apache Spark进行实时销售数据分析,为业务决策提供数据支撑。

  3. 移动端应用开发:开发基于React Native或Flutter的移动端应用,提升用户购物体验,支持推送通知等移动端特性。

  4. 供应链协同优化:通过API网关与供应商系统对接,实现自动补货和库存共享,构建更加智能的供应链管理体系。

  5. 人工智能推荐:集成机器学习算法,基于用户行为数据实现个性化商品推荐,提升转化率和用户粘性。

该系统通过精心的架构设计和深入的功能实现,为电器零售企业提供了一套完整的数字化解决方案。其模块化设计、性能优化措施和扩展性考量,确保了系统能够适应业务规模的持续增长和技术架构的演进需求。

本文关键词
SSM框架电器商城在线购物库存管理源码解析

上下篇

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