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

Test_IRC_Net8
he 2025-02-24 16:15:00 +08:00
commit cff6b87daa
15 changed files with 19168 additions and 198 deletions

View File

@ -583,6 +583,8 @@ namespace IRaCIS.Core.Application.Service
saveItem.IsTestUser = true;
}
saveItem.UserCeateSource = UserCeateSource.ReviewerSelect;
saveItem.TrialId = trialId;
saveItem.Code = _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;

View File

@ -336,6 +336,18 @@ namespace IRaCIS.Application.Contracts
public DateTime? LastChangePassWordTime { get; set; }
public List<IdentityUserTypeDTO> UserRoleList { get; set; }
#region 用户来源
public UserCeateSource UserCeateSource { get; set; }
public Guid? TrialId { get; set; }
public string TrialCode { get; set; }
public string ResearchProgramNo { get; set; }
#endregion
}

View File

@ -93,6 +93,12 @@ namespace IRaCIS.Core.Application.Contracts
}
public class UserTypeSelectDto
{
public Guid UserTypeId { get; set; }
public string UserTypeShortName { get; set; } = string.Empty;
}
public class UserTypeSimpleDTO
{
public Guid Id { get; set; }

View File

@ -579,7 +579,7 @@ namespace IRaCIS.Core.Application.Service
saveItem.OrganizationName = organizationName;
}
saveItem.UserCeateSource = UserCeateSource.AdminCreate;
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
var addRoleList = new List<UserRole>();

View File

@ -160,8 +160,7 @@ namespace IRaCIS.Core.Application.Contracts
{
//排除其他组的用户
var query = _userTypeRepository
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin, t => t.IsEnable == true)
.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin && x.IsEnable==true)
.Where(t => !t.UserTypeGroupList.Any(t => t.Group.Code == "3"))
.OrderBy(t => t.UserTypeShortName).ProjectTo<TrialUserType>(_mapper.ConfigurationProvider);

View File

@ -152,7 +152,9 @@ namespace IRaCIS.Core.Application.Service
CreateMap<IdentityUser, UserBasicInfo>()
.ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t.Id));
CreateMap<IdentityUser, UserListDTO>();
CreateMap<IdentityUser, UserListDTO>()
.ForMember(d => d.TrialCode, u => u.MapFrom(s => s.Trial.TrialCode))
.ForMember(d => d.ResearchProgramNo, u => u.MapFrom(s => s.Trial.ResearchProgramNo));
CreateMap<UserAddUserType, UserRole>().ReverseMap();
@ -172,7 +174,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<UpdateTrialUserCommand, TrialIdentityUser>();
}

View File

@ -925,7 +925,8 @@ namespace IRaCIS.Core.Application.Contracts
//generateUser.UserName = generateUser.UserCode;
generateUser.UserCeateSource = UserCeateSource.SiteSruvey;
generateUser.TrialId = trialId;
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
generateUser.Status = UserStateEnum.Enable;
@ -1168,6 +1169,8 @@ namespace IRaCIS.Core.Application.Contracts
//generateUser.UserName = generateUser.UserCode;
generateUser.UserCeateSource = UserCeateSource.SiteSruvey;
generateUser.TrialId = trialId;
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
generateUser.Status = UserStateEnum.Enable;

View File

@ -103,6 +103,44 @@ namespace IRaCIS.Application.Contracts
public string FullName { get; set; }
}
public class IdentityUserJoinedTrialQuery : PageInput
{
[NotDefault]
public Guid IdentityUserId { get; set; }
public string? TrialCode { get; set; }
public string? ResearchProgramNo { get; set; }
public string? ExperimentName { get; set; }
public Guid? UserTypeId { get; set; }
public bool? IsDeleted { get; set; }
}
public class IdentityUserJoinedTrialView
{
public Guid TrialId { get; set; }
public string TrialCode { get; set; }
public string ResearchProgramNo { get; set; }
public string ExperimentName { get; set; }
public string TrialStatusStr { get; set; }
public DateTime TrialCreateTime { get; set; }
public List<UserTypeSelectDto> TrialUserRoleList { get; set; }
public bool IsDeleted { get; set; }
public DateTime? RemoveTime { get; set; }
public DateTime? JoinTime { get; set; }
}
public class TrialMaintenanceDTO : UserTrialCommand
{
@ -110,7 +148,7 @@ namespace IRaCIS.Application.Contracts
public bool IsDeleted { get; set; }
[DictionaryTranslateAttribute("IsSiteDisable")]
public bool RoleIsDeleted { get; set; }
public DateTime? DeletedTime { get; set; }
@ -484,7 +522,7 @@ namespace IRaCIS.Application.Contracts
public bool? IsUserRoleDisabled { get; set; }
public string? EMail { get; set; }
public string? EMail { get; set; }
}
public class TrialUserScreeningDTO : TrialUserAddCommand

View File

