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;
using Shentun.Peis.PlugIns;
using Volo.Abp.Threading;
namespace Shentun.Peis.ColumnReferences
{
///
/// 字段对照主表
///
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class ColumnReferenceAppService : ApplicationService
{
private readonly IRepository _repository;
private readonly IRepository _columnReferenceCodeRepository;
private readonly IRepository _columnReferenceInterfaceRepository;
private readonly ColumnReferenceManager _manager;
private readonly CacheService _cacheService;
private readonly IRepository _userRepository;
public ColumnReferenceAppService(
IRepository repository,
ColumnReferenceManager manager,
CacheService cacheService,
IRepository userRepository,
IRepository columnReferenceCodeRepository,
IRepository columnReferenceInterfaceRepository
)
{
_repository = repository;
_manager = manager;
_cacheService = cacheService;
_userRepository = userRepository;
_columnReferenceCodeRepository = columnReferenceCodeRepository;
_columnReferenceInterfaceRepository = columnReferenceInterfaceRepository;
}
///
/// 根据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 置底
///
[HttpPost("api/app/ColumnReference/UpdateManySort")]
public async Task UpdateManySortAsync(Guid id, int SortType)
{
await _manager.UpdateManySortAsync(id, SortType);
}
///
/// 修改排序 拖拽
///
///
///
[HttpPost("api/app/ColumnReference/UpdateSortMany")]
public async Task UpdateSortManyAsync(UpdateSortManyDto input)
{
await _manager.UpdateSortManyAsync(input);
}
///
///获取字段对照本系统所有列名
///
///
///
[HttpPost("api/app/ColumnReference/GetAppColumnNames")]
public async Task> GetAppColumnNamesAsync(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 = await InvokeAsync(assemblyName, className, parmValue, "GetAppColumnNames");
List list = new List();
if (objectValue is IEnumerable enumerableObject)
{
list = enumerableObject.Cast().ToList();
}
return list;
}
public async Task GetAppFilterColumnName(ColumnReferenceIdInputDto input)
{
return null;
}
///
///获取字段对照第三方系统所有列名
///
///
///
[HttpPost("api/app/ColumnReference/GetInterfaceColumnNames")]
public async Task> GetInterfaceColumnNamesAsync(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 = await InvokeAsync(assemblyName, className, parmValue, "GetInterfaceColumnNames");
List list = new List();
if (objectValue is IEnumerable enumerableObject)
{
list = enumerableObject.Cast().ToList();
}
return list;
}
///
///获取字段对照本系统所有数据
///
///
///
[HttpPost("api/app/ColumnReference/GetAppCodeValues")]
public async Task> GetAppCodeValuesAsync(ColumnReferenceIdInputDto input)
{
//var columnReferenceCodes = await _columnReferenceCodeRepository.GetListAsync(o => o.CodeValue == input.Id.ToString());
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;
var list = await InvokeListAsync(assemblyName, className, parmValue, "GetAppCodeValuesAsync");
return list;
}
public async Task> GetAppFilterCodeValues(ColumnReferenceIdInputDto input)
{
return null;
}
///
///获取字段对照第三方系统所有数据
///
///
///
[HttpPost("api/app/ColumnReference/GetInterfaceCodeValues")]
public async Task> GetInterfaceCodeValuesAsync(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;
var list = await InvokeListAsync(assemblyName, className, parmValue, "GetInterfaceCodeValuesAsync");
return list;
}
///
/// 通过本系统编码获取第三方系统编码
///
///
///
[HttpPost("api/app/ColumnReference/GetInterfaceCodeValuesByAppCode")]
public async Task> GetInterfaceCodeValuesByAppCode(ColumnReferenceInterfaceCodeValuesInputDto input)
{
var columnReferenceCode = await _columnReferenceCodeRepository.FirstOrDefaultAsync(o => o.CodeValue == input.Code);
if(columnReferenceCode == null)
{
return null;
}
var items = await _columnReferenceInterfaceRepository.GetListAsync(o => o.ColumnReferenceCodeId == columnReferenceCode.Id);
var entity = await _repository.GetAsync(input.ColumnReferenceId);
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;
var list = await InvokeListAsync(assemblyName, className, parmValue, "GetInterfaceCodeValuesAsync");
var result = new List();
foreach ( var item in items)
{
var columnReferenceInterfaceCodeValueDto = new ColumnReferenceInterfaceCodeValueDto()
{
CodeValue = item.InterfaceCodeValue,
};
var interfaceItem = list.Where(o => o.Code == item.InterfaceCodeValue).FirstOrDefault();
if(interfaceItem != null)
{
columnReferenceInterfaceCodeValueDto.DisplayName = interfaceItem.DisplayName;
}
result.Add(columnReferenceInterfaceCodeValueDto);
}
return result;
}
public async Task> GetColumnReferenceInterfaceCodeValues(ColumnReferenceIdInputDto input)
{
return null;
}
public async Task CreateColumnReferenceValue(CreateColumnReferenceValue input)
{
}
private async Task