布置图修改,材料表修改

This commit is contained in:
chenjinbu 2025-10-09 17:50:08 +08:00
parent b37d04a1e6
commit 7e2384fe38
22 changed files with 1152 additions and 349 deletions

View File

@ -14,6 +14,7 @@ using Entity = Teigha.DatabaseServices.Entity;
using Path = System.IO.Path;
using Color = Teigha.Colors.Color;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace SWS.CAD.Base
{
public static class General
@ -137,7 +138,7 @@ namespace SWS.CAD.Base
using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
ObjectId idBtr = doc.Database.Insert(blockName, blockName, blockDb, true);
ObjectId idBtr = doc.Database.Insert(blockName, blockName, blockDb, true);
BlockTableRecord curBtr = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
var block = new BlockReference(Point3d.Origin, idBtr);
block.Position = position;
@ -1065,12 +1066,13 @@ namespace SWS.CAD.Base
}
#endregion
#region
#region XData不为空的所有实
/// <summary>
/// 获取当前图纸XData不为空的所有实体
/// </summary>
/// <param name="listTagNumber">要删除的位号</param>
/// <returns></returns>
public static List<DtoBasePoint> GetAllEntity()
public static List<DtoBasePoint> GetAllEntity(List<string> listTagNumber)
{
doc = Application.DocumentManager.MdiActiveDocument;
ed = doc.Editor;
@ -1084,18 +1086,20 @@ namespace SWS.CAD.Base
{
// 获取模型空间块表记录
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord modelSpace = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
// 收集要删除的块参照
ObjectIdCollection idsToErase = new ObjectIdCollection();
// 遍历模型空间中的所有实体
foreach (ObjectId objId in modelSpace)
foreach (ObjectId objId in btr)
{
Entity entity = tr.GetObject(objId, OpenMode.ForRead) as Entity;
Entity entity = tr.GetObject(objId, OpenMode.ForWrite) as Entity;
if (entity != null && entity.XData != null)
{
// 提取句柄(十六进制格式)
var blockRef = entity as BlockReference;
if (blockRef != null)
{
bool flag = true;
var dto = new DtoBasePoint()
{
Handle = entity.Handle.ToString(),
@ -1113,14 +1117,27 @@ namespace SWS.CAD.Base
if (attRef.Tag == "HKSK_TAG")
{
dto.TagNumber = attRef.TextString;
if (listTagNumber != null && listTagNumber.Contains(attRef.TextString))
{
idsToErase.Add(objId);
flag = false;
}
break;
}
}
handles.Add(dto);
if (flag)
{ handles.Add(dto); }
}
}
}
if (idsToErase.Count > 0)
{
foreach (ObjectId id in idsToErase)
{
Entity ent = (Entity)tr.GetObject(id, OpenMode.ForWrite);
ent.Erase();
}
}
tr.Commit();
}
@ -1920,15 +1937,18 @@ namespace SWS.CAD.Base
/// <param name="tagNumber">位号值</param>
/// <param name="IsNotDefaultSymbol">true:默认块false异性块</param>
/// <returns></returns>
public static bool UpdateCableNo(string dwgName, List<string> listTagName, string tagNumber, bool IsNotDefaultSymbol, string tag, string system)
public static string UpdateCableNo(string dwgName, List<string> listTagName, string tagNumber, bool IsNotDefaultSymbol, string tag, string system)
{
try
{
OpenDwg(dwgName);
//OpenDwg(dwgName);
Application.DocumentManager.Open(dwgName);
//Thread.Sleep(1000);
doc = Application.DocumentManager.MdiActiveDocument;
ed = doc.Editor;
db = doc.Database;
var s=doc.Name;
// 开启事务
using (Transaction tr = db.TransactionManager.StartTransaction())
{
@ -1986,12 +2006,13 @@ namespace SWS.CAD.Base
tr.Commit();
}
doc.CloseAndSave(dwgName);
return true;
Thread.Sleep(20);
return "";
}
catch (Exception ex)
{
SendMessage(ex.Message);
return false;
return ex.Message;
}
}
@ -2019,7 +2040,7 @@ namespace SWS.CAD.Base
// 创建多行文字对象
MText mText = new MText();
mText.Contents = textInfo.Text;
mText.Location = textInfo.Position;
mText.Location = textInfo.Position;
mText.TextHeight = textInfo.Height;
mText.Width = textInfo.Width; // 设置文本宽度,控制自动换行
if (textInfo.Align == 0)
@ -2040,7 +2061,7 @@ namespace SWS.CAD.Base
DBText dbText = new DBText();
dbText.TextString = textInfo.Text;
dbText.Position = textInfo.Position;
dbText.AlignmentPoint= textInfo.Position;
dbText.AlignmentPoint = textInfo.Position;
dbText.Height = textInfo.Height;
if (textInfo.Align == 0)
{
@ -2078,7 +2099,7 @@ namespace SWS.CAD.Base
/// <param name="position">坐标位置</param>
/// <returns></returns>
public static ObjectId AddBlockDWG(string filePath, string blockName, Point3d position)
{
{
Document doc = Application.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
ObjectId oid = ObjectId.Null;
@ -2118,10 +2139,10 @@ namespace SWS.CAD.Base
// 处理插入结果
btr.AppendEntity(br);
tr.AddNewlyCreatedDBObject(br, true);
tr.AddNewlyCreatedDBObject(br, true);
tr.Commit();
oid = br.Id;
}
oid = br.Id;
}
}
catch (Exception ex)
{

View File

@ -8,13 +8,30 @@
<appender-ref ref="InfoRollingFileAppender"/>
<appender-ref ref="DebugRollingFileAppender"/>
</root>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
<!--一般错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
<levelMin value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
@ -29,7 +46,25 @@
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--严重错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Fatal.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--警告日志定义,用于记录已知不需处理的异常,系统警告信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
@ -70,24 +105,6 @@
</layout>
</appender>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
</log4net>

View File

@ -25,6 +25,8 @@ using GlobalObject = SWS.Commons.GlobalObject;
using SWS.Model;
using SWS.Service;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
using System.Windows;
using MessageBox = System.Windows.Forms.MessageBox;
[assembly: CommandClass(typeof(Commands))]
@ -67,6 +69,15 @@ namespace SWS.CAD
panel.Icon = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"CSharp.ico");
panel.Visible = true;
if (System.Windows.Application.Current == null)
{
var app = new System.Windows.Application
{
// 设置为显式关闭,防止窗口关闭时 Application 被自动终结
ShutdownMode = ShutdownMode.OnExplicitShutdown
};
}
GlobalObject.ClearLog();
}
catch (System.Exception e)
{

View File

@ -85,7 +85,7 @@ namespace SWS.Commons
public static List<TreeModel> designTree = new List<TreeModel>();
#endregion
public enum DBConst
{
/// <summary>
@ -316,19 +316,50 @@ namespace SWS.Commons
return dllPath;
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="resName">包括命名空间</param>
/// <returns></returns>
#region
/// <summary>
/// 获取日志文件夹路径
/// </summary>
/// <returns></returns>
public static string GetLogPath()
{
string path = Path.Combine(GetDllPath(),"SWSLogs");
return path;
}
#endregion
#region
public static void ClearLog()
{
try
{
var path = Path.Combine(GlobalObject.GetDllPath(), "SWSLogs\\");
int retainDays = 7;//保留7天的日志
foreach (var file in Directory.GetFiles(path, "*.log"))
{
if (File.GetCreationTime(file) < DateTime.Now.AddDays(-retainDays))
{
File.Delete(file);
}
}
}
catch
{
}
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="resName">包括命名空间</param>
/// <returns></returns>
public static System.Windows.Media.ImageSource ImageSourceFromEmbeddedResourceStream(string resName)
{
string imgPath = $"SWS.Commons.Images.{resName}";
System.Reflection.Assembly assy = System.Reflection.Assembly.GetExecutingAssembly();
//foreach (string resource in assy.GetManifestResourceNames())
//{
// Console.WriteLine(resource);//遍历所有的内嵌资源
//}
System.IO.Stream stream = assy.GetManifestResourceStream(imgPath);
if (stream == null)
return null;
@ -341,9 +372,8 @@ namespace SWS.Commons
public static string GetPCInfo()
{
string computerName = Environment.MachineName; // 获取计算机名称
string computerName = Environment.MachineName; // 获取计算机名称
string userName = Environment.UserName; // 获取当前用户名称
return $"{computerName} 计算机{userName} 用户";
}

View File

@ -1,12 +1,16 @@
using System;
using System.IO;
using System.Reflection;
using System.Windows;
using log4net.Appender;
using log4net.Config;
using log4net.Layout;
using Newtonsoft.Json.Linq;
namespace SWS.Commons
{
/// <summary>
/// nLog使用帮助类
/// Log使用帮助类
/// </summary>
public class LoggerHelper
{
@ -19,13 +23,42 @@ namespace SWS.Commons
private static LoggerHelper _obj = null;
private static string logPath = string.Empty;
private LoggerHelper()
{
logPath = Path.Combine(GlobalObject.GetDllPath(), "Logs\\");
if (!Directory.Exists(logPath))
{ Directory.CreateDirectory(logPath); }
var configFile = new FileInfo(Path.Combine(GlobalObject.GetDllPath(), "log4net.config"));
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile);
{
try
{
logPath = Path.Combine(GlobalObject.GetDllPath(), "Logs\\");
if (!Directory.Exists(logPath))
{ Directory.CreateDirectory(logPath); }
var configFile = new FileInfo(Path.Combine(GlobalObject.GetDllPath(), "log4net.config"));
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message+"\n\r"+ex.ToString());
}
}
#region
#endregion
public static bool ChangeLogFileName(string name)
{
var path = Path.Combine(GlobalObject.GetDllPath(), "SWSLogs\\");
if (!Directory.Exists(path))
{ Directory.CreateDirectory(path); }
var rootRepository = log4net.LogManager.GetRepository();
foreach (var appender in rootRepository.GetAppenders())
{
if (appender is log4net.Appender.FileAppender fileAppender&&!string.IsNullOrEmpty(fileAppender.File) && appender.Name.ToLower().Contains(name))
{
// string filename= Path.Combine(GlobalObject.GetDllPath(),$"SWSLogs\\");
//fileAppender.Close();
fileAppender.File = path;
fileAppender.ActivateOptions();
return true;
}
}
return false;
}
/// <summary>
/// 获取当前的日志记录<see cref="LoggerHelper"/>对象。
@ -55,6 +88,7 @@ namespace SWS.Commons
/// <param name="msg">需要记录的信息。</param>
public void Info(string msg)
{
ChangeLogFileName("info");
loginfo.Info(msg);
}
@ -67,6 +101,7 @@ namespace SWS.Commons
/// <param name="msg">需要记录的信息。</param>
public void Warn(string msg)
{
ChangeLogFileName("warn");
logwarn.Warn(msg);
}
@ -79,6 +114,7 @@ namespace SWS.Commons
/// <param name="msg">需要记录的信息。</param>
public void Error(string msg)
{
ChangeLogFileName("error");
logerror.Error("----------------------------Error BEGIN------------------------------");
logerror.Error(msg);
logerror.Error("-----------------------------Error END-------------------------------");
@ -93,9 +129,10 @@ namespace SWS.Commons
/// <param name="err">需要记录的系统异常。</param>
public void Fatal(string msg)
{
ChangeLogFileName("fatal");
logfatal.Fatal("----------------------------Fatal BEGIN------------------------------");
logerror.Fatal(msg);
logerror.Fatal("-----------------------------Fatal END-------------------------------");
logfatal.Fatal(msg);
logfatal.Fatal("-----------------------------Fatal END-------------------------------");
}
#endregion

View File

@ -8,13 +8,30 @@
<appender-ref ref="InfoRollingFileAppender"/>
<appender-ref ref="DebugRollingFileAppender"/>
</root>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
<!--一般错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
<levelMin value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
@ -29,7 +46,25 @@
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--严重错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Fatal.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--警告日志定义,用于记录已知不需处理的异常,系统警告信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
@ -70,24 +105,6 @@
</layout>
</appender>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
</log4net>

View File

@ -8,13 +8,30 @@
<appender-ref ref="InfoRollingFileAppender"/>
<appender-ref ref="DebugRollingFileAppender"/>
</root>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
<!--一般错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
<levelMin value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
@ -29,7 +46,25 @@
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--严重错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Fatal.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--警告日志定义,用于记录已知不需处理的异常,系统警告信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
@ -70,24 +105,6 @@
</layout>
</appender>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
</log4net>

View File

@ -1,5 +1,11 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using Bricscad.ApplicationServices;
using Bricscad.Ribbon;
using Bricscad.Windows;
using Prism.Events;
@ -16,6 +22,7 @@ using Telerik.Windows.Controls;
using Unity;
using Application = Bricscad.ApplicationServices.Application;
using DialogParameters = Prism.Services.Dialogs.DialogParameters;
using MessageBox = System.Windows.Forms.MessageBox;
[assembly: CommandClass(typeof(Commands))]
[assembly: ExtensionApplication(typeof(Commands))]
@ -23,27 +30,71 @@ namespace SWS.Electrical
{
public partial class Commands : IExtensionApplication
{
public void Initialize()
{
try
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
if (RibbonServices.RibbonPaletteSet == null)
RibbonServices.CreateRibbonPaletteSet();
Start.RegisterTypes();
Start.AutoLogin();
AddTab();
// 延迟初始化UI组件
InitializeCustomUI();
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 50; // 50ms延迟
timer.Tick += (s, e) =>
{
timer.Stop();
var ribbonControl = ComponentManager.Ribbon;
if (ribbonControl != null)
{
//先切换到常用标签,再切换到电气系统标签
ribbonControl.Tabs[0].IsActive = true;
Thread.Sleep(5);
foreach (var tab in ribbonControl.Tabs)
{
if (tab.Name == "Electric")
{
// 激活选项卡
tab.IsActive = true;
}
}
}
};
timer.Start();
if (System.Windows.Application.Current == null)
{
var app = new System.Windows.Application
{
// 设置为显式关闭,防止窗口关闭时 Application 被自动终结
ShutdownMode = ShutdownMode.OnExplicitShutdown
};
}
GlobalObject.ClearLog();
}
catch (System.Exception e)
{
Application.ShowAlertDialog(" An exception occurred in Initialize():\n" + e.ToString());
}
}
private void InitializeCustomUI()
{
try
{
//在这里初始化你的自定义UI
AddTab();
}
catch (System.Exception ex)
{
LoggerHelper.Current.Error("UI初始化失败: " + ex.Message);
}
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
@ -51,26 +102,27 @@ namespace SWS.Electrical
{
// 记录异常信息到日志文件,这里简单打印到控制 ?
System.Exception ex = e.ExceptionObject as System.Exception;
Console.WriteLine($"发生未处理的异常: {ex.Message}");
Console.WriteLine($"异常堆栈跟踪: {ex.StackTrace}");
LoggerHelper.Current.Error($"发生未处理的异常: {ex.Message}");
LoggerHelper.Current.Error($"异常信息: {ex.ToString()}");
LoggerHelper.Current.Error($"异常堆栈跟踪: {ex.StackTrace}");
// 关闭所有打开的对话框窗口
// 提示用户发生了错 ?
MessageBox.Show("发生错误,请检查日志文件以获取更多信息 ?", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
var result= MessageBox.Show("发生错误,是否打开日志文件以获取更多信息?", "错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
if(result== System.Windows.Forms.DialogResult.OK)
{
System.Diagnostics.Process.Start("explorer.exe", GlobalObject.GetLogPath());
}
}
catch (System.Exception innerEx)
{
// 如果在处理异常时又发生了异常,简单打印信 ?
Console.WriteLine($"处理异常时发生错 ? {innerEx.Message}");
LoggerHelper.Current.Error($"处理异常时发生错: {innerEx.Message}");
}
}
public void Terminate()
{
}
void AddTab()
{
RibbonControl rbnCtrl = ComponentManager.Ribbon; //整个上面都是ribbon比如莫工做的电气系统就是ribbon中的一个tab
@ -235,10 +287,10 @@ namespace SWS.Electrical
ribbonRowPanel.Items.Add(btnMenu);
ribbonRowPanel.Items.Add(new RibbonRowBreak());//换行,这样可以使按钮多行排列
#endregion
dataSource.Items.Add(ribbonRowPanel);
#endregion
#region Ribbon
dataSource = new RibbonPanelSource();
dataSource.Title = "材料表管理";
@ -249,7 +301,7 @@ namespace SWS.Electrical
//垂直排列按钮panel
ribbonRowPanel = new RibbonRowPanel();
#region buttons
btnMenu = new RibbonButton();
btnMenu.ToolTip = "材料表自动生成";
@ -290,6 +342,9 @@ namespace SWS.Electrical
}
public void Terminate()
{
}
}
}

View File

@ -0,0 +1,10 @@
using Prism.Events;
using SWS.Electrical.ViewModels;
using SWS.Model;
namespace SWS.Electrical
{
public class sendMessageEvent : PubSubEvent<MessageModel>
{
}
}

View File

@ -42,19 +42,7 @@ namespace SWS.Electrical
public static async Task<bool> CheckLogin()
{
try
{
//var parser = new FileIniDataParser();
//string[] lines = File.ReadAllLines(GlobalObject.configPath);
//IniData data = parser.Parser.Parse(File.ReadAllText(GlobalObject.configPath));
//var data = configIni.ReadFile(GlobalObject.configPath);
//string token = data["LoginInfo"]["LoginToken"];
//string loginkey = data["LoginInfo"]["LoginMark"];
//string curProjId = data["LoginInfo"]["CurProjId"];
//LocalWorkDir= data["Profile"]["strLocalWorkDir"];
//string address = data["Profile"]["strIPAddress"];
//string port = data["Profile"]["nPort"];
//string dbType = data["Profile"]["nConType"];
//string domain= data["Profile"]["strDomainName"];
{
string token = IniHelper.ReadValueFromIniFile("LoginInfo", "LoginToken");
string loginkey = IniHelper.ReadValueFromIniFile("LoginInfo", "LoginMark");
string curProjId = IniHelper.ReadValueFromIniFile("LoginInfo", "CurProjId");
@ -69,7 +57,7 @@ namespace SWS.Electrical
GlobalObject.client = new HttpClient()
{
BaseAddress = new Uri($"{strDomain}/api/"),
Timeout = TimeSpan.FromSeconds(120)
Timeout = TimeSpan.FromSeconds(600)
};
}
else if (dbType == "0")
@ -77,7 +65,7 @@ namespace SWS.Electrical
GlobalObject.client = new HttpClient()
{
BaseAddress = new Uri($"http://{address}:{port}/api/"),
Timeout = TimeSpan.FromSeconds(120)
Timeout = TimeSpan.FromSeconds(600)
};
}
GlobalObject.client.DefaultRequestHeaders.Add("logintoken", token);
@ -105,7 +93,7 @@ namespace SWS.Electrical
}
}
if (GlobalObject.curProject == null)
{ GlobalObject.curProject = new ec_project() { ProjectId = curProjId }; }
{ GlobalObject.curProject = new ec_project() { ProjectId = curProjId }; }
return flag;
}
catch (System.Exception ex)

View File

@ -31,9 +31,13 @@ namespace SWS.Electrical.Models
/// </summary>
public string BasePointTagNumber { get; set; } = "";
/// <summary>
/// 房间号
/// </summary>
public string RoomNo { get; set; }
/// <summary>
/// 比例
/// </summary>
public double Scale { get; set; }
public double Scale { get; set; }
/// <summary>
/// true:默认块false异性块
/// </summary>
@ -68,7 +72,7 @@ namespace SWS.Electrical.Models
{
get { return _TagPixelOnDwg; }
set { _TagPixelOnDwg = value; RaisePropertyChanged(nameof(TagPixelOnDwg)); }
}
}
/// <summary>
/// 肋位号 和 偏移量
/// </summary>

View File

@ -133,6 +133,7 @@
<ItemGroup>
<Compile Include="Commands.cs" />
<Compile Include="Control\ListBoxScrollToBottomBehavior.cs" />
<Compile Include="Event\checkInEvent.cs" />
<Compile Include="GlobalObj.cs" />
<Compile Include="Models\DtoBomDrawings.cs" />
<Compile Include="Models\DtoAutoPlotLayout.cs" />

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading;
@ -12,7 +13,11 @@ using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Media3D;
using Bricscad.EditorInput;
using ImTools;
using IniParser.Model;
using Microsoft.Win32;
using Newtonsoft.Json;
using Prism.Events;
using Prism.Services.Dialogs;
using SWS.CAD.Base;
using SWS.Commons;
@ -29,6 +34,17 @@ using Visibility = System.Windows.Visibility;
namespace SWS.Electrical.ViewModels
{
public class MessageModel
{
/// <summary>
/// 信息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 是否成功
/// </summary>
public bool IsSuccess { get; set; } = true;
}
public class DialogAutoArrangeLayoutViewModel : DialogBase, IDialogAware
{
private ObservableCollection<DtoDrawing> _listDrawings;
@ -227,6 +243,15 @@ namespace SWS.Electrical.ViewModels
get { return _ErrTagCount; }
set { _ErrTagCount = value; OnPropertyChanged(nameof(ErrTagCount)); }
}
private bool _isCheckDelete = false;
/// <summary>
/// 删除现有元件再绘制
/// </summary>
public bool isCheckDelete
{
get { return _isCheckDelete; }
set { _isCheckDelete = value; OnPropertyChanged(nameof(isCheckDelete)); }
}
/// <summary>
/// 命令事件
@ -252,8 +277,11 @@ namespace SWS.Electrical.ViewModels
private string dwgName = string.Empty;
private List<string> listLibraryTagName = new List<string>();//元件图纸上的位号属性名称,
private List<KeyValueModel> listDeck = new List<KeyValueModel>();//甲板号值列表
private List<KeyValueModel> listArea = new List<KeyValueModel>();//区域值列表
private List<KeyValueModel> listSystem = new List<KeyValueModel>();//所属系统值列表
private List<KeyValueModel> listSystem = new List<KeyValueModel>();//所属系统值列表
List<ec_enginedata> listEnginedata = new List<ec_enginedata>();//要绘制的多个位号的位号信息
List<ec_objecttype> listObjecttype = new List<ec_objecttype>();//要绘制的多个位号的属性信息列表
List<ec_enginedata> listUpdateEnginedata = new List<ec_enginedata>();//要绘制的多个位号的关联图纸属性列表
IEventAggregator eventAggregator;
public DialogAutoArrangeLayoutViewModel()
{
Command_StartDrawing = new DelegateCommand(onStartDrawing);
@ -270,10 +298,12 @@ namespace SWS.Electrical.ViewModels
_ServiceObjectType = GlobalObject.container.Resolve<ObjectTypeService>();
_ServiceProjectSettings = GlobalObject.container.Resolve<ProjectSettingsService>();
_ServiceDataItem = GlobalObject.container.Resolve<DataItemService>();
eventAggregator = GlobalObject.container.Resolve<IEventAggregator>();
listDrawings = new ObservableCollection<DtoDrawing>();
listBasePoint = new ObservableCollection<DtoAutoPlotLayout>();
listErrBasePoint = new ObservableCollection<DtoAutoPlotLayout>();
listMsg = new ObservableCollection<TextBlock>();
listMsg = new ObservableCollection<TextBlock>();
eventAggregator.GetEvent<sendMessageEvent>().Subscribe(onReceviceMsg, ThreadOption.UIThread, true);
var list = new ObservableCollection<KeyValueModel>();
list.Add(new KeyValueModel { Key = "甲板号", Value = "甲板号" });
//list.Add(new KeyValueModel { Key = "区域", Value = "区域" });
@ -364,11 +394,12 @@ namespace SWS.Electrical.ViewModels
{
AddMsg($"布置图列表加载中...");
var listDwg = await _ServiceDrawing.GetDrawingCatalogue();
if (listDwg == null)
if (listDwg == null || !listDwg.Any())
{
AddMsg($"布置图列表没有数据!");
return;
}
GlobalObject.AllDrawings = listDwg.ToList();
foreach (var model in listDwg)
{
if (model.Text == "布置图")
@ -409,14 +440,14 @@ namespace SWS.Electrical.ViewModels
}
else { listLibraryTagName = settingModel.SettingValue.Split(',').ToList(); }
//区域下拉框对应值列表
var listDetail = await _ServiceDataItem.GetDetails("Area");
if (listDetail != null && listDetail.Any())
{
foreach (var item in listDetail)
{ listArea.Add(new KeyValueModel() { Key = item.DataItemName, Value = item.DataItemName }); }
}
//var listDetail = await _ServiceDataItem.GetDetails("Area");
//if (listDetail != null && listDetail.Any())
//{
// foreach (var item in listDetail)
// { listArea.Add(new KeyValueModel() { Key = item.DataItemName, Value = item.DataItemName }); }
//}
//甲板号下拉框对应值列表
listDetail = await _ServiceDataItem.GetDetails("甲板号");
var listDetail = await _ServiceDataItem.GetDetails("甲板号");
if (listDetail != null && listDetail.Any())
{
foreach (var item in listDetail)
@ -505,7 +536,7 @@ namespace SWS.Electrical.ViewModels
{
string strErr = isBasePointErr ? "基点异常;" : "";
strErr += isTagErr ? "元件异常" : "";
strErr = strErr.Replace(";","");
strErr = strErr.EndsWith(";") ? strErr.Replace(";", "") : strErr;
listErrDto.Add(new DtoAutoPlotLayout()
{
IsSelected = true,
@ -513,6 +544,7 @@ namespace SWS.Electrical.ViewModels
DrawingFileName = dwg.DrawingFileName,
EngineDataID = basePoint.EngineDataID,
BasePointTagNumber = basePoint.TagNumber,
RoomNo = basePoint.RoomNo,
Scale = basePoint.Scale,
FileId = basePoint.FileId,
PixelOnDwg = basePoint.PixelOnDwg,
@ -538,6 +570,7 @@ namespace SWS.Electrical.ViewModels
DrawingFileName = dwg.DrawingFileName,
EngineDataID = basePoint.EngineDataID,
BasePointTagNumber = basePoint.TagNumber,
RoomNo = basePoint.RoomNo,
Scale = basePoint.Scale,
FileId = basePoint.FileId,
PixelOnDwg = basePoint.PixelOnDwg,
@ -588,41 +621,499 @@ namespace SWS.Electrical.ViewModels
MessageBox.Show("请先勾选基点元件信息!");
return;
}
listMsg.Clear();
var progress = new Progress<MessageModel>(UpdateProgress);
await DoWorkAsync(progress, new CancellationTokenSource());
#region back
//try
//{
// isDrawing = true;
// List<ec_library_file> listFile = new List<ec_library_file>();
// List<string> listBlockDwgPath = new List<string>(); //图块下载路径列表,同个异形块下载一次,先下载后删除
// listMsg.Clear();
// listUpdateEnginedata.Clear();
// //获取多个位号属性
// AddMsg($"开始获取全部位号属性...");
// string strTagNumbers = string.Join(",", listDto.Select(a => a.TagNumber).ToList());
// listObjecttype = await _ServiceObjectType.GetTagInfosByTags(strTagNumbers);
// listEnginedata = await _ServiceObjectType.GetEngineDataListByTags(strTagNumbers);
// AddMsg($"获取全部位号类型属性完成,共有{listObjecttype.Count}种类型!");
// //循环画图
// for (int i = 0; i < listDto.Count; i++)
// {
// var basePoint = listDto[i];
// if (basePoint.AutoDrawing == "已绘制")
// {
// AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{basePoint.TagNumber}]已绘制,跳至下一个元件");
// continue;
// }
// if (basePoint.AutoDrawing == "已存在" && !isCheckDelete)
// {
// AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{basePoint.TagNumber}]已存在,跳至下一个元件");
// continue;
// }
// msg = OpenDwg(basePoint);
// if (!string.IsNullOrEmpty(msg))
// {
// AddMsg($"图纸打开失败:{msg}", false);
// continue;
// }
// var listTag = listDto.Where(a => a.DrawingFileID == basePoint.DrawingFileID).Select(a => a.TagNumber).ToList();
// var listEntitys = isCheckDelete ? General.GetAllEntity(listTag) : General.GetAllEntity(new List<string>());//获取图纸所有实体
// var entity = listEntitys.FirstOrDefault(a => a.Handle.ToString() == basePoint.PixelOnDwg);
// if (entity == null)
// {
// AddMsg($"当前基点:{basePoint.BasePointTagNumber} 在图上找不到,不添加此元件,跳至下一个元件", false);
// continue;
// }
// var tag = basePoint.Tag;
// var tagDto = listEntitys.FirstOrDefault(a => a.TagNumber == basePoint.TagNumber);
// if (tagDto != null)
// {
// AddMsg($"当前元件:{basePoint.TagNumber} 在图上已存在,句柄:{tagDto.Handle},不添加此元件,跳至下一个元件", false);
// basePoint.AutoDrawing = "已存在";
// basePoint.TagPixelOnDwg = tagDto.Handle;
// continue;
// }
// filePath = Path.Combine(GlobalObject.GetCacheFolder(), $"{tag.TagNumber}.dwg");
// string blockName = string.Empty;
// if (string.IsNullOrEmpty(tag.FileId))
// {
// //元件ID为空 用本地默认图块图纸
// if (!string.IsNullOrEmpty(tag.TagNumber_Lower))
// {
// var blockDwgPath = Path.Combine(GlobalObject.GetDllPath(), "Template\\常规矩形两行图块.dwg");
// if (!File.Exists(blockDwgPath))
// {
// AddMsg($"默认图块找不到:{blockDwgPath}", false);
// continue;
// }
// //默认上下图块
// blockName = "常规矩形两行图块";
// File.Copy(blockDwgPath, filePath, true);
// AddMsg($"本地默认常规图块图纸复制成功");
// }
// else
// {
// var blockDwgPath = Path.Combine(GlobalObject.GetDllPath(), "Template\\常规矩形单行图块.dwg");
// if (!File.Exists(blockDwgPath))
// {
// AddMsg($"默认图块找不到:{blockDwgPath}", false);
// continue;
// }
// //默认图块,只有中间部分
// blockName = "常规矩形单行图块";
// File.Copy(blockDwgPath, filePath, true);
// AddMsg($"本地默认常规图块图纸复制成功");
// }
// }
// else
// {
// string blockDwgPath = Path.Combine(GlobalObject.GetCacheFolder(), $"{tag.FileId}.dwg");
// if (File.Exists(blockDwgPath))
// {
// File.Copy(blockDwgPath, filePath, true);
// var item = listFile.FirstOrDefault(a => a.LibraryFileID == tag.FileId);
// if (item != null)
// {
// blockName = item.LibraryFileName;
// }
// else { blockName = tag.TagNumber; }
// AddMsg($"元件图纸:{tag.TagNumber},已下载过,复制本地缓存块图纸文件成功");
// }
// else
// {
// //下载元件图纸文件
// var obj = await _ServiceLibraryFile.GetEntity(tag.FileId);
// blockName = obj.LibraryFileName;
// AddMsg($"元件图纸:{tag.TagNumber} 开始下载...");
// msg = await _ServiceAnnexes.DownloadFile(blockDwgPath, obj.FolderId);
// if (!string.IsNullOrEmpty(msg))
// {
// AddMsg($"元件图纸下载失败,信息:" + msg, false);
// continue;
// }
// File.Copy(blockDwgPath, filePath, true);
// listBlockDwgPath.Add(blockDwgPath);
// listFile.Add(obj);
// AddMsg($"元件图纸:{tag.TagNumber} 下载成功");
// }
// }
// listBlockDwgPath.Add(filePath);
// //把元件的位号属性改成要绘制的位号值
// var flag = General.UpdateCableNo(filePath, listLibraryTagName, tag.TagNumber, tag.IsNotDefaultSymbol, tag.TagNumber_Upper, tag.TagNumber_Lower);
// //X轴图上基点的坐标X +(接口数据元件的X + 接口数据元件的XOFF -接口数据基点的X-接口数据基点的Xoff*比例系数
// //Y轴图上基点的坐标Y +(接口数据元件的Yoff-接口数据基点的Yoff*比例系数
// double scale = basePoint.Scale;//比例系数
// double x = entity.X + (tag.X + double.Parse(tag.XOff) - basePoint.X - double.Parse(basePoint.XOff)) * scale;
// AddMsg($"块X坐标计算{entity.X}+({tag.X}+{tag.XOff}-{basePoint.X}-{basePoint.XOff})*{scale}={x}");
// double y = entity.Y + (double.Parse(tag.YOff) - double.Parse(basePoint.XOff)) * scale;
// AddMsg($"块Y坐标计算{entity.Y}+({tag.YOff}-{basePoint.XOff})*{scale}={y}");
// AddMsg($"块最后坐标:{x}{y}0");
// double z = entity.Z;
// Point3d tagPoint = new Point3d(x, y, z);
// AddMsg($"元件图纸:{tag.TagNumber} 开始添加进布置图中...");
// msg =await AddBlock(basePoint, blockName, filePath, tagPoint);
// if (string.IsNullOrEmpty(msg))
// {
// AddMsg($"布置图:{basePoint.DrawingFileName},成功插入元件:" + tag.TagNumber);
// basePoint.AutoDrawing = "已绘制";
// //当下一个要画元件的图纸和当前图纸不一样时,保存图纸
// if (i + 1 >= listDto.Count)
// { General.SetDrawingReadOnly(dwgName, false); }
// else
// {
// var nextTag = listDto[i + 1];
// if (basePoint.DrawingFileID != nextTag.DrawingFileID)
// { General.SetDrawingReadOnly(dwgName, false); }
// }
// }
// else
// {
// basePoint.AutoDrawing = "已失败";
// AddMsg($"元件:{tag.TagNumber},绘制异常:{msg}", false);
// }
// }
// if (listUpdateEnginedata.Any())
// {
// AddMsg($"开始批量位号关联属性,数量:{listUpdateEnginedata.Count}......");
// msg = await _ServiceObjectType.UpdatePixelAndPropBatch(listUpdateEnginedata);
// if (string.IsNullOrEmpty(msg))
// {
// AddMsg("位号关联属性成功,数量:" + listUpdateEnginedata.Count);
// }
// else
// {
// AddMsg($"位号关联属性失败,数量:{listUpdateEnginedata.Count},异常:{msg}", false);
// }
// }
// foreach (var file in listBlockDwgPath)
// {
// File.Delete(file);//删除缓存图块图纸文件
// File.Delete(file.Replace(".dwg", ".bak"));
// }
// AddMsg("操作已完成!");
// isDrawing = false;
//}
//catch (Exception ex)
//{
// MessageBox.Show("绘图异常:" + ex.Message);
// isDrawing = false;
//}
#endregion
}
#region DoWork
private void UpdateProgress(MessageModel dto)
{
System.Windows.Application.Current.Dispatcher.Invoke(new System.Action(() =>
{
AddMsg(dto.Message, dto.IsSuccess);
}));
}
private async Task DoWorkAsync(IProgress<MessageModel> progress, CancellationTokenSource cts)
{
try
{
int time = 1;
var msg = string.Empty;
var filePath = string.Empty;
var listDto = listBasePoint.Where(a => a.IsSelected == true).ToList();
isDrawing = true;
List<ec_library_file> listFile = new List<ec_library_file>();
List<string> listBlockDwgPath = new List<string>(); //图块下载路径列表,同个异形块下载一次,先下载后删除
listMsg.Clear();
listUpdateEnginedata.Clear();
//获取多个位号属性
AddMsg($"开始获取全部位号属性...");
await Task.Delay(time, cts.Token);
string strTagNumbers = string.Join(",", listDto.Select(a => a.TagNumber).ToList());
listObjecttype = await _ServiceObjectType.GetTagInfosByTags(strTagNumbers);
listEnginedata = await _ServiceObjectType.GetEngineDataListByTags(strTagNumbers);
AddMsg($"获取全部位号类型属性完成,共有{listObjecttype.Count}种类型!");
await Task.Delay(time, cts.Token);
//循环画图
for (int i = 0; i < listDto.Count; i++)
//foreach (var basePoint in listDto)
{
cts.Token.ThrowIfCancellationRequested();
var basePoint = listDto[i];
if (basePoint.AutoDrawing == "已绘制")
if (basePoint.AutoDrawing == "已绘制" && !isCheckDelete)
{
AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{basePoint.TagNumber}]已绘制,跳至下一个元件", false);
await Task.Delay(time, cts.Token);
continue;
}
if (basePoint.AutoDrawing == "已存在" && !isCheckDelete)
{
AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{basePoint.TagNumber}]已存在,跳至下一个元件", false);
await Task.Delay(time, cts.Token);
continue;
}
msg = OpenDwg(basePoint);
if (!string.IsNullOrEmpty(msg))
{
AddMsg($"图纸打开失败:{msg}", false);
await Task.Delay(time, cts.Token);
continue;
}
var listTag = listDto.Where(a => a.DrawingFileID == basePoint.DrawingFileID).Select(a => a.TagNumber).ToList();
var listEntitys = isCheckDelete ? General.GetAllEntity(listTag) : General.GetAllEntity(new List<string>());//获取图纸所有实体
var entity = listEntitys.FirstOrDefault(a => a.Handle.ToString() == basePoint.PixelOnDwg);
if (entity == null)
{
AddMsg($"当前基点:{basePoint.BasePointTagNumber} 在图上找不到,不添加此元件,跳至下一个元件", false);
await Task.Delay(time, cts.Token);
continue;
}
var tag = basePoint.Tag;
var tagDto = listEntitys.FirstOrDefault(a => a.TagNumber == basePoint.TagNumber);
if (tagDto != null)
{
AddMsg($"当前元件:{basePoint.TagNumber} 在图上已存在,句柄:{tagDto.Handle},不添加此元件,跳至下一个元件", false);
basePoint.AutoDrawing = "已存在";
basePoint.TagPixelOnDwg = tagDto.Handle;
await Task.Delay(time, cts.Token);
continue;
}
filePath = Path.Combine(GlobalObject.GetCacheFolder(), $"{tag.TagNumber}.dwg");
string blockName = string.Empty;
if (string.IsNullOrEmpty(tag.FileId))
{
//元件ID为空 用本地默认图块图纸
if (!string.IsNullOrEmpty(tag.TagNumber_Lower))
{
var blockDwgPath = Path.Combine(GlobalObject.GetDllPath(), "Template\\常规矩形两行图块.dwg");
if (!File.Exists(blockDwgPath))
{
AddMsg($"默认图块找不到:{blockDwgPath}", false);
await Task.Delay(time, cts.Token);
continue;
}
//默认上下图块
blockName = "常规矩形两行图块";
File.Copy(blockDwgPath, filePath, true);
}
else
{
var blockDwgPath = Path.Combine(GlobalObject.GetDllPath(), "Template\\常规矩形单行图块.dwg");
if (!File.Exists(blockDwgPath))
{
AddMsg($"默认图块找不到:{blockDwgPath}", false);
await Task.Delay(time, cts.Token);
continue;
}
//默认图块,只有中间部分
blockName = "常规矩形单行图块";
File.Copy(blockDwgPath, filePath, true);
}
}
else
{
string blockDwgPath = Path.Combine(GlobalObject.GetCacheFolder(), $"{tag.FileId}.dwg");
if (File.Exists(blockDwgPath))
{
File.Copy(blockDwgPath, filePath, true);
var item = listFile.FirstOrDefault(a => a.LibraryFileID == tag.FileId);
if (item != null)
{
blockName = item.LibraryFileName;
}
else { blockName = tag.TagNumber; }
}
else
{
//下载元件图纸文件
var obj = await _ServiceLibraryFile.GetEntity(tag.FileId);
blockName = obj.LibraryFileName;
AddMsg($"元件图纸:{tag.TagNumber} 开始下载...");
await Task.Delay(time, cts.Token);
msg = await _ServiceAnnexes.DownloadFile(blockDwgPath, obj.FolderId);
if (!string.IsNullOrEmpty(msg))
{
AddMsg($"元件图纸下载失败,信息:{msg}", false);
await Task.Delay(time, cts.Token);
continue;
}
File.Copy(blockDwgPath, filePath, true);
listBlockDwgPath.Add(blockDwgPath);
listFile.Add(obj);
AddMsg($"元件图纸:{tag.TagNumber} 下载成功");
await Task.Delay(time, cts.Token);
}
}
listBlockDwgPath.Add(filePath);
//把元件的位号属性改成要绘制的位号值
var flag = General.UpdateCableNo(filePath, listLibraryTagName, tag.TagNumber, tag.IsNotDefaultSymbol, tag.TagNumber_Upper, tag.TagNumber_Lower);
//X轴图上基点的坐标X +(接口数据元件的X + 接口数据元件的XOFF -接口数据基点的X-接口数据基点的Xoff*比例系数
//Y轴图上基点的坐标Y +(接口数据元件的Yoff-接口数据基点的Yoff*比例系数
double scale = basePoint.Scale;//比例系数
double x = 0;
double y = 0;
if (tag.X != 0)//肋位号不为0的时候去肋位号相关数据去算坐标
{
x = entity.X + (tag.X + double.Parse(tag.XOff) - basePoint.X - double.Parse(basePoint.XOff)) * scale;
msg = $"块X坐标计算{entity.X}+({tag.X}+{tag.XOff}-{basePoint.X}-{basePoint.XOff})*{scale}={x}";
AddMsg(msg);
y = entity.Y + (double.Parse(tag.YOff) - double.Parse(basePoint.XOff)) * scale;
msg = $"块Y坐标计算{entity.Y}+({tag.YOff}-{basePoint.XOff})*{scale}={y}";
AddMsg(msg);
await Task.Delay(time, cts.Token);
}
else
{
if (!string.IsNullOrEmpty(tag.RoomNo))
{
int rnd = new Random().Next(1, 5);
x = entity.X + rnd;
msg = $"块X坐标取房间号基点附近{entity.X}+{rnd}={x}";
AddMsg(msg);
y = entity.Y + rnd;
msg = $"块Y坐标取房间号基点附近{entity.Y}+{rnd}={y}";
AddMsg(msg);
await Task.Delay(time, cts.Token);
}
else
{
x = entity.X + (tag.X + double.Parse(tag.XOff) - basePoint.X - double.Parse(basePoint.XOff)) * scale;
msg = $"块X坐标计算{entity.X}+({tag.X}+{tag.XOff}-{basePoint.X}-{basePoint.XOff})*{scale}={x}";
AddMsg(msg);
y = entity.Y + (double.Parse(tag.YOff) - double.Parse(basePoint.XOff)) * scale;
msg = $"块Y坐标计算{entity.Y}+({tag.YOff}-{basePoint.XOff})*{scale}={y}";
AddMsg(msg);
await Task.Delay(time, cts.Token);
}
}
double z = entity.Z;
Point3d tagPoint = new Point3d(x, y, z);
AddMsg($"元件图纸:{tag.TagNumber} 开始添加进布置图中...");
await Task.Delay(time, cts.Token);
msg = await AddBlock(basePoint, blockName, filePath, tagPoint);
if (string.IsNullOrEmpty(msg))
{
AddMsg($"布置图:{basePoint.DrawingFileName},成功插入元件:{tag.TagNumber}");
basePoint.AutoDrawing = "已绘制";
await Task.Delay(time, cts.Token);
//当下一个要画元件的图纸和当前图纸不一样时,保存图纸
if (i + 1 >= listDto.Count)
{
AddMsg($"布置图:{basePoint.DrawingFileName},开始保存...");
await Task.Delay(time, cts.Token);
General.SetDrawingReadOnly(dwgName, false);
msg = $"布置图:{basePoint.DrawingFileName},保存完成";
await Task.Delay(time, cts.Token);
}
else
{
var nextTag = listDto[i + 1];
if (basePoint.DrawingFileID != nextTag.DrawingFileID)
{
AddMsg($"布置图:{basePoint.DrawingFileName},开始保存...");
await Task.Delay(time, cts.Token);
General.SetDrawingReadOnly(dwgName, false);
AddMsg($"布置图:{basePoint.DrawingFileName},保存完成");
await Task.Delay(time, cts.Token);
}
}
}
else
{
basePoint.AutoDrawing = "已失败";
AddMsg($"元件:{tag.TagNumber},绘制异常:{msg}");
await Task.Delay(time, cts.Token);
}
}
if (listUpdateEnginedata.Any())
{
AddMsg($"开始批量位号关联属性,数量:{listUpdateEnginedata.Count}......");
await Task.Delay(time, cts.Token);
msg = await _ServiceObjectType.UpdatePixelAndPropBatch(listUpdateEnginedata);
if (string.IsNullOrEmpty(msg))
{
AddMsg("位号关联属性成功,数量:" + listUpdateEnginedata.Count);
await Task.Delay(time, cts.Token);
}
else
{
AddMsg($"位号关联属性失败,数量:{listUpdateEnginedata.Count},异常:{msg}");
await Task.Delay(time, cts.Token);
}
}
foreach (var file in listBlockDwgPath)
{
File.Delete(file);//删除缓存图块图纸文件
File.Delete(file.Replace(".dwg", ".bak"));
}
AddMsg("操作已完成!");
isDrawing = false;
}
catch (Exception ex)
{
MessageBox.Show("绘图异常:" + ex.Message);
LoggerHelper.Current.Error("绘图异常:" + ex.ToString());
isDrawing = false;
}
}
#endregion
private async void onAutoDrawing()
{
#region back
var msg = string.Empty;
var filePath = string.Empty;
var listDto = listBasePoint.Where(a => a.IsSelected == true).ToList();
if (!listDto.Any())
{
MessageBox.Show("请先勾选基点元件信息!");
return;
}
try
{
List<ec_library_file> listFile = new List<ec_library_file>();
List<string> listBlockDwgPath = new List<string>(); //图块下载路径列表,同个异形块下载一次,先下载后删除
isDrawing = true;
listUpdateEnginedata.Clear();
//获取多个位号属性
AddMsg($"开始获取全部位号属性...");
string strTagNumbers = string.Join(",", listDto.Select(a => a.TagNumber).ToList());
listObjecttype = await _ServiceObjectType.GetTagInfosByTags(strTagNumbers);
listEnginedata = await _ServiceObjectType.GetEngineDataListByTags(strTagNumbers);
AddMsg($"获取全部位号类型属性完成,共有{listObjecttype.Count}种类型!");
//循环画图
for (int i = 0; i < listDto.Count; i++)
{
var basePoint = listDto[i];
if (basePoint.AutoDrawing == "已绘制" && !isCheckDelete)
{
AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{basePoint.TagNumber}]已绘制,跳至下一个元件");
continue;
}
if (basePoint.AutoDrawing == "已存在")
if (basePoint.AutoDrawing == "已存在" && !isCheckDelete)
{
AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{basePoint.TagNumber}]已存在,跳至下一个元件");
continue;
}
msg = await OpenDwg(basePoint.DrawingFileID);
msg = OpenDwg(basePoint);
if (!string.IsNullOrEmpty(msg))
{
AddMsg($"图纸打开失败:{msg}", false);
continue;
}
AddMsg($"打开图纸:{basePoint.DrawingFileName} ");
var listEntitys = General.GetAllEntity();//获取图纸所有实体
var listTag = listDto.Where(a => a.DrawingFileID == basePoint.DrawingFileID).Select(a => a.TagNumber).ToList();
var listEntitys = isCheckDelete ? General.GetAllEntity(listTag) : General.GetAllEntity(new List<string>());//获取图纸所有实体
var entity = listEntitys.FirstOrDefault(a => a.Handle.ToString() == basePoint.PixelOnDwg);
if (entity == null)
{
AddMsg($"当前基点:{basePoint.BasePointTagNumber} 在图上找不到,不添加此元件,跳至下一个元件", false);
continue;
}
var tag = basePoint.Tag;
var tagDto = listEntitys.FirstOrDefault(a => a.TagNumber == basePoint.TagNumber);
if (tagDto != null)
@ -632,12 +1123,6 @@ namespace SWS.Electrical.ViewModels
basePoint.TagPixelOnDwg = tagDto.Handle;
continue;
}
//var flag = basePoint.deck == tag.deck && basePoint.area == tag.area;
//if (!flag)
//{
// AddMsg($"当前基点[{basePoint.BasePointTagNumber}]和元件[{tag.TagNumber}] 的deck和area不一致不添加此元件跳至下一个元件", false);
// continue;
//}
filePath = Path.Combine(GlobalObject.GetCacheFolder(), $"{tag.TagNumber}.dwg");
string blockName = string.Empty;
if (string.IsNullOrEmpty(tag.FileId))
@ -654,6 +1139,7 @@ namespace SWS.Electrical.ViewModels
//默认上下图块
blockName = "常规矩形两行图块";
File.Copy(blockDwgPath, filePath, true);
AddMsg($"本地默认常规图块图纸复制成功");
}
else
{
@ -666,31 +1152,53 @@ namespace SWS.Electrical.ViewModels
//默认图块,只有中间部分
blockName = "常规矩形单行图块";
File.Copy(blockDwgPath, filePath, true);
AddMsg($"本地默认常规图块图纸复制成功");
}
}
else
{
//下载元件图纸文件
var obj = await _ServiceLibraryFile.GetEntity(tag.FileId);
blockName = obj.LibraryFileName;
AddMsg($"元件图纸:{tag.TagNumber} 开始下载...");
msg = await _ServiceAnnexes.DownloadFile(filePath, obj.FolderId);
if (!string.IsNullOrEmpty(msg))
string blockDwgPath = Path.Combine(GlobalObject.GetCacheFolder(), $"{tag.FileId}.dwg");
if (File.Exists(blockDwgPath))
{
AddMsg($"元件图纸下载失败,信息:" + msg, false);
continue;
File.Copy(blockDwgPath, filePath, true);
var item = listFile.FirstOrDefault(a => a.LibraryFileID == tag.FileId);
if (item != null)
{
blockName = item.LibraryFileName;
}
else { blockName = tag.TagNumber; }
AddMsg($"元件图纸:{tag.TagNumber},已下载过,复制本地缓存块图纸文件成功");
}
else
{
//下载元件图纸文件
var obj = await _ServiceLibraryFile.GetEntity(tag.FileId);
blockName = obj.LibraryFileName;
AddMsg($"元件图纸:{tag.TagNumber} 开始下载...");
msg = await _ServiceAnnexes.DownloadFile(blockDwgPath, obj.FolderId);
if (!string.IsNullOrEmpty(msg))
{
AddMsg($"元件图纸下载失败,信息:" + msg, false);
continue;
}
File.Copy(blockDwgPath, filePath, true);
listBlockDwgPath.Add(blockDwgPath);
listFile.Add(obj);
AddMsg($"元件图纸:{tag.TagNumber} 下载成功");
}
AddMsg($"元件图纸:{tag.TagNumber} 下载成功");
}
//filePath = "D:\\BricsCAD\\Temp\\测试11.dwg";
listBlockDwgPath.Add(filePath);
//把元件的位号属性改成要绘制的位号值
var flag = General.UpdateCableNo(filePath, listLibraryTagName, tag.TagNumber, tag.IsNotDefaultSymbol, tag.TagNumber_Upper, tag.TagNumber_Lower);
//X轴图上基点的坐标X +(接口数据元件的X + 接口数据元件的XOFF -接口数据基点的X-接口数据基点的Xoff*比例系数
//Y轴图上基点的坐标Y +(接口数据元件的Yoff-接口数据基点的Yoff*比例系数
double scale = 1;//比例系数
double scale = basePoint.Scale;//比例系数
double x = entity.X + (tag.X + double.Parse(tag.XOff) - basePoint.X - double.Parse(basePoint.XOff)) * scale;
AddMsg($"块X坐标计算{entity.X}+({tag.X}+{tag.XOff}-{basePoint.X}-{basePoint.XOff})*{scale}={x}");
double y = entity.Y + (double.Parse(tag.YOff) - double.Parse(basePoint.XOff)) * scale;
AddMsg($"块Y坐标计算{entity.Y}+({tag.YOff}-{basePoint.XOff})*{scale}={y}");
AddMsg($"块最后坐标:{x}{y}0");
double z = entity.Z;
Point3d tagPoint = new Point3d(x, y, z);
AddMsg($"元件图纸:{tag.TagNumber} 开始添加进布置图中...");
@ -709,9 +1217,31 @@ namespace SWS.Electrical.ViewModels
{ General.SetDrawingReadOnly(dwgName, false); }
}
}
else { AddMsg($"元件:{tag.TagNumber},绘制异常:{msg}"); }
else
{
basePoint.AutoDrawing = "已失败";
AddMsg($"元件:{tag.TagNumber},绘制异常:{msg}", false);
}
}
if (listUpdateEnginedata.Any())
{
AddMsg($"开始批量位号关联属性,数量:{listUpdateEnginedata.Count}......");
msg = await _ServiceObjectType.UpdatePixelAndPropBatch(listUpdateEnginedata);
if (string.IsNullOrEmpty(msg))
{
AddMsg("位号关联属性成功,数量:" + listUpdateEnginedata.Count);
}
else
{
AddMsg($"位号关联属性失败,数量:{listUpdateEnginedata.Count},异常:{msg}", false);
}
}
foreach (var file in listBlockDwgPath)
{
File.Delete(file);//删除缓存图块图纸文件
File.Delete(file.Replace(".dwg", ".bak"));
}
AddMsg("操作已完成!");
isDrawing = false;
}
@ -720,36 +1250,26 @@ namespace SWS.Electrical.ViewModels
MessageBox.Show("绘图异常:" + ex.Message);
isDrawing = false;
}
#endregion
}
/// <summary>
/// 打开图纸
/// </summary>
/// <returns></returns>
private async Task<string> OpenDwg(string dwgId)
private string OpenDwg(DtoAutoPlotLayout dto)
{
try
{
string res = string.Empty;
string fullpath = string.Empty;
var dwgObj = await _ServiceDrawing.GetDrawingFile(dwgId);
var cate = await _ServiceDrawingCatalogue.GetEntity(dwgObj.DrawingCatalogueID);
if (cate.FullPath != cate.DrawingCatalogueID)
{
foreach (var id in cate.FullPath.Split(',').ToList())
{
cate = await _ServiceDrawingCatalogue.GetEntity(id);
fullpath += $"{cate.DrawingCatalogueName}\\";
}
}
else { fullpath = $"{cate.DrawingCatalogueName}\\"; }
fullpath += dwgObj.DrawingFileName;
fullpath = Path.Combine(GlobalObj.LocalWorkDir, GlobalObject.curProject.ProjectName, fullpath);
string folderpath = GlobalObject.GetDwgPath(dto.DrawingFileID);
fullpath = Path.Combine(GlobalObj.LocalWorkDir, GlobalObject.curProject.ProjectName, folderpath, $"{dto.DrawingFileName}");
if (!File.Exists(fullpath))
{
return dwgObj.DrawingFileName + ",图纸文件不存在,请先检出到本地!";
return dto.DrawingFileName + ",图纸文件不存在,请先检出到本地!";
}
if (dwgObj.DrawingFileName == General.GetDwgName())
if (dto.DrawingFileName == General.GetDwgName())
{
return res;
}
@ -758,12 +1278,14 @@ namespace SWS.Electrical.ViewModels
{
General.OpenDwg(fullpath);
dwgName = fullpath;
AddMsg($"打开图纸:{dto.DrawingFileName} ");
return res;
}
else
{
General.SwitchToDocument(fullpath);
dwgName = fullpath;
AddMsg($"已打开图纸:{dto.DrawingFileName} ");
return res;
}
@ -784,46 +1306,54 @@ namespace SWS.Electrical.ViewModels
string tagNumber = basePoint.Tag.TagNumber;
double scale = basePoint.Scale;
string msg = string.Empty;
string tagNum = string.Empty;
var lsitEnginedata = await _ServiceObjectType.GetEngineDataListByTags(tagNumber);
if (!lsitEnginedata.Any())
//string tagNum = string.Empty;
//var lsitEnginedata = await _ServiceObjectType.GetEngineDataListByTags(tagNumber);
//if (!lsitEnginedata.Any())
//{
// msg = $"元件位号:{tagNumber},属性未绑定,_ServiceObjectType.GetEngineDataListByTags({tagNumber})接口无数据";
// AddMsg(msg, false);
// return msg;
//}
var enginedata = listEnginedata.FirstOrDefault(a => a.TagNumber == tagNumber);
if (enginedata == null)
{
msg = $"元件位号:{tagNumber},属性未绑定,ServiceEnginedata.GetTagPixelsById({enginedataId})接口无数据";
AddMsg(msg, false);
msg = $"元件位号:{tagNumber},找不到位号工程属性,无法关联属性!";
return msg;
}
string objTypeId = lsitEnginedata[0].ObjectTypeID;
string objTypeName = lsitEnginedata[0].ObjectTypeName;
string objTypeId = enginedata.ObjectTypeID;
string objTypeName = enginedata.ObjectTypeName;
var objId = General.AddTagDWG(blockDwg, tagName, tagNumber, objTypeId, scale, tagPoint);
#region
if (!objId.IsNull)
{
AddMsg($"元件已添加至图纸,句柄:{objId.Handle.ToString()}");
AddMsg("开始关联元件属性至图纸...");
var dwgLibrary = await _ServiceLibraryFile.GetEntity(blockDwgId);
//AddMsg($"元件已添加至图纸,句柄:{objId.Handle.ToString()}");
//RefreshUI(999, $"元件已添加至图纸,句柄:{objId.Handle.ToString()}");
//var dwgLibrary = await _ServiceLibraryFile.GetEntity(blockDwgId);
List<ec_enginedata_property> listPro = new List<ec_enginedata_property>();
var handlid = objId.Handle.ToString();//添加图元返回的句柄
ec_enginedata item = new ec_enginedata();
item.EngineDataID = enginedataId;
item.TagNumber = tagNumber;
item.ObjectTypeID = objTypeId;
item.Layout_Block_File = dwgLibrary;
//var result = await _ServiceObjectType.GetObjectTypePById(objTypeId);//添加属性
var res = await _ServiceObjectType.GetTagInfosByTags(tagNumber);
if (res.Any())
//item.Layout_Block_File = dwgLibrary;
var tagInfo = listObjecttype.FirstOrDefault(a => a.ObjectTypeID == enginedata.ObjectTypeID);
if (tagInfo == null)
{
foreach (var dto in res[0].tags[0].EngineDataProperty)
msg = $"元件位号:{tagNumber},找不到位号属性信息,无法关联属性!";
return msg;
}
foreach (var dto in tagInfo.tags[0].EngineDataProperty)
{
listPro.Add(new ec_enginedata_property()
{
listPro.Add(new ec_enginedata_property()
{
EngineDataPropertyID = dto.PropertyID,
PropertyName = dto.PropertyName,
PropertyNameEN = dto.PropertyNameEN,
PropertyValue = dto.PropertyValue,
MeasuringUnit = dto.MeasuringUnit,
PropertyGID = dto.PropertyGID,
PropertyGroupName = dto.PropertyGroupName
});
}
EngineDataPropertyID = dto.PropertyID,
PropertyName = dto.PropertyName,
PropertyNameEN = dto.PropertyNameEN,
PropertyValue = dto.PropertyValue,
MeasuringUnit = dto.MeasuringUnit,
PropertyGID = dto.PropertyGID,
PropertyGroupName = dto.PropertyGroupName
});
}
item.EngineDataProperty = listPro;
List<ec_enginedata_pixel> listPixel = new List<ec_enginedata_pixel>();
@ -831,7 +1361,7 @@ namespace SWS.Electrical.ViewModels
{
TagNumber = tagNumber,
DrawingFileID = dwgId,
LibraryFileID = dwgLibrary == null ? "" : dwgLibrary.LibraryFileID,
LibraryFileID = blockDwgId,// == null ? "" : dwgLibrary.LibraryFileID
PixelCode = handlid,
ObjectTypeID = objTypeId,
ObjectTypeName = objTypeName,
@ -839,25 +1369,13 @@ namespace SWS.Electrical.ViewModels
};
listPixel.Add(pixelDto);
item.EngineDataPixel = listPixel;
msg = await _ServiceObjectType.UpdatePixelAndProp(item);
if (msg != string.Empty)
{
msg = "保存元件属性至图纸异常:" + msg;
AddMsg(msg, false);
return msg;
}
else
{
basePoint.TagPixelOnDwg = handlid;
AddMsg("添加元件属性至图纸成功!");
return "";
}
basePoint.TagPixelOnDwg = handlid;
listUpdateEnginedata.Add(item);
return "";
}
else
{
msg = $"元件:{blockDwg} ,添加失败";
AddMsg(msg, false);
return msg;
}
#endregion
@ -891,11 +1409,14 @@ namespace SWS.Electrical.ViewModels
foreach (var item in listBasePoint)
{
item.IsSelected = IsSelectAll;
}
}
}
string message = string.Empty;
bool isSuccess = false;
/// <summary>
/// 添加提示信息
/// 添加 提示信息
/// </summary>
/// <param name="msg">信息</param>
/// <param name="isSucc">是否成功</param>
@ -903,15 +1424,23 @@ namespace SWS.Electrical.ViewModels
{
try
{
TextBlock tb = new TextBlock();
tb.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff") + "==>> " + msg;
tb.Foreground = isSucc ? Brushes.LightSeaGreen : Brushes.Red;
listMsg.Add(tb);
System.Windows.Application.Current.Dispatcher.Invoke((System.Action)(() =>
{
TextBlock tb = new TextBlock();
tb.Text = DateTime.Now.ToString("yyyy-MM-6dd HH:mm:ss:ffff") + "==>> " + msg;
tb.Foreground = isSucc ? Brushes.LightSeaGreen : Brushes.Red;
listMsg.Add(tb);
}));
//Task.Delay(100);
}
catch (Exception ex)
{
MessageBox.Show("添加提示信息异常:" + ex.Message);
}
}
private void onReceviceMsg(MessageModel model)
{
AddMsg(model.Message, model.IsSuccess);
}
}
}

