using Mapster; namespace Yw.WinFrmUI { public partial class BimfaceFileMgrPage : DocumentPage { public BimfaceFileMgrPage() { InitializeComponent(); this.gridView1.SetNormalView(); this.gridView1.RegistCustomDrawRowIndicator(); this.PageTitle.Caption = "模型文件管理"; } private List _allBindingList = null; private Lazy _bllBimfaceFile = new(() => new Yw.BLL.BimfaceFile()); private Lazy _bllBimfaceFileRelation = new(() => new BLL.BimfaceFileRelation()); //加载数据 private async Task LoadData() { var allBimfaceFileList = await _bllBimfaceFile.Value.GetAll(); var allBimfaceFileRelationList = await _bllBimfaceFileRelation.Value.GetAll(); _allBindingList = new List(); if (allBimfaceFileList != null && allBimfaceFileList.Count > 0) { foreach (var bimfaceFile in allBimfaceFileList) { var hasReason = allBimfaceFileRelationList == null ? false : allBimfaceFileRelationList.Exists(x => x.BimfaceFileID == bimfaceFile.ID); var vm = new BimfaceFileViewModel(bimfaceFile, hasReason); _allBindingList.Add(vm); } } this.bimfaceFileViewModelBindingSource.DataSource = _allBindingList; this.bimfaceFileViewModelBindingSource.ResetBindings(false); } //获取当前对象 private BimfaceFileViewModel GetCurrentModel() { if (_allBindingList == null) { return null; } if (_allBindingList.Count < 1) { XtraMessageBox.Show("无数据"); return null; } var vm = this.gridView1.GetCurrentViewModel(_allBindingList); if (vm == null) { XtraMessageBox.Show("请选择数据行!"); return null; } return vm; } /// ///初始化数据 /// public override async void InitialDataSource() { base.InitialDataSource(); await LoadData(); } /// /// 刷新数据 /// public override async void RefreshData() { base.RefreshData(); await LoadData(); } /// /// 注册事件 /// public override void RegistEvents() { base.RegistEvents(); //PageDataSync.DataOperationEvent += SyncBimFileData; //PageDataSync.DataOperationEvent += SyncBimFileMapperData; } /// /// 取消注册事件 /// public override void UnRegistEvents() { base.UnRegistEvents(); //PageDataSync.DataOperationEvent -= SyncBimFileData; // PageDataSync.DataOperationEvent -= SyncBimFileMapperData; } //同步模型文件数据 //private void SyncBimFileData(DocumentPage page, ePageDataOperation operation, Model.BimFile4Get model) //{ // if (_allGetModels == null) // return; // if (page == this) // return; // switch (operation) // { // case ePageDataOperation.Insert: // { // _allGetModels.Add(model); // this.bimFile4GetBindingSource.ResetBindings(false); // } // break; // case ePageDataOperation.Update: // { // var rhs = _allGetModels.Find(x => x.ID == model.ID); // var mapper = new MapperConfiguration(cfg => cfg.CreateMap()).CreateMapper(); // mapper.Map(model, rhs); // this.bimFile4GetBindingSource.ResetBindings(false); // } // break; // case ePageDataOperation.Delete: // { // _allGetModels.RemoveAll(x => x.ID == model.ID); // this.bimFile4GetBindingSource.ResetBindings(false); // } // break; // default: break; // } //} //同步模型文件映射数据 //private void SyncBimFileMapperData(DocumentPage page, ePageDataOperation operation, Model.BimFileMapper4Get model) //{ // if (_allGetMappers == null) // return; // if (page == this) // return; // switch (operation) // { // case ePageDataOperation.Insert: // { // _allGetMappers.Add(model); // } // break; // case ePageDataOperation.Update: // { // var index = _allGetMappers.FindIndex(x => x.ID == model.ID); // if (index >= 0) // _allGetMappers.RemoveAt(index); // _allGetMappers.Add(model); // } // break; // case ePageDataOperation.Delete: // { // _allGetMappers.RemoveAll(x => x.ID == model.ID); // } // break; // default: break; // } //} //添加 private void Add() { if (_allBindingList == null) { return; } var dlg = new AddBimfaceFileDlg(); dlg.SetBindingData(); dlg.ReloadDataEvent += async (bimfaceFileId) => { var bimfaceFile = await _bllBimfaceFile.Value.GetByID(bimfaceFileId); var hasReason = await _bllBimfaceFileRelation.Value.IsExistByBimfaceFileID(bimfaceFileId); var vm = new BimfaceFileViewModel(bimfaceFile, hasReason); _allBindingList.Add(vm); this.bimfaceFileViewModelBindingSource.ResetBindings(false); XtraMessageBox.Show("添加成功!"); }; dlg.ShowDialog(); } //上传 private void Upload() { if (_allBindingList == null) { return; } var dlg = new UploadBimfaceFileDlg(); dlg.SetBindingData(); dlg.ReloadDataEvent += async (rhs) => { var vm = new BimfaceFileViewModel(); vm.BimfaceId = string.Empty; vm.Name = rhs.FileName; vm.ModelType = eModelType.File; vm.FileStatus = eFileStatus.Uploading; vm.FormatType = rhs.FormatType; var fileInfo = new System.IO.FileInfo(rhs.FilePath); vm.FileSuffix = fileInfo.Extension; vm.FileSize = string.Format("{0}MB", System.Math.Ceiling(fileInfo.Length / 1024.0 / 1024.0)); _allBindingList.Add(vm); this.bimfaceFileViewModelBindingSource.ResetBindings(false); var bimfaceClient = Yw.BIMFaceClient.Instance(Settings.BimfaceParasHelper.Bimface.AppKey, Settings.BimfaceParasHelper.Bimface.AppSecret); var uploadTask = Task.Run(() => bimfaceClient.UploadFileExByPolicy(rhs.FilePath, rhs.FileName)); await uploadTask; if (uploadTask.Result < 1) { _allBindingList.Remove(vm); this.bimfaceFileViewModelBindingSource.ResetBindings(false); this.FindForm().ShowAlertInfo("模型文件上传提示", $"{rhs.FileName} 上传失败!"); return; } vm.BimfaceId = uploadTask.Result.ToString(); vm.FileStatus = eFileStatus.UploadSucceed; this.bimfaceFileViewModelBindingSource.ResetBindings(false); var addModel = vm.Adapt(); vm.ID = await _bllBimfaceFile.Value.Insert(addModel); if (vm.ID < 1) { _allBindingList.Remove(vm); this.FindForm().ShowAlertInfo("模型文件上传提示", $"{rhs.FileName} 保存失败!"); } this.bimfaceFileViewModelBindingSource.ResetBindings(false); }; dlg.ShowDialog(); } //转换BIM private async void TranslateBim() { if (_allBindingList == null) { return; } var vm = GetCurrentModel(); if (vm == null) { return; } if (vm.FileStatus != eFileStatus.UploadSucceed) { XtraMessageBox.Show("此功能仅适用于上传成功的模型文件!"); return; } if (vm.FormatType != eFormatType._3D) { XtraMessageBox.Show("此功能仅适用于3D模型文件!"); return; } if (vm.FileSuffix.ToLower() != ".rvt") { XtraMessageBox.Show("此功能仅适用于rvt模型文件!"); return; } var bimfaceClient = Yw.BIMFaceClient.Instance(Settings.BimfaceParasHelper.Bimface.AppKey, Settings.BimfaceParasHelper.Bimface.AppSecret); var task = Task.Run(() => bimfaceClient.TranslateRvtFileReturnStatus(vm.BimfaceId, eRvtTranslateStyle.Real)); await task; if (task.Result == eTranslateStatus.Processing) { vm.FileStatus = eFileStatus.Converting; this.bimfaceFileViewModelBindingSource.ResetBindings(false); if (!await _bllBimfaceFile.Value.UpdateFileStatus(vm.ID, (int)vm.FileStatus)) { this.FindForm().ShowAlertInfo("模型文件转换", $"{vm.Name}:更新失败"); } this.FindForm().ShowAlertInfo("模型文件转换提示", "模型文件转换耗时较长,请耐心等待..."); var statusTask = Task.Run(async () => { while (vm.FileStatus == eFileStatus.Converting) { Thread.Sleep(3000); var result = await bimfaceClient.GetFileTranslateStatusReturnStatus(vm.BimfaceId); if (result == eTranslateStatus.Processing) { vm.FileStatus = eFileStatus.ConvertSucceed; } } }); await statusTask; } vm.FileStatus = eFileStatus.ConvertSucceed; this.bimfaceFileViewModelBindingSource.ResetBindings(false); if (!await _bllBimfaceFile.Value.UpdateFileStatus(vm.ID, (int)vm.FileStatus)) { this.FindForm().ShowAlertInfo("模型文件转换", $"{vm.Name}:更新失败"); } } //编辑 private void EidtBim() { //if (_allGetModels == null) // return; //var getModel = GetCurrentModel(); //if (getModel.FileStatus == eFileStatus.上传中) //{ // XtraMessageBox.Show(eFileStatus.上传中.ToString()); // return; //} //var mapper = new MapperConfiguration(cfg => cfg.CreateMap()).CreateMapper(); //var updateModel = mapper.Map(getModel); //var dlg = new EditBimFileBaseInfoDlg(); //dlg.SetBindingData(updateModel); //dlg.ReloadDataEvent += (rhs) => //{ // mapper = new MapperConfiguration(cfg => cfg.CreateMap()).CreateMapper(); // getModel = mapper.Map(rhs, getModel); // this.gridView1.RefreshRow(this.gridView1.FocusedRowHandle); // XtraMessageBox.Show("更新成功!"); // PageDataSync.Commit(this, ePageDataOperation.Update, getModel); //}; //dlg.ShowDialog(); } //删除 private void DeleteBim() { //if (_allGetModels == null) // return; //var getModel = GetCurrentModel(); //if (getModel.FileStatus == eFileStatus.上传中 || getModel.FileStatus == eFileStatus.转换中) //{ // XtraMessageBox.Show(getModel.FileStatus.ToString()); // return; //} //if (DevExpress.XtraEditors.XtraMessageBox.Show("是否要删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) //{ // if (!GlobelParas.BimfaceClient.DeleteFile(getModel.BimfaceID)) // { // XtraMessageBox.Show("删除失败!"); // return; // } // if (!BLLFactory.Instance.DeleteByID(getModel.ID)) // { // XtraMessageBox.Show("删除失败!"); // return; // } // _allGetModels.Remove(getModel); // this.bimFile4GetBindingSource.ResetBindings(false); // XtraMessageBox.Show("删除成功!"); // PageDataSync.Commit(this, ePageDataOperation.Delete, getModel); //} } //显示详细信息 private void ShowDetail() { XtraMessageBox.Show("开发中..."); } //本地浏览 private void ShowLocalView() { //if (_allGetModels == null) // return; //var getModel = GetCurrentModel(); //if (getModel == null) // return; //new BimfaceViewHelper().ShowBimfaceLocalView(getModel, IsExistPage, CreatePage); } //网页浏览 private void ShowWebView() { //if (_allGetModels == null) // return; //var getModel = GetCurrentModel(); //if (getModel == null) // return; //new BimfaceViewHelper().ShowBimfaceWebView(getModel); } //手机浏览 private void ShowPhoneView() { //if (_allGetModels == null) // return; //var getModel = GetCurrentModel(); //if (getModel == null) // return; //new BimfaceViewHelper().ShowBimfacePhoneView(getModel); } //显示模型文件设置界面 private void ShowBimFileSettings() { //if (_allGetModels == null) // return; //var getModel = GetCurrentModel(); //if (getModel == null) // return; //new BimfaceViewHelper().ShowBimFileSettings(getModel, IsExistPage, CreatePage); } //自定义显示名称 private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { } private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { //var row = this.gridView1.GetRow(e.FocusedRowHandle) as BimFile4Get; //var enable = row == null ? false : true; //this.barBtnTranslate.Enabled = enable; //this.barBtnEdit.Enabled = enable; //this.barBtnDelete.Enabled = enable; //this.barBtnDetail.Enabled = enable; //this.barBtnLocal.Enabled = enable; //this.barBtnWeb.Enabled = enable; //this.barBtnPhone.Enabled = enable; } private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) { //if (e.Column == this.colSet && e.IsGetData) //{ // var row = e.Row as BimFile4Get; // if (_allGetMappers != null) // { // var mapping = _allGetMappers.Find(x => x.BimFileID == row.ID); // if (mapping == null) // e.Value = "否"; // else // e.Value = "是"; // } // else // e.Value = "否"; //} } private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { if (e.Column == this.colDetail) { ShowDetail(); } } #region Ribbon private void barBtnAdminAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Add(); } private void barBtnUpload_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { Upload(); } private void barBtnTranslate_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { TranslateBim(); } private void barBtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { EidtBim(); } private void barBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { DeleteBim(); } private void barBtnDetail_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowDetail(); } private void barBtnLocal_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowLocalView(); } private void barBtnWeb_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowWebView(); } private void barBtnPhone_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowPhoneView(); } //模型设置 private void barBtnSetBim_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ShowBimFileSettings(); } private void barBtnReloadData_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { RefreshData(); } private void gridControl1_Click(object sender, EventArgs e) { } #endregion } }