一、功能概述
订单批量打印是生鲜电商系统中提高订单处理效率的关键功能,特别适用于美菜这类B2B生鲜配送平台。该功能允许运营人员一次性选择多个订单,生成合并的打印模板,减少人工操作时间,提升分拣和配送效率。
二、技术实现方案
1. 前端实现
```javascript
// Vue.js示例代码
:data="orderList"
@selection-change="handleSelectionChange"
style="width: 100%">
type="selection"
width="55">
type="primary"
@click="batchPrint"
:disabled="selectedOrders.length === 0">
批量打印({{selectedOrders.length}})
<script>
export default {
data() {
return {
orderList: [], // 订单列表
selectedOrders: [] // 选中的订单
}
},
methods: {
handleSelectionChange(val) {
this.selectedOrders = val;
},
async batchPrint() {
try {
const response = await this.$http.post(/api/order/batch-print, {
orderIds: this.selectedOrders.map(o => o.id)
});
// 调用浏览器打印功能
const printWindow = window.open(, _blank);
printWindow.document.write(response.data.printHtml);
printWindow.document.close();
printWindow.focus();
printWindow.print();
printWindow.close();
} catch (error) {
this.$message.error(批量打印失败);
}
}
}
}
```
2. 后端实现
Java Spring Boot示例
```java
@RestController
@RequestMapping("/api/order")
public class OrderPrintController {
@Autowired
private OrderService orderService;
@PostMapping("/batch-print")
public ResponseEntity<?> batchPrint(@RequestBody BatchPrintRequest request) {
// 1. 验证订单是否存在
List
orders = orderService.findByIds(request.getOrderIds());
if (orders.size() != request.getOrderIds().size()) {
return ResponseEntity.badRequest().body("部分订单不存在");
}
// 2. 生成打印HTML
String printHtml = orderPrintService.generateBatchPrintHtml(orders);
// 3. 返回打印内容
return ResponseEntity.ok(Map.of(
"printHtml", printHtml,
"success", true
));
}
}
@Service
public class OrderPrintService {
public String generateBatchPrintHtml(List orders) {
// 使用Thymeleaf或Freemarker模板引擎生成HTML
// 或者直接拼接HTML字符串
StringBuilder html = new StringBuilder();
html.append("");
html.append("<style>").append(getPrintStyles()).append("");
html.append("");
// 按配送路线或仓库分组
Map> groupedOrders = orders.stream()
.collect(Collectors.groupingBy(Order::getDeliveryRoute));
groupedOrders.forEach((route, routeOrders) -> {
html.append("");
html.append("
配送路线: ").append(route).append("
");
routeOrders.forEach(order -> {
html.append("
");
html.append("
订单号: ").append(order.getOrderNo()).append("
");
html.append("
客户: ").append(order.getCustomerName()).append("
");
html.append("
地址: ").append(order.getDeliveryAddress()).append("
");
// 添加商品列表
html.append("
");
order.getItems().forEach(item -> {
html.append("");
html.append("").append(item.getProductName()).append(" | ");
html.append("").append(item.getQuantity()).append(item.getUnit()).append(" | ");
html.append("
");
});
html.append("
");
html.append("
");
});
html.append("
");
html.append(""); // 分页符
});
html.append("");
return html.toString();
}
private String getPrintStyles() {
return "@media print {" +
" .page-break { display: block; page-break-before: always; }" +
" .order-card { margin-bottom: 20px; border: 1px solid ddd; padding: 10px; }" +
" .order-items { width: 100%; border-collapse: collapse; }" +
" .order-items td { border: 1px solid ddd; padding: 5px; }" +
"}";
}
}
```
3. 打印优化技术
1. CSS打印样式:使用`@media print`定义专门的打印样式
2. 分页控制:通过CSS的`page-break-before`或`page-break-after`属性控制分页
3. 批量生成策略:
- 按配送路线分组打印,减少分拣人员走动
- 按仓库分组,便于不同仓库同时处理
4. 打印预览优化:
- 隐藏不需要打印的UI元素
- 调整字体大小和间距适应打印纸张
三、高级功能扩展
1. 模板自定义:
- 允许管理员配置不同的打印模板
- 支持添加公司LOGO、条形码等元素
2. 打印任务管理:
- 记录打印历史
- 支持重打、补打功能
3. 打印设备集成:
- 直接调用打印机API(如使用浏览器打印API或Electron应用)
- 支持多种打印格式(PDF、图片等)
4. 批量导出:
- 除打印外,支持导出为Excel或PDF格式
四、性能优化建议
1. 异步处理:对于大量订单,采用异步任务处理,避免前端等待
2. 分批加载:当订单量很大时,分批加载和生成打印内容
3. 缓存机制:缓存常用打印模板和样式
4. 压缩HTML:减少传输数据量,加快响应速度
五、实施步骤
1. 需求分析与设计
- 确定打印格式和分组规则
- 设计打印模板样式
2. 开发环境搭建
- 配置前端打印相关库(如html2canvas、jspdf等)
- 后端打印服务开发
3. 测试验证
- 不同浏览器兼容性测试
- 各种订单组合场景测试
- 打印效果验证
4. 部署上线
- 灰度发布策略
- 用户培训与文档编写
通过以上方案实现,美菜生鲜系统可以显著提升订单处理效率,减少人工操作错误,特别适合大规模生鲜配送场景。