This commit is contained in:
GukSang.Jin
2026-05-18 15:18:28 +08:00
parent 8f981c296f
commit 386dfa6043
8 changed files with 372 additions and 183 deletions

View File

@@ -142,6 +142,7 @@ namespace TabletTester2025.ViewModels
[ObservableProperty] private int _dissolution2TimeMin = 30;
[ObservableProperty] private double _dissolution1SampleIntervalMin = 5;
[ObservableProperty] private double _dissolution2SampleIntervalMin = 5;
[ObservableProperty] private double _dissolutionMinPercentAt30Min = 80;
[ObservableProperty] private double _dissolutionElapsedTime;
[ObservableProperty] private double _dissolutionCountdown;
[ObservableProperty] private double _dissolutionRSquared;
@@ -308,26 +309,54 @@ namespace TabletTester2025.ViewModels
ResetDisintegrationCommand = new AsyncRelayCommand(ResetDisintegrationAsync);
PrintDisintegrationCommand = new AsyncRelayCommand(async () => await PrintReport("崩解"));
_ = LoadDisintegrationTimeAsync();
_ = LoadDisintegrationSpeedAsync();
_ = LoadDissolutionTimesAsync();
_ = LoadFriabilityWeightsAsync();
}
public void ApplyPharmaDefaults()
{
var p = App.CurrentPharmaParams;
_isLoadingDisintegrationSpeed = true;
_isLoadingDisintegrationTime = true;
_isLoadingDissolution1Time = true;
_isLoadingDissolution2Time = true;
_isLoadingDissolution1SampleInterval = true;
_isLoadingDissolution2SampleInterval = true;
try
{
HardnessInternalMin = p.HardnessMin_N;
HardnessInternalMax = p.HardnessMax_N;
HardnessTestCount = Math.Max(1, p.HardnessTestCount);
FriabilityTargetRpm = p.FriabilityTargetRpm > 0 ? p.FriabilityTargetRpm : 25;
FriabilityTargetRounds = p.FriabilityTargetRounds > 0 ? p.FriabilityTargetRounds : 100;
FriabilityMaxLossPercent = p.FriabilityMaxLossPercent;
FriabilityRemainingRounds = FriabilityTargetRounds;
DisintegrationDosageForm = string.IsNullOrWhiteSpace(p.DisintegrationDosageForm) ? "普通片" : p.DisintegrationDosageForm;
DisintegrationSpeedRpm = p.DisintegrationSpeedRpm > 0 ? p.DisintegrationSpeedRpm : 31;
DisintegrationTemp = p.DisintegrationTemperatureC > 0 ? p.DisintegrationTemperatureC : 37;
Dissolution1TimeMin = p.Dissolution1TimeMin > 0 ? p.Dissolution1TimeMin : 30;
Dissolution2TimeMin = p.Dissolution2TimeMin > 0 ? p.Dissolution2TimeMin : 30;
Dissolution1SampleIntervalMin = p.Dissolution1SampleIntervalMin > 0 ? p.Dissolution1SampleIntervalMin : 5;
Dissolution2SampleIntervalMin = p.Dissolution2SampleIntervalMin > 0 ? p.Dissolution2SampleIntervalMin : 5;
DissolutionMinPercentAt30Min = p.DissolutionMinPercentAt30min;
DissolutionSampleInterval = ToCompatibleSampleInterval(Dissolution1SampleIntervalMin);
int seconds = p.DisintegrationMaxSeconds > 0 ? p.DisintegrationMaxSeconds : ResolveDisintegrationLimitSeconds();
if (seconds > 0)
DisintegrationTimeMin = seconds / 60.0;
}
finally
{
_isLoadingDisintegrationSpeed = false;
_isLoadingDisintegrationTime = false;
_isLoadingDissolution1Time = false;
_isLoadingDissolution2Time = false;
_isLoadingDissolution1SampleInterval = false;
_isLoadingDissolution2SampleInterval = false;
}
}
private void LoadPharmaDefaults()
{
var p = App.CurrentPharmaParams;
HardnessInternalMin = p.HardnessMin_N;
HardnessInternalMax = p.HardnessMax_N;
HardnessTestCount = Math.Max(1, p.HardnessTestCount);
FriabilityTargetRpm = p.FriabilityTargetRpm > 0 ? p.FriabilityTargetRpm : 25;
FriabilityTargetRounds = p.FriabilityTargetRounds > 0 ? p.FriabilityTargetRounds : 100;
FriabilityMaxLossPercent = p.FriabilityMaxLossPercent;
FriabilityRemainingRounds = FriabilityTargetRounds;
DisintegrationDosageForm = string.IsNullOrWhiteSpace(p.DisintegrationDosageForm) ? "普通片" : p.DisintegrationDosageForm;
int seconds = ResolveDisintegrationLimitSeconds();
if (seconds > 0)
DisintegrationTimeMin = seconds / 60.0;
ApplyPharmaDefaults();
}
private async Task PrintReport(string testName)
@@ -1006,6 +1035,12 @@ namespace TabletTester2025.ViewModels
private int ResolveDisintegrationLimitSeconds(string? dosageForm = null)
{
string form = string.IsNullOrWhiteSpace(dosageForm) ? DisintegrationDosageForm : dosageForm;
if (string.Equals(form, App.CurrentPharmaParams.DisintegrationDosageForm, StringComparison.OrdinalIgnoreCase)
&& App.CurrentPharmaParams.DisintegrationMaxSeconds > 0)
{
return App.CurrentPharmaParams.DisintegrationMaxSeconds;
}
return form switch
{
"薄膜衣片" => 30 * 60,
@@ -1526,7 +1561,7 @@ namespace TabletTester2025.ViewModels
// 崩解
DisintegrationTimeSec = DisintegrationSeconds,
RemainingTubesAtEnd = RemainingTubes,
DisintegrationTargetFreq = 0,
DisintegrationTargetFreq = DisintegrationSpeedRpm,
DisintegrationTemp = DisintegrationTemp,
DisintegrationDosageForm = DisintegrationDosageForm,
DisintegrationLimitSeconds = ResolveDisintegrationLimitSeconds(),