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

Uat_IRC_Net8
hang 2025-07-23 09:28:47 +08:00
commit ffe6a0a4a9
2 changed files with 151 additions and 19 deletions

View File

@ -354,7 +354,14 @@ namespace IRaCIS.Core.Application.Service
[HttpPost("{id:guid}")]
public async Task<IResponseOutput> DeleteCustomTag(Guid id)
{
if (await _readingTaskQuestionMarkRepository.AnyAsync(t => (t.Id == id || t.MarkId == id) && t.QuestionId != null))
{
throw new BusinessValidationFailedException(_localizer["ReadingCustomTag_CannotDelete"]);
}
var success = await _readingTaskQuestionMarkRepository.DeleteFromQueryAsync(t => t.Id == id||t.MarkId==id, true);
return ResponseOutput.Ok();
}
@ -2189,28 +2196,123 @@ namespace IRaCIS.Core.Application.Service
async Task addOrEditmark(List<QuestionMarkInfo> addOrUpdatemarkList)
{
#region 老的代码
//var markids = addOrUpdatemarkList.Select(x => x.MarkId).Where(x => x != null).Distinct().ToList();
var markids= addOrUpdatemarkList.Select(x => x.MarkId).Where(x => x != null).Distinct().ToList();
//var markQuestionIds = addOrUpdatemarkList.Select(y => (Guid?)y.QuestionId).ToList();
var markQuestionIds= addOrUpdatemarkList.Select(y => (Guid?)y.QuestionId).ToList();
// 绑定的历史标记的话 相当于要把历史标记改为现在的标记 先删再添加 得到的结果一样
await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => markids.Contains(x.MarkId)&&x.QuestionId==null );
//// 绑定的历史标记的话 相当于要把历史标记改为现在的标记 先删再添加 得到的结果一样
//await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => markids.Contains(x.MarkId) && x.QuestionId == null);
await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && markQuestionIds.Contains(x.QuestionId));
//// 这里还不能直接删除 因为可能该问题绑定的原标记为a 现在新绑定的标记要为b 那么就需要把原标记a的绑定关系删除
var datetime = DateTime.Now;
//var oldMark = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && markQuestionIds.Contains(x.QuestionId) && x.MarkId != null).ToListAsync();
var markList = _mapper.Map<List<QuestionMarkInfo>, List<ReadingTaskQuestionMark>>(addOrUpdatemarkList);
markList.ForEach(x =>
//// 这里稽查又要记录为新增 只能把原标记记录为先删除再添加 不然稽查又对不上
//List<ReadingTaskQuestionMark> oldAddMark = new List<ReadingTaskQuestionMark>();
//foreach (var item in oldMark)
//{
// if (addOrUpdatemarkList.Any(x => x.QuestionId == item.QuestionId && x.MarkId != item.MarkId))
// {
// var olditem = item.Clone();
// olditem.QuestionId = null;
// olditem.TableQuestionId = null;
// olditem.RowId = null;
// olditem.RowIndex = null;
// oldAddMark.Add(olditem);
// }
//}
//await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && markQuestionIds.Contains(x.QuestionId));
//var datetime = DateTime.Now;
//var markList = _mapper.Map<List<QuestionMarkInfo>, List<ReadingTaskQuestionMark>>(addOrUpdatemarkList);
//markList.ForEach(x =>
//{
// x.Id = NewId.NextGuid();
// x.VisitTaskId = inDto.VisitTaskId;
// x.CreateTime = datetime;
// x.FristAddTaskId = questionMarkList.Where(y => y.QuestionId == x.QuestionId).Select(x => x.FristAddTaskId).FirstOrDefault() ?? inDto.VisitTaskId;
//});
//// 原来移除关系的 已经删除 这里要添加 为什么要先删再加 因为稽查需要记录 稽查的记录方式为Add
//oldAddMark.AddRange(markList);
//await _readingTaskQuestionMarkRepository.AddRangeAsync(oldAddMark);
#endregion
foreach (var item in addOrUpdatemarkList)
{
x.Id = NewId.NextGuid();
x.VisitTaskId = inDto.VisitTaskId;
x.CreateTime = datetime;
x.FristAddTaskId = questionMarkList.Where(y => y.QuestionId == x.QuestionId).Select(x => x.FristAddTaskId).FirstOrDefault() ?? inDto.VisitTaskId;
});
await _readingTaskQuestionMarkRepository.AddRangeAsync(markList);
var oldMark = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.QuestionId == item.QuestionId).FirstOrDefaultAsync();
if (oldMark != null)
{
// 这种情况要先移除原来标记的绑定关系
if (oldMark.MarkId != item.MarkId)
{
await _readingTaskQuestionMarkRepository.UpdatePartialFromQueryAsync(x => x.Id == oldMark.Id, x => new ReadingTaskQuestionMark()
{
QuestionId = null,
TableQuestionId = null,
RowId = null,
RowIndex = null,
});
var newMark = _mapper.Map<QuestionMarkInfo, ReadingTaskQuestionMark>(item);
newMark.Id = NewId.NextGuid();
newMark.VisitTaskId = inDto.VisitTaskId;
newMark.FristAddTaskId = inDto.VisitTaskId;
await _readingTaskQuestionMarkRepository.AddAsync(newMark);
}
else
{
// 这种情况直接更新
await _readingTaskQuestionMarkRepository.UpdatePartialFromQueryAsync(x => x.Id == oldMark.Id, x => new ReadingTaskQuestionMark()
{
MeasureData = item.MeasureData ?? string.Empty,
OtherMeasureData = item.OtherMeasureData ?? string.Empty,
PicturePath = item.PicturePath ?? string.Empty,
OtherPicturePath = item.OtherPicturePath ?? string.Empty,
MarkTool = item.MarkTool ?? string.Empty,
});
}
}
else
{
// 这种情况可能是绑定历史的标记
if (item.MarkId != null && (await _readingTaskQuestionMarkRepository.AnyAsync(x => x.VisitTaskId == inDto.VisitTaskId&& x.QuestionId == null && x.MarkId == item.MarkId)))
{
var oldMarkItem = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.MarkId == item.MarkId && x.QuestionId == null).FirstOrDefaultAsync();
await _readingTaskQuestionMarkRepository.UpdatePartialFromQueryAsync(x => x.Id == oldMarkItem.Id, x => new ReadingTaskQuestionMark()
{
QuestionId = item.QuestionId,
TableQuestionId = item.TableQuestionId,
RowId = item.RowId,
MeasureData = item.MeasureData ?? string.Empty,
OtherMeasureData = item.OtherMeasureData ?? string.Empty,
PicturePath = item.PicturePath ?? string.Empty,
OtherPicturePath = item.OtherPicturePath ?? string.Empty,
MarkTool = item.MarkTool ?? string.Empty,
});
}
else
{
var newMark = _mapper.Map<QuestionMarkInfo, ReadingTaskQuestionMark>(item);
newMark.Id = NewId.NextGuid();
newMark.VisitTaskId = inDto.VisitTaskId;
newMark.FristAddTaskId = inDto.VisitTaskId;
await _readingTaskQuestionMarkRepository.AddAsync(newMark);
}
}
}
}

