diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index 5f36aecbe..ffd97ded6 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -1,4 +1,6 @@ -using DocumentFormat.OpenXml.Office2010.Excel; +using Aliyun.OSS; +using Castle.DynamicProxy.Generators.Emitters.SimpleAST; +using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; @@ -12,8 +14,15 @@ using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using MiniExcelLibs; +using Minio; +using Minio.DataModel.Args; +using NPOI.HPSF; +using NPOI.POIFS.Crypt; +using SharpCompress.Common; +using Spire.Doc; using System.Linq.Expressions; using System.Reflection.Metadata; +using System.Security.AccessControl; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; @@ -25,7 +34,7 @@ namespace IRaCIS.Application.Services public class TestService : BaseService { - public static int IntValue = 100; + public static int IntValue = 100; private readonly IRepository _dicRepository; private readonly IRepository _trialRepository; @@ -40,7 +49,7 @@ namespace IRaCIS.Application.Services private readonly ILogger _logger; - public TestService(IRepository dicRepository, IRepository trialRepository,ILogger logger + public TestService(IRepository dicRepository, IRepository trialRepository, ILogger logger , IOptionsMonitor systemEmailConfig, IOptionsMonitor basicConfig, IRepository visitTaskRepository, IDistributedLockProvider distributedLockProvider) { @@ -52,31 +61,56 @@ namespace IRaCIS.Application.Services _dicRepository = dicRepository; _trialRepository = trialRepository; - _distributedLockProvider= distributedLockProvider; + _distributedLockProvider = distributedLockProvider; - _logger= logger; + _logger = logger; //_cache = cache; } - [AllowAnonymous] - public async Task TestDistributedLock( ) + public async Task TestEFcore8() { - await _repository.Where().Select(t => t.FullName).FirstNotNullAsync(); + + //var aa= _dicRepository._dbContext.Subject.Where(t => t.Id == Guid.Empty).ExecuteUpdate("FirstName","ddd"); + + await _repository.BatchUpdateAsync(t => t.Id == Guid.Empty, u => new Subject() { FirstName = "fddd", LastName = "sss", UpdateTime = DateTime.Now }); + + await _repository.Where().ExecuteUpdateAsync(t => t.SetProperty(t => t.UpdateTime, u => DateTime.Now)); + + return ResponseOutput.Ok(); + } + // 设置 Ne + + [AllowAnonymous] + public async Task TestMinIO([FromServices] IOSSService oSSService) + { + + await oSSService.UploadToOSSAsync("C:\\Users\\Administrator\\Desktop\\TrialSiteUserImportTemplate.xlsx", "myfolder"); + + await oSSService.DownLoadFromOSSAsync("/myfolder/TrialSiteUserImportTemplate.xlsx", "C:\\Users\\Administrator\\Desktop\\aws.xlsx"); + + return ResponseOutput.Ok(); + } + + [AllowAnonymous] + public async Task TestDistributedLock() + { + + await _repository.Where().Select(t => t.FullName).FirstNotNullAsync(); Console.WriteLine($"我进来了当前值是:" + IntValue); _logger.LogWarning($"我进来了当前值是:" + IntValue); var @lock = _distributedLockProvider.CreateLock($"UserAccount"); - using (await @lock.AcquireAsync()) + using (await @lock.AcquireAsync()) { await Task.Delay(4); IntValue--; - _logger.LogWarning( IntValue.ToString()); + _logger.LogWarning(IntValue.ToString()); Console.WriteLine(IntValue); } @@ -85,86 +119,126 @@ namespace IRaCIS.Application.Services [AllowAnonymous] - public async Task GetMemoryStoreData() + public async Task InternationazitionInit() { - + var rows = await MiniExcel.QueryAsync(@"C:\Users\Administrator\Desktop\i18n-new2.xlsx"); - return ResponseOutput.Ok(new { StaticData.En_US_Dic , StaticData.Zh_CN_Dic }); + rows = rows.Where(t => !string.IsNullOrEmpty(t.Code)).ToList(); + + foreach (var row in rows) + { + await _repository.InsertOrUpdateAsync(row); + + } + + await _repository.SaveChangesAsync(); + + return ResponseOutput.Ok(); } - - //[AllowAnonymous] - //public async Task InternationazitionInit() - //{ - - - // var rows = await MiniExcel.QueryAsync(@"C:\Users\Administrator\Desktop\Export\vue.xlsx"); - - // foreach (var row in rows) - // { - // await _repository.InsertOrUpdateAsync(row); - - // } - - // await _repository.SaveChangesAsync(); - - // return ResponseOutput.Ok(); - //} - [AllowAnonymous] [UnitOfWork] public async Task Get() { - - return "修改服务器时间自动发布测试--我又修改了"; + + //Expression> visitTaskLambda = x => x.TrialId == Guid.Empty && x.SubjectId == Guid.Empty && x.TrialReadingCriterionId == Guid.Empty; + + //var visitTaskIdQueryable = _visitTaskRepositoryy.Where(visitTaskLambda).Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)).Select(t => t.Id); + + //await _visitTaskRepositoryy.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask() + //{ + // IsFrontTaskNeedSignButNotSign = true + //}); + + + //var a = ((Decimal)1.00).ToString().TrimEnd(new char[] { '.', '0' }); + //var b = ((Decimal)1.01).ToString().TrimEnd(new char[] { '.', '0' }); + //var c = ((Decimal)100).ToString().TrimEnd(new char[] { '.', '0' }); + //var subject1 = Guid.Parse("431D0C58-ABC5-4166-B9BC-08DA0E391693"); + //var subject2 = Guid.Parse("431D0C58-ABC5-4166-B9BC-08DA0E391694"); + + // var subjectList = new List() { Guid.Parse("431D0C58-ABC5-4166-B9BC-08DA0E391693") , + // Guid.Parse("431D0C58-ABC5-4166-B9BC-08DA0E391694") , + // Guid.Parse("431D0C58-ABC5-4166-B9BC-08DA0E391695") + // }; + + //string[] citys = new string[] { "广州", "深圳", "上海", "北京" }; + //foreach (var item in subjectList) + //{ + // Console.WriteLine(await BNRFactory.Default.Create($"[CN:{item}][N:[CN:{item}]/0000000]")); + //} + //foreach (var item in subjectList) + //{ + // Console.WriteLine(await BNRFactory.Default.Create($"[N:[CN:{item}]/0000000]")); + //} + + //foreach (var item in subjectList) + //{ + // Console.WriteLine(await BNRFactory.Default.Create($"[CN:{item}][redis:city/0000000]")); + //} + + //var needAddVisitList = await _repository.Where(t => t.TrialId == Guid.Empty).DistinctBy(t => t.VisitTaskNum).ToListAsync(); + + + //await _repository.BatchUpdateAsync(t => t.Id == Guid.Empty, u => new VisitTask() + //{ + // SuggesteFinishedTime = u.IsUrgent ? DateTime.Now.AddDays(2) : DateTime.Now.AddDays(7), + + // Code = u.Code + 1 + //}); + + //var query = from item1 in _repository.Where() + // join item2 in _repository.Where() on item1.ValueType equals item2.ValueType + // select new + // { + // item1.ValueType, + // dd = item2.ValueType + // }; + + //var list2 = query.ToList(); + + //await Task.CompletedTask; + + //var list = await _repository.Where(t => t.TrialId == Guid.Parse("40400000-3e2c-0016-239b-08da581f0e74")).ToListAsync(); + + ////await _repository.BatchDeleteAsync(t => t.TrialId == Guid.Parse("40400000-3e2c-0016-239b-08da581f0e74")); + + //await _repository.AddRangeAsync(list, true); + + //await _repository.SaveChangesAsync(); + + //await _repository.BatchUpdateAsync(t => t.TrialId == Guid.Parse("40400000-3e2c-0016-239b-08da581f0e74") && t.EntityName== "ClinicalDataTrialSet", t => new DataInspection() { CreateTime= DateTime.Now.AddMonths(-2) } ); + + //await _visitTaskRepositoryy.UpdatePartialFromQueryAsync( Guid.Parse("78360000-3E2C-0016-9B53-08DA6A002040"), c => new VisitTask() { UpdateTime = DateTime.Now }); + + //await _visitTaskRepositoryy.UpdatePartialFromQueryAsync( Guid.Parse("78360000-3E2C-0016-9B53-08DA6A002040"), c => new VisitTask() { UpdateTime = DateTime.Now.AddMinutes(1) }); + + //var a = _userInfo.IsTestUser; + + //var list1 = await _repository.Where().Select(t => t.TranslateValue(t.Value, t.ValueCN, true)).ToListAsync(); + //var list2 = await _repository.Where().Select(t => t.TranslateValue(t.Value, t.ValueCN, false)).ToListAsync(); + + return "测试自动发布--再次提交"; } - private static Dictionary _replacePatterns = new Dictionary() - { - { "test", "Atlanta Knight" }, - { "GAME_TIME", "7:30pm" }, - { "GAME_NUMBER", "161" }, - { "DATE", "October 18 2018" }, - }; - - private static string ReplaceFunc(string findStr) - { - if (_replacePatterns.ContainsKey(findStr)) - { - return _replacePatterns[findStr]; - } - return findStr; - } - - [AllowAnonymous] - public async Task> testwwwww([FromServices] IWebHostEnvironment env) + public async Task testwwwww([FromServices] IWebHostEnvironment env) { - int count = 200; - - var list=new List(); - - for (int i = 0; i < count; i++) - { - Guid guid = NewId.NextGuid(); - list.Add(guid); - } - - return list; + await Task.CompletedTask; } [AllowAnonymous] public async Task GetEnvironmentName([FromServices] IWebHostEnvironment env) { - var a = IdentifierHelper.CreateGuid("1.2.840.113619.2.416.3358551739363725609857319676326094825431.2.840.113619.2.80.2338912612.50499.1563432834.1.4.11.2.840.113619.2.80.2338912612.50499.1563432835.4b8340000-3e2c-0016-fbdd-08db883b137f"); + var a = IdentifierHelper.CreateGuid("123456"); + var k = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("123456")); - var c = MD5Helper.Md5("1.2.840.113619.2.416.3358551739363725609857319676326094825431.2.840.113619.2.80.2338912612.50499.1563432834.1.4.11.2.840.113619.2.80.2338912612.50499.1563432835.4b8340000-3e2c-0016-fbdd-08db883b137f"); - + var c = MD5Helper.Md5("123456"); //update DicomInstance set Path = '/IRaCISData/TrialData/' + cast(DicomInstance.TrialId as varchar) + '/' + DicomInstance.SiteId + '/' + DicomInstance.SubjectId + '/' + DicomInstance.SubjectVisitId + '/Dicom/' + DicomInstance.StudyId + '/' + DicomInstance.Id + '.dcm' @@ -255,11 +329,7 @@ namespace IRaCIS.Application.Services - public string PostData(TestModel testModelList) - { - return String.Empty; - } - + #region 历史维护 /// /// 维护临床数据 --一定要在同步表前同步数据才行 /// @@ -299,6 +369,89 @@ namespace IRaCIS.Application.Services } + /// + /// 维护OSS 影像数据 + /// + /// + [AllowAnonymous] + [UnitOfWork] + public async Task OldLocalImageResizeJpg([FromServices] IOSSService oSSService, [FromServices] IRepository _repository, [FromServices] IWebHostEnvironment _hostEnvironment) + { + + var aliConfig = oSSService.ObjectStoreServiceOptions.AliyunOSS; + var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret); + + var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment); + + var studyList = _repository.Where(t => t.SeriesList.Any(t => t.ImageResizePath.Length < 10)).Select(t => new { t.TrialId, t.SiteId, t.SubjectId, t.SubjectVisitId, t.Id }).ToList(); + + foreach (var studyitem in studyList) + { + + var relativePath = $"{studyitem.TrialId}/{studyitem.SiteId}/{studyitem.SubjectId}/{studyitem.SubjectVisitId}/{StaticData.Folder.DicomFolder}/{studyitem.Id}/"; + + try + { + string nextMarker = null; + do + { + // 使用 prefix 模拟目录结构,设置 MaxKeys 和 NextMarker + var objectListing = _ossClient.ListObjects(new ListObjectsRequest(aliConfig.bucketName) + { + Prefix = relativePath, + MaxKeys = 1000, + Marker = nextMarker + }); + + var jpgInfoList = objectListing.ObjectSummaries + .Where(summary => summary.Key.EndsWith(".jpg")) + .Select(summary => + { + string fileName = summary.Key.Split('/').Last(); // 提取文件夹名 + return new + { + + Key = summary.Key, + InstanceId = Guid.TryParse( + fileName.Split('.')[0], + out Guid instanceId) + ? instanceId + : Guid.Empty + }; + }) + .Where(info => info.InstanceId != Guid.Empty) + .ToList(); + + foreach (var jpg in jpgInfoList) + { + var seriesId = _repository.Where(t => t.Id == jpg.InstanceId).Select(t => t.SeriesId).FirstOrDefault(); + + await _repository.BatchUpdateAsync(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key }); + } + + // 设置 NextMarker 以获取下一页的数据 + nextMarker = objectListing.NextMarker; + + } while (!string.IsNullOrEmpty(nextMarker)); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + } + + await _repository.SaveChangesAsync(); + } + + + + return ResponseOutput.Ok(); + } + + + #endregion + + + } public class TestModel