using EFCore.BulkExtensions;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Csv;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Shouldly;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;
using Win.Abp.Snowflakes;
using Win.Sfs.BaseData.ImportExcelCommon;
using Win.Sfs.SettleAccount.CommonManagers;
using Win.Sfs.SettleAccount.Constant;
using Win.Sfs.SettleAccount.ExcelImporter;
using Win.Sfs.Shared.Filter;
namespace Win.Sfs.SettleAccount.Entities.UnHQSettleAccounts
{
///
/// 红旗主机场明细导入
///
[Authorize(SettleAccountPermissions.HQ_HPlatform.Default)]
//[AllowAnonymous]
[Route("api/settleaccount/UnHQSettle")]
public class UnHQSettleAppService : SettleAccountApplicationBase, IUnHQSettleAppService
{
private readonly IGuidGenerator _guidGenerator;
private readonly IExcelImportAppService _excelImportService;
private readonly ISettleAccountBranchEfCoreRepository _versionRepository;
private readonly ISettleAccountBranchEfCoreRepository _repository;
private readonly ISettleAccountBranchEfCoreRepository _versionMRepository;
private readonly ISettleAccountBranchEfCoreRepository _repositoryM;
///
/// 构建方法
///
/// 构建UID
/// 仓储接口
/// 缓存
public UnHQSettleAppService(IGuidGenerator guidGenerator,
ISettleAccountBranchEfCoreRepository versionRepository,
ISettleAccountBranchEfCoreRepository repository,
IDistributedCache cache,
IExcelImportAppService excelImportService,
ISnowflakeIdGenerator snowflakeIdGenerator,
ICommonManager commonManager,
ISettleAccountBranchEfCoreRepository versionMRepository
) : base(cache, excelImportService, snowflakeIdGenerator, commonManager)
{
_versionRepository = versionRepository;
_guidGenerator = guidGenerator;
_excelImportService = excelImportService;
_repository = repository;
_versionMRepository = versionMRepository;
}
///
/// 统一导入红旗主机场数据
///
///
///
///
///
///
///
///
[HttpPost]
[Route("ExcelImport")]
[DisableRequestSizeLimit]
//[Authorize(SettleAccountPermissions.HQ_HPlatform.Create)]
public async Task UnHQSettleUploadExcelImport([FromForm] IFormFileCollection files, Guid branchId, string year, string period, string version, string customerCode)
{
ExportImporter _exportImporter = new ExportImporter();
var result_org = await _exportImporter.UploadExcelImport(files, _excelImportService);
if (result_org == null || result_org.Count == 0)
{
throw new BusinessException("导入模板数据不能为空!");
}
var result = result_org.Where(p => p.Factory != "L").ToList();//去掉工厂L
var entityList = ObjectMapper.Map, List>(result);
//删除版本
var _versionQuery = _versionRepository.Where(p => p.Version == version);
await _versionQuery.BatchDeleteAsync();
//删除明细
var _query = _repository.Where(p => p.Version == version);
await _query.BatchDeleteAsync();
var _id = GuidGenerator.Create();
var _bomList = new List();
_bomList.Add(new UnHQSettleAccountVersion(_id, branchId, year, period, version, customerCode));
foreach (var itm in entityList)
{
if (string.IsNullOrEmpty(itm.HQHKanBan) && itm.StorageLocationDesc.Contains("备品"))
{
//赋值上主键ID
itm.SetValue(GuidGenerator.Create(), branchId, year, period, version, "BJ");//备品库没有看板号,需要特殊标识一下BJ,已经和客户确认
}
else
{
itm.SetValue(GuidGenerator.Create(), branchId, year, period, version);
}
}
await _repository.GetDbContext().BulkInsertAsync(entityList);
await _versionRepository.GetDbContext().BulkInsertAsync(_bomList);
return ApplicationConsts.SuccessStr;
}
///
/// 按ID获取唯一实体
///
///
/// 返回实体全部属性
///
/// ID
/// 实体DTO
[HttpGet]
[Route("{id}")]
virtual public async Task GetAsync(Guid id)
{
var result = await GetFromCacheAsync(id);
var dto = ObjectMapper.Map(result);
return dto;
}
private async Task GetFromCacheAsync(Guid id)
{
var result = await _repository.GetAsync(id);
return result;
}
private async Task GetCountAsync(UnHQSettleRequestDto input)
{
return await _repository.GetCountByFilterAsync(input.BranchId, input.Filters);
}
private async Task GetCountAsync(UnHQSettleVersionRequestDto input)
{
return await _versionRepository.GetCountByFilterAsync(input.BranchId, input.Filters);
}
///
/// 导出文件
///
///
///
[HttpPost]
[Route("Export")]
virtual public async Task ExportAsync(UnHQSettleRequestDto input)
{
IExporter _csv = new CsvExporter();
IExporter _excel = new ExcelExporter();
if (!string.IsNullOrEmpty(input.Version))
{
input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "Version", Logic = EnumFilterLogic.And, Value = input.Version });
}
var entities = await _repository.GetListByFilterAsync(input.BranchId, input.Filters, input.Sorting, int.MaxValue,
0, true);
var dtoDetails = ObjectMapper.Map, List>(entities);
string _fileName = string.Empty;
//声明导出容器
byte[] result = null;
switch (input.FileType)
{
case 0:
_fileName = string.Format("红旗未结明细_{0}.csv", input.UserId.ToString());
result = await _csv.ExportAsByteArray(dtoDetails);
break;
case 1:
_fileName = string.Format("红旗未结明细_{0}.xlsx", input.UserId.ToString());
result = await _excel.ExportAsByteArray(dtoDetails);
break;
}
result.ShouldNotBeNull();
//保存导出文件到服务器存成二进制
await _excelImportService.SaveBlobAsync(
new SaveExcelImportInputDto
{
Name = _fileName,
Content = result
}
);
return _fileName;
}
///
/// 根据筛选条件获取实体列表
///
///
/// 请求条件包括:筛选条件列表,排序条件,数据数量,页码
///
/// 请求条件
/// 实体DTO列表
[HttpPost]
[Route("list")]
virtual public async Task> GetListAsync(UnHQSettleRequestDto input)
{
if (!string.IsNullOrEmpty(input.Version))
{
input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "Version", Logic = EnumFilterLogic.And, Value = input.Version });
}
else
{
return new PagedResultDto(0, new List());
}
var entities = await _repository.GetListByFilterAsync(input.BranchId, input.Filters, input.Sorting, input.MaxResultCount,
input.SkipCount, true);
var totalCount = await GetCountAsync(input);
var dtos = ObjectMapper.Map, List>(entities);
return new PagedResultDto(totalCount, dtos);
}
///
/// 获取实体总数
///
/// 实体总数
[HttpGet]
[Route("count")]
virtual public async Task GetTotalCountAsync(Guid branchId)
{
return await _repository.GetCountAsync(branchId);
}
///
/// 获取全部实体列表
///
/// 实体DTO列表
[HttpGet]
[Route("all")]
virtual public async Task> GetAllAsync(Guid branchId)
{
var entities = await _repository.GetAllAsync(branchId, true);
var dtos = ObjectMapper.Map, List>(entities);
return new ListResultDto(dtos);
}
///
/// 删除实体
///
/// ID
/// 无
[HttpDelete]
[Route("{id}")]
virtual public async Task DeleteAsync(Guid id)
{
await _repository.DeleteAsync(id);
}
///
/// 按IDs删除实体列表
///
/// IDs
/// 是否执行成功
[HttpPost]
[Route("delete")]
virtual public async Task DeleteListAsync(List ids)
{
foreach (var id in ids)
{
var entity = await GetFromCacheAsync(id);
//await Cache.DeleteAsync(id.ToString());
}
return await _repository.DeleteListAsync(ids);
}
///
/// 版本列表查询
///
///
///
[HttpPost]
[Route("listversion")]
public async Task> GetVersionListAsync(UnHQSettleVersionRequestDto input)
{
var entities = await _versionRepository.GetListByFilterAsync(input.BranchId, input.Filters, input.Sorting, int.MaxValue,
input.SkipCount, true);
var totalCount = await GetCountAsync(input);
var dtos = ObjectMapper.Map, List>(entities);
return new PagedResultDto(totalCount, dtos);
}
}
}