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);
/////
///// 获取建筑指定专业下的所有标识
/////
/////
/////
//public static List GetArchiSigns(Major major)
//{
// var archiProps = GetArchiMajorParameters(major).DistinctBy(p => p.Category).ToList();
// var archiSigns = new List();
// 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;
//}
///
/// 获取轨道交通所有标识
///
///
public static List GetMetroSigns()
{
List signs = new List();
try
{
SqlConnection.Open();
var metroProps = SqlConnection.GetAll().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;
}
///
/// 获取轨道交通所有分类
///
///
public static List GetMetroClassificationModels()
{
List models = null;
try
{
SqlConnection.Open();
models = [.. SqlConnection.GetAll()];
//获取所有分类节点
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return models;
}
///
/// 建筑工程共享参数
///
///
public static List GetArchiSharedParameters()
{
List parameters = null;
try
{
SqlConnection.Open();
parameters = [.. SqlConnection.GetAll()];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return parameters;
}
///
/// 轨道交通工程共享参数
///
///
public static List GetMetroSharedParameters()
{
List parameters = null;
try
{
SqlConnection.Open();
parameters = [.. SqlConnection.GetAll()];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return parameters;
}
///
/// 获取轨道交通工程的特定标识的所有参数
///
///
///
public static List GetMetroSignParameters(string sign)
{
List parameters = null;
try
{
SqlConnection.Open();
var metrobaseProps = SqlConnection.GetAll();
var metroProps = SqlConnection.GetAll().Where(e => e.Categories.Contains(sign));
parameters = [.. metrobaseProps, .. metroProps];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
return parameters;
}
/////
///// 获取建筑工程对应专业的特定标识的所有参数
/////
/////
/////
/////
//public static List GetArchiSignParameters(Major major, string SignParamName)
//{
// var allProperties = GetArchiMajorParameters(major);
// var signProperties = new List();
// 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;
//}
/////
///// 获取对应专业的建筑工程属性条目
/////
///// 专业
/////
//public static List GetArchiMajorParameters(Major major)
//{
// List properties = null;
// SqlConnection.Open();
// try
// {
// switch (major)
// {
// case Major.Architecture:
// properties = [.. SqlConnection.GetAll()];
// break;
// case Major.Structure:
// properties = [.. SqlConnection.GetAll()];
// break;
// case Major.Mechanical:
// properties = [.. SqlConnection.GetAll()];
// break;
// case Major.Electrical:
// properties = [.. SqlConnection.GetAll()];
// break;
// case Major.Piping:
// properties = [.. SqlConnection.GetAll()];
// break;
// }
// }
// catch (Exception ex)
// {
// MessageBox.Show(ex.Message);
// }
// finally
// {
// SqlConnection.Close();
// }
// //获取所有分类节点
// return properties;
//}
///
/// 获取轨道交通基本属性
///
///
public static List GetMetroCommonParameters()
{
SqlConnection.Open();
List properties = null;
try
{
properties = [.. SqlConnection.GetAll()];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
SqlConnection.Close();
}
//获取所有分类节点
return properties;
}
///
/// 初始化轨道交通树状节点,及属性表
///
/// 所有的分类节点(父子节点)
/// 是否获取专项的属性
///
public static List InitTreeViewSource(List metroNodes,
bool initProperties = false)
{
SqlConnection.Open();
IEnumerable result = null;
try
{
//专项属性
var metroProps = SqlConnection.GetAll().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];
}
}
}