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 可以配置是否分页
}
#>