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

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

文章摘要

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

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

文创产业的数字化转型已成为当前文化创意企业发展的核心战略。传统线下销售模式在应对个性化、定制化需求方面存在明显短板。为突破这一瓶颈,我们设计并实现了一套企业级文创定制电商平台,通过标准化流程将创意设计、用户定制需求与后端生产供应链高效衔接,显著提升了业务响应速度与客户参与度。

系统架构与技术栈选型

整体架构设计

平台采用经典的三层架构模式,基于成熟的SSH(Struts2 + Spring + Hibernate)框架组合构建:

  • 表现层:使用Struts2框架处理用户请求与页面跳转,通过Action类封装业务逻辑,实现MVC模式的清晰分离
  • 业务逻辑层:由Spring框架统一管理,利用IoC容器实现服务组件的依赖注入,通过声明式事务控制确保业务操作的原子性
  • 数据持久层:依托Hibernate实现对象关系映射(ORM),通过HQL语句完成复杂查询,大幅减少原生SQL编写工作量

前端与数据层技术

前端技术栈采用JSP页面结合JSTL标签库展示动态数据,表单验证与异步交互通过jQuery实现,确保用户界面的友好性和响应速度。数据库选用MySQL 5.7,充分利用其事务处理和并发访问控制能力,保证系统在高并发场景下的稳定性。

<!-- Spring核心配置文件示例 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/culture_db?useUnicode=true&amp;characterEncoding=utf8"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <!-- 连接池配置优化 -->
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="20"/>
</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>
    <!-- Hibernate属性配置 -->
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
            hibernate.show_sql=true
            hibernate.format_sql=true
        </value>
    </property>
</bean>

数据库设计亮点分析

订单模块的精细化设计

订单管理作为电商系统的核心模块,平台通过t_ordert_orderitem表的分离设计实现了数据的规范化存储和高效查询:

  • 双主键策略t_order表采用order_id作为物理主键提升查询性能,同时使用order_bianhao作为业务主键确保订单编号的唯一性和可读性
  • 状态管理:通过order_zhuangtai字段实现订单生命周期的完整跟踪,支持待支付、已支付、发货中、已完成等状态流转
  • 扩展性考虑:地址和付款方式字段采用varchar类型,为后续支持多种配送和支付方式预留空间
