//-------------------------------------------------------------------- // 此代码由liquid模板自动生成 byzhouhang 20240909 // 生成时间 2025-03-27 06:13:33Z // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- using IRaCIS.Core.Domain.Models; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Infrastructure.Extention; using System.Threading.Tasks; using IRaCIS.Core.Infra.EFCore; using AutoMapper.Execution; using System.Linq; using IRaCIS.Core.Infrastructure; using DocumentFormat.OpenXml.Office2010.Excel; using MassTransit; using NPOI.POIFS.Properties; namespace IRaCIS.Core.Application.Service; [ ApiExplorerSettings(GroupName = "FileRecord")] public class AuditDocumentService(IRepository _auditDocumentRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService { /// /// 获取稽查文档 /// /// /// [HttpPost] public async Task> GetAuditDocumentList(AuditDocumentQuery inQuery) { var auditDocumentQueryable =_auditDocumentRepository .ProjectTo(_mapper.ConfigurationProvider); var pageList= await auditDocumentQueryable.ToPagedListAsync(inQuery); return pageList; } /// /// 新增或者修改稽查文档 /// /// /// [HttpPost] public async Task AddOrUpdateAuditDocument(AuditDocumentAddOrEdit inDto) { if (inDto.ParentId != null) { var alikeData = await _auditDocumentRepository.Where(x => x.ParentId == inDto.ParentId&&x.Name==inDto.Name&&x.AuditDocumentTypeEnum==inDto.AuditDocumentTypeEnum).FirstOrDefaultAsync(); if (alikeData != null) { if (inDto.AuditDocumentTypeEnum == AuditDocumentType.Folder) { throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotAddFolder"]); } else { var entityData = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true); var historicalVersionIds = await _auditDocumentRepository.Where(x => x.MainFileId == alikeData.Id).OrderBy(x => x.Version).Select(x => x.Id).ToListAsync(); historicalVersionIds.Add(alikeData.Id); int num = 1; foreach (var item in historicalVersionIds) { await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument() { MainFileId = entityData.Id, ParentId = null, Version = num, AuditDocumentTypeEnum = AuditDocumentType.HistoricalVersion }); } return ResponseOutput.Ok(entityData.Id.ToString()); } } } var entity = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); } // /// // /// 删除稽查文档 // /// // /// // /// // [HttpDelete("{auditDocumentId:guid}")] // public async Task DeleteAuditDocument(Guid auditDocumentId) //{ // var success = await _auditDocumentRepository.DeleteFromQueryAsync(t => t.Id == auditDocumentId,true); // return ResponseOutput.Ok(); //} /// /// 获取文件树形结构 (传Id 根节点就是自己) /// /// /// [HttpPost] public async Task GetAuditDocumentData(GetAuditDocumentDataInDto inDto) { var data= await _auditDocumentRepository .Where(x=>x.AuditDocumentTypeEnum!=AuditDocumentType.HistoricalVersion) .WhereIf(inDto.IsAuthorization!=null,x=>x.IsAuthorization==inDto.IsAuthorization).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); var root= data .WhereIf(inDto.Id!= null, x => x.Id == inDto.Id) .WhereIf(inDto.Id==null,x=>x.ParentId==null).ToList(); foreach (var item in root) { GetChildren(item, data); } return new GetAuditDocumentDataOutDto() { Data = root }; } private void GetChildren(AuditDocumentData item, List dataList) { item.Children = dataList.Where(x => x.ParentId == item.Id).ToList(); foreach (var x in item.Children) { GetChildren(x, dataList); } } /// /// 删除稽查文档 /// /// /// [HttpPost] public async Task DeleteAuditDocument(DeleteAuditDocumentInDto inDto) { var data = await _auditDocumentRepository.Select(x => new DeleteAudit (){ Id=x.Id, ParentId= x.ParentId, MainFileId= x.MainFileId }).ToListAsync(); List DeleteId= inDto.Ids; finId(inDto.Ids, data); void finId(List deletids, List deletes) { DeleteId.AddRange(deletids); var temp = deletes.Where(x => deletids.Contains(x.ParentId.Value)|| deletids.Contains(x.MainFileId.Value)).Select(x => x.Id).ToList(); if (temp.Count() > 0) { finId(temp, deletes); } } var success = await _auditDocumentRepository.DeleteFromQueryAsync(t => DeleteId.Contains(t.Id), true); return ResponseOutput.Ok(); } /// /// 移动文件或者文件夹 到其他文件夹 /// /// [HttpPost] public async Task MovieFileOrFolder(MovieFileOrFolderInDto inDto) { var file = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).FirstNotNullAsync(); if (file.AuditDocumentTypeEnum == AuditDocumentType.Folder) { var data = await _auditDocumentRepository.Select(x => new DeleteAudit() { Id = x.Id, ParentId = x.ParentId, MainFileId = x.MainFileId }).ToListAsync(); if (finChild(new List { inDto.Id }, inDto.ParentId, data)) { throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotMove"]); } } bool finChild(List ids, Guid ChildId,List data) { var child = data.Where(x =>x.ParentId!=null&& ids.Contains(x.ParentId.Value)).ToList(); if (child.Count() == 0) { return false; } else if (child.Any(x => x.Id == ChildId)) { return true; } else { var newids = child.Select(x => x.Id).ToList(); return finChild(newids, ChildId, data); } } await _auditDocumentRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new AuditDocument() { ParentId = inDto.ParentId }); await _auditDocumentRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } /// /// 获取历史版本 /// /// /// [HttpPost] public async Task GetHistoricalVersion(GetHistoricalVersionInDto inDto) { return new GetHistoricalVersionOutDto() { CurrentData = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(), HistoricalVersionList = await _auditDocumentRepository.Where(x => x.MainFileId == inDto.Id).ProjectTo(_mapper.ConfigurationProvider).OrderByDescending(x => x.Version).ToListAsync() }; } /// /// 把历史版本设置为当前版本 /// /// [HttpPost] public async Task SetCurrentVersion(SetCurrentVersionInDto inDto) { var file = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).FirstNotNullAsync(); if (file.AuditDocumentTypeEnum != AuditDocumentType.HistoricalVersion) { throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotSetCurrentVersion"]); } var mainFile = await _auditDocumentRepository.Where(x => x.Id == file.MainFileId).FirstNotNullAsync(); var historicalVersionIds= await _auditDocumentRepository.Where(x => x.MainFileId == mainFile.Id&&x.Id!=inDto.Id).OrderBy(x=>x.Version).Select(x=>x.Id).ToListAsync(); historicalVersionIds.Add(mainFile.Id); await _auditDocumentRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new AuditDocument() { MainFileId=null, ParentId= mainFile.ParentId, AuditDocumentTypeEnum=AuditDocumentType.File, }); int num = 1; foreach (var item in historicalVersionIds) { await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument() { MainFileId = inDto.Id, ParentId = null, Version=num, AuditDocumentTypeEnum= AuditDocumentType.HistoricalVersion }); } await _auditDocumentRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } /// /// 设置是否授权 /// /// /// [HttpPost] public async Task SetIsAuthorization(SetIsAuthorizationInDto inDto) { var data = await _auditDocumentRepository.Select(x => new DeleteAudit() { Id = x.Id, ParentId = x.ParentId, MainFileId = x.MainFileId }).ToListAsync(); List allid = new List(); findChild(allid, inDto.Ids, data); await _auditDocumentRepository.UpdatePartialFromQueryAsync(t => allid.Contains(t.Id), x => new AuditDocument() { IsAuthorization = inDto.IsAuthorization }); await _auditDocumentRepository.SaveChangesAsync(); return ResponseOutput.Ok(); void findChild(List allId,List current, List data) { allId.AddRange(current); var child = data.Where(x =>(x.ParentId!=null&& current.Contains(x.ParentId.Value))||(x.MainFileId!=null&¤t.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList(); if (child.Count() > 0) { findChild(allId, child, data); } } } }