using Learun.DataBase.Repository;
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 FileAuthService: RepositoryFactory
{
#region 获取数据
///
/// 获取文件夹权限
///
/// 文件夹id
///
public IEnumerable GetFList(string id)
{
var strSql = new StringBuilder();
strSql.Append(" select * from lr_base_fileauth t ");
strSql.Append(" where F_Type = 0 AND t.F_FileInfoId = @F_FileInfoId ");
return this.BaseRepository().FindList(strSql.ToString(), new { F_FileInfoId = id });
}
///
/// 获取授权信息列表
///
/// 文件信息主键
///
public IEnumerable GetList(string F_FileInfoId)
{
var strSql = new StringBuilder();
strSql.Append(" select * from lr_base_fileauth t ");
strSql.Append(" where F_Type = 0 AND t.F_FileInfoId = @F_FileInfoId ");
return this.BaseRepository().FindList(strSql.ToString(), new { F_FileInfoId });
}
///
/// 实体数据
///
/// 主键
///
public FileAuthEntity GetEntity(string keyValue)
{
return this.BaseRepository().FindEntity(keyValue);
}
#endregion
#region 提交数据
///
/// 删除数据
///
/// 主键
public void DeleteEntity(string keyValue) {
var db = this.BaseRepository().BeginTrans();
try
{
db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ", new { fromId = keyValue });
db.Delete(new FileAuthEntity() { F_Id = keyValue });
db.Commit();
}
catch (Exception)
{
db.Rollback();
throw;
}
}
///
/// 保存数据
///
/// 主键
/// 实体数据
public bool SaveEntity(string keyValue, FileAuthEntity entity) {
var db = this.BaseRepository().BeginTrans();
try
{
if (string.IsNullOrEmpty(keyValue))
{
var entityTmp = db.FindEntity(" select * from lr_base_fileauth where F_ObjId = @objId AND F_FileInfoId = @Id AND F_Type = 0 ", new { objId = entity.F_ObjId, Id = entity.F_FileInfoId });
if (entityTmp != null) {
db.Rollback();
return false;
}
entity.Create();
db.Insert(entity);
}
else
{
entity.Modify(keyValue);
db.Update(entity);
}
db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ",new { fromId = entity.F_Id });
int deep = 1;
if (entity.F_IsFolder == 1)// 文件夹
{
if (entity.F_FileInfoId != "0") {
var folderEntity = db.FindEntity(entity.F_FileInfoId);
SaveSJEntity(folderEntity.F_PId, entity.F_Id, entity, deep, db);
}
// 授权子文件夹和文件
SaveXJEntity(entity.F_FileInfoId, entity.F_Id, entity, deep, db);
}
else
{
var fileEntity = db.FindEntity(entity.F_FileInfoId);
SaveSJEntity(fileEntity.F_Folder, entity.F_Id, entity, deep, db);
}
db.Commit();
return true;
}
catch (System.Exception)
{
db.Rollback();
throw;
}
}
///
/// 保存上级目录权限设置
///
///
///
///
///
///
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
}
}