diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarConsignAppService.cs b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarConsignAppService.cs new file mode 100644 index 00000000..d5262125 --- /dev/null +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarConsignAppService.cs @@ -0,0 +1,361 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +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 Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Distributed; +using Shouldly; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; +using Win.Abp.Snowflakes; +using Win.Sfs.BaseData.ImportExcelCommon; +using Win.Sfs.SettleAccount.CommonManagers; +using Win.Sfs.SettleAccount.Constant; +using Win.Sfs.SettleAccount.Entities.JFCarConsigns; +using Win.Sfs.SettleAccount.Entities.Materials; +using Win.Sfs.SettleAccount.ExcelImporter; +using Win.Sfs.SettleAccount.ExportReports; +using Win.Sfs.SettleAccount.MaterialRelationships; +using Win.Sfs.Shared.CacheBase; +using Win.Sfs.Shared.Enums.SettleAccount; +using Win.Sfs.Shared.Filter; +using Win.Utils; + +namespace Win.Sfs.SettleAccount.JFCarConsigns +{ + + /// + /// 区域相关应用服务 + /// + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + [AllowAnonymous] + [Route("api/settleaccount/JFCarConsign")] + public class JFCarConsignAppService : SettleAccountApplicationBase, IJFCarConsignAppService + { + private readonly IGuidGenerator _guidGenerator; + + private readonly IObjectMapper _objectMapper; + + private readonly IExcelImportAppService _excelImportService; + + + private readonly ISettleAccountBranchEfCoreRepository _repository; + + private readonly ISettleAccountBranchEfCoreRepository _versionRepository; + private readonly ISettleAccountBranchEfCoreRepository _MaterialRepository; + /// + /// 构建方法 + /// + /// 构建UID + /// 自动map + /// 仓储接口 + /// 缓存 + public JFCarConsignAppService(IGuidGenerator guidGenerator, + IObjectMapper objectMapper, + IExcelImportAppService excelImportService, + ISnowflakeIdGenerator snowflakeIdGenerator, + ICommonManager commonManager, + ISettleAccountBranchEfCoreRepository repository, + ISettleAccountBranchEfCoreRepository versionRepository, + ISettleAccountBranchEfCoreRepository MaterialRepository, + IDistributedCache cache + ) : base(cache,excelImportService,snowflakeIdGenerator,commonManager) + { + _guidGenerator = guidGenerator; + _objectMapper = objectMapper; + _repository = repository; + _excelImportService = excelImportService; + _versionRepository = versionRepository; + _MaterialRepository = MaterialRepository; + } + + #region 导入导出功能 + /// + /// 导入功能 + /// + /// 上传的文件(前端已经限制只能上传一个附件) + /// + [HttpPost] + [Route("ExcelImport")] + [DisableRequestSizeLimit] + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + + public async Task JFCarConsignUploadExcelImport([FromForm] IFormFileCollection files, Guid branchId, string year, string period, string version, string customerCode,DateTime datetime) + { + ExportImporter _exportImporter = new ExportImporter(); + var result = await _exportImporter.UploadExcelImport(files, _excelImportService); + 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(); + //List errorList = new List(); + var checkList = new List(); + //通过《零件关系匹配设置表》验证物料号 + foreach (var itm in entityList) + { + if (!_MaterialRepository.Any(p => p.ShipMaterailCode == itm.MaterialCode)) + { + checkList.Add(new ErrorExportDto(version,string.Empty, string.Empty, string.Empty,itm.MaterialCode, string.Empty, string.Format("发货看板物料号:{0}在《零件关系匹配设置表》中不存在!", itm.MaterialCode), string.Empty)); + //errorList.Add(string.Format("发货看板物料号:{0}在《零件关系匹配设置表》中不存在!", itm.MaterialCode)); + } + } + if (checkList.Count > 0) + { + return await ExportErrorReportAsync(checkList); + } + var _id = GuidGenerator.Create(); + var _JFCarConsignList = new List(); + + _JFCarConsignList.Add(new JFCarConsignVersion(_id, branchId, period, version, customerCode, datetime)); + foreach (var itm in entityList) + { + itm.State = (int)EnumSettleStatus.未结算; + itm.SetValue(GuidGenerator.Create(), branchId, period, version, customerCode, datetime,_id); + } + + + await _repository.GetDbContext().BulkInsertAsync(entityList); + + await _versionRepository.GetDbContext().BulkInsertAsync(_JFCarConsignList); + + //st.Stop(); + return ApplicationConsts.SuccessStr; + } + + + #endregion + + /// + /// 按ID获取唯一实体 + /// + /// + /// 返回实体全部属性 + /// + /// ID + /// 实体DTO + [HttpGet] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + virtual public async Task GetAsync(Guid id) + { + var result = await _repository.GetAsync(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(JFCarConsignRequestDto input) + { + return await _repository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + + private async Task GetCountAsync(JFCarConsignVersionRequestDto input) + { + return await _versionRepository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + /// + /// 获取实体总数 + /// + /// 实体总数 + [HttpGet] + [Route("count")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + virtual public async Task GetTotalCountAsync(Guid branchId) + { + return await _repository.GetCountAsync(branchId); + } + + /// + /// 删除实体 + /// + /// ID + /// + [HttpDelete] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Delete)] + virtual public async Task DeleteAsync(Guid id) + { + //var entity = await GetFromCacheAsync(id); + //await Cache.DeleteAsync(id.ToString()); + await _repository.DeleteAsync(id); + } + + /// + /// 按IDs删除实体列表 + /// + /// IDs + /// 是否执行成功 + [HttpPost] + [Route("delete")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Delete)] + virtual public async Task DeleteListAsync(List ids) + { + //foreach (var id in ids) + //{ + // var entity = await GetFromCacheAsync(id); + + //} + + return await _repository.DeleteListAsync(ids); + } + + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("list")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + + + public async Task> GetListAsync(Guid parentId, JFCarConsignRequestDto input) + { + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + 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); + } + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("listVersion")] + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + public async Task> GetVersionListAsync(JFCarConsignVersionRequestDto 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); + } + /// + /// 导出文件 + /// + /// + /// + [HttpPost] + [Route("Export")] + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + virtual public async Task ExportAsync(JFCarConsignRequestDto input) + { + + IExporter _csv = new CsvExporter(); + + IExporter _excel = new ExcelExporter(); + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + + 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", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _csv.ExportAsByteArray(dtoDetails); + + + + break; + case 1: + _fileName = string.Format("解放结算_{0}.xlsx", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _excel.ExportAsByteArray(dtoDetails); + break; + } + + result.ShouldNotBeNull(); + + //保存导出文件到服务器存成二进制 + await _excelImportService.SaveBlobAsync( + new SaveExcelImportInputDto + { + Name = _fileName, + Content = result + } + ); + return _fileName; + } + + [HttpPost] + [Route("jfupdate")] + + [UnitOfWork(isTransactional: false)] + public async Task UPdateFisAsync() + { + + await _repository.GetDbContext().Database.ExecuteSqlRawAsync( + "EXEC sp_jf_update" + ); + return true; + + + + } + + + } +} diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarConsign_HS/JFCarConsignAppService.cs b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarConsign_HS/JFCarConsignAppService.cs new file mode 100644 index 00000000..d5262125 --- /dev/null +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarConsign_HS/JFCarConsignAppService.cs @@ -0,0 +1,361 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +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 Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Distributed; +using Shouldly; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; +using Win.Abp.Snowflakes; +using Win.Sfs.BaseData.ImportExcelCommon; +using Win.Sfs.SettleAccount.CommonManagers; +using Win.Sfs.SettleAccount.Constant; +using Win.Sfs.SettleAccount.Entities.JFCarConsigns; +using Win.Sfs.SettleAccount.Entities.Materials; +using Win.Sfs.SettleAccount.ExcelImporter; +using Win.Sfs.SettleAccount.ExportReports; +using Win.Sfs.SettleAccount.MaterialRelationships; +using Win.Sfs.Shared.CacheBase; +using Win.Sfs.Shared.Enums.SettleAccount; +using Win.Sfs.Shared.Filter; +using Win.Utils; + +namespace Win.Sfs.SettleAccount.JFCarConsigns +{ + + /// + /// 区域相关应用服务 + /// + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + [AllowAnonymous] + [Route("api/settleaccount/JFCarConsign")] + public class JFCarConsignAppService : SettleAccountApplicationBase, IJFCarConsignAppService + { + private readonly IGuidGenerator _guidGenerator; + + private readonly IObjectMapper _objectMapper; + + private readonly IExcelImportAppService _excelImportService; + + + private readonly ISettleAccountBranchEfCoreRepository _repository; + + private readonly ISettleAccountBranchEfCoreRepository _versionRepository; + private readonly ISettleAccountBranchEfCoreRepository _MaterialRepository; + /// + /// 构建方法 + /// + /// 构建UID + /// 自动map + /// 仓储接口 + /// 缓存 + public JFCarConsignAppService(IGuidGenerator guidGenerator, + IObjectMapper objectMapper, + IExcelImportAppService excelImportService, + ISnowflakeIdGenerator snowflakeIdGenerator, + ICommonManager commonManager, + ISettleAccountBranchEfCoreRepository repository, + ISettleAccountBranchEfCoreRepository versionRepository, + ISettleAccountBranchEfCoreRepository MaterialRepository, + IDistributedCache cache + ) : base(cache,excelImportService,snowflakeIdGenerator,commonManager) + { + _guidGenerator = guidGenerator; + _objectMapper = objectMapper; + _repository = repository; + _excelImportService = excelImportService; + _versionRepository = versionRepository; + _MaterialRepository = MaterialRepository; + } + + #region 导入导出功能 + /// + /// 导入功能 + /// + /// 上传的文件(前端已经限制只能上传一个附件) + /// + [HttpPost] + [Route("ExcelImport")] + [DisableRequestSizeLimit] + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + + public async Task JFCarConsignUploadExcelImport([FromForm] IFormFileCollection files, Guid branchId, string year, string period, string version, string customerCode,DateTime datetime) + { + ExportImporter _exportImporter = new ExportImporter(); + var result = await _exportImporter.UploadExcelImport(files, _excelImportService); + 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(); + //List errorList = new List(); + var checkList = new List(); + //通过《零件关系匹配设置表》验证物料号 + foreach (var itm in entityList) + { + if (!_MaterialRepository.Any(p => p.ShipMaterailCode == itm.MaterialCode)) + { + checkList.Add(new ErrorExportDto(version,string.Empty, string.Empty, string.Empty,itm.MaterialCode, string.Empty, string.Format("发货看板物料号:{0}在《零件关系匹配设置表》中不存在!", itm.MaterialCode), string.Empty)); + //errorList.Add(string.Format("发货看板物料号:{0}在《零件关系匹配设置表》中不存在!", itm.MaterialCode)); + } + } + if (checkList.Count > 0) + { + return await ExportErrorReportAsync(checkList); + } + var _id = GuidGenerator.Create(); + var _JFCarConsignList = new List(); + + _JFCarConsignList.Add(new JFCarConsignVersion(_id, branchId, period, version, customerCode, datetime)); + foreach (var itm in entityList) + { + itm.State = (int)EnumSettleStatus.未结算; + itm.SetValue(GuidGenerator.Create(), branchId, period, version, customerCode, datetime,_id); + } + + + await _repository.GetDbContext().BulkInsertAsync(entityList); + + await _versionRepository.GetDbContext().BulkInsertAsync(_JFCarConsignList); + + //st.Stop(); + return ApplicationConsts.SuccessStr; + } + + + #endregion + + /// + /// 按ID获取唯一实体 + /// + /// + /// 返回实体全部属性 + /// + /// ID + /// 实体DTO + [HttpGet] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + virtual public async Task GetAsync(Guid id) + { + var result = await _repository.GetAsync(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(JFCarConsignRequestDto input) + { + return await _repository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + + private async Task GetCountAsync(JFCarConsignVersionRequestDto input) + { + return await _versionRepository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + /// + /// 获取实体总数 + /// + /// 实体总数 + [HttpGet] + [Route("count")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + virtual public async Task GetTotalCountAsync(Guid branchId) + { + return await _repository.GetCountAsync(branchId); + } + + /// + /// 删除实体 + /// + /// ID + /// + [HttpDelete] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Delete)] + virtual public async Task DeleteAsync(Guid id) + { + //var entity = await GetFromCacheAsync(id); + //await Cache.DeleteAsync(id.ToString()); + await _repository.DeleteAsync(id); + } + + /// + /// 按IDs删除实体列表 + /// + /// IDs + /// 是否执行成功 + [HttpPost] + [Route("delete")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Delete)] + virtual public async Task DeleteListAsync(List ids) + { + //foreach (var id in ids) + //{ + // var entity = await GetFromCacheAsync(id); + + //} + + return await _repository.DeleteListAsync(ids); + } + + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("list")] + ////[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + + + public async Task> GetListAsync(Guid parentId, JFCarConsignRequestDto input) + { + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + 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); + } + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("listVersion")] + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + public async Task> GetVersionListAsync(JFCarConsignVersionRequestDto 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); + } + /// + /// 导出文件 + /// + /// + /// + [HttpPost] + [Route("Export")] + //[AuthorizeSettleAccountPermissions.JFCarConsigns.Default)] + virtual public async Task ExportAsync(JFCarConsignRequestDto input) + { + + IExporter _csv = new CsvExporter(); + + IExporter _excel = new ExcelExporter(); + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + + 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", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _csv.ExportAsByteArray(dtoDetails); + + + + break; + case 1: + _fileName = string.Format("解放结算_{0}.xlsx", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _excel.ExportAsByteArray(dtoDetails); + break; + } + + result.ShouldNotBeNull(); + + //保存导出文件到服务器存成二进制 + await _excelImportService.SaveBlobAsync( + new SaveExcelImportInputDto + { + Name = _fileName, + Content = result + } + ); + return _fileName; + } + + [HttpPost] + [Route("jfupdate")] + + [UnitOfWork(isTransactional: false)] + public async Task UPdateFisAsync() + { + + await _repository.GetDbContext().Database.ExecuteSqlRawAsync( + "EXEC sp_jf_update" + ); + return true; + + + + } + + + } +} diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarKBAppService.cs b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarKBAppService.cs new file mode 100644 index 00000000..3cd453c3 --- /dev/null +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarKBAppService.cs @@ -0,0 +1,328 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +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 Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Distributed; +using Shouldly; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; +using Win.Abp.Snowflakes; +using Win.Sfs.BaseData.ImportExcelCommon; +using Win.Sfs.SettleAccount.CommonManagers; +using Win.Sfs.SettleAccount.Constant; +using Win.Sfs.SettleAccount.Entities.JFCarKBs; +using Win.Sfs.SettleAccount.ExcelImporter; +using Win.Sfs.Shared.CacheBase; +using Win.Sfs.Shared.Enums.SettleAccount; +using Win.Sfs.Shared.Filter; +using Win.Utils; + +namespace Win.Sfs.SettleAccount.JFCarKBs +{ + + /// + /// 区域相关应用服务 + /// + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + + [Route("api/settleaccount/JFCarKB")] + public class JFCarKBAppService : SettleAccountApplicationBase, IJFCarKBAppService + { + private readonly IGuidGenerator _guidGenerator; + + private readonly IObjectMapper _objectMapper; + + private readonly IExcelImportAppService _excelImportService; + + + private readonly ISettleAccountBranchEfCoreRepository _repository; + + private readonly ISettleAccountBranchEfCoreRepository _versionRepository; + /// + /// 构建方法 + /// + /// 构建UID + /// 自动map + /// 仓储接口 + /// 缓存 + public JFCarKBAppService(IGuidGenerator guidGenerator, + IObjectMapper objectMapper, + IExcelImportAppService excelImportService, + ISnowflakeIdGenerator snowflakeIdGenerator, + ICommonManager commonManager, + ISettleAccountBranchEfCoreRepository repository, + ISettleAccountBranchEfCoreRepository versionRepository, + IDistributedCache cache + ) : base(cache,excelImportService,snowflakeIdGenerator,commonManager) + { + _guidGenerator = guidGenerator; + _objectMapper = objectMapper; + _repository = repository; + _excelImportService = excelImportService; + _versionRepository = versionRepository; + } + + #region 导入导出功能 + /// + /// 导入功能 + /// + /// 上传的文件(前端已经限制只能上传一个附件) + /// + [HttpPost] + [Route("ExcelImport")] + [DisableRequestSizeLimit] + + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + public async Task JFCarKBUploadExcelImport([FromForm] IFormFileCollection files, Guid branchId, string year, string period, string version, string customerCode,DateTime datetime) + { + ExportImporter _exportImporter = new ExportImporter(); + var result = await _exportImporter.UploadExcelImport(files, _excelImportService); + 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 _JFCarKBList = new List(); + + _JFCarKBList.Add(new JFCarKBVersion(_id, branchId, period, version, customerCode, datetime)); + foreach (var itm in entityList) + { + itm.State= (int)EnumSettleStatus.未结算; + itm.SetValue(GuidGenerator.Create(), branchId, period, version, customerCode, datetime,_id); + } + var bulkConfig = new BulkConfig { SetOutputIdentity = true, BatchSize = 10000 }; + + await _repository.GetDbContext().BulkInsertAsync(entityList); + + await _versionRepository.GetDbContext().BulkInsertAsync(_JFCarKBList); + + return ApplicationConsts.SuccessStr; + } + + + #endregion + + /// + /// 按ID获取唯一实体 + /// + /// + /// 返回实体全部属性 + /// + /// ID + /// 实体DTO + [HttpGet] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + virtual public async Task GetAsync(Guid id) + { + var result = await _repository.GetAsync(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(JFCarKBRequestDto input) + { + return await _repository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + + private async Task GetCountAsync(JFCarKBVersionRequestDto input) + { + return await _versionRepository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + /// + /// 获取实体总数 + /// + /// 实体总数 + [HttpGet] + [Route("count")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + virtual public async Task GetTotalCountAsync(Guid branchId) + { + return await _repository.GetCountAsync(branchId); + } + + /// + /// 删除实体 + /// + /// ID + /// + [HttpDelete] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Delete)] + virtual public async Task DeleteAsync(Guid id) + { + //var entity = await GetFromCacheAsync(id); + //await Cache.DeleteAsync(id.ToString()); + await _repository.DeleteAsync(id); + } + + /// + /// 按IDs删除实体列表 + /// + /// IDs + /// 是否执行成功 + [HttpPost] + [Route("delete")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Delete)] + virtual public async Task DeleteListAsync(List ids) + { + //foreach (var id in ids) + //{ + // var entity = await GetFromCacheAsync(id); + + //} + + return await _repository.DeleteListAsync(ids); + } + + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("list")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + + + public async Task> GetListAsync(Guid parentId, JFCarKBRequestDto input) + { + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + 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); + } + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("listVersion")] + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + public async Task> GetVersionListAsync(JFCarKBVersionRequestDto 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); + } + /// + /// 导出文件 + /// + /// + /// + [HttpPost] + [Route("Export")] + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + virtual public async Task ExportAsync(JFCarKBRequestDto input) + { + + IExporter _csv = new CsvExporter(); + + IExporter _excel = new ExcelExporter(); + + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + + 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; + + //_fileName = CommonMethod.GetExcelFileNameByUserID(ApplicationConsts.Sec_JFCarKBFileName, CurrentUser.Id?.ToString(), ApplicationConsts.FileExtension); + //result = await _excel.ExportAsByteArray(dtoDetails); + switch (input.FileType) + { + case 0: + + + _fileName = string.Format("解放看板_{0}.csv", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _csv.ExportAsByteArray(dtoDetails); + + break; + case 1: + _fileName = string.Format("解放看板_{0}.xlsx", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _excel.ExportAsByteArray(dtoDetails); + + break; + } + + + + result.ShouldNotBeNull(); + + //保存导出文件到服务器存成二进制 + await _excelImportService.SaveBlobAsync( + new SaveExcelImportInputDto + { + Name = _fileName, + Content = result + } + ); + return _fileName; + } + } +} diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarKBs_HS/JFCarKBAppService.cs b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarKBs_HS/JFCarKBAppService.cs new file mode 100644 index 00000000..3cd453c3 --- /dev/null +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/JFCarKBs_HS/JFCarKBAppService.cs @@ -0,0 +1,328 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +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 Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Distributed; +using Shouldly; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; +using Win.Abp.Snowflakes; +using Win.Sfs.BaseData.ImportExcelCommon; +using Win.Sfs.SettleAccount.CommonManagers; +using Win.Sfs.SettleAccount.Constant; +using Win.Sfs.SettleAccount.Entities.JFCarKBs; +using Win.Sfs.SettleAccount.ExcelImporter; +using Win.Sfs.Shared.CacheBase; +using Win.Sfs.Shared.Enums.SettleAccount; +using Win.Sfs.Shared.Filter; +using Win.Utils; + +namespace Win.Sfs.SettleAccount.JFCarKBs +{ + + /// + /// 区域相关应用服务 + /// + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + + [Route("api/settleaccount/JFCarKB")] + public class JFCarKBAppService : SettleAccountApplicationBase, IJFCarKBAppService + { + private readonly IGuidGenerator _guidGenerator; + + private readonly IObjectMapper _objectMapper; + + private readonly IExcelImportAppService _excelImportService; + + + private readonly ISettleAccountBranchEfCoreRepository _repository; + + private readonly ISettleAccountBranchEfCoreRepository _versionRepository; + /// + /// 构建方法 + /// + /// 构建UID + /// 自动map + /// 仓储接口 + /// 缓存 + public JFCarKBAppService(IGuidGenerator guidGenerator, + IObjectMapper objectMapper, + IExcelImportAppService excelImportService, + ISnowflakeIdGenerator snowflakeIdGenerator, + ICommonManager commonManager, + ISettleAccountBranchEfCoreRepository repository, + ISettleAccountBranchEfCoreRepository versionRepository, + IDistributedCache cache + ) : base(cache,excelImportService,snowflakeIdGenerator,commonManager) + { + _guidGenerator = guidGenerator; + _objectMapper = objectMapper; + _repository = repository; + _excelImportService = excelImportService; + _versionRepository = versionRepository; + } + + #region 导入导出功能 + /// + /// 导入功能 + /// + /// 上传的文件(前端已经限制只能上传一个附件) + /// + [HttpPost] + [Route("ExcelImport")] + [DisableRequestSizeLimit] + + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + public async Task JFCarKBUploadExcelImport([FromForm] IFormFileCollection files, Guid branchId, string year, string period, string version, string customerCode,DateTime datetime) + { + ExportImporter _exportImporter = new ExportImporter(); + var result = await _exportImporter.UploadExcelImport(files, _excelImportService); + 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 _JFCarKBList = new List(); + + _JFCarKBList.Add(new JFCarKBVersion(_id, branchId, period, version, customerCode, datetime)); + foreach (var itm in entityList) + { + itm.State= (int)EnumSettleStatus.未结算; + itm.SetValue(GuidGenerator.Create(), branchId, period, version, customerCode, datetime,_id); + } + var bulkConfig = new BulkConfig { SetOutputIdentity = true, BatchSize = 10000 }; + + await _repository.GetDbContext().BulkInsertAsync(entityList); + + await _versionRepository.GetDbContext().BulkInsertAsync(_JFCarKBList); + + return ApplicationConsts.SuccessStr; + } + + + #endregion + + /// + /// 按ID获取唯一实体 + /// + /// + /// 返回实体全部属性 + /// + /// ID + /// 实体DTO + [HttpGet] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + virtual public async Task GetAsync(Guid id) + { + var result = await _repository.GetAsync(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(JFCarKBRequestDto input) + { + return await _repository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + + private async Task GetCountAsync(JFCarKBVersionRequestDto input) + { + return await _versionRepository.GetCountByFilterAsync(input.BranchId, input.Filters); + } + /// + /// 获取实体总数 + /// + /// 实体总数 + [HttpGet] + [Route("count")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + virtual public async Task GetTotalCountAsync(Guid branchId) + { + return await _repository.GetCountAsync(branchId); + } + + /// + /// 删除实体 + /// + /// ID + /// + [HttpDelete] + [Route("{id}")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Delete)] + virtual public async Task DeleteAsync(Guid id) + { + //var entity = await GetFromCacheAsync(id); + //await Cache.DeleteAsync(id.ToString()); + await _repository.DeleteAsync(id); + } + + /// + /// 按IDs删除实体列表 + /// + /// IDs + /// 是否执行成功 + [HttpPost] + [Route("delete")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Delete)] + virtual public async Task DeleteListAsync(List ids) + { + //foreach (var id in ids) + //{ + // var entity = await GetFromCacheAsync(id); + + //} + + return await _repository.DeleteListAsync(ids); + } + + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("list")] + ////[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + + + public async Task> GetListAsync(Guid parentId, JFCarKBRequestDto input) + { + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + 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); + } + + ///// + + /// + /// 根据筛选条件获取实体列表 + /// + /// + /// 请求条件包括:筛选条件列表,排序条件,数据数量,页码 + /// + /// 请求条件 + /// 实体DTO列表 + [HttpPost] + [Route("listVersion")] + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + public async Task> GetVersionListAsync(JFCarKBVersionRequestDto 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); + } + /// + /// 导出文件 + /// + /// + /// + [HttpPost] + [Route("Export")] + //[AuthorizeSettleAccountPermissions.JFCarKBs.Default)] + virtual public async Task ExportAsync(JFCarKBRequestDto input) + { + + IExporter _csv = new CsvExporter(); + + IExporter _excel = new ExcelExporter(); + + if (input.ParentId != Guid.Empty) + { + input.Filters.Add(new FilterCondition() { Action = EnumFilterAction.Equal, Column = "ParentId", Logic = EnumFilterLogic.And, Value = input.ParentId.ToString() }); + } + + 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; + + //_fileName = CommonMethod.GetExcelFileNameByUserID(ApplicationConsts.Sec_JFCarKBFileName, CurrentUser.Id?.ToString(), ApplicationConsts.FileExtension); + //result = await _excel.ExportAsByteArray(dtoDetails); + switch (input.FileType) + { + case 0: + + + _fileName = string.Format("解放看板_{0}.csv", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _csv.ExportAsByteArray(dtoDetails); + + break; + case 1: + _fileName = string.Format("解放看板_{0}.xlsx", System.DateTime.Now.ToString("yyyyMMddHHmmss")); + result = await _excel.ExportAsByteArray(dtoDetails); + + break; + } + + + + result.ShouldNotBeNull(); + + //保存导出文件到服务器存成二进制 + await _excelImportService.SaveBlobAsync( + new SaveExcelImportInputDto + { + Name = _fileName, + Content = result + } + ); + return _fileName; + } + } +} diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.csproj b/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.csproj index 21109234..696d38f5 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.csproj +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.csproj @@ -107,6 +107,13 @@ + + + + + + + diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettledPartAndErpPartPriceDiffRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettledPartAndErpPartPriceDiffRepository.cs index 63faf57b..f0d854c8 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettledPartAndErpPartPriceDiffRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettledPartAndErpPartPriceDiffRepository.cs @@ -42,7 +42,7 @@ namespace Win.Sfs.SettleAccount.Repository.Report " SettleMaterialCode,(\n" + " Qty * isnull( b.Price, 0 )) amt \n" + " FROM\n" + -" Set_MaterialRelationshipDetail a\n" + +" Set_MaterialRelationshipDetail_pg a\n" + " LEFT JOIN ( SELECT Price, MaterialCode FROM Set_PriceList WHERE version = ( SELECT Max( Version ) FROM Set_PriceList ) AND type = 10 ) b ON a.SettleMaterialCode = b.MaterialCode \n" + " ) temp1 \n" + " GROUP BY\n" +