@ -280,7 +280,8 @@ namespace IRaCIS.Core.Application.Service
//generateUser.UserName = generateUser.UserCode;
generateUser.UserCeateSource = UserCeateSource.External;
generateUser.TrialId = trialId;
generateUser.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
generateUser.Status = UserStateEnum.Enable;

View File

@ -1,6 +1,7 @@
using FellowOakDicom;
using IRaCIS.Application.Contracts;
using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Domain.Models;
@ -28,6 +29,34 @@ namespace IRaCIS.Core.Application.Service
.ToListAsync();
}
[HttpPost]
public async Task<PageOutput<IdentityUserJoinedTrialView>> GetUserJoinedTrialList(IdentityUserJoinedTrialQuery inQuery)
{
var list = await _trialIdentityUserRepository.Where(t => t.IdentityUserId == inQuery.IdentityUserId, false, true)
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialCode), o => o.Trial.TrialCode.Contains(inQuery.TrialCode))
.WhereIf(!string.IsNullOrEmpty(inQuery.ResearchProgramNo), o => o.Trial.ResearchProgramNo.Contains(inQuery.ResearchProgramNo))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.Trial.ExperimentName.Contains(inQuery.ExperimentName))
.WhereIf(inQuery.UserTypeId != null, o => o.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == inQuery.UserTypeId))
.WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted)
.Select(t => new IdentityUserJoinedTrialView()
{
TrialId = t.TrialId,
TrialCode = t.Trial.TrialCode,
TrialCreateTime = t.Trial.CreateTime,
ExperimentName = t.Trial.ExperimentName,
ResearchProgramNo = t.Trial.ResearchProgramNo,
TrialStatusStr = t.Trial.TrialStatusStr,
IsDeleted = t.IsDeleted,
JoinTime = t.JoinTime,
RemoveTime = t.RemoveTime,
TrialUserRoleList = t.TrialUserRoleList.Select(t => new UserTypeSelectDto() { UserTypeId = t.UserRole.UserTypeRole.Id, UserTypeShortName = t.UserRole.UserTypeRole.UserTypeShortName }).ToList(),
}).ToPagedListAsync(inQuery);
return list;
}
#region 多账户调整已修改
/// <summary>
/// Setting页面 获取项目参与人员列表

View File

@ -27,6 +27,7 @@ using MiniExcelLibs;
using NPOI.SS.Formula.Functions;
using NPOI.XWPF.UserModel;
using System.Globalization;
using System.Linq.Dynamic.Core;
using System.Reflection.Metadata.Ecma335;
using System.Runtime.InteropServices;
using System.Text;
@ -155,8 +156,44 @@ namespace IRaCIS.Core.Application.Service
}
[AllowAnonymous]
public async Task<IResponseOutput> UserCreateSourceDeal([FromServices] IRepository<IdentityUser> _identityUserRepository,
[FromServices] IRepository<TrialUserRole> _trialUserRoleRepository)
{
var list = _userRoleRepository.Where().IgnoreQueryFilters().ToList();
foreach (var item in list.GroupBy(t => t.IdentityUserId))
{
var userRoleList = item.OrderBy(t => t.CreateTime).ToList();
var firstCreateRole = userRoleList.FirstOrDefault();
var firstTrialId = _trialUserRoleRepository.Where(t => t.TrialUser.IdentityUserId == firstCreateRole.IdentityUserId).IgnoreQueryFilters().OrderBy(t => t.CreateTime).Select(t => t.TrialId).FirstOrDefault();
if (firstCreateRole.UserTypeEnum == UserTypeEnum.IndependentReviewer)
{
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == firstCreateRole.IdentityUserId, u => new Domain.Models.IdentityUser() { UserCeateSource = UserCeateSource.ReviewerSelect, TrialId = firstTrialId });
}
else if (firstCreateRole.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || firstCreateRole.UserTypeEnum == UserTypeEnum.CRA)
{
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == firstCreateRole.IdentityUserId, u => new Domain.Models.IdentityUser() { UserCeateSource = UserCeateSource.AdminCreate, TrialId = firstTrialId });
}
else if (firstCreateRole.UserTypeEnum == UserTypeEnum.SPM || firstCreateRole.UserTypeEnum == UserTypeEnum.CPM ||
firstCreateRole.UserTypeEnum == UserTypeEnum.SMM || firstCreateRole.UserTypeEnum == UserTypeEnum.CMM ||
firstCreateRole.UserTypeEnum == UserTypeEnum.EA || firstCreateRole.UserTypeEnum == UserTypeEnum.MC)
{
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == firstCreateRole.IdentityUserId, u => new Domain.Models.IdentityUser() { UserCeateSource = UserCeateSource.AdminCreate, TrialId = firstTrialId });
}
else
{
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == firstCreateRole.IdentityUserId, u => new Domain.Models.IdentityUser() { UserCeateSource = UserCeateSource.AdminCreate, TrialId = firstTrialId });
}
}
return ResponseOutput.Ok();
}

View File

