From 447e9165645cf756fcacc46baafc385c0ed30394 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Fri, 26 Sep 2025 18:14:03 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A8=BD=E6=9F=A5=E8=AE=B0?=
=?UTF-8?q?=E5=BD=95=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 23 +-
.../Service/Document/AuditDocumentService.cs | 579 +-
.../Document/DTO/AuditDocumentViewModel.cs | 120 +-
.../Service/Document/_MapConfig.cs | 29 +-
IRaCIS.Core.Domain/Document/AuditDocument.cs | 81 +-
.../Context/IRaCISDBContext.cs | 10 +-
.../20250926101203_auditRecord.Designer.cs | 20275 ++++++++++++++++
.../Migrations/20250926101203_auditRecord.cs | 157 +
.../IRaCISDBContextModelSnapshot.cs | 178 +
9 files changed, 21190 insertions(+), 262 deletions(-)
create mode 100644 IRaCIS.Core.Infra.EFCore/Migrations/20250926101203_auditRecord.Designer.cs
create mode 100644 IRaCIS.Core.Infra.EFCore/Migrations/20250926101203_auditRecord.cs
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index fcddf3798..576d505a7 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1483,12 +1483,33 @@
-
+
稽查文档
+
+
+ 稽查记录 列表
+
+
+
+
+
+
+ 删除稽查记录
+
+
+
+
+
+
+ 设置授权
+
+
+
+
获取稽查文档
diff --git a/IRaCIS.Core.Application/Service/Document/AuditDocumentService.cs b/IRaCIS.Core.Application/Service/Document/AuditDocumentService.cs
index d5bea6976..1e5934de1 100644
--- a/IRaCIS.Core.Application/Service/Document/AuditDocumentService.cs
+++ b/IRaCIS.Core.Application/Service/Document/AuditDocumentService.cs
@@ -19,6 +19,7 @@ using MassTransit;
using NPOI.POIFS.Properties;
using Org.BouncyCastle.Crypto;
using Microsoft.AspNetCore.Http;
+using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Core.Application.Service;
@@ -27,37 +28,150 @@ namespace IRaCIS.Core.Application.Service;
///
///
[ApiExplorerSettings(GroupName = "FileRecord")]
-public class AuditDocumentService(IRepository _auditDocumentRepository,
- IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService
+public class AuditDocumentService(IRepository _auditDocumentRepository, IRepository _auditRecordRepository,
+ IRepository _auditRecordPermissionRepository, IRepository _auditRecordIdentityUserRepository,
+ IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
{
- ///
- /// 获取稽查文档
- ///
- ///
- ///
- [HttpPost]
- public async Task> GetAuditDocumentList(AuditDocumentQuery inQuery)
- {
- var auditDocumentQueryable = _auditDocumentRepository
- .ProjectTo(_mapper.ConfigurationProvider);
- var pageList = await auditDocumentQueryable.ToPagedListAsync(inQuery);
- return pageList;
- }
+ #region 稽查新增需求
- ///
- /// 修改稽查文档
- ///
- ///
- ///
- [HttpPost]
+ ///
+ /// 稽查记录 列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetAuditRecordList(AuditRecordQuery inQuery)
+ {
+
+ var auditRecordQueryable = _auditRecordRepository
+ .WhereIf(inQuery.BeginAuditTime != null, t => t.AuditTime >= inQuery.BeginAuditTime)
+ .WhereIf(inQuery.EndAuditTime != null, t => t.AuditTime <= inQuery.EndAuditTime)
+ .WhereIf(inQuery.AuditState != null, t => t.AuditState == inQuery.AuditState)
+ .WhereIf(inQuery.BeginTime != null, t => t.BeginTime >= inQuery.BeginTime)
+ .WhereIf(inQuery.EndTime != null, t => t.EndTime <= inQuery.EndTime)
+ .WhereIf(inQuery.CompanyName.IsNotNullOrEmpty(), t => t.CompanyName.Contains(inQuery.CompanyName))
+ .WhereIf(inQuery.AuditContent.IsNotNullOrEmpty(), t => t.AuditContent.Contains(inQuery.AuditContent))
+ .ProjectTo(_mapper.ConfigurationProvider);
+
+ var pageList = await auditRecordQueryable.ToPagedListAsync(inQuery);
+
+ return pageList;
+ }
+
+
+ [HttpPost]
+ public async Task AddOrUpdateAuditRecord(AuditRecordAddOrEdit addOrEditAuditRecord)
+ {
+
+
+ if (addOrEditAuditRecord.Id == null)
+ {
+ var entity = _mapper.Map(addOrEditAuditRecord);
+
+
+ if (await _auditRecordRepository.AnyAsync(t => t.CompanyName == addOrEditAuditRecord.CompanyName && t.AuditContent == addOrEditAuditRecord.AuditContent && t.AuditTime == addOrEditAuditRecord.AuditTime, true))
+ {
+ //---重复的稽查记录。
+ return ResponseOutput.NotOk(_localizer["AuditDocument_RepeatAuditRecord"]);
+ }
+
+ await _auditRecordRepository.AddAsync(entity, true);
+
+ return ResponseOutput.Ok(entity.Id.ToString());
+ }
+ else
+ {
+ if (await _auditRecordRepository.AnyAsync(t => t.CompanyName == addOrEditAuditRecord.CompanyName && t.AuditContent == addOrEditAuditRecord.AuditContent && t.AuditTime == addOrEditAuditRecord.AuditTime
+ && t.Id != addOrEditAuditRecord.Id, true))
+ {
+ //---重复的稽查记录。
+ return ResponseOutput.NotOk(_localizer["AuditDocument_RepeatAuditRecord"]);
+ }
+
+ var find = _auditRecordRepository.Where(t => t.Id == addOrEditAuditRecord.Id, true).FirstOrDefault();
+
+ _mapper.Map(addOrEditAuditRecord, find);
+ find.UpdateTime = DateTime.Now;
+
+ var success = await _auditRecordRepository.SaveChangesAsync();
+
+ return ResponseOutput.Ok(find.Id.ToString());
+ }
+
+
+
+
+ }
+
+ ///
+ /// 删除稽查记录
+ ///
+ ///
+ ///
+ [HttpDelete("{auditRecordId:guid}")]
+ public async Task DeleteAuditRecord(Guid auditRecordId)
+ {
+ if (await _auditRecordRepository.Where(t => t.Id == auditRecordId).AnyAsync(u => u.AuditState != AuditState.NotStart))
+ {
+ //未开始的才允许删除
+ return ResponseOutput.NotOk(_localizer["AuditDocument_CannotDeleteStartRecod"]);
+ }
+
+ var success = await _auditRecordRepository.DeleteFromQueryAsync(t => t.Id == auditRecordId, true);
+
+ return ResponseOutput.Ok();
+ }
+
+ ///
+ /// 设置授权
+ ///
+ ///
+ ///
+ public async Task SetAuditRecordPermission(SetAuditRecordPermissionCommand inCommand)
+ {
+ if (_auditRecordPermissionRepository.Any(t => t.AuditRecordId == inCommand.AuditRecordId && t.AuditDocumentId == inCommand.AuditDocumentId))
+ {
+
+ }
+
+ return ResponseOutput.Ok();
+ }
+
+
+ #endregion
+
+
+
+
+ ///
+ /// 获取稽查文档
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetAuditDocumentList(AuditDocumentQuery inQuery)
+ {
+ var auditDocumentQueryable = _auditDocumentRepository
+ .ProjectTo(_mapper.ConfigurationProvider);
+ var pageList = await auditDocumentQueryable.ToPagedListAsync(inQuery);
+
+ return pageList;
+ }
+
+ ///
+ /// 修改稽查文档
+ ///
+ ///
+ ///
+ [HttpPost]
public async Task UpdateAuditDocument(AuditDocumentUpdateDto inDto)
{
- AuditDocumentAddOrEdit addOrEdit = _mapper.Map(inDto);
- addOrEdit.IsUpdate = true;
+ AuditDocumentAddOrEdit addOrEdit = _mapper.Map(inDto);
+ addOrEdit.IsUpdate = true;
- var result= await AddOrUpdateAuditDocument(addOrEdit);
+ var result = await AddOrUpdateAuditDocument(addOrEdit);
return ResponseOutput.Ok(result.Id);
}
@@ -80,7 +194,7 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
List auditDocumentAddOrEdits = new List();
auditDocumentAddOrEdits.Add(inDto);
- var result= await AddAuditDocument(auditDocumentAddOrEdits);
+ var result = await AddAuditDocument(auditDocumentAddOrEdits);
return ResponseOutput.Ok(result);
}
@@ -91,21 +205,22 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
///
[HttpPost]
public async Task AddAuditDocument(List inDto)
- {
- List resultData = new List();
+ {
+ List resultData = new List();
inDto.ForEach(x => x.IsUpdate = false);
await addData(inDto);
async Task addData(List data)
- {
- foreach(var item in data)
- {
- var result= await AddOrUpdateAuditDocument(item);
+ {
+ foreach (var item in data)
+ {
+ var result = await AddOrUpdateAuditDocument(item);
- resultData.Add(result.Id);
- item.Children.ForEach(x => {
- x.ParentId = result.Id;
- x.IsUpdate = false;
+ resultData.Add(result.Id);
+ item.Children.ForEach(x =>
+ {
+ x.ParentId = result.Id;
+ x.IsUpdate = false;
});
@@ -114,9 +229,9 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
await addData(item.Children);
}
}
- }
+ }
- return ResponseOutput.Ok(resultData);
+ return ResponseOutput.Ok(resultData);
}
@@ -125,74 +240,74 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
/// 通用方法
///
///
- private async Task AddOrUpdateAuditDocument(AuditDocumentAddOrEdit inDto)
- {
-
- var alikeData = await _auditDocumentRepository.Where(x =>x.Id!=inDto.Id&& x.ParentId == inDto.ParentId&&x.Name==inDto.Name&&x.AuditDocumentTypeEnum==inDto.AuditDocumentTypeEnum).FirstOrDefaultAsync();
- if (alikeData != null)
- {
- if (inDto.AuditDocumentTypeEnum == AuditDocumentType.Folder)
- {
- if (inDto.IsUpdate)
- {
- throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotAddFolder"]);
- }
- else
- {
- return alikeData;
- }
- }
- else
- {
- var entityData = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true);
- var historicalVersionIds = await _auditDocumentRepository.Where(x => x.MainFileId == alikeData.Id).OrderBy(x => x.Version).Select(x => x.Id).ToListAsync();
- historicalVersionIds.Add(alikeData.Id);
- int num = 1;
+ private async Task AddOrUpdateAuditDocument(AuditDocumentAddOrEdit inDto)
+ {
- foreach (var item in historicalVersionIds)
- {
- await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument()
- {
- MainFileId = entityData.Id,
- ParentId = null,
- Version = num,
- AuditDocumentTypeEnum = AuditDocumentType.HistoricalVersion
- },true);
- num++;
- }
-
- return entityData;
+ var alikeData = await _auditDocumentRepository.Where(x => x.Id != inDto.Id && x.ParentId == inDto.ParentId && x.Name == inDto.Name && x.AuditDocumentTypeEnum == inDto.AuditDocumentTypeEnum).FirstOrDefaultAsync();
+ if (alikeData != null)
+ {
+ if (inDto.AuditDocumentTypeEnum == AuditDocumentType.Folder)
+ {
+ if (inDto.IsUpdate)
+ {
+ throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotAddFolder"]);
}
- }
-
+ else
+ {
+ return alikeData;
+ }
+ }
+ else
+ {
+ var entityData = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true);
+ var historicalVersionIds = await _auditDocumentRepository.Where(x => x.MainFileId == alikeData.Id).OrderBy(x => x.Version).Select(x => x.Id).ToListAsync();
+ historicalVersionIds.Add(alikeData.Id);
+ int num = 1;
- var entity = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true);
- return entity;
- }
+ foreach (var item in historicalVersionIds)
+ {
+ await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument()
+ {
+ MainFileId = entityData.Id,
+ ParentId = null,
+ Version = num,
+ AuditDocumentTypeEnum = AuditDocumentType.HistoricalVersion
+ }, true);
+ num++;
+ }
- ///
- /// 获取面包屑导航
- ///
- ///
- ///
- [HttpPost]
- public async Task> GetBreadcrumbData(GetBreadcrumbDataInDto inDto)
- {
- List result=new List();
+ return entityData;
+ }
+ }
- await findParent(result, inDto.Id);
+
+ var entity = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true);
+ return entity;
+ }
+
+ ///
+ /// 获取面包屑导航
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetBreadcrumbData(GetBreadcrumbDataInDto inDto)
+ {
+ List result = new List();
+
+ await findParent(result, inDto.Id);
async Task findParent(List datas, Guid id)
- {
- var data= await _auditDocumentRepository.Where(x => x.Id == id).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
+ {
+ var data = await _auditDocumentRepository.Where(x => x.Id == id).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
datas.Add(data);
- if (data.ParentId != null)
- {
+ if (data.ParentId != null)
+ {
await findParent(datas, data.ParentId.Value);
}
}
- result.Reverse();
+ result.Reverse();
return result;
@@ -204,8 +319,8 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
///
///
[HttpPost]
- public async Task> GetAuditDocumentData(GetAuditDocumentDataInDto inDto)
- {
+ public async Task> GetAuditDocumentData(GetAuditDocumentDataInDto inDto)
+ {
var defalutSortArray = new string[] { nameof(AuditDocumentData.AuditDocumentTypeEnum), nameof(AuditDocumentData.Name) };
if (inDto.SortField.IsNotNullOrEmpty())
@@ -213,41 +328,42 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
defalutSortArray = new string[] { nameof(AuditDocumentData.AuditDocumentTypeEnum), inDto.SortField + (inDto.Asc ? " asc" : " desc") };
inDto.SortField = string.Empty;
}
- // 新取出来排序 然后再找子项
- var data= (await _auditDocumentRepository
- .Where(x=>x.AuditDocumentTypeEnum!=AuditDocumentType.HistoricalVersion)
- .WhereIf(inDto.IsAuthorization!=null,x=>x.IsAuthorization==inDto.IsAuthorization)
- .ProjectTo(_mapper.ConfigurationProvider).ToPagedListAsync(new PageInput() {
- PageIndex=1,
- PageSize=999999,
- }, defalutSortArray) ).CurrentPageData.ToList();
-
-
-
+ // 新取出来排序 然后再找子项
+ var data = (await _auditDocumentRepository
+ .Where(x => x.AuditDocumentTypeEnum != AuditDocumentType.HistoricalVersion)
+ .WhereIf(inDto.IsAuthorization != null, x => x.IsAuthorization == inDto.IsAuthorization)
+ .ProjectTo(_mapper.ConfigurationProvider).ToPagedListAsync(new PageInput()
+ {
+ PageIndex = 1,
+ PageSize = 999999,
+ }, defalutSortArray)).CurrentPageData.ToList();
+
+
+
if (inDto.Name.IsNotNullOrEmpty())
- {
+ {
List findIds = new List();
var findData = data.Where(x => x.Name.Contains(inDto.Name)).Select(x => x.Id.Value).ToList();
GetParentId(findIds, findData, data);
findIds.AddRange(findData);
- data = data.Where(x => findIds.Distinct().Contains(x.Id.Value)).ToList();
+ data = data.Where(x => findIds.Distinct().Contains(x.Id.Value)).ToList();
}
- var query = data
+ var query = data
.WhereIf(inDto.SelfId != null, x => inDto.SelfId == x.Id)
.WhereIf(inDto.Id != null, x => inDto.Id == x.ParentId)
- .WhereIf(inDto.Id == null&& inDto.SelfId == null, x => x.ParentId == null);
+ .WhereIf(inDto.Id == null && inDto.SelfId == null, x => x.ParentId == null);
- PageOutput result = new PageOutput()
- {
- PageIndex = inDto.PageIndex,
- PageSize = inDto.PageSize,
- TotalCount = query.Count(),
+ PageOutput result = new PageOutput()
+ {
+ PageIndex = inDto.PageIndex,
+ PageSize = inDto.PageSize,
+ TotalCount = query.Count(),
};
var root = query
.Skip(inDto.PageSize * (inDto.PageIndex - 1)).Take(inDto.PageSize).ToList();
@@ -256,32 +372,32 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
.Where(x => x.AuditDocumentTypeEnum == AuditDocumentType.HistoricalVersion).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
foreach (var item in root)
- {
+ {
GetChildren(item, data, historicalVersionList);
}
- result.CurrentPageData = root;
- return result;
+ result.CurrentPageData = root;
+ return result;
}
- private void GetParentId(List parentIds, List ids, List dataList)
- {
+ private void GetParentId(List parentIds, List ids, List dataList)
+ {
var parentid = dataList.Where(x => ids.Contains(x.Id.Value) && x.ParentId != null).Select(x => x.ParentId.Value).ToList();
- if (parentid.Count() > 0)
- {
+ if (parentid.Count() > 0)
+ {
parentIds.AddRange(parentid);
GetParentId(parentIds, parentid, dataList);
}
-
+
}
- private void GetChildren(AuditDocumentData item, List dataList, List historyList)
+ private void GetChildren(AuditDocumentData item, List dataList, List historyList)
{
item.Children = dataList.Where(x => x.ParentId == item.Id).ToList();
- item.HistoricalVersionsCount= historyList.Where(x => x.MainFileId == item.Id).Count();
+ item.HistoricalVersionsCount = historyList.Where(x => x.MainFileId == item.Id).Count();
foreach (var x in item.Children)
{
GetChildren(x, dataList, historyList);
@@ -295,39 +411,40 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
///
[HttpPost]
public async Task DeleteAuditDocument(DeleteAuditDocumentInDto inDto)
- {
- var data = await _auditDocumentRepository.Select(x => new DeleteAudit (){
- Id=x.Id,
- ParentId= x.ParentId,
- MainFileId= x.MainFileId
- }).ToListAsync();
+ {
+ var data = await _auditDocumentRepository.Select(x => new DeleteAudit()
+ {
+ Id = x.Id,
+ ParentId = x.ParentId,
+ MainFileId = x.MainFileId
+ }).ToListAsync();
- List DeleteId= inDto.Ids;
+ List DeleteId = inDto.Ids;
finId(inDto.Ids, data);
void finId(List deletids, List deletes)
- {
- DeleteId.AddRange(deletids);
+ {
+ DeleteId.AddRange(deletids);
- var temp = deletes.Where(x =>(x.ParentId!=null&& deletids.Contains(x.ParentId.Value))||(x.MainFileId!=null&& deletids.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList();
- if (temp.Count() > 0)
- {
- finId(temp, deletes);
+ var temp = deletes.Where(x => (x.ParentId != null && deletids.Contains(x.ParentId.Value)) || (x.MainFileId != null && deletids.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList();
+ if (temp.Count() > 0)
+ {
+ finId(temp, deletes);
}
}
- DeleteId = DeleteId.Distinct().ToList();
- var mainFileId=await _auditDocumentRepository.Where(x => DeleteId.Contains(x.Id)&&x.MainFileId!=null).Select(x => x.MainFileId).Distinct().ToListAsync();
+ DeleteId = DeleteId.Distinct().ToList();
+ var mainFileId = await _auditDocumentRepository.Where(x => DeleteId.Contains(x.Id) && x.MainFileId != null).Select(x => x.MainFileId).Distinct().ToListAsync();
var success = await _auditDocumentRepository.DeleteFromQueryAsync(t => DeleteId.Distinct().Contains(t.Id), true);
- foreach (var item in mainFileId)
- {
- var historicalVersionList = await _auditDocumentRepository.Where(x => x.MainFileId == item).OrderBy(x=>x.Version).ToListAsync();
+ foreach (var item in mainFileId)
+ {
+ var historicalVersionList = await _auditDocumentRepository.Where(x => x.MainFileId == item).OrderBy(x => x.Version).ToListAsync();
- var num = 1;
- foreach (var historical in historicalVersionList)
- {
+ var num = 1;
+ foreach (var historical in historicalVersionList)
+ {
await _auditDocumentRepository.UpdatePartialFromQueryAsync(historical.Id, x => new AuditDocument()
{
Version = num,
@@ -335,7 +452,7 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
num++;
}
-
+
}
@@ -345,12 +462,12 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
}
- ///
- /// 移动文件或者文件夹 到其他文件夹
- ///
- ///
- [HttpPost]
- public async Task MovieFileOrFolder(MovieFileOrFolderInDto inDto)
+ ///
+ /// 移动文件或者文件夹 到其他文件夹
+ ///
+ ///
+ [HttpPost]
+ public async Task MovieFileOrFolder(MovieFileOrFolderInDto inDto)
{
var data = await _auditDocumentRepository.Select(x => new DeleteAudit()
@@ -361,8 +478,8 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
MainFileId = x.MainFileId
}).ToListAsync();
- foreach (var id in inDto.Ids)
- {
+ foreach (var id in inDto.Ids)
+ {
var file = data.Where(x => x.Id == id).FirstOrDefault();
if (file.AuditDocumentTypeEnum == AuditDocumentType.Folder)
{
@@ -394,7 +511,7 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
}
foreach (var id in inDto.Ids)
- {
+ {
await _auditDocumentRepository.UpdatePartialFromQueryAsync(id, x => new AuditDocument()
{
ParentId = inDto.ParentId
@@ -402,7 +519,7 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
await _auditDocumentRepository.SaveChangesAsync();
}
-
+
return ResponseOutput.Ok();
}
@@ -412,21 +529,22 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
///
///
[HttpPost]
- public async Task CopyFileOrFolder(MovieFileOrFolderInDto inDto)
+ public async Task CopyFileOrFolder(MovieFileOrFolderInDto inDto)
{
- foreach (var item in inDto.Ids)
- {
- var data = (await GetAuditDocumentData(new GetAuditDocumentDataInDto()
+ foreach (var item in inDto.Ids)
+ {
+ var data = (await GetAuditDocumentData(new GetAuditDocumentDataInDto()
{
- SelfId =item,
-
- PageIndex=1,
- PageSize= 1000
+ SelfId = item,
+
+ PageIndex = 1,
+ PageSize = 1000
})).CurrentPageData;
List auditDocumentAddOrEdits = _mapper.Map>(data);
- auditDocumentAddOrEdits.ForEach(x => {
+ auditDocumentAddOrEdits.ForEach(x =>
+ {
x.IsUpdate = false;
x.Id = null;
x.ParentId = inDto.ParentId;
@@ -441,7 +559,8 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
item.Id = null;
var result = await AddOrUpdateAuditDocument(item);
- item.Children.ForEach(x => {
+ item.Children.ForEach(x =>
+ {
x.ParentId = result.Id;
x.IsUpdate = false;
x.Id = null;
@@ -462,98 +581,100 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
///
///
[HttpPost]
- public async Task> GetHistoricalVersion(GetHistoricalVersionInDto inDto)
- {
+ public async Task> GetHistoricalVersion(GetHistoricalVersionInDto inDto)
+ {
- List< HistoricalVersionDto > result=new List();
+ List result = new List();
- result = await _auditDocumentRepository.Where(x => x.MainFileId == inDto.Id).ProjectTo(_mapper.ConfigurationProvider).OrderByDescending(x => x.Version).ToListAsync();
- var currentData = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
- currentData.IsCurrentVersion = true;
+ result = await _auditDocumentRepository.Where(x => x.MainFileId == inDto.Id).ProjectTo(_mapper.ConfigurationProvider).OrderByDescending(x => x.Version).ToListAsync();
+ var currentData = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
+ currentData.IsCurrentVersion = true;
result.Insert(0, currentData);
- return result;
- }
+ return result;
+ }
- ///
- /// 把历史版本设置为当前版本
- ///
- ///
- [HttpPost]
- public async Task SetCurrentVersion(SetCurrentVersionInDto inDto)
- {
+ ///
+ /// 把历史版本设置为当前版本
+ ///
+ ///
+ [HttpPost]
+ public async Task SetCurrentVersion(SetCurrentVersionInDto inDto)
+ {
var file = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).FirstNotNullAsync();
- if (file.AuditDocumentTypeEnum != AuditDocumentType.HistoricalVersion)
- {
+ if (file.AuditDocumentTypeEnum != AuditDocumentType.HistoricalVersion)
+ {
throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotSetCurrentVersion"]);
}
- var mainFile = await _auditDocumentRepository.Where(x => x.Id == file.MainFileId).FirstNotNullAsync();
+ var mainFile = await _auditDocumentRepository.Where(x => x.Id == file.MainFileId).FirstNotNullAsync();
- var historicalVersionIds= await _auditDocumentRepository.Where(x => x.MainFileId == mainFile.Id&&x.Id!=inDto.Id).OrderBy(x=>x.Version).Select(x=>x.Id).ToListAsync();
+ var historicalVersionIds = await _auditDocumentRepository.Where(x => x.MainFileId == mainFile.Id && x.Id != inDto.Id).OrderBy(x => x.Version).Select(x => x.Id).ToListAsync();
- historicalVersionIds.Add(mainFile.Id);
- await _auditDocumentRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new AuditDocument() {
- MainFileId=null,
- ParentId= mainFile.ParentId,
- AuditDocumentTypeEnum=AuditDocumentType.File,
+ historicalVersionIds.Add(mainFile.Id);
+ await _auditDocumentRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new AuditDocument()
+ {
+ MainFileId = null,
+ ParentId = mainFile.ParentId,
+ AuditDocumentTypeEnum = AuditDocumentType.File,
});
- int num = 1;
- foreach (var item in historicalVersionIds)
- {
+ int num = 1;
+ foreach (var item in historicalVersionIds)
+ {
await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument()
{
MainFileId = inDto.Id,
ParentId = null,
- Version=num,
- AuditDocumentTypeEnum= AuditDocumentType.HistoricalVersion
+ Version = num,
+ AuditDocumentTypeEnum = AuditDocumentType.HistoricalVersion
});
- num++;
+ num++;
}
- await _auditDocumentRepository.SaveChangesAsync();
+ await _auditDocumentRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
- ///
- /// 设置是否授权
- ///
- ///
- ///
- [HttpPost]
- public async Task SetIsAuthorization(SetIsAuthorizationInDto inDto)
- {
- var data = await _auditDocumentRepository.Select(x => new DeleteAudit()
- {
- Id = x.Id,
- ParentId = x.ParentId,
- MainFileId = x.MainFileId
- }).ToListAsync();
+ ///
+ /// 设置是否授权
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task SetIsAuthorization(SetIsAuthorizationInDto inDto)
+ {
+ var data = await _auditDocumentRepository.Select(x => new DeleteAudit()
+ {
+ Id = x.Id,
+ ParentId = x.ParentId,
+ MainFileId = x.MainFileId
+ }).ToListAsync();
- List allid = new List();
- findChild(allid, inDto.Ids, data);
+ List allid = new List();
+ findChild(allid, inDto.Ids, data);
if (inDto.IsAuthorization)
{
findParent(allid, inDto.Ids, data);
}
- allid= allid.Distinct().ToList();
- await _auditDocumentRepository.UpdatePartialFromQueryAsync(t => allid.Contains(t.Id), x => new AuditDocument() {
-
- IsAuthorization = inDto.IsAuthorization
+ allid = allid.Distinct().ToList();
+ await _auditDocumentRepository.UpdatePartialFromQueryAsync(t => allid.Contains(t.Id), x => new AuditDocument()
+ {
+
+ IsAuthorization = inDto.IsAuthorization
});
- await _auditDocumentRepository.SaveChangesAsync();
- return ResponseOutput.Ok();
+ await _auditDocumentRepository.SaveChangesAsync();
+ return ResponseOutput.Ok();
void findParent(List allId, List current, List data)
{
allId.AddRange(current);
- var parent = data.Where(x => current.Contains(x.Id)).Select(x => x.ParentId).Where(x=>x!=null).Select(x=>(Guid)x).ToList();
-
+ var parent = data.Where(x => current.Contains(x.Id)).Select(x => x.ParentId).Where(x => x != null).Select(x => (Guid)x).ToList();
+
if (parent.Count() > 0)
{
@@ -563,14 +684,14 @@ public class AuditDocumentService(IRepository _auditDocumentRepos
}
}
- void findChild(List allId,List current, List data)
- {
- allId.AddRange(current);
+ void findChild(List allId, List current, List data)
+ {
+ allId.AddRange(current);
+
+ var child = data.Where(x => (x.ParentId != null && current.Contains(x.ParentId.Value)) || (x.MainFileId != null && current.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList();
+ if (child.Count() > 0)
+ {
- var child = data.Where(x =>(x.ParentId!=null&& current.Contains(x.ParentId.Value))||(x.MainFileId!=null&¤t.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList();
- if (child.Count() > 0)
- {
-
findChild(allId, child, data);
diff --git a/IRaCIS.Core.Application/Service/Document/DTO/AuditDocumentViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/AuditDocumentViewModel.cs
index 73a71c913..b67be4a32 100644
--- a/IRaCIS.Core.Application/Service/Document/DTO/AuditDocumentViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Document/DTO/AuditDocumentViewModel.cs
@@ -9,6 +9,76 @@ using IRaCIS.Core.Domain.Share;
using System.Collections.Generic;
namespace IRaCIS.Core.Application.ViewModel;
+
+public class AuditRecordView : AuditRecordAddOrEdit
+{
+ public Guid CreateUserId { get; set; }
+ public DateTime CreateTime { get; set; }
+ public Guid UpdateUserId { get; set; }
+ public DateTime UpdateTime { get; set; }
+
+
+ public new List IdnetityUserIdList => IdentityUserList.Select(t => t.Id).ToList();
+ public List IdentityUserList { get; set; }
+}
+
+public class AuditIdentiUserInfo
+{
+ public Guid Id { get; set; }
+
+ public string UserName { get; set; }
+
+ public string FullName { get; set; }
+}
+
+public class AuditRecordAddOrEdit
+{
+ public Guid? Id { get; set; }
+ public string CompanyName { get; set; }
+
+ public string AuditContent { get; set; }
+
+ public DateOnly AuditTime { get; set; }
+
+
+ public DateTime? BeginTime { get; set; }
+
+ public DateTime? EndTime { get; set; }
+
+ public AuditState AuditState { get; set; }
+
+ public AuditType AuditType { get; set; }
+
+ public List IdnetityUserIdList { get; set; }
+}
+
+public class AuditRecordQuery : PageInput
+{
+ public string? CompanyName { get; set; }
+
+ public string? AuditContent { get; set; }
+
+ public DateOnly? BeginAuditTime { get; set; }
+ public DateOnly? EndAuditTime { get; set; }
+
+
+ public DateTime? BeginTime { get; set; }
+
+ public DateTime? EndTime { get; set; }
+
+ public AuditState? AuditState { get; set; }
+}
+
+public class SetAuditRecordPermissionCommand
+{
+ public Guid AuditDocumentId { get; set; }
+
+ public Guid AuditRecordId { get; set; }
+
+ public bool IsAuthorization { get; set; }
+}
+
+
public class DeleteAudit
{
public Guid Id { get; set; }
@@ -24,9 +94,9 @@ public class DeleteAuditDocumentInDto
public List Ids { get; set; }
}
-public class GetAuditDocumentDataInDto:PageInput
+public class GetAuditDocumentDataInDto : PageInput
{
- public Guid? Id { get; set; }
+ public Guid? Id { get; set; }
public Guid? SelfId { get; set; }
@@ -53,17 +123,17 @@ public class AuditDocumentData : AuditDocumentUpdateDto
public int? Version { get; set; }
public int HistoricalVersionsCount { get; set; }
- public List Children { get; set; }=new List (){ };
+ public List Children { get; set; } = new List() { };
}
public class AuditDocumentView : AuditDocumentAddOrEdit
{
-
+
public DateTime CreateTime { get; set; }
-
+
public DateTime UpdateTime { get; set; }
-
+
}
public class SetIsAuthorizationInDto
@@ -80,7 +150,7 @@ public class SetCurrentVersionInDto
public class GetHistoricalVersionInDto
{
- public Guid Id { get; set; }
+ public Guid Id { get; set; }
}
public class GetHistoricalVersionOutDto
@@ -96,7 +166,7 @@ public class MovieFileOrFolderInDto
public Guid ParentId { get; set; }
}
-public class HistoricalVersionDto: AuditDocumentUpdateDto
+public class HistoricalVersionDto : AuditDocumentUpdateDto
{
public bool IsCurrentVersion { get; set; } = false;
@@ -113,7 +183,7 @@ public class AuditDocumentUpdateDto
public AuditDocumentType AuditDocumentTypeEnum { get; set; }
- public string? FileFormat { get; set; }
+ public string? FileFormat { get; set; }
public string? FilePath { get; set; }
@@ -133,34 +203,34 @@ public class GetBreadcrumbDataInDto
public Guid Id { get; set; }
}
-public class AuditDocumentAddOrEdit: AuditDocumentUpdateDto
+public class AuditDocumentAddOrEdit : AuditDocumentUpdateDto
{
-
- public List Children { get; set; }=new List() { };
+
+ public List Children { get; set; } = new List() { };
public bool IsUpdate { get; set; } = true;
}
-public class AuditDocumentQuery:PageInput
+public class AuditDocumentQuery : PageInput
{
public AuditDocumentType? AuditDocumentTypeEnum { get; set; }
-
+
public string? FileFormat { get; set; }
-
+
public string? FilePath { get; set; }
-
- public decimal? FileSize { get; set; }
-
+
+ public decimal? FileSize { get; set; }
+
public bool? IsAuthorization { get; set; }
-
- public Guid? MainFileId { get; set; }
-
+
+ public Guid? MainFileId { get; set; }
+
public string? Name { get; set; }
-
- public Guid? ParentId { get; set; }
-
- }
+
+ public Guid? ParentId { get; set; }
+
+}
diff --git a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs
index 4cff1cd34..97848e01e 100644
--- a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs
@@ -43,7 +43,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(dest => dest.CreateUserRole, opt => opt.Ignore());
CreateMap()
- .ForMember(d => d.AttachmentCount, u => u.MapFrom(s =>s.TrialDocumentAttachmentList.Count()))
+ .ForMember(d => d.AttachmentCount, u => u.MapFrom(s => s.TrialDocumentAttachmentList.Count()))
.ForMember(d => d.FileType, u => u.MapFrom(s => isEn_Us ? s.FileType.Value : s.FileType.ValueCN))
.ForMember(d => d.IsSomeUserSigned, u => u.MapFrom(s => s.TrialDocConfirmedUserList.Any(t => t.ConfirmTime != null)))
.ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path));
@@ -81,7 +81,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap();
- CreateMap ();
+ CreateMap();
CreateMap()
@@ -94,13 +94,14 @@ namespace IRaCIS.Core.Application.Service
CreateMap().ForMember(d => d.NeedConfirmedUserTypeList, c => c.MapFrom(t => t.NeedConfirmedUserTypeIdList));
- CreateMap().EqualityComparison((odto, o) => odto == o.NeedConfirmUserTypeId)
+ CreateMap()
+ .EqualityComparison((odto, o) => odto == o.NeedConfirmUserTypeId)
.ForMember(d => d.NeedConfirmUserTypeId, c => c.MapFrom(t => t))
.ForMember(d => d.SystemDocumentId, c => c.Ignore());
CreateMap()
- .ForMember(d => d.SysCriterionTypeList, c => c.MapFrom(t => t.SysEmailNoticeConfig.CriterionTypeList))
+ .ForMember(d => d.SysCriterionTypeList, c => c.MapFrom(t => t.SysEmailNoticeConfig.CriterionTypeList))
.ForMember(d => d.TrialCriterionName, c => c.MapFrom(t => t.TrialReadingCriterion.CriterionName))
.ForMember(d => d.TrialEmailNoticeUserList, c => c.MapFrom(t => t.TrialEmailNoticeUserList));
@@ -146,6 +147,26 @@ namespace IRaCIS.Core.Application.Service
CreateMap();
CreateMap().ReverseMap();
+
+
+
+ CreateMap()
+ .ForMember(d => d.IdentityUserList, c => c.MapFrom(t => t.AuditRecordIdentityUserList));
+
+ CreateMap()
+ .ForMember(d => d.AuditRecordIdentityUserList, c => c.MapFrom(t => t.IdnetityUserIdList));
+
+ CreateMap()
+ .EqualityComparison((odto, o) => odto == o.IdentityUserId)
+ .ForMember(d => d.AuditRecordId, c => c.Ignore())
+ .ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t));
+
+
+ CreateMap()
+ .ForMember(d => d.Id, c => c.MapFrom(t => t.IdentityUser.Id))
+ .ForMember(d => d.UserName, c => c.MapFrom(t => t.IdentityUser.UserName))
+ .ForMember(d => d.FullName, c => c.MapFrom(t => t.IdentityUser.FullName));
+
}
}
diff --git a/IRaCIS.Core.Domain/Document/AuditDocument.cs b/IRaCIS.Core.Domain/Document/AuditDocument.cs
index cbd69071a..801ba5f63 100644
--- a/IRaCIS.Core.Domain/Document/AuditDocument.cs
+++ b/IRaCIS.Core.Domain/Document/AuditDocument.cs
@@ -11,7 +11,7 @@ namespace IRaCIS.Core.Domain.Models
[Table("AuditDocument")]
public class AuditDocument : BaseFullAuditEntity
{
-
+
///
/// 文件夹名或者文件名
///
@@ -80,4 +80,83 @@ namespace IRaCIS.Core.Domain.Models
HistoricalVersion = 2,
}
+
+
+ public class AuditRecord : BaseFullAuditEntity
+ {
+ [JsonIgnore]
+ public List AuditRecordIdentityUserList { get; set; }
+
+ public string CompanyName { get; set; }
+
+ public string AuditContent { get; set; }
+
+ [Comment("稽查日期")]
+ public DateOnly AuditTime { get; set; }
+
+
+ public DateTime? BeginTime { get; set; }
+
+ public DateTime? EndTime { get; set; }
+
+ [Comment("稽查状态")]
+ public AuditState AuditState { get; set; }
+
+ [Comment("稽查形式")]
+ public AuditType AuditType { get; set; }
+
+ }
+
+
+ public class AuditRecordIdentityUser : BaseAddAuditEntity
+ {
+ [JsonIgnore]
+ public IdentityUser IdentityUser { get; set; }
+
+ [JsonIgnore]
+ public AuditRecord AuditRecord { get; set; }
+
+
+
+ public Guid IdentityUserId { get; set; }
+
+ public Guid AuditRecordId { get; set; }
+ }
+
+
+ public class AuditRecordPermission : BaseAddAuditEntity
+ {
+ [JsonIgnore]
+ public AuditRecord AuditRecord { get; set; }
+
+ [JsonIgnore]
+ public AuditDocument AuditDocument { get; set; }
+
+
+ public Guid AuditRecordId { get; set; }
+
+
+ public Guid AuditDocumentId { get; set; }
+ }
+
+
+ public enum AuditState
+ {
+ NotStart = 0,
+
+ Ongoing = 1,
+
+ End = 2
+
+ }
+
+ public enum AuditType
+ {
+ None = 0,
+
+ Online = 1,
+
+ OnSite = 2
+
+ }
}
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index 193690a97..fe750de68 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -61,7 +61,7 @@ public class IRaCISDBContext : DbContext
configurationBuilder.Conventions.Add(_ => new DefaultStringLengthConvention(400));
//https://learn.microsoft.com/zh-cn/ef/core/modeling/relationships/conventions?utm_source=chatgpt.com
- configurationBuilder.Conventions.Remove(typeof(ForeignKeyIndexConvention));
+ //configurationBuilder.Conventions.Remove(typeof(ForeignKeyIndexConvention));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -673,7 +673,13 @@ public class IRaCISDBContext : DbContext
public virtual DbSet SubjectVisitImageBackRecord { get; set; }
-
+
+
+ public virtual DbSet AuditRecord { get; set; }
+ public virtual DbSet AuditRecordIdentityUser { get; set; }
+ public virtual DbSet AuditRecordPermission { get; set; }
+
+
}
public class TestLength : Entity
diff --git a/IRaCIS.Core.Infra.EFCore/Migrations/20250926101203_auditRecord.Designer.cs b/IRaCIS.Core.Infra.EFCore/Migrations/20250926101203_auditRecord.Designer.cs
new file mode 100644
index 000000000..3caf94996
--- /dev/null
+++ b/IRaCIS.Core.Infra.EFCore/Migrations/20250926101203_auditRecord.Designer.cs
@@ -0,0 +1,20275 @@
+//
+using System;
+using IRaCIS.Core.Infra.EFCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace IRaCIS.Core.Infra.EFCore.Migrations
+{
+ [DbContext(typeof(IRaCISDBContext))]
+ [Migration("20250926101203_auditRecord")]
+ partial class auditRecord
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.19")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.Attachment", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("编码");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DoctorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ExpiryDate")
+ .HasColumnType("datetime2")
+ .HasComment("过期时间");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("IsAuthorizedView")
+ .HasColumnType("bit");
+
+ b.Property("IsOfficial")
+ .HasColumnType("bit")
+ .HasComment("是否正式简历");
+
+ b.Property("Language")
+ .HasColumnType("int")
+ .HasComment("1 中文 2为英文");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Type")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("文件类型名");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("DoctorId");
+
+ b.ToTable("Attachment", t =>
+ {
+ t.HasComment("医生 - 简历|证书 文档表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocument", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditDocumentTypeEnum")
+ .HasColumnType("int");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("FileFormat")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("FilePath")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("FileSize")
+ .HasPrecision(18, 2)
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("IsAuthorization")
+ .HasColumnType("bit");
+
+ b.Property("MainFileId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ParentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Version")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("AuditDocument", t =>
+ {
+ t.HasComment("稽查文档管理");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecord", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditContent")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("AuditState")
+ .HasColumnType("int")
+ .HasComment("稽查状态");
+
+ b.Property("AuditTime")
+ .HasColumnType("date")
+ .HasComment("稽查日期");
+
+ b.Property("AuditType")
+ .HasColumnType("int")
+ .HasComment("稽查形式");
+
+ b.Property("BeginTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CompanyName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EndTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("AuditRecord");
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecordIdentityUser", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IdentityUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditRecordId");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("IdentityUserId");
+
+ b.ToTable("AuditRecordIdentityUser");
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditRecordPermission", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditDocumentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditRecordId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditDocumentId");
+
+ b.HasIndex("AuditRecordId");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("AuditRecordPermission");
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CRO", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CROCode")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CROName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CRONameCN")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsTrialLevel")
+ .HasColumnType("bit")
+ .HasComment("是否是项目级别");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("CROCompany", t =>
+ {
+ t.HasComment("机构 - CRO");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CheckChallengeDialog", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsCRCNeedReply")
+ .HasColumnType("bit")
+ .HasComment("CRC是否需要回复 前端使用");
+
+ b.Property("ParamInfo")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)")
+ .HasComment("核查的检查信息Json");
+
+ b.Property("SubjectVisitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TalkContent")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserTypeEnum")
+ .HasColumnType("int")
+ .HasComment("核查过程中的操作用户类型");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("SubjectVisitId");
+
+ b.ToTable("CheckChallengeDialog", t =>
+ {
+ t.HasComment("一致性核查 - 对话记录表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalFormId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("表单Id");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("QuestionId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("问题Id");
+
+ b.Property("RowIndex")
+ .HasColumnType("int");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("受试者Id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("ClinicalAnswerRowInfo", t =>
+ {
+ t.HasComment("受试者 - 临床表单表格问题行记录");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataSystemSet", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalDataLevel")
+ .HasColumnType("int");
+
+ b.Property("ClinicalDataSetEnName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalDataSetEnum")
+ .HasColumnType("int")
+ .HasComment("枚举(字典里面取的)");
+
+ b.Property("ClinicalDataSetName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalUploadType")
+ .HasColumnType("int")
+ .HasComment("上传方式");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionEnumListStr")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("EnFileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("EnPath")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("IsApply")
+ .HasColumnType("bit")
+ .HasComment("是否应用");
+
+ b.Property("IsEnable")
+ .HasColumnType("bit");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("UploadRole")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("ClinicalDataSystemSet", t =>
+ {
+ t.HasComment("系统 - 临床数据配置");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalDataLevel")
+ .HasColumnType("int")
+ .HasComment("临床级别");
+
+ b.Property("ClinicalDataSetEnName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalDataSetName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalUploadType")
+ .HasColumnType("int")
+ .HasComment("上传方式");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionEnumListStr")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("EnFileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("EnPath")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("IsApply")
+ .HasColumnType("bit")
+ .HasComment("是否应用");
+
+ b.Property("IsConfirm")
+ .HasColumnType("bit");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("SystemClinicalDataSetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property