添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
using MainShell.Common;
|
||||
using MainShell.Filewritable;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace MainShell.Process
|
||||
{
|
||||
public class WaferHandlingFlowNodeRule
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public List<string> ActivityKeywords { get; set; } = new List<string>();
|
||||
public List<string> WorkflowKeywords { get; set; } = new List<string>();
|
||||
public List<string> ParentKeywords { get; set; } = new List<string>();
|
||||
}
|
||||
|
||||
public class WaferHandlingFlowConfig
|
||||
{
|
||||
public List<WaferHandlingFlowNodeRule> Nodes { get; } = new List<WaferHandlingFlowNodeRule>();
|
||||
|
||||
public static string DefaultConfigPath => Path.Combine(Paths.BasePath, "Configuration", "WaferHandlingFlow.json");
|
||||
|
||||
public static WaferHandlingFlowConfig LoadOrCreate(string filePath = null)
|
||||
{
|
||||
var path = string.IsNullOrWhiteSpace(filePath) ? DefaultConfigPath : filePath;
|
||||
var dir = Path.GetDirectoryName(path);
|
||||
if (!string.IsNullOrWhiteSpace(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
var def = CreateDefault();
|
||||
def.Save(path);
|
||||
return def;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var loaded = Load(path);
|
||||
if (loaded == null || loaded.Nodes.Count == 0)
|
||||
{
|
||||
throw new InvalidDataException("WaferHandlingFlow config is empty.");
|
||||
}
|
||||
loaded.Normalize();
|
||||
return loaded;
|
||||
}
|
||||
catch
|
||||
{
|
||||
var def = CreateDefault();
|
||||
def.Save(path);
|
||||
return def;
|
||||
}
|
||||
}
|
||||
|
||||
public static WaferHandlingFlowConfig Load(string filePath)
|
||||
{
|
||||
var json = File.ReadAllText(filePath);
|
||||
var data = JsonConvert.DeserializeObject<WaferHandlingFlowFile>(json);
|
||||
|
||||
var cfg = new WaferHandlingFlowConfig();
|
||||
if (data?.Nodes != null)
|
||||
{
|
||||
cfg.Nodes.AddRange(data.Nodes);
|
||||
}
|
||||
|
||||
cfg.Normalize();
|
||||
return cfg;
|
||||
}
|
||||
|
||||
public void Save(string filePath = null)
|
||||
{
|
||||
var path = string.IsNullOrWhiteSpace(filePath) ? DefaultConfigPath : filePath;
|
||||
Normalize();
|
||||
|
||||
var data = new WaferHandlingFlowFile
|
||||
{
|
||||
Nodes = Nodes.ToList()
|
||||
};
|
||||
|
||||
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
|
||||
File.WriteAllText(path, json);
|
||||
}
|
||||
|
||||
public string ResolveNodeKey(string workflowName, string parentActivityName, string activityName)
|
||||
{
|
||||
var activity = activityName ?? string.Empty;
|
||||
var workflow = workflowName ?? string.Empty;
|
||||
var parent = parentActivityName ?? string.Empty;
|
||||
|
||||
var rule = Nodes.FirstOrDefault(n => IsMatch(n, activity, workflow, parent));
|
||||
return rule?.Key;
|
||||
}
|
||||
|
||||
private static bool IsMatch(WaferHandlingFlowNodeRule node, string activity, string workflow, string parent)
|
||||
{
|
||||
if (node == null) return false;
|
||||
|
||||
return ContainsAny(activity, node.ActivityKeywords) ||
|
||||
ContainsAny(workflow, node.WorkflowKeywords) ||
|
||||
ContainsAny(parent, node.ParentKeywords);
|
||||
}
|
||||
|
||||
private static bool ContainsAny(string source, List<string> keywords)
|
||||
{
|
||||
if (keywords == null || keywords.Count == 0) return false;
|
||||
|
||||
foreach (var keyword in keywords)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(keyword)) continue;
|
||||
if ((source ?? string.Empty).IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void Normalize()
|
||||
{
|
||||
Nodes.RemoveAll(n => n == null || string.IsNullOrWhiteSpace(n.Key));
|
||||
|
||||
foreach (var node in Nodes)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(node.DisplayName))
|
||||
{
|
||||
node.DisplayName = node.Key;
|
||||
}
|
||||
|
||||
node.ActivityKeywords = node.ActivityKeywords ?? new List<string>();
|
||||
node.WorkflowKeywords = node.WorkflowKeywords ?? new List<string>();
|
||||
node.ParentKeywords = node.ParentKeywords ?? new List<string>();
|
||||
}
|
||||
}
|
||||
|
||||
public static WaferHandlingFlowConfig CreateDefault()
|
||||
{
|
||||
var cfg = new WaferHandlingFlowConfig();
|
||||
|
||||
cfg.Nodes.Add(new WaferHandlingFlowNodeRule
|
||||
{
|
||||
Key = "WaferLoad",
|
||||
DisplayName = "<22><>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>",
|
||||
ActivityKeywords = new List<string> { "ChipLoad", ProcessFlowName.ChipLoadExecuteActivity }
|
||||
});
|
||||
|
||||
cfg.Nodes.Add(new WaferHandlingFlowNodeRule
|
||||
{
|
||||
Key = "WaferSupply",
|
||||
DisplayName = "<22><>Ƭ<C6AC><D7BC>",
|
||||
WorkflowKeywords = new List<string>
|
||||
{
|
||||
ProcessFlowName.ChipStraighteningFlow,
|
||||
ProcessFlowName.DiePositionFlow,
|
||||
ProcessFlowName.DieTransferFlow,
|
||||
ProcessFlowName.DieRecheckFlow
|
||||
},
|
||||
ParentKeywords = new List<string> { "DieAlign", "DieBond", "Inspect" }
|
||||
});
|
||||
|
||||
cfg.Nodes.Add(new WaferHandlingFlowNodeRule
|
||||
{
|
||||
Key = "WaferUnload",
|
||||
DisplayName = "<22><>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>",
|
||||
ActivityKeywords = new List<string> { "ChipUnload", ProcessFlowName.ChipUnloadExecuteActivity }
|
||||
});
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
public class WaferHandlingFlowFile
|
||||
{
|
||||
public List<WaferHandlingFlowNodeRule> Nodes { get; set; } = new List<WaferHandlingFlowNodeRule>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user