//-------------------------------------------------------------------- // 此代码由T4模板自动生成 byzhouhang 20210918 // 生成时间 2021-11-11 11:04:54 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; namespace IRaCIS.Core.Application.Contracts { /// /// 项目QC 问题 管理 /// [ApiExplorerSettings(GroupName = "Image")] public class TrialQCQuestionConfigureService : BaseService, ITrialQCQuestionConfigureService { private readonly IRepository _trialQcQuestionRepository; public TrialQCQuestionConfigureService(IRepository trialQcQuestionRepository) { _trialQcQuestionRepository = trialQcQuestionRepository; } [HttpPost] public async Task<(List, 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(_mapper.ConfigurationProvider); var list = await trialQCQuestionQueryable.OrderBy(t => t.ShowOrder).ToListAsync(); var signInfo = await _repository.Where(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!); } /// /// 父问题 下拉框选项 需要排除自己 、把自己设置为父亲 (互为父亲) 、是自己孙辈的(明明是自己子孙,却设置为自己父亲) /// /// /// [HttpPost] public async Task> 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(_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 GetChildId(Guid parentId, List list) { var ids = new List(); 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; } /// /// 批量添加 QC 问题 /// /// /// /// [HttpPost("{trialId:guid}")] public async Task BatchAddTrialQCQuestionConfigure(List batchList, Guid trialId) { if (!await _repository.AnyAsync(t => t.Id == trialId && t.QCQuestionConfirmedUserId == null)) { return ResponseOutput.NotOk("QC已确认,不允许操作"); } var batchConfigList = _mapper.Map>(batchList); batchConfigList.ForEach(t => t.TrialId = trialId); await _trialQcQuestionRepository.AddRangeAsync(batchConfigList); var success = await _repository.SaveChangesAsync(); return ResponseOutput.Result(success); } public async Task AddOrUpdateTrialQCQuestionConfigure(TrialQCQuestionAddOrEdit addOrEditTrialQCQuestionConfigure) { if (!await _repository.AnyAsync(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 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(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId)) { return ResponseOutput.NotOk("已有QC审核记录,不允许删除问题项"); } var success = await _trialQcQuestionRepository.DeleteFromQueryAsync(t => t.Id == trialQCQuestionConfigureId); return ResponseOutput.Result(success); } } }