This commit is contained in:
itcsx committed 2026-09-06 16:07:04 +08:00
1 parent 280ccf4de8
commit 032f048a16
25 files changed
+2673 -718

No files matched your search

@@ -364,35 +364,29 @@ namespace CloudBuilder.Master.Service
[PermissionOperate(name: MasterPermissionPolicy.DmsFile, operate: Operate.Delete)]
[UnitOfWork]
public void Delete(long key)
{
Delete(key, false);
}
private void Delete(long key, bool hasCreateDmsFileDeleteLog)
{
DmsFileEntity dmsFile = repository.DetachedEntities.Where(x => x.FileId == key).FirstOrDefault()!;
if (dmsFile == null) return;
if (!hasCreateDmsFileDeleteLog) CreateDmsFileDeleteLog(dmsFile, null);
IRepository<DmsFileUploadEntity> repositoryUpload = repository.GetRepository<IRepository<DmsFileUploadEntity>>();
IRepository<DmsFolderMapEntity> repositoryFolderMap = repository.GetRepository<IRepository<DmsFolderMapEntity>>();
IRepository<DmsFolderEntity> repositoryFolder = repository.GetRepository<IRepository<DmsFolderEntity>>();
repository.DeleteNow(dmsFile);
IRepository<DmsFileDeleteLogEntity> repositoryDmsFileDeleteLog = repository.GetRepository<IRepository<DmsFileDeleteLogEntity>>();
DmsFileDeleteLogEntity dmsFileDeleteLogEntity = new DmsFileDeleteLogEntity();
ObjectCopyHelper.Copy(dmsFile, dmsFileDeleteLogEntity);
repositoryDmsFileDeleteLog.InsertNow(dmsFileDeleteLogEntity);
DmsFileUploadEntity DmsFileUpload = repositoryUpload.DetachedEntities.Where(x => x.FileId == key).FirstOrDefault()!;
IRepository<DmsFileUploadDeleteLogEntity> repositoryDmsFileUploadDeleteLog = repository.GetRepository<IRepository<DmsFileUploadDeleteLogEntity>>();
IRepository<DmsFolderDeleteLogEntity> repositoryDmsFolderDeleteLog = repository.GetRepository<IRepository<DmsFolderDeleteLogEntity>>();
IRepository<DmsFolderMapDeleteLogEntity> repositoryDmsFolderMapDeleteLog = repository.GetRepository<IRepository<DmsFolderMapDeleteLogEntity>>();
if (DmsFileUpload != null)
{
repositoryUpload.DeleteNow(DmsFileUpload);
DmsFileUploadDeleteLogEntity DmsFileUploadDeleteLogEntity = new DmsFileUploadDeleteLogEntity();
ObjectCopyHelper.Copy(DmsFileUpload, DmsFileUploadDeleteLogEntity);
repositoryDmsFileUploadDeleteLog.InsertNow(DmsFileUploadDeleteLogEntity);
}
if (dmsFile.IsDirectoryIndc == YesNoPolicy.YES)
@@ -404,32 +398,21 @@ namespace CloudBuilder.Master.Service
if (folder != null)
{
repositoryFolder.DeleteNow(folder);
DmsFolderDeleteLogEntity dfdLog = new DmsFolderDeleteLogEntity();
ObjectCopyHelper.Copy(folder, dfdLog);
repositoryDmsFolderDeleteLog.InsertNow(dfdLog);
}
DmsFolderMapEntity[] folderMaps = repositoryFolderMap.DetachedEntities.Where(x => x.FolderNameSon == dmsFile.FileName || x.FolderNameParent == dmsFile.FileName).ToArray();
DmsFolderMapDeleteLogEntity dmsFolderMapEntity;
if (folderMaps != null && folderMaps.Length > 0)
{
foreach (var map in folderMaps)
{
repositoryFolderMap.DeleteNow(map);
dmsFolderMapEntity = new DmsFolderMapDeleteLogEntity();
ObjectCopyHelper.Copy(map, dmsFolderMapEntity);
repositoryDmsFolderMapDeleteLog.InsertNow(dmsFolderMapEntity);
if (map.FolderNameSon == folder.FolderName) continue;
//刪除dmsfoler下的所有內容
DeleteFolder(map.FolderNameSon);
}
}
}
else
{
@@ -438,12 +421,229 @@ namespace CloudBuilder.Master.Service
if (folderMap != null)
repositoryFolderMap.DeleteNow(folderMap);
}
}
private void CreateDmsFileDeleteLogByDirectory(DmsFileEntity dmsFile, DmsFolderDeleteLogEntity folder)
{
IRepository<DmsFolderDeleteLogEntity> repositoryFolder = repository.GetRepository<IRepository<DmsFolderDeleteLogEntity>>();
ISecurityGeneratorNumberService securityGeneratorNumberService = service.ServiceProvider.GetService<ISecurityGeneratorNumberService>()!;
string folderNameParent = folder.FolderName;
//创建当前目录
folder = new DmsFolderDeleteLogEntity();
folder.FolderName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG, MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG_FOLDER_NAME, "DR", YesNoPolicy.NO, "00000000");
folder.FolderLocalName = dmsFile.OrgFileName;//如果是目录,这个就是目录名称
repositoryFolder.InsertNow(folder);
//创建目录关系表
DmsFolderMapDeleteLogEntity map = new DmsFolderMapDeleteLogEntity();
IRepository<DmsFolderMapDeleteLogEntity> repositoryFolderMap = repository.GetRepository<IRepository<DmsFolderMapDeleteLogEntity>>();
map.FolderNameParent = folderNameParent;
map.FolderNameSon = folder.FolderName;
repositoryFolderMap.InsertNow(map);
//创建Dms目录
IRepository<DmsFileDeleteLogEntity> repositoryDmsFileDeleteLog = repository.GetRepository<IRepository<DmsFileDeleteLogEntity>>();
DmsFileDeleteLogEntity entity = new DmsFileDeleteLogEntity();
ObjectCopyHelper.Copy(dmsFile, entity);
entity.OrderKey = entity.FileName = folder.FolderName;
entity.FileId = 0;
entity.FilePath = folderNameParent;
repositoryDmsFileDeleteLog.InsertNow(entity);
DmsFileUploadDeleteLogEntity upload = new DmsFileUploadDeleteLogEntity();
upload.FileId = entity.FileId;
upload.FileCategory = "MASTER";
upload.UploadName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_UPLOAD_NAME, "DR", YesNoPolicy.NO, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_FORMAT);
upload.OrgFileName = entity.OrgFileName;
IRepository<DmsFileUploadDeleteLogEntity> repositoryUpload = repository.GetRepository<IRepository<DmsFileUploadDeleteLogEntity>>();
repositoryUpload.InsertNow(upload);
//创建所有目录下的内容
DmsFileEntity[] dmsFiles = repository.DetachedEntities.Where(x => x.FilePath == dmsFile.FileName).ToArray();
if (dmsFiles == null || dmsFiles.Length == 0) return;
foreach (var dms in dmsFiles)
{
CreateDmsFileDeleteLog(dms, folder);
}
}
private void CreateDmsFileDeleteLog(DmsFileEntity dmsFile, DmsFolderDeleteLogEntity folderLog)
{
IRepository<DmsFileDeleteLogEntity> repositoryDmsFileDeleteLog = repository.GetRepository<IRepository<DmsFileDeleteLogEntity>>();
IRepository<DmsFileUploadDeleteLogEntity> repositoryDmsFileUploadDeleteLog = repository.GetRepository<IRepository<DmsFileUploadDeleteLogEntity>>();
IRepository<DmsFolderDeleteLogEntity> repositoryDmsFolderDeleteLog = repository.GetRepository<IRepository<DmsFolderDeleteLogEntity>>();
IRepository<DmsFolderMapDeleteLogEntity> repositoryDmsFolderMapDeleteLog = repository.GetRepository<IRepository<DmsFolderMapDeleteLogEntity>>();
ISecurityGeneratorNumberService securityGeneratorNumberService = service.ServiceProvider.GetService<ISecurityGeneratorNumberService>()!;
//如果顶级目录不存在,创建顶级目录
if (folderLog == null)
folderLog = repositoryDmsFolderDeleteLog.DetachedEntities.Where(x => x.FolderLocalName == service.UserId).FirstOrDefault()!;
if (folderLog == null)
{
folderLog = new DmsFolderDeleteLogEntity();
folderLog.FolderName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG, MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG_FOLDER_NAME, null, YesNoPolicy.NO, "00000000");
folderLog.FolderLocalName = service.UserId;
repositoryDmsFolderDeleteLog.InsertNow(folderLog);
}
string folderNameParent = folderLog.FolderName;
if (dmsFile.IsDirectoryIndc == YesNoPolicy.YES)
{
CreateDmsFileDeleteLogByDirectory(dmsFile, folderLog);
return;
}
DmsFileUploadDeleteLogEntity uploadLog = new DmsFileUploadDeleteLogEntity();
uploadLog.FileCategory = "MASTER";
uploadLog.UploadName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_UPLOAD_NAME, "FL", YesNoPolicy.NO, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_FORMAT);
uploadLog.OrgFileName = dmsFile.OrgFileName;
//创建Dms文件,需更新父目录
DmsFileDeleteLogEntity entityLog = new DmsFileDeleteLogEntity();
ObjectCopyHelper.Copy(dmsFile, entityLog);
entityLog.FilePath = folderNameParent;
entityLog.FileId = 0;
repositoryDmsFileDeleteLog.InsertNow(entityLog);
uploadLog.FileId = entityLog.FileId;
repositoryDmsFileUploadDeleteLog.InsertNow(uploadLog);
//创建目录关系表
DmsFolderMapDeleteLogEntity mapLog = new DmsFolderMapDeleteLogEntity();
mapLog.FolderNameParent = folderNameParent;
mapLog.FolderNameSon = entityLog.FileName;
repositoryDmsFolderMapDeleteLog.InsertNow(mapLog);
}
[PermissionOperate(name: MasterPermissionPolicy.DmsFile, operate: Operate.Insert)]
[UnitOfWork]
public void RestoreDmsFile(long key)
{
DeleteLog(key, true);
}
private void RestoreDmsFileByDirectory(DmsFileDeleteLogEntity dmsFile, DmsFolderEntity folder)
{
IRepository<DmsFolderEntity> repositoryFolder = repository.GetRepository<IRepository<DmsFolderEntity>>();
ISecurityGeneratorNumberService securityGeneratorNumberService = service.ServiceProvider.GetService<ISecurityGeneratorNumberService>()!;
string folderNameParent = folder.FolderName;
//创建当前目录
folder = new DmsFolderEntity();
folder.FolderName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG, MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG_FOLDER_NAME, "DR", YesNoPolicy.NO, "00000000");
folder.FolderLocalName = dmsFile.OrgFileName;//如果是目录,这个就是目录名称
repositoryFolder.InsertNow(folder);
//创建目录关系表
DmsFolderMapEntity map = new DmsFolderMapEntity();
IRepository<DmsFolderMapEntity> repositoryFolderMap = repository.GetRepository<IRepository<DmsFolderMapEntity>>();
map.FolderNameParent = folderNameParent;
map.FolderNameSon = folder.FolderName;
repositoryFolderMap.InsertNow(map);
//创建Dms目录,要更新目录名
IRepository<DmsFileEntity> repositoryDmsFile = repository.GetRepository<IRepository<DmsFileEntity>>();
DmsFileEntity entity = new DmsFileEntity();
ObjectCopyHelper.Copy(dmsFile, entity);
entity.OrderKey = entity.FileName = folder.FolderName;
entity.FileId = 0;
entity.FilePath = folderNameParent;
repositoryDmsFile.InsertNow(entity);
DmsFileUploadEntity upload = new DmsFileUploadEntity();
upload.FileId = entity.FileId;
upload.FileCategory = "MASTER";
upload.UploadName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_UPLOAD_NAME, "DR", YesNoPolicy.NO, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_FORMAT);
upload.OrgFileName = entity.OrgFileName;
IRepository<DmsFileUploadEntity> repositoryUpload = repository.GetRepository<IRepository<DmsFileUploadEntity>>();
repositoryUpload.InsertNow(upload);
IRepository<DmsFileDeleteLogEntity> repositoryDmsFileDeleteLog = repository.GetRepository<IRepository<DmsFileDeleteLogEntity>>();
//创建所有目录下的内容
DmsFileDeleteLogEntity[] dmsFiles = repositoryDmsFileDeleteLog.DetachedEntities.Where(x => x.FilePath == dmsFile.FileName).ToArray();
if (dmsFiles == null || dmsFiles.Length == 0) return;
foreach (var dms in dmsFiles)
{
RestoreDmsFile(dms, folder);
}
}
private void RestoreDmsFile(DmsFileDeleteLogEntity dmsFile, DmsFolderEntity folder)
{
IRepository<DmsFileEntity> repositoryDmsFile = repository.GetRepository<IRepository<DmsFileEntity>>();
IRepository<DmsFileUploadEntity> repositoryDmsFileUpload = repository.GetRepository<IRepository<DmsFileUploadEntity>>();
IRepository<DmsFolderEntity> repositoryDmsFolder = repository.GetRepository<IRepository<DmsFolderEntity>>();
IRepository<DmsFolderMapEntity> repositoryDmsFolderMap = repository.GetRepository<IRepository<DmsFolderMapEntity>>();
ISecurityGeneratorNumberService securityGeneratorNumberService = service.ServiceProvider.GetService<ISecurityGeneratorNumberService>()!;
//如果顶级目录不存在,创建顶级目录
if (folder == null)
folder = repositoryDmsFolder.DetachedEntities.Where(x => x.FolderLocalName == service.UserId).FirstOrDefault()!;
if (folder == null)
{
folder = new DmsFolderEntity();
folder.FolderName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG, MasterPrefixPolicy.DMS_FOLDER_DELETE_LOG_FOLDER_NAME, null, YesNoPolicy.NO, "00000000");
folder.FolderLocalName = service.UserId;
repositoryDmsFolder.InsertNow(folder);
}
string folderNameParent = folder.FolderName;
if (dmsFile.IsDirectoryIndc == YesNoPolicy.YES)
{
RestoreDmsFileByDirectory(dmsFile, folder);
return;
}
DmsFileUploadEntity uploadLog = new DmsFileUploadEntity();
uploadLog.FileCategory = "MASTER";
uploadLog.UploadName = securityGeneratorNumberService.GetNo(MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_UPLOAD_NAME, "FL", YesNoPolicy.NO, MasterPrefixPolicy.UPLOAD_DMS_FILE_DELETE_LOG_FORMAT);
uploadLog.OrgFileName = dmsFile.OrgFileName;
//创建Dms文件,需更新父目录
DmsFileEntity entityLog = new DmsFileEntity();
ObjectCopyHelper.Copy(dmsFile, entityLog);
entityLog.FilePath = folderNameParent;
entityLog.FileId = 0;
repositoryDmsFile.InsertNow(entityLog);
uploadLog.FileId = entityLog.FileId;
repositoryDmsFileUpload.InsertNow(uploadLog);
//创建目录关系表
DmsFolderMapEntity mapLog = new DmsFolderMapEntity();
mapLog.FolderNameParent = folderNameParent;
mapLog.FolderNameSon = entityLog.FileName;
repositoryDmsFolderMap.InsertNow(mapLog);
}
[PermissionOperate(name: MasterPermissionPolicy.DmsFile, operate: Operate.Delete)]
[UnitOfWork]
public void DeleteLog(long key)
{
DeleteLog(key, false);
}
private void DeleteLog(long key, bool isRestore)
{
IRepository<DmsFileDeleteLogEntity> repositoryDmsFileDeleteLog = repository.GetRepository<IRepository<DmsFileDeleteLogEntity>>();
@@ -451,6 +651,8 @@ namespace CloudBuilder.Master.Service
if (dmsFile == null) return;
if (isRestore) RestoreDmsFile(dmsFile, null);
repositoryDmsFileDeleteLog.DeleteNow(dmsFile);
IRepository<DmsFileUploadDeleteLogEntity> repositoryDmsFileUploadDeleteLog = repository.GetRepository<IRepository<DmsFileUploadDeleteLogEntity>>();
@@ -502,7 +704,7 @@ namespace CloudBuilder.Master.Service
if (dmsFiles == null || dmsFiles.Length == 0) return;
foreach (var dmsFile in dmsFiles)
{
DeleteLog(dmsFile.FileId);
DeleteLog(dmsFile.FileId, false);
}
}
@@ -512,7 +714,7 @@ namespace CloudBuilder.Master.Service
if (dmsFiles == null || dmsFiles.Length == 0) return;
foreach (var dmsFile in dmsFiles)
{
Delete(dmsFile.FileId);
Delete(dmsFile.FileId, true);
}
}