123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- /* ==============================================================================
- * 功能描述:MProject
- * 创 建 者:Garrett
- * 创建日期:2018/3/8 15:52:54
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.IO;
- using System.Linq;
- using System.Windows;
- using System.Xml.Serialization;
- using SAGA.DotNetUtils;
- using SAGA.DotNetUtils.Serializer;
- using SAGA.MBI.Common;
- using SAGA.MBI.FileStream;
- using SAGA.MBI.JsonConvert;
- using SAGA.MBI.Login;
- using SAGA.MBI.RequestData;
- using SAGA.MBI.Tools;
- using Newtonsoft.Json.Linq;
- using SAGA.DotNetUtils.Others;
- using SAGA.DotNetUtils.WPF;
- using SAGA.DotNetUtils.WPF.UserControl.ComboboxTreeView;
- using SAGA.MBI.CmbData;
- using SAGA.MBI.DataArrange;
- using SAGA.MBI.Calc;
- using SAGA.MBI.WinView.CommonView;
- using SAGA.RevitUtils;
- namespace SAGA.MBI.Model
- {
- [Serializable]
- [XmlRoot("MFloor")]
- public class MFloor : MFileBase
- {
- public MFloor()
- {
- UserControlUp = new UcMFMFloorUp();
- UserControlDown = new UcMFMFloorDown();
- FloorCmbVm = new FloorCmbVm();
- }
- private MFloorLock m_FloorLock;
- /// <summary>
- /// 楼层锁状态
- /// </summary>
- [XmlIgnore]
- public MFloorLock FloorLock
- {
- get
- {
- m_FloorLock = LockConvert.QueryFloorLockState(Id);
- return m_FloorLock;
- }
- set
- {
- //m_FloorLock = LockConvert.QueryFloorLockState(Id);
- NotifyPropertyChanged(nameof(FloorLock));
- }
- }
- public override string ToString()
- {
- string diplay = base.ToString();
- ////如果被他人锁定,优先显示被锁定
- //var floorLock = FloorLock;
- //if (floorLock.LockState == MFloorLockState.LockByOther|| floorLock.LockState == MFloorLockState.LockBySelf)
- //{
- // diplay = $"{base.ToString()}({floorLock.UserName}正在编辑)";
- //}
- //else if (ModifyType != FloorModifyType.None)
- //{
- // diplay = "new";
- //}
- //else
- //{
- // if (IsMissFile)
- // {
- // diplay += " (缺模型文件)";
- // }
- //}
- return diplay;
- }
- public string ToStringCheckLock
- {
- get
- {
- string diplay = base.ToString();
- //如果被他人锁定,优先显示被锁定
- var floorLock = FloorLock;
- if (floorLock.LockState == MFloorLockState.LockByOther || floorLock.LockState == MFloorLockState.LockBySelf)
- {
- diplay = $"{base.ToString()}({floorLock.UserName}正在编辑)";
- }
- else if (ModifyType != FloorModifyType.None)
- {
- diplay = "new";
- }
- else
- {
- if (IsMissFile)
- {
- diplay += " (缺模型文件)";
- }
- }
- return diplay;
- }
- }
- #region Path
- /// <summary>
- /// 判断是否缺少文件依据是:
- /// 1,该层的模型文件是否存在
- /// 2,存在,不缺少
- /// 3,不存在,判断是楼层顺序号是否为空
- /// </summary>
- public bool IsMissFile
- {
- get
- {
- bool result = false;
- //首先判断文件是否存在
- if (!File.Exists(FullPath))
- {
- //判断云端是否存在版本信息
- var vision = DalVisionOperate.GetCloudFileVision(this.Id);
- result = vision.Vision == 0;
- }
- return result;
- }
- set => NotifyPropertyChanged(nameof(IsMissFile));
- }
- private string m_TipLabelText;
- /// <summary>
- /// 提示信息
- /// </summary>
- public string TipLabelText
- {
- get { return m_TipLabelText; }
- set
- {
- m_TipLabelText = value;
- NotifyPropertyChanged("TipLabelText");
- }
- }
- /// <summary>
- /// revit文件的名称
- /// </summary>
- public string RevitName
- {
- get
- {
- return this.Id;
- //return CommonTool.GetFloorRevitFileName(this.Sequence);
- }
- }
- private FloorModifyType m_ModifyType;
- public FloorModifyType ModifyType
- {
- get { return m_ModifyType; }
- set
- {
- m_ModifyType = value;
- NotifyPropertyChanged("ModifyType");
- }
- }
- public string FullPath { get { return Path.Combine(LocalPath, this.RevitName + ".rvt"); } }
- #endregion
- #region CloudProperty
- public string BuildingId { get; set; }
- private int _Sequence;
- /// <summary>
- /// 楼层顺序号
- /// </summary>
- [Description("FloorSequenceID")]
- public int Sequence
- {
- set
- {
- _Sequence = value;
- NotifyPropertyChanged("Sequence");
- }
- get { return _Sequence; }
- }
- private string m_FloorType;
- [Description("FloorType")]
- public string FloorType
- {
- get { return m_FloorType; }
- set
- {
- m_FloorType = value;
- NotifyPropertyChanged("FloorType");
- FloorCmbVm.TreeFloorTypeInfoCur = DalCMBTreeView.GetItemByCode(FloorCmbVm.TreeFloorTypeInfos, FloorType);
- }
- }
- private string m_Area;
- [Description("Area")]
- public string Area
- {
- get { return m_Area; }
- set
- {
- m_Area = value;
- NotifyPropertyChanged("Area");
- }
- }
- private string m_NetHeight;
- [Description("NetHeight")]
- public string NetHeight
- {
- get { return m_NetHeight; }
- set
- {
- m_NetHeight = value;
- NotifyPropertyChanged("NetHeight");
- }
- }
- private FloorCmbVm m_FloorCmbVm;
- [XmlIgnore]
- public FloorCmbVm FloorCmbVm
- {
- get { return m_FloorCmbVm; }
- set
- {
- m_FloorCmbVm = value;
- //NotifyPropertyChanged("ProvinceCityVm");
- }
- }
- #endregion
- #region OverrideMethod
- /// <summary>
- /// 类备份,用于取消更改
- /// </summary>
- /// <returns></returns>
- public override void Clone()
- {
- m_MFileBaseBak = SerializerByXml.Clone<MFloor>(this);
- //FileOperateBase.Serialize(MBIConst.MBITempSettingPath, "CloneFile.xml", this);
- //m_MFileBaseBak = FileOperateBase.Deserialize<MFloor>(MBIConst.MBITempSettingPath, "CloneFile.xml");
- }
- public override void SetJsonProperty(string json)
- {
- JObject jObject = JObject.Parse(json);
- this.Name = (string)jObject["FloorName"];
- this.LocalId = (string)jObject["FloorLocalID"];
- this.LocalName = (string)jObject["FloorLocalName"];
- base.SetJsonProperty(json);
- FloorCmbVm.NotifyAction = NotifyPropertyChanged;
- }
- public override JObject GetJsonProperty()
- {
- FloorType = DalCMBTreeView.GetCodeByItem(FloorCmbVm.TreeFloorTypeInfoCur);
- JObject jObject = base.GetJsonProperty();
- jObject.Add("FloorLocalID", CommonTool.GetPropertyJArray(LocalId));
- jObject.Add("FloorLocalName", CommonTool.GetPropertyJArray(LocalName));
- return jObject;
- }
- #endregion
- #region Save
- /// <summary>
- /// 能否保存
- /// </summary>
- /// <returns></returns>
- public bool CanSave()
- {
- //如果执行删除命令,不进行空校验
- if (ModifyType == FloorModifyType.ItemDel)
- return true;
- if (LocalName.IsNullOrEmpty())
- {
- MessageBox.Show("本地名称不能为空");
- return false;
- }
- if (Sequence == 0)
- {
- MessageBox.Show("楼层顺序码不能为零");
- return false;
- }
- return true;
- }
- public bool Save(TreeNodeItem treeNode)
- {
- if (!CanSave()) return false;
- #region 楼层序列号是否重复
- List<MFloor> floors = DalProjectTree.GetAllFloors();
- var curFloors = floors.Where(t => t.Sequence == Sequence);
- if (curFloors.Count() >= 2)
- {
- MessageShowBase.Infomation("楼层序列号重复");
- return false;
- }
- #endregion
- return this.Save();
- }
- public override bool Save()
- {
- bool result = true;
- try
- {
- #region 文件操作
- //更新文件服务器
- OperateFile();
- #endregion
- #region 更新信息点
- switch (ModifyType)
- {
- case FloorModifyType.None:
- case FloorModifyType.ItemChange:
- case FloorModifyType.ItemAddUp:
- case FloorModifyType.ItemAddDown:
- case FloorModifyType.ParentAdd:
- result = base.Save();
- break;
- case FloorModifyType.ItemDel:
- //删除数据平台数据
- result = ModeFileConvert.DelFloor(this.Id);
- //有锁的,解锁
- DalLock.UnLockFloor(this.Id, false);
- break;
- }
- #endregion
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- result = false;
- }
- finally
- {
- ResetProperty();
- }
- return result;
- }
- private void ResetProperty()
- {
- ModifyType = FloorModifyType.None;
- //更新路径显示
- if (!IsMissFile)
- {
- this.PathDisplay = this.FullPath;
- TipLabelText = "";
- }
- BeCopyPath = "";
- State = false;
- this.Clone();
- }
- /// <summary>
- /// 更新文件服务器文件
- /// </summary>
- private void OperateFile()
- {
- try
- {
- if (ModifyType == FloorModifyType.ItemDel)
- {
- FloorFileOperate.DelFile(FullPath);
- }
- else
- {
- if (BeCopyPath.IsNotNullEmpty() && DalVisionOperate.IsNotSameFile(BeCopyPath, Id))
- {
- if (FloorFileOperate.CopyFile(BeCopyPath, LocalPath, RevitName))
- DalModeFileManange.UploadDataByIntersectOldAndNew(this);
- //if (DalModeFileManange.UploadDataByIntersectOldAndNew(this));
- //if (DalModeFileManange.UploadDataByDelAllThenReUpload(this))
- //UpLoadFileRequest.CloseUploadWindow(FloorFileOperate.UploadFile(this.FullPath), true);
- }
- }
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- }
- #endregion
- /// <summary>
- /// 向云平台要一个新的楼层
- /// </summary>
- public void GetNewFloor()
- {
- string addJson = ModeFileRequest.AddFloor(this.BuildingId, GetJsonProperty());
- if (addJson.IsSuccessRequest())
- {
- JObject jObject = JObject.Parse(addJson);
- this.Id = (string)jObject["id"];
- this.Name = (string)jObject["FloorName"];
- if (DalLock.LockFloor(this.Id, false))
- {
- //获取楼层的加锁状态
- this.FloorLock = LockConvert.QueryFloorLockState(this.Id);
- }
- }
- else
- {
- MessageBox.Show("增加楼层失败");
- }
- }
- /// <summary>
- /// 解锁并重新下载模型
- /// </summary>
- /// <param name="param"></param>
- [Command]
- public void ReDownLoad(object param)
- {
- bool tipResult = false;
- #region 下载前的提示信息
- string floorfullName = DalProjectTree.GetFloorFullName(Id);
- string tip = $"请确认,本操作将从云端重新获取【{floorfullName}】最新的模型文件到本地,本地已有此楼层模型文件将被覆盖!";
- WinCommonTip winTip = new WinCommonTip();
- //默认为null,有提示
- tipResult = winTip.Show(tip, "", title: "重要提示");
- #endregion
- if (!tipResult) return;
- #region 下载并解锁
- string msg1 = "", msg2 = "", tip0, tip1 = "";
- var downloadResult = DalUploadFloor.ReDownLoadFile(this, ref msg1);
- if (downloadResult == true)
- {
- //清除旧的日志
- ProjectLogManager.ClearFiles(Id);
- var unlockResult = LockConvert.UnLockFloor(this.Id, ref msg2);
- if (unlockResult)
- {
- tip0 = $"{msg1}\r\n您的编辑权限已被释放";
- tip1 = "若需更改模型文件请重新申请编辑权限";
- }
- else
- {
- tip0 = $"{msg1}";
- if (FloorLock.LockState != MFloorLockState.ULock)
- {
- tip0 = $"{msg1}\r\n您的编辑权限释放失败,请重试";
- tip1 = $"失败原因:{msg2}";
- }
- }
- }
- else if (downloadResult == null)
- {
- //清除旧的日志
- ProjectLogManager.ClearFiles(Id);
- var unlockResult = LockConvert.UnLockFloor(this.Id, ref msg2);
- if (unlockResult)
- {
- tip0 = $"{msg1}\r\n您的编辑权限已被释放";
- tip1 = "若需更改模型文件请重新申请编辑权限";
- }
- else
- {
- tip0 = $"{msg1}";
- if (FloorLock.LockState != MFloorLockState.ULock)
- {
- tip0 = $"{msg1}\r\n您的编辑权限释放失败,请重试";
- tip1 = $"失败原因:{msg2}";
- }
- }
- }
- else
- {
- tip0 = $"{msg1}";
- tip1 = "失败原因:请检查网络后重试!";
- }
- WinCommonTip winEndTip = new WinCommonTip();
- winEndTip.Show(tip0, tip1, buttonStyle: MessageBoxButton.OK);
- //刷新解锁按钮
- FloorLock = FloorLock;
- //刷新树的显示
- var tv = DalModeFileManange.GetFloorTreeById(this.Id);
- tv.Item.TvItemName = tv.Item.TvItemName;
- #endregion
- }
- public bool CanReDownLoad(object param)
- {
- return true;
- }
- /// <summary>
- /// 解锁并重新下载模型
- /// </summary>
- /// <param name="param"></param>
- [Command]
- public void Lock(object param)
- {
- if (DalLock.LockFloor(this.Id, true))
- {
- FloorLock = FloorLock;
- //刷新树的显示
- var tv = DalModeFileManange.GetFloorTreeById(this.Id);
- tv.Item.TvItemName = tv.Item.TvItemName;
- }
- }
- public bool CanLock(object param)
- {
- return true;
- }
- }
- public enum FloorModifyType
- {
- None = 0,
- ItemChange,
- ParentAdd,
- ItemAddUp,
- ItemAddDown,
- ItemDel
- }
- }
|