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
}
}