基于SSH框架的文创产品定制销售平台 - 源码深度解析

JavaJavaScriptSSH框架HTMLCSSMySQLJSP+Servlet
2026-02-103 浏览

文章摘要

本项目是一款基于经典SSH(Struts2 + Spring + Hibernate)框架构建的文创产品定制与在线销售平台,旨在为文化创意类企业与设计师提供一体化的商品定制、展示与交易解决方案。系统核心解决了传统文创产品销售渠道单一、定制流程繁琐、订单管理效率低下等痛点,通过线上平台将创意设计、用户...

文创产业数字化转型已成为当前文化创意企业发展的重要趋势,传统线下销售模式难以满足个性化定制需求。为应对这一挑战,我们设计并实现了一套企业级文创定制电商平台,通过标准化流程将创意设计、用户定制需求与后端生产供应链高效衔接,显著提升了业务响应速度与客户参与度。

系统架构与技术栈

平台采用经典的三层架构设计,基于SSH(Struts2 + Spring + Hibernate)框架构建。表现层使用Struts2框架处理用户请求与页面跳转,通过Action类封装业务逻辑;业务逻辑层由Spring框架统一管理,利用IoC容器实现服务组件的依赖注入与事务控制;数据持久层依托Hibernate实现ORM映射,通过HQL语句完成复杂查询。

前端技术栈采用JSP页面结合JSTL标签库展示动态数据,表单验证与异步交互通过jQuery实现。数据库选用MySQL 5.7,支持事务处理和并发访问控制。

<!-- Spring配置示例 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/culture_db"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
        <list>
            <value>com/culture/entity/Goods.hbm.xml</value>
            <value>com/culture/entity/Order.hbm.xml</value>
        </list>
    </property>
</bean>

数据库设计亮点分析

订单模块的精细化设计

订单管理是电商系统的核心,平台通过t_ordert_orderitem表的分离设计实现了订单数据的规范化存储。t_order表记录订单基本信息,采用order_bianhao作为业务主键确保订单编号的唯一性,同时保留order_id作为物理主键提升查询性能。