View File

@ -3168,11 +3168,26 @@ namespace IRaCIS.Core.Infra.EFCore.Common
generalId = IdentifierHelper.CreateGuid(entity.VisitTaskId.ToString(), entity.QuestionId.ToString(), entity.RowId.ToString(), entity.TableQuestionId.ToString(), "ReadingTaskQuestionMark");
}
bool isDistinctionInterface = true;
var customPrefix=string.Empty;
// 对于一个标记绑定两个问题的不计稽查
var exixtsMark = await _dbContext.ReadingTaskQuestionMark.AnyAsync(t => t.MarkId == entity.MarkId);
// 自定义表格 和问题添加标记的时候 要记录为 添加标记
if ((_userInfo.RequestUrl == "SaveTaskQuestion/-10"
|| _userInfo.RequestUrl == "saveTableQuestionMark/-10") && type== "Add"&&!exixtsMark)
{
isDistinctionInterface = false;
customPrefix = "ReadingImageTask/submitCustomTag";
}
await InsertInspection<ReadingTaskQuestionMark>(entity, type, x => new InspectionConvertDTO()
{
VisitTaskId = entity.VisitTaskId,
GeneralId = generalId,
ObjectRelationParentId = entity.VisitTaskId,
IsDistinctionInterface = isDistinctionInterface,
}, new
{
@ -3181,7 +3196,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
TableQuestionName = tableQuestionName,
Answer = answer,
LiverSegmentation = liverSegmentation,
}, _userInfo.AuditIdentification);
},string.Empty, customPrefix);
}
//保存影像质量 多条记录,只记录一条稽查
@ -3996,8 +4011,10 @@ namespace IRaCIS.Core.Infra.EFCore.Common
/// <param name="type">类型</param>
/// <param name="expression">表达式</param>
/// <param name="otherItem">其他对象</param>
/// <param name="auditIdentification">额外标识</param>
/// <param name="customPrefix">自定义前缀</param>
/// <returns></returns>
public async Task InsertInspection<T>(T entityObj, string type, Expression<Func<T, InspectionConvertDTO>> expression = null, object otherItem = null, string auditIdentification = "") where T : Entity
public async Task InsertInspection<T>(T entityObj, string type, Expression<Func<T, InspectionConvertDTO>> expression = null, object otherItem = null, string auditIdentification = "", string customPrefix = "") where T : Entity
{
InspectionConvertDTO inspection = new InspectionConvertDTO();
@ -4014,7 +4031,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var generalId = (inspection.GeneralId != null && inspection.GeneralId != Guid.Empty) ? inspection.GeneralId : entityObj.Id;
inspection.GeneralId = generalId;
inspection.Identification = GetInspectionRecordIdentification(entityObj, type, inspection.IsDistinctionInterface, inspection.IsSelfDefine, auditIdentification) + inspection.ExtraIndentification;
inspection.Identification = GetInspectionRecordIdentification(entityObj, type, inspection.IsDistinctionInterface, inspection.IsSelfDefine, auditIdentification, customPrefix) + inspection.ExtraIndentification;
//将实体对象属性 映射到稽查实体
MapEntityPropertyToAuditEntity(entityObj, inspection);
@ -4224,7 +4241,15 @@ namespace IRaCIS.Core.Infra.EFCore.Common
/// 获取稽查记录的标识符 部分业务会进行特殊处理
/// </summary>
/// <returns></returns>
public string GetInspectionRecordIdentification<T>(T entityObj, string type, bool IsDistinctionInterface = true, bool isSelfDefine = false, string auditIdentification = "")
/// <typeparam name="T"></typeparam>
/// <param name="entityObj"></param>
/// <param name="type"></param>
/// <param name="IsDistinctionInterface"></param>
/// <param name="isSelfDefine"></param>
/// <param name="auditIdentification"></param>
/// <param name="customPrefix">自定义前缀 某些接口需要用同一个稽查</param>
/// <returns></returns>
public string GetInspectionRecordIdentification<T>(T entityObj, string type, bool IsDistinctionInterface = true, bool isSelfDefine = false, string auditIdentification = "",string customPrefix="")
{
//var entityType = _dbContext.Model.FindEntityType(entityObj.GetType());
//var tableName = entityType.GetTableName();
@ -4271,6 +4296,11 @@ namespace IRaCIS.Core.Infra.EFCore.Common
result = result + "/" + auditIdentification;
}
if (customPrefix.IsNotNullOrEmpty())
{
result = customPrefix + "/" + result;
}
return result;
}