From e71bc24daa8f00768787e18f5daba09128abfc62 Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周二, 29 4月 2025 10:59:40 +0800 Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs | 307 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 307 insertions(+), 0 deletions(-) diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs new file mode 100644 index 0000000..2027e02 --- /dev/null +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs @@ -0,0 +1,307 @@ +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers; +using CMS.Plugin.HIAWms.Application.Contracts.Services; +using CMS.Plugin.HIAWms.Domain.WmsContainers; +using CMS.Plugin.HIAWms.Domain.Shared; +using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; + +namespace CMS.Plugin.HIAWms.Application.Implements; + +/// <inheritdoc /> +public class WmsContainerAppService : CMSPluginAppService, IWmsContainerAppService +{ + private readonly IWmsContainerRepository _wmscontainerRepository; + + /// <summary> + /// Initializes a new instance of the <see cref="WmsContainerAppService"/> class. + /// </summary> + /// <param name="wmscontainerRepository">The task job repository.</param> + public WmsContainerAppService(IWmsContainerRepository wmscontainerRepository) + { + _wmscontainerRepository = wmscontainerRepository; + } + + /// <inheritdoc /> + public virtual async Task<WmsContainerDto> GetAsync(Guid id) + { + return ObjectMapper.Map<WmsContainer, WmsContainerDto>(await _wmscontainerRepository.GetAsync(id)); + } + + /// <inheritdoc /> + public virtual async Task<PagedResultDto<WmsContainerDto>> GetListAsync(GetWmsContainersInput input) + { + Check.NotNull(input, nameof(input)); + + if (input.Sorting.IsNullOrWhiteSpace()) + { + input.Sorting = nameof(WmsContainer.Sort); + } + + var specification = new WmsContainerSpecification(input.Name); + var count = await _wmscontainerRepository.GetCountAsync(input.Filter, specification); + var list = await _wmscontainerRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification); + + return new PagedResultDto<WmsContainerDto>(count, ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list)); + } + + /// <inheritdoc /> + public virtual async Task<WmsContainerDto> CreateAsync(WmsContainerCreateDto input) + { + await CheckCreateOrUpdateDtoAsync(input); + + var exist = await _wmscontainerRepository.NameExistAsync(input.ContainerNo); + if (exist) + { + throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.ContainerNo]); + } + + var maxSort = await _wmscontainerRepository.GetMaxSortAsync(); + var sort = input.Sort ?? maxSort; + var wmscontainer = new WmsContainer { Id = GuidGenerator.Create(), ContainerNo = input.ContainerNo, Remark = input.Remark }; + input.MapExtraPropertiesTo(wmscontainer, MappingPropertyDefinitionChecks.None); + + await _wmscontainerRepository.InsertAsync(wmscontainer); + + if (input.Sort.HasValue && wmscontainer.Sort != maxSort) + { + await AdjustSortAsync(wmscontainer.Id, wmscontainer.Sort); + } + + return ObjectMapper.Map<WmsContainer, WmsContainerDto>(wmscontainer); + } + + /// <inheritdoc /> + public virtual async Task<WmsContainerDto> UpdateAsync(Guid id, WmsContainerUpdateDto input) + { + await CheckCreateOrUpdateDtoAsync(input); + + var wmscontainer = await _wmscontainerRepository.GetAsync(id); + var exist = await _wmscontainerRepository.NameExistAsync(input.ContainerNo, wmscontainer.Id); + if (exist) + { + throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.ContainerNo]); + } + + wmscontainer.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + input.MapExtraPropertiesTo(wmscontainer, MappingPropertyDefinitionChecks.None); + + wmscontainer.ContainerStatus = input.ContainerStatus; + + await _wmscontainerRepository.UpdateAsync(wmscontainer); + + return ObjectMapper.Map<WmsContainer, WmsContainerDto>(wmscontainer); + } + + /// <inheritdoc /> + public async Task<List<WmsContainerDto>> CloneAsync(IEnumerable<Guid> ids) + { + var wmscontainers = new List<WmsContainer>(); + if (ids != null) + { + var sort = await _wmscontainerRepository.GetMaxSortAsync(); + foreach (var id in ids) + { + var wmscontainer = await _wmscontainerRepository.FindAsync(id); + if (wmscontainer != null) + { + var containerNo = wmscontainer.ContainerNo + WmsContainerConsts.CloneTag; + var notExist = false; + while (!notExist) + { + var exist = await _wmscontainerRepository.NameExistAsync(containerNo); + if (exist || wmscontainers.Any(x => x.ContainerNo == containerNo)) + { + containerNo += WmsContainerConsts.CloneTag; + continue; + } + + notExist = true; + } + + //wmscontainer = await _wmscontainerRepository.InsertAsync(wmscontainer.Clone(GuidGenerator.Create(), containerNo, sort++)); + wmscontainers.Add(wmscontainer); + } + } + } + + return ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(wmscontainers); + } + + /// <inheritdoc /> + public virtual Task DeleteAsync(Guid id) + { + return _wmscontainerRepository.DeleteAsync(id); + } + + /// <inheritdoc /> + public async Task DeleteManyAsync(IEnumerable<Guid> ids) + { + foreach (var id in ids) + { + await DeleteAsync(id); + } + } + + /// <inheritdoc /> + public virtual async Task AdjustSortAsync(Guid id, int sort) + { + var list = await _wmscontainerRepository.GetListAsync(nameof(WmsContainer.Sort)); + if (list != null && list.Any()) + { + var initSort = 1; + list.ForEach(x => x.AdjustSort(initSort++)); + var entity = list.FirstOrDefault(x => x.Id == id); + if (entity != null) + { + if (sort == 1) + { + list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); + } + else if (entity.Sort > sort) + { + list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); + list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); + } + else if (entity.Sort < sort) + { + list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); + list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); + } + + entity.AdjustSort(sort); + } + } + + await _wmscontainerRepository.UpdateManyAsync(list); + } + + /// <inheritdoc /> + public async Task ImportAsync(WmsContainersImportModel input) + { + Check.NotNull(input, nameof(input)); + + var wmscontainerCreateDtos = new List<(int RowIndex, WmsContainerCreateDto Item)>(); + var wmscontainerUpdateDtos = new List<(int RowIndex, Guid Id, WmsContainerUpdateDto Item)>(); + var wmscontainers = input.WmsContainers; + + if (wmscontainers != null && wmscontainers.Any()) + { + #region 瀵煎叆鏍¢獙 + + // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� + var duplicateWmsContainers = wmscontainers.GroupBy(x => x.ContainerNo).Where(x => x.Count() > 1).ToList(); + if (duplicateWmsContainers?.Any() == true) + { + var duplicateWmsContainerMsgs = duplicateWmsContainers.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key} 鍚嶇О閲嶅"); + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWmsContainerMsgs)}锛岀粓姝㈠鍏�"; + throw new UserFriendlyException(errorMsg); + } + + #endregion + + foreach (var wmscontainer in wmscontainers) + { + if (wmscontainer.ContainerNo.IsNullOrWhiteSpace() && wmscontainer.ContainerNo.IsNullOrWhiteSpace()) + { + continue; + } + + if (wmscontainer.ContainerNo.IsNullOrWhiteSpace()) + { + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmscontainer.RowIndex}琛岋細WmsContainer鍚嶇О涓嶈兘涓虹┖"; + throw new UserFriendlyException(errorMsg); + } + + var oldWmsContainer = await _wmscontainerRepository.FindByNameAsync(wmscontainer.ContainerNo); + if (oldWmsContainer != null) + { + var wmscontainerUpdateDto = new WmsContainerUpdateDto + { + ContainerNo = wmscontainer.ContainerNo, + ContainerStatus = wmscontainer.ContainerStatus, + Remark = wmscontainer.Remark, + }; + + wmscontainerUpdateDtos.Add((wmscontainer.RowIndex, oldWmsContainer.Id, wmscontainerUpdateDto)); + } + else + { + var wmscontainerCreateDto = new WmsContainerCreateDto + { + ContainerNo = wmscontainer.ContainerNo, + ContainerStatus = wmscontainer.ContainerStatus, + Remark = wmscontainer.Remark, + }; + + wmscontainerCreateDtos.Add((wmscontainer.RowIndex, wmscontainerCreateDto)); + } + } + } + + // 鏂板 + foreach (var wmscontainerDto in wmscontainerCreateDtos) + { + try + { + await CreateAsync(wmscontainerDto.Item); + } + catch (Exception e) + { + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmscontainerDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; + throw new UserFriendlyException(errorMsg); + } + } + + // 鏇存柊 + foreach (var wmscontainerDto in wmscontainerUpdateDtos) + { + try + { + await UpdateAsync(wmscontainerDto.Id, wmscontainerDto.Item); + } + catch (Exception e) + { + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmscontainerDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; + throw new UserFriendlyException(errorMsg); + } + } + } + + /// <inheritdoc /> + public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainersInput input) + { + Check.NotNull(input, nameof(input)); + + if (input.Sorting.IsNullOrWhiteSpace()) + { + input.Sorting = nameof(WmsContainer.Sort); + } + + var specification = new WmsContainerSpecification(input.Name); + var list = await _wmscontainerRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true); + var result = ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list); + + var sheets = new Dictionary<string, object> + { + ["閰嶇疆"] = result.Select(x => x.GetExportData()).ToList(), + }; + + var fileName = result.Count > 1 ? "WmsContainer鍒楄〃" : result.Count == 1 ? result.First()?.ContainerNo : "WmsContainer妯$増"; + return (sheets, fileName); + } + + /// <summary> + /// Checks the create or update dto asynchronous. + /// </summary> + /// <param name="input">The input.</param> + protected Task CheckCreateOrUpdateDtoAsync(WmsContainerCreateOrUpdateDtoBase input) + { + Check.NotNull(input, nameof(input)); + Check.NotNullOrWhiteSpace(input.ContainerNo, "缂栧彿", WmsContainerConsts.MaxCodeLength); + Check.Length(input.Remark, "澶囨敞", WmsContainerConsts.MaxRemarkLength); + return Task.CompletedTask; + } +} -- Gitblit v1.9.3