Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
commit
ace39a7f94
|
@ -5526,6 +5526,21 @@
|
|||
是否是第一次转化的任务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetRelatedVisitTaskOutDto.PTSeriesId">
|
||||
<summary>
|
||||
融合的PTSeriesId
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetRelatedVisitTaskOutDto.CTSeriesId">
|
||||
<summary>
|
||||
融合的CTSeriesId
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetRelatedVisitTaskOutDto.OtherStudyId">
|
||||
<summary>
|
||||
StudyId
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetGlobalReadingInfoInDto.UsingOriginalData">
|
||||
<summary>
|
||||
当新答案为空的时候 是否是有原数据
|
||||
|
|
|
@ -230,7 +230,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.WhereIf(inQuery.IsInvalid != null, t => t.IsInvalid == inQuery.IsInvalid)
|
||||
.WhereIf(inQuery.IsGetBeRead,x=>!x.IsInvalid&&x.AuditState!= MedicalReviewAuditState.HaveSigned)
|
||||
.WhereIf(inQuery.TrialReadingCriterionId != null, t => t.VisitTask.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
|
||||
.OrderBy(x => x.AuditState).ThenBy(x=>x.VisitTask.SubjectId).ThenBy(x=>x.VisitTask.ArmEnum).ThenBy(x=>x.VisitTask.VisitTaskNum)
|
||||
.OrderBy(x => x.AuditState!= MedicalReviewAuditState.WaitAudit&& x.AuditState != MedicalReviewAuditState.Auditing).ThenBy(x=>x.VisitTask.SubjectId).ThenBy(x=>x.VisitTask.ArmEnum).ThenBy(x=>x.VisitTask.VisitTaskNum)
|
||||
.ProjectTo<TaskMedicalReviewView>(_mapper.ConfigurationProvider);
|
||||
|
||||
|
||||
|
|
|
@ -34,7 +34,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public class GetNextQCInfoInDto
|
||||
{
|
||||
public Guid TrialId { get; set; }
|
||||
}
|
||||
|
||||
public Guid? VisitId { get; set; }
|
||||
}
|
||||
|
||||
public class QCVisitSearchDTO : PageInput
|
||||
{
|
||||
|
@ -50,7 +52,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public bool? IsUrgent { get; set; }
|
||||
public Guid TrialId { get; set; }
|
||||
public Guid? SiteId { get; set; }
|
||||
public Guid? SubjectId { get; set; }
|
||||
|
||||
public Guid? VisitId { get; set; }
|
||||
public Guid? SubjectId { get; set; }
|
||||
|
||||
public string SubjectInfo { get; set; } = String.Empty;
|
||||
|
||||
|
|
|
@ -248,26 +248,26 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<QCVisitViewModel?> GetNextQCInfo(GetNextQCInfoInDto inDto)
|
||||
{
|
||||
var result= await GetQCVisitList(new QCVisitSearchDTO()
|
||||
{
|
||||
public async Task<QCVisitViewModel?> GetNextQCInfo(GetNextQCInfoInDto inDto)
|
||||
{
|
||||
var result = await GetQCVisitList(new QCVisitSearchDTO()
|
||||
{
|
||||
TrialId = inDto.TrialId,
|
||||
CurrentActionUserId = _userInfo.Id,
|
||||
VisitId = inDto.VisitId,
|
||||
PageIndex = 1,
|
||||
PageSize = 1,
|
||||
});
|
||||
|
||||
TrialId = inDto.TrialId,
|
||||
CurrentActionUserId=_userInfo.Id,
|
||||
PageIndex=1,
|
||||
PageSize=1,
|
||||
});
|
||||
return result.Item1.CurrentPageData.Count > 0 ? result.Item1.CurrentPageData[0] : null;
|
||||
}
|
||||
|
||||
return result.Item1.CurrentPageData.Count > 0 ? result.Item1.CurrentPageData[0] : null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// QC 访视列表
|
||||
/// </summary>
|
||||
/// <param name="visitSearchDTO"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
/// <summary>
|
||||
/// QC 访视列表
|
||||
/// </summary>
|
||||
/// <param name="visitSearchDTO"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<(PageOutput<QCVisitViewModel>, TrialSubjectAndSVConfig)> GetQCVisitList(QCVisitSearchDTO visitSearchDTO)
|
||||
{
|
||||
|
||||
|
@ -431,7 +431,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
var svExpression = QCCommon.GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
|
||||
var query = _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
|
||||
.WhereIf(visitSearchDTO.CurrentActionUserId != null, t => t.CurrentActionUserId == visitSearchDTO.CurrentActionUserId)
|
||||
.WhereIf(visitSearchDTO.VisitId != null, t => t.Id == visitSearchDTO.VisitId)
|
||||
.WhereIf(visitSearchDTO.CurrentActionUserId != null, t => t.CurrentActionUserId == visitSearchDTO.CurrentActionUserId)
|
||||
.WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState)
|
||||
.WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
|
||||
.WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)
|
||||
|
|
|
@ -928,9 +928,15 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
return new GetNextIQCQualityOutDto() { };
|
||||
break;
|
||||
case TrialQCProcess.SingleAudit:
|
||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId!= _userInfo.Id&&(x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake))).Include(x => x.Subject).ToListAsync();
|
||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted
|
||||
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId!= _userInfo.Id&&(x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y=>!y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
||||
.Include(x => x.Subject).ToListAsync();
|
||||
|
||||
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x=>x.VisitNum).FirstOrDefault();
|
||||
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
|
||||
|
||||
|
||||
.OrderBy(x=>x.VisitNum).FirstOrDefault();
|
||||
if(subjectVisit!=null)
|
||||
{
|
||||
return new GetNextIQCQualityOutDto() {
|
||||
|
@ -957,7 +963,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
|
||||
((x.CurrentActionUserId == _userInfo.Id)||(!x.IsTake&& x.AuditState != AuditStateEnum.QCPassed&& (x.PreliminaryAuditUserId != _userInfo.Id)))
|
||||
).Include(x => x.Subject).ToListAsync();
|
||||
)
|
||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId !=_userInfo.Id)
|
||||
.Include(x => x.Subject).ToListAsync();
|
||||
if (subjectVisit != null)
|
||||
{
|
||||
return new GetNextIQCQualityOutDto()
|
||||
|
|
|
@ -1442,7 +1442,22 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
/// 是否是第一次转化的任务
|
||||
/// </summary>
|
||||
public bool IsFirstChangeTask { get; set; } = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 融合的PTSeriesId
|
||||
/// </summary>
|
||||
public Guid? PTSeriesId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 融合的CTSeriesId
|
||||
/// </summary>
|
||||
public Guid? CTSeriesId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// StudyId
|
||||
/// </summary>
|
||||
public Guid? OtherStudyId { get; set; }
|
||||
}
|
||||
|
||||
public class GetVisitReadingQuestionOutDto
|
||||
{
|
||||
|
|
|
@ -202,13 +202,13 @@ namespace IRaCIS.Application.Services
|
|||
.OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto()
|
||||
{
|
||||
VisitTaskId = x.VisitTaskId,
|
||||
PicturePath = x.PicturePath,
|
||||
PicturePath = x.OtherPicturePath,
|
||||
TaskBlindName = x.VisitTask.TaskBlindName
|
||||
}).ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
return result.Where(x=>x.PicturePath!=string.Empty).ToList();
|
||||
|
||||
return result.Where(x => x.PicturePath != string.Empty && x.PicturePath != null).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -612,7 +612,22 @@ namespace IRaCIS.Application.Services
|
|||
result = result.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToList();
|
||||
}
|
||||
|
||||
foreach (var item in result)
|
||||
|
||||
var visitaskIds = result.Select(x => x.VisitTaskId).ToList();
|
||||
|
||||
var otherStudys = await _readingTableAnswerRowInfoRepository.Where(x => visitaskIds.Contains(x.VisitTaskId))
|
||||
.Where(x=>x.CTSeriesId!=null&&x.PTSeriesId!=null)
|
||||
.Select(x => new
|
||||
{
|
||||
x.OtherStudyId,
|
||||
x.CTSeriesId,
|
||||
x.PTSeriesId,
|
||||
x.VisitTaskId,
|
||||
x.UpdateTime
|
||||
}).ToListAsync();
|
||||
|
||||
|
||||
foreach (var item in result)
|
||||
{
|
||||
var clinicalDataList = await _readingClinicalDataService.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto()
|
||||
{
|
||||
|
@ -623,7 +638,15 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
|
||||
item.IsExistsClinicalData = clinicalDataList.Count > 0;
|
||||
}
|
||||
var otherStudy = otherStudys.Where(x => x.VisitTaskId == item.VisitTaskId).OrderByDescending(x => x.UpdateTime).FirstOrDefault();
|
||||
if (otherStudy != null)
|
||||
{
|
||||
item.PTSeriesId = otherStudy.PTSeriesId;
|
||||
item.CTSeriesId = otherStudy.CTSeriesId;
|
||||
item.OtherStudyId = otherStudy.OtherStudyId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1646,7 +1669,8 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
var query = _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == rowinfo.VisitTaskId && x.QuestionId == rowinfo.QuestionId && x.Id != rowinfo.Id)
|
||||
.Where(x => x.SplitOrMergeType != SplitOrMergeType.Split && x.SplitOrMergeType != SplitOrMergeType.SplitMain
|
||||
&&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain && x.SplitOrMergeType != SplitOrMergeType.MergeMained && x.SplitOrMergeType != SplitOrMergeType.Merged);
|
||||
&&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain
|
||||
&& x.SplitOrMergeType != SplitOrMergeType.Merged);
|
||||
|
||||
switch (taskInfo.TrialReadingCriterion.CriterionType)
|
||||
{
|
||||
|
@ -1798,8 +1822,30 @@ namespace IRaCIS.Application.Services
|
|||
}).ToListAsync();
|
||||
|
||||
var markquestionId = inDto.QuestionMarkInfoList.Select(y => y.QuestionId).ToList();
|
||||
await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId&& markquestionId.Contains(x.QuestionId));
|
||||
var datetime = DateTime.Now;
|
||||
|
||||
var needDeleteMarkQuestonIds = inDto.Answers.Where(x => x.Answer == string.Empty).Select(x => x.Id).ToList();
|
||||
|
||||
|
||||
await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x =>
|
||||
(x.QuestionType == QuestionType.SplenicTopPosition || x.QuestionType == QuestionType.SplenicBottomPosition) &&
|
||||
x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark()
|
||||
{
|
||||
PicturePath = string.Empty,
|
||||
MeasureData = string.Empty,
|
||||
}) ;
|
||||
|
||||
await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x =>
|
||||
(x.QuestionType == QuestionType.LiverSUVmax || x.QuestionType == QuestionType.MediastinumSUVmax) &&
|
||||
x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark()
|
||||
{
|
||||
OtherPicturePath = string.Empty,
|
||||
OtherMeasureData=string.Empty,
|
||||
});
|
||||
|
||||
|
||||
await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && markquestionId.Contains(x.QuestionId));
|
||||
|
||||
var datetime = DateTime.Now;
|
||||
|
||||
var markList = _mapper.Map<List<QuestionMarkInfo>, List<ReadingTaskQuestionMark>>(inDto.QuestionMarkInfoList);
|
||||
markList.ForEach(x => {
|
||||
|
@ -1851,21 +1897,21 @@ namespace IRaCIS.Application.Services
|
|||
var index = await _readingCalculateService.GetDeleteLesionStatrIndex(inDto);
|
||||
|
||||
|
||||
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x => x.RowId == inDto.RowId, x => new ReadingTableQuestionAnswer()
|
||||
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.RowId == inDto.RowId, x => new ReadingTableQuestionAnswer()
|
||||
{
|
||||
|
||||
IsDeleted = true
|
||||
});
|
||||
if (!(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.SplitRowId == deleteRowInfo.SplitRowId && x.Id != deleteRowInfo.Id)))
|
||||
{
|
||||
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo()
|
||||
await _readingTableAnswerRowInfoRepository.BatchUpdateNoTrackingAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo()
|
||||
{
|
||||
SplitOrMergeType = null,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo()
|
||||
await _readingTableAnswerRowInfoRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo()
|
||||
{
|
||||
|
||||
IsDeleted = true
|
||||
|
|
|
@ -1039,7 +1039,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) &&
|
||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis &&
|
||||
x.QuestionId== targetQuestion.Id
|
||||
).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
||||
).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum();
|
||||
|
||||
// 短径
|
||||
var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x =>
|
||||
|
@ -1047,7 +1047,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) &&
|
||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis &&
|
||||
x.QuestionId == targetQuestion.Id
|
||||
).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
||||
).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum();
|
||||
|
||||
// 找到ppd问题
|
||||
var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync();
|
||||
|
@ -1107,7 +1107,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
// 符合疾病进展
|
||||
if (accord)
|
||||
{
|
||||
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
|
||||
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x =>
|
||||
x.VisitTaskId == inDto.VisitTaskId &&
|
||||
x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
|
||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
|
||||
|
@ -1119,7 +1119,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
else if (state == TargetState.DiseaseProgression.GetEnumInt())
|
||||
{
|
||||
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
|
||||
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x =>
|
||||
x.VisitTaskId == inDto.VisitTaskId &&
|
||||
x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
|
||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
|
||||
|
@ -1374,15 +1374,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
var addList = _mapper.Map<List<ReadingTableAnswerRowInfo>>(tableRowAnswers).OrderBy(x => x.RowIndex).ToList();
|
||||
|
||||
await _readingTaskQuestionMarkRepository.AddRangeAsync(questionMarkList);
|
||||
await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList);
|
||||
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
|
||||
addList.ForEach(x =>
|
||||
foreach (var item in addList)
|
||||
{
|
||||
x.MergeRow = null;
|
||||
x.SplitRow = null;
|
||||
await _readingTableAnswerRowInfoRepository.AddAsync(item);
|
||||
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
|
||||
}
|
||||
await _readingTaskQuestionMarkRepository.AddRangeAsync(questionMarkList);
|
||||
//await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList);
|
||||
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
|
||||
//addList.ForEach(x =>
|
||||
//{
|
||||
// x.MergeRow = null;
|
||||
// x.SplitRow = null;
|
||||
|
||||
});
|
||||
//});
|
||||
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
|
||||
|
||||
}
|
||||
|
|
|
@ -14,6 +14,9 @@ namespace IRaCIS.Core.Domain.Share
|
|||
//1st QC进行了操作
|
||||
InPrimaryQC = 4,
|
||||
|
||||
/// <summary>
|
||||
/// 单审通过
|
||||
/// </summary>
|
||||
PrimaryQCPassed = 5,
|
||||
|
||||
//2nd QC进行操作
|
||||
|
|
|
@ -2278,6 +2278,15 @@ public enum SUVChangeVSBaseline
|
|||
/// </summary>
|
||||
PSScoreRemarks = 59,
|
||||
|
||||
/// <summary>
|
||||
/// 脾尖位置
|
||||
/// </summary>
|
||||
SplenicTopPosition = 60,
|
||||
|
||||
/// <summary>
|
||||
/// 脾底位置
|
||||
/// </summary>
|
||||
SplenicBottomPosition = 61,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -61,10 +61,10 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 审核通过时间
|
||||
/// </summary>
|
||||
public DateTime? AuditSignTime { get; set; }
|
||||
/// <summary>
|
||||
/// 审核通过时间
|
||||
/// </summary>
|
||||
public DateTime? AuditSignTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 阅片人是否认同
|
||||
|
|
|
@ -84,7 +84,9 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public Guid? ForwardUserId { get; set; }
|
||||
public DateTime? ForwardTime { get; set; }
|
||||
|
||||
// 质控领取人
|
||||
/// <summary>
|
||||
/// 当前质控领取人
|
||||
/// </summary>
|
||||
public Guid? CurrentActionUserId { get; set; }
|
||||
public DateTime? CurrentActionUserExpireTime { get; set; }
|
||||
|
||||
|
|
Loading…
Reference in New Issue