Files
2025-09-16 16:06:41 +08:00

380 lines
14 KiB
C#

using System.Collections.Generic;
using System.Data.SQLite;
using System.Reflection;
using System.Windows;
using Autodesk.Windows;
using Dapper;
using Dapper.Contrib.Extensions;
using Szmedi.RevitToolkit.Approval.Models;
using Szmedi.Toolkit.Revit.Approval;
namespace Szmedi.RevitToolkit.Approval.Assists
{
public static class GlobalAssists
{
public static IntPtr RevitWindowPtr => ComponentManager.ApplicationWindow;
public static string AddInPath => Assembly.GetExecutingAssembly().Location;
public static string DirAssembly => Path.GetDirectoryName(AddInPath);
private static string DbString => $"Data Source={DirAssembly}\\SZBIM.db";
public static SQLiteConnection SqlConnection { get; } = new(DbString);
///// <summary>
///// 获取建筑指定专业下的所有标识
///// </summary>
///// <param name="major"></param>
///// <returns></returns>
//public static List<string> GetArchiSigns(Major major)
//{
// var archiProps = GetArchiMajorParameters(major).DistinctBy(p => p.Category).ToList();
// var archiSigns = new List<string>();
// foreach (var archi in archiProps)
// {
// if (!string.IsNullOrEmpty(archi.Level5))
// {
// archiSigns.Add(archi.Level5);
// continue;
// }
// if (!string.IsNullOrEmpty(archi.Level4))
// {
// archiSigns.Add(archi.Level4);
// continue;
// }
// if (!string.IsNullOrEmpty(archi.Level3))
// {
// archiSigns.Add(archi.Level3);
// continue;
// }
// if (!string.IsNullOrEmpty(archi.Level2))
// {
// archiSigns.Add(archi.Level2);
// continue;
// }
// if (!string.IsNullOrEmpty(archi.Level1))
// {
// archiSigns.Add(archi.Level1);
// continue;
// }
// }
// return archiSigns;
//}
/// <summary>
/// 获取轨道交通所有标识
/// </summary>
/// <returns></returns>
public static List<string> GetMetroSigns()
{
List<string> signs = new List<string>();
try
{
SqlConnection.Open();
var metroProps = SqlConnection.GetAll<MetroDedicatedParameter>().DistinctBy(p => p.Categories);
var categoriesList = metroProps.Select(p => p.Categories).ToArray();
foreach (var categories in categoriesList)
{
var array = categories.Split('|');
signs.AddRange(array);
//if (categories.Contains("|"))
//{
//}
//else
//{
// signs.Add(categories);
//}
}
//signs = [.. metroProps.Select(p => p.Categories)];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return signs;
}
/// <summary>
/// 获取轨道交通所有分类
/// </summary>
/// <returns></returns>
public static List<MetroNode> GetMetroClassificationModels()
{
List<MetroNode> models = null;
try
{
SqlConnection.Open();
models = [.. SqlConnection.GetAll<MetroNode>()];
//获取所有分类节点
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return models;
}
/// <summary>
/// 建筑工程共享参数
/// </summary>
/// <returns></returns>
public static List<ArchiSharedParameter> GetArchiSharedParameters()
{
List<ArchiSharedParameter> parameters = null;
try
{
SqlConnection.Open();
parameters = [.. SqlConnection.GetAll<ArchiSharedParameter>()];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return parameters;
}
/// <summary>
/// 轨道交通工程共享参数
/// </summary>
/// <returns></returns>
public static List<MetroSharedParameter> GetMetroSharedParameters()
{
List<MetroSharedParameter> parameters = null;
try
{
SqlConnection.Open();
parameters = [.. SqlConnection.GetAll<MetroSharedParameter>()];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return parameters;
}
/// <summary>
/// 获取轨道交通工程的特定标识的所有参数
/// </summary>
/// <param name="sign"></param>
/// <returns></returns>
public static List<AfcaMetroBaseParameter> GetMetroSignParameters(string sign)
{
List<AfcaMetroBaseParameter> parameters = null;
try
{
SqlConnection.Open();
var metrobaseProps = SqlConnection.GetAll<MetroCommonParameter>();
var metroProps = SqlConnection.GetAll<MetroDedicatedParameter>().Where(e => e.Categories.Contains(sign));
parameters = [.. metrobaseProps, .. metroProps];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return parameters;
}
///// <summary>
///// 获取建筑工程对应专业的特定标识的所有参数
///// </summary>
///// <param name="major"></param>
///// <param name="SignParamName"></param>
///// <returns></returns>
//public static List<AfcaArchiBaseCategory> GetArchiSignParameters(Major major, string SignParamName)
//{
// var allProperties = GetArchiMajorParameters(major);
// var signProperties = new List<AfcaArchiBaseCategory>();
// var level5Sign = allProperties.Where(p => p.Level5 == SignParamName);
// if (level5Sign.Any())
// {
// var referProp = level5Sign.FirstOrDefault();
// var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index);
// var l4Sign = parameters.Where(p => p.Level4 == referProp.Level4);
// var l3Sign = parameters.Where(p => p.Level4 == null && p.Level3 == referProp.Level3);
// var l2Sign = parameters.Where(p => p.Level3 == null && p.Level2 == referProp.Level2);
// var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1);
// signProperties.AddRange(level5Sign);
// signProperties.AddRange(l4Sign);
// signProperties.AddRange(l3Sign);
// signProperties.AddRange(l2Sign);
// signProperties.AddRange(l1Sign);
// return signProperties;
// }
// var level4Sign = allProperties.Where(p => p.Level4 == SignParamName && p.Level5 == null);
// if (level4Sign.Any())
// {
// var referProp = level4Sign.FirstOrDefault();
// var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index);
// var l3Sign = parameters.Where(p => p.Level4 == null && p.Level3 == referProp.Level3);
// var l2Sign = parameters.Where(p => p.Level3 == null && p.Level2 == referProp.Level2);
// var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1);
// signProperties.AddRange(level4Sign);
// signProperties.AddRange(l3Sign);
// signProperties.AddRange(l2Sign);
// signProperties.AddRange(l1Sign);
// return signProperties;
// }
// var level3Sign = allProperties.Where(p => p.Level3 == SignParamName && p.Level4 == null && p.Level5 == null);
// if (level3Sign.Any())
// {
// var referProp = level3Sign.FirstOrDefault();
// var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index);
// var l2Sign = parameters.Where(p => p.Level3 == null && p.Level2 == referProp.Level2);
// var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1);
// signProperties.AddRange(level3Sign);
// signProperties.AddRange(l2Sign);
// signProperties.AddRange(l1Sign);
// return signProperties;
// }
// var level2Sign = allProperties.Where(p => p.Level2 == SignParamName && p.Level3 == null && p.Level4 == null && p.Level5 == null);
// if (level2Sign.Any())
// {
// var referProp = level2Sign.FirstOrDefault();
// var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index);
// var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1);
// signProperties.AddRange(level2Sign);
// signProperties.AddRange(l1Sign);
// return signProperties;
// }
// return signProperties;
//}
///// <summary>
///// 获取对应专业的建筑工程属性条目
///// </summary>
///// <param name="major">专业</param>
///// <returns></returns>
//public static List<AfcaArchiBaseCategory> GetArchiMajorParameters(Major major)
//{
// List<AfcaArchiBaseCategory> properties = null;
// SqlConnection.Open();
// try
// {
// switch (major)
// {
// case Major.Architecture:
// properties = [.. SqlConnection.GetAll<AfcaArchitectureCategory>()];
// break;
// case Major.Structure:
// properties = [.. SqlConnection.GetAll<AfcaStructureParameter>()];
// break;
// case Major.Mechanical:
// properties = [.. SqlConnection.GetAll<AfcaMechanicalParameter>()];
// break;
// case Major.Electrical:
// properties = [.. SqlConnection.GetAll<AfcaElectricalParameter>()];
// break;
// case Major.Piping:
// properties = [.. SqlConnection.GetAll<AfcaPipingParameter>()];
// break;
// }
// }
// catch (Exception ex)
// {
// MessageBox.Show(ex.Message);
// }
// finally
// {
// SqlConnection.Close();
// }
// //获取所有分类节点
// return properties;
//}
/// <summary>
/// 获取轨道交通基本属性
/// </summary>
/// <returns></returns>
public static List<MetroCommonParameter> GetMetroCommonParameters()
{
SqlConnection.Open();
List<MetroCommonParameter> properties = null;
try
{
properties = [.. SqlConnection.GetAll<MetroCommonParameter>()];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
//获取所有分类节点
return properties;
}
/// <summary>
/// 初始化轨道交通树状节点,及属性表
/// </summary>
/// <param name="metroNodes">所有的分类节点(父子节点)</param>
/// <param name="initProperties">是否获取专项的属性</param>
/// <returns></returns>
public static List<MetroNode> InitTreeViewSource(List<MetroNode> metroNodes,
bool initProperties = false)
{
SqlConnection.Open();
IEnumerable<MetroNode> result = null;
try
{
//专项属性
var metroProps = SqlConnection.GetAll<MetroDedicatedParameter>().ToList();
foreach (var model in metroNodes)
{
if (initProperties)
{
//model的属性集
model.Properties = [.. metroProps.Where(p => p.ParamTableIndex == model.ParamTableIndex)];
}
//找到model的父节点
model.Parent = metroNodes.FirstOrDefault(t => t.CategoryName == model.ParentName);
//找到model的子节点
model.Children = [.. metroNodes.Where(t => t.ParentName == model.CategoryName)];
}
//所有父节点
result = metroNodes.Where(t => t.Parent == null && t.ParentName == null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return [.. result];
}
}
}