Files
test_demo/MX-PD-盘古 - new/PanGu.DieBonderApp/MainShell/Process/AutoProduction/AutoProductionRuntimeStateService.cs
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

187 lines
7.4 KiB
C#

using MainShell.ProcessResult;
using MainShell.Recipe.Models;
using System;
namespace MainShell.Process
{
public class AutoProductionRuntimeStateService
{
private readonly ProcessResultManager _processResultManager;
public AutoProductionRuntimeStateService(ProcessResultManager processResultManager)
{
_processResultManager = processResultManager ?? throw new ArgumentNullException(nameof(processResultManager));
}
public int CurrentSubstratePendingCount
{
get { return _processResultManager.AutoProductionRuntimeState.CurrentSubstratePendingCount; }
}
public int CurrentSubstrateProcessedCount
{
get { return _processResultManager.AutoProductionRuntimeState.CurrentSubstrateProcessedCount; }
}
public int CurrentChipRemainingCount
{
get { return _processResultManager.AutoProductionRuntimeState.CurrentChipRemainingCount; }
}
public bool TransferNeedsRecheck
{
get { return _processResultManager.AutoProductionRuntimeState.TransferNeedsRecheck; }
}
public bool TransferChipExhausted
{
get { return _processResultManager.AutoProductionRuntimeState.TransferChipExhausted; }
}
public void PrepareForRun(RecipeManager recipeManager, CurrentChipLifecycleState currentChipState, bool isResume)
{
if (isResume)
{
return;
}
int defaultSubstrateTargetCount = ResolveDefaultSubstrateTargetCount(recipeManager);
AutoProductionRuntimeState runtimeState = CloneState();
runtimeState.CurrentSubstratePendingCount = Math.Max(0, defaultSubstrateTargetCount);
runtimeState.CurrentSubstrateProcessedCount = 0;
if (currentChipState == CurrentChipLifecycleState.Empty)
{
runtimeState.CurrentChipRemainingCount = 0;
}
else
{
runtimeState.CurrentChipRemainingCount = 1;
}
runtimeState.TransferNeedsRecheck = false;
runtimeState.TransferChipExhausted = false;
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.DashboardState.PendingCount = runtimeState.CurrentSubstratePendingCount;
_processResultManager.DashboardState.ProcessedCount = runtimeState.CurrentSubstrateProcessedCount;
_processResultManager.SaveDashboardState();
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
}
public bool ConsumeSubstrateTarget()
{
AutoProductionRuntimeState runtimeState = CloneState();
if (runtimeState.CurrentSubstratePendingCount <= 0)
{
return true;
}
runtimeState.CurrentSubstratePendingCount = Math.Max(0, runtimeState.CurrentSubstratePendingCount - 1);
runtimeState.CurrentSubstrateProcessedCount = runtimeState.CurrentSubstrateProcessedCount + 1;
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.DashboardState.PendingCount = runtimeState.CurrentSubstratePendingCount;
_processResultManager.DashboardState.ProcessedCount = runtimeState.CurrentSubstrateProcessedCount;
_processResultManager.SaveDashboardState();
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
return runtimeState.CurrentSubstratePendingCount == 0;
}
public bool ConsumeCurrentChip()
{
AutoProductionRuntimeState runtimeState = CloneState();
if (runtimeState.CurrentChipRemainingCount <= 0)
{
return false;
}
runtimeState.CurrentChipRemainingCount = Math.Max(0, runtimeState.CurrentChipRemainingCount - 1);
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
return runtimeState.CurrentChipRemainingCount == 0;
}
public bool ConsumeTransferNeedsRecheck()
{
if (!_processResultManager.AutoProductionRuntimeState.TransferNeedsRecheck)
{
return false;
}
AutoProductionRuntimeState runtimeState = CloneState();
runtimeState.TransferNeedsRecheck = false;
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
return true;
}
public bool ConsumeTransferChipExhausted()
{
if (!_processResultManager.AutoProductionRuntimeState.TransferChipExhausted)
{
return false;
}
AutoProductionRuntimeState runtimeState = CloneState();
runtimeState.TransferChipExhausted = false;
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
return true;
}
public void SetCurrentChipRemainingCount(int remainingCount)
{
AutoProductionRuntimeState runtimeState = CloneState();
runtimeState.CurrentChipRemainingCount = Math.Max(0, remainingCount);
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
}
public void MarkTransferNeedsRecheck()
{
AutoProductionRuntimeState runtimeState = CloneState();
runtimeState.TransferNeedsRecheck = true;
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
}
public void MarkTransferChipExhausted()
{
AutoProductionRuntimeState runtimeState = CloneState();
runtimeState.TransferChipExhausted = true;
runtimeState.LastUpdatedTime = DateTime.Now;
_processResultManager.SaveAutoProductionRuntimeState(runtimeState);
}
private AutoProductionRuntimeState CloneState()
{
AutoProductionRuntimeState source = _processResultManager.AutoProductionRuntimeState;
return new AutoProductionRuntimeState
{
CurrentSubstratePendingCount = source.CurrentSubstratePendingCount,
CurrentSubstrateProcessedCount = source.CurrentSubstrateProcessedCount,
CurrentChipRemainingCount = source.CurrentChipRemainingCount,
TransferNeedsRecheck = source.TransferNeedsRecheck,
TransferChipExhausted = source.TransferChipExhausted,
LastUpdatedTime = source.LastUpdatedTime
};
}
private static int ResolveDefaultSubstrateTargetCount(RecipeManager recipeManager)
{
if (recipeManager == null || recipeManager.CurrentSubstrateRecipe == null || recipeManager.CurrentSubstrateRecipe.SubstrateInfo == null)
{
return 0;
}
int rowNumber = Math.Max(0, recipeManager.CurrentSubstrateRecipe.SubstrateInfo.RowNumber);
int colNumber = Math.Max(0, recipeManager.CurrentSubstrateRecipe.SubstrateInfo.ColNumber);
if (rowNumber == 0 || colNumber == 0)
{
return 0;
}
return rowNumber * colNumber;
}
}
}