196 lines
7.2 KiB
C#
196 lines
7.2 KiB
C#
|
|
using IRaCIS.Core.Domain.Models;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using IRaCIS.Core.Application.Interfaces;
|
|
using IRaCIS.Core.Application.ViewModel;
|
|
using IRaCIS.Core.Infra.EFCore.Common;
|
|
using MassTransit;
|
|
|
|
namespace IRaCIS.Core.Application.Service
|
|
{
|
|
/// <summary>
|
|
/// 医学审核问题
|
|
/// </summary>
|
|
[ ApiExplorerSettings(GroupName = "Reading")]
|
|
public class ReadingMedicineQuestionService: BaseService
|
|
{
|
|
|
|
private readonly IRepository<ReadingMedicineTrialQuestion> _readingMedicineTrialQuestionRepository;
|
|
private readonly IRepository<ReadingMedicineSystemQuestion> _readingMedicineSystemQuestionRepository;
|
|
|
|
public ReadingMedicineQuestionService(
|
|
IRepository<ReadingMedicineTrialQuestion> readingMedicineTrialQuestionRepository,
|
|
IRepository<ReadingMedicineSystemQuestion> readingMedicineSystemQuestionRepository
|
|
)
|
|
{
|
|
this._readingMedicineTrialQuestionRepository = readingMedicineTrialQuestionRepository;
|
|
this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取系统的医学审核问题
|
|
/// </summary>
|
|
/// <param name="inDto"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<List<ReadingMedicineSystemQuestionView>> GetReadingMedicineSystemQuestionList(ReadingMedicineSystemQuestionQuery inDto)
|
|
{
|
|
var query = _readingMedicineSystemQuestionRepository.AsQueryable()
|
|
.WhereIf(!inDto.TypeValue.IsNullOrEmpty(), x => x.TypeValue.Contains(inDto.TypeValue))
|
|
.WhereIf(!inDto.ParentTriggerValue.IsNullOrEmpty(), x => x.ParentTriggerValue.Contains(inDto.ParentTriggerValue))
|
|
.WhereIf(!inDto.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inDto.QuestionName))
|
|
.WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type.Contains(inDto.Type))
|
|
.ProjectTo<ReadingMedicineSystemQuestionView>(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder);
|
|
return await query.ToListAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新增或修改系统医学审核问题
|
|
/// </summary>
|
|
/// <param name="addOrEditReadingMedicineSystemQuestion"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<IResponseOutput> AddOrUpdateReadingMedicineSystemQuestion(ReadingMedicineSystemQuestionAddOrEdit addOrEditReadingMedicineSystemQuestion)
|
|
{
|
|
var entity = await _readingMedicineSystemQuestionRepository.InsertOrUpdateAsync(addOrEditReadingMedicineSystemQuestion);
|
|
await _readingMedicineSystemQuestionRepository.SaveChangesAsync();
|
|
return ResponseOutput.Ok(entity.Id.ToString());
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 删除系统的医学审核问题
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpDelete("{id:guid}")]
|
|
public async Task<IResponseOutput> DeleteReadingMedicineSystemQuestion(Guid id)
|
|
{
|
|
if (await _readingMedicineSystemQuestionRepository.AnyAsync(x => x.ParentId == id))
|
|
{
|
|
return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题");
|
|
}
|
|
var success = await _readingMedicineSystemQuestionRepository.DeleteFromQueryAsync(t => t.Id == id);
|
|
var result = await _readingMedicineSystemQuestionRepository.SaveChangesAsync();
|
|
return ResponseOutput.Result(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取项目的医学审核问题
|
|
/// </summary>
|
|
/// <param name="inDto"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<List<ReadingMedicineTrialQuestionView>> GetReadingMedicineTrialQuestionList(ReadingMedicineTrialQuestionQuery inDto)
|
|
{
|
|
var query = _readingMedicineTrialQuestionRepository.AsQueryable()
|
|
.Where(x=>x.TrialId==inDto.TrialId)
|
|
.WhereIf(!inDto.TypeValue.IsNullOrEmpty(), x => x.TypeValue.Contains(inDto.TypeValue))
|
|
.WhereIf(!inDto.ParentTriggerValue.IsNullOrEmpty(), x => x.ParentTriggerValue.Contains(inDto.ParentTriggerValue))
|
|
.WhereIf(!inDto.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inDto.QuestionName))
|
|
.WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type.Contains(inDto.Type))
|
|
.ProjectTo<ReadingMedicineTrialQuestionView>(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder);
|
|
return await query.ToListAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新增或修改项目医学审核问题
|
|
/// </summary>
|
|
/// <param name="addOrEditReadingMedicineTrialQuestion"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<IResponseOutput> AddOrUpdateReadingMedicineTrialQuestion(ReadingMedicineTrialQuestionAddOrEdit addOrEditReadingMedicineTrialQuestion)
|
|
{
|
|
var entity = await _readingMedicineTrialQuestionRepository.InsertOrUpdateAsync(addOrEditReadingMedicineTrialQuestion);
|
|
await _readingMedicineTrialQuestionRepository.SaveChangesAsync();
|
|
return ResponseOutput.Ok(entity.Id.ToString());
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取项目的其他医学审核问题
|
|
/// </summary>
|
|
/// <param name="inDto"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<List<GetReadingMedicineTrialOtherQuestionOutDto>> GetReadingMedicineTrialOtherQuestion(GetReadingMedicineTrialOtherQuestionInDto inDto)
|
|
{
|
|
var types = new List<string>()
|
|
{
|
|
"select","radio"
|
|
};
|
|
|
|
var questionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId)
|
|
.Where(x => types.Contains(x.Type))
|
|
.WhereIf(inDto.Id != null, x => x.Id != inDto.Id && x.ParentId != inDto.Id)
|
|
.WhereIf(inDto.ShowOrder != null, x => x.ShowOrder <inDto.ShowOrder)
|
|
.Select(x => new GetReadingMedicineTrialOtherQuestionOutDto()
|
|
{
|
|
Id = x.Id,
|
|
QuestionName = x.QuestionName,
|
|
}).ToListAsync();
|
|
|
|
return questionList;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 从系统里面选择问题添加到项目里面
|
|
/// </summary>
|
|
/// <param name="inDto"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<IResponseOutput> AddTrialDataFromSystem(AddTrialDataFromSystemInDto inDto)
|
|
{
|
|
var needList = _readingMedicineSystemQuestionRepository.Where(x => inDto.SystemQuestionIds.Contains(x.Id))
|
|
.Select(x => new ReadingMedicineTrialQuestion()
|
|
{
|
|
Id = NewId.NextGuid(),
|
|
ShowOrder = x.ShowOrder,
|
|
IsEnable = x.IsEnable,
|
|
IsRequired = x.IsRequired,
|
|
QuestionName = x.QuestionName,
|
|
Type = x.Type,
|
|
TypeValue = x.TypeValue,
|
|
TrialId=inDto.TrialId,
|
|
});
|
|
|
|
await _readingMedicineTrialQuestionRepository.AddRangeAsync(needList);
|
|
var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync();
|
|
return ResponseOutput.Result(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除项目的医学审核问题
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpDelete("{id:guid}")]
|
|
public async Task<IResponseOutput> DeleteReadingMedicineTrialQuestion(Guid id)
|
|
{
|
|
if (await _readingMedicineTrialQuestionRepository.AnyAsync(x => x.ParentId == id))
|
|
{
|
|
return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题");
|
|
}
|
|
var success = await _readingMedicineTrialQuestionRepository.DeleteFromQueryAsync(t => t.Id == id);
|
|
var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync();
|
|
return ResponseOutput.Result(result);
|
|
}
|
|
|
|
|
|
///// <summary>
|
|
///// 确认医学审核问题
|
|
///// </summary>
|
|
///// <returns></returns>
|
|
//public async Task<IResponseOutput> ConfirmReadingMedicineQuestion()
|
|
//{
|
|
|
|
//}
|
|
|
|
|
|
|
|
}
|
|
}
|