基于JSP+Servlet的家电进销存管理系统 - 源码深度解析

JavaJavaScriptHTMLCSSMySQLJSP+Servlet
2026-02-264 浏览

文章摘要

基于JSP+Servlet的家电进销存管理系统,是一款面向中小型家电经销商的核心业务管理软件。其核心价值在于通过数字化流程整合进货与库存两大核心环节,有效解决了传统手工记账模式下数据更新滞后、库存盘点困难、信息孤岛等经营痛点。系统实现了对家电产品从采购入库、库存查询、动态预警到出库销售的全链路闭环管...

在传统家电经销行业向数字化转型的关键时期,一套高效、精准的业务管理系统成为提升企业核心竞争力的重要工具。针对中小型家电经销商在手工记账模式下普遍存在的数据更新滞后、库存盘点困难、信息孤岛等经营痛点,我们设计并实现了一套基于JSP+Servlet技术的家电供应链管控平台。该系统通过数字化流程整合进货、库存与销售三大核心环节,构建了从采购入库到出库销售的全链路闭环管理体系。

系统采用经典的MVC架构模式,JSP负责视图层渲染,Servlet作为控制器处理业务逻辑,JDBC实现与MySQL数据库的持久化交互。这种分层设计使得业务逻辑、数据访问与Web表现层有效分离,不仅提高了代码的可维护性,还为后续功能扩展奠定了坚实基础。

管理员登录界面

技术架构深度解析

在技术选型上,系统采用JSP+Servlet这一成熟的Java Web技术组合。Servlet作为控制器接收前端请求,通过重写doGet和doPost方法处理HTTP请求:

public class PurchaseServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        String action = request.getParameter("action");
        PurchaseService purchaseService = new PurchaseService();
        
        switch(action) {
            case "add":
                Purchase purchase = new Purchase();
                purchase.setProductId(request.getParameter("productId"));
                purchase.setSupplierId(request.getParameter("supplierId"));
                purchase.setQuantity(Integer.parseInt(request.getParameter("quantity")));
                purchase.setPurchasePrice(new BigDecimal(request.getParameter("price")));
                
                boolean result = purchaseService.addPurchase(purchase);
                request.setAttribute("message", result ? "进货成功" : "进货失败");
                break;
            case "query":
                List<Purchase> purchases = purchaseService.getAllPurchases();
                request.setAttribute("purchases", purchases);
                break;
        }
        request.getRequestDispatcher("/purchase_management.jsp").forward(request, response);
    }
}

业务逻辑层封装了核心的业务规则,如库存管理模块确保数据操作的事务一致性:

public class InventoryService {
    public synchronized boolean updateInventory(String productId, int quantity, String operation) {
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();
            conn.setAutoCommit(false);
            
            Inventory inventory = getInventoryByProductId(productId);
            if ("in".equals(operation)) {
                inventory.setQuantity(inventory.getQuantity() + quantity);
            } else if ("out".equals(operation)) {
                if (inventory.getQuantity() < quantity) {
                    throw new InventoryException("库存不足");
                }
                inventory.setQuantity(inventory.getQuantity() - quantity);
            }
            
            updateInventory(inventory);
            conn.commit();
            return true;
        } catch (Exception e) {
            if (conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
            return false;
        }
    }
}

数据库设计精要

系统数据库包含7个核心表,采用符合第三范式的关系设计。其中产品表的设计充分考虑了家电行业的特性:

CREATE TABLE product (
    product_id VARCHAR(20) PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    category VARCHAR(50) NOT NULL,
    brand VARCHAR(50) NOT NULL,
    model VARCHAR(50) NOT NULL,
    spec TEXT,
    purchase_price DECIMAL(10,2) NOT NULL,
    sale_price DECIMAL(10,2) NOT NULL,
    warranty_period INT,
    supplier_id VARCHAR(20),
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id)
);

库存表设计实现了实时库存追踪与预警机制:

CREATE TABLE inventory (
    inventory_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id VARCHAR(20) NOT NULL,
    quantity INT NOT NULL DEFAULT 0,
    safe_stock INT NOT NULL DEFAULT 10,
    last_stock_time DATETIME,
    status ENUM('正常', '预警', '缺货') DEFAULT '正常',
    UNIQUE KEY uk_product_id (product_id),
    FOREIGN KEY (product_id) REFERENCES product(product_id)
);

