一、需求分析 针对川味冻品行业特点,批量价格调整功能需要满足以下核心需求: 1.支持按品类、品牌、规格等多维度筛选商品 2.实现多种价格调整策略(固定金额调整、百分比调整、阶梯定价等) 3.确保价格调整的准确性和可追溯性 4.考虑冻品行业特有的价格波动因素(如季节性、原材料成本
一、需求分析
针对川味冻品行业特点,批量价格调整功能需要满足以下核心需求:
1. 支持按品类、品牌、规格等多维度筛选商品
2. 实现多种价格调整策略(固定金额调整、百分比调整、阶梯定价等)
3. 确保价格调整的准确性和可追溯性
4. 考虑冻品行业特有的价格波动因素(如季节性、原材料成本等)
二、系统架构设计
1. 数据库设计
```sql
-- 商品表扩展
ALTER TABLE products ADD COLUMN cost_price DECIMAL(10,2); -- 成本价
ALTER TABLE products ADD COLUMN last_price_adjust_date DATETIME; -- 上次调价时间
-- 价格调整记录表
CREATE TABLE price_adjust_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
adjust_name VARCHAR(100) NOT NULL COMMENT 调价名称,
adjust_type TINYINT NOT NULL COMMENT 1-固定金额 2-百分比 3-阶梯定价,
adjust_value DECIMAL(10,2) NOT NULL COMMENT 调整值,
adjust_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
operator_id BIGINT NOT NULL COMMENT 操作人ID,
status TINYINT DEFAULT 1 COMMENT 1-生效 0-失效,
remark VARCHAR(500) COMMENT 备注
);
-- 价格调整明细表
CREATE TABLE price_adjust_details (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
record_id BIGINT NOT NULL COMMENT 关联调价记录ID,
product_id BIGINT NOT NULL COMMENT 商品ID,
original_price DECIMAL(10,2) NOT NULL COMMENT 原价,
adjusted_price DECIMAL(10,2) NOT NULL COMMENT 调整后价格,
adjust_amount DECIMAL(10,2) NOT NULL COMMENT 调整金额,
FOREIGN KEY (record_id) REFERENCES price_adjust_records(id)
);
```
2. 核心功能模块
1. 调价策略引擎
```java
public interface PriceAdjustStrategy {
BigDecimal calculateNewPrice(BigDecimal originalPrice, BigDecimal adjustValue);
}
// 固定金额策略
public class FixedAmountStrategy implements PriceAdjustStrategy {
@Override
public BigDecimal calculateNewPrice(BigDecimal originalPrice, BigDecimal adjustValue) {
return originalPrice.add(adjustValue);
}
}
// 百分比策略
public class PercentageStrategy implements PriceAdjustStrategy {
@Override
public BigDecimal calculateNewPrice(BigDecimal originalPrice, BigDecimal adjustValue) {
return originalPrice.multiply(BigDecimal.ONE.add(adjustValue.divide(new BigDecimal(100))));
}
}
// 阶梯定价策略(示例:满100减10)
public class TieredStrategy implements PriceAdjustStrategy {
@Override
public BigDecimal calculateNewPrice(BigDecimal originalPrice, BigDecimal adjustValue) {
// 实现阶梯计算逻辑
// ...
}
}
```
2. 批量调价服务
```java
@Service
public class BatchPriceAdjustService {
@Autowired
private ProductRepository productRepository;
@Autowired
private PriceAdjustRecordRepository recordRepository;
@Autowired
private PriceAdjustDetailRepository detailRepository;
@Transactional
public BatchPriceAdjustResult batchAdjust(PriceAdjustRequest request) {
// 1. 查询符合条件的商品
List
products = productRepository.findByCriteria(request.getCriteria());
// 2. 创建调价记录
PriceAdjustRecord record = new PriceAdjustRecord();
record.setAdjustName(request.getAdjustName());
record.setAdjustType(request.getAdjustType());
record.setAdjustValue(request.getAdjustValue());
record.setOperatorId(request.getOperatorId());
recordRepository.save(record);
// 3. 根据策略计算新价格
PriceAdjustStrategy strategy = getStrategy(request.getAdjustType());
List details = new ArrayList<>();
for (Product product : products) {
BigDecimal originalPrice = product.getPrice();
BigDecimal newPrice = strategy.calculateNewPrice(originalPrice, request.getAdjustValue());
// 验证价格合理性(如不能低于成本价)
if (newPrice.compareTo(product.getCostPrice()) < 0) {
throw new BusinessException("商品" + product.getName() + "调整后价格低于成本价");
}
PriceAdjustDetail detail = new PriceAdjustDetail();
detail.setRecordId(record.getId());
detail.setProductId(product.getId());
detail.setOriginalPrice(originalPrice);
detail.setAdjustedPrice(newPrice);
detail.setAdjustAmount(newPrice.subtract(originalPrice));
details.add(detail);
// 更新商品价格
product.setPrice(newPrice);
product.setLastPriceAdjustDate(new Date());
}
productRepository.saveAll(products);
detailRepository.saveAll(details);
return new BatchPriceAdjustResult(record.getId(), details.size());
}
private PriceAdjustStrategy getStrategy(Integer adjustType) {
switch (adjustType) {
case 1: return new FixedAmountStrategy();
case 2: return new PercentageStrategy();
// case 3: return new TieredStrategy();
default: throw new IllegalArgumentException("不支持的调价类型");
}
}
}
```
三、关键实现细节
1. 价格调整策略选择
- 前端提供可视化策略选择界面
- 后端根据选择动态加载对应策略实现
2. 价格调整范围控制
- 支持多条件组合筛选:
```java
public interface ProductCriteria {
List getCategoryIds();
List getBrandIds();
BigDecimal getMinPrice();
BigDecimal getMaxPrice();
Date getLastAdjustDateStart();
Date getLastAdjustDateEnd();
// 其他筛选条件...
}
```
3. 价格调整预览功能
- 在执行前展示调整后的价格变化
- 支持导出预览报表
4. 价格调整历史追溯
- 完整记录每次调价的操作人、时间、策略和明细
- 提供调价历史查询接口
四、冻品行业特殊考虑
1. 季节性价格波动处理
- 可添加季节性调价策略,自动根据预设规则调整价格
- 示例:夏季冷冻食品价格上浮5%
2. 原材料价格联动
- 与原材料成本表关联,当成本变动超过阈值时自动触发调价
3. 保质期影响定价
- 对临近保质期的商品自动应用折扣策略
五、系统测试要点
1. 边界值测试
- 测试价格调整到成本价的情况
- 测试大额价格调整(如1000%调整)
2. 并发测试
- 模拟多用户同时调价的情况
- 确保价格计算的原子性
3. 数据一致性测试
- 验证商品表、调价记录表和明细表的数据一致性
- 测试回滚场景
六、部署与运维
1. 灰度发布策略
- 先在小范围商品上测试新调价功能
- 逐步扩大到全品类
2. 监控指标
- 调价操作成功率
- 平均调价处理时间
- 异常调价操作次数
3. 应急预案
- 准备价格回滚脚本
- 建立紧急调价绿色通道
通过以上设计,可以实现一个灵活、可靠且符合川味冻品行业特点的批量价格调整系统,帮助企业高效管理价格策略,应对市场变化。