增加前端国际化刷新查询接口

Uat_Study
hang 2023-06-28 16:04:24 +08:00
parent fd33e4c3d4
commit 0dcd74388f
6 changed files with 133 additions and 62 deletions

View File

@ -11,6 +11,8 @@ using MassTransit;
using MassTransit.NewIdProviders; using MassTransit.NewIdProviders;
using System.IO; using System.IO;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Application.Helper;
namespace IRaCIS.Core.API namespace IRaCIS.Core.API
{ {
@ -64,9 +66,7 @@ namespace IRaCIS.Core.API
//缓存项目的状态 匿名化数据 //缓存项目的状态 匿名化数据
await InitCache(host); await InitCache(host);
WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, StaticData.En_US_Json) );
WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, StaticData.Zh_CN_Json));
@ -104,54 +104,24 @@ namespace IRaCIS.Core.API
private static async Task InitCache(IHost host) private static async Task InitCache(IHost host)
{ {
var _repository = host.Services.GetService(typeof(IRepository)) as IRepository;
//初始化 国际化数据,并且监测国际化文件变更
await InternationalizationHelper.InitInternationlizationDataAndWatchJsonFileAsync(_repository);
var _mediator = host.Services.GetService(typeof(IMediator)) as IMediator; var _mediator = host.Services.GetService(typeof(IMediator)) as IMediator;
await _mediator.Send(new AnonymizeCacheRequest()); await _mediator.Send(new AnonymizeCacheRequest());
await _mediator.Send(new TrialStateCacheRequest()); await _mediator.Send(new TrialStateCacheRequest());
}
private static void LoadJsonFile(string filePath)
{
IConfigurationBuilder builder = new ConfigurationBuilder()
.AddJsonFile(filePath);
IConfigurationRoot enConfiguration = builder.Build();
foreach (IConfigurationSection section in enConfiguration.GetChildren())
{
if (filePath.Contains(StaticData.En_US_Json) )
{
StaticData.En_US_Dic[section.Key] = section.Value;
}
else
{
StaticData.Zh_CN_Dic[section.Key] = section.Value;
}
}
} }
public static void WatchJsonFile(string filePath)
{
LoadJsonFile(filePath);
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath));
watcher.Changed += (sender, e) => LoadJsonFile(filePath);
watcher.EnableRaisingEvents = true;
}
} }
} }

View File

@ -1,5 +1,7 @@
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -13,20 +15,21 @@ namespace IRaCIS.Core.Application.Helper
{ {
public static class InternationalizationHelper public static class InternationalizationHelper
{ {
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
public static async void AddOrUpdateJsonKeyValueAsync(string key, string value) public static async Task AddOrUpdateJsonKeyValueAsync(string key, string value)
{ {
var jsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
if (!Directory.Exists(jsonFileFolder) ||
Directory.GetFiles(jsonFileFolder).Any(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase))) if (!Directory.Exists(JsonFileFolder) ||
Directory.GetFiles(JsonFileFolder).Any(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase)))
{ {
throw new BusinessValidationFailedException("国际化Json文件目录有误"); throw new BusinessValidationFailedException("国际化Json文件目录有误");
} }
// //将该目录下的国际化文件全部修改
foreach (var filePath in Directory.GetFiles(jsonFileFolder).Where(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase))) foreach (var filePath in Directory.GetFiles(JsonFileFolder).Where(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase)))
{ {
var json = await File.ReadAllTextAsync(filePath); var json = await File.ReadAllTextAsync(filePath);
@ -40,5 +43,72 @@ namespace IRaCIS.Core.Application.Helper
} }
} }
public static async Task InitInternationlizationDataAndWatchJsonFileAsync(IRepository _repository)
{
//查询数据库的数据
var toJsonList = await _repository.Where<Internationalization>(t => t.InternationalizationType == 1).Select(t => new
{
t.Code,
t.Value,
t.ValueCN
}).ToListAsync();
//组织成json 文件
var usJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json);
var cnJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json);
//本地静态文件国际化需要
foreach (var tojsonItem in toJsonList)
{
StaticData.En_US_Dic[tojsonItem.Code] = tojsonItem.Value;
StaticData.Zh_CN_Dic[tojsonItem.Code] = tojsonItem.ValueCN;
}
File.WriteAllText(usJsonPath, JsonConvert.SerializeObject(StaticData.En_US_Dic));
File.WriteAllText(cnJsonPath, JsonConvert.SerializeObject(StaticData.Zh_CN_Dic));
//监测Json文件变更 实时刷新数据
WatchJsonFile(usJsonPath);
WatchJsonFile(cnJsonPath);
}
public static void WatchJsonFile(string filePath)
{
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath));
watcher.Changed += (sender, e) => LoadJsonFile(filePath);
watcher.EnableRaisingEvents = true;
}
private static void LoadJsonFile(string filePath)
{
IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile(filePath);
IConfigurationRoot enConfiguration = builder.Build();
foreach (IConfigurationSection section in enConfiguration.GetChildren())
{
if (filePath.Contains(StaticData.En_US_Json))
{
StaticData.En_US_Dic[section.Key] = section.Value;
}
else
{
StaticData.Zh_CN_Dic[section.Key] = section.Value;
}
}
}
} }
} }

