diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialTrianingRecordViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialTrianingRecordViewModel.cs index cef94301d..dd4ffd540 100644 --- a/IRaCIS.Core.Application/Service/Document/DTO/TrialTrianingRecordViewModel.cs +++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialTrianingRecordViewModel.cs @@ -15,9 +15,14 @@ public class TrialTrianingRecordView : TrialTrianingRecordAddOrEdit public DateTime CreateTime { get; set; } public DateTime UpdateTime { get; set; } - + + public string FileName { get; set; } } +public class BatchAddTTrianingRecordInDto +{ + public List TrianingRecordList { get; set; } +} public class TrialTrianingRecordAddOrEdit { @@ -28,9 +33,11 @@ public class TrialTrianingRecordAddOrEdit public string Note { get; set; } public int State { get; set; } - - public Guid TrialFileRecordId { get; set; } - + + public TrialFileDto? TrialFileRecord { get; set; } + + public TrialFileDto? HistoryFileRecord { get; set; } + public Guid TrialFileTypeId { get; set; } public Guid TrialId { get; set; } @@ -45,13 +52,9 @@ public class TrialTrianingRecordAddOrEdit public class TrialTrianingRecordQuery : PageInput { public bool? IsAuthorizedView { get; set; } - - public string? Note { get; set; } - - public int? State { get; set; } - - public Guid? TrialFileRecordId { get; set; } - + + public string? FileName { get; set; } + public Guid? TrialFileTypeId { get; set; } public Guid? TrialId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Document/TrialTrianingRecordService.cs b/IRaCIS.Core.Application/Service/Document/TrialTrianingRecordService.cs index a32fecaa4..7a44b0ab8 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialTrianingRecordService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialTrianingRecordService.cs @@ -21,38 +21,96 @@ namespace IRaCIS.Core.Application.Service; /// /// [ApiExplorerSettings(GroupName = "FileRecord")] -public class TrialTrianingRecordService(IRepository _trialTrianingRecordRepository, +public class TrialTrianingRecordService(IRepository< + TrialTrianingRecord> _trialTrianingRecordRepository, + IRepository _trialFileRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ITrialTrianingRecordService { - + /// + /// 获取培训记录列表 + /// + /// + /// [HttpPost] - public async Task> GetTrialTrianingRecordList(TrialTrianingRecordQuery inQuery) + public async Task> GetTrialTrianingRecordList(TrialTrianingRecordQuery inDto) { var trialTrianingRecordQueryable = _trialTrianingRecordRepository - .ProjectTo(_mapper.ConfigurationProvider); + .Where(x => x.TrialFileTypeId == inDto.TrialFileTypeId) + .WhereIf(inDto.FileName.IsNotNullOrEmpty(), x => x.TrialFileRecord.FileName.Contains(inDto.FileName)) + .WhereIf(inDto.TrianingDate!=null, x => x.TrianingDate==inDto.TrianingDate) + .ProjectTo(_mapper.ConfigurationProvider); - var pageList = await trialTrianingRecordQueryable.ToPagedListAsync(inQuery); + var pageList = await trialTrianingRecordQueryable.ToPagedListAsync(inDto); return pageList; } - public async Task AddOrUpdateTrialTrianingRecord(TrialTrianingRecordAddOrEdit addOrEditTrialTrianingRecord) + public async Task AddOrUpdateTrialTrianingRecord(TrialTrianingRecordAddOrEdit inDto) { // 在此处拷贝automapper 映射 + if (inDto.TrialFileRecord != null) inDto.TrialFileRecord.TrialFileTypeId = inDto.TrialFileTypeId; + if (inDto.HistoryFileRecord != null) inDto.HistoryFileRecord.TrialFileTypeId = inDto.TrialFileTypeId; - var entity = await _trialTrianingRecordRepository.InsertOrUpdateAsync(addOrEditTrialTrianingRecord, true); + + if (inDto.Id != null) + { + var trialFinalRecord = await _trialTrianingRecordRepository.Where(x => x.Id == inDto.Id.Value).FirstNotNullAsync(); + + List ids = new List() { + trialFinalRecord.TrialFileRecordId, + trialFinalRecord.HistoryFileRecordId, + }; + + var fileIds = ids.Where(x => x != null).Select(x => (Guid)x).ToList(); + await _trialFileRepository.BatchDeleteNoTrackingAsync(x => fileIds.Contains(x.Id)); + } + var entity = await _trialTrianingRecordRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); } + /// + /// 批量新增培训记录 + /// + /// + /// + [HttpPost] + public async Task BatchAddTrialTrianingRecord(BatchAddTTrianingRecordInDto inDto) + { + foreach (var item in inDto.TrianingRecordList) + { + if (item.TrialFileRecord != null) item.TrialFileRecord.TrialFileTypeId = item.TrialFileTypeId; + if (item.HistoryFileRecord != null) item.HistoryFileRecord.TrialFileTypeId = item.TrialFileTypeId; + + var entity = await _trialTrianingRecordRepository.InsertFromDTOAsync(item); + } + + var result = await _trialTrianingRecordRepository.SaveChangesAsync(); + return ResponseOutput.Ok(result); + } + + + /// + /// 授权文档 + /// + /// + /// + [HttpPost] + public async Task AuthorizedTrialTrianingRecord(AuthorizedTrialFinalRecordInDto inDto) + { + await _trialTrianingRecordRepository.UpdatePartialFromQueryAsync(t => inDto.Ids.Contains(t.Id), t => new TrialTrianingRecord() { IsAuthorizedView = inDto.IsAuthorizedView }); + await _trialTrianingRecordRepository.SaveChangesAsync(); + return ResponseOutput.Ok(); + } + [HttpDelete("{trialTrianingRecordId:guid}")] public async Task DeleteTrialTrianingRecord(Guid trialTrianingRecordId) { @@ -60,6 +118,18 @@ public class TrialTrianingRecordService(IRepository _trialT return ResponseOutput.Ok(); } + /// + /// 批量删除培训记录 + /// + /// + /// + [HttpPost] + public async Task DeleteTrialTrianingRecordList(DeleteTrialNormalRecordListInDto inDto) + { + var success = await _trialTrianingRecordRepository.DeleteFromQueryAsync(t => inDto.Ids.Contains(t.Id), true); + return ResponseOutput.Ok(); + } + } diff --git a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs index ad01a2a0f..6d5507291 100644 --- a/IRaCIS.Core.Application/Service/Document/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Document/_MapConfig.cs @@ -118,7 +118,8 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.FileName, c => c.MapFrom(t => t.TrialFileRecord.FileName)); CreateMap().ReverseMap(); - CreateMap(); + CreateMap() + .ForMember(d => d.FileName, c => c.MapFrom(t => t.TrialFileRecord.FileName)); CreateMap().ReverseMap(); diff --git a/IRaCIS.Core.Domain/FileRecord/TrialRecord.cs b/IRaCIS.Core.Domain/FileRecord/TrialRecord.cs index 13345b566..980a2d8aa 100644 --- a/IRaCIS.Core.Domain/FileRecord/TrialRecord.cs +++ b/IRaCIS.Core.Domain/FileRecord/TrialRecord.cs @@ -133,6 +133,20 @@ public class TrialTrianingRecord : BaseFullAuditEntity { public Guid TrialId { get; set; } + /// + /// 一般文件记录 + /// + [JsonIgnore] + [ForeignKey("TrialFileRecordId")] + public TrialFile TrialFileRecord { get; set; } + + /// + /// 历史文件记录 + /// + [JsonIgnore] + [ForeignKey("HistoryFileRecordId")] + public TrialFile HistoryFileRecord { get; set; } + [Comment("关联项目文件类型")] public Guid TrialFileTypeId { get; set; } @@ -155,7 +169,11 @@ public class TrialTrianingRecord : BaseFullAuditEntity #endregion [Comment("关联具体的文件记录,记录里面有大小,格式,名称")] - public Guid TrialFileRecordId { get; set; } + public Guid? TrialFileRecordId { get; set; } + + + [Comment("历史文件")] + public Guid? HistoryFileRecordId { get; set; } public string Note { get; set; }