将 Stateless(状态机)、Elsa Workflows(工作流引擎)、Quartz.NET(定时任务)集成到 YZWater3 污水处理厂监控项目中,提升设备状态管理、工艺流程编排和任务调度能力。
阶段 7
| 决策 | 理由 |
|---|---|
| Stateless 用于设备状态建模 | 轻量零依赖,Fluent API 适合工业设备 |
| Quartz.NET 用于定时任务 | 成熟稳定,支持 cron 表达式 |
| 简化版 WorkflowService | Elsa API 不兼容,自建简化版本满足基本需求 |
| MainViewModel UI 时钟保留原实现 | UI 定时器不适合用 Quartz |
| 错误 | 尝试次数 | 解决方案 |
|---|---|---|
| Elsa.Workflows.Contracts 命名空间不存在 | 1 | 移除 Elsa 包,创建简化版 WorkflowService |
| IScheduler 没有 StartAsync 方法 | 1 | 改用 Start() 方法 |
| SimpleScheduleBuilder 没有 WithIntervalInMilliseconds | 1 | 改用 WithIntervalInSeconds |
| GroupMatcher 未找到 | 1 | 添加 using Quartz.Impl.Matchers |
| WorkflowService 中 EndTime - StartTime 返回 TimeSpan? | 1 | 使用 duration?.TotalMilliseconds ?? 0 |
| IDictionary 没有 GetValueOrDefault 方法 | 1 | 改用 TryGetValue |
| 文件 | 说明 |
|---|---|
| Services/DeviceStateMachine.cs | Stateless 设备状态机 |
| Services/QuartzSchedulerService.cs | Quartz 调度服务 |
| Services/Jobs/PollingJobs.cs | Quartz Jobs(PLC轮询、数据日志) |
| Services/WorkflowService.cs | 简化版工作流服务 |
| docs/elsa-integration-notes.md | Elsa 集成说明和问题归档 |
| 文件 | 说明 |
|---|---|
| YZWater.Core.csproj | 添加 Stateless、Quartz 包引用 |
| Models/SystemConfig.cs | 添加 PlcPollingIntervalMs 配置 |
| Services/PlcPollingService.cs | 添加 ReadDataInternal 公共方法 |
| Services/DataLoggingService.cs | 添加 Instance 单例,方法改为 public |
| App.axaml.cs | 集成新服务启动/停止逻辑 |