| | |
| | | namespace HStation.WinFrmUI |
| | | using DevExpress.XtraScheduler.VCalendar; |
| | | |
| | | namespace HStation.WinFrmUI |
| | | { |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public class ImportXhsProjectHelper |
| | | { |
| | | private const string _tempFolder = "project-import-temp"; |
| | | private const string _tempFolder = "ImportProjectTemp";//导入项目临时文件夹 |
| | | |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public static async Task<bool> Import(ImportXhsProjectViewModel vm, Action<string> feedBackMsg, Action<int, int> feedBackProgress) |
| | | { |
| | | #region 文件解析 |
| | | |
| | | var tempFolderPath = Path.Combine(Yw.Service.ConfigHelper.DataPath, HStation.Settings.XhsParasHelper.Xhs.DataFolder, _tempFolder); |
| | | var bol = Yw.FileFolderZipHelper.UnZip(vm.ZipFile, tempFolderPath, null); |
| | | if (!bol) |
| | | { |
| | | feedBackMsg?.Invoke("模型文件解析失败"); |
| | | return bol; |
| | | } |
| | | #region 临时文件处理 |
| | | |
| | | var tempDirectoryInfo = new DirectoryInfo(tempFolderPath); |
| | | var allFileInfoList = tempDirectoryInfo.GetFiles(); |
| | | if (allFileInfoList == null || allFileInfoList.Count() < 1) |
| | | var tempFolder = Path.Combine(Yw.Service.ConfigHelper.DataPath, HStation.Settings.XhsParasHelper.Xhs.DataFolder, _tempFolder); |
| | | //如果存在临时文件夹 |
| | | if (Directory.Exists(tempFolder)) |
| | | { |
| | | feedBackMsg?.Invoke("模型文件解析失败"); |
| | | return bol; |
| | | //删除临时文件夹及子目录与文件 |
| | | Directory.Delete(tempFolder, true); |
| | | } |
| | | //创建临时文件夹 |
| | | Directory.CreateDirectory(tempFolder); |
| | | |
| | | #endregion |
| | | |
| | | #region 水力模型 |
| | | #region 压缩文件解析 |
| | | |
| | | feedBackMsg?.Invoke("正在解析模型文件..."); |
| | | var bol = Yw.FileFolderZipHelper.UnZip(vm.ZipFile, tempFolder, null); |
| | | if (!bol) |
| | | { |
| | | feedBackMsg?.Invoke("模型文件解析失败!!!"); |
| | | return bol; |
| | | } |
| | | |
| | | var tempFolderInfo = new DirectoryInfo(tempFolder); |
| | | var allFileInfoList = tempFolderInfo.GetFiles(); |
| | | if (allFileInfoList == null || allFileInfoList.Count() < 1) |
| | | { |
| | | feedBackMsg?.Invoke("模型文件解析失败!!!"); |
| | | return bol; |
| | | } |
| | | |
| | | feedBackMsg?.Invoke("模型文件解析成功。。。"); |
| | | |
| | | feedBackProgress?.Invoke(100, 10); |
| | | |
| | | #endregion |
| | | |
| | | #region 水力结构文件 |
| | | |
| | | feedBackMsg?.Invoke("正在解析水力结构文件..."); |
| | | var jsonFileInfo = allFileInfoList.Where(x => x.Extension == ".json").FirstOrDefault(); |
| | | if (jsonFileInfo == null) |
| | | { |
| | | feedBackMsg?.Invoke("水力结构文件解析失败"); |
| | | feedBackMsg?.Invoke("水力结构文件解析失败!!!"); |
| | | return false; |
| | | } |
| | | |
| | | var jsonText = File.ReadAllText(jsonFileInfo.FullName); |
| | | var revitModel = JsonHelper.Json2Object<HStation.Model.RevitModel>(jsonText); |
| | | var hydroId = HStation.Hydro.ParseHelper.FromRevit(revitModel); |
| | | if (hydroId < 1) |
| | | var hydroInfo = HStation.Hydro.ParseHelper.FromRevit(revitModel); |
| | | if (hydroInfo == null) |
| | | { |
| | | feedBackMsg?.Invoke("水力结构文件解析失败"); |
| | | feedBackMsg?.Invoke("水力结构文件解析失败!!!"); |
| | | return false; |
| | | } |
| | | |
| | | var bllHydro = new Lazy<Yw.BLL.HydroModelInfo>(() => new Yw.BLL.HydroModelInfo()); |
| | | var hydroId = await bllHydro.Value.Save(hydroInfo); |
| | | if (hydroId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("水力结构保存失败!!!"); |
| | | return false; |
| | | } |
| | | |
| | | feedBackMsg?.Invoke("水力结构文件解析成功。。。"); |
| | | |
| | | feedBackProgress?.Invoke(100, 20); |
| | | |
| | | vm.HydroID = hydroId; |
| | | |
| | | #endregion |
| | | |
| | | #region 创建项目 |
| | | #region 创建保存项目 |
| | | |
| | | var bllXhsProject = new BLL.XhsProjectExtensions(); |
| | | feedBackMsg?.Invoke("正在创建项目..."); |
| | | |
| | | var bllXhsProject = new Lazy<BLL.XhsProjectExtensions>(() => new BLL.XhsProjectExtensions()); |
| | | |
| | | var project = new AddXhsProjectExtensionsInput(); |
| | | project.NO = vm.NO; |
| | |
| | | } |
| | | }; |
| | | |
| | | var projectId = await bllXhsProject.Insert(project); |
| | | var projectId = await bllXhsProject.Value.Insert(project); |
| | | if (projectId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("项目创建失败"); |
| | | feedBackMsg?.Invoke("项目创建失败!!!"); |
| | | return false; |
| | | } |
| | | |
| | | #endregion |
| | | feedBackMsg?.Invoke("项目创建成功。。。"); |
| | | |
| | | #region 关联模型 |
| | | vm.ProjectID = projectId; |
| | | |
| | | |
| | | feedBackProgress?.Invoke(100, 25); |
| | | |
| | | #endregion |
| | | |
| | | #region 地图位置 |
| | | #region 关联水力模型 |
| | | |
| | | var bllXhsProjectSite = new Lazy<BLL.XhsProjectSite>(() => new BLL.XhsProjectSite()); |
| | | var allProjectSiteList = await bllXhsProjectSite.Value.GetByProjectID(projectId); |
| | | var projectSiteId = allProjectSiteList.First().ID; |
| | | |
| | | vm.ProjectSiteID = projectSiteId; |
| | | |
| | | feedBackMsg?.Invoke("正在关联水力模型..."); |
| | | |
| | | var hydroRelation = new Yw.Dto.AddHydroModelRelationInput(); |
| | | hydroRelation.ObjectType = HStation.Xhs.DataType.XhsProjectSite; |
| | | hydroRelation.ObjectID = projectSiteId; |
| | | hydroRelation.ModelID = hydroId; |
| | | hydroRelation.Purpose = Yw.Hydro.Purpose.Simulation; |
| | | hydroRelation.Content = null; |
| | | hydroRelation.Description = null; |
| | | |
| | | var bllHydroRelation = new Lazy<Yw.BLL.HydroModelRelation>(() => new Yw.BLL.HydroModelRelation()); |
| | | var hydroRelationId = await bllHydroRelation.Value.Insert(hydroRelation); |
| | | if (hydroRelationId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("关联水力模型失败!!!"); |
| | | return false; |
| | | } |
| | | |
| | | feedBackMsg?.Invoke("关联水力成功。。。"); |
| | | |
| | | vm.HydroRelationID = hydroRelationId; |
| | | |
| | | feedBackProgress?.Invoke(100, 30); |
| | | |
| | | #endregion |
| | | |
| | | #region 设置地图位置 |
| | | |
| | | feedBackMsg?.Invoke("正在设置地图位置..."); |
| | | |
| | | if (vm.Location != null) |
| | | { |
| | |
| | | var mapInfoId = await new Yw.BLL.MapInfo().Insert(mapInfo); |
| | | if (mapInfoId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("地图定位信息保存失败"); |
| | | feedBackMsg?.Invoke("设置地图位置失败!!!"); |
| | | } |
| | | else |
| | | { |
| | | feedBackMsg?.Invoke("保存地图定位信息成功"); |
| | | feedBackMsg?.Invoke("设置地图位置成功。。。"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | feedBackMsg?.Invoke("设置地图位置失败!!!"); |
| | | } |
| | | |
| | | feedBackMsg?.Invoke("设置地图位置完成。。。"); |
| | | |
| | | feedBackProgress?.Invoke(100, 40); |
| | | |
| | | #endregion |
| | | |
| | | #region 上传模型 |
| | | #region 上传Revit模型 |
| | | |
| | | feedBackMsg?.Invoke("正在解析Revit模型文件..."); |
| | | var rvtFileInfo = allFileInfoList.Where(x => x.Extension == ".rvt").FirstOrDefault(); |
| | | if (rvtFileInfo == null) |
| | | { |
| | | feedBackMsg?.Invoke("Revit模型文件解析失败"); |
| | | return false; |
| | | feedBackMsg?.Invoke("Revit模型文件解析失败!!!"); |
| | | } |
| | | |
| | | var bimfaceId = await Yw.WinFrmUI.BimfaceHelper.UploadFile(rvtFileInfo.FullName); |
| | | //var bimfaceId = await Yw.WinFrmUI.BimfaceHelper.UploadFile(rvtFileInfo.FullName); |
| | | var bimfaceId = 10000869537010; |
| | | if (bimfaceId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("Revit模型文件上传失败"); |
| | | return false; |
| | | feedBackMsg?.Invoke("Revit模型文件上传失败!!!"); |
| | | return true; |
| | | } |
| | | |
| | | feedBackMsg?.Invoke("解析Revit模型文件成功。。。"); |
| | | |
| | | |
| | | |
| | | feedBackProgress?.Invoke(100, 60); |
| | | |
| | | vm.BimfaceId = bimfaceId; |
| | | |
| | | #endregion |
| | | |
| | | #region 保存Bimface |
| | | #region 保存Bimface文件 |
| | | |
| | | feedBackMsg?.Invoke("正在保存Bimface文件..."); |
| | | |
| | | var bllBimfaceFile = new Yw.BLL.BimfaceFile(); |
| | | |
| | |
| | | var bimfaceFileId = await bllBimfaceFile.Insert(bimfaceFile); |
| | | if (bimfaceFileId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("BIMFACE文件信息保存失败"); |
| | | feedBackMsg?.Invoke("Bimface文件保存失败!!!"); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | feedBackMsg?.Invoke("BIMFACE文件信息保存成功"); |
| | | } |
| | | |
| | | feedBackMsg?.Invoke("Bimface文件保存成功。。。"); |
| | | |
| | | feedBackProgress?.Invoke(100, 70); |
| | | |
| | | vm.BimfaceFileID = bimfaceFileId; |
| | | |
| | | #endregion |
| | | |
| | | #region 关联Bimface |
| | | #region 关联Bimface文件 |
| | | |
| | | feedBackMsg?.Invoke("正在关联Bimface文件..."); |
| | | |
| | | var bllBimfaceRelation = new Yw.BLL.BimfaceFileRelation(); |
| | | |
| | | var bimfaceRelation = new Yw.Dto.AddBimfaceFileRelationInput(); |
| | | bimfaceRelation.ObjectType = HStation.Xhs.DataType.XhsProject; |
| | | bimfaceRelation.ObjectID = projectId; |
| | |
| | | var bimfaceRelationId = await bllBimfaceRelation.Insert(bimfaceRelation); |
| | | if (bimfaceRelationId < 1) |
| | | { |
| | | feedBackMsg?.Invoke("BIMFACE关联失败"); |
| | | feedBackMsg?.Invoke("Bimface文件关联失败!!!"); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | feedBackMsg?.Invoke("BIMFACE关联成功"); |
| | | } |
| | | feedBackMsg?.Invoke("Bimface文件关联成功。。。"); |
| | | |
| | | feedBackProgress?.Invoke(100, 80); |
| | | |
| | | vm.BimfaceFileRelationID = bimfaceRelationId; |
| | | |
| | | #endregion |
| | | |
| | | #region 发起bimface转换 |
| | | |
| | | var bimfaceTranslateStatus = await Yw.WinFrmUI.BimfaceHelper.TranslateRvtFile(bimfaceId); |
| | | if (bimfaceTranslateStatus != Yw.BIMFace.eTranslateStatus.Success) |
| | | { |
| | | await Yw.WinFrmUI.BimfaceHelper.WaitFileTranslateStatusUntilSuccess(bimfaceId, 3000); |
| | | } |
| | | feedBackMsg?.Invoke("正在进行Bimface模型轻量化..."); |
| | | //var bimfaceTranslateStatus = await Yw.WinFrmUI.BimfaceHelper.TranslateRvtFile(bimfaceId); |
| | | //if (bimfaceTranslateStatus != Yw.BIMFace.eTranslateStatus.Success) |
| | | //{ |
| | | // await Yw.WinFrmUI.BimfaceHelper.WaitFileTranslateStatusUntilSuccess(bimfaceId, 3000); |
| | | //} |
| | | await Yw.WinFrmUI.BimfaceHelper.WaitFileTranslateStatusUntilSuccess(bimfaceId, 3000); |
| | | feedBackMsg?.Invoke("Bimface模型轻量化完成。。。"); |
| | | |
| | | feedBackProgress?.Invoke(100, 90); |
| | | |
| | | #endregion |
| | | |
| | | #region 更新状态 |
| | | |
| | | feedBackMsg?.Invoke("正在更新Bimface文件状态..."); |
| | | bol = await bllBimfaceFile.UpdateFileStatus(bimfaceFileId, (int)Yw.Bimface.eFileStatus.ConvertSucceed); |
| | | |
| | | feedBackMsg?.Invoke("文件状态更新"); |
| | | if (bol) |
| | | { |
| | | feedBackMsg?.Invoke("正在Bimface文件状态更新成功。。。"); |
| | | } |
| | | else |
| | | { |
| | | feedBackMsg?.Invoke("正在Bimface文件状态更新失败!!!"); |
| | | } |
| | | |
| | | feedBackProgress?.Invoke(100, 100); |
| | | |
| | | #endregion |
| | | |