基于SSM框架的煤炭进销存管理系统 - 源码深度解析
在煤炭贸易行业数字化转型的浪潮中,传统的手工记录方式已无法满足现代化企业的精细化管理需求。物资流转信息滞后、库存核算效率低下、销售数据分析困难等痛点长期制约着中小型煤炭企业的发展。针对这些业务挑战,我们基于成熟的SSM技术栈设计开发了煤炭供应链智能管理平台,实现了从采购、入库、销售到统计分析的全流程数字化管控。
系统架构与技术选型
整体架构设计
该平台采用经典的MVC三层架构模式,确保系统的高内聚低耦合:
- 表示层:JSP+JQuery+Ajax技术组合,实现动态页面渲染和异步数据交互
- 业务逻辑层:Spring框架为核心,负责事务管理和业务组件协调
- 数据持久层:MyBatis作为ORM框架,提供灵活的SQL映射机制
技术栈配置详解
<!-- Spring MVC依赖 - 实现Web层请求分发和响应处理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- MyBatis-Spring整合包 - 实现数据访问层与Spring容器的无缝集成 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- Druid连接池 - 阿里巴巴开源的高性能数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
技术架构优势:
- Spring的IoC容器通过注解驱动(@Controller、@Service、@Autowired)实现组件依赖注入
- SpringMVC采用前端控制器模式,通过@RequestMapping注解实现RESTful风格API
- MyBatis的动态SQL能力支持复杂查询条件的灵活组装
- Maven统一管理项目依赖,确保环境一致性
数据库设计精要
供应商管理表优化设计
CREATE TABLE `t_gongyingshang` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`t_name` varchar(255) DEFAULT NULL COMMENT '厂家名称',
`t_tel` varchar(255) DEFAULT NULL COMMENT '厂家联系电话',
`t_code` varchar(255) DEFAULT NULL COMMENT '厂家统一编码',
`t_fzname` varchar(255) DEFAULT NULL COMMENT '负责人姓名',
`t_fztel` varchar(255) DEFAULT NULL COMMENT '负责人电话',
`t_bz` varchar(5000) DEFAULT NULL COMMENT '备注',
`addTime` datetime DEFAULT NULL COMMENT '插入数据库时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='供应商管理表'
表设计技术亮点:
- 字符集策略:采用utf8mb4字符集,完整支持4字节Unicode字符(包括Emoji表情),确保煤炭供应商特殊字符的准确存储
- 字段容量规划:备注字段长度设置为5000字符,充分适应煤炭行业复杂的合作条款和特殊说明需求
- 审计追踪机制:addTime字段自动记录数据创建时间,满足企业合规性要求
- 索引优化:主键自增设计提升插入性能,为大规模供应商数据管理奠定基础
入库管理表的关系建模
CREATE TABLE `t_ruku` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`t_code` varchar(255) DEFAULT NULL COMMENT '进货操作编码',
`t_num` int(11) DEFAULT NULL COMMENT '数量',
`t_shijian` varchar(255) DEFAULT NULL COMMENT '入库时间',
`t_yuanyin` varchar(255) DEFAULT NULL COMMENT '入库原因',
`t_bz` varchar(5000) DEFAULT NULL COMMENT '备注',
`addTime` datetime DEFAULT NULL COMMENT '插入数据库时间',
`huowu_id` int(11) DEFAULT NULL COMMENT '对应Huowu表的ID,在这里作为外键',
`gongyingshang_id` int(11) DEFAULT NULL COMMENT '对应Gongyingshang表的ID,在这里作为外键',
PRIMARY KEY (`id`),
KEY `FKCB53EBF84B96AE10` (`gongyingshang_id`),
KEY `FKCB53EBF8B72805F0` (`huowu_id`),
CONSTRAINT `FKCB53EBF84B96AE10` FOREIGN KEY (`gongyingshang_id`) REFERENCES `t_gongyingshang` (`id`),
CONSTRAINT `FKCB53EBF8B72805F0` FOREIGN KEY (`huowu_id`) REFERENCES `t_huowu` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入库管理表'
外键关系设计价值:
- 数据完整性保障:外键约束防止产生孤儿记录,确保业务数据逻辑一致性
- 查询性能优化:为外键字段建立索引,大幅提升多表关联查询效率
- 级联操作支持:为后续扩展级联更新/删除功能提供基础架构支持

