|
@@ -2,7 +2,6 @@
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Linq;
|
|
|
-using System.Reflection;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using WCS.Entity;
|
|
@@ -35,8 +34,9 @@ namespace WCS.Core
|
|
|
private static readonly List<LogicHandler> Handlers = new();
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 日志委托
|
|
|
+ /// 日志委托,暂时弃用
|
|
|
/// </summary>
|
|
|
+ [Obsolete]
|
|
|
public static Action<string, string, string> DbLog;
|
|
|
|
|
|
/// <summary>
|
|
@@ -353,128 +353,6 @@ namespace WCS.Core
|
|
|
protected abstract void Execute(T dev);
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 工作处理器
|
|
|
- /// </summary>
|
|
|
- public abstract class WorkHandler : LogicHandler
|
|
|
- {
|
|
|
- /// <summary>
|
|
|
- /// 所有被申明的工作处理器
|
|
|
- /// </summary>
|
|
|
- protected List<WorkInfo> Works = new List<WorkInfo>();
|
|
|
-
|
|
|
- protected WorkHandler()
|
|
|
- {
|
|
|
- var arr = Assembly.GetEntryAssembly()
|
|
|
- ?.GetTypes().Where(v => v.IsSubclassOf(typeof(Work))).Where(v =>
|
|
|
- {
|
|
|
- var attr = v.GetCustomAttribute<WorkTitleAttribute>();
|
|
|
- if (attr == null)
|
|
|
- return false;
|
|
|
- return attr.Handler == this.GetType();
|
|
|
- });
|
|
|
- var works = arr.Select(v => Activator.CreateInstance(v) as Work).Select(v =>
|
|
|
- {
|
|
|
- var attr = v.GetType().GetCustomAttribute<WorkTitleAttribute>();
|
|
|
- return new WorkInfo { Params = v.GetObjs(), Work = v.Execute, Title = attr.Title, Parallel = attr.Parallel };
|
|
|
- }).ToArray();
|
|
|
- Works.AddRange(works);
|
|
|
- }
|
|
|
-
|
|
|
- public override sealed void Start()
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 执行处理中心
|
|
|
- /// </summary>
|
|
|
- /// <param name="milliseconds"></param>
|
|
|
- public override void Update(double milliseconds)
|
|
|
- {
|
|
|
- if (ParallelRun)
|
|
|
- {
|
|
|
- Parallel.ForEach(Works, DoWork);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- foreach (var w in Works)
|
|
|
- {
|
|
|
- DoWork(w);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- protected virtual void DoWork(WorkInfo work)
|
|
|
- {
|
|
|
- if (work.Parallel)
|
|
|
- {
|
|
|
- Parallel.ForEach(work.Params, p =>
|
|
|
- {
|
|
|
- Do(work, p);
|
|
|
- });
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- foreach (var p in work.Params)
|
|
|
- {
|
|
|
- Do(work, p);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- protected virtual void Do(WorkInfo wi, object p)
|
|
|
- {
|
|
|
- var dt = DateTime.Now;
|
|
|
- var channel = Description + "." + wi.Title + "." + p.ToString();
|
|
|
- try
|
|
|
- {
|
|
|
- Ltc.SetChannel(channel);
|
|
|
- Ltc.Log("开始---------------------------------------");
|
|
|
- wi.Work(p);
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- Ltc.Log(ex.GetBaseException().Message);
|
|
|
- Log(wi, p, ex);
|
|
|
- Configs.UploadException?.Invoke(p.ToString(), ex.GetBaseException().Message);
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- var dd = (DateTime.Now - dt).TotalMilliseconds;
|
|
|
- if (dd > 500)
|
|
|
- {
|
|
|
- Console.ForegroundColor = ConsoleColor.Red;
|
|
|
- Console.WriteLine(channel + "耗时" + dd);
|
|
|
- Console.ResetColor();
|
|
|
- }
|
|
|
- if (dd > 10000)
|
|
|
- Configs.UploadException?.Invoke(p.ToString(), wi.Title + "执行耗时" + Math.Floor(dd / 1000) + "秒");
|
|
|
- Ltc.Log("结束\n");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- protected virtual void Log(WorkInfo wi, object p, Exception ex)
|
|
|
- {
|
|
|
- try
|
|
|
- {
|
|
|
- var msg = Description + "--" + wi.Title + "--";
|
|
|
- if (p is IProtocol)
|
|
|
- {
|
|
|
- msg += (p as IProtocol).PROTOCOL().DEVICE.CODE;
|
|
|
- }
|
|
|
- var con = ex.GetBaseException().Message.Split("|");
|
|
|
- msg = msg + ":" + con[0];
|
|
|
- //Console.WriteLine(msg);
|
|
|
-
|
|
|
- DbLog.Invoke(msg, con[1], con[2]);
|
|
|
- }
|
|
|
- catch (Exception)
|
|
|
- {
|
|
|
- //TODO:增加一个异常记录
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public class WorkTitleAttribute : Attribute
|
|
|
{
|
|
|
public Type Handler { get; set; }
|