一、冻品保质期管理核心需求
1. 精准保质期追踪:记录每个批次的冻品生产日期、保质期天数、到期提醒
2. 先进先出(FIFO)管理:确保先入库的商品优先出库
3. 临期预警机制:设置不同级别的预警阈值(如30天、15天、7天)
4. 批次管理:支持多批次同商品管理,区分不同供应商/生产日期的商品
二、基于万象源码的部署方案
1. 源码架构设计
```
/冻品保质期管理系统
├── /api (后端服务)
│ ├── /controllers (保质期相关接口)
│ ├── /models (商品批次模型)
│ ├── /services (保质期计算服务)
│ └── /utils (日期计算工具)
├── /miniprogram (小程序前端)
│ ├── /pages/inventory (库存管理页面)
│ ├── /pages/expiry-alert (临期预警页面)
│ └── /components/batch-selector (批次选择组件)
└── /admin (管理后台)
├── /batch-management (批次管理)
└── /alert-settings (预警设置)
```
2. 关键功能实现
保质期计算服务
```javascript
// services/expiryService.js
class ExpiryService {
// 计算剩余保质期(天)
calculateRemainingDays(productionDate, shelfLifeDays) {
const today = new Date();
const prodDate = new Date(productionDate);
const expiryDate = new Date(prodDate);
expiryDate.setDate(prodDate.getDate() + shelfLifeDays);
const diffTime = expiryDate - today;
return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
}
// 检查是否临期
checkIsNearExpiry(remainingDays, thresholdDays) {
return remainingDays <= thresholdDays;
}
}
```
批次管理模型
```javascript
// models/batch.js
const mongoose = require(mongoose);
const batchSchema = new mongoose.Schema({
productId: { type: mongoose.Schema.Types.ObjectId, ref: Product },
batchNumber: String,
productionDate: Date,
expiryDate: Date,
quantity: Number,
supplier: String,
status: { // 正常/临期/过期
type: String,
enum: [normal, near-expiry, expired],
default: normal
},
createdAt: { type: Date, default: Date.now }
});
// 预保存钩子,自动计算过期日期
batchSchema.pre(save, function(next) {
if (this.productionDate && this.shelfLifeDays) {
const prodDate = new Date(this.productionDate);
this.expiryDate = new Date(prodDate);
this.expiryDate.setDate(prodDate.getDate() + this.shelfLifeDays);
}
next();
}
```
3. 小程序端实现
库存页面(显示保质期状态)
```javascript
// pages/inventory/inventory.js
Page({
data: {
inventoryList: []
},
onLoad() {
this.loadInventoryWithExpiryStatus();
},
loadInventoryWithExpiryStatus() {
wx.request({
url: /api/inventory/with-expiry,
success: (res) => {
const processedData = res.data.map(item => {
const remainingDays = this.calculateRemainingDays(item);
let status = normal;
if (remainingDays <= 7) status = expired;
else if (remainingDays <= 30) status = near-expiry;
return {
...item,
remainingDays,
status
};
});
this.setData({ inventoryList: processedData });
}
});
},
calculateRemainingDays(item) {
const today = new Date();
const expiryDate = new Date(item.expiryDate);
return Math.ceil((expiryDate - today) / (1000 * 60 * 60 * 24));
}
});
```
三、过期避免策略
1. 智能预警系统:
- 设置三级预警:30天(黄色预警)、15天(橙色预警)、7天(红色预警)
- 预警信息通过小程序消息、短信、邮件多渠道推送
2. 库存周转优化:
```javascript
// 出库时优先选择临期商品
function selectBatchForOutbound(productId) {
return Batch.find({
productId,
status: normal,
expiryDate: { $gte: new Date() } // 未过期
}).sort({ expiryDate: 1 }).limit(1); // 按过期日期升序排列
}
```
3. 自动化处理流程:
- 过期前7天自动冻结销售
- 过期后自动生成报损单
- 临期商品自动加入促销活动
四、部署与维护建议
1. 定时任务设置:
- 使用云函数设置每日凌晨执行的保质期检查任务
- 示例云函数代码:
```javascript
// 云函数:每日保质期检查
exports.main = async (event, context) => {
const batches = await Batch.find({
expiryDate: { $lte: new Date(Date.now() + 30*24*60*60*1000) } // 30天内到期
});
batches.forEach(batch => {
// 更新状态并发送通知
});
return { success: true };
};
```
2. 数据可视化:
- 在管理后台添加保质期分布图表
- 显示各保质期区间的库存占比
3. 操作审计:
- 记录所有涉及保质期修改的操作日志
- 设置敏感操作双人复核机制
五、实施步骤
1. 环境准备:
- 部署Node.js后端服务
- 配置MongoDB数据库
- 设置小程序开发环境
2. 源码部署:
```bash
克隆仓库
git clone https://github.com/your-repo/frozen-goods-expiry.git
cd frozen-goods-expiry
安装依赖
npm install
配置环境变量
cp .env.example .env
编辑.env文件配置数据库等
启动服务
npm start
```
3. 初始化数据:
- 导入基础商品数据
- 设置保质期预警阈值
- 配置通知渠道
4. 测试验证:
- 模拟不同保质期状态的商品入库
- 验证预警通知是否按时发送
- 测试出库时是否优先选择临期商品
六、扩展功能建议
1. 供应商协同:
- 供应商可查看自己商品的保质期状态
- 自动生成临期商品退货单
2. 智能补货:
- 根据保质期消耗速度预测补货时机
- 避免因补货过早导致的新库存积压
3. 多级库存预警:
- 设置仓库级、区域级、总部的多级预警
- 不同级别人员接收不同粒度的预警
通过以上方案,基于万象源码部署的冻品保质期管理系统能够实现全生命周期的保质期管控,有效避免商品过期风险,同时提高库存周转效率。