Uat_Study
parent
005bbf8419
commit
0bf0299c31
|
@ -1772,85 +1772,84 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[HttpGet("{trialId:guid}/{subjectVisitId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput> ForwardSVDicomImage(Guid subjectVisitId, [FromServices] DicomFileStoreHelper _dicomFileStoreHelper)
|
public async Task<IResponseOutput> ForwardSVDicomImage(Guid[] subjectVisitIdList, [FromServices] DicomFileStoreHelper _dicomFileStoreHelper)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
foreach (var subjectVisitId in subjectVisitIdList)
|
||||||
var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo<DicomTrialSiteSubjectInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName;
|
|
||||||
|
|
||||||
var path = _dicomFileStoreHelper.GetSubjectVisitPath(info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
// 主机及端口信息后面可以改到 配置文件
|
var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo<DicomTrialSiteSubjectInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||||
SessionOptions sessionOptions = new SessionOptions
|
|
||||||
|
var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName;
|
||||||
|
|
||||||
|
var path = _dicomFileStoreHelper.GetSubjectVisitPath(info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId);
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
Protocol = Protocol.Sftp,
|
// 主机及端口信息后面可以改到 配置文件
|
||||||
PortNumber = 8022,
|
SessionOptions sessionOptions = new SessionOptions
|
||||||
HostName = "CS-690-sftp.mint-imaging.com",
|
|
||||||
UserName = "zdong",
|
|
||||||
Password = "Everest@2021",
|
|
||||||
SshHostKeyFingerprint = @"ecdsa-sha2-nistp384 384 59gkjJ5lMwv3jsB8Wz2B35tBAIor5pSd8PcJYtoamPo="
|
|
||||||
};
|
|
||||||
|
|
||||||
using (Session session = new Session())
|
|
||||||
{
|
|
||||||
var studyFolders = (new DirectoryInfo(path)).GetDirectories();
|
|
||||||
|
|
||||||
session.Open(sessionOptions);
|
|
||||||
|
|
||||||
if (!session.FileExists(targetPath))
|
|
||||||
{
|
{
|
||||||
session.CreateDirectory(targetPath);
|
Protocol = Protocol.Sftp,
|
||||||
}
|
PortNumber = 8022,
|
||||||
|
HostName = "CS-690-sftp.mint-imaging.com",
|
||||||
|
UserName = "zdong",
|
||||||
|
Password = "Everest@2021",
|
||||||
|
SshHostKeyFingerprint = @"ecdsa-sha2-nistp384 384 59gkjJ5lMwv3jsB8Wz2B35tBAIor5pSd8PcJYtoamPo="
|
||||||
|
};
|
||||||
|
|
||||||
foreach (var studyFolder in studyFolders)
|
using (Session session = new Session())
|
||||||
{
|
{
|
||||||
if (!session.FileExists(Path.Combine(targetPath, studyFolder.Name)))
|
var studyFolders = (new DirectoryInfo(path)).GetDirectories();
|
||||||
|
|
||||||
|
session.Open(sessionOptions);
|
||||||
|
|
||||||
|
if (!session.FileExists(targetPath))
|
||||||
{
|
{
|
||||||
session.CreateDirectory(targetPath);
|
session.CreateDirectory(targetPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var file in studyFolder.GetFiles())
|
foreach (var studyFolder in studyFolders)
|
||||||
{
|
{
|
||||||
if (file.Extension.Contains("dcm", StringComparison.OrdinalIgnoreCase))
|
if (!session.FileExists(Path.Combine(targetPath, studyFolder.Name)))
|
||||||
{
|
{
|
||||||
string remoteFilePath =
|
session.CreateDirectory(targetPath);
|
||||||
RemotePath.TranslateLocalPathToRemote(file.FullName, studyFolder.FullName, targetPath);
|
}
|
||||||
|
|
||||||
var result = session.PutFiles(file.FullName, remoteFilePath, false);
|
foreach (var file in studyFolder.GetFiles())
|
||||||
|
{
|
||||||
if (!result.IsSuccess)
|
if (file.Extension.Contains("dcm", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId,
|
string remoteFilePath =
|
||||||
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
|
RemotePath.TranslateLocalPathToRemote(file.FullName, studyFolder.FullName, targetPath);
|
||||||
|
|
||||||
return ResponseOutput.NotOk("Forward Failed" + result.Failures.ToString() + result.ToJson());
|
var result = session.PutFiles(file.FullName, remoteFilePath, false);
|
||||||
|
|
||||||
|
if (!result.IsSuccess)
|
||||||
|
{
|
||||||
|
await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId,
|
||||||
|
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
|
||||||
|
|
||||||
|
return ResponseOutput.NotOk("Forward Failed" + result.Failures.ToString() + result.ToJson());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId,
|
||||||
catch (Exception e)
|
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
|
||||||
{
|
}
|
||||||
|
|
||||||
|
|
||||||
await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId,
|
await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId,
|
||||||
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
|
u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded });
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId,
|
|
||||||
u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded });
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
|
|
||||||
//现在需要签署的总数(项目待签署 +系统待签署)
|
//现在需要签署的总数(项目待签署 +系统待签署)
|
||||||
public int? WaitSignDocCount => TotalNeedSignTrialDocCount + TotalNeedSignSystemDocCount;
|
public int? TotalNeedSignDocCount => TotalNeedSignTrialDocCount + TotalNeedSignSystemDocCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialSiteSurveyStatQuery : PageInput
|
public class TrialSiteSurveyStatQuery : PageInput
|
||||||
|
|
|
@ -129,6 +129,10 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public string UserRealName => LastName + " / " + FirstName;
|
public string UserRealName => LastName + " / " + FirstName;
|
||||||
|
|
||||||
|
public string IsGenerateAccountStr => IsGenerateAccount ? "是" : "否";
|
||||||
|
|
||||||
|
public string StateStr => State.GetDescription();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -99,29 +99,40 @@ namespace IRaCIS.Core.Application
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<PageOutput<DocSignStat>> GetTrialDocStatList(TrialSiteSurveyStatQuery query)
|
public async Task<PageOutput<DocSignStat>> GetTrialDocStatList(TrialSiteSurveyStatQuery query)
|
||||||
{
|
{
|
||||||
var trialDocStat = await _trialRepository.ProjectTo<DocSignStat>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id, userTypeId = _userInfo.UserTypeId })
|
if (_userInfo.IsAdmin)
|
||||||
.ToPagedListAsync(query.PageIndex, query.PageSize - 1, query.SortField, query.Asc);
|
|
||||||
|
|
||||||
|
|
||||||
var sysDocStat = new DocSignStat()
|
|
||||||
{
|
{
|
||||||
IsSystemDoc = true,
|
return new PageOutput<DocSignStat>(query.PageIndex, query.PageSize, 0, new List<DocSignStat>());
|
||||||
WaitSignCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
|
}
|
||||||
? 0
|
else
|
||||||
: await _systemDocumentRepository
|
{
|
||||||
.Where(t =>
|
var trialDocStat = await _trialRepository
|
||||||
t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) &&
|
.WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)).Count() > 0)
|
||||||
!t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id))
|
.ProjectTo<DocSignStat>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id, userTypeId = _userInfo.UserTypeId })
|
||||||
.CountAsync()
|
.ToPagedListAsync(query.PageIndex, query.PageSize - 1, query.SortField, query.Asc);
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
var list = trialDocStat.CurrentPageData.ToList();
|
var sysDocStat = new DocSignStat()
|
||||||
|
{
|
||||||
|
IsSystemDoc = true,
|
||||||
|
WaitSignCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
|
||||||
|
? 0
|
||||||
|
: await _systemDocumentRepository
|
||||||
|
.Where(t =>
|
||||||
|
t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) &&
|
||||||
|
!t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id))
|
||||||
|
.CountAsync()
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
var list = trialDocStat.CurrentPageData.ToList();
|
||||||
|
|
||||||
|
list.Insert(0, sysDocStat);
|
||||||
|
|
||||||
|
trialDocStat.CurrentPageData = list;
|
||||||
|
return trialDocStat;
|
||||||
|
}
|
||||||
|
|
||||||
list.Insert(0,sysDocStat);
|
|
||||||
|
|
||||||
trialDocStat.CurrentPageData= list;
|
|
||||||
return trialDocStat;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var exportInfo = data;
|
var exportInfo = data;
|
||||||
|
|
||||||
|
//处理翻译
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.TrialSiteUserSummary_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment);
|
return await ExcelExportHelper.DataExportAsync(StaticData.TrialSiteUserSummary_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment);
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,35 @@ namespace IRaCIS.Core.Infrastructure.Extention
|
||||||
}
|
}
|
||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 扩展方法,获得枚举的Description
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">枚举值</param>
|
||||||
|
/// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
|
||||||
|
/// <returns>枚举的Description</returns>
|
||||||
|
public static string GetDescription(this Enum value, Boolean nameInstead = true)
|
||||||
|
{
|
||||||
|
Type type = value.GetType();
|
||||||
|
string name = Enum.GetName(type, value);
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
FieldInfo field = type.GetField(name);
|
||||||
|
DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
|
||||||
|
|
||||||
|
if (attribute == null && nameInstead == true)
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
return attribute?.Description;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue