using Learun.DataBase.Repository; using Learun.Util; using System; using System.Collections.Generic; using System.Text; namespace Learun.Application.Base.Files { /// /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架 /// Copyright (c) 2013-2018 上海力软信息技术有限公司 /// 创 建:超级管理员 /// 日 期:2019-11-28 09:23 /// 描 述:文件夹管理 /// public class FolderService : RepositoryFactory { #region 获取数据 /// /// 获取页面显示列表数据 /// /// 关键字 /// 父级id /// public IEnumerable GetList(string keyWord,string pId) { try { var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(@" t.F_Id, t.F_PId, t.F_Name, t.F_Time "); strSql.Append(" FROM lr_base_folder t "); strSql.Append(" WHERE 1=1 "); if (!string.IsNullOrEmpty(pId)) { strSql.Append(" AND t.F_PId = @pId "); } if (!string.IsNullOrEmpty(keyWord)) { keyWord = "%" + keyWord + "%"; strSql.Append(" AND t.F_Name Like @keyWord "); } strSql.Append(" Order by F_Name "); return this.BaseRepository().FindList(strSql.ToString(), new { keyWord, pId }); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取lr_base_folder表实体数据 /// /// 主键 /// public FolderEntity GetEntity(string keyValue) { try { return this.BaseRepository().FindEntity(keyValue); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } #endregion #region 提交数据 /// /// 删除实体数据 /// /// /// public bool DeleteEntity(string keyValue) { var fileList = (List)this.BaseRepository().FindList(" select * from lr_base_fileinfo where F_IsPublish = 1 AND F_Folder = @folderId ", new { folderId = keyValue }); if (fileList.Count > 0) { return false; } var folderList = (List)this.BaseRepository().FindList(" select * from lr_base_folder where F_PId = @folderId ", new { folderId = keyValue }); if (fileList.Count > 0) { return false; } var authList = this.BaseRepository().FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = keyValue }); var db = this.BaseRepository().BeginTrans(); try { foreach (var item in authList) { db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ", new { fromId = item.F_Id }); } db.Delete(t => t.F_Id == keyValue); db.Commit(); return true; } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 保存实体数据(新增、修改) /// /// 主键 /// 实体 public void SaveEntity(string keyValue, FolderEntity entity) { var db = this.BaseRepository().BeginTrans(); try { if (!string.IsNullOrEmpty(keyValue)) { entity.Modify(keyValue); var entityTmp = db.FindEntity("select * from lr_base_folder where F_Id = @keyValue",new { keyValue }); if (entityTmp.F_PId != entity.F_PId) {// 修改了上级了目录需要调整权限 if (entityTmp.F_PId != "0") { // 需要删除原先继承过来的权限 var authList = db.FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = keyValue }); foreach (var item in authList) { if (item.F_Type == 1)// 来自上级文件夹的需要删除 { db.ExecuteBySql(" delete from lr_base_fileauth where F_Id =@id ", new { id = item.F_Id }); db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId AND F_Level > @deep AND F_Type = 1 ", new { fromId = item.F_from, deep = item.F_Level }); } else { if (item.F_Type == 0) { item.F_from = item.F_Id; } db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId AND F_Level > @deep AND F_Type = 2 ", new { fromId = item.F_from, deep = item.F_Level }); } } } if (entity.F_PId != "0") { // 添加新的权限 var authList2 = db.FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId AND F_Type != 2 ", new { F_FileInfoId = entity.F_PId }); foreach (var item in authList2) { if (item.F_Type == 0) { item.F_from = item.F_Id; } FileAuthEntity authEntity = new FileAuthEntity() { F_Id = Guid.NewGuid().ToString(), F_AuthType = "1", F_FileInfoId = entity.F_Id, F_from = item.F_from, F_ObjId = item.F_ObjId, F_ObjName = item.F_ObjName, F_ObjType = item.F_ObjType, F_Time = item.F_Time, F_Type = 1, F_IsFolder = 1, F_Level = item.F_Level + 1 }; db.Insert(authEntity); SaveXJEntity(entity.F_Id, item.F_from, item, authEntity.F_Level + 1, db); } // 将自己的权限赋值给上级目录 var authList3 = db.FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId AND F_Type != 1 ", new { F_FileInfoId = entity.F_Id }); foreach (var item in authList3) { if (item.F_Type == 0) { item.F_from = item.F_Id; } SaveSJEntity(entity.F_PId, item.F_from, item, item.F_Level + 1, db); } } } db.Update(entity); } else { entity.Create(); db.Insert(entity); if (entity.F_PId != "0") { // 继承上级文件夹的权限 var authList = db.FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = entity.F_PId }); foreach(var item in authList) { if (item.F_Type != 2) { if (item.F_Type == 0) { item.F_from = item.F_Id; } FileAuthEntity authEntity = new FileAuthEntity() { F_Id = Guid.NewGuid().ToString(), F_AuthType = "1", F_FileInfoId = entity.F_Id, F_from = item.F_from, F_ObjId = item.F_ObjId, F_ObjName = item.F_ObjName, F_ObjType = item.F_ObjType, F_Time = item.F_Time, F_Type = 1, F_IsFolder = 1, F_Level = item.F_Level + 1 }; db.Insert(authEntity); } } } } db.Commit(); } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 保存上级目录权限设置 /// /// /// /// /// /// private void SaveSJEntity(string folderId, string fromId, FileAuthEntity fromEntity, int deep, IRepository db) { if (folderId != "0") { FileAuthEntity entity = new FileAuthEntity() { F_Id = Guid.NewGuid().ToString(), F_AuthType = "1", F_FileInfoId = folderId, F_from = fromId, F_ObjId = fromEntity.F_ObjId, F_ObjName = fromEntity.F_ObjName, F_ObjType = fromEntity.F_ObjType, F_Time = fromEntity.F_Time, F_Type = 2, F_IsFolder = 1, F_Level = deep }; db.Insert(entity); var folderEntity = db.FindEntity(folderId); SaveSJEntity(folderEntity.F_PId, fromId, fromEntity, deep + 1, db); } } /// /// 保存下级目录权限设置 /// /// /// /// /// /// private void SaveXJEntity(string folderId, string fromId, FileAuthEntity fromEntity, int deep, IRepository db) { // 获取文件 var fileList = db.FindList(" select * from lr_base_fileinfo where F_IsPublish = 1 AND F_Folder = @folderId ", new { folderId }); foreach (var item in fileList) { FileAuthEntity fileAuth = new FileAuthEntity() { F_Id = Guid.NewGuid().ToString(), F_AuthType = fromEntity.F_AuthType, F_FileInfoId = item.F_Id, F_from = fromId, F_ObjId = fromEntity.F_ObjId, F_ObjName = fromEntity.F_ObjName, F_ObjType = fromEntity.F_ObjType, F_Time = fromEntity.F_Time, F_Type = 1, F_IsFolder = 0, F_Level = deep }; db.Insert(fileAuth); } // 获取文件夹 var folderList = db.FindList(" select * from lr_base_folder where F_PId = @folderId ", new { folderId }); foreach (var item in folderList) { FileAuthEntity folderAuth = new FileAuthEntity() { F_Id = Guid.NewGuid().ToString(), F_AuthType = fromEntity.F_AuthType, F_FileInfoId = item.F_Id, F_from = fromId, F_ObjId = fromEntity.F_ObjId, F_ObjName = fromEntity.F_ObjName, F_ObjType = fromEntity.F_ObjType, F_Time = fromEntity.F_Time, F_Type = 1, F_IsFolder = 1, F_Level = deep }; db.Insert(folderAuth); SaveXJEntity(item.F_Id, fromId, fromEntity, deep + 1, db); } } #endregion } }