进货记录表的设计支持完整的采购流程管理:

CREATE TABLE purchase_record (
    record_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id VARCHAR(20) NOT NULL,
    supplier_id VARCHAR(20) NOT NULL,
    purchase_quantity INT NOT NULL,
    unit_price DECIMAL(10,2) NOT NULL,
    total_amount DECIMAL(12,2) NOT NULL,
    purchase_date DATE NOT NULL,
    purchaser_id VARCHAR(20) NOT NULL,
    status ENUM('待审核', '已入库', '已取消') DEFAULT '待审核',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (product_id) REFERENCES product(product_id),
    FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id)
);

核心功能模块实现

  1. 采购管理模块 采购管理实现了从供应商选择、采购单生成到入库确认的完整流程。系统通过采购计划与库存预警的联动,自动生成采购建议:
public class PurchaseManager {
    public List<PurchaseSuggestion> generatePurchaseSuggestions() {
        List<Inventory> inventories = inventoryService.getLowStockItems();
        List<PurchaseSuggestion> suggestions = new ArrayList<>();
        
        for (Inventory inventory : inventories) {
            int suggestedQuantity = inventory.getSafeStock() * 2 - inventory.getQuantity();
            if (suggestedQuantity > 0) {
                PurchaseSuggestion suggestion = new PurchaseSuggestion();
                suggestion.setProductId(inventory.getProductId());
                suggestion.setSuggestedQuantity(suggestedQuantity);
                suggestion.setUrgencyLevel(calculateUrgency(inventory));
                suggestions.add(suggestion);
            }
        }
        return suggestions;
    }
}

采购信息管理

  1. 库存动态管理 库存模块采用实时更新机制,确保每次进货、销售操作后立即更新库存数据。系统实现了库存预警自动触发机制:
public class InventoryMonitor implements Runnable {
    @Override
    public void run() {
        while (true) {
            try {
                checkInventoryStatus();
                Thread.sleep(300000); // 5分钟检查一次
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    private void checkInventoryStatus() {
        List<Inventory> inventories = inventoryDAO.getAllInventories();
        for (Inventory inventory : inventories) {
            String oldStatus = inventory.getStatus();
            String newStatus = calculateStatus(inventory);
            
            if (!oldStatus.equals(newStatus)) {
                inventory.setStatus(newStatus);
                inventoryDAO.updateInventory(inventory);
                
                if ("预警".equals(newStatus)) {
                    sendWarningNotification(inventory);
                }
            }
        }
    }
}

库存管理界面

  1. 销售分析模块 销售模块通过数据聚合和统计分析,为经营决策提供数据支持:
public class SalesAnalyzer {
    public SalesReport generateSalesReport(Date startDate, Date endDate) {
        SalesReport report = new SalesReport();
        
        // 销售趋势分析
        List<SalesTrend> trends = salesDAO.getSalesTrend(startDate, endDate);
        report.setSalesTrends(trends);
        
        // 热销产品分析
        List<ProductSales> topProducts = salesDAO.getTopSellingProducts(startDate, endDate);
        report.setTopSellingProducts(topProducts);
        
        // 库存周转率计算
        Map<String, BigDecimal> turnoverRates = calculateInventoryTurnover(startDate, endDate);
        report.setTurnoverRates(turnoverRates);
        
        return report;
    }
}

销售信息管理

实体模型设计

系统采用面向对象的设计思想,核心实体模型包括:

public class Product {
    private String productId;
    private String productName;
    private String category;
    private String brand;
    private String model;
    private BigDecimal purchasePrice;
    private BigDecimal salePrice;
    private Integer warrantyPeriod;
    private Supplier supplier;
    // 省略getter/setter方法
}

public class Inventory {
    private Integer inventoryId;
    private Product product;
    private Integer quantity;
    private Integer safeStock;
    private String status;
    private Date lastStockTime;
    // 省略getter/setter方法
}

public class PurchaseRecord {
    private Integer recordId;
    private Product product;
    private Supplier supplier;
    private Integer purchaseQuantity;
    private BigDecimal unitPrice;
    private BigDecimal totalAmount;
    private Date purchaseDate;
    private Employee purchaser;
    private String status;
    // 省略getter/setter方法
}

数据持久层实现

系统采用DAO模式实现数据访问层,确保数据操作的封装性和可维护性:

public class InventoryDAO {
    private static final String UPDATE_INVENTORY_SQL = 
        "UPDATE inventory SET quantity = ?, safe_stock = ?, status = ?, " +
        "last_stock_time = ? WHERE product_id = ?";
    
    public boolean updateInventory(Inventory inventory) {
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(UPDATE_INVENTORY_SQL)) {
            
            pstmt.setInt(1, inventory.getQuantity());
            pstmt.setInt(2, inventory.getSafeStock());
            pstmt.setString(3, inventory.getStatus());
            pstmt.setTimestamp(4, new Timestamp(inventory.getLastStockTime().getTime()));
            pstmt.setString(5, inventory.getProduct().getProductId());
            
            return pstmt.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
}

前端交互实现

系统前端采用Bootstrap框架确保响应式布局,通过AJAX实现异步数据交互:

function loadInventoryData() {
    $.ajax({
        url: 'inventory?action=load',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            renderInventoryTable(data);
            updateDashboardStats(data);
        },
        error: function(xhr, status, error) {
            showErrorMessage('加载库存数据失败: ' + error);
        }
    });
}

function updateInventory(productId, quantity) {
    $.ajax({
        url: 'inventory?action=update',
        type: 'POST',
        data: {
            productId: productId,
            quantity: quantity,
            operation: 'adjust'
        },
        success: function(response) {
            if (response.success) {
                showSuccessMessage('库存更新成功');
                loadInventoryData();
            } else {
                showErrorMessage(response.message);
            }
        }
    });
}

供应商信息管理

系统安全机制

系统实现了基于角色的访问控制和安全验证机制:

public class SecurityFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, 
                        FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        
        HttpSession session = httpRequest.getSession(false);
        String requestURI = httpRequest.getRequestURI();
        
        if (session == null || session.getAttribute("user") == null) {
            if (!requestURI.endsWith("login.jsp") && 
                !requestURI.contains("/auth/")) {
                httpResponse.sendRedirect(httpRequest.getContextPath() + "/login.jsp");
                return;
            }
        } else {
            User user = (User) session.getAttribute("user");
            if (!hasPermission(user, requestURI)) {
                httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
                return;
            }
        }
        
        chain.doFilter(request, response);
    }
}

性能优化策略

系统通过多层级缓存和连接池技术提升性能:

public class CacheManager {
    private static final Map<String, Object> cache = new ConcurrentHashMap<>();
    private static final long CACHE_DURATION = 30 * 60 * 1000; // 30分钟
    
