/// <summary> /// 保存副本 /// </summary> /// <param name="deltaMaterials">已经复制完成的副本的delta对象</param> /// <param name="sourceRootPathName">源文件的主路径的配置节点名称</param> /// <param name="destRootPathName">目标文件的主路径的配置节点名称</param> public void SaveCopyVersion(DeltaMaterialList deltaMaterials, string destRootPathName) { ExceptionHelper.TrueThrow <ArgumentNullException>(deltaMaterials == null, "deltaMaterials"); if (string.IsNullOrEmpty(deltaMaterials.RootPathName)) { deltaMaterials.RootPathName = MaterialAdapter.DefaultUploadPathName; } ExceptionHelper.CheckStringIsNullOrEmpty(destRootPathName, "destRootPathName"); string sql = this.GetCopyFilesSql(deltaMaterials); if (string.IsNullOrEmpty(sql) == false) { using (TransactionScope scope = TransactionScopeFactory.Create(TransactionScopeOption.Required)) { DbHelper.RunSql(sql, GetConnectionName()); DoFilesCopy(deltaMaterials.Inserted, deltaMaterials.RootPathName, destRootPathName, true); DoFilesCopy(deltaMaterials.Updated, deltaMaterials.RootPathName, destRootPathName, true); DoFilesCopy(deltaMaterials.Deleted, deltaMaterials.RootPathName, destRootPathName, false); scope.Complete(); } } }
/// <summary> /// /// </summary> /// <param name="deltaMaterials"></param> /// <param name="doFileOperations"></param> public void SaveDeltaMaterials(DeltaMaterialList deltaMaterials, bool doFileOperations) { ExceptionHelper.TrueThrow <ArgumentNullException>(deltaMaterials == null, "deltaMaterials"); string rootPathName = deltaMaterials.RootPathName; if (string.IsNullOrEmpty(rootPathName)) { rootPathName = MaterialAdapter.DefaultUploadPathName; } StringBuilder strB = new StringBuilder(1024); List <MaterialFileOeprationInfo> fileOPList = new List <MaterialFileOeprationInfo>(); string sql = FillMaterialSqlAndFileOpList(deltaMaterials, fileOPList); if (string.IsNullOrEmpty(sql) == false) { using (TransactionScope scope = TransactionScopeFactory.Create(TransactionScopeOption.Required)) { DbHelper.RunSql(sql, GetConnectionName()); if (doFileOperations) { DoFileOperations(rootPathName, fileOPList); } scope.Complete(); } } }
/// <summary> /// 根据delta数据产生副本的delta数据 /// </summary> /// <returns>产生的副本delta数据</returns> public DeltaMaterialList GenerateCopyVersion() { ExceptionHelper.TrueThrow <ArgumentNullException>(this == null, "this"); DeltaMaterialList deltaData = new DeltaMaterialList(); #region 新增和删除的文件 直接生成副本 if (this.Inserted != null) { deltaData.Inserted.Append(this.Inserted.GenerateCopyVersion()); } if (this.Deleted != null) { deltaData.Deleted.Append(this.Deleted.GenerateCopyVersion()); } #endregion #region 更新的文件,检查是否已存在该环节的副本 if (this.Updated != null && this.Updated.Count != 0) { foreach (Material material in this.Updated) { deltaData.Updated.Add(material.GenerateCopyVersion()); } } #endregion return(deltaData); }
/// <summary> /// 删除指定ResourceID的附件 /// </summary> /// <param name="rootPathName">根目录配置名称</param> /// <param name="resourceID">资源ID</param> private void InnerDeleteMaterialsByResourceID(string rootPathName, string resourceID) { ExceptionHelper.CheckStringIsNullOrEmpty(resourceID, "resourceID"); MaterialList materialList = this.LoadMaterialsByResourceID(resourceID); DeltaMaterialList deltaMaterialList = new DeltaMaterialList(); deltaMaterialList.RootPathName = rootPathName; foreach (Material material in materialList) { deltaMaterialList.Deleted.Add(material); } this.SaveDeltaMaterials(deltaMaterialList, string.IsNullOrEmpty(rootPathName) == false); }
/// <summary> /// 将变化的的附件合并到MaterialList中 /// </summary> /// <param name="delta"></param> public void Merge(DeltaMaterialList delta) { delta.NullCheck("delta"); MaterialList copiedMaterialed = new MaterialList(); copiedMaterialed.CopyFrom(this); copiedMaterialed.RemoveExistsMaterials(delta.Inserted); copiedMaterialed.RemoveExistsMaterials(delta.Updated); copiedMaterialed.RemoveExistsMaterials(delta.Deleted); copiedMaterialed.CopyFrom(delta.Inserted); copiedMaterialed.CopyFrom(delta.Updated); copiedMaterialed.Sort((m1, m2) => m1.SortID - m2.SortID); this.Clear(); this.CopyFrom(copiedMaterialed); }
/// <summary> /// 形成更新副本的SQL /// </summary> /// <param name="deltaMaterials">要更新的DeltaMaterialList对象</param> /// <returns>形成的SQL语句</returns> private string GetCopyFilesSql(DeltaMaterialList deltaMaterials) { ExceptionHelper.TrueThrow <ArgumentNullException>(deltaMaterials == null, "deltaMaterials"); StringBuilder strB = new StringBuilder(256); //新增 foreach (Material material in deltaMaterials.Inserted) { if (strB.Length > 0) { strB.Append(TSqlBuilder.Instance.DBStatementSeperator); } strB.Append(ORMapping.GetInsertSql <Material>(material, TSqlBuilder.Instance)); } //更新 foreach (Material material in deltaMaterials.Updated) { if (strB.Length > 0) { strB.Append(TSqlBuilder.Instance.DBStatementSeperator); } WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder(); wBuilder.AppendItem("PARENT_ID", material.ParentID); wBuilder.AppendItem("WF_ACTIVITY_ID", material.WfActivityID); wBuilder.AppendItem("VERSION_TYPE", (int)MaterialVersionType.CopyVersion); strB.Append(string.Format( @"IF EXISTS(SELECT * FROM WF.MATERIAL WHERE {0}) {1} ELSE {2}" , wBuilder.ToSqlString(TSqlBuilder.Instance), ORMapping.GetUpdateSql <Material>(material, TSqlBuilder.Instance), ORMapping.GetInsertSql <Material>(material, TSqlBuilder.Instance))); } return(strB.ToString()); }
/// <summary> /// 转化为DeltaMaterialList /// </summary> /// <returns>DeltaMaterial对象</returns> public DeltaMaterialList ConvertToDelatMaterialList() { DeltaMaterialList deltaMaterials = new DeltaMaterialList(); if (this.Inserted != null) { deltaMaterials.Inserted = this.Inserted.ConvertToMaterialList(); } if (this.Updated != null) { deltaMaterials.Updated = this.Updated.ConvertToMaterialList(); } if (this.Deleted != null) { deltaMaterials.Deleted = this.Deleted.ConvertToMaterialList(); } return(deltaMaterials); }
/// <summary> /// 生成SQL,形成文件操作集合 /// </summary> /// <param name="deltaMaterials">Material操作集合</param> /// <param name="fileOPList">文件操作集合</param> /// <returns>形成的SQL语句</returns> private string FillMaterialSqlAndFileOpList(DeltaMaterialList deltaMaterials, List <MaterialFileOeprationInfo> fileOPList) { StringBuilder strB = new StringBuilder(1024); string sql = GetMaterialsOperationSql(deltaMaterials.Inserted, fileOPList, GetInsertMaterialSql); if (string.IsNullOrEmpty(sql) == false) { strB.Append(sql); } sql = GetMaterialsOperationSql(deltaMaterials.Updated, fileOPList, GetUpdateMaterialSql); if (string.IsNullOrEmpty(sql) == false) { if (strB.Length > 0) { strB.Append(TSqlBuilder.Instance.DBStatementSeperator); } strB.Append(sql); } sql = GetMaterialsOperationSql(deltaMaterials.Deleted, fileOPList, GetDeleteMaterialSql); if (string.IsNullOrEmpty(sql) == false) { if (strB.Length > 0) { strB.Append(TSqlBuilder.Instance.DBStatementSeperator); } strB.Append(sql); } return(strB.ToString()); }
/// <summary> /// 保存deltaMaterials /// </summary> /// <param name="deltaMaterials">DeltaMaterialList</param> public void SaveDeltaMaterials(DeltaMaterialList deltaMaterials) { SaveDeltaMaterials(deltaMaterials, true); deltaMaterials.Clear(); }