基于SSM框架的调味品在线销售与库存管理系统 - 源码深度解析
在传统调味品行业中,许多企业仍依赖手工记账和纸质单据进行管理,这种模式存在诸多弊端:库存信息更新滞后、销售与库存数据脱节、易出现超卖或积压现象。随着市场竞争加剧和企业数字化转型需求日益迫切,构建一套能够实现销售与库存一体化管理的智能化系统成为行业刚需。
本文介绍的调味品供应链管理平台采用经典的SSM(Spring+SpringMVC+MyBatis)框架技术栈,为企业提供全流程的数字化解决方案。
技术架构设计
系统采用分层架构设计,各层职责分明:
- Spring框架作为核心容器,通过依赖注入(DI)实现组件解耦,利用面向切面编程(AOP)处理事务管理、日志记录等横切关注点
- SpringMVC负责Web层请求分发,采用清晰的MVC模式分离表现层与业务逻辑
- MyBatis作为数据持久层框架,通过灵活的XML配置实现对象关系映射(ORM),支持动态SQL和复杂查询优化
这种架构组合既保证了系统的可维护性和扩展性,又兼顾了开发效率与性能要求。
数据库设计亮点
调味品主表(condiment)的扩展性设计
CREATE TABLE `condiment` (
`m_id` int(13) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`m_name` varchar(63) DEFAULT NULL COMMENT '名称',
`manufacturer` varchar(63) DEFAULT NULL COMMENT '厂商',
`untis` varchar(63) DEFAULT NULL COMMENT '单位',
`pov` date DEFAULT NULL COMMENT '有效期',
`batch` varchar(63) DEFAULT NULL COMMENT '批号',
`inprice` float DEFAULT NULL COMMENT '进货价',
`outprice` float DEFAULT NULL COMMENT '销售价',
`notes` varchar(63) DEFAULT NULL COMMENT '备注',
`mt_id` int(13) DEFAULT NULL COMMENT '类别代码',
`ext1_int` int(13) DEFAULT NULL COMMENT '扩展字段1',
`ext2_varchar` varchar(500) DEFAULT NULL COMMENT '扩展字段2',
`s_id` int(50) DEFAULT NULL COMMENT '供应商ID',
PRIMARY KEY (`m_id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8 COMMENT='调味品表'
设计特色:
- 保质期管理:
pov字段支持临期商品自动预警,符合食品行业安全要求 - 批次追踪:
batch字段实现产品全生命周期追溯,满足监管合规需求 - 价格策略:区分进货价与销售价,便于利润分析和成本控制
- 扩展性设计:预留扩展字段为未来业务升级提供灵活性
操作日志表(log)的全链路追踪机制
CREATE TABLE `log` (
`l_id` int(13) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`l_type` int(11) NOT NULL COMMENT '0销售 1销售退货 2入库 3入库退货',
`m_id` int(13) NOT NULL COMMENT '药品id',
`s_id` int(13) NOT NULL COMMENT '供货商id/患者id',
`m_num` int(13) NOT NULL COMMENT '药品数量',
`u_id` int(13) NOT NULL COMMENT '医生id',
`l_date` datetime NOT NULL COMMENT '操作时间',
`city` varchar(50) DEFAULT NULL COMMENT '销售城市',
`c_id` int(13) DEFAULT NULL COMMENT '客户ID',
`go` varchar(50) DEFAULT NULL COMMENT '商品去处',
PRIMARY KEY (`l_id`)
) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8 COMMENT='操作日志表'
审计追踪功能:
- 通过
l_type枚举值精确记录各类业务操作 - 完整记录操作时间、人员、数量等关键信息
city和go字段支持销售区域分析和物流追踪- 为数据审计和业务决策提供完整依据
库存表(inventory)的安全库存机制
CREATE TABLE `inventory` (
`m_id` int(13) NOT NULL COMMENT '调味品ID',
`num` int(13) DEFAULT 0 COMMENT '当前库存数量',
`max_num` int(13) DEFAULT 700 COMMENT '最大库存数量',
`min_num` int(13) DEFAULT 100 COMMENT '最小库存数量',
PRIMARY KEY (`m_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='库存表'
智能库存管控:
- 设置最大最小库存阈值,实现自动化库存预警
- 低于
min_num自动触发采购建议,避免缺货 - 高于
max_num提示积压风险,优化资金占用
核心功能实现
1. 基础数据管理模块
系统提供完整的调味品信息CRUD操作界面,支持商品信息、供应商关联、价格策略等全方位管理。通过统一的基类控制器实现参数绑定和异常处理:
package com.design.base.utils;
import java.beans.PropertyEditorSupport;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
public abstract class BaseController {
protected static final String JSP_MESSAGE = "jsp/message";
protected HttpServletRequest request;
protected HttpServletResponse response;
protected HttpSession session;
protected ServletContext application;
@ModelAttribute
public void setServletAPI(HttpServletRequest request,HttpServletResponse response){
this.request = request;
this.response = response;
this.session = request.getSession();
this.application = this.session.getServletContext();
}
@InitBinder
public void initDate(WebDataBinder dataBinder){
dataBinder.registerCustomEditor(Date.class , new PropertyEditorSupport(){
@Override
public void setAsText(String text ) throws IllegalArgumentException {
setValue(DateHelper.parseDate(text));
}
});
}
}

2. 库存预警与智能提醒系统
系统通过实时监控库存状态,基于预设阈值自动生成预警信息。库存查询功能支持多条件筛选和实时数据可视化:
@Service
public class InventoryServiceImpl implements InventoryService {
@Autowired
private InventoryMapper inventoryMapper;
@Override
@Transactional(readOnly = true)
public List<InventoryAlertVO> getInventoryAlerts() {
// 查询低于最小库存或高于最大库存的商品
return inventoryMapper.selectAlertList();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateInventory(Integer m_id, Integer changeNum, Integer type) {
Inventory inventory = inventoryMapper.selectByPrimaryKey(m_id);
if (type == 1) { // 入库
inventory.setNum(inventory.getNum() + changeNum);
} else { // 出库
inventory.setNum(inventory.getNum() - changeNum);
}
inventoryMapper.updateByPrimaryKey(inventory);
}
}
系统优势总结
- 业务贴合度高:针对调味品行业特性设计的字段和功能
- 技术架构稳健:SSM框架组合保证系统稳定性和可扩展性
- 智能化管理:库存预警、批次追踪等自动化功能降低人工干预
- 数据驱动决策:完善的日志系统和报表功能支持业务分析
- 用户体验优化:直观的操作界面和实时数据展示
该系统为传统调味品企业数字化转型提供了完整的技术解决方案,通过精细化的库存管理和智能化的业务预警,有效提升了运营效率和决策科学性。