EI-Image-Viewer-Api/IRaCIS.Core.Application/Service/QC/TrialQCQuestionService.cs

163 lines
6.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2021-11-11 11:04:54
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Mvc;
namespace IRaCIS.Core.Application.Contracts
{
/// <summary>
/// 项目QC 问题 管理
/// </summary>
[ApiExplorerSettings(GroupName = "Image")]
public class TrialQCQuestionConfigureService : BaseService, ITrialQCQuestionConfigureService
{
private readonly IRepository<TrialQCQuestion> _trialQcQuestionRepository;
public TrialQCQuestionConfigureService(IRepository<TrialQCQuestion> trialQcQuestionRepository)
{
_trialQcQuestionRepository = trialQcQuestionRepository;
}
[HttpPost]
public async Task<(List<TrialQCQuestionConfigureView>, object)> GetTrialQCQuestionConfigureList(TrialQCQuestionQuery queryTrialQCQuestionConfigure)
{
var trialQCQuestionQueryable = _trialQcQuestionRepository.Where(t => t.TrialId == queryTrialQCQuestionConfigure.TrialId)
.WhereIf(!string.IsNullOrWhiteSpace(queryTrialQCQuestionConfigure.QuestionName), t => t.QuestionName.Contains(queryTrialQCQuestionConfigure.QuestionName))
.WhereIf(!string.IsNullOrWhiteSpace(queryTrialQCQuestionConfigure.Type), t => t.Type.Contains(queryTrialQCQuestionConfigure.Type))
.ProjectTo<TrialQCQuestionConfigureView>(_mapper.ConfigurationProvider);
var list = await trialQCQuestionQueryable.OrderBy(t => t.ShowOrder).ToListAsync();
var signInfo = await _repository.Where<Trial>(t => t.Id == queryTrialQCQuestionConfigure.TrialId)
.Select(trial => new { trial.QCQuestionConfirmedTime, trial.QCQuestionConfirmedUserId, RealName = trial.QCQuestionConfirmedUser.LastName + " / " + trial.QCQuestionConfirmedUser.FirstName, trial.QCQuestionConfirmedUser.UserName }).FirstOrDefaultAsync();
return (list, signInfo!);
}
/// <summary>
/// 父问题 下拉框选项 需要排除自己 、把自己设置为父亲 (互为父亲) 、是自己孙辈的(明明是自己子孙,却设置为自己父亲)
/// </summary>
/// <param name="trialQCQuestionFilterSelect"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<TrialQCQuestionSelect>> GetTrialQCQuestionSelectList(TrialQCQuestionFilterSelect trialQCQuestionFilterSelect)
{
//设置父亲的时候,不允许设置为自己的孙子 这种会形成环
var initList = await _trialQcQuestionRepository.Where(t => t.TrialId == trialQCQuestionFilterSelect.TrialId)
.WhereIf(trialQCQuestionFilterSelect.TypeArray.Count() > 0, t => trialQCQuestionFilterSelect.TypeArray.Contains(t.Type))
//.WhereIf(trialQCQuestionFilterSelect.Id != null, t => t.Id != trialQCQuestionFilterSelect.Id /*&& t.ParentId != trialQCQuestionFilterSelect.Id*/)
.OrderBy(t => t.ShowOrder).ProjectTo<TrialQCQuestionSelect>(_mapper.ConfigurationProvider).ToListAsync();
//父亲的序号肯定要比自己小
if (trialQCQuestionFilterSelect.Id != null)
{
var selectItem = initList.FirstOrDefault(t => t.Id == trialQCQuestionFilterSelect.Id)!;
initList = initList.Where(t => t.Id != selectItem.Id && t.ShowOrder < selectItem.ShowOrder).ToList();
}
var exceptList = GetChildId(trialQCQuestionFilterSelect.Id ?? Guid.Empty, initList);
return initList.Where(t => !exceptList.Contains(t.Id)).ToList();
}
private List<Guid> GetChildId(Guid parentId, List<TrialQCQuestionSelect> list)
{
var ids = new List<Guid>();
var childIds = list.Where(t => t.ParentId == parentId).Select(t => t.Id).ToList();
foreach (var childId in childIds)
{
ids.AddRange(childId);
var childs = GetChildId(childId, list);
ids.AddRange(childs);
}
return ids;
}
/// <summary>
/// 批量添加 QC 问题
/// </summary>
/// <param name="batchList"></param>
/// <param name="trialId"></param>
/// <returns></returns>
[HttpPost("{trialId:guid}")]
public async Task<IResponseOutput> BatchAddTrialQCQuestionConfigure(List<TrialQCQuestionConfigureBatchAdd> batchList, Guid trialId)
{
if (!await _repository.AnyAsync<Trial>(t => t.Id == trialId && t.QCQuestionConfirmedUserId == null))
{
return ResponseOutput.NotOk("QC已确认不允许操作");
}
var batchConfigList = _mapper.Map<List<TrialQCQuestion>>(batchList);
batchConfigList.ForEach(t => t.TrialId = trialId);
await _trialQcQuestionRepository.AddRangeAsync(batchConfigList);
var success = await _repository.SaveChangesAsync();
return ResponseOutput.Result(success);
}
public async Task<IResponseOutput> AddOrUpdateTrialQCQuestionConfigure(TrialQCQuestionAddOrEdit addOrEditTrialQCQuestionConfigure)
{
if (!await _repository.AnyAsync<Trial>(t => t.Id == addOrEditTrialQCQuestionConfigure.TrialId && t.QCQuestionConfirmedUserId == null))
{
return ResponseOutput.NotOk("QC已确认不允许操作");
}
var entity = await _trialQcQuestionRepository.InsertOrUpdateAsync(addOrEditTrialQCQuestionConfigure, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
[HttpDelete("{trialQCQuestionConfigureId:guid}")]
public async Task<IResponseOutput> DeleteTrialQCQuestionConfigure(Guid trialQCQuestionConfigureId)
{
if (await _trialQcQuestionRepository.AnyAsync(t => t.ParentId == trialQCQuestionConfigureId))
{
return ResponseOutput.NotOk("清除子问题 才允许删除父问题");
}
if (!await _trialQcQuestionRepository.AnyAsync(t => t.Id == trialQCQuestionConfigureId && t.Trial.QCQuestionConfirmedUserId == null))
{
return ResponseOutput.NotOk("QC已确认不允许操作");
}
if (await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId))
{
return ResponseOutput.NotOk("已有QC审核记录不允许删除问题项");
}
var success = await _trialQcQuestionRepository.BatchDeleteAsync(t => t.Id == trialQCQuestionConfigureId);
return ResponseOutput.Result(success);
}
}
}