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 FileInfoService: RepositoryFactory
{
#region 获取数据
///
/// 获取表实体数据
///
/// 主键
///
public FileBInfoEntity GetEntity(string keyValue)
{
try
{
return this.BaseRepository().FindEntity(keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 获取文件列表实体
///
///
///
public FilelistEntity GetListEntity(string keyValue)
{
try
{
return this.BaseRepository().FindEntity(keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 获取文件列表实体
///
///
///
public FilelistEntity GetListEntityByInfoId(string fileInfoId)
{
try
{
return this.BaseRepository().FindEntity(" select * from lr_base_filelist where F_FileInfoId = @fileInfoId AND F_IsPublish = 1 ", new { fileInfoId });
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 文件审核列表
///
/// 查询语句
/// 分页参数
/// 查询关键字
/// 当前用户Id
///
public IEnumerable GetWfPageList(string strWfSql, Pagination pagination, string keyword,string userId) {
var strSql = new StringBuilder();
strSql.Append("select t.*,l.F_Ver as FileVer,l.F_Name as FileName ,f.F_Code as FileCode from (" + strWfSql + ")t");
strSql.Append(" LEFT JOIN lr_base_filelist l on l.F_Id = t.F_Id ");
strSql.Append(" LEFT JOIN lr_base_fileinfo f on f.F_Id = l.F_FileInfoId where 1=1 AND t.F_SchemeCode = 'lr_files_manager' ");
if (!string.IsNullOrEmpty(keyword)) {
keyword = "%" + keyword + "%";
strSql.Append(" AND f.F_Name like @keyword ");
}
return this.BaseRepository().FindList(strSql.ToString(),new { keyword, userId }, pagination);
}
///
/// 获取正式发布的文件
///
/// 分页参数
/// 查询关键字
///
public IEnumerable GetAllPublishPageList(string keyword, string folderId)
{
List list = new List();
if (string.IsNullOrEmpty(keyword))
{
list.AddRange(GetFolderList(keyword, folderId));
}
var strSql = new StringBuilder();
strSql.Append(" select t.*,t1.F_Ver,t1.F_FileId,t1.F_PFiled,t3.F_FileSize,t3.F_FileType,1 as Type,'1,2,3,4,5,6' as F_AuthType from lr_base_fileinfo t ");
strSql.Append(" LEFT JOIN lr_base_filelist t1 on t1.F_FileInfoId = t.F_Id ");
//strSql.Append(" LEFT JOIN lr_base_fileauth t2 on t2.F_FileInfoId = t.F_Id ");
strSql.Append(" LEFT JOIN LR_Base_AnnexesFile t3 on t3.F_FolderId = t1.F_FileId ");
strSql.Append(" where t.F_DeleteMark = 0 AND t.F_IsPublish = 1 AND t1.F_IsPublish = 1 ");
if (!string.IsNullOrEmpty(keyword))
{
keyword = "%" + keyword + "%";
strSql.Append(" AND (t.F_Name like @keyword OR t.F_KeyWord like @keyword ) ");
}
else
{
strSql.Append(" AND t.F_Folder = @folderId ");
}
list.AddRange(this.BaseRepository().FindList(strSql.ToString(), new { keyword, folderId }));
return list;
}
///
/// 获取页面显示列表数据
///
/// 关键字
/// 父级id
///
public IEnumerable GetFolderList(string keyWord, string folderId)
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append(@"
t.F_Id,
t.F_PId as F_Folder,
t.F_Name,
2 as Type,
'folder' as F_FileType
");
strSql.Append(" FROM lr_base_folder t ");
strSql.Append(" WHERE 1=1 ");
if (!string.IsNullOrEmpty(folderId))
{
strSql.Append(" AND t.F_PId = @folderId ");
}
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, folderId });
}
///
/// 获取文件夹带权限的
///
///
///
///
///
///
public IEnumerable GetFolderList2(string keyWord, string folderId, List authList, UserInfo userInfo)
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append(@"
t.F_Id,
t.F_PId as F_Folder,
t.F_Name,
2 as Type,
'2' as F_AuthType,
'folder' as F_FileType
");
strSql.Append(" FROM lr_base_folder t ");
strSql.Append(" WHERE 1=1 ");
if (!string.IsNullOrEmpty(folderId))
{
strSql.Append(" AND t.F_PId = @folderId ");
}
if (!string.IsNullOrEmpty(keyWord))
{
keyWord = "%" + keyWord + "%";
strSql.Append(" AND t.F_Name Like @keyWord ");
}
strSql.Append(" Order by F_Name ");
var list =this.BaseRepository().FindList(strSql.ToString(), new { keyWord, folderId });
if (userInfo.isSystem)
{
return list;
}
else {
List list2 = new List();
foreach (var item in list) {
item.F_AuthType = "1";
var roleIdList = userInfo.roleIds.Split(',');
bool flag = false;
foreach (var roleIdItem in roleIdList) {
var authList2 = authList.FindAll(t => t.F_FileInfoId == item.F_Id && t.F_ObjId == roleIdItem);
if (authList2.Count > 0)
{
flag = true;
if (authList2[0].F_Type != 2 && authList2[0].F_AuthType.IndexOf("2") != -1)
{
item.F_AuthType = "2";
break;
}
}
}
if (flag) {
list2.Add(item);
}
}
return list2;
}
}
///
/// 获取正式发布的文件
///
/// 查询关键字
/// 文件夹id
///
public IEnumerable GetPublishList(string keyword, string folderId)
{
UserInfo userInfo = LoginUserInfo.Get();
List authList = new List();
List list = new List();
if (!userInfo.isSystem)
{
string roleIds = userInfo.roleIds;
if (string.IsNullOrEmpty(roleIds))
{
return new List();
}
else
{
roleIds = "('" + roleIds.Replace(",", "','") + "')";
authList = (List)this.BaseRepository().FindList(" select * from lr_base_fileauth where F_ObjId in " + roleIds + " AND F_Time >= @ftime ORDER BY F_Type,F_Level ", new { ftime = DateTime.Now });
}
}
if (string.IsNullOrEmpty(keyword))
{
list.AddRange(GetFolderList2(keyword, folderId, authList, userInfo));
}
var strSql = new StringBuilder();
strSql.Append(" select t.*,t1.F_Ver,t1.F_FileId,t1.F_PFiled,t3.F_FileSize,t3.F_FileType,1 as Type,'1,2,3,4,5,6' as F_AuthType from lr_base_fileinfo t ");
strSql.Append(" LEFT JOIN lr_base_filelist t1 on t1.F_FileInfoId = t.F_Id ");
//strSql.Append(" LEFT JOIN lr_base_fileauth t2 on t2.F_FileInfoId = t.F_Id ");
strSql.Append(" LEFT JOIN LR_Base_AnnexesFile t3 on t3.F_FolderId = t1.F_FileId ");
strSql.Append(" where t.F_DeleteMark = 0 AND t.F_IsPublish = 1 AND t1.F_IsPublish = 1 ");
if (!string.IsNullOrEmpty(keyword))
{
keyword = "%" + keyword + "%";
strSql.Append(" AND (t.F_Name like @keyword OR t.F_KeyWord like @keyword ) ");
}
else
{
strSql.Append(" AND t.F_Folder = @folderId ");
}
var fileList = this.BaseRepository().FindList(strSql.ToString(), new { keyword, folderId });
if (!userInfo.isSystem)
{
foreach (var item in fileList)
{
var roleIdList = userInfo.roleIds.Split(',');
bool flag = false;
item.F_AuthType = "";
foreach (var roleIdItem in roleIdList)
{
var authList2 = authList.FindAll(t => t.F_FileInfoId == item.F_Id && t.F_ObjId == roleIdItem);
if (authList2.Count > 0)
{
flag = true;
if (item.F_AuthType != "")
{
item.F_AuthType += ",";
}
item.F_AuthType += authList2[0].F_AuthType;
}
}
if (flag)
{
list.Add(item);
}
}
}
else {
list.AddRange(fileList);
}
return list;
}
///
/// 获取文件的历史信息
///
/// 主键
///
public IEnumerable GetHistoryList(string fileInfoId)
{
List list = new List();
var strSql = new StringBuilder();
strSql.Append(" select t.*,t1.F_Ver,t1.F_FileId,t1.F_PFiled,t3.F_FileSize,t3.F_FileType,1 as Type,'1,3' as F_AuthType from lr_base_fileinfo t ");
strSql.Append(" LEFT JOIN lr_base_filelist t1 on t1.F_FileInfoId = t.F_Id ");
strSql.Append(" LEFT JOIN LR_Base_AnnexesFile t3 on t3.F_FolderId = t1.F_FileId ");
strSql.Append(" where t.F_IsPublish = 1 AND t.F_Id = @fileInfoId order by t1.F_PublishTime DESC ");
list.AddRange(this.BaseRepository().FindList(strSql.ToString(), new { fileInfoId}));
UserInfo userInfo = LoginUserInfo.Get();
if (!userInfo.isSystem)
{
string roleIds = userInfo.roleIds;
if (string.IsNullOrEmpty(roleIds))
{
return list;
}
else
{
roleIds = "('" + roleIds.Replace(",", "','") + "')";
var authList = (List)this.BaseRepository().FindList(" select * from lr_base_fileauth where F_ObjId in " + roleIds + " AND F_Time >= @ftime ORDER BY F_Level ", new { ftime = DateTime.Now });
List list2 = new List();
foreach (var item in list)
{
var roleIdList = userInfo.roleIds.Split(',');
bool flag = false;
item.F_AuthType = "";
foreach (var roleIdItem in roleIdList)
{
var authList2 = authList.FindAll(t => t.F_FileInfoId == item.F_Id && t.F_ObjId == roleIdItem);
if (authList2.Count > 0)
{
flag = true;
if (item.F_AuthType != "")
{
item.F_AuthType += ",";
}
item.F_AuthType += authList2[0].F_AuthType;
}
}
if (flag)
{
list2.Add(item);
}
}
return list2;
}
}
return list;
}
///
/// 获取正式发布的文件
///
/// 查询关键字
///
public IEnumerable GetDeleteList(string keyword)
{
List list = new List();
var strSql = new StringBuilder();
strSql.Append(" select t.*,t1.F_Ver,t1.F_FileId,t1.F_PFiled,t3.F_FileSize,t3.F_FileType,1 as Type,'1,2,3,4,5,6' as F_AuthType from lr_base_fileinfo t ");
strSql.Append(" LEFT JOIN lr_base_filelist t1 on t1.F_FileInfoId = t.F_Id ");
strSql.Append(" LEFT JOIN LR_Base_AnnexesFile t3 on t3.F_FolderId = t1.F_FileId ");
strSql.Append(" where t.F_DeleteMark = 1 AND t.F_IsPublish = 1 AND t1.F_IsPublish = 1 ");
list.AddRange(this.BaseRepository().FindList(strSql.ToString(), new { keyword }));
if (!string.IsNullOrEmpty(keyword))
{
keyword = "%" + keyword + "%";
strSql.Append(" AND t.F_Name like @keyword ");
}
UserInfo userInfo = LoginUserInfo.Get();
if (!userInfo.isSystem)
{
string postIds = userInfo.postIds;
if (string.IsNullOrEmpty(postIds))
{
return list;
}
else
{
postIds = "('" + postIds.Replace(",", "','") + "')";
var authList = (List)this.BaseRepository().FindList(" select * from lr_base_fileauth where F_ObjId in " + postIds + " AND F_Time <= ftime ", new { ftime = DateTime.Now });
List list2 = new List();
foreach (var item in list)
{
var fileList = authList.FindAll(t => t.F_FileInfoId == item.F_Id);
if (fileList.Count > 0)
{
string authType = "";
foreach (var fileItem in fileList)
{
if (authType != "")
{
authType += ",";
}
authType += fileItem.F_AuthType;
}
item.F_AuthType = authType;
list2.Add(item);
}
}
return list2;
//strSql.Append(" AND t2.F_ObjId in " + postIds);
}
}
return list;
}
#endregion
#region 提交数据
///
/// 保存数据
///
/// 文件列表主键
/// 文件主信息
/// 文件列表信息
public void SaveEntity(string keyValue, FileBInfoEntity fileBInfoEntity, FilelistEntity filelistEntity) {
var db = this.BaseRepository().BeginTrans();
try
{
if (string.IsNullOrEmpty(fileBInfoEntity.F_Id))
{
fileBInfoEntity.Create();
db.Insert(fileBInfoEntity);
}
else {
db.Update(fileBInfoEntity);
}
filelistEntity.F_FileInfoId = fileBInfoEntity.F_Id;
if (string.IsNullOrEmpty(keyValue))
{
filelistEntity.Create();
db.Insert(filelistEntity);
}
else {
filelistEntity.Modify(keyValue);
db.Update(filelistEntity);
}
db.Commit();
}
catch (Exception ex)
{
db.Rollback();
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 更新文件发布状态
///
///
public void UpdateEntity(string processId) {
var fileList = this.BaseRepository().FindEntity(processId);
var db = this.BaseRepository().BeginTrans();
try
{
db.ExecuteBySql(" update lr_base_filelist set F_IsPublish = 0 where F_FileInfoId=@id ",new {id = fileList.F_FileInfoId });
FilelistEntity filelistEntity = new FilelistEntity()
{
F_Id = fileList.F_Id,
F_IsPublish = 1,
F_PublishTime = DateTime.Now
};
FileBInfoEntity fileBInfoEntity = new FileBInfoEntity
{
F_Id = fileList.F_FileInfoId,
F_IsPublish = 1,
F_DeleteMark = 0,
F_KeyWord = fileList.F_KeyWord,
F_Name = fileList.F_Name,
F_Folder = fileList.F_Folder
};
db.Update(filelistEntity);
db.Update(fileBInfoEntity);
// 更新权限
// 删除上从层文件夹继承的权限
var authList = db.FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = fileList.F_FileInfoId });
foreach (var item in authList) {
if (item.F_Type != 0)
{
db.ExecuteBySql(" delete from lr_base_fileauth where F_Id =@id", new { id = item.F_Id });
}
else {
db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ", new { fromId = item.F_Id});
}
}
// 添加
var authList2 = db.FindList(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId AND F_Type != 2 ", new { F_FileInfoId = fileList.F_Folder });
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 = item.F_AuthType,
F_FileInfoId = fileList.F_FileInfoId,
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 = 0,
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);
}
}
}
///
/// 虚拟删除文件
///
/// 主键
public void VDeleteEntity(string keyValue) {
FileBInfoEntity entity = new FileBInfoEntity
{
F_Id = keyValue,
F_DeleteMark = 1
};
this.BaseRepository().Update(entity);
}
///
/// 还原虚拟删除文件
///
/// 主键
public void RecoveryEntity(string keyValue)
{
FileBInfoEntity entity = new FileBInfoEntity
{
F_Id = keyValue,
F_DeleteMark = 0
};
this.BaseRepository().Update(entity);
}
///
/// 彻底删除
///
///
public void DeleteEntity(string keyValue) {
var list = this.BaseRepository().FindList(" select * from lr_base_filelist where F_FileInfoId = @fileInfoId", new { fileInfoId= keyValue });
var db = this.BaseRepository().BeginTrans();
try
{
db.Delete(new FileBInfoEntity { F_Id = keyValue });
db.ExecuteBySql(" Delete from lr_base_filelist where F_FileInfoId = @f_id ", new { f_id = keyValue });
foreach (var item in list) {
db.ExecuteBySql(" Delete from lr_nwf_process where F_Id = @f_id ", new { f_id = item.F_Id });
db.ExecuteBySql(" Delete from lr_nwf_task where F_ProcessId = @f_id ", new { f_id = item.F_Id });
db.ExecuteBySql(" Delete from lr_nwf_tasklog where F_ProcessId = @f_id ", new { f_id = item.F_Id });
db.ExecuteBySql(" Delete from lr_nwf_taskmsg where F_ProcessId = @f_id ", new { f_id = item.F_Id });
}
db.Commit();
}
catch (Exception ex)
{
db.Rollback();
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
#endregion
}
}