基于SSM的药品电商平台与商家入驻系统 - 源码深度解析
随着医药行业数字化转型的加速推进,传统药品零售模式正面临信息不透明、渠道单一等严峻挑战。为有效应对这些行业痛点,我们设计并实现了一套企业级医药电商解决方案。该平台基于成熟的SSM(Spring+SpringMVC+MyBatis)框架技术栈,深度整合了药品在线销售与多商家入驻管理两大核心功能模块,为医药行业数字化转型提供了强有力的技术支撑。
系统架构与技术栈选型
整体架构设计
该平台采用经典的MVC三层架构设计,技术选型充分考虑了系统的成熟度、可维护性和性能要求。Spring Framework作为核心IoC容器,负责管理业务Bean的生命周期和声明式事务控制;SpringMVC处理Web层请求路由,通过注解配置实现清晰的URL映射和参数绑定;MyBatis作为数据持久层框架,提供了灵活的SQL映射和强大的动态SQL能力。
核心技术栈配置
<dependencies>
<!-- Spring MVC Web框架 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- MyBatis-Spring整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!-- MySQL数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- 其他必要依赖 -->
</dependencies>
技术亮点解析:
- 前后端分离架构:采用JSON格式进行数据交互,通过Ajax实现异步通信,显著提升用户体验
- 依赖管理规范化:使用Maven进行项目构建和依赖管理,确保环境一致性和可重复构建
- 事务管理优化:基于Spring的声明式事务管理,保证数据操作的原子性和一致性
数据库设计核心亮点
订单表(ordermsg)设计优化
作为交易系统的核心表,ordermsg表采用多重状态字段设计,实现了完整的订单生命周期管理:
CREATE TABLE `ordermsg` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`ddno` varchar(255) DEFAULT NULL COMMENT '订单编号-唯一标识',
`memberid` varchar(255) DEFAULT NULL COMMENT '会员ID',
`productid` varchar(255) DEFAULT NULL COMMENT '商品ID',
`num` int(11) DEFAULT NULL COMMENT '购买数量',
`total` double(255,2) DEFAULT NULL COMMENT '订单总额',
`fkstatus` varchar(255) DEFAULT NULL COMMENT '付款状态',
`shstatus` varchar(11) DEFAULT NULL COMMENT '收货状态',
`addr` varchar(255) DEFAULT NULL COMMENT '收货地址',
`savetime` varchar(255) DEFAULT NULL COMMENT '下单时间',
`delstatus` varchar(255) DEFAULT NULL COMMENT '删除状态(逻辑删除)',
`shfs` varchar(255) DEFAULT NULL COMMENT '送货方式',
`zffs` varchar(255) DEFAULT NULL COMMENT '支付方式',
`saver` varchar(255) DEFAULT NULL COMMENT '操作人',
`isdd` varchar(255) DEFAULT NULL COMMENT '是否订单',
`fid` varchar(255) DEFAULT NULL COMMENT '父级ID(支持售后)',
`goodsid` varchar(255) DEFAULT NULL COMMENT '商品ID',
`goodstype` varchar(255) DEFAULT NULL COMMENT '商品类型',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_ddno` (`ddno`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单表'
设计亮点深度解析:
状态机分离设计
- 付款状态(fkstatus)、收货状态(shstatus)、删除状态(delstatus)独立管理
- 支持复杂的状态流转和业务统计需求
分布式订单号生成
- ddno字段确保全局唯一性,支持分布式系统下的订单生成
- 采用雪花算法或UUID生成策略,避免单点故障
层级关系支持
- 通过fid字段实现订单父子关系,完美支持售后、退款等衍生业务场景
- 支持订单拆分和合并操作
完善的审计追踪
- 包含saver操作人字段和savetime时间戳,满足GDPR等合规要求
- 支持操作日志追踪和数据变更历史
商品表(product)结构设计
product表采用分类层级和状态管理机制,确保商品数据的完整性和一致性:
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`productno` varchar(255) DEFAULT NULL COMMENT '商品编号',
`productname` varchar(255) DEFAULT NULL COMMENT '商品名称',
`filename` varchar(255) DEFAULT NULL COMMENT '商品图片路径',
`price` decimal(10,2) DEFAULT NULL COMMENT '现价(销售价)',
`tprice` decimal(10,2) DEFAULT NULL COMMENT '原价(市场价)',
`fid` varchar(255) DEFAULT NULL COMMENT '一级分类ID',
`sid` varchar(255) DEFAULT NULL COMMENT '二级分类ID',
`content` text DEFAULT NULL COMMENT '商品详情(HTML富文本)',
`delstatus` varchar(255) DEFAULT NULL COMMENT '删除状态',
`issj` varchar(255) DEFAULT NULL COMMENT '是否上架',
`istj` varchar(255) DEFAULT NULL COMMENT '是否推荐',
`saver` varchar(255) DEFAULT NULL COMMENT '添加人',
`productid` varchar(255) DEFAULT NULL COMMENT '商品ID',
`leibie` varchar(255) DEFAULT NULL COMMENT '类别',
PRIMARY KEY (`id`),
KEY `idx_fid_sid` (`fid`,`sid`),
KEY `idx_issj` (`issj`)
) ENGINE=InnoDB AUTO_INCREMENT=154 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'
创新设计特点:
精确的金额计算
- 使用decimal(10,2)类型确保金额计算的准确性,避免浮点数精度问题
- 支持复杂的价格策略和促销活动
灵活的多级分类体系
- fid和sid字段支持商品的无限级分类管理
- 便于商品检索和分类统计
完整的商品状态机
- 通过issj(上架)、istj(推荐)、delstatus(删除)实现商品全生命周期管理
- 支持商品批量操作和状态批量变更
富文本内容支持
- content字段使用text类型存储商品详情HTML内容
- 支持图文混排、视频嵌入等丰富的内容展示形式
核心功能实现详解
商家药品管理模块
商家端药品管理界面提供完整的CRUD操作,支持药品上架、库存管理、价格调整等核心功能:

控制器层实现代码:
@Controller
@RequestMapping("/seller")
public class ProductManageController {
@Resource
private ProductDAO productDAO;
/**
* 获取商家商品列表
*/
@RequestMapping("/productList")
public String productList(HttpServletRequest request) {
String sellerId = getCurrentSellerId(request);
Map<String, Object> params = new HashMap<>();
params.put("sellerId", sellerId);
List<Product> products = productDAO.findByParams(params);
request.setAttribute("products", products);
return "seller/product_list";
}
/**
* 更新商品信息
*/
@RequestMapping(value = "/updateProduct", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> updateProduct(@RequestBody Product product) {
Map<String, Object> result = new HashMap<>();
try {
productDAO.update(product);
result.put("success", true);
result.put("message", "商品更新成功");
} catch (Exception e) {
result.put("success", false);
result.put("message", "更新失败:" + e.getMessage());
}
return result;
}
}
商品实体类设计:
public class Product {
private Integer id; // 主键ID
private String productno; // 商品编号
private String productname; // 商品名称
private String filename; // 商品图片
private BigDecimal price; // 现价
private BigDecimal tprice; // 原价
private String fid; // 一级分类ID
private String sid; // 二级分类ID
private String content; // 商品详情
private String delstatus; // 删除状态
private String issj; // 是否上架
private String istj; // 是否推荐
private String saver; // 添加人
private String productid; // 商品ID
private String leibie; // 类别
// getter和setter方法
// 业务逻辑方法
}
技术实现亮点:
- 采用RESTful风格的API设计,提高接口的可读性和可维护性
- 使用@ResponseBody注解实现JSON数据自动序列化
- 异常处理机制完善,提供友好的错误提示信息
- 支持前后端分离开发模式,便于团队协作和功能扩展
该系统通过精心的架构设计和代码实现,为药品电商平台提供了稳定、高效的技术基础,具有良好的可扩展性和维护性。