View File

@ -420,7 +420,7 @@ namespace SWS.Electrical.ViewModels
if (dwg.AutoGenerate == "已存在")
{
AddMsg($"当前图纸[{dwg.DrawingFileName}]的材料表已存在,跳至下一个图纸");
//continue;
continue;
}
if (dwg.AutoGenerate == "无材料信息")
{
@ -433,7 +433,7 @@ namespace SWS.Electrical.ViewModels
{
AddMsg($"当前图纸[{dwg.DrawingFileName}]的材料表已存在,跳至下一个图纸", false);
dwg.AutoGenerate = "已存在";
//continue;
continue;
}
var listBomGroup = await _ServicePlotBOM.GetBOMGroupInfo(dwg.DrawingFileID);

View File

@ -217,7 +217,7 @@
Orientation="Horizontal">
<Button
Width="160"
Margin="100,0,0,0"
Margin="80,0,0,0"
Command="{Binding Command_GetBasePoint}"
Content="获取元件信息"
FontSize="16" />
@ -227,6 +227,14 @@
Command="{Binding Command_StartDrawing}"
Content="开始自动绘图"
FontSize="16" />
<CheckBox
Margin="40,0,0,0"
HorizontalAlignment="Right"
VerticalContentAlignment="Bottom"
Content="删除已画元件再绘制"
FontSize="12"
Foreground="Red"
IsChecked="{Binding isCheckDelete, Mode=TwoWay}" />
</StackPanel>
<TabControl
Grid.Row="2"
@ -330,6 +338,9 @@
<DataTrigger Binding="{Binding AutoDrawing}" Value="已存在">
<Setter Property="Background" Value="LightYellow" />
</DataTrigger>
<DataTrigger Binding="{Binding AutoDrawing}" Value="已失败">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>

View File

@ -8,13 +8,30 @@
<appender-ref ref="InfoRollingFileAppender"/>
<appender-ref ref="DebugRollingFileAppender"/>
</root>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
<!--一般错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
<levelMin value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
@ -29,7 +46,25 @@
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--严重错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Fatal.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--警告日志定义,用于记录已知不需处理的异常,系统警告信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
@ -70,24 +105,6 @@
</layout>
</appender>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
</log4net>

View File

@ -1,4 +1,4 @@
#pragma checksum "..\..\..\Views\DialogAutoArrangeLayout.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "D381518E6A709FE4FD61B7B59C0FE6A02830580BBED56CC9959DA9E027AC6A01"
#pragma checksum "..\..\..\Views\DialogAutoArrangeLayout.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "8E0302C7B31AF0BFE57DDCDA7BD9F7E1B53C3458B14B24E3C31D70FADF66C1B2"
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
@ -85,7 +85,7 @@ namespace SWS.Electrical.Views {
#line hidden
#line 237 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 245 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.DataGrid dgTag;
@ -93,7 +93,7 @@ namespace SWS.Electrical.Views {
#line hidden
#line 340 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 351 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.DataGrid dgErrTag;
@ -136,7 +136,7 @@ namespace SWS.Electrical.Views {
case 2:
this.dgTag = ((System.Windows.Controls.DataGrid)(target));
#line 243 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 251 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
this.dgTag.LoadingRow += new System.EventHandler<System.Windows.Controls.DataGridRowEventArgs>(this.dgTag_LoadingRow);
#line default
@ -145,7 +145,7 @@ namespace SWS.Electrical.Views {
case 3:
this.dgErrTag = ((System.Windows.Controls.DataGrid)(target));
#line 346 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 357 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
this.dgErrTag.LoadingRow += new System.EventHandler<System.Windows.Controls.DataGridRowEventArgs>(this.dgTag_LoadingRow);
#line default

View File

@ -1,4 +1,4 @@
#pragma checksum "..\..\..\Views\DialogAutoArrangeLayout.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "D381518E6A709FE4FD61B7B59C0FE6A02830580BBED56CC9959DA9E027AC6A01"
#pragma checksum "..\..\..\Views\DialogAutoArrangeLayout.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "8E0302C7B31AF0BFE57DDCDA7BD9F7E1B53C3458B14B24E3C31D70FADF66C1B2"
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
@ -85,7 +85,7 @@ namespace SWS.Electrical.Views {
#line hidden
#line 237 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 245 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.DataGrid dgTag;
@ -93,7 +93,7 @@ namespace SWS.Electrical.Views {
#line hidden
#line 340 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 351 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.DataGrid dgErrTag;
@ -136,7 +136,7 @@ namespace SWS.Electrical.Views {
case 2:
this.dgTag = ((System.Windows.Controls.DataGrid)(target));
#line 243 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 251 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
this.dgTag.LoadingRow += new System.EventHandler<System.Windows.Controls.DataGridRowEventArgs>(this.dgTag_LoadingRow);
#line default
@ -145,7 +145,7 @@ namespace SWS.Electrical.Views {
case 3:
this.dgErrTag = ((System.Windows.Controls.DataGrid)(target));
#line 346 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
#line 357 "..\..\..\Views\DialogAutoArrangeLayout.xaml"
this.dgErrTag.LoadingRow += new System.EventHandler<System.Windows.Controls.DataGridRowEventArgs>(this.dgTag_LoadingRow);
#line default

View File

@ -38,6 +38,10 @@ namespace SWS.Model
/// </summary>
public string PixelOnDwg { get; set; }
/// <summary>
/// 房间号
/// </summary>
public string RoomNo { get; set; }
/// <summary>
/// 比例
/// </summary>
public double Scale { get; set; }

View File

@ -23,7 +23,7 @@ namespace SWS.Service
GlobalObject.client = new HttpClient()
{
BaseAddress = new Uri($"http://{address}:{port}/api/"),
Timeout = TimeSpan.FromSeconds(120)
Timeout = TimeSpan.FromSeconds(180)
};
//}
//else
@ -57,9 +57,9 @@ namespace SWS.Service
{
var uri = new Uri(GlobalObject.client.BaseAddress + requestUri);
var funName = uri.Segments.Last();
LoggerHelper.Current.WriteJson(funName, strJson);
//LoggerHelper.Current.WriteJson(funName, strJson);
}
catch { }
catch (Exception ex){ }
}
public async Task<learunHttpRes<T>> GetAsync<T>(string requestUri)
@ -79,7 +79,7 @@ namespace SWS.Service
if (response.StatusCode != HttpStatusCode.OK)
{
string errorMsg = $"服务器地址 [{requestUri}] 获取数据失败, 返回HTTP代码" + response.StatusCode;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new HttpRequestException(errorMsg);
}
result = await response.Content.ReadAsStringAsync();
@ -89,14 +89,14 @@ namespace SWS.Service
catch (JsonException)
{
string errorMsg = $"服务器地址 [{requestUri}] 解析为{typeof(T).Name}失败,原始返回数据为: " + result;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
resultObj = new learunHttpRes<T>() { code = -100, info = errorMsg };
return resultObj;
}
catch (Exception ex)
{
string errorMsg = $"接口:{requestUri}失败,异常:{ex.Message} ";
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
resultObj = new learunHttpRes<T>() { code = -100, info=errorMsg };
return resultObj;
}
@ -111,12 +111,12 @@ namespace SWS.Service
//业务错误不是http本质错误
default:
string errorMsg = $"服务器地址 [{requestUri}] Get失败, 返回自定义代码:" + resultObj.code;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new HttpRequestException(errorMsg);
}
}
LoggerHelper.Current.Info($"Get成功{requestUri}");
////LoggerHelper.Current.Info($"Get成功{requestUri}");
return resultObj;
@ -133,7 +133,7 @@ namespace SWS.Service
if (response.StatusCode != HttpStatusCode.OK)
{
string errorMsg = $"服务器地址 [{requestUri}] 获取数据失败, 返回HTTP代码" + response.StatusCode;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new HttpRequestException(errorMsg);
}
result = await response.Content.ReadAsStringAsync();
@ -143,17 +143,17 @@ namespace SWS.Service
catch (JsonException)
{
string errorMsg = $"服务器地址 [{requestUri}] 解析为{typeof(T).Name}失败,原始返回数据为: " + result;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new JsonException(errorMsg);
}
catch (Exception ex)
{
string errorMsg = $"接口:{requestUri}失败,异常:{ex.Message} ";
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new JsonException(errorMsg);
}
LoggerHelper.Current.Info($"Get成功{requestUri}");
//LoggerHelper.Current.Info($"Get成功{requestUri}");
return resultObj;
@ -184,7 +184,7 @@ namespace SWS.Service
if (response.StatusCode != HttpStatusCode.OK)
{
string errorMsg = $"服务器地址 [{requestUri}] Post数据失败, 返回HTTP代码" + response.StatusCode;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new HttpRequestException(errorMsg);
}
result = await response.Content.ReadAsStringAsync();
@ -194,14 +194,14 @@ namespace SWS.Service
catch (JsonException)
{
string errorMsg = $"服务器地址 [{requestUri}] 解析为{typeof(T).Name}失败,原始返回数据为: " + result;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
resultObj = new learunHttpRes<T>() { code = -100, info = errorMsg };
return resultObj;
}
catch (Exception ex)
{
string errorMsg = $"接口:{requestUri}失败,参数数据为:{strContent},异常:{ex.Message} ";
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
resultObj = new learunHttpRes<T>() { code = -100, info = errorMsg };
return resultObj;
}
@ -216,12 +216,12 @@ namespace SWS.Service
//业务错误不是http本质错误
default:
string errorMsg = $"服务器地址 [{requestUri}] Post失败, 返回自定义代码:" + resultObj.code;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new HttpRequestException(errorMsg);
}
}
LoggerHelper.Current.Info($"Post成功{requestUri}");
//LoggerHelper.Current.Info($"Post成功{requestUri}");
return resultObj;
@ -245,7 +245,7 @@ namespace SWS.Service
if (response.StatusCode != HttpStatusCode.OK)
{
string errorMsg = $"服务器地址 [{requestUri}] Post数据失败, 返回HTTP代码" + response.StatusCode;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new HttpRequestException(errorMsg);
}
var result = await response.Content.ReadAsStringAsync();
@ -257,10 +257,10 @@ namespace SWS.Service
catch (JsonException)
{
string errorMsg = $"服务器地址 [{requestUri}] 解析为 string 失败,原始返回数据为: " + result;
LoggerHelper.Current.Error(errorMsg);
//LoggerHelper.Current.Error(errorMsg);
throw new JsonException(errorMsg);
}
LoggerHelper.Current.Info($"Post上传文件成功{requestUri}");
//LoggerHelper.Current.Info($"Post上传文件成功{requestUri}");
return resultObj;
}

View File

@ -8,13 +8,30 @@
<appender-ref ref="InfoRollingFileAppender"/>
<appender-ref ref="DebugRollingFileAppender"/>
</root>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
<!--一般错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
<levelMin value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
@ -29,7 +46,25 @@
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--严重错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Fatal.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--警告日志定义,用于记录已知不需处理的异常,系统警告信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
@ -70,24 +105,6 @@
</layout>
</appender>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
</log4net>

View File

@ -8,13 +8,30 @@
<appender-ref ref="InfoRollingFileAppender"/>
<appender-ref ref="DebugRollingFileAppender"/>
</root>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
<!--一般错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
<levelMin value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
@ -29,7 +46,25 @@
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--严重错误日志定义,用于记录已知需处理的与未捕获的异常-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Fatal.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n"/>
</layout>
</appender>
<!--警告日志定义,用于记录已知不需处理的异常,系统警告信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
@ -70,24 +105,6 @@
</layout>
</appender>
<!--信息日志定义,用于收集开发调试信息-->
<!--日志输出格式:[时间]:类名 线程号 消息-->
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<file value="Logs/"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="100" />
<maxFileSize value="10240" />
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd//&quot;Debug.log&quot;"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n"/>
</layout>
</appender>
</log4net>