75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.Text;
|
|
using Autodesk.Revit.UI;
|
|
using net.sf.mpxj;
|
|
using net.sf.mpxj.MpxjUtilities;
|
|
using net.sf.mpxj.reader;
|
|
using Sai.RvKits;
|
|
using SZBIM.StandardTools;
|
|
|
|
namespace Sai.Common.Shared.WBSCoder
|
|
{
|
|
internal class ProjectUtil
|
|
{
|
|
/// <summary>
|
|
/// 获取最底层的任务集
|
|
/// </summary>
|
|
/// <param name="filename"></param>
|
|
/// <param name="lastTaskItems"></param>
|
|
/// <returns></returns>
|
|
public static ObservableCollection<TaskItem> GetTasks(string filename,
|
|
ObservableCollection<TaskItem> lastTaskItems)
|
|
{
|
|
lastTaskItems.Clear();
|
|
AssemblyLoader loader = new AssemblyLoader(RelativePaths.DirAssembly);
|
|
loader.HookAssemblyResolve();
|
|
try
|
|
{
|
|
//MPPReader mPPReader = new MPPReader();
|
|
StringBuilder sb = new StringBuilder();
|
|
var reader = ProjectReaderUtility.getProjectReader(filename);
|
|
ProjectFile mpp = reader.read(filename);
|
|
var tasks = mpp.Tasks.ToIEnumerable();
|
|
foreach (Task task in tasks)
|
|
{
|
|
if (task.ChildTasks.size() == 0)
|
|
{
|
|
var temp = task.GetText(1);
|
|
if (string.IsNullOrEmpty(temp) || string.IsNullOrWhiteSpace(temp))
|
|
{
|
|
sb.AppendLine($"任务:({task.ParentTask.ParentTask.Name}->{task.ParentTask.Name}->{task.Name})未识别到编码");
|
|
continue;
|
|
}
|
|
|
|
string code = WbsCoderUtils.FormatWbsCode(temp);
|
|
|
|
|
|
TaskItem taskItem = new TaskItem(task)
|
|
{
|
|
Name = task.Name,
|
|
Parent = task.ParentTask.Name,
|
|
WBSCode = code
|
|
};
|
|
lastTaskItems.Add(taskItem);
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty($"{sb}"))
|
|
{
|
|
//TaskDialog.ShowTop("错误", $"{sb}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TaskDialog.Show("读取文件任务失败", $"{ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
loader.UnhookAssemblyResolve();
|
|
}
|
|
|
|
return lastTaskItems;
|
|
}
|
|
}
|
|
} |