-- 订单表核心字段设计
CREATE TABLE `t_order` (
  `order_id` int(11) NOT NULL COMMENT '订单ID',
  `order_bianhao` varchar(50) DEFAULT NULL COMMENT '订单编号',
  `order_date` varchar(50) DEFAULT NULL COMMENT '订单日期',
  `order_zhuangtai` varchar(50) DEFAULT NULL COMMENT '订单状态',
  `order_songhuodizhi` varchar(50) DEFAULT NULL COMMENT '送货地址',
  `order_fukuangfangshi` varchar(50) DEFAULT NULL COMMENT '付款方式',
  `order_jine` int(11) DEFAULT NULL COMMENT '订单金额',
  `order_user_id` int(11) DEFAULT NULL COMMENT '订单用户ID',
  PRIMARY KEY (`order_id`),
  UNIQUE KEY `idx_order_bianhao` (`order_bianhao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

订单项表t_orderitem采用与订单表的一对多关系设计,支持单个订单包含多个商品项的需求。通过goods_quantity字段记录商品数量,shifouquerenshifoufukuan字段实现订单状态的细粒度控制。

商品模块的可扩展架构

商品表t_goods设计充分考虑了文创产品的多样性需求,不仅包含基础的商品信息字段,还通过goods_catelog_idgoods_pinpai_id实现分类和品牌管理。特别值得注意的是goods_isnottejiagoods_isnottuijian字段的设计,采用字符串类型而非布尔值,为后续扩展更多商品状态预留了空间。

-- 商品表特色字段设计
CREATE TABLE `t_goods` (
  `goods_id` int(11) NOT NULL AUTO_INCREMENT,
  `goods_name` varchar(50) DEFAULT NULL COMMENT '商品名称',
  `goods_miaoshu` text DEFAULT NULL COMMENT '商品描述',
  `goods_yanse` varchar(50) DEFAULT NULL COMMENT '商品颜色',
  `goods_shichangjia` int(11) DEFAULT NULL COMMENT '市场价',
  `goods_tejia` int(11) DEFAULT NULL COMMENT '特价',
  `goods_isnottejia` varchar(50) DEFAULT NULL COMMENT '是否特价',
  `goods_isnottuijian` varchar(50) DEFAULT NULL COMMENT '是否推荐',
  `goods_kucun` int(11) DEFAULT NULL COMMENT '库存',
  `shenhe` varchar(50) DEFAULT NULL COMMENT '审核状态',
  PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

用户-商品关联的灵活配置

t_user_goods表的设计体现了平台对个性化需求的重视,该表作为用户与商品之间的中间表,支持用户收藏、浏览历史、定制偏好等多种业务场景。采用InnoDB存储引擎确保事务完整性,为后续实现复杂的用户行为分析提供数据基础。

用户商品关联表设计

核心功能实现详解

商品定制化流程

平台的核心竞争力在于强大的商品定制能力。用户在选择基础商品后,可以通过可视化界面添加个性化元素,系统实时生成定制预览。

/**
 * 商品定制Action类
 */
public class GoodsCustomizeAction extends ActionSupport {
    private Integer goodsId;
    private String customText;
    private String customImage;
    private GoodsService goodsService;
    
    public String execute() {
        try {
            // 获取基础商品信息
            Goods baseGoods = goodsService.getGoodsById(goodsId);
            
            // 处理定制请求
            CustomGoods customGoods = new CustomGoods();
            customGoods.setBaseGoods(baseGoods);
            customGoods.setCustomText(customText);
            customGoods.setCustomImage(processImage(customImage));
            
            // 生成预览图
            String previewImage = generatePreview(customGoods);
            customGoods.setPreviewImage(previewImage);
            
            // 保存定制会话
            HttpSession session = ServletActionContext.getRequest().getSession();
            session.setAttribute("customGoods", customGoods);
            
            return SUCCESS;
        } catch (Exception e) {
            addActionError("定制过程出现错误:" + e.getMessage());
            return ERROR;
        }
    }
    
    private String processImage(String imageData) {
        // 图像处理逻辑
        return ImageProcessor.resizeAndOptimize(imageData);
    }
    
    // Getter和Setter方法
    public void setGoodsService(GoodsService goodsService) {
        this.goodsService = goodsService;
    }
}

商品定制界面

订单管理系统

订单处理模块采用状态机模式管理订单生命周期,从下单、支付、确认到发货的整个流程都有严格的状态控制。

/**
 * 订单服务实现类
 */
@Service("orderService")
@Transactional
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private OrderDAO orderDAO;
    
    @Autowired
    private OrderItemDAO orderItemDAO;
    
    @Override
    public String createOrder(OrderDTO orderDTO) {
        // 验证库存
        for (OrderItemDTO item : orderDTO.getItems()) {
            Goods goods = goodsDAO.get(item.getGoodsId());
            if (goods.getGoodsKucun() < item.getQuantity()) {
                throw new InventoryException("商品库存不足");
            }
        }
        
        // 创建订单
        Order order = new Order();
        order.setOrderBianhao(generateOrderNumber());
        order.setOrderDate(new Date());
        order.setOrderZhuangtai("待付款");
        order.setOrderJine(calculateTotalAmount(orderDTO));
        
        orderDAO.save(order);
        
        // 创建订单项
        for (OrderItemDTO itemDTO : orderDTO.getItems()) {
            OrderItem item = new OrderItem();
            item.setOrderId(order.getOrderId());
            item.setGoodsId(itemDTO.getGoodsId());
            item.setGoodsQuantity(itemDTO.getQuantity());
            item.setShifouqueren("否");
            
            orderItemDAO.save(item);
            
            // 更新库存
            updateInventory(itemDTO.getGoodsId(), itemDTO.getQuantity());
        }
        
        return order.getOrderBianhao();
    }
    
    private String generateOrderNumber() {
        return "ORD" + System.currentTimeMillis() + 
               String.format("%04d", new Random().nextInt(10000));
    }
}

订单管理后台

库存管理机制

平台实现了实时库存监控和预警机制,通过数据库事务确保库存数据的一致性。

/**
 * 库存服务类
 */
@Service
@Transactional
public class InventoryService {
    
    @Autowired
    private GoodsDAO goodsDAO;
    
    /**
     * 更新商品库存
     */
    public synchronized void updateInventory(Integer goodsId, Integer quantity) {
        Goods goods = goodsDAO.get(goodsId);
        int currentStock = goods.getGoodsKucun();
        
        if (currentStock < quantity) {
            throw new InventoryException("库存不足,当前库存:" + currentStock);
        }
        
        goods.setGoodsKucun(currentStock - quantity);
        goodsDAO.update(goods);
        
        // 库存预警检查
        if (goods.getGoodsKucun() < getSafetyStock(goodsId)) {
            sendInventoryAlert(goods);
        }
    }
    
    /**
     * 库存预警通知
     */
    private void sendInventoryAlert(Goods goods) {
        // 发送预警邮件或系统通知
        AlertMessage alert = new AlertMessage();
        alert.setType("INVENTORY_WARNING");
        alert.setContent("商品" + goods.getGoodsName() + "库存低于安全水平");
        alert.setRecipient("inventory_manager");
        
        alertService.sendAlert(alert);
    }
}

库存管理界面

用户权限管理

系统采用基于角色的访问控制(RBAC)模型,不同角色的用户拥有不同的操作权限。

<!-- Struts2权限拦截器配置 -->
<package name="secure" extends="struts-default" namespace="/admin">
    <interceptors>
        <interceptor name="authInterceptor" 
                    class="com.culture.interceptor.AuthInterceptor"/>
        <interceptor-stack name="secureStack">
            <interceptor-ref name="authInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>
    
    <default-interceptor-ref name="secureStack"/>
    
    <action name="userManagement" class="userAction">
        <result name="success">/admin/user_list.jsp</result>
        <result name="error">/admin/error.jsp</result>
    </action>
</package>
/**
 * 权限验证拦截器
 */
public class AuthInterceptor extends AbstractInterceptor {
    
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext context = invocation.getInvocationContext();
        HttpSession session = context.getSession();
        
        User user = (User) session.getAttribute("currentUser");
        if (user == null || !"admin".equals(user.getRole())) {
            return "login"; // 跳转到登录页面
        }
        
        return invocation.invoke();
    }
}

用户管理界面

实体模型设计

平台采用标准的JavaBean实体类设计,通过Hibernate注解实现对象关系映射。

/**
 * 商品实体类
 */
@Entity
@Table(name = "t_goods")
public class Goods implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "goods_id")
    private Integer goodsId;
    
    @Column(name = "goods_name", length = 50)
    private String goodsName;
    
    @Column(name = "goods_miaoshu", columnDefinition = "text")
    private String goodsMiaoshu;
    
    @Column(name = "goods_shichangjia")
    private Integer goodsShichangjia;
    
    @Column(name = "goods_tejia")
    private Integer goodsTejia;
    
    @Column(name = "goods_kucun")
    private Integer goodsKucun;
    
    @Column(name = "shenhe", length = 50)
    private String shenhe;
    
    // 关联关系
    @OneToMany(mappedBy = "goods", cascade = CascadeType.ALL)
    private Set<OrderItem> orderItems = new HashSet<>();
    
    // Getter和Setter方法
    public Integer getGoodsId() { return goodsId; }
    public void setGoodsId(Integer goodsId) { this.goodsId = goodsId; }
    
    // 其他getter/setter方法...
}
/**
 * 订单实体类
 */
@Entity
@Table(name = "t_order")
public class Order implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "order_id")
    private Integer orderId;
    
    @Column(name = "order_bianhao", length = 50, unique = true)
    private String orderBianhao;
    
    @Column(name = "order_date", length = 50)
    private String orderDate;
    
    @Column(name = "order_zhuangtai", length = 50)
    private String orderZhuangtai;
    
    @Column(name = "order_jine")
    private Integer orderJine;
    
    // 一对多关联订单项
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<OrderItem> orderItems = new HashSet<>();
    
    // 业务逻辑方法
    public BigDecimal getTotalAmount() {
        return orderItems.stream()
                .map(OrderItem::getSubtotal)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
}

功能展望与优化方向

1. 引入Redis缓存提升性能

当前系统在高并发场景下可能存在数据库访问瓶颈。建议引入Redis作为缓存层,将热点数据如商品信息、用户会话等存储在内存中。

/**
 * 缓存增强的商品服务
 */
@Service
public class CachedGoodsService {
    
    @Autowired
    private RedisTemplate<String, Goods> redisTemplate;
    
    @Autowired
    private GoodsDAO goodsDAO;
    
    public Goods getGoodsById(Integer goodsId) {
        String cacheKey = "goods:" + goodsId;
        Goods goods = redisTemplate.opsForValue().get(cacheKey);
        
        if (goods == null) {
            goods = goodsDAO.get(goodsId);
            if (goods != null) {
                redisTemplate.opsForValue().set(cacheKey, goods, Duration.ofHours(1));
            }
        }
        
        return goods;
    }
}

2. 微服务架构改造

随着业务规模扩大,单体架构可能难以维护。建议将系统拆分为商品服务、订单服务、用户服务等微服务,通过Spring Cloud实现服务治理。

# 商品服务配置示例
spring:
  application:
    name: goods-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

# 订单服务配置
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

3. 移动端适配与PWA应用

开发响应式前端界面,支持移动设备访问,并实现渐进式Web应用(PWA)特性,提供接近原生应用的体验。

// 服务工作者注册
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/sw.js')
        .then(registration => {
            console.log('SW注册成功: ', registration);
        });
}

// 离线缓存策略
self.addEventListener('install', event => {
    event.waitUntil(
        caches.open('culture-v1').then(cache => {
            return cache.addAll([
                '/',
                '/styles/main.css',
                '/script/app.js',
                '/images/logo.png'
            ]);
        })
    );
});

4. 智能推荐系统集成

基于用户行为数据构建推荐算法,实现个性化商品推荐,提升用户粘性和转化率。

/**
 * 协同过滤推荐服务
 */
@Service
public class RecommendationService {
    
    public List<Goods> recommendGoods(Integer userId, int limit) {
        // 基于用户历史行为计算相似度
        List<UserBehavior> behaviors = userBehaviorDAO.getByUserId(userId);
        Map<Integer, Double> similarityScores = calculateSimilarity(behaviors);
        
        // 获取TopN推荐商品
        return similarityScores.entrySet().stream()
                .sorted(Map.Entry.<Integer, Double>comparingByValue().reversed())
                .limit(limit)
                .map(entry -> goodsDAO.get(entry.getKey()))
                .collect(Collectors.toList());
    }
}

5. 大数据分析平台

建立数据仓库,对销售数据、用户行为等进行深度分析,为业务决策提供数据支持。

-- 销售分析查询示例
SELECT 
    DATE_FORMAT(order_date, '%Y-%m') as month,
    goods_catelog_id,
    SUM(order_jine) as total_sales,
    COUNT(DISTINCT order_user_id) as unique_customers
FROM t_order o
JOIN t_orderitem oi ON o.order_id = oi.order_id
JOIN t_goods g ON oi.goods_id = g.goods_id
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 12 MONTH)
GROUP BY month, goods_catelog_id
ORDER BY month DESC, total_sales DESC;

总结

该文创定制电商平台通过成熟的SSH技术栈实现了完整的电商业务流程,在数据库设计上体现了良好的扩展性和规范性。系统不仅解决了传统文创产品销售中的痛点,还为后续的技术演进奠定了坚实基础。通过

本文关键词
SSH框架文创产品电商平台源码解析数据库设计

上下篇

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