178 lines
6.7 KiB
C#
178 lines
6.7 KiB
C#
|
using Microsoft.AspNetCore.Authorization;
|
|||
|
using Microsoft.AspNetCore.Mvc;
|
|||
|
using Syc.Basic.Web.Dtos;
|
|||
|
using Syc.Basic.Web.Dtos.Common;
|
|||
|
using Syc.Basic.Web.Dtos.Dict;
|
|||
|
using Syc.Basic.Web.WMS.Dtos.Organization;
|
|||
|
using Syc.Basic.Web.WMS.Entitys;
|
|||
|
using Syc.Basic.Web.WMS.IServices;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Linq.Dynamic.Core;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Volo.Abp.Domain.Repositories;
|
|||
|
|
|||
|
namespace Syc.Basic.Web.Service
|
|||
|
{
|
|||
|
public class SystemService : ApiService
|
|||
|
{
|
|||
|
private readonly IRepository<DataDictionary> dictRepository;
|
|||
|
private readonly IRepository<DictionaryItems> dictItemsRepository;
|
|||
|
|
|||
|
public SystemService(IRepository<DataDictionary> dictRepository, IRepository<DictionaryItems> dictItemsRepository)
|
|||
|
{
|
|||
|
this.dictRepository = dictRepository;
|
|||
|
this.dictItemsRepository = dictItemsRepository;
|
|||
|
}
|
|||
|
|
|||
|
#region 数据字典
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 搜索数据字典
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public async Task<PageOutput<DictionaryInfoDto>> SearchDictAsync(SearchDictInput input)
|
|||
|
{
|
|||
|
var query = await dictRepository.GetQueryableAsync();
|
|||
|
var pageResult = query.WhereIf(!input.title.IsNullOrWhiteSpace(), e => input.title.Contains(e.Title))
|
|||
|
.PageResult(input.Page, input.PageSize);
|
|||
|
|
|||
|
var items = ObjectMapper.Map(pageResult.Queryable.ToList(), new List<DictionaryInfoDto>());
|
|||
|
|
|||
|
return new PageOutput<DictionaryInfoDto>()
|
|||
|
{
|
|||
|
PageIndex = input.Page,
|
|||
|
Data = items,
|
|||
|
PageSize = input.PageSize,
|
|||
|
Total = pageResult.RowCount
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 编辑数据字典
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public async Task EditDictAsync(DictionaryInfoDto input)
|
|||
|
{
|
|||
|
if (await dictRepository.AnyAsync(e => e.Key == input.key && e.Code != input.code))
|
|||
|
throw Oops.Oh($"Key:{input.key} 已存在,请勿重复使用");
|
|||
|
var dict = await dictRepository.FirstOrDefaultAsync(e => e.Code == input.code);
|
|||
|
if (dict is null)
|
|||
|
throw Oops.Oh($"未找到 {input.code} 的数据");
|
|||
|
|
|||
|
dict.Title = input.title;
|
|||
|
dict.Key = input.key;
|
|||
|
dict.Description = input.desc;
|
|||
|
dict.Status = input.status;
|
|||
|
|
|||
|
await dictRepository.UpdateAsync(dict);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 添加数据字典
|
|||
|
/// </summary>
|
|||
|
/// <param name="input"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public async Task AddDictAsync(DictionaryInfoDto input)
|
|||
|
{
|
|||
|
if (await dictRepository.AnyAsync(e => e.Key == input.key))
|
|||
|
throw Oops.Oh($"Key:{input.key} 已存在,请勿重复使用");
|
|||
|
|
|||
|
var dict = ObjectMapper.Map(input, new DataDictionary());
|
|||
|
dict.Createtime = DateTime.Now;
|
|||
|
dict.Status = input.status;
|
|||
|
dict.Code = Guid.NewGuid().ToString("N");
|
|||
|
await dictRepository.InsertAsync(dict);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 删除数据字典
|
|||
|
/// </summary>
|
|||
|
/// <param name="input"></param>
|
|||
|
/// <returns></returns>
|
|||
|
/// <exception cref="NotImplementedException"></exception>
|
|||
|
public async Task DelDictAsync(ByCodesDeleteInput input)
|
|||
|
{
|
|||
|
var dicts = await dictRepository.GetListAsync(e => input.code.Contains(e.Code));
|
|||
|
await dictRepository.DeleteManyAsync(dicts);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 根据字典编号获取字典项
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public async Task<PageOutput<DictItemDto>> GetDictItemsAsync(GetDictItemsInput input)
|
|||
|
{
|
|||
|
var dict = (await dictRepository.WithDetailsAsync(e => e.DictionaryItems)).FirstOrDefault(e => e.Code == input.code);
|
|||
|
if (dict is null)
|
|||
|
throw Oops.Oh($"未在数据字典中找到: {input.code} ");
|
|||
|
var dictItems = dict.DictionaryItems.Skip(input.SkipCount).Take(input.PageSize);
|
|||
|
var resultItems = ObjectMapper.Map(dictItems, new List<DictItemDto>());
|
|||
|
return new PageOutput<DictItemDto>()
|
|||
|
{
|
|||
|
Data = resultItems,
|
|||
|
PageSize = input.PageSize,
|
|||
|
SkipCount = input.SkipCount,
|
|||
|
PageIndex = input.Page,
|
|||
|
Total = dictItems.Count()
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 编辑字典项
|
|||
|
/// </summary>
|
|||
|
/// <param name="input"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public async Task EditDictItemAsync(DictItemDto input)
|
|||
|
{
|
|||
|
var entity = await dictItemsRepository.FirstOrDefaultAsync(e => e.DictionaryCode == input.dictCode && e.Id == input.Id);
|
|||
|
if (entity is null)
|
|||
|
throw Oops.Oh("字典项不存在或已被删除");
|
|||
|
entity.Value = input.value;
|
|||
|
entity.SubValue = input.subValue;
|
|||
|
entity.Key = input.key;
|
|||
|
entity.Status = input.status;
|
|||
|
await dictItemsRepository.UpdateAsync(entity);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 添加字典项
|
|||
|
/// </summary>
|
|||
|
/// <param name="input"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public async Task AddDictItemAsync(DictItemDto input)
|
|||
|
{
|
|||
|
if (await dictItemsRepository.AnyAsync(e => e.DictionaryCode == input.dictCode && e.Key == input.key))
|
|||
|
throw Oops.Oh("字典中已存在相同字段的项");
|
|||
|
var dictItem = ObjectMapper.Map(input, new DictionaryItems());
|
|||
|
dictItem.Createtime = DateTime.Now;
|
|||
|
dictItem.Status = true;
|
|||
|
await dictItemsRepository.InsertAsync(dictItem);
|
|||
|
}
|
|||
|
|
|||
|
public async Task DelDictItemAsync(ByIdsDeleteInput input)
|
|||
|
{
|
|||
|
var items = await dictItemsRepository.GetListAsync(e => input.Ids.Contains(e.Id));
|
|||
|
await dictItemsRepository.DeleteManyAsync(items);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取字典项
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
[AllowAnonymous]
|
|||
|
public async Task<IDictionary<string, object>> GetItemAsync(Abp.Application.Contracts.ByCodeInput input)
|
|||
|
{
|
|||
|
var dictEntity = await dictRepository.FirstOrDefaultAsync(e => e.Key == input.Code);
|
|||
|
if (dictEntity is null)
|
|||
|
throw Oops.Oh("未找到字典项");
|
|||
|
var entitys = await dictItemsRepository.GetListAsync(e => e.DictionaryCode == dictEntity.Code);
|
|||
|
return entitys.Select(e => new KeyValuePair<string, object>(e.Key, e.Value)).ToDictionary(e => e.Key, e => e.Value);
|
|||
|
}
|
|||
|
|
|||
|
#endregion 数据字典
|
|||
|
}
|
|||
|
}
|