    public static void put(String key, Object value) {
        CacheItem item = new CacheItem(value, System.currentTimeMillis());
        cache.put(key, item);
    }
    
    public static Object get(String key) {
        CacheItem item = (CacheItem) cache.get(key);
        if (item != null && 
            System.currentTimeMillis() - item.getTimestamp() < CACHE_DURATION) {
            return item.getValue();
        }
        cache.remove(key);
        return null;
    }
    
    private static class CacheItem {
        private Object value;
        private long timestamp;
        
        public CacheItem(Object value, long timestamp) {
            this.value = value;
            this.timestamp = timestamp;
        }
        // 省略getter方法
    }
}

未来优化方向

  1. 移动端支持:开发响应式移动端界面,支持扫码入库、移动盘点等功能。可采用React Native或Flutter技术栈实现跨平台移动应用。

  2. 智能预测分析:集成机器学习算法,基于历史销售数据预测未来需求,实现智能补货建议。可引入时间序列分析模型如ARIMA或LSTM神经网络。

  3. 供应链协同:建立供应商门户,实现采购订单的电子化协同处理,减少人工沟通环节。通过Web Service接口与供应商系统对接。

  4. 多仓库管理:支持分布式仓库管理,实现库存调拨、跨仓库查询等高级功能。需要重构库存模型支持仓位管理。

  5. 物联网集成:通过RFID或二维码技术实现货物自动识别和追踪,提升入库出库效率。需要硬件设备支持和相应的数据采集接口。

该系统通过严谨的架构设计和完整的功能实现,为家电经销商提供了可靠的数字化管理工具。其模块化设计和清晰的代码结构为后续功能扩展和维护提供了良好的基础,体现了企业级应用系统应有的技术水准和工程规范。

本文关键词
JSPServlet家电进销存管理系统源码解析MVC架构

上下篇

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