-- 订单表核心字段设计
CREATE TABLE `t_order` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID(物理主键)',
  `order_bianhao` varchar(50) NOT NULL COMMENT '订单编号(业务主键)',
  `order_date` datetime NOT NULL COMMENT '订单日期',
  `order_zhuangtai` varchar(20) DEFAULT '待支付' COMMENT '订单状态',
  `order_songhuodizhi` varchar(200) DEFAULT NULL COMMENT '送货地址',
  `order_fukuangfangshi` varchar(20) DEFAULT NULL COMMENT '付款方式',
  `order_jine` decimal(10,2) DEFAULT '0.00' COMMENT '订单金额',
  `order_user_id` int(11) NOT NULL COMMENT '订单用户ID',
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`order_id`),
  UNIQUE KEY `idx_order_bianhao` (`order_bianhao`),
  KEY `idx_user_id` (`order_user_id`),
  KEY `idx_order_date` (`order_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表';

-- 订单项表设计
CREATE TABLE `t_orderitem` (
  `item_id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL COMMENT '关联订单ID',
  `goods_id` int(11) NOT NULL COMMENT '商品ID',
  `goods_quantity` int(11) DEFAULT '1' COMMENT '商品数量',
  `unit_price` decimal(10,2) DEFAULT NULL COMMENT '商品单价',
  `shifouqueren` varchar(10) DEFAULT '否' COMMENT '是否确认',
  `shifoufukuan` varchar(10) DEFAULT '否' COMMENT '是否付款',
  `custom_data` text COMMENT '定制化数据JSON',
  PRIMARY KEY (`item_id`),
  KEY `fk_order` (`order_id`),
  KEY `fk_goods` (`goods_id`),
  CONSTRAINT `fk_orderitem_order` FOREIGN KEY (`order_id`) REFERENCES `t_order` (`order_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';

商品模块的可扩展架构

商品表t_goods设计充分考虑了文创产品的多样性需求:

-- 商品表特色字段设计
CREATE TABLE `t_goods` (
  `goods_id` int(11) NOT NULL AUTO_INCREMENT,
  `goods_name` varchar(100) NOT NULL COMMENT '商品名称',
  `goods_miaoshu` text COMMENT '商品描述',
  `goods_yanse` varchar(50) DEFAULT NULL COMMENT '商品颜色',
  `goods_shichangjia` decimal(10,2) DEFAULT '0.00' COMMENT '市场价',
  `goods_tejia` decimal(10,2) DEFAULT NULL COMMENT '特价',
  `goods_isnottejia` varchar(10) DEFAULT '否' COMMENT '是否特价',
  `goods_isnottuijian` varchar(10) DEFAULT '否' COMMENT '是否推荐',
  `goods_kucun` int(11) DEFAULT '0' COMMENT '库存',
  `goods_catelog_id` int(11) DEFAULT NULL COMMENT '分类ID',
  `goods_pinpai_id` int(11) DEFAULT NULL COMMENT '品牌ID',
  `goods_image` varchar(200) DEFAULT NULL COMMENT '商品主图',
  `customizable` varchar(10) DEFAULT '否' COMMENT '是否支持定制',
  `shenhe` varchar(10) DEFAULT '待审核' COMMENT '审核状态',
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`goods_id`),
  KEY `idx_catelog` (`goods_catelog_id`),
  KEY `idx_pinpai` (`goods_pinpai_id`),
  KEY `idx_tejia` (`goods_isnottejia`),
  KEY `idx_tuijian` (`goods_isnottuijian`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

设计亮点

  • 状态字段采用字符串类型而非布尔值,支持"是/否/部分"等复杂状态
  • 通过customizable字段标识商品是否支持定制化
  • 价格字段使用decimal类型确保计算精度
  • 完善的索引设计提升查询效率

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

t_user_goods表的设计体现了平台对个性化需求的重视:

CREATE TABLE `t_user_goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `goods_id` int(11) NOT NULL COMMENT '商品ID',
  `relation_type` varchar(20) NOT NULL COMMENT '关联类型:收藏/浏览/定制偏好',
  `custom_data` text COMMENT '个性化配置数据',
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_goods_type` (`user_id`,`goods_id`,`relation_type`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_goods_id` (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户商品关联表';

用户商品关联表设计

核心功能实现详解

商品定制化流程

平台的核心竞争力在于强大的商品定制能力,实现了完整的定制化业务流程:

/**
 * 商品定制Action类 - 处理用户定制请求
 */
public class GoodsCustomizeAction extends ActionSupport {
    private Integer goodsId;
    private String customText;
    private String customImage;
    private Map<String, Object> customAttributes; // 扩展定制属性
    private GoodsService goodsService;
    private ImageProcessor imageProcessor;
    
    /**
     * 执行商品定制流程
     */
    public String execute() {
        try {
            // 参数验证
            if (goodsId == null) {
                addActionError("商品ID不能为空");
                return ERROR;
            }
            
            // 获取基础商品信息
            Goods baseGoods = goodsService.getGoodsById(goodsId);
            if (baseGoods == null || !"是".equals(baseGoods.getCustomizable())) {
                addActionError("该商品不支持定制");
                return ERROR;
            }
            
            // 构建定制商品对象
            CustomGoods customGoods = createCustomGoods(baseGoods);
            
            // 生成预览图
            String previewImage = generatePreview(customGoods);
            customGoods.setPreviewImage(previewImage);
            
            // 保存定制会话
            saveCustomSession(customGoods);
            
            return SUCCESS;
            
        } catch (Exception e) {
            addActionError("定制过程出现错误:" + e.getMessage());
            logger.error("商品定制异常", e);
            return ERROR;
        }
    }
    
    /**
     * 创建定制商品对象
     */
    private CustomGoods createCustomGoods(Goods baseGoods) {
        CustomGoods customGoods = new CustomGoods();
        customGoods.setBaseGoods(baseGoods);
        customGoods.setCustomText(StringUtils.trimToEmpty(customText));
        customGoods.setCustomAttributes(customAttributes);
        
        // 处理定制图片
        if (StringUtils.isNotEmpty(customImage)) {
            String processedImage = imageProcessor.processImage(customImage);
            customGoods.setCustomImage(processedImage);
        }
        
        // 计算定制价格
        calculateCustomPrice(customGoods);
        
        return customGoods;
    }
    
    /**
     * 生成定制预览图
     */
    private String generatePreview(CustomGoods customGoods) {
        PreviewGenerator generator = new PreviewGenerator();
        return generator.generate(
            customGoods.getBaseGoods().getGoodsImage(),
            customGoods.getCustomImage(),
            customGoods.getCustomText()
        );
    }
    
    /**
     * 保存定制会话
     */
    private void saveCustomSession(CustomGoods customGoods) {
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        
        // 使用ConcurrentHashMap确保线程安全
        @SuppressWarnings("unchecked")
        Map<Integer, CustomGoods> customSessions = (Map<Integer, CustomGoods>) 
            session.getAttribute("customSessions");
        
        if (customSessions == null) {
            customSessions = new ConcurrentHashMap<>();
            session.setAttribute("customSessions", customSessions);
        }
        
        customSessions.put(goodsId, customGoods);
    }
    
    // Getter和Setter方法
    public void setGoodsService(GoodsService goodsService) {
        this.goodsService = goodsService;
    }
    
    public void setImageProcessor(ImageProcessor imageProcessor) {
        this.imageProcessor = imageProcessor;
    }
    
    // 其他属性getter/setter...
}

商品定制界面

订单管理系统

订单处理模块采用状态机模式管理订单生命周期,确保业务流程的严谨性:

/**
 * 订单服务实现类 - 采用声明式事务管理
 */
@Service("orderService")
@Transactional
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private OrderDAO orderDAO;
    
    @Autowired
    private GoodsService goodsService;
    
    @Autowired
    private InventoryService inventoryService;
    
    /**
     * 创建订单
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Order createOrder(OrderDTO orderDTO) throws BusinessException {
        // 参数验证
        validateOrderDTO(orderDTO);
        
        // 库存检查
        checkInventory(orderDTO.getItems());
        
        // 生成订单编号
        String orderNumber = generateOrderNumber();
        
        // 创建订单主表记录
        Order order = buildOrder(orderDTO, orderNumber);
        orderDAO.save(order);
        
        // 创建订单项
        createOrderItems(order, orderDTO.getItems());
        
        // 扣减库存
        updateInventory(orderDTO.getItems());
        
        return order;
    }
    
    /**
     * 订单状态流转
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateOrderStatus(Integer orderId, String newStatus) throws BusinessException {
        Order order = orderDAO.findById(orderId);
        if (order == null) {
            throw new BusinessException("订单不存在");
        }
        
        // 状态机验证
        if (!isValidStatusTransition(order.getOrderZhuangtai(), newStatus)) {
            throw new BusinessException("无效的状态流转");
        }
        
        order.setOrderZhuangtai(newStatus);
        order.setUpdateTime(new Date());
        orderDAO.update(order);
        
        // 记录状态变更日志
        logStatusChange(orderId, order.getOrderZhuangtai(), newStatus);
    }
    
    /**
     * 验证状态流转是否合法
     */
    private boolean isValidStatusTransition(String currentStatus, String newStatus) {
        Map<String, List<String>> validTransitions = new HashMap<>();
        validTransitions.put("待支付", Arrays.asList("已支付", "已取消"));
        validTransitions.put("已支付", Arrays.asList("已确认", "退款中"));
        validTransitions.put("已确认", Arrays.asList("发货中", "已完成"));
        validTransitions.put("发货中", Arrays.asList("已完成"));
        
        List<String> allowed = validTransitions.get(currentStatus);
        return allowed != null && allowed.contains(newStatus);
    }
    
    // 其他业务方法...
}

技术优化与性能考量

数据库优化策略

  1. 索引优化:针对常用查询字段建立复合索引
  2. 分表分库:订单表按时间分表,用户表按业务分库
  3. 读写分离:采用主从复制实现读写分离

缓存机制应用

// Spring缓存配置示例
@Cacheable(value = "goodsCache", key = "#goodsId")
public Goods getGoodsById(Integer goodsId) {
    return goodsDAO.findById(goodsId);
}

@CacheEvict(value = "goodsCache", key = "#goods.goodsId")
public void updateGoods(Goods goods) {
    goodsDAO.update(goods);
}

本平台通过SSH框架的合理运用和精细的数据库设计,成功构建了一个高性能、可扩展的文创产品定制销售系统,为文创产业的数字化转型提供了有力的技术支撑。

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

上下篇

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