Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
77bcdf79e8
|
@ -362,49 +362,6 @@ namespace IRaCIS.Api.Controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region aliyun-net-sdk-sts 之前
|
|
||||||
//[HttpGet("user/GenerateSTS")]
|
|
||||||
//public IResponseOutput GenerateSTS([FromServices] IOptionsMonitor<AliyunOSSOptions> options)
|
|
||||||
//{
|
|
||||||
// var ossOptions = options.CurrentValue;
|
|
||||||
|
|
||||||
|
|
||||||
// IClientProfile profile = DefaultProfile.GetProfile(ossOptions.regionId, ossOptions.accessKeyId, ossOptions.accessKeySecret);
|
|
||||||
// DefaultAcsClient client = new DefaultAcsClient(profile);
|
|
||||||
|
|
||||||
|
|
||||||
// // 创建一个STS请求
|
|
||||||
// AssumeRoleRequest request = new AssumeRoleRequest
|
|
||||||
// {
|
|
||||||
// RoleArn = ossOptions.roleArn, // 角色ARN,需要替换为你的角色ARN
|
|
||||||
// RoleSessionName = $"session-name-{NewId.NextGuid()}", // 角色会话名称,可自定义
|
|
||||||
// DurationSeconds = 900, // 令牌有效期(单位:秒),这里设置为1小时
|
|
||||||
// };
|
|
||||||
|
|
||||||
|
|
||||||
// AssumeRoleResponse response = client.GetAcsResponse(request);
|
|
||||||
|
|
||||||
// // 返回STS令牌信息给前端
|
|
||||||
// var stsToken = new
|
|
||||||
// {
|
|
||||||
// AccessKeyId = response.Credentials.AccessKeyId,
|
|
||||||
// AccessKeySecret = response.Credentials.AccessKeySecret,
|
|
||||||
// SecurityToken = response.Credentials.SecurityToken,
|
|
||||||
// Expiration = response.Credentials.Expiration,
|
|
||||||
|
|
||||||
// Region = ossOptions.region,
|
|
||||||
// BucketName = ossOptions.bucketName,
|
|
||||||
// ViewEndpoint = ossOptions.viewEndpoint,
|
|
||||||
|
|
||||||
// };
|
|
||||||
|
|
||||||
// return ResponseOutput.Ok(stsToken);
|
|
||||||
|
|
||||||
//}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[HttpGet("User/UserRedirect")]
|
[HttpGet("User/UserRedirect")]
|
||||||
|
@ -436,7 +393,34 @@ namespace IRaCIS.Api.Controllers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region 项目支持Oauth 对接修改
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 回调到前端,前端调用后端的接口
|
||||||
|
/// 参考链接:https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html
|
||||||
|
/// 后端通过这个code ,带上客户端信息,和授权类型 可以向单点登录提供商,获取厂商token
|
||||||
|
///
|
||||||
|
/// 但是单点登录提供商提供的token 和我们系统的token 是有区别的,我们的token里面有我们业务系统的UserId,涉及到很多业务操作,所以在此出现了两种方案
|
||||||
|
/// 1、前段使用厂商的Token。 后端通过code 获取厂商的Token 返回前端的同时返回我们系统的UserId,前段在http 请求头加上一个自定义参数,带上UserId 后端取用户Id的地方变动下,
|
||||||
|
/// 但是除了UserId外,后端还有其他信息也是从Token取的,所以在请求头也需要带上,此外后端认证Token的方式也需要变化,改造成本稍大(如果是微服务,做这种处理还是可以的)。
|
||||||
|
/// 2、前段还是使用我们后台自己的Token。后端通过code 获取厂商Token的同时,后端做一个隐藏登录,返回厂商的Token的同时,也返回我们系统的Token。
|
||||||
|
/// (像我们单体,这种方式最简单,我们用单点登录,无非就是不想记多个系统的密码,自动登录而已,其他不支持的项目改造陈本也是最低的)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">回调的厂商类型 比如github, google, 我们用的logto ,不同的厂商回调到前端的地址可以不同的,但是请求后端的接口可以是同一个 </param>
|
||||||
|
/// <param name="code">在第三方平台登录成功后,回调前端的时候会返回一个code </param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("User/OAuthCallBack")]
|
||||||
|
public async Task<IResponseOutput> OAuthCallBack(string type, string code)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
return ResponseOutput.Ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 测试获取用户 ip
|
||||||
[HttpGet, Route("ip")]
|
[HttpGet, Route("ip")]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public IResponseOutput Get([FromServices] IHttpContextAccessor _context)
|
public IResponseOutput Get([FromServices] IHttpContextAccessor _context)
|
||||||
|
@ -477,6 +461,9 @@ namespace IRaCIS.Api.Controllers
|
||||||
}
|
}
|
||||||
return ResponseOutput.Ok(sb.ToString());
|
return ResponseOutput.Ok(sb.ToString());
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,22 @@
|
||||||
<member name="M:IRaCIS.Api.Controllers.ExtraController.Login(IRaCIS.Application.Contracts.UserLoginDTO,ZiggyCreatures.Caching.Fusion.IFusionCache,IRaCIS.Core.Application.Service.IUserService,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Application.Contracts.IReadingImageTaskService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig},IRaCIS.Core.Application.Service.IMailVerificationService)">
|
<member name="M:IRaCIS.Api.Controllers.ExtraController.Login(IRaCIS.Application.Contracts.UserLoginDTO,ZiggyCreatures.Caching.Fusion.IFusionCache,IRaCIS.Core.Application.Service.IUserService,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Application.Contracts.IReadingImageTaskService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig},IRaCIS.Core.Application.Service.IMailVerificationService)">
|
||||||
<summary> 系统用户登录接口[New] </summary>
|
<summary> 系统用户登录接口[New] </summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Api.Controllers.ExtraController.OAuthCallBack(System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
回调到前端,前端调用后端的接口
|
||||||
|
参考链接:https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html
|
||||||
|
后端通过这个code ,带上客户端信息,和授权类型 可以向单点登录提供商,获取厂商token
|
||||||
|
|
||||||
|
但是单点登录提供商提供的token 和我们系统的token 是有区别的,我们的token里面有我们业务系统的UserId,涉及到很多业务操作,所以在此出现了两种方案
|
||||||
|
1、前段使用厂商的Token。 后端通过code 获取厂商的Token 返回前端的同时返回我们系统的UserId,前段在http 请求头加上一个自定义参数,带上UserId 后端取用户Id的地方变动下,
|
||||||
|
但是除了UserId外,后端还有其他信息也是从Token取的,所以在请求头也需要带上,此外后端认证Token的方式也需要变化,改造成本稍大(如果是微服务,做这种处理还是可以的)。
|
||||||
|
2、前段还是使用我们后台自己的Token。后端通过code 获取厂商Token的同时,后端做一个隐藏登录,返回厂商的Token的同时,也返回我们系统的Token。
|
||||||
|
(像我们单体,这种方式最简单,我们用单点登录,无非就是不想记多个系统的密码,自动登录而已,其他不支持的项目改造陈本也是最低的)
|
||||||
|
</summary>
|
||||||
|
<param name="type">回调的厂商类型 比如github, google, 我们用的logto ,不同的厂商回调到前端的地址可以不同的,但是请求后端的接口可以是同一个 </param>
|
||||||
|
<param name="code">在第三方平台登录成功后,回调前端的时候会返回一个code </param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrialInspection(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Application.Contracts.TrialCommand})">
|
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrialInspection(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Application.Contracts.TrialCommand})">
|
||||||
<summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
<summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
||||||
<returns>新记录Id</returns>
|
<returns>新记录Id</returns>
|
||||||
|
|
|
@ -69,8 +69,4 @@
|
||||||
<ProjectReference Include="..\IRaCIS.Core.Infra.EFCore\IRaCIS.Core.Infra.EFCore.csproj" />
|
<ProjectReference Include="..\IRaCIS.Core.Infra.EFCore\IRaCIS.Core.Infra.EFCore.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="Triggers\TempAbandon\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -16660,17 +16660,6 @@
|
||||||
<param name="_qcChallengeRepository"></param>
|
<param name="_qcChallengeRepository"></param>
|
||||||
<param name="_subjectVisitRepository"></param>
|
<param name="_subjectVisitRepository"></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Triggers.JudgeVisitTaskTrigger.AfterSave(EntityFrameworkCore.Triggered.ITriggerContext{IRaCIS.Core.Domain.Models.VisitTask},System.Threading.CancellationToken)">
|
|
||||||
<summary>
|
|
||||||
因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
|
||||||
|
|
||||||
比如 两个任务产生了裁判,然后其中一个人申请了重阅,影响了裁判,需要清理之前任务的上裁判id (申请重阅,退回,里面分有序,无序,情况太多,所以不在那块逻辑修改,不然得加多个地方处理,在这里统一处理)
|
|
||||||
比如: 申请裁判任务重阅,事务里面本来设置了任务上的裁判id,但是因为下面的逻辑,导致设置的值又被清理了,只能重新设置下
|
|
||||||
</summary>
|
|
||||||
<param name="context"></param>
|
|
||||||
<param name="cancellationToken"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="T:IRaCIS.Core.Application.Triggers.TrialCriterionSignTrigger">
|
<member name="T:IRaCIS.Core.Application.Triggers.TrialCriterionSignTrigger">
|
||||||
<summary>
|
<summary>
|
||||||
因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
|
因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
|
||||||
|
@ -16691,6 +16680,17 @@
|
||||||
维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
|
维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Triggers.JudgeVisitTaskTrigger.AfterSave(EntityFrameworkCore.Triggered.ITriggerContext{IRaCIS.Core.Domain.Models.VisitTask},System.Threading.CancellationToken)">
|
||||||
|
<summary>
|
||||||
|
因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
||||||
|
|
||||||
|
比如 两个任务产生了裁判,然后其中一个人申请了重阅,影响了裁判,需要清理之前任务的上裁判id (申请重阅,退回,里面分有序,无序,情况太多,所以不在那块逻辑修改,不然得加多个地方处理,在这里统一处理)
|
||||||
|
比如: 申请裁判任务重阅,事务里面本来设置了任务上的裁判id,但是因为下面的逻辑,导致设置的值又被清理了,只能重新设置下
|
||||||
|
</summary>
|
||||||
|
<param name="context"></param>
|
||||||
|
<param name="cancellationToken"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:IRaCIS.Core.Application.Triggers.SubjectTrigger">
|
<member name="T:IRaCIS.Core.Application.Triggers.SubjectTrigger">
|
||||||
<summary>
|
<summary>
|
||||||
添加访视计划 要给改项目下的所有Subject 添加该访视
|
添加访视计划 要给改项目下的所有Subject 添加该访视
|
||||||
|
|
|
@ -1663,7 +1663,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
if (judegeList.Count > 0)
|
if (judegeList.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
var maxFinishedJudge = judegeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).FirstOrDefault();
|
var maxFinishedJudge = judegeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t=>t.VisitTaskNum).FirstOrDefault();
|
||||||
|
|
||||||
var maxNotFinishedJudge = judegeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).FirstOrDefault();
|
var maxNotFinishedJudge = judegeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).FirstOrDefault();
|
||||||
|
|
||||||
|
@ -2341,6 +2341,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var doctor2List = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
var doctor2List = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
.GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName })
|
.GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName })
|
||||||
|
//有全局裁判
|
||||||
.Where(g => g.Any(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null))
|
.Where(g => g.Any(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null))
|
||||||
.Select(g => new DoctorJudgeRatio()
|
.Select(g => new DoctorJudgeRatio()
|
||||||
{
|
{
|
||||||
|
@ -2349,7 +2350,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
FullName = g.Key.FullName,
|
FullName = g.Key.FullName,
|
||||||
|
|
||||||
//触发裁判的阅片期的数量
|
//触发裁判的阅片期的数量
|
||||||
TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Judge && t.SouceReadModuleId != null).Select(t => t.SouceReadModuleId).Distinct().Count(),
|
TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.SouceReadModuleId != null && t.JudgeVisitTaskId != null).Select(t => t.SouceReadModuleId).Distinct().Count(),
|
||||||
|
|
||||||
JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id)
|
JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id)
|
||||||
.Select(t => t.SouceReadModuleId).Distinct().Count(),
|
.Select(t => t.SouceReadModuleId).Distinct().Count(),
|
||||||
|
|
|
@ -6,11 +6,9 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
|
|
||||||
public class JudgeVisitTaskTrigger(
|
public class JudgeVisitTaskTrigger(
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository) : IAfterSaveTrigger<VisitTask>
|
IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository) : IAfterSaveTrigger<VisitTask>,IBeforeSaveTrigger<VisitTask>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
/// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
||||||
///
|
///
|
||||||
|
@ -39,7 +37,14 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (context.ChangeType == ChangeType.Modified)
|
}
|
||||||
|
|
||||||
|
//这个放在save 之前,不然可能先执行添加的修改为正确的,再执行修改的,又重置为空了 所以这里需要调整下 (裁判重阅,会修改裁判需要充值, 同时也会新增裁判任务)
|
||||||
|
public async Task BeforeSave(ITriggerContext<VisitTask> context, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var visitTask = context.Entity;
|
||||||
|
|
||||||
|
if (context.ChangeType == ChangeType.Modified)
|
||||||
{
|
{
|
||||||
if (visitTask.ReadingCategory == ReadingCategory.Judge && (visitTask.TaskState == TaskState.Adbandon || visitTask.TaskState == TaskState.HaveReturned))
|
if (visitTask.ReadingCategory == ReadingCategory.Judge && (visitTask.TaskState == TaskState.Adbandon || visitTask.TaskState == TaskState.HaveReturned))
|
||||||
{
|
{
|
||||||
|
@ -53,6 +58,5 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue