673 lines
28 KiB
C#
673 lines
28 KiB
C#
using IRaCIS.Application.Contracts;
|
||
using IRaCIS.Application.Interfaces;
|
||
using IRaCIS.Core.Domain.Share;
|
||
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using System.Text;
|
||
|
||
namespace IRaCIS.Core.Application.Service
|
||
{
|
||
/// <summary>
|
||
/// 数据字典-基础数据维护
|
||
/// </summary>
|
||
|
||
[ApiExplorerSettings(GroupName = "Common")]
|
||
public class DictionaryService(IRepository<Dictionary> _dicRepository,
|
||
IRepository<DoctorDictionary> _doctorDictionaryRepository,
|
||
IRepository<TrialDictionary> _trialDictionaryRepository,
|
||
IRepository<Doctor> _doctorRepository,
|
||
IRepository<Trial> _trialRepository,
|
||
IRepository<SystemCriterionDictionaryCode> _systemCriterionDictionaryCodeRepository,
|
||
IRepository<TrialCriterionDictionaryCode> _trialCriterionDictionaryCodeRepository,
|
||
IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository,
|
||
IRepository<ReadingSystemCriterionDictionary> _readingSystemCriterionDictionaryRepository,
|
||
IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository,
|
||
IRepository<ReadingQuestionCriterionSystem> _readingQuestionCriterionSystem,
|
||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrial, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IDictionaryService
|
||
{
|
||
|
||
/// <summary>
|
||
/// 添加bool
|
||
/// </summary>
|
||
/// <param name="addOrEditBasic"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IResponseOutput> AddBoolDic(AddOrEditBasicDic addOrEditBasic)
|
||
{
|
||
|
||
var entity = await _dicRepository.InsertFromDTOAsync(addOrEditBasic);
|
||
|
||
|
||
|
||
var child1 = entity.Clone();
|
||
child1.Id = Guid.Empty;
|
||
child1.Code = "true";
|
||
child1.ParentId = entity.Id;
|
||
|
||
entity.ChildList.Add(child1);
|
||
|
||
var child2 = entity.Clone();
|
||
child2.Id = Guid.Empty;
|
||
child2.Code = "false";
|
||
child2.ParentId = entity.Id;
|
||
|
||
entity.ChildList.Add(child2);
|
||
|
||
await _dicRepository.SaveChangesAsync();
|
||
return ResponseOutput.Ok(entity.Id.ToString());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取所有字典的Key
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<List<string>> GetAllDictionaryKey()
|
||
{
|
||
var result = await _dicRepository.Where(t => t.ParentId == null).OrderBy(x => x.Code).Select(x => x.Code).ToListAsync();
|
||
|
||
return result;
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加字典 的同时 一起添加子项 --New
|
||
/// </summary>
|
||
/// <param name="addBasicDicAndChild"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IResponseOutput> AddBasicDicAndChild(AddBasicDicAndChild addBasicDicAndChild)
|
||
{
|
||
var verifyExp1 = new EntityVerifyExp<Dictionary>()
|
||
{
|
||
VerifyExp = t => t.Code == addBasicDicAndChild.Code && t.ParentId == null,
|
||
VerifyMsg = $"已有{addBasicDicAndChild.Code}名称的字典",
|
||
IsVerify = true
|
||
};
|
||
|
||
|
||
if ((addBasicDicAndChild.DataTypeEnum == DicDataTypeEnum.Enum || addBasicDicAndChild.DataTypeEnum == DicDataTypeEnum.Bool))
|
||
{
|
||
if (addBasicDicAndChild.ChildList.GroupBy(t => t.Code).Where(g => g.Count() > 1).Any())
|
||
{
|
||
return ResponseOutput.NotOk(_localizer["Dictionary_RepeateCode"]);
|
||
}
|
||
}
|
||
|
||
var entity = await _dicRepository.InsertFromDTOAsync(addBasicDicAndChild, false, verifyExp1);
|
||
|
||
var childList = _mapper.Map<List<Dictionary>>(addBasicDicAndChild.ChildList);
|
||
|
||
foreach (var item in childList)
|
||
{
|
||
item.DataTypeEnum = addBasicDicAndChild.DataTypeEnum;
|
||
item.ParentId = entity.Id;
|
||
}
|
||
|
||
await _dicRepository.AddRangeAsync(childList);
|
||
|
||
await _dicRepository.SaveChangesAsync();
|
||
return ResponseOutput.Ok(entity.Id.ToString());
|
||
}
|
||
|
||
/// <summary>
|
||
/// New 查询条件
|
||
/// </summary>
|
||
/// <param name="inQuery"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<PageOutput<BasicDicView>> GetBasicDicList(BasicDicQuery inQuery)
|
||
{
|
||
|
||
var systemBasicDataQueryable = _dicRepository.Where(t => t.ParentId == null)
|
||
.WhereIf(!string.IsNullOrEmpty(inQuery.Code), t => t.Code.Contains(inQuery.Code!))
|
||
.WhereIf(!string.IsNullOrEmpty(inQuery.keyInfo), t => t.Description.Contains(inQuery.keyInfo!)
|
||
|| t.Code.Contains(inQuery.keyInfo!)
|
||
|| t.ChildList.Any(u => u.ValueCN.Contains(inQuery.keyInfo!))
|
||
|| t.ChildList.Any(u => u.Description.Contains(inQuery.keyInfo!))
|
||
|| t.ChildList.Any(u => u.Value.Contains(inQuery.keyInfo!)))
|
||
|
||
.WhereIf(inQuery.ConfigTypeId != null, t => t.ConfigTypeId == inQuery.ConfigTypeId!)
|
||
.WhereIf(inQuery.DataTypeEnum != null, t => t.DataTypeEnum == inQuery.DataTypeEnum)
|
||
.WhereIf(inQuery.DataTypeEnum == null, t => t.DataTypeEnum != DicDataTypeEnum.Config)
|
||
|
||
.ProjectTo<BasicDicView>(_mapper.ConfigurationProvider);
|
||
|
||
return await systemBasicDataQueryable.ToPagedListAsync(inQuery, new[] { nameof(BasicDicView.ConfigType), nameof(BasicDicView.ShowOrder) });
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 添加和编辑
|
||
/// </summary>
|
||
/// <param name="addOrEditBasic"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IResponseOutput> AddOrUpdateBasicDic(AddOrEditBasicDic addOrEditBasic)
|
||
{
|
||
var verifyExp1 = new EntityVerifyExp<Dictionary>()
|
||
{
|
||
VerifyExp = t => t.Code == addOrEditBasic.Code && t.ParentId == addOrEditBasic.ParentId,
|
||
//---------- $"已有{addOrEditBasic.Code}名称的字典"
|
||
VerifyMsg = _localizer["Dictionary_DictionaryName", addOrEditBasic.Code],
|
||
IsVerify = addOrEditBasic.ParentId == null
|
||
};
|
||
|
||
var verifyExp2 = new EntityVerifyExp<Dictionary>()
|
||
{
|
||
VerifyExp = t => t.Code == addOrEditBasic.Code && t.ParentId == addOrEditBasic.ParentId && t.Code == addOrEditBasic.Code,
|
||
|
||
VerifyMsg = _localizer["Dictionary_RepeateCode"],
|
||
|
||
IsVerify = addOrEditBasic.ParentId != null && (addOrEditBasic.DataTypeEnum == DicDataTypeEnum.Enum || addOrEditBasic.DataTypeEnum == DicDataTypeEnum.Bool)
|
||
};
|
||
|
||
|
||
|
||
if (addOrEditBasic.Id != null && addOrEditBasic.ParentId == null)
|
||
{
|
||
await _dicRepository.UpdatePartialFromQueryAsync(t => t.ParentId == addOrEditBasic.Id, c => new Dictionary() { DataTypeEnum = addOrEditBasic.DataTypeEnum });
|
||
|
||
//await _dicRepository.BatchUpdateNoTrackingAsync(t => t.ParentId == addOrEditBasic.Id, c => new Dictionary() { DataTypeEnum = addOrEditBasic.DataTypeEnum });
|
||
}
|
||
|
||
var entity = await _dicRepository.InsertOrUpdateAsync(addOrEditBasic, true, verifyExp1, verifyExp2);
|
||
|
||
|
||
|
||
await _dicRepository.SaveChangesAsync();
|
||
return ResponseOutput.Ok(entity.Id.ToString());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取子项数组
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<List<BasicDicView>> GetChildList(ChildInQuery inQuery)
|
||
{
|
||
return await _dicRepository.Where(t => t.ParentId == inQuery.ParentId)
|
||
.ProjectTo<BasicDicView>(_mapper.ConfigurationProvider).SortToListAsync(inQuery);
|
||
}
|
||
|
||
|
||
|
||
/// <summary> 删除字典数据 </summary>
|
||
[HttpDelete("{id:guid}")]
|
||
public async Task<IResponseOutput> DeleteDictionary(Guid id)
|
||
{
|
||
if (await _readingCriterionDictionaryRepository.AnyAsync(x => x.DictionaryId == id))
|
||
{
|
||
await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.DictionaryId == id);
|
||
//---当前字典在标准中被引用,不允许删除!
|
||
//return ResponseOutput.NotOk(_localizer["Dictionary_DictionaryDeletion"]);
|
||
}
|
||
|
||
if (await _readingTrialCriterionDictionaryRepository.AnyAsync(x => x.DictionaryId == id))
|
||
{
|
||
await _readingTrialCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.DictionaryId == id);
|
||
//---当前字典在标准中被引用,不允许删除!
|
||
//return ResponseOutput.NotOk(_localizer["Dictionary_DictionaryDeletion"]);
|
||
}
|
||
|
||
if (await _dicRepository.AnyAsync(t => t.ParentId == id))
|
||
{
|
||
//---有子项数据,不允许直接删除!
|
||
return ResponseOutput.NotOk(_localizer["Dictionary_SubitemDeletion"]);
|
||
}
|
||
|
||
if ((await _doctorDictionaryRepository.AnyAsync(t => t.DictionaryId == id)) ||
|
||
(await _doctorRepository.AnyAsync(t => t.SpecialityId == id || t.PositionId == id || t.DepartmentId == id || t.RankId == id))
|
||
|
||
)
|
||
{
|
||
//---当前条目已经在阅片人的简历中被引用。
|
||
return ResponseOutput.NotOk(_localizer["Dictionary_ResumeReference"]);
|
||
}
|
||
|
||
if (await _trialDictionaryRepository.AnyAsync(t => t.DictionaryId == id) ||
|
||
await _trialRepository.AnyAsync(t => t.ReviewModeId == id))
|
||
{
|
||
//---当前条目已经在项目信息中被引用。
|
||
return ResponseOutput.NotOk(_localizer["Dictionary_ProjectReference"]);
|
||
}
|
||
|
||
|
||
var success = await _dicRepository.BatchDeleteNoTrackingAsync(t => t.Id == id);
|
||
return ResponseOutput.Result(success);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 传递父亲 code 字符串 数组 返回多个下拉框数据
|
||
/// </summary>
|
||
/// <param name="searchArray"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Dictionary<string, List<BasicDicSelectCopy>>> GetBasicDataSelect(string[] searchArray)
|
||
{
|
||
|
||
var searchList = await _dicRepository.Where(t => searchArray.Contains(t.Parent.Code) && t.ParentId != null && t.IsEnable).ProjectTo<BasicDicSelectCopy>(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).ToListAsync();
|
||
|
||
return searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据父亲Code 获取单个下拉框数据
|
||
/// </summary>
|
||
/// <param name="searchKey"></param>
|
||
/// <returns></returns>
|
||
public async Task<List<BasicDicSelect>> GetBasicDataSelect(string searchKey)
|
||
{
|
||
var searchList = await _dicRepository.Where(t => t.Parent.Code == searchKey && t.ParentId != null && t.IsEnable).ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).ToListAsync();
|
||
|
||
return searchList;
|
||
}
|
||
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 根据父亲字典分组 获取子项
|
||
/// </summary>
|
||
/// <param name="searchKey"></param>
|
||
/// <returns></returns>
|
||
public async Task<List<BasicDicSelect>> GetBasicConfigSelect(string searchKey)
|
||
{
|
||
var searchList = await _dicRepository.Where(t => t.ConfigDictionary.Code == searchKey && t.ParentId == null && t.IsEnable).ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
|
||
|
||
return searchList;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取标准字典
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<List<GetCriterionDictionaryListOutDto>> GetCriterionDictionaryList(GetCriterionDictionaryListInDto inDto)
|
||
{
|
||
var criterionCodes = await _systemCriterionDictionaryCodeRepository.Where(x => x.SystemCriterionId == inDto.SystemCriterionId).ToListAsync();
|
||
|
||
var parentCodes = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.SystemCriterionId).Select(x => x.ParentCode).ToListAsync();
|
||
|
||
|
||
var codes = criterionCodes.Select(x => x.Code).ToList();
|
||
|
||
var dictionaryList = await _dicRepository.Where(x => codes.Contains(x.Code) && x.ParentId == null)
|
||
.OrderBy(x => x.ShowOrder).Select(x => new GetCriterionDictionaryListOutDto()
|
||
{
|
||
Code = x.Code,
|
||
ShowOrder = x.ShowOrder,
|
||
Description = x.Description
|
||
}).ToListAsync();
|
||
|
||
dictionaryList.ForEach(x =>
|
||
{
|
||
x.Count = parentCodes.Count(y => y == x.Code);
|
||
x.Id = criterionCodes.Where(y => y.Code == x.Code).Select(x => x.Id).FirstOrDefault();
|
||
});
|
||
|
||
return dictionaryList;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取标准字典
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<List<GetCriterionDictionaryListOutDto>> GetTrialCriterionDictionaryList(GetTrialCriterionDictionaryListInDto inDto)
|
||
{
|
||
var criterionCodes = await _trialCriterionDictionaryCodeRepository.Where(x => x.TrialCriterionId == inDto.TrialCriterionId).ToListAsync();
|
||
|
||
var parentCodes = await _readingTrialCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialCriterionId).Select(x => x.ParentCode).ToListAsync();
|
||
|
||
|
||
var codes = criterionCodes.Select(x => x.Code).ToList();
|
||
|
||
var dictionaryList = await _dicRepository.Where(x => codes.Contains(x.Code) && x.ParentId == null)
|
||
.OrderBy(x => x.ShowOrder).Select(x => new GetCriterionDictionaryListOutDto()
|
||
{
|
||
Code = x.Code,
|
||
ShowOrder = x.ShowOrder,
|
||
Description = x.Description
|
||
}).ToListAsync();
|
||
|
||
dictionaryList.ForEach(x =>
|
||
{
|
||
x.Count = parentCodes.Count(y => y == x.Code);
|
||
x.Id = criterionCodes.Where(y => y.Code == x.Code).Select(x => x.Id).FirstOrDefault();
|
||
});
|
||
|
||
return dictionaryList;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取标准指定字典
|
||
/// </summary>
|
||
/// <param name="inDto"></param>
|
||
/// <returns></returns>
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
public async Task<Dictionary<string, List<BasicDicSelect>>> GetCriterionDictionary(GetCriterionDictionaryInDto inDto)
|
||
{
|
||
var searchList = await _dicRepository.Where(t => t.ParentId != null && t.IsEnable)
|
||
.WhereIf(!inDto.DictionaryCode.IsNullOrEmpty(), x => x.Parent.Code == inDto.DictionaryCode)
|
||
.WhereIf(inDto.DictionaryCodeList.Count() > 0, x => inDto.DictionaryCodeList.Contains(x.Parent.Code))
|
||
.ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).ToListAsync();
|
||
|
||
var result = searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
|
||
if (inDto.ReadingCriterionId == null)
|
||
{
|
||
return result;
|
||
}
|
||
else
|
||
{
|
||
List<string> selectCode = new List<string>();
|
||
List<BasicDicSelect> criterionDictionList = new List<BasicDicSelect>();
|
||
|
||
var isSystemCriterion = await _readingQuestionCriterionSystem.AnyAsync(x => x.Id == inDto.ReadingCriterionId);
|
||
if (isSystemCriterion)
|
||
{
|
||
selectCode = await _systemCriterionDictionaryCodeRepository.Where(x => x.SystemCriterionId == inDto.ReadingCriterionId).Select(x => x.Code).ToListAsync();
|
||
|
||
criterionDictionList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.ReadingCriterionId).Select(x => new BasicDicSelect()
|
||
{
|
||
ChildGroup = x.Dictionary.ChildGroup,
|
||
Code = x.Dictionary.Code,
|
||
DataTypeEnum = x.Dictionary.DataTypeEnum,
|
||
ShowOrder = x.Dictionary.ShowOrder,
|
||
ParentCode = x.ParentCode,
|
||
CrterionDictionaryGroup = x.CrterionDictionaryGroup,
|
||
Id = x.DictionaryId,
|
||
ParentId = x.Dictionary.ParentId,
|
||
Value = x.Dictionary.Value,
|
||
ValueCN = x.Dictionary.ValueCN
|
||
|
||
}).ToListAsync();
|
||
}
|
||
else
|
||
{
|
||
selectCode = await _trialCriterionDictionaryCodeRepository.Where(x => x.TrialCriterionId == inDto.ReadingCriterionId).Select(x => x.Code).ToListAsync();
|
||
|
||
criterionDictionList = await _readingTrialCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.ReadingCriterionId).Select(x => new BasicDicSelect()
|
||
{
|
||
ChildGroup = x.Dictionary.ChildGroup,
|
||
Code = x.Dictionary.Code,
|
||
DataTypeEnum = x.Dictionary.DataTypeEnum,
|
||
ShowOrder = x.Dictionary.ShowOrder,
|
||
ParentCode = x.ParentCode,
|
||
CrterionDictionaryGroup = x.CrterionDictionaryGroup,
|
||
Id = x.DictionaryId,
|
||
ParentId = x.Dictionary.ParentId,
|
||
Value = x.Dictionary.Value,
|
||
ValueCN = x.Dictionary.ValueCN
|
||
|
||
}).ToListAsync();
|
||
}
|
||
|
||
|
||
var criterionCode = await _dicRepository.Where(x => x.ConfigDictionary.Code == "Reading_eCRF_Criterion").Select(x => x.Code).ToListAsync();
|
||
|
||
|
||
foreach (var item in criterionCode)
|
||
{
|
||
if (result.ContainsKey(item))
|
||
{
|
||
result[item] = new List<BasicDicSelect>();
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
criterionDictionList = criterionDictionList.Where(x => selectCode.Contains(x.ParentCode)).ToList();
|
||
|
||
var criterionDic = criterionDictionList.GroupBy(x => x.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
|
||
|
||
foreach (var item in criterionDic)
|
||
{
|
||
if (result.ContainsKey(item.Key))
|
||
{
|
||
result[item.Key] = item.Value;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取所有下拉框 枚举 bool 数据
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[AllowAnonymous]
|
||
public async Task<Dictionary<string, List<BasicDicSelect>>> GetBasicDataAllSelect(GetBasicDataAllSelectInDto inDto)
|
||
{
|
||
var searchList = await _dicRepository.Where(t => t.ParentId != null && t.IsEnable).ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).ToListAsync();
|
||
|
||
var result = searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
|
||
|
||
if (inDto.TrialReadingCriterionId == null && inDto.SystemReadingCriterionId == null)
|
||
{
|
||
return await ChangeTrialObjectNameList(result,inDto.TrialId);
|
||
}
|
||
else if (inDto.TrialReadingCriterionId != null)
|
||
{
|
||
var trialCriterionType = await _readingQuestionCriterionTrial.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstOrDefaultAsync();
|
||
if (trialCriterionType == CriterionType.SelfDefine)
|
||
{
|
||
return await ChangeTrialObjectNameList(result, inDto.TrialId);
|
||
}
|
||
|
||
|
||
List<string> selectCode = await _trialCriterionDictionaryCodeRepository.Where(x => x.TrialCriterionId == inDto.TrialReadingCriterionId).Select(x => x.Code).ToListAsync();
|
||
|
||
|
||
var criterionCode = await _dicRepository.Where(x => x.ConfigDictionary.Code == "Reading_eCRF_Criterion").Select(x => x.Code).ToListAsync();
|
||
|
||
|
||
foreach (var item in criterionCode)
|
||
{
|
||
if (result.ContainsKey(item))
|
||
{
|
||
result[item] = new List<BasicDicSelect>();
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
var criterionDictionList = await _readingTrialCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialReadingCriterionId).Select(x => new BasicDicSelect()
|
||
{
|
||
ChildGroup = x.Dictionary.ChildGroup,
|
||
Code = x.Dictionary.Code,
|
||
Description = x.Dictionary.Description,
|
||
DataTypeEnum = x.Dictionary.DataTypeEnum,
|
||
ShowOrder = x.Dictionary.ShowOrder,
|
||
ParentCode = x.ParentCode,
|
||
Id = x.DictionaryId,
|
||
CrterionDictionaryGroup = x.CrterionDictionaryGroup,
|
||
ParentId = x.Dictionary.ParentId,
|
||
Value = x.Dictionary.Value,
|
||
ValueCN = x.Dictionary.ValueCN
|
||
|
||
}).ToListAsync();
|
||
|
||
criterionDictionList = criterionDictionList.Where(x => selectCode.Contains(x.ParentCode)).ToList();
|
||
|
||
var criterionDic = criterionDictionList.GroupBy(x => x.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
|
||
|
||
foreach (var item in criterionDic)
|
||
{
|
||
result[item.Key] = item.Value;
|
||
}
|
||
|
||
return await ChangeTrialObjectNameList(result, inDto.TrialId);
|
||
}
|
||
else
|
||
{
|
||
List<string> selectCode = await _systemCriterionDictionaryCodeRepository.Where(x => x.SystemCriterionId == inDto.SystemReadingCriterionId).Select(x => x.Code).ToListAsync();
|
||
|
||
|
||
var criterionCode = await _dicRepository.Where(x => x.ConfigDictionary.Code == "Reading_eCRF_Criterion").Select(x => x.Code).ToListAsync();
|
||
|
||
|
||
foreach (var item in criterionCode)
|
||
{
|
||
if (result.ContainsKey(item))
|
||
{
|
||
result[item] = new List<BasicDicSelect>();
|
||
}
|
||
}
|
||
|
||
var criterionDictionList = await _readingSystemCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.SystemReadingCriterionId).Select(x => new BasicDicSelect()
|
||
{
|
||
ChildGroup = x.Dictionary.ChildGroup,
|
||
Code = x.Dictionary.Code,
|
||
Description = x.Dictionary.Description,
|
||
DataTypeEnum = x.Dictionary.DataTypeEnum,
|
||
ShowOrder = x.Dictionary.ShowOrder,
|
||
ParentCode = x.ParentCode,
|
||
Id = x.DictionaryId,
|
||
CrterionDictionaryGroup = x.CrterionDictionaryGroup,
|
||
ParentId = x.Dictionary.ParentId,
|
||
Value = x.Dictionary.Value,
|
||
ValueCN = x.Dictionary.ValueCN
|
||
|
||
}).ToListAsync();
|
||
|
||
criterionDictionList = criterionDictionList.Where(x => selectCode.Contains(x.ParentCode)).ToList();
|
||
|
||
var criterionDic = criterionDictionList.GroupBy(x => x.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
|
||
|
||
foreach (var item in criterionDic)
|
||
{
|
||
result[item.Key] = item.Value;
|
||
}
|
||
|
||
return await ChangeTrialObjectNameList(result, inDto.TrialId);
|
||
|
||
}
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 替换字典中的项目名称为试验对象名称 --New
|
||
/// </summary>
|
||
/// <param name="data"></param>
|
||
/// <param name="trialId"></param>
|
||
/// <returns></returns>
|
||
private async Task<Dictionary<string, List<BasicDicSelect>>> ChangeTrialObjectNameList(Dictionary<string, List<BasicDicSelect>> data,Guid? trialId)
|
||
{
|
||
if (!trialId.HasValue)
|
||
{
|
||
return data;
|
||
}
|
||
|
||
|
||
// 查询映射集合
|
||
var trialObjectNameList = await _trialRepository
|
||
.Where(x => x.Id == trialId)
|
||
.Select(x => x.TrialObjectNameList)
|
||
.FirstOrDefaultAsync();
|
||
|
||
// 无映射数据直接返回
|
||
if (trialObjectNameList == null || !trialObjectNameList.Any())
|
||
{
|
||
return data;
|
||
}
|
||
|
||
|
||
// 构建映射字典,过滤空名称,避免无效替换
|
||
var replaceDict = trialObjectNameList
|
||
.Where(m => !string.IsNullOrEmpty(m.Name))
|
||
.ToDictionary(m => m.Name, m => m.TrialName);
|
||
|
||
// 遍历替换
|
||
foreach (var (_, selectList) in data)
|
||
{
|
||
foreach (var selectItem in selectList)
|
||
{
|
||
// 替换Value,判null保护
|
||
if (selectItem.Value != null)
|
||
{
|
||
string tempVal = selectItem.Value;
|
||
foreach (var (oldStr, newStr) in replaceDict)
|
||
{
|
||
tempVal = tempVal.Replace(oldStr, newStr);
|
||
}
|
||
selectItem.Value = tempVal;
|
||
}
|
||
|
||
// 替换中文名称ValueCN
|
||
if (selectItem.ValueCN != null)
|
||
{
|
||
string tempCn = selectItem.ValueCN;
|
||
foreach (var (oldStr, newStr) in replaceDict)
|
||
{
|
||
tempCn = tempCn.Replace(oldStr, newStr);
|
||
}
|
||
selectItem.ValueCN = tempCn;
|
||
}
|
||
}
|
||
}
|
||
|
||
return data;
|
||
}
|
||
|
||
#region 稽查相关
|
||
|
||
/// <summary>
|
||
/// 获取是和否
|
||
/// </summary>
|
||
/// <param name="value"></param>
|
||
/// <returns></returns>
|
||
public async Task<string> GetBoolValueState(bool value)
|
||
{
|
||
return await _dicRepository.Where(t => t.Parent.Code == "YesOrNo" && t.Code == value.ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取审核状态
|
||
/// </summary>
|
||
/// <typeparam name="T"></typeparam>
|
||
/// <param name="trial"></param>
|
||
/// <param name="childCode"></param>
|
||
/// <returns></returns>
|
||
public async Task<string> GetAuditState<T>(Guid trial, T childCode)
|
||
{
|
||
var QCProcessEnum = _trialRepository.Where(x => x.Id == trial).Select(x => x.QCProcessEnum).FirstOrDefault();
|
||
switch (QCProcessEnum)
|
||
{
|
||
|
||
|
||
case TrialQCProcess.SingleAudit:
|
||
return await _dicRepository.Where(t => t.Parent.Code == "AuditStatePE" && t.Code == Convert.ToInt32(childCode).ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty;
|
||
|
||
case TrialQCProcess.DoubleAudit:
|
||
return await _dicRepository.Where(t => t.Parent.Code == "AuditStateRC" && t.Code == Convert.ToInt32(childCode).ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty;
|
||
default:
|
||
return string.Empty;
|
||
|
||
}
|
||
}
|
||
|
||
public async Task<string> GetBasicDataTranslateItem<T>(string parentCode, T childCode)
|
||
{
|
||
return await _dicRepository.Where(t => t.Parent.Code == parentCode && t.Code == Convert.ToInt32(childCode).ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty;
|
||
}
|
||
|
||
|
||
#endregion
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
}
|