分拣中心地磅称重系统
## 项目简介
HBQQLYWeight 是一套基于 Windows 的分拣中心地磅称重与业务联动系统,采用 WinForms 架构,集成电子地磅仪表数据采集、摄像抓拍/车牌识别、本地 SQLite 存储、远端 MySQL 同步、扫码支付受理、语音播报与实时/定时数据同步等能力,支持生产环境快速部署与稳定运行。
核心目标:让称重业务“快、准、稳”,且与上游业务系统无缝联动。
## 主要功能
- 电子地磅采集:通过串口读取仪表数据,内置多型号解析(如“耀华A9”“托利多Ind880”“D2008”等),具备稳定值判定与抖动过滤。
- 称重业务流程:一次/二次称重时间、毛/皮/净重、扣杂、单价、备注、站点与任务等字段全链路管理。
- 摄像抓拍/车牌识别:集成海康 SDK(DLL/HK)与 OpenCV,可联动抓拍,支持本地存档。
- 本地数据存储:内置 SQLite(`QQLYWeight.db`),即开即用。
- 远端数据同步:支持将称重与支付数据同步至 MySQL;提供重试、监控与实时触发机制。
- 扫码支付:支持睿炭二维码扫码,落库 `qqly_payment_records` 并调用远端 `/api/sorting/scanPay`,本地状态联动更新。
- 登录鉴权与校验:动态获取 Token,并校验账号类别(`sorting_id`)与本机站点 `PayCode` 一致性。
- 报表导出:支持 Excel 导出(ClosedXML)。
- 语音播报:称重/状态提示(System.Speech)。
## 技术栈与运行环境
- 平台与框架:.NET 8(net8.0-windows),WinForms
- 数据库:SQLite(本地)、MySQL(远端)
- 通讯与硬件:System.IO.Ports 串口、海康威视 SDK、OpenCvSharp4
- 数据访问与工具:Dapper、CommunityToolkit、SunnyUI、ClosedXML
- 最低环境:
- Windows 10/11 x64
- .NET 8 Runtime/SDK
- 可选:远端 MySQL 实例(如需数据上行)
- 海康 SDK 运行依赖已随程序打包至 `DLL/HK`,通常无需额外安装;若系统缺少 VC 运行库,请安装 Microsoft Visual C++ 2015-2022 可再发行组件。
### 硬件与站点配置
- 硬件:`config/HardwareConfig.cs` 定义了串口与海康摄像机参数,如 `PortName`、`BaudRate`、`DVRIPAddress`、`DVRPortNumber`、`DVRUserName`、`DVRPassword` 等。
- 站点:`Models/Station.cs` 与相关表项用于保存 `StationCode`、`PayCode` 等;`DbHelper.GetStation()` 可读取当前站点信息。
- 初始化示例:`Utils/HardwareManager.cs` 通过 `IConfigManager` 读取 `HardwareConfig` 并初始化串口与摄像机。
### 远端数据库
- 连接参数来源:`DbHelper.GetRemoteDbConfig()`(UI 配置或本地存储),用于拼接 MySQL 连接串。
- 连接池:`Services/MySqlConnectionPool.cs`(按需)
- 同步写入:`Services/DataSyncService.cs`、`Services/RealTimeSyncService.cs`、`Services/PaymentRecordSyncService.cs`
### 登录与支付鉴权
- `AuthService.FetchTokenAsync`:通过 `LoginApiUrl` 获取 `token` 与 `sorting_id`。
- `AuthService.EnsureTokenAndSortingMatchesStationAsync`:校验 `sorting_id` 与本机 `Station.PayCode` 一致后,保存 `token`(`DbHelper.SetCurrentUserToken`)。
- `PaymentRecordSyncService.CallScanPayAsync`:在支付前强制校验 `token` 与 `sorting_id`,再调用 `/api/sorting/scanPay`。
## 核心流程(简述)
- 登录鉴权:`Forms/LoginForm` → `AuthService` 获取并校验 Token → 进入主界面。
- 称重读取:`Utils/WeightScaleReader` 串口轮询 → 解析仪表协议 → 平滑与稳定性判定 → 更新 UI 与业务状态。
- 记录保存:`Services/WeighingRecordService` 保存至 SQLite,并通过 `WeighingRecordEvents` 触发实时同步。
- 数据同步:`Services/RealTimeSyncService`/`DataSyncService` 监听事件或定时任