using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; using System.Xml.Serialization; using WorkData; namespace DQ.Construction.NewLook.DataTemplate { /// /// DataTemplateManager /// public static class DataTemplateConfigManager { static DataTemplateConfigManager() { InitDataTemplate(); LoadTemplate(); } /// /// 当前模板 /// public static DataTemplateConfig Current { get; private set; } /// /// 新建模板 /// /// template public static void NewTemplate(string template) { InitDataTemplate(template); ToggleTemplate(template); } /// /// 删除模板 /// /// template public static void DeleteTemplate(string template) { string path = FileHelp.GetDataTemplateFile(template, string.Empty); Directory.Delete(path, true); } /// /// 创建DataTemplate目录 /// public static void InitDataTemplate() { try { InitDataTemplate(WorkConfig.Data.DataTemplate); } finally { } } /// /// 创建DataTemplate目录 /// /// 模板 public static void InitDataTemplate(string template) { template = string.IsNullOrWhiteSpace(template) ? "Default" : template; string configFile = FileHelp.GetDataTemplateFile(template, $"default.config"); XDocument docConfig; try { docConfig = XDocument.Parse(File.ReadAllText(configFile)); } catch (Exception) { docConfig = new XDocument(new XElement("Config")); } foreach (SqlSugar.EntityInfo item in EntityHelp.AllEntity) { try { if (item.TableDescription == null || item.TableDescription.StartsWith("Class ")) { continue; } string templateFile = FileHelp.GetDataTemplateFile(template, $"_default.{item.TableDescription}"); if (!File.Exists(templateFile)) { XDocument docTable = new XDocument(new XElement("Config")); foreach (SqlSugar.EntityColumnInfo col in item.Columns) { if (col.ColumnDescription == null || col.ColumnDescription.StartsWith("Gets ") || col.PropertyName == "Unique") { continue; } docTable.Root.Add(new XElement( "Entry", new XAttribute("From", col.ColumnDescription), new XAttribute("TO", col.ColumnDescription))); } docTable.Save(templateFile); } bool bExist = docConfig.Root.Elements("Template").Any(o => o.Attribute("Table").Value == item.TableDescription); if (!bExist) { docConfig.Root.Add(new XElement( "Template", new XAttribute("Table", item.TableDescription), new XAttribute("Link", item.TableDescription), new XAttribute("Last", Path.GetFileName(templateFile)))); } } catch (Exception) { // ignore } } using (Stream stream = File.Create(configFile)) { docConfig.Save(stream); } } /// /// 切换模板 /// /// template public static void ToggleTemplate(string template) { WorkConfig.Data.DataTemplate = template; WorkConfig.SaveData(); LoadTemplate(); } /// /// 加载模板 /// public static void LoadTemplate() { Current = LoadForm(FileHelp.GetDataTemplateFile($"default.config")); } /// /// 保存模板 /// public static void SaveTemplate() { SaveTo(FileHelp.GetDataTemplateFile($"default.config"), Current); } /// /// 加载模板 /// /// path /// config internal static DataTemplateConfig LoadForm(string path) { try { using (var stream = File.OpenRead(path)) { XmlSerializer xmlSearializer = new XmlSerializer(typeof(DataTemplateConfig)); return (DataTemplateConfig)xmlSearializer.Deserialize(stream); } } catch (Exception) { } return null; } /// /// 保存模板 /// /// path /// config internal static void SaveTo(string path, DataTemplateConfig config) { string strSolutionPath = AppDomain.CurrentDomain.BaseDirectory; if (!Directory.Exists(strSolutionPath)) { Directory.CreateDirectory(strSolutionPath); } try { using (var sw = new StreamWriter(path)) { // 创建XML命名空间 XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); XmlSerializer serializer = new XmlSerializer(typeof(DataTemplateConfig)); serializer.Serialize(sw, config, ns); } } catch (Exception) { } } /// /// 读取模板列表 /// /// 模板类型 /// 模板列表 internal static IEnumerable EnumerateTemplate(string desc) { string dir = FileHelp.GetDataTemplateFile(); foreach (string item in Directory.EnumerateFiles(dir, $"*.{desc}")) { yield return Path.GetFileName(item); } } } }