using SKMC.Api.Client.Config;
using SKMC.Api.Client.UI;
using SKMC.Api.Common.Logger;
using SKMC.Api.Machine.Control;
using System;
namespace SKMC.Api.Common.Exceptions
{
///
/// 异常包装类
///
public class ExceptionWrapper
{
private static readonly ILogger log = LogFactory.Get();
private static readonly IMachineBoardControl machineBoardControl = ObjectFactory.Resolve();
private static readonly CommonCacher commonCacher = ObjectFactory.Resolve();
public static string Throws(Exception exception, string dialogViewName = ClientConstants.Views_CommonException)
{
if (exception == null) return null;
if (typeof(ExceptionBase).IsAssignableFrom(exception.GetType()))
{
ExceptionBase exceptionBase = exception as ExceptionBase;
ExceptionConfig exceptionConfig = commonCacher.GetExceptionConfig(exceptionBase);
exceptionBase.Level = exceptionConfig.Level;
// 停机异常
if (exceptionConfig.Level == 4)
{
machineBoardControl.IsAlarm = true;
machineBoardControl.StopAction.Invoke();
log.Error($"严重异常: {exception}");
return ClientDialogs.CreateExceptionDialog(exceptionBase, dialogViewName);
}
// 普通异常
if (exceptionConfig.Level == 2)
{
machineBoardControl.IsAlarm = true;
machineBoardControl.PauseAction.Invoke();
log.Error($"普通异常: {exception},{exception.StackTrace}");
return ClientDialogs.CreateExceptionDialog(exceptionBase, dialogViewName);
}
// 单站异常
if (exceptionConfig.Level == 1)
{
if (exceptionBase.StationId > 0)
{
machineBoardControl.PauseOneAction.Invoke(exceptionBase.StationId);
}
log.Error($"单站异常: {exception}");
return ClientDialogs.CreateExceptionDialog(exceptionBase, dialogViewName);
}
else
{
log.Error($"其他异常: {exception}");
return null;
}
}
// 未知异常
else
{
machineBoardControl.IsAlarm = true;
machineBoardControl.StopAction.Invoke();
log.Error($"未知异常: {exception.Message}", exception);
ClientDialogs.CreateExceptionDialog(exception);
return null;
}
}
}
}