HIR 稽查 授权,配置测试提交
parent
75bf9b394b
commit
e059dcb2b2
|
@ -1,14 +1,14 @@
|
||||||
{
|
{
|
||||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"Test_IRC_SCP": {
|
"Test_HIR_SCP": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"launchUrl": "swagger",
|
"launchUrl": "swagger",
|
||||||
"applicationUrl": "http://localhost:6200",
|
"applicationUrl": "http://localhost:6200",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Test_IRC_SCP"
|
"ASPNETCORE_ENVIRONMENT": "Test_HIR_SCP"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Uat_IRC_SCP": {
|
"Uat_IRC_SCP": {
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
"launchUrl": "swagger",
|
"launchUrl": "swagger",
|
||||||
"applicationUrl": "http://localhost:6200",
|
"applicationUrl": "http://localhost:6200",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Uat_IRC_SCP"
|
"ASPNETCORE_ENVIRONMENT": "Test_HIR_SCP"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,34 +8,14 @@
|
||||||
},
|
},
|
||||||
"ObjectStoreService": {
|
"ObjectStoreService": {
|
||||||
"ObjectStoreUse": "MinIO",
|
"ObjectStoreUse": "MinIO",
|
||||||
"AliyunOSS": {
|
|
||||||
"regionId": "cn-shanghai",
|
|
||||||
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
|
|
||||||
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
|
|
||||||
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
|
|
||||||
"bucketName": "zy-sir-test-store",
|
|
||||||
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
|
|
||||||
"viewEndpoint": "https://zy-sir-test-store.oss-cn-shanghai.aliyuncs.com",
|
|
||||||
"region": "oss-cn-shanghai"
|
|
||||||
},
|
|
||||||
|
|
||||||
"MinIO": {
|
"MinIO": {
|
||||||
"endPoint": "106.14.89.110",
|
"EndPoint": "106.14.89.110",
|
||||||
"port": "9001",
|
"Port": "9001",
|
||||||
"useSSL": false,
|
"UseSSL": false,
|
||||||
"accessKey": "fbStsVYCIPKHQneeqMwD",
|
"AccessKeyId": "fbStsVYCIPKHQneeqMwD",
|
||||||
"secretKey": "TzgvyA3zGXMUnpilJNUlyMYHfosl1hBMl6lxPmjy",
|
"SecretAccessKey": "TzgvyA3zGXMUnpilJNUlyMYHfosl1hBMl6lxPmjy",
|
||||||
"bucketName": "hir-test",
|
"BucketName": "hir-test",
|
||||||
"viewEndpoint": "http://106.14.89.110:9001/hir-test/"
|
"ViewEndpoint": "http://106.14.89.110:9001/hir-test/"
|
||||||
},
|
|
||||||
|
|
||||||
"AWS": {
|
|
||||||
"endPoint": "s3.us-east-1.amazonaws.com",
|
|
||||||
"useSSL": false,
|
|
||||||
"accessKey": "AKIAZQ3DRSOHFPJJ6FEU",
|
|
||||||
"secretKey": "l+yjtvV7Z4jiwm/7xCYv30UeUj/SvuqqYzAwjJHf",
|
|
||||||
"bucketName": "ei-irc-test-store",
|
|
||||||
"viewEndpoint": "https://ei-irc-test-store.s3.amazonaws.com/"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -8,37 +8,20 @@
|
||||||
},
|
},
|
||||||
"ObjectStoreService": {
|
"ObjectStoreService": {
|
||||||
"ObjectStoreUse": "MinIO",
|
"ObjectStoreUse": "MinIO",
|
||||||
"AliyunOSS": {
|
|
||||||
"regionId": "cn-shanghai",
|
|
||||||
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
|
|
||||||
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
|
|
||||||
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
|
|
||||||
"bucketName": "zy-sir-test-store",
|
|
||||||
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
|
|
||||||
"viewEndpoint": "https://zy-sir-test-store.oss-cn-shanghai.aliyuncs.com",
|
|
||||||
"region": "oss-cn-shanghai"
|
|
||||||
},
|
|
||||||
"MinIO": {
|
"MinIO": {
|
||||||
"endPoint": "hir-oss.test.extimaging.com",
|
"EndPoint": "hir-oss.test.extimaging.com",
|
||||||
"port": "443",
|
"Port": "443",
|
||||||
"useSSL": true,
|
"UseSSL": true,
|
||||||
//"endPoint": "106.14.89.110",
|
//"endPoint": "106.14.89.110",
|
||||||
//"port": "9001",
|
//"port": "9001",
|
||||||
//"useSSL": false,
|
//"useSSL": false,
|
||||||
"accessKey": "fbStsVYCIPKHQneeqMwD",
|
"AccessKeyId": "fbStsVYCIPKHQneeqMwD",
|
||||||
"secretKey": "TzgvyA3zGXMUnpilJNUlyMYHfosl1hBMl6lxPmjy",
|
"SecretAccessKey": "TzgvyA3zGXMUnpilJNUlyMYHfosl1hBMl6lxPmjy",
|
||||||
"bucketName": "hir-test",
|
"BucketName": "hir-test",
|
||||||
//"viewEndpoint": "https://hir.test.extimaging.com/oss/hir-test"
|
//"viewEndpoint": "https://hir.test.extimaging.com/oss/hir-test"
|
||||||
"viewEndpoint": "https://hir-oss.test.extimaging.com/hir-test"
|
"ViewEndpoint": "https://hir-oss.test.extimaging.com/hir-test"
|
||||||
},
|
|
||||||
"AWS": {
|
|
||||||
"endPoint": "s3.us-east-1.amazonaws.com",
|
|
||||||
"useSSL": false,
|
|
||||||
"accessKey": "AKIAZQ3DRSOHFPJJ6FEU",
|
|
||||||
"secretKey": "l+yjtvV7Z4jiwm/7xCYv30UeUj/SvuqqYzAwjJHf",
|
|
||||||
"bucketName": "ei-irc-test-store",
|
|
||||||
"viewEndpoint": "https://ei-irc-test-store.s3.amazonaws.com/"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_HIR_New;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_HIR_New;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
||||||
|
|
|
@ -12,6 +12,7 @@ using MassTransit;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Minio;
|
using Minio;
|
||||||
using Minio.DataModel.Args;
|
using Minio.DataModel.Args;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
@ -20,9 +21,19 @@ namespace IRaCIS.Core.Application.Helper;
|
||||||
#region 绑定和返回模型
|
#region 绑定和返回模型
|
||||||
|
|
||||||
[LowerCamelCaseJson]
|
[LowerCamelCaseJson]
|
||||||
public class MinIOOptions : AWSOptions
|
public class MinIOOptions
|
||||||
{
|
{
|
||||||
public int Port { get; set; }
|
public int Port { get; set; }
|
||||||
|
public string EndPoint { get; set; }
|
||||||
|
public bool UseSSL { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("accessKey")]
|
||||||
|
public string AccessKeyId { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("secretKey")]
|
||||||
|
public string SecretAccessKey { get; set; }
|
||||||
|
public string BucketName { get; set; }
|
||||||
|
public string ViewEndpoint { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,8 +42,12 @@ public class AWSOptions
|
||||||
{
|
{
|
||||||
public string EndPoint { get; set; }
|
public string EndPoint { get; set; }
|
||||||
public bool UseSSL { get; set; }
|
public bool UseSSL { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("AccessKey")]
|
||||||
public string AccessKeyId { get; set; }
|
public string AccessKeyId { get; set; }
|
||||||
public string RoleArn { get; set; }
|
public string RoleArn { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("SecretKey")]
|
||||||
public string SecretAccessKey { get; set; }
|
public string SecretAccessKey { get; set; }
|
||||||
public string BucketName { get; set; }
|
public string BucketName { get; set; }
|
||||||
public string ViewEndpoint { get; set; }
|
public string ViewEndpoint { get; set; }
|
||||||
|
|
|
@ -2198,15 +2198,6 @@
|
||||||
<param name="email"></param>
|
<param name="email"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.UserService.VerifyAnonymousVerifyCode(System.String,System.String)">
|
|
||||||
<summary>
|
|
||||||
验证验证码,没问题就返回用户所有的账户
|
|
||||||
</summary>
|
|
||||||
<param name="email"></param>
|
|
||||||
<param name="verifyCode"></param>
|
|
||||||
<returns></returns>
|
|
||||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.UserService.AnonymousSetPassword(System.Guid,System.String)">
|
<member name="M:IRaCIS.Core.Application.Service.UserService.AnonymousSetPassword(System.Guid,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
(未登陆) 设置新密码
|
(未登陆) 设置新密码
|
||||||
|
@ -2215,12 +2206,6 @@
|
||||||
<param name="newPwd"></param>
|
<param name="newPwd"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.UserService.ModifyPassword(IRaCIS.Application.Contracts.EditPasswordCommand)">
|
|
||||||
<summary>
|
|
||||||
修改密码,当前支持旧密码修改密码
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.UserService.GetUserList(IRaCIS.Application.Contracts.UserListQueryDTO)">
|
<member name="M:IRaCIS.Core.Application.Service.UserService.GetUserList(IRaCIS.Application.Contracts.UserListQueryDTO)">
|
||||||
<summary>
|
<summary>
|
||||||
获取用户列表
|
获取用户列表
|
||||||
|
@ -2289,6 +2274,21 @@
|
||||||
<param name="password"></param>
|
<param name="password"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.UserService.VerifyAnonymousVerifyCode(System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
验证验证码,没问题就返回用户所有的账户
|
||||||
|
</summary>
|
||||||
|
<param name="email"></param>
|
||||||
|
<param name="verifyCode"></param>
|
||||||
|
<returns></returns>
|
||||||
|
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.UserService.ModifyPassword(IRaCIS.Application.Contracts.EditPasswordCommand)">
|
||||||
|
<summary>
|
||||||
|
修改密码,当前支持旧密码修改密码
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.CodeTemplateService.GetDataBaseTableList(System.String,System.String)">
|
<member name="M:IRaCIS.Core.Application.Service.CodeTemplateService.GetDataBaseTableList(System.String,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取数据库的表信息 以及字段信息
|
获取数据库的表信息 以及字段信息
|
||||||
|
@ -12711,12 +12711,6 @@
|
||||||
<param name="trialId"></param>
|
<param name="trialId"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialDicomAEService.TestSCPServerConnect(IRaCIS.Core.Application.ViewModel.TestAECommand)">
|
|
||||||
<summary>
|
|
||||||
测试scp server 是否可以连接
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="T:IRaCIS.Core.Application.Service.TrialExternalUserService">
|
<member name="T:IRaCIS.Core.Application.Service.TrialExternalUserService">
|
||||||
<summary>
|
<summary>
|
||||||
项目外部人员 录入流程相关
|
项目外部人员 录入流程相关
|
||||||
|
|
|
@ -124,6 +124,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public class UserInfo
|
public class UserInfo
|
||||||
{
|
{
|
||||||
|
public string CheckCode { get; set; } = string.Empty;
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public string UserName { get; set; } = string.Empty;
|
public string UserName { get; set; } = string.Empty;
|
||||||
public string Password { get; set; } = string.Empty;
|
public string Password { get; set; } = string.Empty;
|
||||||
|
@ -194,6 +195,8 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public string NewPassWord { get; set; } = string.Empty;
|
public string NewPassWord { get; set; } = string.Empty;
|
||||||
public string OldPassWord { get; set; } = string.Empty;
|
public string OldPassWord { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string CheckCode { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -237,8 +237,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IResponseOutput> InitSetUserNameAndPwd(Guid userId, string newUserName, string newPWd)
|
public async Task<IResponseOutput> InitSetUserNameAndPwd(Guid userId, string newUserName, string newPWd)
|
||||||
{
|
{
|
||||||
|
@ -341,64 +339,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 验证验证码,没问题就返回用户所有的账户
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="email"></param>
|
|
||||||
/// <param name="verifyCode"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
|
||||||
[AllowAnonymous]
|
|
||||||
[HttpGet("{email}/{verifyCode}")]
|
|
||||||
public async Task<List<UserAccountDto>> VerifyAnonymousVerifyCode(string email, string verifyCode)
|
|
||||||
{
|
|
||||||
if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet)
|
|
||||||
{
|
|
||||||
var verificationRecord = await _verificationCodeRepository
|
|
||||||
.Where(t => t.UserId == Guid.Empty && t.Code == verifyCode && t.CodeType == VerifyType.Email && t.EmailOrPhone == email).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
//检查数据库是否存在该验证码
|
|
||||||
if (verificationRecord == null)
|
|
||||||
{
|
|
||||||
|
|
||||||
//---验证码错误。
|
|
||||||
throw new BusinessValidationFailedException(_localizer["User_VerificationCodeError"]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//检查验证码是否失效
|
|
||||||
if (verificationRecord.ExpirationTime < DateTime.Now)
|
|
||||||
{
|
|
||||||
|
|
||||||
//---验证码已经过期。
|
|
||||||
throw new BusinessValidationFailedException(_localizer["User_VerificationCodeExpired"]);
|
|
||||||
}
|
|
||||||
else //验证码正确 并且 没有超时
|
|
||||||
{
|
|
||||||
|
|
||||||
//删除验证码历史记录
|
|
||||||
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var isPass = _userRepository.Where(t => t.EMail == email).Any(t => t.CheckCode == verifyCode);
|
|
||||||
|
|
||||||
if (!isPass)
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(_localizer["User_VerificationCodeError"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var list = await _userRepository.Where(t => t.EMail == email).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.FullName, UserType = t.UserTypeRole.UserTypeShortName }).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -427,43 +367,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 修改密码,当前支持旧密码修改密码
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpPost]
|
|
||||||
[UnitOfWork]
|
|
||||||
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
|
|
||||||
{
|
|
||||||
|
|
||||||
await VerifyUserPwdAsync(_userInfo.Id, editPwModel.NewPassWord, editPwModel.OldPassWord);
|
|
||||||
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(editPwModel.NewUserName))
|
|
||||||
{
|
|
||||||
|
|
||||||
await VerifyUserNameAsync(_userInfo.Id, editPwModel.NewUserName);
|
|
||||||
|
|
||||||
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.Id, u => new User()
|
|
||||||
{
|
|
||||||
UserName = editPwModel.NewUserName,
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
var success = await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.Id, u => new User()
|
|
||||||
{
|
|
||||||
Password = editPwModel.NewPassWord,
|
|
||||||
IsFirstAdd = false
|
|
||||||
});
|
|
||||||
|
|
||||||
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = _userInfo.Id, OptType = UserOptType.LoginModifyPassword }, true);
|
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -862,5 +766,122 @@ namespace IRaCIS.Core.Application.Service
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region HIR 修改
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 验证验证码,没问题就返回用户所有的账户
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="email"></param>
|
||||||
|
/// <param name="verifyCode"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
|
[AllowAnonymous]
|
||||||
|
[HttpGet("{email}/{verifyCode}")]
|
||||||
|
public async Task<List<UserAccountDto>> VerifyAnonymousVerifyCode(string email, string verifyCode)
|
||||||
|
{
|
||||||
|
if (_systemHospitalConfig.CurrentValue.IsCanConnectInternet)
|
||||||
|
{
|
||||||
|
var verificationRecord = await _verificationCodeRepository
|
||||||
|
.Where(t => t.UserId == Guid.Empty && t.Code == verifyCode && t.CodeType == VerifyType.Email && t.EmailOrPhone == email).OrderByDescending(t => t.CreateTime).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
//检查数据库是否存在该验证码
|
||||||
|
if (verificationRecord == null)
|
||||||
|
{
|
||||||
|
|
||||||
|
//---验证码错误。
|
||||||
|
throw new BusinessValidationFailedException(_localizer["User_VerificationCodeError"]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//检查验证码是否失效
|
||||||
|
if (verificationRecord.ExpirationTime < DateTime.Now)
|
||||||
|
{
|
||||||
|
|
||||||
|
//---验证码已经过期。
|
||||||
|
throw new BusinessValidationFailedException(_localizer["User_VerificationCodeExpired"]);
|
||||||
|
}
|
||||||
|
else //验证码正确 并且 没有超时
|
||||||
|
{
|
||||||
|
|
||||||
|
//删除验证码历史记录
|
||||||
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var isPass = _userRepository.Where(t => t.EMail == email).Any(t => t.CheckCode == verifyCode);
|
||||||
|
|
||||||
|
if (!isPass)
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException(_localizer["User_VerificationCodeError"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var list = await _userRepository.Where(t => t.EMail == email).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.FullName, UserType = t.UserTypeRole.UserTypeShortName }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[HttpPut("{newCheckCode}")]
|
||||||
|
public async Task<IResponseOutput> SetNewCheckCode(string newCheckCode)
|
||||||
|
{
|
||||||
|
var user = await _userRepository.FirstOrDefaultNoTrackingAsync(t => t.Id == _userInfo.Id);
|
||||||
|
|
||||||
|
await _userRepository.UpdatePartialFromQueryAsync(t => t.EMail == user.EMail, u => new User()
|
||||||
|
{
|
||||||
|
CheckCode = newCheckCode
|
||||||
|
});
|
||||||
|
|
||||||
|
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = _userInfo.Id, OptType = UserOptType.ModifyCheckCode }, true);
|
||||||
|
return ResponseOutput.Ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 修改密码,当前支持旧密码修改密码
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
[UnitOfWork]
|
||||||
|
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
|
||||||
|
{
|
||||||
|
|
||||||
|
await VerifyUserPwdAsync(_userInfo.Id, editPwModel.NewPassWord, editPwModel.OldPassWord);
|
||||||
|
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(editPwModel.NewUserName))
|
||||||
|
{
|
||||||
|
|
||||||
|
await VerifyUserNameAsync(_userInfo.Id, editPwModel.NewUserName);
|
||||||
|
|
||||||
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.Id, u => new User()
|
||||||
|
{
|
||||||
|
UserName = editPwModel.NewUserName,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var success = await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.Id, u => new User()
|
||||||
|
{
|
||||||
|
Password = editPwModel.NewPassWord,
|
||||||
|
CheckCode = editPwModel.CheckCode,
|
||||||
|
IsFirstAdd = false
|
||||||
|
});
|
||||||
|
|
||||||
|
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = _userInfo.Id, OptType = UserOptType.LoginModifyPassword }, true);
|
||||||
|
|
||||||
|
return ResponseOutput.Result(success);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region HIR 修改
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 通过传递场景枚举 返回对应的下拉框数据 1:是外部 2:是内部 3:是Site调研 4: 邮件接收人,5:邮件抄送人
|
/// 通过传递场景枚举 返回对应的下拉框数据 1:是外部 2:是内部 3:是Site调研 4: 邮件接收人,5:邮件抄送人
|
||||||
|
@ -105,49 +105,53 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (userTypeSelectEnum == UserTypeSelectEnum.ExternalUser)
|
if (userTypeSelectEnum == UserTypeSelectEnum.ExternalUser)
|
||||||
{
|
{
|
||||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.CPM, UserTypeEnum.SPM, UserTypeEnum.CPM, UserTypeEnum.SMM, UserTypeEnum.CMM, UserTypeEnum.EA, UserTypeEnum.MC };
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.TA)
|
||||||
|
{
|
||||||
|
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ProjectManager };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.PI, UserTypeEnum.MIM, UserTypeEnum.IQC };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (userTypeSelectEnum == UserTypeSelectEnum.InnerUser)
|
|
||||||
{
|
|
||||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ClinicalResearchCoordinator, UserTypeEnum.ProjectManager, UserTypeEnum.CRA, UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA, UserTypeEnum.MW, UserTypeEnum.MC };
|
|
||||||
|
|
||||||
//if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
|
|
||||||
//{
|
|
||||||
// userTypeEnums.Add(UserTypeEnum.ProjectManager);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userTypeSelectEnum == UserTypeSelectEnum.SiteSurvey)
|
if (userTypeSelectEnum == UserTypeSelectEnum.SiteSurvey)
|
||||||
{
|
{
|
||||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.CRA, UserTypeEnum.ClinicalResearchCoordinator };
|
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.SR, UserTypeEnum.ClinicalResearchCoordinator, UserTypeEnum.CRA };
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (userTypeSelectEnum == UserTypeSelectEnum.EnrollOrPD_EMailCopy)
|
if (userTypeSelectEnum == UserTypeSelectEnum.EnrollOrPD_EMailCopy)
|
||||||
{
|
{
|
||||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ProjectManager, UserTypeEnum.APM, UserTypeEnum.CPM, UserTypeEnum.SPM, UserTypeEnum.SMM, UserTypeEnum.CMM };
|
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ProjectManager, UserTypeEnum.APM, UserTypeEnum.CPM, UserTypeEnum.SPM };
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userTypeSelectEnum == UserTypeSelectEnum.EnrollOrPD_EmailReceive)
|
if (userTypeSelectEnum == UserTypeSelectEnum.EnrollOrPD_EmailReceive)
|
||||||
{
|
{
|
||||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.CRA, UserTypeEnum.ClinicalResearchCoordinator };
|
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.CRA, UserTypeEnum.ClinicalResearchCoordinator };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userTypeSelectEnum == UserTypeSelectEnum.TrialDoc)
|
||||||
|
{
|
||||||
|
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.PI, UserTypeEnum.SR, UserTypeEnum.ProjectManager, UserTypeEnum.TA, UserTypeEnum.IQC, UserTypeEnum.IM, UserTypeEnum.MIM };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var query = _userTypeRepository/*.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)*/
|
||||||
var query = _userTypeRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
.WhereIf(userTypeSelectEnum != UserTypeSelectEnum.None && userTypeEnums.Count > 0, t => userTypeEnums.Contains(t.UserTypeEnum))
|
||||||
.WhereIf(userTypeSelectEnum != UserTypeSelectEnum.None, t => userTypeEnums.Contains(t.UserTypeEnum))
|
.OrderBy(t => t.Order).ProjectTo<TrialUserType>(_mapper.ConfigurationProvider);
|
||||||
.OrderBy(t => t.UserTypeShortName).ProjectTo<TrialUserType>(_mapper.ConfigurationProvider);
|
|
||||||
|
|
||||||
return await query.ToListAsync();
|
return await query.ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
// 生成时间 2024-03-22 15:44:37
|
// 生成时间 2024-03-22 15:44:37
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System;
|
||||||
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
using System.Collections.Generic;
|
||||||
namespace IRaCIS.Core.Application.ViewModel
|
namespace IRaCIS.Core.Application.ViewModel
|
||||||
{
|
{
|
||||||
/// <summary> DicomAEView 列表视图模型 </summary>
|
/// <summary> DicomAEView 列表视图模型 </summary>
|
||||||
|
@ -16,18 +18,13 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public DateTime? LatestTestTime { get; set; }
|
public DateTime? LatestTestTime { get; set; }
|
||||||
|
|
||||||
|
public bool IsTestOK { get; set; }
|
||||||
//public bool IsPACSConnect { get; set; }
|
|
||||||
|
|
||||||
//public bool IsTrialPACSConfirmed { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///<summary>DicomAEQuery 列表查询参数模型</summary>
|
///<summary>DicomAEQuery 列表查询参数模型</summary>
|
||||||
public class DicomAEQuery : PageInput
|
public class DicomAEQuery : PageInput
|
||||||
{
|
{
|
||||||
public Guid? TrialId { get; set; }
|
|
||||||
|
|
||||||
public string? CalledAE { get; set; }
|
public string? CalledAE { get; set; }
|
||||||
|
|
||||||
public string? IP { get; set; }
|
public string? IP { get; set; }
|
||||||
|
@ -46,26 +43,11 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
{
|
{
|
||||||
public Guid? Id { get; set; }
|
public Guid? Id { get; set; }
|
||||||
|
|
||||||
[NotDefault]
|
public string CalledAE { get; set; }
|
||||||
public Guid TrialId { get; set; }
|
public string IP { get; set; }
|
||||||
|
public int Port { get; set; }
|
||||||
public string CalledAE { get; set; } = string.Empty;
|
|
||||||
public string IP { get; set; } = string.Empty;
|
|
||||||
public int? Port { get; set; }
|
|
||||||
public string Modality { get; set; } = string.Empty;
|
public string Modality { get; set; } = string.Empty;
|
||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
|
||||||
public bool IsPACSConnect { get; set; }
|
|
||||||
|
|
||||||
public bool? IsTestOK { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TestAECommand
|
|
||||||
{
|
|
||||||
public string CalledAE { get; set; } = string.Empty;
|
|
||||||
public string IP { get; set; } = string.Empty;
|
|
||||||
public int Port { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace IRaCIS.Core.Application.Interfaces
|
||||||
|
|
||||||
Task<IResponseOutput<PageOutput<DicomAEView>>> GetDicomAEList(DicomAEQuery inQuery);
|
Task<IResponseOutput<PageOutput<DicomAEView>>> GetDicomAEList(DicomAEQuery inQuery);
|
||||||
|
|
||||||
Task<IResponseOutput> AddOrUpdateDicomAE(DicomAEAddOrEdit addOrEditDicomAE);
|
//Task<IResponseOutput> AddOrUpdateDicomAE(DicomAEAddOrEdit addOrEditDicomAE);
|
||||||
|
|
||||||
Task<IResponseOutput> DeleteDicomAE(Guid dicomAEId);
|
Task<IResponseOutput> DeleteDicomAE(Guid dicomAEId);
|
||||||
|
|
||||||
|
|
|
@ -56,57 +56,57 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<IResponseOutput> AddOrUpdateDicomAE(DicomAEAddOrEdit addOrEditDicomAE)
|
//public async Task<IResponseOutput> AddOrUpdateDicomAE(DicomAEAddOrEdit addOrEditDicomAE)
|
||||||
{
|
//{
|
||||||
var verifyExp1 = new EntityVerifyExp<TrialDicomAE>()
|
// var verifyExp1 = new EntityVerifyExp<TrialDicomAE>()
|
||||||
{
|
// {
|
||||||
VerifyExp = u => u.IP == addOrEditDicomAE.IP && u.Port == addOrEditDicomAE.Port && u.TrialId == addOrEditDicomAE.TrialId,
|
// VerifyExp = u => u.IP == addOrEditDicomAE.IP && u.Port == addOrEditDicomAE.Port && u.TrialId == addOrEditDicomAE.TrialId,
|
||||||
|
|
||||||
//"不允许添加相同的IP和端口的记录"
|
// //"不允许添加相同的IP和端口的记录"
|
||||||
VerifyMsg = _localizer["TrialDicomAE_RepeatIPAndPort"]
|
// VerifyMsg = _localizer["TrialDicomAE_RepeatIPAndPort"]
|
||||||
};
|
// };
|
||||||
|
|
||||||
var verifyExp2 = new EntityVerifyExp<TrialDicomAE>()
|
|
||||||
{
|
|
||||||
VerifyExp = u => u.CalledAE == addOrEditDicomAE.CalledAE,
|
|
||||||
|
|
||||||
//"AE名称不能与其他项目相同"
|
|
||||||
VerifyMsg = _localizer["TrialDicomAE_RepeatCalledAE"]
|
|
||||||
};
|
|
||||||
|
|
||||||
var verifyExp3 = new EntityVerifyExp<TrialDicomAE>()
|
|
||||||
{
|
|
||||||
VerifyExp = u => u.TrialId == addOrEditDicomAE.TrialId,
|
|
||||||
|
|
||||||
//"AE名称不能与其他项目相同"
|
|
||||||
VerifyMsg = "该项目只允许添加一条dicom AE记录(前端对接有bug时出现)"
|
|
||||||
};
|
|
||||||
|
|
||||||
// var verifyExp2 = new EntityVerifyExp<TrialDicomAE>()
|
// var verifyExp2 = new EntityVerifyExp<TrialDicomAE>()
|
||||||
// {
|
// {
|
||||||
// VerifyExp = u => u.TrialId == addOrEditDicomAE.TrialId,
|
// VerifyExp = u => u.CalledAE == addOrEditDicomAE.CalledAE,
|
||||||
|
|
||||||
// VerifyMsg = "只允许配置一条记录",
|
// //"AE名称不能与其他项目相同"
|
||||||
// IsVerify=addOrEditDicomAE.Id==null
|
// VerifyMsg = _localizer["TrialDicomAE_RepeatCalledAE"]
|
||||||
// };
|
// };
|
||||||
|
|
||||||
await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == addOrEditDicomAE.TrialId, u => new Trial() { IsPACSConnect = addOrEditDicomAE.IsPACSConnect }, true);
|
// var verifyExp3 = new EntityVerifyExp<TrialDicomAE>()
|
||||||
|
// {
|
||||||
|
// VerifyExp = u => u.TrialId == addOrEditDicomAE.TrialId,
|
||||||
|
|
||||||
|
// //"AE名称不能与其他项目相同"
|
||||||
|
// VerifyMsg = "该项目只允许添加一条dicom AE记录(前端对接有bug时出现)"
|
||||||
|
// };
|
||||||
|
|
||||||
|
// //var verifyExp2 = new EntityVerifyExp<TrialDicomAE>()
|
||||||
|
// //{
|
||||||
|
// // VerifyExp = u => u.TrialId == addOrEditDicomAE.TrialId,
|
||||||
|
|
||||||
|
// // VerifyMsg = "只允许配置一条记录",
|
||||||
|
// // IsVerify=addOrEditDicomAE.Id==null
|
||||||
|
// //};
|
||||||
|
|
||||||
|
// await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == addOrEditDicomAE.TrialId, u => new Trial() { IsPACSConnect = addOrEditDicomAE.IsPACSConnect }, true);
|
||||||
|
|
||||||
|
|
||||||
if (addOrEditDicomAE.IsPACSConnect)
|
// if (addOrEditDicomAE.IsPACSConnect)
|
||||||
{
|
// {
|
||||||
// 在此处拷贝automapper 映射
|
// // 在此处拷贝automapper 映射
|
||||||
var entity = await _dicomAERepository.InsertOrUpdateAsync(addOrEditDicomAE, true, verifyExp3, verifyExp1, verifyExp2);
|
// var entity = await _dicomAERepository.InsertOrUpdateAsync(addOrEditDicomAE, true, verifyExp3, verifyExp1, verifyExp2);
|
||||||
|
|
||||||
return ResponseOutput.Ok(entity.Id.ToString());
|
// return ResponseOutput.Ok(entity.Id.ToString());
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
return ResponseOutput.Ok();
|
// return ResponseOutput.Ok();
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
[HttpDelete("{dicomAEId:guid}")]
|
[HttpDelete("{dicomAEId:guid}")]
|
||||||
|
@ -117,41 +117,41 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// 测试scp server 是否可以连接
|
///// 测试scp server 是否可以连接
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
[HttpPost]
|
//[HttpPost]
|
||||||
public async Task<bool> TestSCPServerConnect(TestAECommand inCommand)
|
//public async Task<bool> TestSCPServerConnect(TestAECommand inCommand)
|
||||||
{
|
//{
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
var client = DicomClientFactory.Create(inCommand.IP, inCommand.Port, false, "test-callingAE", inCommand.CalledAE);
|
// var client = DicomClientFactory.Create(inCommand.IP, inCommand.Port, false, "test-callingAE", inCommand.CalledAE);
|
||||||
|
|
||||||
client.NegotiateAsyncOps();
|
// client.NegotiateAsyncOps();
|
||||||
|
|
||||||
await client.AddRequestAsync(new DicomCEchoRequest());
|
// await client.AddRequestAsync(new DicomCEchoRequest());
|
||||||
|
|
||||||
// 创建一个超时任务,设置超时时间为1秒
|
// // 创建一个超时任务,设置超时时间为1秒
|
||||||
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(3));
|
// var timeoutTask = Task.Delay(TimeSpan.FromSeconds(3));
|
||||||
|
|
||||||
// 发送 DICOM 请求
|
// // 发送 DICOM 请求
|
||||||
var sendTask = client.SendAsync();
|
// var sendTask = client.SendAsync();
|
||||||
|
|
||||||
// 等待任务完成,若超时任务先完成则抛出超时异常
|
// // 等待任务完成,若超时任务先完成则抛出超时异常
|
||||||
if (await Task.WhenAny(sendTask, timeoutTask) == timeoutTask)
|
// if (await Task.WhenAny(sendTask, timeoutTask) == timeoutTask)
|
||||||
{
|
// {
|
||||||
throw new TimeoutException("DICOM 请求超时。");
|
// throw new TimeoutException("DICOM 请求超时。");
|
||||||
}
|
// }
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
catch (Exception ex)
|
// catch (Exception ex)
|
||||||
{
|
// {
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,14 +84,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
||||||
var query = _userRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
var query = _userRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||||
|
|
||||||
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
////正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
||||||
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
//.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
||||||
|
|
||||||
//测试项目 可以加入 测试用户 或者内部正式用户
|
////测试项目 可以加入 测试用户 或者内部正式用户
|
||||||
.WhereIf(trialType == TrialType.NoneOfficial, t => t.IsTestUser == true || (t.IsTestUser == false && t.IsZhiZhun))
|
//.WhereIf(trialType == TrialType.NoneOfficial, t => t.IsTestUser == true || (t.IsTestUser == false && t.IsZhiZhun))
|
||||||
|
|
||||||
|
|
||||||
.Where(t => userTypeEnums.Contains(t.UserTypeEnum))
|
//.Where(t => userTypeEnums.Contains(t.UserTypeEnum))
|
||||||
|
|
||||||
|
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => (t.FullName).Contains(inQuery.UserRealName))
|
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => (t.FullName).Contains(inQuery.UserRealName))
|
||||||
|
|
|
@ -92,11 +92,22 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var client = DicomClientFactory.Create(find.IP, find.Port, false, "test-callingAE", find.CalledAE);
|
var client = DicomClientFactory.Create(find.IP, find.Port, false, "test-callingAE", find.CalledAE);
|
||||||
|
|
||||||
|
|
||||||
client.NegotiateAsyncOps();
|
client.NegotiateAsyncOps();
|
||||||
|
|
||||||
await client.AddRequestAsync(new DicomCEchoRequest());
|
await client.AddRequestAsync(new DicomCEchoRequest());
|
||||||
|
|
||||||
await client.SendAsync();
|
// 创建一个超时任务,设置超时时间为1秒
|
||||||
|
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(3));
|
||||||
|
|
||||||
|
// 发送 DICOM 请求
|
||||||
|
var sendTask = client.SendAsync();
|
||||||
|
|
||||||
|
// 等待任务完成,若超时任务先完成则抛出超时异常
|
||||||
|
if (await Task.WhenAny(sendTask, timeoutTask) == timeoutTask)
|
||||||
|
{
|
||||||
|
throw new TimeoutException("DICOM 请求超时。");
|
||||||
|
}
|
||||||
|
|
||||||
find.IsTestOK = true;
|
find.IsTestOK = true;
|
||||||
await _dicomAERepository.SaveChangesAsync();
|
await _dicomAERepository.SaveChangesAsync();
|
||||||
|
|
|
@ -271,7 +271,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var caheInfo = new TrialCacheInfo() { TrialId = trial.Id, TrialStatusStr = trial.TrialStatusStr, CriterionTypes = trial.CriterionTypes, AuthorizationEncrypt = trial.AuthorizationEncrypt, AuthorizationDate = trial.AuthorizationDate, CreateUserId = trial.CreateUserId, TrialCode = trial.TrialCode };
|
var caheInfo = new TrialCacheInfo() { TrialId = trial.Id, TrialStatusStr = trial.TrialStatusStr, CriterionTypes = trial.CriterionTypes, AuthorizationEncrypt = trial.AuthorizationEncrypt, AuthorizationDate = trial.AuthorizationDate, CreateUserId = trial.CreateUserId, TrialCode = trial.TrialCode };
|
||||||
|
|
||||||
await _provider.SetAsync(trial.Id.ToString(), JsonConvert.SerializeObject(caheInfo), TimeSpan.FromDays(7));
|
await _provider.SetAsync(trial.Id.ToString(),caheInfo, TimeSpan.FromDays(7));
|
||||||
|
|
||||||
return ResponseOutput.Ok(trial);
|
return ResponseOutput.Ok(trial);
|
||||||
}
|
}
|
||||||
|
@ -319,7 +319,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var caheInfo = new TrialCacheInfo() { TrialId = trial.Id, TrialStatusStr = trial.TrialStatusStr, CriterionTypes = trial.CriterionTypes, AuthorizationEncrypt = trial.AuthorizationEncrypt, AuthorizationDate = trial.AuthorizationDate, CreateUserId = trial.CreateUserId, TrialCode = trial.TrialCode };
|
var caheInfo = new TrialCacheInfo() { TrialId = trial.Id, TrialStatusStr = trial.TrialStatusStr, CriterionTypes = trial.CriterionTypes, AuthorizationEncrypt = trial.AuthorizationEncrypt, AuthorizationDate = trial.AuthorizationDate, CreateUserId = trial.CreateUserId, TrialCode = trial.TrialCode };
|
||||||
|
|
||||||
await _provider.SetAsync(trial.Id.ToString(), JsonConvert.SerializeObject(caheInfo), TimeSpan.FromDays(7));
|
await _provider.SetAsync(trial.Id.ToString(), caheInfo, TimeSpan.FromDays(7));
|
||||||
|
|
||||||
var success = await _trialRepository.SaveChangesAsync();
|
var success = await _trialRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -736,7 +736,7 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var study = await _studyRepository.FindAsync(scpStudyId);
|
var study = await _studyRepository.FirstOrDefaultAsync(t=>t.Id== scpStudyId);
|
||||||
|
|
||||||
return ResponseOutput.Ok(seriesList, study);
|
return ResponseOutput.Ok(seriesList, study);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,9 @@ public enum UserOptType
|
||||||
|
|
||||||
MFALoginFail = 13,
|
MFALoginFail = 13,
|
||||||
|
|
||||||
AddUser = 14
|
AddUser = 14,
|
||||||
|
|
||||||
|
ModifyCheckCode = 15,
|
||||||
}
|
}
|
||||||
|
|
||||||
[Description("影像下载打包状态")]
|
[Description("影像下载打包状态")]
|
||||||
|
|
|
@ -99,6 +99,9 @@
|
||||||
|
|
||||||
EnrollOrPD_EmailReceive=4,
|
EnrollOrPD_EmailReceive=4,
|
||||||
EnrollOrPD_EMailCopy=5,
|
EnrollOrPD_EMailCopy=5,
|
||||||
|
|
||||||
|
//HIR
|
||||||
|
TrialDoc = 6,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum UserMFAType
|
public enum UserMFAType
|
||||||
|
|
|
@ -258,7 +258,7 @@ public partial class Trial : BaseFullDeleteAuditEntity
|
||||||
#endregion
|
#endregion
|
||||||
public bool IsPACSConnect { get; set; }
|
public bool IsPACSConnect { get; set; }
|
||||||
|
|
||||||
public bool IsTrialPACSConfirmed { get; set; }
|
public bool IsTrialPACSConfirmed { get; set; } = true;
|
||||||
|
|
||||||
[Comment("项目术语配置Json字符串")]
|
[Comment("项目术语配置Json字符串")]
|
||||||
[StringLength(2000)]
|
[StringLength(2000)]
|
||||||
|
@ -294,6 +294,7 @@ public partial class Trial : BaseFullDeleteAuditEntity
|
||||||
|
|
||||||
public int AuthorizationDuration { get; set; }
|
public int AuthorizationDuration { get; set; }
|
||||||
|
|
||||||
|
[MaxLength]
|
||||||
public string AuthorizationEncrypt { get; set; } = string.Empty;
|
public string AuthorizationEncrypt { get; set; } = string.Empty;
|
||||||
|
|
||||||
public DateTime? AuthorizationDate { get; set; }
|
public DateTime? AuthorizationDate { get; set; }
|
||||||
|
|
|
@ -3681,7 +3681,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
if (inspection.VisitTaskId != null)
|
if (inspection.VisitTaskId != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (generalData.TrialId == null || generalData.TrialSiteId == null || generalData.SubjectId == null || generalData.TrialReadingCriterionId == null)
|
if (generalData.TrialId == null || /*generalData.TrialSiteId == null ||*/ generalData.SubjectId == null || generalData.TrialReadingCriterionId == null)
|
||||||
{
|
{
|
||||||
var info = await _dbContext.VisitTask.Where(x => x.Id == inspection.VisitTaskId).Select(x => new { SubjectCode = x.Subject.Code, TrialSiteCode = x.Subject.TrialSite.TrialSiteCode, SubjectId = x.SubjectId, x.Subject.TrialSiteId, x.TrialId, x.SourceSubjectVisitId, ReadModuleSubjectVisitId = (Guid?)x.ReadModule.SubjectVisitId, x.TrialReadingCriterionId }).FirstOrDefaultAsync();
|
var info = await _dbContext.VisitTask.Where(x => x.Id == inspection.VisitTaskId).Select(x => new { SubjectCode = x.Subject.Code, TrialSiteCode = x.Subject.TrialSite.TrialSiteCode, SubjectId = x.SubjectId, x.Subject.TrialSiteId, x.TrialId, x.SourceSubjectVisitId, ReadModuleSubjectVisitId = (Guid?)x.ReadModule.SubjectVisitId, x.TrialReadingCriterionId }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
@ -3712,7 +3712,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
if (inspection.SubjectVisitId != null)
|
if (inspection.SubjectVisitId != null)
|
||||||
{
|
{
|
||||||
if (generalData.TrialId == null || generalData.TrialSiteId == null || generalData.SubjectId == null)
|
if (generalData.TrialId == null /*|| generalData.TrialSiteId == null*/ || generalData.SubjectId == null)
|
||||||
{
|
{
|
||||||
var info = await _dbContext.SubjectVisit.Where(x => x.Id == generalData.SubjectVisitId).Select(x =>
|
var info = await _dbContext.SubjectVisit.Where(x => x.Id == generalData.SubjectVisitId).Select(x =>
|
||||||
new { x.SubjectId, x.TrialSiteId, x.TrialId, SubjectCode = x.Subject.Code, TrialSiteCode = x.Subject.TrialSite.TrialSiteCode }).FirstOrDefaultAsync();
|
new { x.SubjectId, x.TrialSiteId, x.TrialId, SubjectCode = x.Subject.Code, TrialSiteCode = x.Subject.TrialSite.TrialSiteCode }).FirstOrDefaultAsync();
|
||||||
|
@ -3733,9 +3733,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
if (generalData.SubjectId != null)
|
if (generalData.SubjectId != null)
|
||||||
{
|
{
|
||||||
if (generalData.TrialId == null || generalData.TrialSiteId == null)
|
if (generalData.TrialId == null /*|| generalData.TrialSiteId == null*/)
|
||||||
{
|
{
|
||||||
var info = await _dbContext.Subject.Where(x => x.Id == generalData.SubjectId).Select(x => new { SubjectId = x.Id, x.TrialSiteId, x.TrialId, SubjectCode = x.Code, TrialSiteCode = x.TrialSite.TrialSiteCode }).FirstOrDefaultAsync();
|
var info = await _dbContext.Subject.Where(x => x.Id == generalData.SubjectId).Select(x => new { SubjectId = x.Id, x.TrialSiteId, x.TrialId, SubjectCode = x.Code, /*TrialSiteCode = x.TrialSite.TrialSiteCode*/ }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (info == null)
|
if (info == null)
|
||||||
{
|
{
|
||||||
|
@ -3757,7 +3757,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
|
|
||||||
//以后移除
|
//以后移除
|
||||||
generalData.SiteCode = info?.TrialSiteCode ?? generalData.SiteCode;
|
//generalData.SiteCode = info?.TrialSiteCode ?? generalData.SiteCode;
|
||||||
generalData.SubjectCode = info?.SubjectCode ?? generalData.SubjectCode;
|
generalData.SubjectCode = info?.SubjectCode ?? generalData.SubjectCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18644
IRaCIS.Core.Infra.EFCore/Migrations/20241113013510_TrialAuthorizationEncrypt.Designer.cs
generated
Normal file
18644
IRaCIS.Core.Infra.EFCore/Migrations/20241113013510_TrialAuthorizationEncrypt.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,36 @@
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class TrialAuthorizationEncrypt : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AlterColumn<string>(
|
||||||
|
name: "AuthorizationEncrypt",
|
||||||
|
table: "Trial",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: false,
|
||||||
|
oldClrType: typeof(string),
|
||||||
|
oldType: "nvarchar(400)",
|
||||||
|
oldMaxLength: 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AlterColumn<string>(
|
||||||
|
name: "AuthorizationEncrypt",
|
||||||
|
table: "Trial",
|
||||||
|
type: "nvarchar(400)",
|
||||||
|
maxLength: 400,
|
||||||
|
nullable: false,
|
||||||
|
oldClrType: typeof(string),
|
||||||
|
oldType: "nvarchar(max)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10407,8 +10407,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.Property<string>("AuthorizationEncrypt")
|
b.Property<string>("AuthorizationEncrypt")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(400)
|
.HasColumnType("nvarchar(max)");
|
||||||
.HasColumnType("nvarchar(400)");
|
|
||||||
|
|
||||||
b.Property<string>("BlindBaseLineName")
|
b.Property<string>("BlindBaseLineName")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
|
|
Loading…
Reference in New Issue