查询修改
continuous-integration/drone/push Build is passing Details

Test_IRC_Net8
he 2025-03-14 10:20:55 +08:00
parent e409aa3c05
commit 70c7f8a740
4 changed files with 96 additions and 14 deletions

View File

@ -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

View File

@ -243,30 +243,106 @@ namespace IRaCIS.Core.Application.Service
{
var doctorQuery = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup)
.ProjectTo<ConfirmationReviewerDTO>(_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<DoctorStateModelDTO>(_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<ConfirmationReviewerDTO>(_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<DoctorStateModelDTO>(_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;
}
});

View File

@ -178,6 +178,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<Hospital, EmploymentDTO>();
CreateMap<EnrollDetail, DoctorStateModelDTO>()
.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));

View File

@ -6,6 +6,9 @@ namespace IRaCIS.Core.Domain.Models;
[Table("EnrollDetail")]
public partial class EnrollDetail : BaseAddAuditEntity
{
#region 导航属性
[JsonIgnore]
public virtual TrialStatusDetail TrialDetail { get; set; }