核心业务模块实现
出入库管理控制器设计
出库管理模块采用典型的MVC模式实现,展示了SSM框架的高度集成性:
@Controller
@RequestMapping(value = "Chuku")
public class ChukuController {
// 依赖注入实现松耦合架构
@Autowired
private ChukuService chukuService;
@Autowired
private HuowuService huowuService;
@Autowired
private GongyingshangService gongyingshangService;
/**
* 初始化出库页面,加载货物和供应商下拉选项
*/
@RequestMapping(value = "/initPage.do")
public String initPage(HttpServletRequest request, Model model) {
// 获取所有货物列表
List<Huowu> listHuowu = huowuService.getList(null, null);
model.addAttribute("listHuowu", listHuowu);
// 获取所有供应商列表
List<Gongyingshang> listGongyingshang = gongyingshangService.getList(null, null);
model.addAttribute("listGongyingshang", listGongyingshang);
return "Chuku/saveOrUpdate";
}
/**
* 根据ID查询出库记录详情
*/
@RequestMapping(value = "/selectList.do")
public String selectList(HttpServletRequest request, Chuku chuku, Model model) {
// 查询指定出库记录
chuku = chukuService.getById(chuku.getId());
model.addAttribute("util", chuku);
// 刷新页面下拉选项数据
List<Huowu> listHuowu = huowuService.getList(null, null);
model.addAttribute("listHuowu", listHuowu);
List<Gongyingshang> listGongyingshang = gongyingshangService.getList(null, null);
model.addAttribute("listGongyingshang", listGongyingshang);
return "Chuku/saveOrUpdate";
}
}
控制器设计特点:
- 注解驱动:使用SpringMVC注解简化配置,提高开发效率
- 依赖注入:通过@Autowired实现服务层组件自动装配
- 模型传递:利用Model对象实现控制器与视图层数据传递
- RESTful风格:URL映射符合REST架构规范

库存实时更新机制
为确保库存数据的准确性和实时性,系统采用数据库触发器实现库存自动更新:
DELIMITER $$
CREATE TRIGGER update_inventory_after_ruku
AFTER INSERT ON t_ruku
FOR EACH ROW
BEGIN
UPDATE t_kucun
SET current_stock = current_stock + NEW.t_num,
last_update_time = NOW()
WHERE huowu_id = NEW.huowu_id;
END$$
DELIMITER ;
触发器技术优势:
- 数据一致性:在数据库层面保证库存更新的原子性,避免应用层并发问题
- 性能优化:减少应用层与数据库的交互次数,提升系统响应速度
- 业务逻辑封装:将核心业务规则下沉至数据库层,提高系统可维护性
销售统计分析服务
销售统计模块通过复杂SQL查询实现多维度数据分析,为经营决策提供数据支撑:
@Service
public class XiaoshouTongjiService {
/**
* 获取销售统计报表数据
* @param startDate 统计开始日期
* @param endDate 统计结束日期
* @param coalType 煤炭品种筛选条件
* @param customer 客户筛选条件
* @return 统计结果集合
*/
public List<Map<String, Object>> getSalesStatistics(Date startDate, Date endDate,
String coalType, String customer) {
Map<String, Object> params = new HashMap<>();
params.put("startDate", startDate);
params.put("endDate", endDate);
params.put("coalType", coalType);
params.put("customer", customer);
// 执行多表关联统计查询
return salesMapper.getSalesReport(params);
}
}
统计分析功能特色:
- 多维度分析:支持按时间、品种、客户等多个维度进行数据钻取
- 动态查询:利用MyBatis动态SQL实现灵活的条件组合查询
- 可视化支持:返回结构化的统计结果,便于前端图表展示
系统特色与创新点
- 全流程数字化:覆盖煤炭贸易从采购、入库、销售到结算的全业务流程
- 实时库存监控:通过触发器机制实现库存数据的实时准确更新
- 灵活的权限管理:基于角色的访问控制,适应不同岗位的操作需求
- 移动端适配:响应式前端设计支持PC端和移动端协同办公
该煤炭进销存管理系统通过SSM框架的深度应用,不仅解决了传统煤炭企业的管理痛点,更为行业数字化转型提供了可复用的技术解决方案。系统的模块化设计和扩展性架构为后续功能迭代奠定了坚实基础。