2025-06-16 17:24:23 +08:00

58 lines
2.4 KiB
C#

using Syc.Basic.Web.WMS.Entitys;
using Syc.Basic.Web.WMS.IServices;
using Syc.Core.Tools;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
namespace Syc.Basic.Web.ServicesImpl
{
public class DictionaryService : IDictionaryService, ITransientDependency
{
private readonly IRepository<DataDictionary> dictRepository;
public DictionaryService(IRepository<DataDictionary> dictRepository)
{
this.dictRepository = dictRepository;
}
public async Task<T> GetAsync<T>(string dictCode, string key)
{
var dict = (await dictRepository.WithDetailsAsync(e => e.DictionaryItems)).FirstOrDefault(e => e.Key == dictCode && e.Status);
if(dict is null) return default(T);
var item = dict.DictionaryItems.FirstOrDefault(e => e.Key == key);
if(item is null) return default(T);
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(item.Value);
}
public async Task<DataDictionary> GetDictAsync(string dictCode)
{
var dict = await dictRepository.WithDetailsAsync(e => e.DictionaryItems);
return dict.FirstOrDefault(e => e.Key == dictCode);
}
public async Task<IEnumerable<T>> GetAsync<T>(string dictCode)
{
var dict = (await dictRepository.WithDetailsAsync(e => e.DictionaryItems)).FirstOrDefault(e => e.Key == dictCode && e.Status);
if (dict is null) return default;
return dict.DictionaryItems.Select(e => Newtonsoft.Json.JsonConvert.DeserializeObject<T>(e.Value)).ToList();
}
public async Task<Dictionary<string, T>> GetToKVAsync<T>(string dictCode)
{
var dict = (await dictRepository.WithDetailsAsync(e => e.DictionaryItems)).FirstOrDefault(e => e.Key == dictCode && e.Status);
if (dict is null) return default;
return dict.DictionaryItems
.Select(e => new KeyValuePair<string,T>(e.Key, Newtonsoft.Json.JsonConvert.DeserializeObject<T>(e.Value)))
.ToDictionary(e => e.Key,e => e.Value);
}
public Task<Dictionary<string, object>> GetToKVAsync(string dictCode) => GetToKVAsync<object>(dictCode);
}
}