一、功能概述
损耗统计是生鲜供应链管理中的核心功能,旨在通过数字化手段精准追踪生鲜商品从采购到销售各环节的损耗情况,帮助企业优化采购计划、库存管理和销售策略,降低运营成本。
二、核心功能模块设计
1. 损耗类型定义与管理
- 预定义损耗分类:运输损耗、仓储损耗、加工损耗、报损损耗等
- 自定义损耗原因:支持企业根据业务特点添加特定损耗原因(如挤压、过期、变质等)
- 损耗等级划分:按损耗程度分级(轻微/中等/严重)
2. 全流程损耗追踪
- 采购环节:
- 记录采购数量与实际到货数量差异
- 记录验收时发现的损耗(规格不符、质量问题等)
- 仓储环节:
- 库存盘点差异统计
- 保质期预警导致的损耗
- 温湿度异常导致的损耗
- 加工环节:
- 原料利用率统计
- 边角料产生量记录
- 加工过程中的损耗率计算
- 销售环节:
- 退货损耗统计
- 临期商品处理损耗
- 报损商品记录
3. 损耗数据分析
- 损耗率计算:
- 部门/品类/单品损耗率 = (损耗量/入库量)×100%
- 损耗金额占比 = (损耗成本/总采购成本)×100%
- 可视化报表:
- 损耗趋势分析(日/周/月/年)
- 损耗品类分布(帕累托分析)
- 损耗环节分布(桑基图展示)
- 损耗原因TOP榜
4. 预警与决策支持
- 异常损耗预警:当某环节损耗率超过阈值时自动提醒
- 库存优化建议:基于历史损耗数据调整安全库存
- 采购建议:根据损耗趋势调整采购量
三、技术实现方案
1. 数据库设计
```sql
-- 损耗记录表
CREATE TABLE loss_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
record_no VARCHAR(32) NOT NULL COMMENT 损耗单号,
business_type TINYINT NOT NULL COMMENT 业务类型(1采购2仓储3加工4销售),
item_id BIGINT NOT NULL COMMENT 商品ID,
item_name VARCHAR(100) NOT NULL COMMENT 商品名称,
category_id BIGINT NOT NULL COMMENT 品类ID,
quantity DECIMAL(12,3) NOT NULL COMMENT 损耗数量,
unit VARCHAR(10) NOT NULL COMMENT 单位,
cost_price DECIMAL(10,2) NOT NULL COMMENT 成本价,
loss_amount DECIMAL(12,2) NOT NULL COMMENT 损耗金额,
loss_reason_id INT NOT NULL COMMENT 损耗原因ID,
loss_reason_detail VARCHAR(200) COMMENT 损耗原因详情,
loss_level TINYINT COMMENT 损耗等级(1轻微2中等3严重),
operator_id BIGINT NOT NULL COMMENT 操作人ID,
operator_name VARCHAR(50) NOT NULL COMMENT 操作人姓名,
create_time DATETIME NOT NULL COMMENT 创建时间,
related_order_no VARCHAR(32) COMMENT 关联单号(采购单/加工单等),
status TINYINT DEFAULT 1 COMMENT 状态(1有效2作废)
);
-- 损耗原因配置表
CREATE TABLE loss_reasons (
id INT PRIMARY KEY AUTO_INCREMENT,
reason_code VARCHAR(20) NOT NULL COMMENT 原因编码,
reason_name VARCHAR(50) NOT NULL COMMENT 原因名称,
business_type TINYINT NOT NULL COMMENT 适用业务类型,
is_active TINYINT DEFAULT 1 COMMENT 是否启用,
sort_order INT DEFAULT 0 COMMENT 排序
);
```
2. 关键业务逻辑实现
```java
// 损耗统计服务示例
@Service
public class LossStatisticsService {
@Autowired
private LossRecordMapper lossRecordMapper;
@Autowired
private ItemCategoryMapper itemCategoryMapper;
/
* 计算品类损耗率
*/
public Map calculateCategoryLossRate(Date startDate, Date endDate) {
// 1. 查询期间内各品类入库总量
Map inQuantityMap = getCategoryInQuantity(startDate, endDate);
// 2. 查询期间内各品类损耗总量
Map lossQuantityMap = getCategoryLossQuantity(startDate, endDate);
// 3. 计算损耗率
Map result = new HashMap<>();
inQuantityMap.forEach((categoryId, inQty) -> {
BigDecimal lossQty = lossQuantityMap.getOrDefault(categoryId, BigDecimal.ZERO);
if (inQty.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal rate = lossQty.divide(inQty, 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal("100"));
result.put(categoryId, rate);
}
});
return result;
}
/
* 获取损耗趋势数据
*/
public List getLossTrend(Date startDate, Date endDate, Integer granularity) {
// granularity: 1-日 2-周 3-月
// 实现按指定粒度分组统计损耗数据
// ...
}
}
```
3. 前端展示方案
推荐使用ECharts实现可视化展示:
```javascript
// 损耗趋势图表配置示例
function initLossTrendChart(containerId, data) {
const chart = echarts.init(document.getElementById(containerId));
const option = {
title: {
text: 损耗趋势分析,
left: center
},
tooltip: {
trigger: axis,
axisPointer: {
type: shadow
}
},
legend: {
data: [损耗量, 损耗率],
bottom: 10
},
grid: {
left: 3%,
right: 4%,
bottom: 15%,
containLabel: true
},
xAxis: {
type: category,
data: data.dates
},
yAxis: [
{
type: value,
name: 损耗量,
position: left
},
{
type: value,
name: 损耗率,
position: right,
min: 0,
max: 100,
axisLabel: {
formatter: {value}%
}
}
],
series: [
{
name: 损耗量,
type: bar,
data: data.lossQuantities
},
{
name: 损耗率,
type: line,
yAxisIndex: 1,
data: data.lossRates
}
]
};
chart.setOption(option);
}
```
四、实施建议
1. 分阶段实施:
- 第一期:实现基础损耗记录和简单报表
- 第二期:增加预警功能和移动端支持
- 第三期:引入AI预测模型优化损耗预测
2. 数据采集优化:
- 集成IoT设备自动采集温湿度数据
- 使用PDA扫描实现快速报损
- 与电子秤集成自动获取损耗重量
3. 培训与推广:
- 制定标准操作流程(SOP)
- 开展多轮次培训确保员工掌握
- 设置损耗控制奖励机制
4. 持续优化:
- 每月分析损耗TOP10商品和原因
- 每季度调整损耗预警阈值
- 每年重构损耗分类体系
五、预期效益
1. 损耗率降低15-30%
2. 库存周转率提升20%
3. 采购准确性提高25%
4. 决策响应速度提升50%
5. 运营成本节约10-18%
通过该功能的实施,美菜生鲜可建立完整的损耗管理体系,实现从"事后统计"到"事前预防"的转变,显著提升供应链运营效率。