| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /* ==============================================================================
- * 功能描述:对revit日志的操作
- * 创 建 者:Garrett
- * 创建日期:2018/7/26 15:02:52
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB;
- using SAGA.DotNetUtils;
- using SAGA.DotNetUtils.Logger;
- using SAGA.MBI.Model;
- namespace SAGA.MBI.DataArrange
- {
- /// <summary>
- /// DalLogOperate
- /// </summary>
- public class DalLogOperate
- {
- /// <summary>
- /// 获取本层的日志记录
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static List<DocumentChangedLogMode> GetLogs(string path)
- {
- List<DocumentChangedLogMode> list = new List<DocumentChangedLogMode>();
- string logstr = ProjectLogManager.GetLogInfo(path);
- List<string> strs = logstr.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();
- foreach (var str in strs)
- {
- try
- {
- if (str.IsNotNullEmpty())
- {
- var mode = str.JsonToObject<DocumentChangedLogMode>();
- list.Add(mode);
- }
- }
- catch (Exception e)
- {
- Log4Net.Info(e.StackTrace);
- }
- }
- return list;
- }
- /// <summary>
- /// 读取日志数据
- /// 工作区
- /// </summary>
- /// <param name="beginTime">开始时间</param>
- /// <param name="floorId">楼层Id</param>
- /// <returns></returns>
- public static List<DocumentChangedLogMode> LoadLog(DateTime beginTime, string floorId = "")
- {
- List<DocumentChangedLogMode> list = GetAllLogs();
- var datas = list.Where(t => DateTime.Parse(t.DataTime) >= beginTime);
- if (floorId != "") datas = datas.Where(t => t.DocName == floorId);
- return datas.ToList();
- }
- public static List<DocumentChangedLogMode> GetAllLogs()
- {
- List<DocumentChangedLogMode> allDatas = new List<DocumentChangedLogMode>();
- var allFloorIds = GetAllRevitFiles();
- foreach (var floorId in allFloorIds)
- {
- var logs = GetLogs(floorId);
- allDatas.AddRange(logs);
- }
- return allDatas;
- }
- public static List<string> GetAllRevitFiles()
- {
- List<string> floorId = new List<string>();
- var projectFloors = DalModeFileManange.GetMissFileFloors(false);
- projectFloors.ForEach((tni) => GetFilePaths(tni, floorId));
- return floorId;
- }
- /// <summary>
- /// 获取所有楼层信息
- /// </summary>
- /// <param name="tni"></param>
- /// <param name="files"></param>
- private static void GetFilePaths(TreeNodeItem tni, List<string> files)
- {
- if (tni.Item is MFloor floor)
- {
- files.Add(floor.Id);
- }
- else
- {
- foreach (TreeNodeItem t in tni.Children)
- {
- GetFilePaths(t, files);
- }
- }
- }
- /// <summary>
- /// 合并日志,最终输出为一条有用的日志;注意可能为null
- /// 移出所有add和del之间的日志,
- /// 没有成对的,取出add或del日志,
- /// 如果没有add和del日志取出第一条日志。
- /// </summary>
- /// <param name="logs"></param>
- /// <returns></returns>
- public static DocumentChangedLogMode CombineLogs(List<DocumentChangedLogMode> logs)
- {
- DocumentChangedLogMode log = null;
- while (true)
- {
- int addIndex = logs.FindIndex(t => t.Operator == DocumentChangedOperator.Add.ToString());
- int delIndex = logs.FindIndex(t => t.Operator == DocumentChangedOperator.Delete.ToString());
- if (addIndex != -1 && delIndex != -1)
- {
- int startIndex = addIndex > delIndex ? delIndex : addIndex;
- int count = Math.Abs(addIndex - delIndex) + 1;
- logs.RemoveRange(startIndex, count);
- continue;
- }
- if (addIndex != -1 || delIndex != -1)
- {
- int index = addIndex != -1 ? addIndex : delIndex;
- log = logs[index];
- }
- else
- {
- log = logs.FirstOrDefault();
- }
- break;
- }
- return log;
- }
- }
- }
|