一、需求分析 针对川味冻品行业特点,批量价格调整功能需要满足以下核心需求: 1.支持按品类、品牌、规格等多维度筛选商品 2.支持多种价格调整策略(固定金额、百分比、阶梯定价等) 3.支持价格调整的预览和确认机制 4.记录完整的价格调整历史 5.考虑冻品行业的特殊属性(如保质期
一、需求分析
针对川味冻品行业特点,批量价格调整功能需要满足以下核心需求:
1. 支持按品类、品牌、规格等多维度筛选商品
2. 支持多种价格调整策略(固定金额、百分比、阶梯定价等)
3. 支持价格调整的预览和确认机制
4. 记录完整的价格调整历史
5. 考虑冻品行业的特殊属性(如保质期、批次管理等)
二、系统架构设计
1. 数据库设计
```sql
-- 商品表扩展
ALTER TABLE products ADD COLUMN cost_price DECIMAL(10,2); -- 成本价
ALTER TABLE products ADD COLUMN last_price DECIMAL(10,2); -- 上次售价
ALTER TABLE products ADD COLUMN current_price DECIMAL(10,2); -- 当前售价
ALTER TABLE products ADD COLUMN price_adjust_rule VARCHAR(50); -- 价格调整规则
-- 价格调整记录表
CREATE TABLE price_adjust_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
adjust_no VARCHAR(32) NOT NULL COMMENT 调整单号,
adjust_type VARCHAR(20) COMMENT 调整类型(批量/单个),
adjust_strategy VARCHAR(50) COMMENT 调整策略,
operator VARCHAR(50) COMMENT 操作人,
adjust_time DATETIME COMMENT 调整时间,
status TINYINT DEFAULT 0 COMMENT 状态(0未执行 1已执行 2已撤销),
remark VARCHAR(255) COMMENT 备注
);
-- 价格调整明细表
CREATE TABLE price_adjust_detail (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
adjust_id BIGINT COMMENT 关联调整记录ID,
product_id BIGINT COMMENT 商品ID,
sku VARCHAR(50) COMMENT 商品SKU,
old_price DECIMAL(10,2) COMMENT 原价格,
new_price DECIMAL(10,2) COMMENT 新价格,
adjust_amount DECIMAL(10,2) COMMENT 调整金额,
adjust_percent DECIMAL(5,2) COMMENT 调整百分比,
batch_no VARCHAR(50) COMMENT 批次号(冻品特有)
);
```
2. 核心功能模块
1. 价格调整策略引擎
```java
public interface PriceAdjustStrategy {
void adjustPrice(List
products, Map params);
}
// 固定金额调整策略
public class FixedAmountStrategy implements PriceAdjustStrategy {
@Override
public void adjustPrice(List products, Map params) {
BigDecimal amount = new BigDecimal(params.get("amount").toString());
products.forEach(p -> {
p.setCurrentPrice(p.getCurrentPrice().add(amount));
});
}
}
// 百分比调整策略
public class PercentageStrategy implements PriceAdjustStrategy {
@Override
public void adjustPrice(List products, Map params) {
BigDecimal percent = new BigDecimal(params.get("percent").toString()).divide(new BigDecimal(100));
products.forEach(p -> {
p.setCurrentPrice(p.getCurrentPrice().multiply(BigDecimal.ONE.add(percent)));
});
}
}
// 阶梯定价策略(根据成本价区间)
public class TieredPricingStrategy implements PriceAdjustStrategy {
@Override
public void adjustPrice(List products, Map params) {
// 实现基于成本价区间的阶梯定价逻辑
}
}
```
2. 批量价格调整服务
```java
@Service
public class BatchPriceAdjustService {
@Autowired
private ProductRepository productRepository;
@Autowired
private PriceAdjustHistoryRepository historyRepository;
@Autowired
private PriceAdjustDetailRepository detailRepository;
@Transactional
public String executeBatchAdjust(PriceAdjustRequest request) {
// 1. 验证参数
validateRequest(request);
// 2. 查询符合条件的商品
List products = productRepository.findByConditions(
request.getCategoryIds(),
request.getBrandIds(),
request.getMinPrice(),
request.getMaxPrice()
);
// 3. 创建调整记录
PriceAdjustHistory history = createAdjustHistory(request);
historyRepository.save(history);
// 4. 执行价格调整
PriceAdjustStrategy strategy = getStrategy(request.getStrategyType());
strategy.adjustPrice(products, request.getParams());
// 5. 保存调整明细
List details = products.stream()
.map(p -> createDetail(history.getId(), p))
.collect(Collectors.toList());
detailRepository.saveAll(details);
// 6. 更新商品价格
productRepository.batchUpdatePrices(products);
return history.getAdjustNo();
}
// 其他辅助方法...
}
```
三、冻品行业特殊考虑
1. 批次管理集成
- 在价格调整时考虑不同批次成本差异
- 支持按批次单独调整价格
2. 保质期影响定价
- 临近保质期的商品自动触发折扣策略
- 实现保质期阶梯定价规则
3. 季节性价格波动
- 集成节日定价策略(如春节、端午节等)
- 支持季节性价格模板
四、前端实现要点
1. 价格调整工作台
```javascript
// 价格调整表单示例
const priceAdjustForm = {
adjustType: batch, // 批量/单个
strategyType: percentage, // 调整策略
conditions: {
categories: [1, 2, 3], // 分类ID
brands: [101, 102], // 品牌ID
minPrice: 0, // 最低价格
maxPrice: 100 // 最高价格
},
params: {
percent: 10, // 百分比调整值
roundRule: 0.99 // 尾数处理规则
},
effectiveTime: 2023-12-01 00:00:00, // 生效时间
remark: 冬季促销价格调整
}
```
2. 价格调整预览
```javascript
// 模拟价格调整预览
function previewPriceAdjust(formData) {
const products = mockProducts.filter(p =>
formData.conditions.categories.includes(p.categoryId) &&
formData.conditions.brands.includes(p.brandId) &&
p.price >= formData.conditions.minPrice &&
p.price <= formData.conditions.maxPrice
);
return products.map(p => {
let newPrice = p.price;
switch(formData.strategyType) {
case fixed:
newPrice = p.price + formData.params.amount;
break;
case percentage:
newPrice = p.price * (1 + formData.params.percent/100);
break;
// 其他策略...
}
// 尾数处理
if(formData.params.roundRule) {
newPrice = Math.floor(newPrice / formData.params.roundRule) * formData.params.roundRule;
}
return {
productId: p.id,
sku: p.sku,
productName: p.name,
oldPrice: p.price,
newPrice: newPrice,
adjustAmount: newPrice - p.price
};
});
}
```
五、实施建议
1. 分阶段实施
- 第一阶段:实现基础批量价格调整功能
- 第二阶段:集成冻品行业特殊规则
- 第三阶段:优化用户体验和性能
2. 数据安全
- 价格调整前自动备份数据
- 实现调整记录的可追溯性
- 重要调整需二次确认
3. 性能优化
- 对大批量商品调整采用异步处理
- 实现价格调整的批量SQL操作
- 添加适当的索引优化查询性能
4. 测试方案
- 单元测试:覆盖各种调整策略
- 集成测试:测试完整业务流程
- 压力测试:模拟大批量商品调整
通过以上方案,可以构建一个符合川味冻品行业特点的批量价格调整系统,既满足日常价格管理需求,又能处理冻品行业的特殊业务场景。