From 25750ab29ce4e243f4e4e17a796167f3a0f0697b Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周一, 05 5月 2025 16:33:49 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo

---
 Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs |  432 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 432 insertions(+), 0 deletions(-)

diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs"
new file mode 100644
index 0000000..98f0250
--- /dev/null
+++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs"
@@ -0,0 +1,432 @@
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
+using CMS.Plugin.HIAWms.Application.Contracts.Services;
+using CMS.Plugin.HIAWms.Domain.Shared;
+using CMS.Plugin.HIAWms.Domain.Shared.Util;
+using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterials;
+using CMS.Plugin.HIAWms.Domain.WmsMaterials;
+using CmsQueryExtensions.Extension;
+using System.Linq.Expressions;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Data;
+using Volo.Abp.ObjectExtending;
+using Volo.Abp.ObjectMapping;
+
+namespace CMS.Plugin.HIAWms.Application.Implements;
+
+/// <summary>
+/// 鐗╂枡鍩虹淇℃伅搴旂敤鏈嶅姟
+/// </summary>
+public class WmsMaterialAppService : CMSPluginAppService, IWmsMaterialAppService
+{
+    private readonly IWmsMaterialRepository _wmsmaterialRepository;
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="WmsMaterialAppService"/> class.
+    /// </summary>
+    /// <param name="wmsmaterialRepository">The task job repository.</param>
+    public WmsMaterialAppService(IWmsMaterialRepository wmsmaterialRepository)
+    {
+        _wmsmaterialRepository = wmsmaterialRepository;
+    }
+
+    /// <summary>
+    /// 鑾峰彇鎸囧畾鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public virtual async Task<WmsMaterialDto> GetAsync(Guid id)
+    {
+        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(await _wmsmaterialRepository.GetAsync(id));
+    }
+
+    /// <summary>
+    /// 鍒嗛〉鑾峰彇鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public virtual async Task<PagedResultDto<WmsMaterialDto>> GetListAsync(GetWmsMaterialInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WmsMaterial.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� 
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� 
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+        var count = await _wmsmaterialRepository.GetCountAsync(whereConditions);
+        var list = await _wmsmaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
+
+        return new PagedResultDto<WmsMaterialDto>(count, ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list));
+    }
+
+    /// <summary> 
+    /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� 
+    /// </summary> 
+    /// <param name="input">杈撳叆鍙傛暟</param> 
+    /// <returns></returns> 
+    private FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> DynamicGetQueryParams(GetWmsMaterialInput input)
+    {
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� 
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input);
+        if (!whereConditions.IsSuccess)
+        {
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg);
+        }
+
+        //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠� 
+        Expression<Func<WmsMaterial, bool>> extendExpression = a => a.IsDeleted == false;
+        // 浣跨敤 System.Linq.PredicateBuilder 鐨� And
+        var pres = (System.Linq.Expressions.Expression<Func<WmsMaterial, bool>>)(whereConditions.data);
+        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
+
+        return whereConditions;
+    }
+
+    /// <summary>
+    /// 鏂板缓鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public virtual async Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var exist = await _wmsmaterialRepository.NameExistAsync(input.MaterialCode);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]);
+        }
+
+        var maxSort = await _wmsmaterialRepository.GetMaxSortAsync();
+        var sort = input.Sort ?? maxSort;
+
+        var wmsmaterial = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input);
+        wmsmaterial.Sort = sort;
+        input.MapExtraPropertiesTo(wmsmaterial, MappingPropertyDefinitionChecks.None);
+
+        await _wmsmaterialRepository.InsertAsync(wmsmaterial);
+
+        if (input.Sort.HasValue && wmsmaterial.Sort != maxSort)
+        {
+            await AdjustSortAsync(wmsmaterial.Id, wmsmaterial.Sort);
+        }
+
+        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(wmsmaterial);
+    }
+
+    /// <summary>
+    /// 鏇存柊鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="id"></param>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public virtual async Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var wmsmaterial = await _wmsmaterialRepository.GetAsync(id);
+        var exist = await _wmsmaterialRepository.NameExistAsync(input.MaterialCode, wmsmaterial.Id);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]);
+        }
+
+        wmsmaterial.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+        input.MapExtraPropertiesTo(wmsmaterial, MappingPropertyDefinitionChecks.None);
+
+        wmsmaterial.MaterialName = input.MaterialName;
+        wmsmaterial.PurchaseType = input.PurchaseType;
+        wmsmaterial.MaterialType = input.MaterialType;
+        wmsmaterial.PrimaryUnit = input.PrimaryUnit;
+        wmsmaterial.Standard = input.Standard;
+        wmsmaterial.OuterDiameter = input.OuterDiameter;
+        wmsmaterial.WallThickness = input.WallThickness;
+        wmsmaterial.MaterialQuality = input.MaterialQuality;
+        wmsmaterial.Length = input.Length;
+        wmsmaterial.IsMainBranch = input.IsMainBranch;
+        wmsmaterial.Factory = input.Factory;
+        wmsmaterial.Certification = input.Certification;
+
+        await _wmsmaterialRepository.UpdateAsync(wmsmaterial);
+
+        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(wmsmaterial);
+    }
+
+    /// <summary>
+    /// 鍏嬮殕鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids)
+    {
+        //var wmsmaterials = new List<WmsMaterial>();
+        //if (ids != null)
+        //{
+        //    var sort = await _wmsmaterialRepository.GetMaxSortAsync();
+        //    foreach (var id in ids)
+        //    {
+        //        var wmsmaterial = await _wmsmaterialRepository.FindAsync(id);
+        //        if (wmsmaterial != null)
+        //        {
+        //            var name = wmsmaterial.Name + WmsMaterialConsts.CloneTag;
+        //            var notExist = false;
+        //            while (!notExist)
+        //            {
+        //                var exist = await _wmsmaterialRepository.NameExistAsync(name);
+        //                if (exist || wmsmaterials.Any(x => x.Name == name))
+        //                {
+        //                    name += WmsMaterialConsts.CloneTag;
+        //                    continue;
+        //                }
+
+        //                notExist = true;
+        //            }
+
+        //            //wmsmaterial = await _wmsmaterialRepository.InsertAsync(wmsmaterial.Clone(GuidGenerator.Create(), name, sort++));
+        //            wmsmaterials.Add(wmsmaterial);
+        //        }
+        //    }
+        //}
+
+        //return ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(wmsmaterials);
+        return new List<WmsMaterialDto>();
+    }
+
+    /// <summary>
+    /// 鍒犻櫎鍗曚釜鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public virtual Task DeleteAsync(Guid id)
+    {
+        return _wmsmaterialRepository.DeleteAsync(id);
+    }
+
+    /// <summary>
+    /// 鍒犻櫎澶氫釜鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
+    {
+        foreach (var id in ids)
+        {
+            await DeleteAsync(id);
+        }
+    }
+
+    /// <summary>
+    /// 璋冩暣鎺掑簭鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="id"></param>
+    /// <param name="sort"></param>
+    /// <returns></returns>
+    public virtual async Task AdjustSortAsync(Guid id, int sort)
+    {
+        var list = await _wmsmaterialRepository.GetListAsync(null, nameof(WmsMaterial.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 _wmsmaterialRepository.UpdateManyAsync(list);
+    }
+
+    /// <summary>
+    /// 瀵煎叆鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public async Task ImportAsync(WmsMaterialsImportModel input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        var wmsmaterialCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>();
+        var wmsmaterialUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>();
+        var wmsmaterials = input.WmsMaterials;
+
+        if (wmsmaterials != null && wmsmaterials.Any())
+        {
+            #region 瀵煎叆鏍¢獙
+
+            // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶�
+            var duplicateWmsMaterials = wmsmaterials.GroupBy(x => x.MaterialCode).Where(x => x.Count() > 1).ToList();
+            if (duplicateWmsMaterials?.Any() == true)
+            {
+                var duplicateWmsMaterialMsgs = duplicateWmsMaterials.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅");
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWmsMaterialMsgs)}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+
+            #endregion
+
+            foreach (var wmsmaterial in wmsmaterials)
+            {
+                if (wmsmaterial.MaterialCode.IsNullOrWhiteSpace() && wmsmaterial.MaterialName.IsNullOrWhiteSpace())
+                {
+                    continue;
+                }
+
+                if (wmsmaterial.MaterialCode.IsNullOrWhiteSpace())
+                {
+                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsmaterial.RowIndex}琛岋細WmsMaterial鍚嶇О涓嶈兘涓虹┖";
+                    throw new UserFriendlyException(errorMsg);
+                }
+
+                var oldWmsMaterial = await _wmsmaterialRepository.FindByNameAsync(wmsmaterial.MaterialCode);
+                if (oldWmsMaterial != null)
+                {
+                    var wmsmaterialUpdateDto = new WmsMaterialUpdateDto
+                    {
+                        MaterialCode = wmsmaterial.MaterialCode,
+                        MaterialName = wmsmaterial.MaterialName,
+                        PurchaseType = wmsmaterial.PurchaseType,
+                        MaterialType = wmsmaterial.MaterialType,
+                        PrimaryUnit = wmsmaterial.PrimaryUnit,
+                        Standard = wmsmaterial.Standard,
+                        OuterDiameter = wmsmaterial.OuterDiameter,
+                        WallThickness = wmsmaterial.WallThickness,
+                        MaterialQuality = wmsmaterial.MaterialQuality,
+                        Length = wmsmaterial.Length,
+                        IsMainBranch = wmsmaterial.IsMainBranch,
+                        Factory = wmsmaterial.Factory,
+                        Certification = wmsmaterial.Certification,
+                        Remark = wmsmaterial.Remark,
+                    };
+
+                    wmsmaterialUpdateDtos.Add((wmsmaterial.RowIndex, oldWmsMaterial.Id, wmsmaterialUpdateDto));
+                }
+                else
+                {
+                    var wmsmaterialCreateDto = new WmsMaterialCreateDto
+                    {
+                        MaterialCode = wmsmaterial.MaterialCode,
+                        MaterialName = wmsmaterial.MaterialName,
+                        PurchaseType = wmsmaterial.PurchaseType,
+                        MaterialType = wmsmaterial.MaterialType,
+                        PrimaryUnit = wmsmaterial.PrimaryUnit,
+                        Standard = wmsmaterial.Standard,
+                        OuterDiameter = wmsmaterial.OuterDiameter,
+                        WallThickness = wmsmaterial.WallThickness,
+                        MaterialQuality = wmsmaterial.MaterialQuality,
+                        Length = wmsmaterial.Length,
+                        IsMainBranch = wmsmaterial.IsMainBranch,
+                        Factory = wmsmaterial.Factory,
+                        Certification = wmsmaterial.Certification,
+                        Remark = wmsmaterial.Remark,
+                    };
+
+                    wmsmaterialCreateDtos.Add((wmsmaterial.RowIndex, wmsmaterialCreateDto));
+                }
+            }
+        }
+
+        // 鏂板
+        foreach (var wmsmaterialDto in wmsmaterialCreateDtos)
+        {
+            try
+            {
+                await CreateAsync(wmsmaterialDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsmaterialDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+
+        // 鏇存柊
+        foreach (var wmsmaterialDto in wmsmaterialUpdateDtos)
+        {
+            try
+            {
+                await UpdateAsync(wmsmaterialDto.Id, wmsmaterialDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsmaterialDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+    }
+
+    /// <summary>
+    /// 瀵煎嚭鐗╂枡鍩虹淇℃伅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WmsMaterial.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� 
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� 
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+
+        var list = await _wmsmaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
+        var result = ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list);
+
+        var sheets = new Dictionary<string, object>
+        {
+            ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result),
+        };
+
+        var fileName = result.Count > 1 ? "WmsMaterial鍒楄〃" : result.Count == 1 ? result[0]?.MaterialCode : "WmsMaterial妯$増";
+        return (sheets, fileName);
+    }
+
+    /// <summary>
+    /// 鏍¢獙鐗╂枡鍩虹淇℃伅锛屽綋鏂板缓鎴栨洿鏂版椂
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialCreateOrUpdateDtoBase input)
+    {
+        Check.NotNull(input, nameof(input));
+        Check.NotNullOrWhiteSpace(input.MaterialCode, "缂栧彿", WmsMaterialConsts.MaxCodeLength);
+        Check.NotNullOrWhiteSpace(input.MaterialName, "鍚嶇О", WmsMaterialConsts.MaxNameLength);
+        Check.Length(input.Remark, "澶囨敞", WmsMaterialConsts.MaxRemarkLength);
+        return Task.CompletedTask;
+    }
+}

--
Gitblit v1.9.3