功能概述
临期商品提示功能旨在帮助小象买菜系统自动识别即将过期的商品,提醒商家及时处理,减少损耗并提升用户体验。
系统设计
1. 数据库设计
商品表(products)新增字段:
```sql
ALTER TABLE products ADD COLUMN expiration_date DATE COMMENT 保质期截止日期;
ALTER TABLE products ADD COLUMN warning_days INT DEFAULT 3 COMMENT 提前提醒天数;
```
临期商品记录表(expiring_products):
```sql
CREATE TABLE expiring_products (
id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
expiry_date DATE NOT NULL,
warning_date DATE NOT NULL,
status TINYINT DEFAULT 0 COMMENT 0-未处理 1-已处理,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (product_id) REFERENCES products(id)
);
```
2. 核心功能实现
2.1 临期商品检测服务
```java
// Java示例代码
public class ExpirationWarningService {
@Autowired
private ProductRepository productRepository;
@Autowired
private ExpiringProductRepository expiringProductRepository;
// 每日定时任务检测临期商品
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点执行
public void checkExpiringProducts() {
LocalDate today = LocalDate.now();
// 查询所有设置了保质期的商品
List
products = productRepository.findByExpirationDateIsNotNull();
for (Product product : products) {
LocalDate expiryDate = product.getExpirationDate().toLocalDate();
int warningDays = product.getWarningDays() != null ?
product.getWarningDays() : 3; // 默认3天提醒
LocalDate warningDate = expiryDate.minusDays(warningDays);
// 如果今天是提醒日且未记录过
if (today.equals(warningDate) &&
!expiringProductRepository.existsByProductIdAndExpiryDateAndWarningDate(
product.getId(), expiryDate, warningDate)) {
ExpiringProduct expiringProduct = new ExpiringProduct();
expiringProduct.setProductId(product.getId());
expiringProduct.setExpiryDate(expiryDate);
expiringProduct.setWarningDate(warningDate);
expiringProductRepository.save(expiringProduct);
// 发送提醒通知
sendWarningNotification(product);
}
}
}
private void sendWarningNotification(Product product) {
// 实现通知逻辑,如短信、邮件、站内信等
String message = String.format("商品[%s]将于%s到期,请及时处理",
product.getName(), product.getExpirationDate());
// 通知相关人员...
}
}
```
2.2 前端展示
管理后台临期商品列表页面:
```javascript
// Vue.js示例
export default {
data() {
return {
expiringProducts: [],
loading: false
}
},
created() {
this.fetchExpiringProducts();
},
methods: {
async fetchExpiringProducts() {
this.loading = true;
try {
const response = await axios.get(/api/expiring-products);
this.expiringProducts = response.data;
} catch (error) {
console.error(获取临期商品失败:, error);
} finally {
this.loading = false;
}
},
markAsHandled(productId) {
// 标记为已处理
axios.patch(`/api/expiring-products/${productId}/handle`)
.then(() => {
this.fetchExpiringProducts();
});
}
}
}
```
3. 通知机制
实现多种通知渠道:
1. 站内消息:在商家管理后台显示未读消息
2. 邮件通知:发送至商家注册邮箱
3. 短信通知:可选,发送至商家预留手机号
4. 企业微信/钉钉机器人:集成至工作群
关键技术点
1. 定时任务:使用Spring @Scheduled或Quartz实现每日检测
2. 日期计算:准确计算提醒日期(保质期-提醒天数)
3. 去重处理:避免同一商品重复提醒
4. 批量处理:支持批量标记已处理商品
5. 数据可视化:在仪表盘展示临期商品趋势
扩展功能
1. 自动促销:临期商品自动加入促销活动
2. 库存预警:结合库存数量和临期时间综合预警
3. 多级提醒:设置不同时间点的提醒级别(如7天、3天、1天)
4. 移动端适配:开发商家APP端的临期商品提醒
实施步骤
1. 数据库表结构设计
2. 后端API开发(检测、查询、处理接口)
3. 前端页面开发(管理后台)
4. 定时任务配置
5. 通知机制集成
6. 测试与上线
注意事项
1. 确保时区设置正确,避免日期计算错误
2. 考虑商品批次管理,不同批次可能有不同保质期
3. 实现数据备份机制,防止提醒记录丢失
4. 提供灵活的配置选项(提醒天数、通知方式等)
通过实现临期商品提示功能,小象买菜系统可以有效减少商品损耗,提升运营效率,同时增强商家对库存的管理能力。