From 70c7f8a740c86a52999c1292be8417d6cfd8d230 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Fri, 14 Mar 2025 10:20:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Doctor/DTO/DoctorModel.cs | 6 +- .../Service/Doctor/DoctorListService.cs | 100 +++++++++++++++--- .../Service/Doctor/_MapConfig.cs | 1 + IRaCIS.Core.Domain/Trial/EnrollDetail.cs | 3 + 4 files changed, 96 insertions(+), 14 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Doctor/DTO/DoctorModel.cs b/IRaCIS.Core.Application/Service/Doctor/DTO/DoctorModel.cs index 867638b3a..721359c42 100644 --- a/IRaCIS.Core.Application/Service/Doctor/DTO/DoctorModel.cs +++ b/IRaCIS.Core.Application/Service/Doctor/DTO/DoctorModel.cs @@ -176,7 +176,7 @@ namespace IRaCIS.Application.Contracts public string? Code { get; set; } - public int? OptUserType { get; set; } + public UserTypeEnum? UserTypeEnum { get; set; } public string? OptUserName { get; set; } } @@ -243,7 +243,7 @@ namespace IRaCIS.Application.Contracts public int DoctorTrialState { get; set; } public string OptUserName { get; set; } = string.Empty; - public int? OptUserType { get; set; } + public UserTypeEnum? UserTypeEnum { get; set; } public DateTime? OptTime { get; set; } public string? OptTimeStr => OptTime?.ToString("yyyy-MM-dd HH:mm:ss"); @@ -279,6 +279,8 @@ namespace IRaCIS.Application.Contracts public int OptUserType { get; set; } + public UserTypeEnum UserTypeEnum { get; set; } + } #endregion diff --git a/IRaCIS.Core.Application/Service/Doctor/DoctorListService.cs b/IRaCIS.Core.Application/Service/Doctor/DoctorListService.cs index 31493b2bc..78a96a770 100644 --- a/IRaCIS.Core.Application/Service/Doctor/DoctorListService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/DoctorListService.cs @@ -243,30 +243,106 @@ namespace IRaCIS.Core.Application.Service { - var doctorQuery = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup) - .ProjectTo(_mapper.ConfigurationProvider) + #region 连表查询 + //var query = from enroll in _enrollRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup) + // join enrollDetail in _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup) on new { enroll.DoctorId, enroll.EnrollStatus } equals new { enrollDetail.DoctorId, enrollDetail.EnrollStatus } into enrollDetailtemp + // from leftenrollDetail in enrollDetailtemp.DefaultIfEmpty() + // select new ConfirmationReviewerDTO() + // { + // DoctorTrialState = (int)leftenrollDetail.EnrollStatus, + // OptTime = leftenrollDetail.CreateTime, + // UserTypeEnum = leftenrollDetail.CreateUserRole.UserTypeEnum, + // OptUserName = leftenrollDetail.CreateUserRole.UserName, + // SubmmitTime = leftenrollDetail.CreateTime, + // SubmmitUserName = leftenrollDetail.CreateUserRole.UserName, + // //BlindName= enroll.BlindName, + // //BlindNameCN= enroll.BlindNameCN, + // SpecialityId = enroll.Doctor.SpecialityId, + // SpecialityCN = enroll.Doctor.Speciality.ValueCN, + // Speciality = enroll.Doctor.Speciality.Value, + // //SpecialityOther=enroll.Doctor.Speciality.SpecialityOther, + // //SpecialityOtherCN= enroll.Doctor.Speciality.SpecialityOtherCN, + // DictionaryList = enroll.Doctor.DoctorDicRelationList.Where(t => t.KeyName == StaticData.ReadingType || t.KeyName == StaticData.Subspeciality).Select(t => t.Dictionary).OrderBy(t => t.ShowOrder).Select(x => new DicView() + // { + // Id = x.Id, + // ParentCode = x.Parent.Code, + // ShowOrder = x.ShowOrder, + // Value = x.Value, + // ValueCN = x.ValueCN + // }).ToList(), + + // //HospitalId= enroll.BlindName + + // Id = enroll.Doctor.Id, + // Code = enroll.DoctorUser.UserName, + // //FirstName=enroll.FirstName, + // //LastName = enroll.LastName, + // //ChineseName = enroll.ChineseName, + // //City = enroll.City, + // //HospitalName = enroll.HospitalName, + // //Country = enroll.Country, + // }; + + + //var result = await query + // .WhereIf(inQuery.OptStartTime != null, x => x.OptTime >= inQuery.OptStartTime) + // .WhereIf(inQuery.OptEndTime != null, x => x.OptTime <= inQuery.OptEndTime) + // .WhereIf(inQuery.UserTypeEnum != null, x => x.UserTypeEnum == inQuery.UserTypeEnum) + // .WhereIf(inQuery.Code.IsNotNullOrEmpty(), x => x.Code.Contains(inQuery.Code)) + + // .WhereIf(inQuery.OptUserName.IsNotNullOrEmpty(), x => x.OptUserName.Contains(inQuery.OptUserName)) + // .ToPagedListAsync(inQuery); + #endregion + + + #region 查询第一个 + + // 这里这样写的原因是因为 要取最新的入组详情 然后还要根据时间筛选 入组信息 + var query = _enrollDetailRepository + .Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup); + var enrollStateList = await query + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + enrollStateList = enrollStateList.GroupBy(e => e.DoctorId) + .Select(g => g.OrderByDescending(e => e.OptTime).FirstOrDefault()).ToList(); + + enrollStateList = enrollStateList .WhereIf(inQuery.OptStartTime != null, x => x.OptTime >= inQuery.OptStartTime) - .WhereIf(inQuery.OptEndTime != null, x => x.OptTime <= inQuery.OptEndTime) - .WhereIf(inQuery.Code.IsNotNullOrEmpty(), x => x.Code.Contains(inQuery.Code)) - .WhereIf(inQuery.OptUserType!=null, x => x.OptUserType==inQuery.OptUserType) - .WhereIf(inQuery.OptUserName.IsNotNullOrEmpty(), x => x.OptUserName.Contains(inQuery.OptUserName)); + .WhereIf(inQuery.OptEndTime != null, x => x.OptTime <= inQuery.OptEndTime) + .WhereIf(inQuery.UserTypeEnum != null, x => x.UserTypeEnum == inQuery.UserTypeEnum) + .ToList(); + #endregion + + + + + + var doctorids = enrollStateList.Select(x => x.DoctorId).ToList(); + + + var doctorQuery = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup) + + + + + + .WhereIf(inQuery.OptStartTime != null || inQuery.OptEndTime != null || inQuery.UserTypeEnum != null, x => doctorids.Contains(x.DoctorId)) + .ProjectTo(_mapper.ConfigurationProvider) + .WhereIf(inQuery.Code.IsNotNullOrEmpty(), x => x.Code.Contains(inQuery.Code)) + + .WhereIf(inQuery.OptUserName.IsNotNullOrEmpty(), x => x.OptUserName.Contains(inQuery.OptUserName)); var doctorPageList = await doctorQuery.ToPagedListAsync(inQuery); - var enrollStateList = await _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - - doctorPageList.CurrentPageData.ToList().ForEach(u => { u.DoctorTrialState = (int)EnrollStatus.InviteIntoGroup; - var opt = enrollStateList.FirstOrDefault(t => t.DoctorId == u.Id); + var opt = enrollStateList.OrderByDescending(x=>x.OptTime).FirstOrDefault(t => t.DoctorId == u.Id); if (opt != null) { u.DoctorTrialState = opt.IntoGroupState; u.OptTime = opt.OptTime; - u.OptUserType=opt.OptUserType; + u.UserTypeEnum = opt.UserTypeEnum; u.OptUserName = opt.OptUserName; } }); diff --git a/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs b/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs index a86f3f864..c50b00f96 100644 --- a/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs @@ -178,6 +178,7 @@ namespace IRaCIS.Core.Application.Service CreateMap(); CreateMap() + .ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.CreateUserRole.UserTypeEnum)) .ForMember(d => d.IntoGroupState, u => u.MapFrom(s => s.EnrollStatus)) .ForMember(d => d.OptTime, u => u.MapFrom(s => s.CreateTime)) .ForMember(d => d.OptUserName, u => u.MapFrom(s => s.CreateUserRole.IdentityUser.UserName)); diff --git a/IRaCIS.Core.Domain/Trial/EnrollDetail.cs b/IRaCIS.Core.Domain/Trial/EnrollDetail.cs index 28420e2e8..50050ce35 100644 --- a/IRaCIS.Core.Domain/Trial/EnrollDetail.cs +++ b/IRaCIS.Core.Domain/Trial/EnrollDetail.cs @@ -6,6 +6,9 @@ namespace IRaCIS.Core.Domain.Models; [Table("EnrollDetail")] public partial class EnrollDetail : BaseAddAuditEntity { + + + #region [JsonIgnore] public virtual TrialStatusDetail TrialDetail { get; set; }