duheng
2024-09-27 2cb855ba2e7c4cb9002cf0a4a7f6b11d4a587acd
WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/03-mgr/XhsProjectMgrPage.cs
@@ -1,5 +1,10 @@
using DevExpress.Utils;
using DevExpress.CodeParser;
using DevExpress.Utils;
using DevExpress.XtraTreeList;
using HStation.WinFrmUI.Xhs;
using NetTaste;
using System;
using Timer = System.Threading.Timer;
namespace HStation.WinFrmUI
{
@@ -9,14 +14,34 @@
        {
            InitializeComponent();
            this.treeList1.InitialMultiColSettings();
            this.treeList1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Default;
            this.PageTitle.Caption = "项目管理";
            this.PageTitle.HeaderSvgImage = this.svgImg32[0];
            this.PageTitle.SvgImageSize = new Size(24, 24);
            this.Load += XhsProjectMgrPage_Load;
        }
        private void XhsProjectMgrPage_Load
            (object sender, EventArgs e)
        {
            repositoryItemImageComboBox1.Items.AddEnum(typeof(XhsProjectMgrViewModel.eFileStatus));
            var a = typeof(XhsProjectMgrViewModel.eFileStatus);
            repositoryItemImageComboBox1.Items[0].ImageIndex = 0;
            repositoryItemImageComboBox1.Items[1].ImageIndex = 1;
            repositoryItemImageComboBox1.Items[2].ImageIndex = 2;
            repositoryItemImageComboBox1.Items[3].ImageIndex = 3;
            repositoryItemImageComboBox1.Items[4].ImageIndex = 4;
            repositoryItemImageComboBox1.Items[5].ImageIndex = 5;
            repositoryItemImageComboBox1.Items[6].ImageIndex = 6;
            repositoryItemImageComboBox1.Items[7].ImageIndex = 7;
            repositoryItemImageComboBox1.Items[8].ImageIndex = 8;
        }
        private List<XhsProjectMgrViewModel> _allProjectList = null;
        private BLL.XhsProject _Bll = null;
        private BLL.XhsProjectExtensions _bll = null;
        private event Action ImportProjectCompletedEvent = null;
        /// <summary>
        /// 初始化数据源
@@ -24,79 +49,72 @@
        public override async void InitialDataSource()
        {
            base.InitialDataSource();
            _Bll = new BLL.XhsProject();
            var allProjectList = await _Bll.GetAll();
            this.SetBindingData();
        }
        private async void SetBindingData()
        {
            _bll = new BLL.XhsProjectExtensions();
            var allProjectList = await _bll.GetAll();
            _allProjectList = new List<XhsProjectMgrViewModel>();
            if (allProjectList != null && allProjectList.Count > 0)
            {
                foreach (var project in allProjectList)
                {
                    var vm = new XhsProjectMgrViewModel(project);
                    _allProjectList.Add(vm);
                    var mapinfo = await new Yw.BLL.MapInfo().Get(HStation.Xhs.DataType.XhsProject, project.ID, Yw.Map.Kind.Gaodei, Yw.Map.Purpose.Location);
                    var bimFile = await BimfaceFileStateHelper.IsHaveBimFace(project.ID);
                    if (bimFile != null)
                    {
                        //如果文件状态为上传中则进行定时请求刷新状态
                        if (bimFile.FileStatus == 0)
                        {
                            Task.Factory.StartNew(() =>
                            {
                                StartTimer(300, bimFile.ID);
                            });
                        }
                        var vm = new XhsProjectMgrViewModel(project, true, bimFile.FileStatus, mapinfo);
                        _allProjectList.Add(vm);
                    }
                    else
                    {
                        var vm = new XhsProjectMgrViewModel(project, false, 8, mapinfo);
                        _allProjectList.Add(vm);
                    }
                }
            }
            this.xhsProjectMgrViewModelBindingSource.DataSource = _allProjectList;
        }
        //发布
        private void barBtnPublish_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        //计时器(刷新上传状态)
        public void StartTimer(int intervalMilliseconds, long ID)
        {
            // 创建一个 Timer,它将在给定的时间间隔后触发回调方法
            var timer = new System.Threading.Timer(TimerCallback, ID, Timeout.Infinite, intervalMilliseconds);
            // 启动 Timer
            timer.Change(intervalMilliseconds, intervalMilliseconds);
        }
        //查看bimface模型
        private async void barBtnViewBimface_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        private async void TimerCallback(object state)
        {
            var vm = GetCurrentViewModel();
            if (vm == null)
            var tupleState = (Tuple<long, Timer>)state;
            long iD = tupleState.Item1;
            Timer timer = tupleState.Item2;
            try
            {
                return;
                var stateResult = await BimfaceHelper.GetFileTranslateStatus(iD);
                if (stateResult == 0)
                {
                    this.SetBindingData();
                }
                else
                {
                    timer.Dispose();
                }
            }
            var guid = new PageGuid()
            catch (Exception ex)
            {
                Modular = Yw.WinFrmUI.PageModular.Bimface,
                MoudingType = Yw.WinFrmUI.Page.eMoudingType.Tab,
                Function = Yw.WinFrmUI.PageFunction.ViewBimface3d,
                TagName = $"{vm.ID}"
            };
            if (!IsExistPage(guid, true))
            {
                var page = new ViewXhsProjectBimfacePage();
                await page.SetBindingData(vm.ID);
                CreatePage(page, guid);
            }
        }
        //全部展开
        private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.ExpandAll();
        }
        //全部折叠
        private void barBtnCollpseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.CollapseAll();
        }
        /// <summary>
        /// 树线
        /// </summary>
        private void barCkTreeLine_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.OptionsView.ShowTreeLines = this.barCkTreeLine.Checked ? DefaultBoolean.True : DefaultBoolean.False;
        }
        //查询
        private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.OptionsFind.AlwaysVisible = !this.treeList1.OptionsFind.AlwaysVisible;
        }
        //刷新
        private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.RefreshData();
        }
        #region 当前
