一、功能概述
损耗统计功能是生鲜供应链管理系统中的核心模块,旨在通过数据化手段监控、分析和控制生鲜商品在采购、仓储、运输、销售等环节的损耗情况,帮助企业降低运营成本,提高利润率。
二、核心功能设计
1. 损耗数据采集
- 采购环节:记录供应商发货数量与实际收货数量的差异
- 仓储环节:
- 定期盘点差异统计
- 报损申请与审批流程
- 库存过期预警
- 分拣加工环节:记录分拣前后的重量/数量变化
- 配送环节:记录装车数量与实际交付数量的差异
- 销售环节:记录退货、残次品处理数据
2. 损耗分类管理
- 自然损耗:水分蒸发、自然死亡等
- 操作损耗:分拣损坏、包装破损等
- 管理损耗:过期、错配、偷盗等
- 运输损耗:碰撞损坏、温度失控等
3. 统计分析模块
- 损耗率计算:按商品类别、供应商、门店、时间段等维度
- 损耗趋势分析:日/周/月/季度趋势图
- 损耗对比分析:同品类不同供应商对比、同供应商不同批次对比
- 损耗成本计算:将损耗量转化为直接经济损失
4. 预警与报告
- 异常损耗预警:设定阈值,超标自动提醒
- 定期损耗报告:自动生成PDF/Excel格式报告
- 可视化看板:实时展示关键损耗指标
三、技术实现方案
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配送 5销售,
related_id BIGINT NOT NULL COMMENT 关联业务ID,
loss_type TINYINT NOT NULL COMMENT 损耗类型:1自然 2操作 3管理 4运输,
product_id BIGINT NOT NULL COMMENT 商品ID,
quantity DECIMAL(12,3) NOT NULL COMMENT 损耗数量,
unit VARCHAR(16) NOT NULL COMMENT 单位,
cost_price DECIMAL(12,2) NOT NULL COMMENT 成本价,
loss_amount DECIMAL(12,2) NOT NULL COMMENT 损耗金额,
operator_id BIGINT NOT NULL COMMENT 操作人ID,
operator_name VARCHAR(64) NOT NULL COMMENT 操作人姓名,
record_time DATETIME NOT NULL COMMENT 记录时间,
remark VARCHAR(512) COMMENT 备注,
status TINYINT DEFAULT 1 COMMENT 状态:1正常 0作废
);
-- 损耗统计表(按日汇总)
CREATE TABLE loss_daily_stats (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
stat_date DATE NOT NULL COMMENT 统计日期,
product_id BIGINT NOT NULL COMMENT 商品ID,
category_id BIGINT NOT NULL COMMENT 品类ID,
warehouse_id BIGINT COMMENT 仓库ID,
supplier_id BIGINT COMMENT 供应商ID,
total_quantity DECIMAL(12,3) NOT NULL COMMENT 总损耗数量,
total_amount DECIMAL(12,2) NOT NULL COMMENT 总损耗金额,
loss_rate DECIMAL(5,2) COMMENT 损耗率(%),
update_time DATETIME NOT NULL COMMENT 更新时间,
UNIQUE KEY uk_date_product (stat_date, product_id)
);
```
2. 关键业务逻辑
```java
// 损耗计算服务示例
public class LossCalculationService {
// 计算单品损耗率
public BigDecimal calculateLossRate(BigDecimal lossQuantity, BigDecimal inStockQuantity) {
if (inStockQuantity.compareTo(BigDecimal.ZERO) == 0) {
return BigDecimal.ZERO;
}
return lossQuantity.multiply(new BigDecimal(100))
.divide(inStockQuantity, 2, RoundingMode.HALF_UP);
}
// 生成每日损耗统计
public void generateDailyStats() {
// 1. 查询当日所有损耗记录
List
records = lossRecordMapper.selectByDate(LocalDate.now());
// 2. 按商品分组汇总
Map statsMap = new HashMap<>();
for (LossRecord record : records) {
statsMap.computeIfAbsent(record.getProductId(),
k -> new LossStats(record.getProductId()))
.addRecord(record);
}
// 3. 保存统计结果
for (LossStats stats : statsMap.values()) {
lossDailyStatsMapper.insert(convertToDailyStats(stats));
}
}
// 异常损耗预警
public void checkLossAlert() {
LocalDate today = LocalDate.now();
List stats = lossDailyStatsMapper.selectByDate(today);
for (LossDailyStats stat : stats) {
// 查询该商品的历史平均损耗率
BigDecimal avgLossRate = getHistoricalAvgLossRate(stat.getProductId());
if (stat.getLossRate().compareTo(avgLossRate.multiply(new BigDecimal(1.5))) > 0) {
// 触发预警
sendLossAlert(stat);
}
}
}
}
```
3. 前端展示方案
损耗看板设计:
- 顶部:关键指标卡(总损耗金额、损耗率、高损耗商品TOP5)
- 中部:
- 损耗趋势图(折线图)
- 损耗类型占比(饼图)
- 部门/品类损耗对比(柱状图)
- 底部:损耗明细表格(支持筛选和导出)
示例Vue组件:
```javascript
title="今日总损耗"
:value="todayLossAmount"
unit="元"
icon="el-icon-money"/>
损耗趋势
损耗类型占比
损耗明细
```
四、实施步骤
1. 需求分析与设计(1周)
- 与业务部门确认损耗统计维度和计算规则
- 设计数据模型和接口规范
2. 系统开发(3-4周)
- 后端API开发(损耗记录、统计查询、预警规则等)
- 前端页面开发(损耗看板、明细查询、报损申请等)
- 定时任务开发(每日统计、预警检查)
3. 测试验证(1-2周)
- 单元测试、集成测试
- 业务场景验证
- 性能测试(大数据量下的统计查询)
4. 上线部署(1周)
- 灰度发布策略
- 数据迁移(如有历史数据需要导入)
- 用户培训
5. 运营优化(持续)
- 根据使用反馈调整统计维度和预警规则
- 优化查询性能
- 增加移动端支持
五、关键考虑因素
1. 数据准确性:
- 多环节数据校验机制
- 操作日志全程可追溯
- 定期数据核对流程
2. 系统性能:
- 大数据量下的统计优化(预计算、缓存)
- 异步处理耗时操作
- 分布式任务调度
3. 用户体验:
- 简洁直观的数据展示
- 灵活的筛选和导出功能
- 移动端适配
4. 扩展性:
- 支持自定义损耗类型和计算规则
- 开放API供其他系统调用
- 支持多组织架构
通过该功能的实现,美菜生鲜系统可以显著提升损耗管理的精细化水平,为采购决策、库存管理和运营优化提供有力的数据支持。