Merge branch 'Test.Study' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.Study
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
b1608812ec
|
@ -1,4 +1,4 @@
|
|||
using Autofac;
|
||||
using Autofac;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
|
@ -53,7 +53,7 @@ namespace IRaCIS.Core.API
|
|||
containerBuilder.RegisterModule<AutofacModuleSetup>();
|
||||
|
||||
#region Test
|
||||
//containerBuilder.RegisterType<ClinicalDataService>().PropertiesAutowired().InstancePerLifetimeScope();//注册仓储
|
||||
//containerBuilder.RegisterType<ClinicalDataService>().PropertiesAutowired().InstancePerLifetimeScope();//注册仓储
|
||||
|
||||
//var container = containerBuilder.Build();
|
||||
|
||||
|
@ -75,12 +75,12 @@ namespace IRaCIS.Core.API
|
|||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
//健康检查
|
||||
//健康检查
|
||||
services.AddHealthChecks();
|
||||
//本地化
|
||||
//本地化
|
||||
services.AddJsonLocalization(options => options.ResourcesPath = "Resources");
|
||||
|
||||
// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
|
||||
// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
|
||||
services.AddControllers(options =>
|
||||
{
|
||||
//options.Filters.Add<LogActionFilter>();
|
||||
|
@ -95,7 +95,7 @@ namespace IRaCIS.Core.API
|
|||
|
||||
|
||||
})
|
||||
.AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
|
||||
.AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
|
||||
|
||||
services.AddOptions().Configure<SystemEmailSendConfig>(_configuration.GetSection("SystemEmailSendConfig"));
|
||||
services.AddOptions().Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
|
||||
|
@ -103,62 +103,62 @@ namespace IRaCIS.Core.API
|
|||
services.AddOptions().Configure<ObjectStoreServiceOptions>(_configuration.GetSection("ObjectStoreService"));
|
||||
|
||||
|
||||
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
|
||||
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
|
||||
services.AddDynamicWebApiSetup();
|
||||
//AutoMapper
|
||||
services.AddAutoMapperSetup();
|
||||
//EF ORM QueryWithNoLock
|
||||
services.AddEFSetup(_configuration);
|
||||
//Http 响应压缩
|
||||
//Http 响应压缩
|
||||
services.AddResponseCompressionSetup();
|
||||
//Swagger Api 文档
|
||||
//Swagger Api 文档
|
||||
services.AddSwaggerSetup();
|
||||
//JWT Token 验证
|
||||
//JWT Token 验证
|
||||
services.AddJWTAuthSetup(_configuration);
|
||||
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
|
||||
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
|
||||
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<ConsistencyVerificationHandler>());
|
||||
// EasyCaching 缓存
|
||||
// EasyCaching 缓存
|
||||
services.AddEasyCachingSetup(_configuration);
|
||||
|
||||
//services.AddDistributedMemoryCache();
|
||||
|
||||
// hangfire 定时任务框架 有界面,更友好~
|
||||
// hangfire 定时任务框架 有界面,更友好~
|
||||
services.AddhangfireSetup(_configuration);
|
||||
|
||||
// QuartZ 定时任务框架 使用了hangfire 暂时不用,后续需要可以打开,已经配好
|
||||
// QuartZ 定时任务框架 使用了hangfire 暂时不用,后续需要可以打开,已经配好
|
||||
services.AddQuartZSetup(_configuration);
|
||||
|
||||
// 保护上传文件
|
||||
// 保护上传文件
|
||||
//services.AddStaticFileAuthorizationSetup();
|
||||
|
||||
|
||||
////HttpReports 暂时废弃
|
||||
////HttpReports 暂时废弃
|
||||
//services.AddHttpReports().AddHttpTransport();
|
||||
//Serilog 日志可视化 LogDashboard日志
|
||||
//Serilog 日志可视化 LogDashboard日志
|
||||
services.AddLogDashboardSetup();
|
||||
//上传限制 配置
|
||||
//上传限制 配置
|
||||
services.Configure<FormOptions>(options =>
|
||||
{
|
||||
options.MultipartBodyLengthLimit = int.MaxValue;
|
||||
options.ValueCountLimit = int.MaxValue;
|
||||
options.ValueLengthLimit = int.MaxValue;
|
||||
});
|
||||
//IP 限流 可设置白名单 或者黑名单
|
||||
//IP 限流 可设置白名单 或者黑名单
|
||||
//services.AddIpPolicyRateLimitSetup(_configuration);
|
||||
// 用户类型 策略授权
|
||||
// 用户类型 策略授权
|
||||
//services.AddAuthorizationPolicySetup(_configuration);
|
||||
|
||||
services.AddJsonConfigSetup(_configuration);
|
||||
//转发头设置 获取真实IP
|
||||
//转发头设置 获取真实IP
|
||||
services.Configure<ForwardedHeadersOptions>(options =>
|
||||
{
|
||||
options.ForwardedHeaders =
|
||||
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
|
||||
});
|
||||
//Dicom影像渲染图片 跨平台
|
||||
//Dicom影像渲染图片 跨平台
|
||||
services.AddDicomSetup();
|
||||
|
||||
// 实时应用
|
||||
// 实时应用
|
||||
services.AddSignalR();
|
||||
|
||||
|
||||
|
@ -175,17 +175,17 @@ namespace IRaCIS.Core.API
|
|||
{
|
||||
//app.UsePathBase(PathString.FromUriComponent("/api"));
|
||||
|
||||
//本地化
|
||||
//本地化
|
||||
app.UseLocalization();
|
||||
|
||||
app.UseForwardedHeaders();
|
||||
|
||||
//响应压缩
|
||||
//响应压缩
|
||||
app.UseResponseCompression();
|
||||
|
||||
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
|
||||
|
||||
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
|
||||
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
|
||||
app.UseStaticFiles();
|
||||
|
||||
|
||||
|
@ -195,10 +195,10 @@ namespace IRaCIS.Core.API
|
|||
//hangfire
|
||||
app.UseHangfireConfig(env);
|
||||
|
||||
////暂时废弃
|
||||
////暂时废弃
|
||||
//app.UseHttpReports();
|
||||
|
||||
////限流 中间件
|
||||
////限流 中间件
|
||||
//app.UseIpRateLimiting();
|
||||
|
||||
|
||||
|
@ -211,18 +211,18 @@ namespace IRaCIS.Core.API
|
|||
{
|
||||
//app.UseHsts();
|
||||
}
|
||||
Console.WriteLine("当前环境: " + env.EnvironmentName);
|
||||
Console.WriteLine("当前环境: " + env.EnvironmentName);
|
||||
|
||||
//app.UseMiddleware<AuthMiddleware>();
|
||||
|
||||
// 特殊异常处理 比如 404
|
||||
// 特殊异常处理 比如 404
|
||||
app.UseStatusCodePagesWithReExecute("/Error/{0}");
|
||||
|
||||
SwaggerSetup.Configure(app, env);
|
||||
|
||||
|
||||
|
||||
////serilog 记录请求的用户信息
|
||||
////serilog 记录请求的用户信息
|
||||
app.UseSerilogConfig(env);
|
||||
|
||||
app.UseRouting();
|
||||
|
@ -237,7 +237,7 @@ namespace IRaCIS.Core.API
|
|||
//app.UseJwtBearerQueryString();
|
||||
app.UseAuthorization();
|
||||
|
||||
////文件伺服 必须带Token 访问
|
||||
////文件伺服 必须带Token 访问
|
||||
////app.UseIRacisHostStaticFileStore(env);
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
|
@ -253,7 +253,7 @@ namespace IRaCIS.Core.API
|
|||
var hangfireJobService = app.ApplicationServices.GetRequiredService<IIRaCISHangfireJob>();
|
||||
|
||||
await hangfireJobService.InitHangfireJobTaskAsync();
|
||||
//有的时候每调用
|
||||
//有的时候每调用
|
||||
//HangfireJobHelper.NotImmediatelyOnceOnlyJob<IIRaCISHangfireJob>(t => t.InitHangfireJobTaskAsync(),TimeSpan.FromSeconds(1));
|
||||
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ namespace IRaCIS.Application.Services
|
|||
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
||||
//主题
|
||||
//---[来自展影IRC] 关于重置密码的提醒
|
||||
messageToSend.Subject = _localizer["Mail_IRCResettingPassword "];
|
||||
messageToSend.Subject = _localizer["Mail_IRCResettingPassword"];
|
||||
|
||||
|
||||
|
||||
|
@ -178,7 +178,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
builder.HtmlBody = string.Format(templateInfo,
|
||||
//---您正在进行邮箱重置密码操作
|
||||
_localizer["Mail_ResettingPassword "],
|
||||
_localizer["Mail_ResettingPassword"],
|
||||
verificationCode
|
||||
);
|
||||
}
|
||||
|
|
|
@ -658,7 +658,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
/// <param name="isSystemDoc"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{documentId:guid}/{isSystemDoc:bool}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt", "SignSystemDocNoTrialId" })]
|
||||
public async Task<IResponseOutput> UserAbandonDoc(Guid documentId, bool isSystemDoc)
|
||||
{
|
||||
if (isSystemDoc)
|
||||
|
|
|
@ -1383,6 +1383,10 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public DateTime? SubmitTime { get; set; }
|
||||
|
||||
public string SubmitUserName { get; set; } = String.Empty;
|
||||
|
||||
public string SubmitUserRealName { get; set; } = String.Empty;
|
||||
|
||||
public string CurrentActionUserName { get; set; } = String.Empty;
|
||||
public string PreliminaryAuditUserName { get; set; } = String.Empty;
|
||||
|
||||
|
|
|
@ -364,6 +364,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum))
|
||||
.ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status))
|
||||
.ForMember(d => d.StudyCount, u => u.MapFrom(s => s.StudyList.Count()))
|
||||
|
||||
.ForMember(d => d.SubmitUserName, u => u.MapFrom(s => s.SubmitUser.UserName))
|
||||
.ForMember(d => d.SubmitUserRealName, u => u.MapFrom(s => s.SubmitUser.FullName))
|
||||
|
||||
.ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.CurrentActionUser.UserName))
|
||||
.ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.UserName))
|
||||
.ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName))
|
||||
|
|
|
@ -694,7 +694,8 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
|
||||
//待领取量
|
||||
ToBeClaimedCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count(),
|
||||
ToBeClaimedCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.AuditState!=AuditStateEnum.QCPassed)
|
||||
.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count(),
|
||||
|
||||
//待审核通过,统计从已领取到QC提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
|
||||
ToBeReviewedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id).Count()
|
||||
|
@ -709,7 +710,7 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
|
||||
var toBeClaimedCount = _subjectVisitRepository
|
||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)&& t.SubmitState == SubmitStateEnum.Submitted && t.AuditState != AuditStateEnum.QCPassed)
|
||||
.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count();
|
||||
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
if (find != null)
|
||||
{
|
||||
var ids = new Guid[] { find.TaskIdOne, find.TaskIdTwo };
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => ids.Contains(t.Id), u => new VisitTask() { JudgeResultTaskId = null });
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => ids.Contains(t.Id), u => new VisitTask() { JudgeVisitTaskId = null });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,6 +82,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public DateTime? PreliminaryAuditTime { get; set; }
|
||||
public Guid? ForwardUserId { get; set; }
|
||||
public DateTime? ForwardTime { get; set; }
|
||||
|
||||
// 质控领取人
|
||||
public Guid? CurrentActionUserId { get; set; }
|
||||
public DateTime? CurrentActionUserExpireTime { get; set; }
|
||||
|
||||
|
|
|
@ -2,39 +2,73 @@ kind: pipeline
|
|||
type: docker
|
||||
name: irc-netcore-api
|
||||
|
||||
clone:
|
||||
disable: true #禁用默认克隆
|
||||
|
||||
steps:
|
||||
- name: docker-build
|
||||
image: docker
|
||||
- name: clone-repo
|
||||
image: alpine/git
|
||||
pull: if-not-exists
|
||||
volumes:
|
||||
- name: dockersock
|
||||
path: /var/run/docker.sock
|
||||
- name: cached_nuget_packages
|
||||
path: /drone/nuget_packages
|
||||
- name: irc-test-work
|
||||
path: /work
|
||||
commands:
|
||||
- date +%H:%M:%S
|
||||
- pwd
|
||||
- docker build -t Test_Study .
|
||||
- date +%H:%M:%S
|
||||
- if [ ! -e /work/netcore-repo/.git ]; then
|
||||
git clone -b Test.IRC http://192.168.3.68:2000/XCKJ/irc-netcore-api.git /work/netcore-repo;
|
||||
else
|
||||
cd /work/netcore-repo;
|
||||
git pull;
|
||||
fi
|
||||
|
||||
- name: docker-deploy
|
||||
- |
|
||||
if [ ! -e Dockerfile ]; then
|
||||
echo 'FROM mcr.microsoft.com/dotnet/aspnet:6.0
|
||||
EXPOSE 80
|
||||
WORKDIR /app
|
||||
COPY publish .
|
||||
ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"]' > /work/Dockerfile
|
||||
fi
|
||||
|
||||
- name: restore-publish
|
||||
image: mcr.microsoft.com/dotnet/sdk:6.0
|
||||
pull: if-not-exists
|
||||
depends_on:
|
||||
- clone-repo
|
||||
volumes:
|
||||
- name: nuget-packages
|
||||
path: /root/.nuget/packages
|
||||
- name: irc-test-work
|
||||
path: /work
|
||||
commands:
|
||||
- cd /work/netcore-repo/IRaCIS.Core.API
|
||||
- dotnet restore ./IRaCIS.Core.API.csproj
|
||||
- rm -rf /work/publish
|
||||
- cd /work/netcore-repo/IRaCIS.Core.API
|
||||
- dotnet publish ./IRaCIS.Core.API.csproj -c Release --no-restore -o /work/publish
|
||||
|
||||
|
||||
- name: docker-build
|
||||
image: docker
|
||||
pull: if-not-exists
|
||||
depends_on:
|
||||
- docker-build
|
||||
- restore-publish
|
||||
commands:
|
||||
- cd /work
|
||||
- docker build -t test-irc:v${DRONE_BUILD_NUMBER} .
|
||||
volumes:
|
||||
- name: irc-test-work
|
||||
path: /work
|
||||
- name: dockersock
|
||||
path: /var/run/docker.sock
|
||||
commands:
|
||||
- date +%H:%M:%S
|
||||
- docker rm -f test-study-container
|
||||
- docker run -itd -e TZ=Asia/Shanghai -e ASPNETCORE_ENVIRONMENT=Test_Study --restart=always --name test-study-container -p 8030:80 Test_Study
|
||||
- date +%H:%M:%S
|
||||
|
||||
|
||||
volumes:
|
||||
- name: cached_nuget_packages
|
||||
- name: nuget-packages
|
||||
host:
|
||||
path: /mnt/d/docker_publish/nuget_packages
|
||||
path: /opt/cicd/nuget/packages
|
||||
- name: irc-test-work
|
||||
host:
|
||||
path: /opt/cicd/irc-test
|
||||
- name: dockersock
|
||||
host:
|
||||
path: /var/run/docker.sock
|
||||
|
@ -44,63 +78,63 @@ trigger:
|
|||
- master
|
||||
|
||||
---
|
||||
|
||||
|
||||
kind: pipeline
|
||||
type: ssh
|
||||
name: ssh-windows-test-study-publish
|
||||
name: ssh-linux-test-irc-publish
|
||||
|
||||
platform:
|
||||
os: windows
|
||||
arch: amd64
|
||||
os: Linux
|
||||
arch: 386
|
||||
|
||||
clone:
|
||||
disable: true #禁用默认克隆
|
||||
|
||||
server:
|
||||
host: 123.56.94.154
|
||||
user: Administrator
|
||||
password: WHxckj2019
|
||||
user: root
|
||||
password:
|
||||
from_secret: test_ssh_pwd
|
||||
|
||||
steps:
|
||||
- name: publish-test-study
|
||||
- name: publish-test-irc
|
||||
commands:
|
||||
#拉取代码 并停止服务
|
||||
- Start-Process "C:\CICD\Test.Study\netcore_Publish.bat" -Wait
|
||||
- cd C:\CICD\Test.Study\netcore_repo
|
||||
- dotnet restore .\IRaCIS.Core.API\IRaCIS.Core.API.csproj --packages C:\Users\Administrator\.nuget\packages
|
||||
- dotnet publish .\IRaCIS.Core.API\IRaCIS.Core.API.csproj -c Release --no-restore --packages C:\Users\Administrator\.nuget\packages -o D:\Develop\Test_Study_PublishSite\IRaCIS.NetCore.API
|
||||
- Start-Service -Name "Test_Study_API"
|
||||
- echo start publish test-irc-api
|
||||
- cd /opt/1panel/hang/devops/test-irc
|
||||
- sh test-irc.sh v${DRONE_BUILD_NUMBER}
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- Test.Study
|
||||
|
||||
- Test.IRC
|
||||
|
||||
---
|
||||
|
||||
|
||||
kind: pipeline
|
||||
type: ssh
|
||||
name: ssh-windows-test-irc-publish
|
||||
name: ssh-linux-test-study-publish
|
||||
|
||||
platform:
|
||||
os: windows
|
||||
arch: amd64
|
||||
os: Linux
|
||||
arch: 386
|
||||
|
||||
clone:
|
||||
disable: true #禁用默认克隆
|
||||
|
||||
server:
|
||||
host: 123.56.94.154
|
||||
user: Administrator
|
||||
password: WHxckj2019
|
||||
user: root
|
||||
password:
|
||||
from_secret: test_ssh_pwd
|
||||
|
||||
steps:
|
||||
- name: publish-test-irc
|
||||
- name: publish-test-study
|
||||
commands:
|
||||
- Start-Process "C:\CICD\Test.IRC\netcore_Publish.bat" -Wait
|
||||
- echo start publish test-study-api
|
||||
- cd /opt/1panel/hang/devops/test-study
|
||||
- sh test-study.sh v${DRONE_BUILD_NUMBER}
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- Test.IRC
|
||||
- Test.Study
|
||||
|
||||
|
Loading…
Reference in New Issue