@@ -128,22 +146,292 @@
        #region 基础操作
        //添加
        private void barBtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        private async void barBtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var dlg = new AddProjectDlg();
            dlg.ShowDialog();
            /*            var dlg = new AddProjectDlg();
                        dlg.ReloadDataEvent += async (rhs, mapinfo) =>
                        {
                            var bll = new BLL.XhsProjectExtensions();
                            var id = await bll.Insert(rhs);
                            if (id > 0)
                            {
                                rhs.ID = id;
                                var vmo = await _bll.GetByID(id);
                                _allProjectList.Add(new XhsProjectMgrViewModel(vmo, false));
                                this.xhsProjectMgrViewModelBindingSource.ResetBindings(false);
                                if (mapinfo != null)
                                {
                                    mapinfo.ObjectID = id;
                                    mapinfo.ObjectName = rhs.Name;
                                    var mapinfoid = await new Yw.BLL.MapInfo().Insert(mapinfo);
                                    if (mapinfoid < 0)
                                    {
                                        TipFormHelper.ShowError("地图信息添加错误");
                                    }
                                }
                                return true;
                            }
                            return false;
                        };
                        dlg.ShowDialog();
            */
            var dlg = new ImportXhsProjectDlg();
            dlg.SetBindingData();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                var prj = dlg.ViewModel;
                if (prj.ProjectID == null)
                    return;
                var vmo = await _bll.GetByID((long)prj.ProjectID);
                if (vmo == null)
                {
                    TipFormHelper.ShowError("导入失败!");
                    return;
                }
                else
                {
                    TipFormHelper.ShowSucceed("导入成功!");
                    var mapinfo = await new Yw.BLL.MapInfo().Get(HStation.Xhs.DataType.XhsProject, (long)prj.ProjectID, Yw.Map.Kind.Gaodei, Yw.Map.Purpose.Location);
                    var bimFile = await BimfaceFileStateHelper.IsHaveBimFace((long)prj.ProjectID);
                    if (bimFile != null)
                    {
                        _allProjectList.Add(new XhsProjectMgrViewModel(vmo, true, bimFile.FileStatus, mapinfo));
                    }
                    else
                    {
                        _allProjectList.Add(new XhsProjectMgrViewModel(vmo, false, 8, mapinfo));
                    }
                    this.xhsProjectMgrViewModelBindingSource.ResetBindings(false);
                }
            }
        }
        //编辑
        private void barBtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var currentVm = this.GetCurrentViewModel();
            if (currentVm == null)
            {
                MessageBoxHelper.ShowWarning("请选择数据行!");
                return;
            }
            var dlg = new EditProjectDlg();
            dlg.SetBindingData(currentVm.ID);
            dlg.ReloadDataEvent += async (rhs, mapinfo) =>
            {
                if (await _bll.Update(rhs))
                {
                    currentVm.Reset(rhs);
                    this.xhsProjectMgrViewModelBindingSource.ResetBindings(false);
                    if (mapinfo != null)
                    {
                        //  mapinfo.ObjectID = id;
                        mapinfo.ObjectName = rhs.Name;
                        var bol = await new Yw.BLL.MapInfo().Update(mapinfo);
                        if (!bol)
                        {
                            TipFormHelper.ShowError("地图信息编辑错误");
                        }
                    }
                    return true;
                }
                return false;
            };
            dlg.ShowDialog();
        }
        //删除
        private void barBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        private async void barBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var currentVm = GetCurrentViewModel();
            if (currentVm == null)
            {
                MessageBoxHelper.ShowWarning("请选择数据行!");
                return;
            }
            if (MessageBoxHelper.IsClickOk($"确认删除数据行?", "提示"))
                return;
            var groupresult = await _bll.DeleteByID(currentVm.ID);
            if (groupresult)
            {
                _allProjectList.Remove(currentVm);
                this.xhsProjectMgrViewModelBindingSource.ResetBindings(false);
                TipFormHelper.ShowSucceed("删除成功!");
            }
            else
            {
                TipFormHelper.ShowSucceed("删除失败!");
                return;
            }
        }
        //详细信息
        private void barBtnInfo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
        }
        #endregion 基础操作
        private void treeList1_CustomDrawRow(object sender, DevExpress.XtraTreeList.CustomDrawRowEventArgs e)
        {
            var a = repositoryItemButtonEdit1.ReadOnly = true;
        }
        private async void treeList1_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (_allProjectList == null || _allProjectList.Count < 1)
                return;
            var vm = GetCurrentViewModel();
            if (vm == null)
            {
                return;
            }
            if (e.Column != this.ColViewBimface)
                return;
            if (!vm.IsHaveBimface)
            {
                TipFormHelper.ShowWarn("请先上传文件再进行操作!");
                return;
            }
            var guid = new PageGuid()
            {
                Modular = Yw.WinFrmUI.PageModular.Bimface,
                MoudingType = Yw.WinFrmUI.Page.eMoudingType.Tab,
                Function = Yw.WinFrmUI.PageFunction.ViewSchemeMgr,
                TagName = $"{vm.ID}"
            };
            if (!IsExistPage(guid, true))
            {
                var page = new XhsProjectSimulationMgrPage();
                await page.SetBindingData(vm.ID);
                CreatePage(page, guid);
            }
        }
        #region 更多操作
        //全部展开
        private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.ExpandAll();
        }
        //全部折叠
        private void barBtnCollpseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.CollapseAll();
        }
        /// <summary>
        /// 树线
        /// </summary>
        private void barCkTreeLine_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.OptionsView.ShowTreeLines = this.barCkTreeLine.Checked ? DefaultBoolean.True : DefaultBoolean.False;
        }
        //查询
        private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.treeList1.OptionsFind.AlwaysVisible = !this.treeList1.OptionsFind.AlwaysVisible;
        }
        //刷新
        private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.SetBindingData();
        }
        #endregion 更多操作
        //查看bimface模型
        private async void barBtnViewBimface_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var vm = GetCurrentViewModel();
            if (vm == null)
            {
                return;
            }
            if (!vm.IsHaveBimface)
            {
                TipFormHelper.ShowWarn("请先上传文件再进行操作!");
                return;
            }
            var guid = new PageGuid()
            {
                Modular = Yw.WinFrmUI.PageModular.Bimface,
                MoudingType = Yw.WinFrmUI.Page.eMoudingType.Tab,
                Function = Yw.WinFrmUI.PageFunction.ViewBimface3d,
                TagName = $"{vm.ID}"
            };
            if (!IsExistPage(guid, true))
            {
                var page = new ViewXhsProjectBimfacePage();
                await page.SetBindingData(vm.ID);
                CreatePage(page, guid);
            }
        }
        //查看水力模型
        private void barBtnViewHydro_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (_allProjectList == null || _allProjectList.Count < 1)
                return;
            var vm = GetCurrentViewModel();
            if (vm == null)
            {
                return;
            }
            if (!vm.IsHaveBimface)
            {
                TipFormHelper.ShowWarn("请先上传文件再进行操作!");
                return;
            }
            var guid = new PageGuid()
            {
                Modular = "Hydro",
                MoudingType = Yw.WinFrmUI.Page.eMoudingType.Tab,
                Function = "ViewModel",
            };
            if (!IsExistPage(guid, true))
            {
                var page = new HydroQ3dViewPage();
                page.SetBindingData(vm.ID);
                CreatePage(page, guid);
            }
        }
        //导入文件
        private async void BtnAddBimfaceFile_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var currentVm = this.GetCurrentViewModel();
            if (currentVm == null)
            {
                MessageBoxHelper.ShowWarning("请选择数据行!");
                return;
            }
            if (currentVm.ModelState != XhsProjectMgrViewModel.eFileStatus.Noupload)
            {
                MessageBoxHelper.ShowWarning("已经存在模型文件!");
                return;
            }
            var dlg = new ImportXhsProjectFileDlg();
            dlg.SetBindingData(currentVm.ID);
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                var prj = dlg.ViewModel;
                if (prj.ProjectID == null)
                    return;
                var mapinfo = await new Yw.BLL.MapInfo().Get(HStation.Xhs.DataType.XhsProject, (long)prj.ProjectID, Yw.Map.Kind.Gaodei, Yw.Map.Purpose.Location);
                var bimFile = await BimfaceFileStateHelper.IsHaveBimFace((long)prj.ProjectID);
                if (bimFile != null)
                {
                    currentVm.Reset(currentVm, bimFile.FileStatus);
                    this.xhsProjectMgrViewModelBindingSource.ResetBindings(false);
                }
            }
        }
    }
}