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