@ -60,8 +60,12 @@ public class UserRole : BaseFullAuditEntity
[Comment("后台 - 系统真实账户表")]
[Table("IdentityUser")]
public class IdentityUser: BaseFullAuditEntity
public class IdentityUser : BaseFullAuditEntity
{
[JsonIgnore]
public Trial Trial { get; set; }
[JsonIgnore]
public List<TrialIdentityUser> UserTrialList { get; set; }
@ -126,4 +130,26 @@ public class IdentityUser: BaseFullAuditEntity
#endregion
#region Óû§À´Ô´
public UserCeateSource UserCeateSource { get; set; }
public Guid? TrialId { get; set; }
#endregion
}
public enum UserCeateSource
{
None = 0,
AdminCreate = 1,
SiteSruvey = 2,
ReviewerSelect = 3,
External=4
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,60 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddUserCreatSouce : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "TrialId",
table: "IdentityUser",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "UserCeateSource",
table: "IdentityUser",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateIndex(
name: "IX_IdentityUser_TrialId",
table: "IdentityUser",
column: "TrialId");
migrationBuilder.AddForeignKey(
name: "FK_IdentityUser_Trial_TrialId",
table: "IdentityUser",
column: "TrialId",
principalTable: "Trial",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_IdentityUser_Trial_TrialId",
table: "IdentityUser");
migrationBuilder.DropIndex(
name: "IX_IdentityUser_TrialId",
table: "IdentityUser");
migrationBuilder.DropColumn(
name: "TrialId",
table: "IdentityUser");
migrationBuilder.DropColumn(
name: "UserCeateSource",
table: "IdentityUser");
}
}
}

View File

@ -2824,12 +2824,18 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<int>("Status")
.HasColumnType("int");
b.Property<Guid?>("TrialId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
b.Property<Guid>("UpdateUserId")
.HasColumnType("uniqueidentifier");
b.Property<int>("UserCeateSource")
.HasColumnType("int");
b.Property<string>("UserCode")
.IsRequired()
.HasMaxLength(400)
@ -2844,6 +2850,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasIndex("CreateUserId");
b.HasIndex("TrialId");
b.ToTable("IdentityUser", t =>
{
t.HasComment("后台 - 系统真实账户表");
@ -11799,194 +11807,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFile", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("FileFormat")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("FileName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("FilePath")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("FileSize")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<Guid>("TrialFileTypeId")
.HasColumnType("uniqueidentifier")
.HasComment("关联项目文件类型");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
b.Property<Guid>("UpdateUserId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.ToTable("TrialFile", t =>
{
t.HasComment("项目文件 - 文件表");
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFileType", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<int>("ArchiveTypeEnum")
.HasColumnType("int")
.HasComment("报告、文档、记录");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<DateOnly>("FirstFinalDate")
.HasColumnType("date")
.HasComment("首次定稿日期");
b.Property<bool>("IsConfirmRecord")
.HasColumnType("bit")
.HasComment("是否确认收入项");
b.Property<bool>("IsEnable")
.HasColumnType("bit");
b.Property<bool>("IsSelfDefine")
.HasColumnType("bit")
.HasComment("是否自定义");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("NameCN")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<int>("ShowOrder")
.HasColumnType("int");
b.Property<int>("SubIdentificationEnum")
.HasColumnType("int")
.HasComment("子类标识,是取那个表的数据");
b.Property<Guid?>("SysFileTypeId")
.HasColumnType("uniqueidentifier")
.HasComment("关联系统文件类型");
b.Property<Guid>("TrialId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
b.Property<Guid>("UpdateUserId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.ToTable("TrialFileType", t =>
{
t.HasComment("项目文件 - 文件类型表");
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialFinalRecord", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("HistoryFileRecordId")
.HasColumnType("uniqueidentifier")
.HasComment("历史记录");
b.Property<bool>("IsAuthorizedView")
.HasColumnType("bit")
.HasComment("是否授权查看");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<Guid>("PDFFileRecordId")
.HasColumnType("uniqueidentifier")
.HasComment("定稿PDF");
b.Property<Guid>("SignFileRecordId")
.HasColumnType("uniqueidentifier")
.HasComment("签名页");
b.Property<int>("State")
.HasColumnType("int");
b.Property<Guid>("TrialFileTypeId")
.HasColumnType("uniqueidentifier")
.HasComment("关联项目文件类型");
b.Property<Guid>("TrialId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
b.Property<Guid>("UpdateUserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Version")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<Guid>("WordFileRecordId")
.HasColumnType("uniqueidentifier")
.HasComment("定稿Word");
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.ToTable("TrialFinalRecord", t =>
{
t.HasComment("项目文件 - 定稿记录表");
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialIdentityUser", b =>
{
b.Property<Guid>("Id")
@ -15020,7 +14840,13 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial")
.WithMany()
.HasForeignKey("TrialId");
b.Navigation("CreateUserRole");
b.Navigation("Trial");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.InspectionFile", b =>