一、需求分析
针对川味冻品行业的批量价格调整需求,系统需要实现以下核心功能:
1. 批量选择商品:支持按品类、品牌、规格等多维度筛选冻品
2. 灵活调整策略:支持百分比调整、固定金额调整、阶梯定价等
3. 价格规则管理:可设置促销价、会员价、渠道价等不同价格体系
4. 历史追溯:记录每次价格调整的操作日志
5. 权限控制:不同角色拥有不同的价格调整权限
二、系统架构设计
1. 数据库设计
```sql
-- 商品主表
CREATE TABLE product (
id BIGINT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category_id BIGINT,
brand_id BIGINT,
spec VARCHAR(50),
base_price DECIMAL(10,2),
-- 其他字段...
);
-- 价格调整记录表
CREATE TABLE price_adjustment_log (
id BIGINT PRIMARY KEY,
adjustment_id VARCHAR(32) NOT NULL,
product_ids TEXT, -- JSON数组存储商品ID
adjustment_type TINYINT, -- 1:百分比 2:固定金额
adjustment_value DECIMAL(10,2),
operator_id BIGINT,
operate_time DATETIME,
status TINYINT, -- 0:未执行 1:已执行 2:已撤销
-- 其他字段...
);
-- 价格历史表
CREATE TABLE product_price_history (
id BIGINT PRIMARY KEY,
product_id BIGINT,
price DECIMAL(10,2),
effective_date DATETIME,
adjustment_id VARCHAR(32),
-- 其他字段...
);
```
2. 核心功能模块
1. 商品筛选模块
- 支持多条件组合查询(品类、品牌、库存状态等)
- 批量选择商品(全选、部分选择)
2. 价格调整策略模块
```java
public interface PriceAdjustmentStrategy {
void adjustPrice(List
products, AdjustmentParam param);
}
// 百分比调整实现
public class PercentageAdjustment implements PriceAdjustmentStrategy {
@Override
public void adjustPrice(List products, AdjustmentParam param) {
double percentage = param.getPercentage();
products.forEach(p -> {
p.setPrice(p.getPrice() * (1 + percentage/100));
});
}
}
```
3. 价格计算服务
```java
@Service
public class PriceCalculationService {
@Autowired
private ProductRepository productRepository;
@Transactional
public void batchAdjustPrices(AdjustmentRequest request) {
// 1. 验证权限
// 2. 获取商品列表
List products = productRepository.findByIdIn(request.getProductIds());
// 3. 执行价格调整
PriceAdjustmentStrategy strategy = getStrategy(request.getType());
strategy.adjustPrice(products, request.getParam());
// 4. 保存历史记录
saveAdjustmentLog(request, products);
// 5. 更新商品价格
productRepository.saveAll(products);
}
}
```
三、批量价格调整实现方案
1. 前端实现
- 商品选择表格(支持多选)
- 调整策略选择下拉框
- 调整参数输入(百分比/固定金额)
- 预览功能(显示调整前后价格对比)
- 批量操作确认弹窗
2. 后端实现
1. RESTful API设计
```
POST /api/price-adjustments/batch
Request Body:
{
"productIds": [1,2,3,4],
"adjustmentType": "PERCENTAGE", // 或 FIXED
"adjustmentValue": 10, // 百分比或固定金额
"effectiveDate": "2023-11-15",
"reason": "季节性促销"
}
```
2. 批量处理优化
- 使用分批处理(如每次100条)避免内存溢出
- 异步处理大批量调整(使用消息队列)
- 事务管理确保数据一致性
3. 关键代码示例
```java
// 批量处理服务
@Service
public class BatchPriceAdjustmentService {
@Autowired
private ProductRepository productRepository;
@Autowired
private PriceAdjustmentLogRepository logRepository;
private static final int BATCH_SIZE = 100;
@Transactional
public void executeBatchAdjustment(AdjustmentRequest request) {
List productIds = request.getProductIds();
int total = productIds.size();
int processed = 0;
while (processed < total) {
int end = Math.min(processed + BATCH_SIZE, total);
List batchIds = productIds.subList(processed, end);
List batch = productRepository.findByIdIn(batchIds);
// 执行调整
PriceAdjustmentStrategy strategy = StrategyFactory.getStrategy(request.getType());
strategy.adjust(batch, request.getValue());
// 保存批次
productRepository.saveAll(batch);
processed += batch.size();
// 记录日志(实际项目中可使用异步方式)
saveLogChunk(request, batchIds, processed, total);
}
}
private void saveLogChunk(AdjustmentRequest request, List batchIds,
int processed, int total) {
// 简化版日志记录
PriceAdjustmentLog log = new PriceAdjustmentLog();
log.setAdjustmentId(UUID.randomUUID().toString());
log.setProductIds(batchIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
log.setAdjustmentType(request.getType().ordinal());
log.setAdjustmentValue(request.getValue());
// 其他字段设置...
logRepository.save(log);
}
}
```
四、川味冻品行业特殊考虑
1. 季节性价格调整:针对火锅食材等季节性产品,可预设季节性价格模板
2. 区域价格差异:支持按区域设置不同价格策略
3. 保质期影响:临近保质期的冻品可设置自动降价规则
4. 组合商品定价:针对川味火锅套餐等组合商品提供特殊定价逻辑
五、测试与部署
1. 测试用例:
- 小批量商品价格调整
- 大批量商品(10万+)性能测试
- 不同调整策略的边界测试
- 并发操作测试
2. 部署方案:
- 蓝绿部署或金丝雀发布
- 数据库分表策略(如按商品ID哈希分表)
- 缓存策略(Redis缓存常用价格)
六、扩展功能建议
1. 智能调价引擎:基于历史销售数据和市场价格自动建议调整幅度
2. 价格预警系统:当价格偏离市场平均水平时发出警报
3. 多渠道价格管理:针对不同销售渠道(线上/线下)设置不同价格
4. 价格审批流程:大额价格调整需多级审批
通过以上方案,可实现川味冻品系统高效、灵活的批量价格调整功能,满足行业特殊需求的同时保证系统稳定性和数据准确性。