using AutoMapper.Internal.Mappers; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.Identity; using Volo.Abp; using Shentun.Peis.Models; using Microsoft.AspNetCore.Authorization; using NPOI.SS.UserModel; using System.Reflection; using NUglify.JavaScript.Syntax; using System.Collections; using System.Linq.Dynamic.Core; using SqlSugar; using Volo.Abp.Application.Dtos; using Volo.Abp.Users; using Volo.Abp.ObjectMapping; using Microsoft.Extensions.Configuration; using System.IO; using Shentun.Peis.HelperDto; namespace Shentun.Peis.ColumnReferences { /// /// 字段对照主表 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class ColumnReferenceAppService : ApplicationService { private readonly IRepository _repository; private readonly ColumnReferenceManager _manager; private readonly CacheService _cacheService; private readonly IRepository _userRepository; public ColumnReferenceAppService( IRepository repository, ColumnReferenceManager manager, CacheService cacheService, IRepository userRepository ) { _repository = repository; _manager = manager; _cacheService = cacheService; _userRepository = userRepository; } /// /// 根据ID查实体内容 /// /// /// [HttpPost("api/app/ColumnReference/Get")] public async Task GetAsync(Guid id) { var entity = await _repository.GetAsync(id); var entityDto = ObjectMapper.Map(entity); entityDto.CreatorName = _cacheService.GetUserNameAsync(entityDto.CreatorId).Result; entityDto.LastModifierName = _cacheService.GetUserNameAsync(entityDto.LastModifierId).Result; return entityDto; } /// /// 查询列表 /// /// [HttpPost("api/app/ColumnReference/GetList")] public async Task> GetListAsync() { var userQueryable = await _userRepository.GetQueryableAsync(); var entlist = (from a in await _repository.GetQueryableAsync() join b in userQueryable on a.CreatorId equals b.Id into bb from ab in bb.DefaultIfEmpty() join c in userQueryable on a.LastModifierId equals c.Id into cc from ac in cc.DefaultIfEmpty() select new { a, CreatorName = ab != null ? ab.UserName : "", LastModifierName = ac != null ? ac.UserName : "" }) .Select(s => new ColumnReferenceDto { CreationTime = s.a.CreationTime, CreatorId = s.a.CreatorId, LastModifierId = s.a.LastModifierId, Id = s.a.Id, DisplayOrder = s.a.DisplayOrder, DisplayName = s.a.DisplayName, ParmValue = s.a.ParmValue, LastModificationTime = s.a.LastModificationTime, CreatorName = s.CreatorName, LastModifierName = s.LastModifierName }).OrderBy(o => o.DisplayOrder).ToList(); return entlist; } /// /// 创建 /// /// /// [HttpPost("api/app/ColumnReference/Create")] public async Task CreateAsync(CreateColumnReferenceDto input) { var createEntity = ObjectMapper.Map(input); var entity = await _manager.CreateAsync(createEntity); entity = await _repository.InsertAsync(entity); var dto = ObjectMapper.Map(entity); return dto; } /// /// 修改 /// /// /// [HttpPost("api/app/ColumnReference/Update")] public async Task UpdateAsync(UpdateColumnReferenceDto input) { var entity = await _repository.GetAsync(input.Id); var sourceEntity = ObjectMapper.Map(input); await _manager.UpdateAsync(sourceEntity, entity); entity = await _repository.UpdateAsync(entity); return ObjectMapper.Map(entity); } /// /// 删除 /// /// /// [HttpPost("api/app/ColumnReference/Delete")] public async Task DeleteAsync(Guid id) { var entity = await _repository.GetAsync(id); await _manager.CheckAndDeleteAsync(entity); } /// /// 修改排序 置顶,置底 /// /// 需要修改的ID /// 修改方式:1 置顶 2 置底 /// [HttpPut("api/app/ColumnReference/UpdateManySort")] public async Task UpdateManySortAsync(Guid id, int SortType) { await _manager.UpdateManySortAsync(id, SortType); } /// /// 修改排序 拖拽 /// /// /// [HttpPut("api/app/ColumnReference/UpdateSortMany")] public async Task UpdateSortManyAsync(UpdateSortManyDto input) { await _manager.UpdateSortManyAsync(input); } //public async Task> GetColumns(ColumnReferenceIdInputDto input) //{ // var entity = await _repository.GetAsync(input.Id); // var parmValue = entity.ParmValue; // var configurationBuilder = new ConfigurationBuilder() // .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); // var config = configurationBuilder.Build(); // var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value; // var className = config.GetSection("Interface").GetSection("ClassName").Value; // object objectValue = Invoke(assemblyName, className, "GetColumns"); // List list = new List(); // if (objectValue is IEnumerable enumerableObject) // { // list = enumerableObject.Cast().ToList(); // } // return list; //} //public async Task GetFilterColumnName(ColumnReferenceIdInputDto input) //{ // return null; //} //public async Task> GetInterfaceColumns(ColumnReferenceIdInputDto input) //{ // var entity = await _repository.GetAsync(input.Id); // var parmValue = entity.ParmValue; // var configurationBuilder = new ConfigurationBuilder() // .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); // var config = configurationBuilder.Build(); // var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value; // var className = config.GetSection("Interface").GetSection("ClassName").Value; // object objectValue = Invoke(assemblyName, className, "GetInterfaceColumns"); // List list = new List(); // if (objectValue is IEnumerable enumerableObject) // { // list = enumerableObject.Cast().ToList(); // } // return list; //} //public async Task> GetCodeValues(ColumnReferenceIdInputDto input) //{ // return null; //} //public async Task> GetFilterCodeValues(ColumnReferenceIdInputDto input) //{ // return null; //} //public async Task> GetInterfaceCodeValues(ColumnReferenceIdInputDto input) //{ // return null; //} //public async Task> GetColumnReferenceInterfaceCodeValues(ColumnReferenceIdInputDto input) //{ // return null; //} //public async Task CreateColumnReferenceValue(CreateColumnReferenceValue input) //{ //} //private object Invoke(string assemblyName, string className, string methodName, object[] args = null) //{ // Assembly assembly = Assembly.Load(assemblyName); // Type type = assembly.GetType(className); // // 创建类的实例 // object instance = Activator.CreateInstance(type); // // 获取方法信息 // MethodInfo method = type.GetMethod(methodName); // // 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 } // object returnValue = method.Invoke(instance, args); // return returnValue; //} } }