功能概述
临期商品提示功能旨在帮助小象买菜系统自动识别即将过期的商品,并及时提醒商家和顾客,减少食品浪费并提高顾客满意度。
系统设计
1. 数据库设计
商品表(products)新增字段:
```sql
ALTER TABLE products ADD COLUMN production_date DATE;
ALTER TABLE products ADD COLUMN expiry_date DATE;
ALTER TABLE products ADD COLUMN shelf_life_days INT; -- 保质期天数(可选)
ALTER TABLE products ADD COLUMN is_near_expiry BOOLEAN DEFAULT FALSE;
ALTER TABLE products ADD COLUMN expiry_alert_sent BOOLEAN DEFAULT FALSE;
```
2. 核心功能模块
2.1 临期商品计算服务
```java
public class ExpiryAlertService {
// 配置临期阈值(天)
private static final int NEAR_EXPIRY_THRESHOLD = 7;
/
* 检查并更新临期商品状态
*/
public void checkNearExpiryProducts() {
LocalDate today = LocalDate.now();
List
products = productRepository.findAll();
for (Product product : products) {
if (product.getExpiryDate() != null) {
long daysUntilExpiry = ChronoUnit.DAYS.between(today, product.getExpiryDate());
// 更新临期状态
boolean isNearExpiry = daysUntilExpiry <= NEAR_EXPIRY_THRESHOLD && daysUntilExpiry >= 0;
if (product.getIsNearExpiry() != isNearExpiry) {
product.setIsNearExpiry(isNearExpiry);
productRepository.save(product);
// 如果是新成为临期商品,发送通知
if (isNearExpiry && !product.getExpiryAlertSent()) {
sendExpiryAlert(product);
product.setExpiryAlertSent(true);
productRepository.save(product);
}
}
}
}
}
private void sendExpiryAlert(Product product) {
// 发送通知给商家和/或顾客
// 可以实现邮件、短信、站内信等多种通知方式
}
}
```
2.2 定时任务配置
使用Spring的@Scheduled注解实现每日定时检查:
```java
@Component
public class ScheduledTasks {
@Autowired
private ExpiryAlertService expiryAlertService;
// 每天凌晨1点执行临期商品检查
@Scheduled(cron = "0 0 1 * * ?")
public void dailyNearExpiryCheck() {
expiryAlertService.checkNearExpiryProducts();
}
}
```
3. 前端展示
3.1 商家管理端
- 临期商品列表页面,显示所有临期商品及其过期倒计时
- 可按过期时间排序和筛选
- 批量处理临期商品(如打折、下架等)
```javascript
// React示例组件
function NearExpiryProducts() {
const [products, setProducts] = useState([]);
useEffect(() => {
fetch(/api/products/near-expiry)
.then(res => res.json())
.then(data => setProducts(data));
}, []);
return (
临期商品管理
商品名称 |
过期日期 |
剩余天数 |
操作 |
|---|
{products.map(product => (
{product.name} |
{formatDate(product.expiryDate)} |
{product.daysUntilExpiry}天 |
|
))}
);
}
```
3.2 顾客端
- 在商品详情页显示保质期信息
- 搜索结果中标记临期商品
- 临期商品专区或筛选选项
```javascript
// 商品详情页显示保质期信息
function ProductDetail({ product }) {
return (
{product.name}
{product.expiryDate && (
保质期至: {formatDate(product.expiryDate)}
{isNearExpiry(product.expiryDate) && (
临期商品
)}
)}
{/* 其他商品信息 */}
);
}
```
4. 通知系统实现
4.1 邮件通知模板
```html
临期商品提醒
尊敬的商家,以下商品即将过期,请及时处理:
{{ each products}}
{{this.name}} - 过期日期: {{this.expiryDate}} (剩余{{this.daysUntilExpiry}}天)
{{/each}}
小象买菜系统
```
4.2 短信通知服务
```java
public class SmsNotificationService {
public void sendNearExpiryAlert(Product product) {
String message = String.format(
"【小象买菜】提醒:商品%s将于%s到期,剩余%d天,请及时处理",
product.getName(),
product.getExpiryDate().toString(),
calculateDaysUntilExpiry(product.getExpiryDate())
);
// 调用短信API发送消息
smsApi.send(product.getMerchantPhone(), message);
}
}
```
高级功能扩展
1. 智能促销建议:根据临期商品数量和保质期,自动生成打折建议
2. 批量处理功能:一键对临期商品进行打折、组合销售或捐赠处理
3. 库存预警:结合临期商品和库存量,预测可能的损耗
4. 顾客端提醒:允许顾客选择接收临期商品优惠通知
5. 数据分析:统计临期商品比例,帮助优化采购策略
实施步骤
1. 数据库字段添加和迁移
2. 后端服务开发(临期计算、通知发送)
3. 定时任务配置
4. 商家管理端界面开发
5. 顾客端界面调整
6. 通知系统集成
7. 测试与上线
注意事项
1. 确保时区设置正确,避免日期计算错误
2. 考虑节假日对临期商品处理的影响
3. 实现通知去重,避免重复发送
4. 提供商家配置选项,允许自定义临期阈值和通知方式
5. 考虑性能影响,特别是商品数量大时的计算效率
通过实现临期商品提示功能,小象买菜系统可以有效减少食品浪费,提高顾客满意度,同时帮助商家优化库存管理。