View File

@ -2494,6 +2494,13 @@
临床答案 临床答案
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.AutoAddCRCClinical(IRaCIS.Core.Application.Service.Reading.Dto.AutoAddClinicalInDto)">
<summary>
自动添加CRC临床数据
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetCRCSubjectClinicalList(IRaCIS.Core.Application.Service.Reading.Dto.GetCRCSubjectClinicalInDto)"> <member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.GetCRCSubjectClinicalList(IRaCIS.Core.Application.Service.Reading.Dto.GetCRCSubjectClinicalInDto)">
<summary> <summary>
获取CRC受试者临床数据 获取CRC受试者临床数据

View File

@ -38,7 +38,7 @@ namespace IRaCIS.Core.Application.ViewModel
public Guid? Id { get; set; } public Guid? Id { get; set; }
public int State { get; set; } public int State { get; set; }
public string Description { get; set; } = string.Empty; public string Description { get; set; } = string.Empty;
public string Code { get; set; } public string Code { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty; public string Value { get; set; } = string.Empty;
public string ValueCN { get; set; } = string.Empty; public string ValueCN { get; set; } = string.Empty;
@ -46,6 +46,13 @@ namespace IRaCIS.Core.Application.ViewModel
} }
public class InternationalizationSimpleDto
{
public string Code { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty;
public string ValueCN { get; set; } = string.Empty;
}
} }

View File

@ -8,6 +8,8 @@ using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.ViewModel;
using Microsoft.AspNetCore.Authorization;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {
/// <summary> /// <summary>
@ -24,22 +26,37 @@ namespace IRaCIS.Core.Application.Service
_internationalizationRepository = internationalizationRepository; _internationalizationRepository = internationalizationRepository;
} }
[AllowAnonymous]
public async Task<List<InternationalizationSimpleDto>> GetFrontInternationalizationList()
{
var list = await _internationalizationRepository.Where(t => t.InternationalizationType == 0).Select(t => new InternationalizationSimpleDto()
{
Code = t.Code,
Value = t.Value,
ValueCN = t.ValueCN
}).ToListAsync();
return list;
}
[HttpPost] [HttpPost]
public async Task<PageOutput<InternationalizationView>> GetInternationalizationList(InternationalizationQuery inQuery) public async Task<PageOutput<InternationalizationView>> GetInternationalizationList(InternationalizationQuery inQuery)
{ {
var internationalizationQueryable =_internationalizationRepository var internationalizationQueryable = _internationalizationRepository
.WhereIf(inQuery.Description!=null,t=>t.Description.Contains(inQuery.Description)) .WhereIf(inQuery.Description != null, t => t.Description.Contains(inQuery.Description))
.WhereIf(inQuery.Code != null, t => t.Code.Contains(inQuery.Code)) .WhereIf(inQuery.Code != null, t => t.Code.Contains(inQuery.Code))
.WhereIf(inQuery.State != null, t => t.State==inQuery.State) .WhereIf(inQuery.State != null, t => t.State == inQuery.State)
.WhereIf(inQuery.InternationalizationType != null, t => t.InternationalizationType == inQuery.InternationalizationType) .WhereIf(inQuery.InternationalizationType != null, t => t.InternationalizationType == inQuery.InternationalizationType)
.WhereIf(inQuery.Value != null, t => t.Value.Contains(inQuery.Value)) .WhereIf(inQuery.Value != null, t => t.Value.Contains(inQuery.Value))
.WhereIf(inQuery.ValueCN != null, t => t.ValueCN.Contains(inQuery.ValueCN)) .WhereIf(inQuery.ValueCN != null, t => t.ValueCN.Contains(inQuery.ValueCN))
.ProjectTo<InternationalizationView>(_mapper.ConfigurationProvider); .ProjectTo<InternationalizationView>(_mapper.ConfigurationProvider);
var pageList = await internationalizationQueryable var pageList = await internationalizationQueryable
.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "Id" : inQuery.SortField, .ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(InternationalizationView.State) : inQuery.SortField,
inQuery.Asc); inQuery.Asc);
return pageList; return pageList;
@ -56,7 +73,7 @@ namespace IRaCIS.Core.Application.Service
IsVerify = true IsVerify = true
}; };
var entity = await _internationalizationRepository.InsertOrUpdateAsync(addOrEditInternationalization, true,verifyExp1); var entity = await _internationalizationRepository.InsertOrUpdateAsync(addOrEditInternationalization, true, verifyExp1);
return ResponseOutput.Ok(entity.Id.ToString()); return ResponseOutput.Ok(entity.Id.ToString());

View File

@ -53,7 +53,7 @@ namespace IRaCIS.Application.Services
{ {
var rows = await MiniExcel.QueryAsync<InternationalizationAddOrEdit>(@"C:\Users\Administrator\Desktop\Export\NetCore.xlsx"); var rows = await MiniExcel.QueryAsync<InternationalizationAddOrEdit>(@"C:\Users\Administrator\Desktop\Export\vue.xlsx");
foreach (var row in rows) foreach (var row in rows)
{ {