一、功能概述
美菜生鲜系统批量操作功能旨在提高生鲜供应链管理效率,允许用户对多个商品、订单或库存项进行同时操作,减少重复性工作,提升操作效率。
二、核心批量操作功能模块
1. 商品管理批量操作
- 批量上下架:支持勾选多个商品一键上架或下架
- 批量修改价格:统一调整选中商品的价格(可设置百分比或固定值)
- 批量修改库存:统一增加或减少库存数量
- 批量导入导出:支持Excel模板批量导入商品信息
- 批量分类调整:修改多个商品的分类归属
2. 订单管理批量操作
- 批量发货:对多个订单统一标记发货状态
- 批量打印:同时打印多个订单的运单或发票
- 批量取消:取消多个未处理订单
- 批量备注:为多个订单添加相同备注信息
3. 库存管理批量操作
- 批量盘点:对多个SKU进行库存盘点
- 批量调拨:在不同仓库间批量调拨商品
- 批量报废:标记多个商品为报废状态
三、技术实现方案
1. 前端实现
```javascript
// Vue.js示例:批量选择组件
:data="goodsList"
@selection-change="handleSelectionChange"
>
type="selection"
width="55">
批量改价
批量上下架
<script>
export default {
data() {
return {
selectedGoods: [],
goodsList: [] // 从API获取的商品列表
}
},
methods: {
handleSelectionChange(val) {
this.selectedGoods = val;
},
batchUpdatePrice() {
if (this.selectedGoods.length === 0) {
this.$message.warning(请至少选择一项);
return;
}
// 调用批量改价API
},
// 其他批量操作方法...
}
}
```
2. 后端实现(Spring Boot示例)
```java
@RestController
@RequestMapping("/api/batch")
public class BatchOperationController {
@Autowired
private GoodsService goodsService;
@PostMapping("/update/price")
public Result batchUpdatePrice(@RequestBody BatchPriceUpdateDTO dto) {
// 参数校验
if (dto.getGoodsIds() == null || dto.getGoodsIds().isEmpty()) {
return Result.fail("未选择商品");
}
// 业务逻辑处理
goodsService.batchUpdatePrice(dto.getGoodsIds(), dto.getPriceType(), dto.getValue());
return Result.success();
}
@PostMapping("/update/status")
public Result batchUpdateStatus(@RequestBody BatchStatusUpdateDTO dto) {
// 类似实现...
}
}
@Service
public class GoodsServiceImpl implements GoodsService {
@Override
@Transactional
public void batchUpdatePrice(List
goodsIds, String priceType, BigDecimal value) {
// 根据priceType判断是百分比调整还是固定值调整
if ("percentage".equals(priceType)) {
// 百分比调整逻辑
goodsIds.forEach(id -> {
Goods goods = goodsMapper.selectById(id);
BigDecimal newPrice = goods.getPrice().multiply(value.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
goodsMapper.updatePrice(id, newPrice);
});
} else {
// 固定值调整逻辑
goodsIds.forEach(id -> goodsMapper.updatePrice(id, value));
}
}
}
```
3. 数据库设计优化
```sql
-- 批量操作日志表
CREATE TABLE batch_operation_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
operation_type VARCHAR(50) NOT NULL COMMENT 操作类型,
operator_id BIGINT NOT NULL COMMENT 操作人ID,
operator_name VARCHAR(50) NOT NULL COMMENT 操作人姓名,
operation_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 操作时间,
affected_count INT NOT NULL COMMENT 影响记录数,
status TINYINT NOT NULL DEFAULT 0 COMMENT 状态:0-进行中,1-成功,2-失败,
error_msg TEXT COMMENT 错误信息,
params JSON COMMENT 操作参数
);
-- 商品表添加批量操作相关字段(可选)
ALTER TABLE goods ADD COLUMN last_batch_op_time DATETIME COMMENT 最后批量操作时间;
```
三、关键技术点
1. 高性能批量处理:
- 使用MyBatis的`foreach`标签实现批量SQL
- 考虑使用批量插入/更新API(如JDBC的`addBatch()`)
2. 事务管理:
- 确保批量操作的原子性
- 合理设置事务隔离级别
3. 并发控制:
- 添加乐观锁版本控制
- 防止并发修改导致的数据不一致
4. 异步处理:
- 对于大数据量操作,采用异步任务+进度查询模式
- 使用消息队列解耦
5. 操作日志:
- 记录所有批量操作的详细信息
- 支持操作回滚和审计
四、安全与权限控制
1. 操作权限校验:
- 验证用户是否有批量操作权限
- 验证用户对操作对象的权限
2. 数据校验:
- 前端和后端双重校验
- 防止SQL注入和XSS攻击
3. 操作确认:
- 二次确认对话框
- 显示预计影响范围
五、测试方案
1. 单元测试:
- 测试批量操作的核心逻辑
- 测试边界条件和异常情况
2. 集成测试:
- 测试批量操作与数据库的交互
- 测试事务处理是否正确
3. 性能测试:
- 模拟大数据量下的批量操作
- 测试系统响应时间和资源占用
4. 用户验收测试:
- 邀请实际用户测试操作流程
- 收集反馈优化体验
六、部署与监控
1. 灰度发布:
- 先在小范围用户中测试新功能
- 逐步扩大用户范围
2. 监控指标:
- 批量操作成功率
- 平均处理时间
- 失败率
3. 报警机制:
- 批量操作失败率过高时报警
- 处理时间过长时报警
通过以上方案,可以实现美菜生鲜系统高效、稳定、安全的批量操作功能,显著提升生鲜供应链管理效率。