lixiaojun
2024-07-23 5f2fed99394f95c133d330349ddf367b669951e9
WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/04-GeneralProject/ImportXhsProjectHelper.cs
@@ -1,11 +1,13 @@
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>
@@ -17,50 +19,85 @@
        /// <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;
@@ -78,22 +115,58 @@
                }
            };
            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)
            {
@@ -109,37 +182,54 @@
                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();
@@ -155,19 +245,23 @@
            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;
@@ -178,30 +272,47 @@
            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