//-------------------------------------------------------------------- // 此代码由T4模板自动生成 byzhouhang 20210918 // 生成时间 2024-07-30 10:39:09 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; namespace IRaCIS.Core.Application.Service { /// /// UserFeedBackService /// [ApiExplorerSettings(GroupName = "Management")] public class UserFeedBackService(IRepository _userFeedBackRepository, IRepository _visitTaskRepository, IRepository _subjectVisitRepository, IRepository _subjectRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IUserFeedBackService { [HttpPost] public async Task> GetUserFeedBackList(UserFeedBackQuery inQuery) { var isCRCOrIR = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer; var userFeedBackQueryable = _userFeedBackRepository .WhereIf(isCRCOrIR, t => t.CreateUserId == _userInfo.UserRoleId) .WhereIf(inQuery.State != null, t => t.State == inQuery.State) .WhereIf(inQuery.TrialId != null, t => t.TrialId == inQuery.TrialId) .WhereIf(inQuery.QuestionType != null, t => t.QuestionType == inQuery.QuestionType) .WhereIf(inQuery.BeginCreatime != null, t => t.CreateTime >= inQuery.BeginCreatime) .WhereIf(inQuery.EndCreatime != null, t => t.CreateTime == inQuery.EndCreatime) .WhereIf(inQuery.UserTypeEnum != null, t => t.CreateUserRole.UserTypeEnum == inQuery.UserTypeEnum) .WhereIf(!string.IsNullOrEmpty(inQuery.FeedBackUserKeyInfo), t => t.CreateUserRole.FullName.Contains(inQuery.FeedBackUserKeyInfo) || t.CreateUserRole.UserName.Contains(inQuery.FeedBackUserKeyInfo)) .WhereIf(!string.IsNullOrEmpty(inQuery.QuestionDescription), t => t.QuestionDescription.Contains(inQuery.QuestionDescription)) .WhereIf(!string.IsNullOrEmpty(inQuery.TrialKeyInfo), t => t.Trial.ExperimentName.Contains(inQuery.TrialKeyInfo) || t.Trial.TrialCode.Contains(inQuery.TrialKeyInfo)) .WhereIf(!string.IsNullOrEmpty(inQuery.SubejctAndVisitKeyInfo), t => t.Subject.Code.Contains(inQuery.SubejctAndVisitKeyInfo) || t.SubjectVisit.VisitName.Contains(inQuery.SubejctAndVisitKeyInfo)) .WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode)) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await userFeedBackQueryable.ToPagedListAsync(inQuery); return pageList; } [HttpPost] public async Task GetUserFeedBackInfo(GetUserFeedBackQuery inQuery) { if (inQuery.Id == null && inQuery.VisitTaskId == null) { throw new BusinessValidationFailedException("Id 或者VisitTaskId 必传一个"); } var result = await _userFeedBackRepository.WhereIf(inQuery.Id == null, t => t.VisitTaskId == inQuery.VisitTaskId) .WhereIf(inQuery.VisitTaskId == null, t => t.Id == inQuery.Id).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); return ResponseOutput.Ok(result); } public async Task AddOrUpdateUserFeedBack(UserFeedBackAddOrEdit addOrEditUserFeedBack, [FromServices] IMailVerificationService mailService) { addOrEditUserFeedBack.ScreenshotListStr = JsonConvert.SerializeObject(addOrEditUserFeedBack.ScreenshotList); if (addOrEditUserFeedBack.VisitTaskId != null) { var info = await _visitTaskRepository.Where(t => t.Id == addOrEditUserFeedBack.VisitTaskId).Select(t => new { t.SubjectId, t.SourceSubjectVisitId, t.Subject.TrialSiteId }).FirstOrDefaultAsync(); if (info != null) { addOrEditUserFeedBack.SubjectId = info.SubjectId; addOrEditUserFeedBack.TrialSiteId = info.TrialSiteId; addOrEditUserFeedBack.SubjectVisitId = info.SourceSubjectVisitId; } } else if (addOrEditUserFeedBack.SubjectVisitId != null) { var info = await _subjectVisitRepository.Where(t => t.Id == addOrEditUserFeedBack.SubjectVisitId).Select(t => new { t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync(); if (info != null) { addOrEditUserFeedBack.TrialSiteId = info.TrialSiteId; addOrEditUserFeedBack.SubjectId = info.SubjectId; } } else if (addOrEditUserFeedBack.SubjectId != null) { var info = await _subjectRepository.Where(t => t.Id == addOrEditUserFeedBack.SubjectId).Select(t => new { t.TrialSiteId }).FirstOrDefaultAsync(); if (info != null) { addOrEditUserFeedBack.TrialSiteId = info.TrialSiteId; } } var entity = await _userFeedBackRepository.InsertOrUpdateAsync(addOrEditUserFeedBack, true); //任务反馈的添加更新都需要发送邮件,其他的是添加的时候发送 if (addOrEditUserFeedBack.VisitTaskId != null || addOrEditUserFeedBack.Id == null) { await mailService.UserFeedBackMail(entity.Id); } return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 批量更新状态 /// /// /// [HttpPut] public async Task BatchUpdateFeedBackState(BatchUpdateCommand batchUpdateCommand) { await _userFeedBackRepository.BatchUpdateNoTrackingAsync(t => batchUpdateCommand.IdList.Contains(t.Id), u => new UserFeedBack() { State = batchUpdateCommand.State }); return ResponseOutput.Ok(); } [HttpDelete("{userFeedBackId:guid}")] public async Task DeleteUserFeedBack(Guid userFeedBackId) { var success = await _userFeedBackRepository.DeleteFromQueryAsync(t => t.Id == userFeedBackId, true); return ResponseOutput.Ok(); } } }