Compare commits
5 Commits
a8ccbce76f
...
05627ff126
| Author | SHA1 | Date |
|---|---|---|
|
|
05627ff126 | |
|
|
627618c854 | |
|
|
2711c5eb04 | |
|
|
a6982f79c3 | |
|
|
2a542949cd |
|
|
@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
||||
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||
public async Task<IResponseOutput> BatchSubmitGlobalReadingInfo(BatchSubmitGlobalReadingInfo inDto)
|
||||
{
|
||||
await VerifyTaskIsSign(inDto.GlobalTaskId);
|
||||
|
|
@ -94,7 +94,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
})).ToList();
|
||||
|
||||
await _readingGlobalTaskInfoRepository.AddRangeAsync(answers);
|
||||
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == inDto.GlobalTaskId, u => new VisitTask() { ReadingTaskState = ReadingTaskState.Reading });
|
||||
await _visitTaskRepository.UpdatePartialFromEFAutoAsync(inDto.GlobalTaskId, u => new VisitTask() { ReadingTaskState = ReadingTaskState.Reading });
|
||||
var result = await _readingGlobalTaskInfoRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok(result);
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
||||
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||
public async Task<IResponseOutput> SaveGlobalReadingInfo(SaveGlobalReadingInfoInDto inDto)
|
||||
{
|
||||
await VerifyTaskIsSign(inDto.GlobalTaskId);
|
||||
|
|
@ -301,7 +301,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
LimitEdit = y.LimitEdit,
|
||||
MaxAnswerLength = y.MaxAnswerLength,
|
||||
FileType = y.FileType,
|
||||
Unit=y.Unit,
|
||||
Unit = y.Unit,
|
||||
QuestionGenre = y.QuestionGenre,
|
||||
ShowOrder = y.ShowOrder,
|
||||
DictionaryCode = y.DictionaryCode,
|
||||
|
|
|
|||
|
|
@ -346,7 +346,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var relatedVisitTaskIds = JsonConvert.SerializeObject(relatedVisitTaskIdList);
|
||||
|
||||
// 这里先保存 签名的时候 会统一创建关系
|
||||
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == inDto.OncologyTaskId, u => new VisitTask()
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == inDto.OncologyTaskId, u => new VisitTask()
|
||||
{
|
||||
RelatedVisitTaskIds = relatedVisitTaskIds
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3502,18 +3502,24 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
|||
{
|
||||
|
||||
|
||||
isDistinctionInterface = false;
|
||||
switch (_userInfo.RequestUrl)
|
||||
{
|
||||
//申请重阅
|
||||
case "VisitTask/applyReReading":
|
||||
|
||||
|
||||
extraIdentification = "/" + (int)entity.ReReadingApplyState;
|
||||
|
||||
//PM 申请重阅,区分不了是否有SPM参与
|
||||
|
||||
if (entity.ReReadingApplyState== ReReadingApplyState.TrialGroupHaveApplyed)
|
||||
{
|
||||
var hasSPM = _dbContext.VisitTaskReReading.Any(t => t.OriginalReReadingTaskId == entity.Id);
|
||||
|
||||
//var hasSPM = _dbContext.VisitTaskReReading.Any(t => t.OriginalReReadingTaskId == entity.Id);
|
||||
|
||||
var hasSPM = entitys.Where(x => x.Entity.GetType() == typeof(VisitTaskReReading))
|
||||
.Select(t => t.Entity as VisitTaskReReading).Any(t => t.OriginalReReadingTaskId == entity.Id);
|
||||
|
||||
|
||||
if (!hasSPM)
|
||||
{
|
||||
|
|
@ -3528,6 +3534,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
|||
//同意重阅
|
||||
case "VisitTask/ConfirmReReading":
|
||||
|
||||
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
|
||||
{
|
||||
extraIdentification = "/" + 1;
|
||||
|
|
@ -3549,51 +3556,63 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
|||
|
||||
break;
|
||||
|
||||
case "ReadingImageTask/SubmitVisitTaskQuestions":
|
||||
|
||||
//访视任务-- 非Dicom 阅片
|
||||
if (entity.ReadingTaskState != ReadingTaskState.HaveSigned)
|
||||
{
|
||||
//提交访视任务的时候 会多次更新同一个记录 只记录最后一次
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
//Dicom 阅片 签名
|
||||
case "ReadingImageTask/SubmitDicomVisitTask":
|
||||
|
||||
//跳转阅片结果需要该参数
|
||||
var subjectCode = _dbContext.Subject.Where(t => t.Id == entity.SubjectId).Select(t => t.Code).First();
|
||||
|
||||
obj.SubjectCode = subjectCode;
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
#region 裁判、肿瘤学、全局 都是通用的
|
||||
|
||||
//裁判任务 结果的保存 和签名提交
|
||||
if (entity.JudgeResultTaskId != null && (_userInfo.RequestUrl == "ReadingImageTask/SaveJudgeVisitTaskResult" || _userInfo.RequestUrl == "ReadingImageTask/SubmitJudgeVisitTaskResult"))
|
||||
{
|
||||
|
||||
var visitTaskNum = entity.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Judge];
|
||||
var list = await _dbContext.VisitTask.Where(t => t.TaskState == TaskState.Effect && t.SubjectId == entity.SubjectId && t.VisitTaskNum == visitTaskNum && t.JudgeVisitTaskId == entity.Id && t.TrialReadingCriterionId == entity.TrialReadingCriterionId).Select(t => new { t.Id, t.DoctorUser.FullName, t.ArmEnum }).OrderBy(t => t.ArmEnum).ToListAsync();
|
||||
|
||||
|
||||
var r1 = list.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).FirstOrDefault();
|
||||
var r2 = list.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).FirstOrDefault();
|
||||
|
||||
obj.R1 = r1.FullName;
|
||||
obj.R2 = r2.FullName;
|
||||
obj.SelectResult = r1.Id == entity.JudgeResultTaskId ? "R1" : "R2";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
//增加进入阅片中的稽查
|
||||
|
||||
if (entity.ReadingTaskState == ReadingTaskState.Reading)
|
||||
{
|
||||
if(_dbContext.VisitTask.Where(t => t.Id == entity.Id).Any(t => t.ReadingTaskState== ReadingTaskState.WaitReading))
|
||||
{
|
||||
isDistinctionInterface = false;
|
||||
extraIdentification = "/ChangeToReading";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//访视任务-- 非Dicom 阅片
|
||||
if (_userInfo.RequestUrl == "ReadingImageTask/SubmitVisitTaskQuestions" && entity.ReadingTaskState != ReadingTaskState.HaveSigned && type == AuditOpt.Update)
|
||||
{
|
||||
//提交访视任务的时候 会多次更新同一个记录 只记录最后一次
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Dicom 阅片 签名
|
||||
if (_userInfo.RequestUrl == "ReadingImageTask/SubmitDicomVisitTask")
|
||||
{
|
||||
//跳转阅片结果需要该参数
|
||||
var subjectCode = _dbContext.Subject.Where(t => t.Id == entity.SubjectId).Select(t => t.Code).First();
|
||||
|
||||
obj.SubjectCode = subjectCode;
|
||||
}
|
||||
|
||||
#region 裁判、肿瘤学、全局 都是通用的
|
||||
|
||||
//裁判任务 结果的保存 和签名提交
|
||||
if (entity.JudgeResultTaskId != null && (_userInfo.RequestUrl == "ReadingImageTask/SaveJudgeVisitTaskResult" || _userInfo.RequestUrl == "ReadingImageTask/SubmitJudgeVisitTaskResult"))
|
||||
{
|
||||
|
||||
var visitTaskNum = entity.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Judge];
|
||||
var list = await _dbContext.VisitTask.Where(t => t.TaskState == TaskState.Effect && t.SubjectId == entity.SubjectId && t.VisitTaskNum == visitTaskNum && t.JudgeVisitTaskId == entity.Id && t.TrialReadingCriterionId == entity.TrialReadingCriterionId).Select(t => new { t.Id, t.DoctorUser.FullName, t.ArmEnum }).OrderBy(t => t.ArmEnum).ToListAsync();
|
||||
|
||||
|
||||
var r1 = list.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).FirstOrDefault();
|
||||
var r2 = list.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).FirstOrDefault();
|
||||
|
||||
obj.R1 = r1.FullName;
|
||||
obj.R2 = r2.FullName;
|
||||
obj.SelectResult = r1.Id == entity.JudgeResultTaskId ? "R1" : "R2";
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
#region 通过链接跳转 2022 12-19
|
||||
|
||||
|
|
|
|||
|
|
@ -35,15 +35,19 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
Task<bool> UpdateAsync(TEntity entity, Expression<Func<TEntity, TEntity>> updateFactory,
|
||||
bool autoSave = false, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary> EF跟踪方式 会去数据库查询完整的实体,再更新部分字段 </summary>
|
||||
/// <summary> EF跟踪方式 会去数据库查询完整的实体,再更新部分字段 一定会产生更新sql </summary>
|
||||
Task<TEntity> UpdatePartialFromQueryAsync(Guid id, Expression<Func<TEntity, TEntity>> updateFactory,
|
||||
bool autoSave = false, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary> 稽查用这个 EF跟踪方式 先查询出来所有实体,再更新部分字段 </summary>
|
||||
/// <summary> 稽查用这个 EF跟踪方式 先查询出来所有实体,再更新部分字段 一定会产生更新sql</summary>
|
||||
Task UpdatePartialFromQueryAsync(Expression<Func<TEntity, bool>> updateFilter,
|
||||
Expression<Func<TEntity, TEntity>> updateFactory,
|
||||
bool autoSave = false, bool ignoreQueryFilter = false, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary> EF跟踪方式 会去数据库查询完整的实体,再更新部分字段 根据是否修改了字段ef 自动判断是否生成sql</summary>
|
||||
Task<TEntity> UpdatePartialFromEFAutoAsync(Guid id, Expression<Func<TEntity, TEntity>> updateFactory,
|
||||
bool autoSave = false, CancellationToken cancellationToken = default);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore;
|
|||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||
using Microsoft.EntityFrameworkCore.Query;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using System.Reflection;
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore
|
||||
{
|
||||
|
|
@ -167,6 +168,36 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
return searchEntity;
|
||||
}
|
||||
|
||||
public async Task<TEntity> UpdatePartialFromEFAutoAsync(Guid id, Expression<Func<TEntity, TEntity>> updateFactory,
|
||||
bool autoSave = false, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var searchEntity = await _dbSet.FindAsync(id);
|
||||
|
||||
if (searchEntity == null)
|
||||
{
|
||||
throw new BusinessValidationFailedException(I18n.T("Repository_UpdateError"));
|
||||
}
|
||||
|
||||
var list = ((MemberInitExpression)updateFactory.Body).Bindings.Select(mb => mb.Member.Name)
|
||||
.Select(propName => typeof(TEntity).GetProperty(propName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)).ToList();
|
||||
|
||||
Func<TEntity, TEntity> func = updateFactory.Compile();
|
||||
|
||||
TEntity applyObj = func(searchEntity);
|
||||
|
||||
foreach (PropertyInfo prop in list)
|
||||
{
|
||||
object value = prop.GetValue(applyObj);
|
||||
prop.SetValue(searchEntity, value);
|
||||
}
|
||||
|
||||
await SaveChangesAsync(autoSave);
|
||||
|
||||
return searchEntity;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task UpdatePartialFromQueryAsync(Expression<Func<TEntity, bool>> updateFilter,
|
||||
Expression<Func<TEntity, TEntity>> updateFactory,
|
||||
bool autoSave = false, bool ignoreQueryFilter = false, CancellationToken cancellationToken = default)
|
||||
|
|
@ -191,6 +222,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
|
||||
|
||||
|
||||
|
||||
/// <summary>EF跟踪方式 删除</summary>
|
||||
public async Task<bool> DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue