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); } } }