# warehouse-tools **Repository Path**: c---project_1/warehouse-tools ## Basic Information - **Project Name**: warehouse-tools - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-23 - **Last Updated**: 2026-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仓库工具 (Warehouse Tools) 一个部署在仓库打包工位的 Windows 桌面辅助工具,为 Web 业务系统提供本地硬件能力调用。支持打印面单标签和摄像头录制打包视频。 ## 功能特性 | 模块 | 功能 | 说明 | |------|------|------| | **打印服务** | WebSocket 接收打印任务,驱动本地打印机出纸 | XML + Liquid 模板引擎,GDI+ 打印管道,支持热敏/标签/A4 打印机,自动分页 | | **录像服务** | WebSocket 接收录像指令,调用摄像头录制打包视频 | OpenCV 采集,编码器自动选择(H.264/X264/AVC1/MPEG-4/MJPEG),支持 FFmpeg/MSMF 后端,视频文字叠加(订单号、时间、备注) | | **模板编辑** | 内置模板编辑器,实时预览 + 自动渲染 + 分页 | 三栏布局,暗色代码主题,自动切换测试数据,预览与打印分页效果一致 | | **条码渲染** | 支持 QR Code 和 Code128 条码 | ZXing.Net + QRCoder,预览/打印双管道 | | **队列管理** | 双优先级打印队列,支持手动清除 | 高/普通优先级队列,独立清除按钮,任务完成状态实时推送 | | **托盘管理** | 最小化到系统托盘,右键菜单快速操作 | 支持开机自启、关闭到托盘 | | **历史记录** | 打印和录像历史本地持久化 | SQLite 存储,支持查询和导出 | | **日志查看** | 内置日志浏览和过滤 | 按级别过滤,支持导出和打开目录 | | **启动画面** | 带进度条的启动加载界面 | 所有耗时初始化后台执行,UI 动画流畅 | | **JS SDK** | 前端 WebSocket 通信封装 | ES Module,Promise API,自动重连,Vue 3 Composable | ## 技术栈 - **运行时**: .NET 8.0 (LTS) - **UI 框架**: WPF + 原生样式(无第三方 UI 库) - **通信**: WebSocket(作为 Web 系统与本地硬件的桥梁) - **数据持久化**: EF Core + SQLite - **打印引擎**: XML + Liquid 模板 → WPF Canvas(预览)/ GDI+ `PrintDocument`(打印) - **条码生成**: ZXing.Net(Code128)、QRCoder(QR Code) - **录像引擎**: OpenCvSharp4(DirectShow 采集 + VideoWriter 编码,FFmpeg/MSMF 后端) - **DI 容器**: Microsoft.Extensions.DependencyInjection - **日志**: Serilog(文件按天滚动) ## 项目结构 ``` warehouse-tools/ ├── src/ │ ├── WarehouseTools.Desktop/ # WPF 主程序(入口、托盘、配置 UI、启动画面) │ │ ├── Views/ # 视图:MainWindow、PrintView、RecordView、SettingsView、SplashScreen │ │ ├── ViewModels/ # ViewModel:MainViewModel、DashboardViewModel、PrintViewModel、RecordViewModel、SettingsViewModel │ │ ├── WebSocketServer.cs # 嵌入式 WebSocket + 静态文件服务器 │ │ └── App.xaml.cs # 启动流程(含 Splash 异步初始化) │ ├── WarehouseTools.Core/ # 核心:WebSocket 路由、协议模型、事件总线、配置选项 │ │ ├── Models/WebSocket/ # 请求/响应 DTO(PrintRequests、RecordRequests、PrintResponses、RecordResponses) │ │ ├── Events/ # 应用内事件(AppEvent、PrintTaskCompletedEvent、RecordSessionCompletedEvent) │ │ └── WebSocket/ # 消息路由、服务器接口、处理器基类 │ ├── WarehouseTools.Printing/ # 打印模块:模板引擎、分页渲染、打印队列、历史记录 │ │ ├── Templates/ # TemplateParser(WPF预览)、TemplateModelParser(GDI+模型)、GdiPrintRenderer、LiquidRenderer │ │ ├── Queue/ # IPrintQueue、PrintQueue(双优先级并发队列) │ │ ├── Services/ # PrintService(后台消费队列、保存历史) │ │ └── Handlers/ # PrintTaskHandler、QueryPrintersHandler │ ├── WarehouseTools.Recording/ # 录像模块:摄像头采集、视频编码、文件打包 │ │ ├── Capture/ # ICameraService、OpenCvCapture、VideoOverlayHelper │ │ ├── Handlers/ # StartRecordHandler、StopRecordHandler、QueryCamerasHandler │ │ └── Models/ # CameraDevice、CameraOptions、RecordingSession、RecordResult │ └── WarehouseTools.Infrastructure/ # 基础设施:SQLite DbContext、文件存储、实体定义 │ └── Persistence/ # WarehouseToolsDbContext、PrintHistoryEntity、RecordHistoryEntity ├── tests/ │ └── WarehouseTools.Core.Tests/ # 单元测试(xUnit) ├── templates/ # 默认打印模板(XML):packing-slip.xml、wave-picklist.xml ├── test/ # WebSocket 测试页面(test/index.html) ├── appsettings.json # 全局配置 ├── global.json # SDK 版本锁定 ├── Directory.Build.props # 全局 MSBuild 属性 ├── Directory.Packages.props # 中央包管理(CPM) ├── AGENTS.md # AI 编码代理开发指南 ├── CHANGELOG.md # 开发日志 └── README.md # 项目说明 ``` ### 模块依赖 ``` Desktop ──→ Core, Printing, Recording, Infrastructure Printing ──→ Core, Infrastructure Recording ──→ Core, Infrastructure Infrastructure ──→ Core ``` ### 运行时目录 ``` Data/ # SQLite 数据库(自动创建) Logs/ # Serilog 滚动日志(按天) templates/ # 打印模板(XML,可热更新) Recordings/ # 视频输出(MP4/AVI,按日期分目录) ``` ## 快速开始 ### 环境要求 - Windows 10/11 (x64) - [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) - 本地打印机(可选,用于打印功能) - USB/内置摄像头(可选,用于录像功能) ### 构建 ```bash # 克隆仓库 cd warehouse-tools # 还原依赖 dotnet restore # 编译 dotnet build # 运行(WPF 桌面程序) dotnet run --project src/WarehouseTools.Desktop ``` 编译输出目录: - `src/WarehouseTools.Desktop/bin/Debug/net8.0-windows/win-x64/` ### 发布(单文件 + 自包含) ```bash dotnet publish src/WarehouseTools.Desktop \ -c Release \ -r win-x64 \ --self-contained true \ -p:PublishSingleFile=true \ -p:EnableCompressionInSingleFile=true \ -o ./publish ``` ## 配置 编辑 `src/WarehouseTools.Desktop/appsettings.json`: ```json { "WebSocket": { "Port": 8080, "Path": "/ws/", "AutoStart": true, "MaxConnections": 10 }, "Printing": { "DefaultPrinter": "", "AutoPrint": true, "Copies": 1, "TemplateDirectory": "templates", "CacheDirectory": "cache/templates", "CacheExpireHours": 24 }, "Recording": { "DefaultCamera": "", "OutputDirectory": "Recordings", "Resolution": "1280x720", "FrameRate": 25, "BitrateKbps": 2048, "VideoQuality": 95, "EncoderBackend": "auto", "SegmentDurationSeconds": 0, "MaxDurationSeconds": 600, "DiskSpaceThresholdMB": 1024 }, "History": { "Enabled": true, "DatabasePath": "Data/warehouse-tools.db", "MaxDays": 30 }, "UI": { "MinimizeToTray": true, "StartMinimized": false, "AutoStartWithWindows": false }, "Logging": { "Level": "Information", "Directory": "Logs", "MaxLogFiles": 7 } } ``` ## 模板系统 模板使用 **XML + Liquid** 双阶段渲染: 1. **Liquid 渲染**:DotLiquid 注入数据(`{{orderNo}}`、`{% for item in items %}`) 2. **XML 解析**:渲染后的 XML 解析为 WPF Canvas(预览)或 GDI+ 模型(打印) ### 支持元素 | 元素 | 说明 | 常用属性 | |------|------|---------| | `` | 文本 | `font`, `fontsize`, `color`, `x`, `y`, `wrap` | | `