feat: 更新

This commit is contained in:
GukSang.Jin
2026-02-27 16:56:18 +08:00
parent c7d107c2f1
commit fe0aee16ad
5 changed files with 237 additions and 15 deletions

View File

@@ -125,6 +125,15 @@ public partial class MainViewModel : ObservableObject
[ObservableProperty]
private int _uvSterilizationTime = 3;
[ObservableProperty]
private bool _isCleaningDialogOpen;
[ObservableProperty]
private string _cleaningMessage = "正在清理笼子...";
[ObservableProperty]
private int _cleaningProgress;
[ObservableProperty]
private int _shampoo1Level = 80;
@@ -221,7 +230,7 @@ public partial class MainViewModel : ObservableObject
WashSteps.Add(new WashStep { Name = "第四次冲水", Status = "等待中" });
WashSteps.Add(new WashStep { Name = "热风吹毛", Status = "等待中" });
WashSteps.Add(new WashStep { Name = "冷热风混合", Status = "等待中" });
WashSteps.Add(new WashStep { Name = "紫外线杀菌", Status = "等待中" });
// 紫外线杀菌不在洗护流程中,在流程完成后独立执行
}
public async Task InitializeAsync()
@@ -800,8 +809,8 @@ public partial class MainViewModel : ObservableObject
("护理液喷洒", SprayShampoo3Time * 60),
("第四次冲水", AfterShampoo3SprayTime * 60),
("热风吹毛", HotAirTime * 60),
("冷热风混合", ColdAirTime * 60),
("紫外线杀菌", UvSterilizationTime * 60)
("冷热风混合", ColdAirTime * 60)
// 紫外线杀菌不在洗护流程中
};
int totalDuration = steps.Sum(s => s.Item2);
@@ -864,8 +873,14 @@ public partial class MainViewModel : ObservableObject
}
});
// 洗护完成
await CompleteWashingAsync();
// 洗护流程完成,自动开门
_logger.LogInfo("洗护流程完成,自动开门");
IsDoorOpen = true;
StatusMessage = "洗护完成,请取走宠物";
CurrentStep = "请取走宠物";
// 等待门关闭(模拟宠物取走后关门)
await WaitForDoorCloseAsync();
}
catch (Exception ex)
{
@@ -874,6 +889,83 @@ public partial class MainViewModel : ObservableObject
}
}
/// <summary>
/// 等待门关闭(宠物取走后)
/// </summary>
private async Task WaitForDoorCloseAsync()
{
_logger.LogInfo("等待门关闭...");
// 在实际生产环境中,这里应该监听门传感器信号
// 这里模拟等待10秒后自动关门
await Task.Delay(10000);
IsDoorOpen = false;
_logger.LogInfo("门已关闭,开始清理和杀菌流程");
// 门关闭后,开始清理和杀菌流程
await StartCleaningAndSterilizationAsync();
}
/// <summary>
/// 清理和紫外线杀菌流程(独立于洗护流程)
/// 关门后冲水2分钟清理笼子内多余狗毛同时紫外线灯开启杀菌
/// </summary>
private async Task StartCleaningAndSterilizationAsync()
{
try
{
// 显示清理弹窗(不可手动关闭)
IsCleaningDialogOpen = true;
CleaningProgress = 0;
_logger.LogInfo("开始清理和杀菌流程");
// 冲水2分钟 + 紫外线杀菌时间
int flushDuration = 2 * 60; // 2分钟冲水
int uvDuration = UvSterilizationTime * 60; // 紫外线杀菌时间
int totalDuration = flushDuration + uvDuration;
// 第一阶段冲水2分钟清理狗毛同时开启紫外线灯
_logger.LogInfo("开始冲水清理狗毛,同时开启紫外线灯");
CleaningMessage = "正在冲水清理笼子...";
for (int i = 0; i <= flushDuration; i++)
{
CleaningProgress = (int)((double)i / totalDuration * 100);
await Task.Delay(100);
}
// 第二阶段:继续紫外线杀菌
_logger.LogInfo("冲水完成,继续紫外线杀菌");
CleaningMessage = "正在紫外线杀菌...";
for (int i = flushDuration; i <= totalDuration; i++)
{
CleaningProgress = (int)((double)i / totalDuration * 100);
await Task.Delay(100);
}
CleaningProgress = 100;
CleaningMessage = "清理完成!";
await Task.Delay(1000);
// 关闭清理弹窗
IsCleaningDialogOpen = false;
_logger.LogInfo("清理和杀菌流程完成");
// 全部完成,返回待机界面
await CompleteWashingAsync();
}
catch (Exception ex)
{
_logger.LogError("清理和杀菌流程失败", ex);
StatusMessage = $"清理失败: {ex.Message}";
IsCleaningDialogOpen = false;
}
}
private async Task CompleteWashingAsync()
{
if (CurrentOrder == null) return;