diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserFeedBackViewModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserFeedBackViewModel.cs new file mode 100644 index 000000000..5635af438 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserFeedBackViewModel.cs @@ -0,0 +1,97 @@ +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2024-07-30 10:39:12 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +using System; +using IRaCIS.Core.Domain.Share; +using System.Collections.Generic; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +namespace IRaCIS.Core.Application.ViewModel +{ + /// UserFeedBackView 列表视图模型 + public class UserFeedBackView : UserFeedBackAddOrEdit + { + public string TrialCode { get; set; } + + public string ExperimentName { get; set; } + + public string SubjectCode { get; set; } + + public string TrialSiteCode { get; set; } + + public string SubjectVisitName { get; set; } + + + public string FeedBackUserName { get; set; } + + public string FeedBackFullName { get; set; } + + + public DateTime CreateTime { get; set; } + public DateTime UpdateTime { get; set; } + + public UserTypeEnum UserTypeEnum { get; set; } + } + + ///UserFeedBackQuery 列表查询参数模型 + public class UserFeedBackQuery : PageInput + { + + public string? TrialKeyInfo { get; set; } + + public string? SubejctAndVisitKeyInfo { get; set; } + + public UserTypeEnum? UserTypeEnum { get; set; } + + public string FeedBackKeyInfo { get; set; } + + public string? QuestionDescription { get; set; } + + public int? QuestionType { get; set; } + + public int? State { get; set; } + + public string? TrialSiteCode { get; set; } + + public DateTime? BeginCreatime { get; set; } + + public DateTime? EndCreatime { get; set; } + + + + } + + /// UserFeedBackAddOrEdit 列表查询参数模型 + public class UserFeedBackAddOrEdit + { + public Guid? Id { get; set; } + public Guid? SubjectId { get; set; } + public Guid? SubjectVisitId { get; set; } + public int QuestionType { get; set; } + public string QuestionDescription { get; set; } + + public int State { get; set; } + public Guid? TrialSiteId { get; set; } + + [NotDefault] + public Guid TrialId { get; set; } + + public List ScreenshotList { get; set; } + + [JsonIgnore] + public string ScreenshotListStr { get; set; } + } + + + public class BatchUpdateCommand + { + public List IdList { get; set; } + + public int State { get; set; } + } + +} + + diff --git a/IRaCIS.Core.Application/Service/Management/Interface/IUserFeedBackService.cs b/IRaCIS.Core.Application/Service/Management/Interface/IUserFeedBackService.cs new file mode 100644 index 000000000..6fa7976a3 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Management/Interface/IUserFeedBackService.cs @@ -0,0 +1,24 @@ +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2024-07-30 10:39:05 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + +using IRaCIS.Core.Application.ViewModel; +namespace IRaCIS.Core.Application.Interfaces +{ + /// + /// IUserFeedBackService + /// + public interface IUserFeedBackService + { + + Task> GetUserFeedBackList(UserFeedBackQuery inQuery); + + Task AddOrUpdateUserFeedBack(UserFeedBackAddOrEdit addOrEditUserFeedBack); + + Task DeleteUserFeedBack(Guid userFeedBackId); + + + } +} diff --git a/IRaCIS.Core.Application/Service/Management/UserFeedBackService.cs b/IRaCIS.Core.Application/Service/Management/UserFeedBackService.cs new file mode 100644 index 000000000..e21a818fe --- /dev/null +++ b/IRaCIS.Core.Application/Service/Management/UserFeedBackService.cs @@ -0,0 +1,89 @@ +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2024-07-30 10:39:09 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + +using IRaCIS.Core.Domain.Models; +using Microsoft.AspNetCore.Mvc; +using IRaCIS.Core.Application.Interfaces; +using IRaCIS.Core.Application.ViewModel; +using Newtonsoft.Json; +namespace IRaCIS.Core.Application.Service +{ + /// + /// UserFeedBackService + /// + [ApiExplorerSettings(GroupName = "Management")] + public class UserFeedBackService : BaseService, IUserFeedBackService + { + + private readonly IRepository _userFeedBackRepository; + + public UserFeedBackService(IRepository userFeedBackRepository) + { + _userFeedBackRepository = userFeedBackRepository; + } + + [HttpPost] + public async Task> GetUserFeedBackList(UserFeedBackQuery inQuery) + { + + var userFeedBackQueryable = _userFeedBackRepository + .WhereIf(inQuery.State != null, t => t.State == inQuery.State) + .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.CreateUser.UserTypeEnum == inQuery.UserTypeEnum) + .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.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(UserFeedBackView.Id) : inQuery.SortField, + inQuery.Asc); + + return pageList; + } + + + public async Task AddOrUpdateUserFeedBack(UserFeedBackAddOrEdit addOrEditUserFeedBack) + { + addOrEditUserFeedBack.ScreenshotListStr = JsonConvert.SerializeObject(addOrEditUserFeedBack.ScreenshotList); + + + var entity = await _userFeedBackRepository.InsertOrUpdateAsync(addOrEditUserFeedBack, true); + + 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(); + } + + + } +} diff --git a/IRaCIS.Core.Application/Service/Management/_MapConfig.cs b/IRaCIS.Core.Application/Service/Management/_MapConfig.cs index 744c906a8..5619e7127 100644 --- a/IRaCIS.Core.Application/Service/Management/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Management/_MapConfig.cs @@ -125,6 +125,18 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.OptUserName, c => c.MapFrom(t => t.OptUser.UserName)) .ForMember(d => d.OptUserTypeEnum, c => c.MapFrom(t => t.OptUser.UserTypeEnum)) ; + + + CreateMap() + .ForMember(d => d.ExperimentName, c => c.MapFrom(t => t.Trial.ExperimentName)) + .ForMember(d => d.TrialCode, c => c.MapFrom(t => t.Trial.TrialCode)) + .ForMember(d => d.SubjectCode, c => c.MapFrom(t => t.Subject.Code)) + .ForMember(d => d.TrialSiteCode, c => c.MapFrom(t => t.TrialSite.TrialSiteCode)) + .ForMember(d => d.SubjectVisitName, c => c.MapFrom(t => t.SubjectVisit.VisitName)) + .ForMember(d => d.FeedBackUserName, c => c.MapFrom(t => t.CreateUser.UserName)) + .ForMember(d => d.FeedBackFullName, c => c.MapFrom(t => t.CreateUser.FullName)) + .ForMember(d => d.UserTypeEnum, c => c.MapFrom(t => t.CreateUser.UserTypeEnum)); + CreateMap().ReverseMap(); } } diff --git a/IRaCIS.Core.Domain/Management/UserFeedBack.cs b/IRaCIS.Core.Domain/Management/UserFeedBack.cs new file mode 100644 index 000000000..d9ec5f7bb --- /dev/null +++ b/IRaCIS.Core.Domain/Management/UserFeedBack.cs @@ -0,0 +1,77 @@ + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2024-07-30 10:39:01 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +using System; +using IRaCIS.Core.Domain.Share; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Collections.Generic; +namespace IRaCIS.Core.Domain.Models +{ + /// + ///UserFeedBack + /// + [Table("UserFeedBack")] + public class UserFeedBack : Entity, IAuditUpdate, IAuditAdd + { + [JsonIgnore] + public Trial Trial { get; set; } + [JsonIgnore] + public Subject Subject { get; set; } + [JsonIgnore] + public SubjectVisit SubjectVisit { get; set; } + [JsonIgnore] + public TrialSite TrialSite { get; set; } + [JsonIgnore] + public User CreateUser { get; set; } + + public Guid? SubjectId { get; set; } + + + public Guid? SubjectVisitId { get; set; } + + + public int QuestionType { get; set; } + + public string QuestionDescription { get; set; } + + + public Guid CreateUserId { get; set; } + + + public DateTime CreateTime { get; set; } + + + public Guid UpdateUserId { get; set; } + + + public DateTime UpdateTime { get; set; } + + + public int State { get; set; } + + + public Guid? TrialSiteId { get; set; } + + + public Guid TrialId { get; set; } + + public string ScreenshotListStr { get; set; } + + // + [NotMapped] + public List ScreenshotList => JsonConvert.DeserializeObject>(ScreenshotListStr); + + + + //public class ScreenshotInfo + //{ + // public string Path { get; set; } + + // public string Name { get; set; } + //} + + } + } diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index f4dcffdd9..f81edd5f5 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -495,6 +495,8 @@ namespace IRaCIS.Core.Infra.EFCore public virtual DbSet SCPImageUpload { get; set; } + public virtual DbSet UserFeedBack { get; set; } + public override async Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { diff --git a/IRaCIS.Core.Test/DbHelper.ttinclude b/IRaCIS.Core.Test/DbHelper.ttinclude index 8790fcb50..d33e52c37 100644 --- a/IRaCIS.Core.Test/DbHelper.ttinclude +++ b/IRaCIS.Core.Test/DbHelper.ttinclude @@ -4,7 +4,7 @@ public static readonly string ConnectionString = "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true"; public static readonly string DbDatabase = "Test_IRC"; //表名称用字符串,拼接 - public static readonly string TableName = "TrialSiteDicomAE"; + public static readonly string TableName = "UserFeedBack"; //具体文件里面 例如service 可以配置是否分页 } #>