Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs
@@ -13,5 +13,10 @@ /// <summary> /// æ¯å¦ç¦ç¨ /// </summary> public bool? IsDisabled { get; set; } = false; public bool? IsDisabled { get; set; } = false; /// <summary> /// å建人 /// </summary> public string CreatorName { get; set; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs
@@ -9,5 +9,10 @@ /// <summary> /// å¹¶åæ³ /// </summary> public string ConcurrencyStamp { get; set; } public string ConcurrencyStamp { get; set; } /// <summary> /// ä¿®æ¹äºº /// </summary> public string LastModifierName { get; set; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs
@@ -1,6 +1,8 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; using Volo.Abp.Application.Services; using Volo.Abp.Application.Services; using CmsQueryExtensions.Entitys; namespace CMS.Plugin.HIAWms.Application.Contracts.Services; /// <summary> @@ -20,23 +22,40 @@ /// </summary> /// <param name="ids"></param> /// <returns></returns> Task DeleteManyAsync(IEnumerable<Guid> ids); Task DeleteManyAsync(IEnumerable<Guid> ids); /// <summary> /// ç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">ç©æID</param> /// <param name="cancellationToken"></param> /// <returns></returns> Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default); /// <summary> /// æ¹éç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ï¼ç´æ¥å é¤ï¼ä¸è½¯å é¤ï¼ /// </summary> /// <param name="ids">è¦å é¤çç©æIDå表</param> /// <param name="cancellationToken"></param> /// <returns></returns> Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default); /// <summary> /// è°æ´æåºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id"></param> /// <param name="sort"></param> /// <returns></returns> Task AdjustSortAsync(Guid id, int sort); Task AdjustSortAsync(Guid id, int sort); /// <summary> /// å¯¼å ¥ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="input"></param> /// <returns></returns> Task ImportAsync(WmsMaterialsImportModel input); Task ImportAsync(WmsMaterialsImportModel input, MyCurrentUser myCurrentUser); /// <summary> /// 导åºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
@@ -1,127 +1,132 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; using CMS.Plugin.HIAWms.Application.Contracts.Services; using CMS.Plugin.HIAWms.Domain.Shared; using CmsQueryExtensions; using CMS.Plugin.HIAWms.Domain.WmsMaterial; 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; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; using CMS.Plugin.HIAWms.Application.Contracts.Services; using CMS.Plugin.HIAWms.Domain.Shared; using CmsQueryExtensions; using CMS.Plugin.HIAWms.Domain.WmsMaterial; 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; using CmsQueryExtensions.Entitys; namespace CMS.Plugin.HIAWms.Application.Implements; /// <summary> /// ç©æåºç¡ä¿¡æ¯è¡¨åºç¨æå¡ /// </summary> public class WmsMaterialAppService : CMSPluginAppService, IWmsMaterialAppService { private readonly IWmsMaterialRepository wmsMaterialRepository; 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; } 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)); } 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); } 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)); } 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) { private FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> DynamicGetQueryParams(GetWmsMaterialInput input) { //卿æé æ¥è¯¢æ¡ä»¶ var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input); if (!whereConditions.IsSuccess) { throw new Exception("卿æé æ¥è¯¢æ¡ä»¶å¤±è´¥:" + whereConditions.ErrMsg); } var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input); if (!whereConditions.IsSuccess) { throw new Exception("卿æé æ¥è¯¢æ¡ä»¶å¤±è´¥:" + whereConditions.ErrMsg); } //ä¹å¯å次èªå®ä¹æå»ºæ¥è¯¢æ¡ä»¶ Expression<Func<WmsMaterial, bool>> extendExpression = a => a.IsDeleted == false; 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; } 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 insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input); insertObj.Sort = sort; input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); await wmsMaterialRepository.InsertAsync(insertObj); 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 insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input); insertObj.Sort = sort; input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); insertObj.CreatorName = input.CreatorName;//å建人 await wmsMaterialRepository.InsertAsync(insertObj); //if (input.Sort.HasValue && insertObj.Sort != maxSort) //{ // await AdjustSortAsync(insertObj.Id, insertObj.Sort); //} return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj); } return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj); } /// <summary> /// æ´æ°ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> @@ -129,21 +134,21 @@ /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> public virtual async Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) { await CheckCreateOrUpdateDtoAsync(input); var updateObj = await wmsMaterialRepository.GetAsync(id); var exist = await wmsMaterialRepository.NameExistAsync(input.MaterialCode, updateObj.Id); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); } updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); updateObj.MaterialCode = input.MaterialCode; public virtual async Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) { await CheckCreateOrUpdateDtoAsync(input); var updateObj = await wmsMaterialRepository.GetAsync(id); var exist = await wmsMaterialRepository.NameExistAsync(input.MaterialCode, updateObj.Id); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); } updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); updateObj.MaterialCode = input.MaterialCode; updateObj.IsValid = input.IsValid; updateObj.IsSelfMade = input.IsSelfMade; updateObj.Num = input.Num; @@ -165,20 +170,21 @@ updateObj.RedundantField2 = input.RedundantField2; updateObj.RedundantField3 = input.RedundantField3; updateObj.Remark = input.Remark; await wmsMaterialRepository.UpdateAsync(updateObj); return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(updateObj); } updateObj.LastModifierName = input.LastModifierName;//ä¿®æ¹äºº await wmsMaterialRepository.UpdateAsync(updateObj); return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(updateObj); } /// <summary> /// å éç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="ids"></param> /// <returns></returns> public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids) { public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids) { //var wmsMaterials = new List<WmsMaterial>(); //if (ids != null) //{ @@ -198,261 +204,285 @@ // 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>(); } return new List<WmsMaterialDto>(); } /// <summary> /// å é¤åä¸ªç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual Task DeleteAsync(Guid id) { return wmsMaterialRepository.DeleteAsync(id); } 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); } } public async Task DeleteManyAsync(IEnumerable<Guid> ids) { foreach (var id in ids) { await DeleteAsync(id); } } /// <summary> /// ç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">ç©æID</param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default) { wmsMaterialRepository.DeletePermanentlyAsync(id); } /// <summary> /// æ¹éç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ï¼ç´æ¥å é¤ï¼ä¸è½¯å é¤ï¼ /// </summary> /// <param name="ids">è¦å é¤çç©æIDå表</param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default) { wmsMaterialRepository.BatchDeletePermanentlyAsync(ids); } /// <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); } 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 importItems = input.WmsMaterials; if (importItems != null && importItems.Any()) { public async Task ImportAsync(WmsMaterialsImportModel input, MyCurrentUser myCurrentUser) { Check.NotNull(input, nameof(input)); var wmsMaterialCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>(); var wmsMaterialUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>(); var importItems = input.WmsMaterials; if (importItems != null && importItems.Any()) { #region å¯¼å ¥æ ¡éª // 夿åç§°æ¯å¦éå¤ï¼å¹¶è¾åºç¬¬å è¡éå¤ var duplicateWmsMaterials = importItems.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 impItem in importItems) { if (impItem.MaterialCode.IsNullOrWhiteSpace()) { continue; } if (impItem.MaterialCode.IsNullOrWhiteSpace()) { var errorMsg = $"å¯¼å ¥å¤±è´¥ï¼é ç½®ï¼ç¬¬{impItem.RowIndex}è¡ï¼WmsMaterialåç§°ä¸è½ä¸ºç©º"; throw new UserFriendlyException(errorMsg); } var oldWmsMaterial = await wmsMaterialRepository.FindByNameAsync(impItem.MaterialCode); if (oldWmsMaterial != null) { var wmsMaterialUpdateDto = new WmsMaterialUpdateDto { var duplicateWmsMaterials = importItems.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 impItem in importItems) { if (impItem.MaterialCode.IsNullOrWhiteSpace()) { continue; } if (impItem.MaterialCode.IsNullOrWhiteSpace()) { var errorMsg = $"å¯¼å ¥å¤±è´¥ï¼é ç½®ï¼ç¬¬{impItem.RowIndex}è¡ï¼WmsMaterialåç§°ä¸è½ä¸ºç©º"; throw new UserFriendlyException(errorMsg); } var oldWmsMaterial = await wmsMaterialRepository.FindByNameAsync(impItem.MaterialCode); if (oldWmsMaterial != null) { var wmsMaterialUpdateDto = new WmsMaterialUpdateDto { MaterialCode = impItem.MaterialCode, IsValid = impItem.IsValid, IsSelfMade = impItem.IsSelfMade, Num = impItem.Num, SelfNum = impItem.SelfNum, MaterialName = impItem.MaterialName, NullLength = impItem.NullLength, PurchaseType = impItem.PurchaseType, MaterialType = impItem.MaterialType, PrimaryUnit = impItem.PrimaryUnit, Standard = impItem.Standard, OuterDiameter = impItem.OuterDiameter, WallThickness = impItem.WallThickness, MaterialQuality = impItem.MaterialQuality, Length = impItem.Length, IsMainBranch = impItem.IsMainBranch, Factory = impItem.Factory, Certification = impItem.Certification, RedundantField1 = impItem.RedundantField1, RedundantField2 = impItem.RedundantField2, RedundantField3 = impItem.RedundantField3, Remark = impItem.Remark, }; wmsMaterialUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsMaterialUpdateDto)); } else { var wmsMaterialCreateDto = new WmsMaterialCreateDto { IsValid = impItem.IsValid, IsSelfMade = impItem.IsSelfMade, Num = impItem.Num, SelfNum = impItem.SelfNum, MaterialName = impItem.MaterialName, NullLength = impItem.NullLength, PurchaseType = impItem.PurchaseType, MaterialType = impItem.MaterialType, PrimaryUnit = impItem.PrimaryUnit, Standard = impItem.Standard, OuterDiameter = impItem.OuterDiameter, WallThickness = impItem.WallThickness, MaterialQuality = impItem.MaterialQuality, Length = impItem.Length, IsMainBranch = impItem.IsMainBranch, Factory = impItem.Factory, Certification = impItem.Certification, RedundantField1 = impItem.RedundantField1, RedundantField2 = impItem.RedundantField2, RedundantField3 = impItem.RedundantField3, Remark = impItem.Remark, }; wmsMaterialUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsMaterialUpdateDto)); } else { var wmsMaterialCreateDto = new WmsMaterialCreateDto { MaterialCode = impItem.MaterialCode, IsValid = impItem.IsValid, IsSelfMade = impItem.IsSelfMade, Num = impItem.Num, SelfNum = impItem.SelfNum, MaterialName = impItem.MaterialName, NullLength = impItem.NullLength, PurchaseType = impItem.PurchaseType, MaterialType = impItem.MaterialType, PrimaryUnit = impItem.PrimaryUnit, Standard = impItem.Standard, OuterDiameter = impItem.OuterDiameter, WallThickness = impItem.WallThickness, MaterialQuality = impItem.MaterialQuality, Length = impItem.Length, IsMainBranch = impItem.IsMainBranch, Factory = impItem.Factory, Certification = impItem.Certification, RedundantField1 = impItem.RedundantField1, RedundantField2 = impItem.RedundantField2, RedundantField3 = impItem.RedundantField3, Remark = impItem.Remark, }; wmsMaterialCreateDtos.Add((impItem.RowIndex, wmsMaterialCreateDto)); } } } IsValid = impItem.IsValid, IsSelfMade = impItem.IsSelfMade, Num = impItem.Num, SelfNum = impItem.SelfNum, MaterialName = impItem.MaterialName, NullLength = impItem.NullLength, PurchaseType = impItem.PurchaseType, MaterialType = impItem.MaterialType, PrimaryUnit = impItem.PrimaryUnit, Standard = impItem.Standard, OuterDiameter = impItem.OuterDiameter, WallThickness = impItem.WallThickness, MaterialQuality = impItem.MaterialQuality, Length = impItem.Length, IsMainBranch = impItem.IsMainBranch, Factory = impItem.Factory, Certification = impItem.Certification, RedundantField1 = impItem.RedundantField1, RedundantField2 = impItem.RedundantField2, RedundantField3 = impItem.RedundantField3, Remark = impItem.Remark, }; wmsMaterialCreateDtos.Add((impItem.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 wmsMaterialCreateDtos) { try { wmsMaterialDto.Item.CreatorName = myCurrentUser.UserAccount;//å建人 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); } } } foreach (var wmsMaterialDto in wmsMaterialUpdateDtos) { try { wmsMaterialDto.Item.LastModifierName = myCurrentUser.UserAccount;//ä¿®æ¹äºº 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); } 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 = "ç©æä¿¡æ¯"; return (sheets, fileName); } 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 = "ç©æä¿¡æ¯"; 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, "ç©æç¼ç ï¼å¯ä¸æ è¯ï¼", 64); protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialCreateOrUpdateDtoBase input) { Check.NotNull(input, nameof(input)); Check.NotNullOrWhiteSpace(input.MaterialCode, "ç©æç¼ç ï¼å¯ä¸æ è¯ï¼", 64); Check.NotNull(input.IsValid, "æ¯å¦ææç©æ"); Check.NotNull(input.Num, "æ°é"); Check.NotNullOrWhiteSpace(input.MaterialName, "ç©æåç§°", 128); @@ -462,7 +492,7 @@ Check.NotNull(input.WallThickness, "å£åï¼åä½ï¼mmï¼"); Check.NotNull(input.Length, "é¿åº¦ï¼åä½ï¼mï¼"); Check.NotNull(input.IsMainBranch, "æ¯å¦ä¸ºä¸»æ¯ç®¡"); return Task.CompletedTask; } } return Task.CompletedTask; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs
@@ -1,36 +1,36 @@ using CmsQueryExtensions.Extension; using System.Linq.Expressions; using Volo.Abp.Domain.Repositories; namespace CMS.Plugin.HIAWms.Domain.WmsMaterial; using CmsQueryExtensions.Extension; using System.Linq.Expressions; using Volo.Abp.Domain.Repositories; namespace CMS.Plugin.HIAWms.Domain.WmsMaterial; /// <summary> /// ç©æåºç¡ä¿¡æ¯è¡¨ä»å¨ /// </summary> public interface IWmsMaterialRepository : IBasicRepository<WmsMaterial, Guid> { public interface IWmsMaterialRepository : IBasicRepository<WmsMaterial, Guid> { /// <summary> /// æç §åç§°æ¥æ¾ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default); Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default); /// <summary> /// éªè¯åç§°æ¯å¦åå¨ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="name"></param> /// <param name="id"></param> /// <returns></returns> Task<bool> NameExistAsync(string name, Guid? id = null); Task<bool> NameExistAsync(string name, Guid? id = null); /// <summary> /// è·åæå¤§æåºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <returns></returns> Task<int> GetMaxSortAsync(); Task<int> GetMaxSortAsync(); /// <summary> /// è·åå页åè¡¨ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> @@ -41,13 +41,31 @@ /// <param name="includeDetails"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); /// <summary> /// è·åæ»æ°ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default); } Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default); /// <summary> /// ç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">ç©æID</param> /// <param name="cancellationToken"></param> /// <returns></returns> Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default); /// <summary> /// æ¹éç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ï¼ç´æ¥å é¤ï¼ä¸è½¯å é¤ï¼ /// </summary> /// <param name="ids">è¦å é¤çç©æIDå表</param> /// <param name="cancellationToken"></param> /// <returns></returns> Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default); } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs
@@ -1,73 +1,74 @@ using CMS.Plugin.HIAWms.Domain.WmsMaterial; using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; using CmsQueryExtensions.Extension; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using System.Linq.Expressions; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories; using CMS.Plugin.HIAWms.Domain.WmsMaterial; using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; using CmsQueryExtensions.Extension; using Microsoft.EntityFrameworkCore; using RestSharp; using System.Linq.Dynamic.Core; using System.Linq.Expressions; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories; /// <summary> /// ç©æåºç¡ä¿¡æ¯è¡¨ä»å¨å®ç° /// </summary> public class EfCoreWmsMaterialRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterial, Guid>, IWmsMaterialRepository { public class EfCoreWmsMaterialRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterial, Guid>, IWmsMaterialRepository { /// <summary> /// Initializes a new instance of the <see cref="EfCoreWmsMaterialRepository"/> class. /// </summary> /// <param name="dbContextProvider">The database context provider.</param> public EfCoreWmsMaterialRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) : base(dbContextProvider) { } public EfCoreWmsMaterialRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) : base(dbContextProvider) { } /// <summary> /// æç §åç§°æ¥æ¾ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails() .Where(x => !x.IsDeleted) .OrderByDescending(x=>x.CreationTime) .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken)); } public virtual async Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails() .Where(x => !x.IsDeleted) .OrderByDescending(x => x.CreationTime) .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken)); } /// <summary> /// éªè¯åç§°æ¯å¦åå¨ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="name">æ ¡éªå¼</param> /// <param name="id"></param> /// <returns></returns> public async Task<bool> NameExistAsync(string name, Guid? id = null) { return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == name); } public async Task<bool> NameExistAsync(string name, Guid? id = null) { return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == name); } /// <summary> /// è·åæå¤§æåºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <returns></returns> public async Task<int> GetMaxSortAsync() { var hasAny = await (await GetQueryableAsync()) .Where(x => !x.IsDeleted).AnyAsync(); if (!hasAny) { return 1; } var sort = await (await GetQueryableAsync()) .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); return sort + 1; } public async Task<int> GetMaxSortAsync() { var hasAny = await (await GetQueryableAsync()) .Where(x => !x.IsDeleted).AnyAsync(); if (!hasAny) { return 1; } var sort = await (await GetQueryableAsync()) .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); return sort + 1; } /// <summary> /// è·åå页åè¡¨ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> @@ -78,36 +79,90 @@ /// <param name="includeDetails"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(whereConditions != null, whereConditions.data) .Where(x => !x.IsDeleted) .OrderByDescending(x=>x.CreationTime) .PageBy(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(whereConditions != null, whereConditions.data) .Where(x => !x.IsDeleted) .OrderByDescending(x => x.CreationTime) .PageBy(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); } /// <summary> /// è·åæ»æ°ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .WhereIf(whereConditions != null, whereConditions.data) .Where(x => !x.IsDeleted) .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .WhereIf(whereConditions != null, whereConditions.data) .Where(x => !x.IsDeleted) .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } /// <inheritdoc /> public override async Task<IQueryable<WmsMaterial>> WithDetailsAsync() { return (await GetQueryableAsync()) .Where(x => !x.IsDeleted).IncludeDetails(); } } public override async Task<IQueryable<WmsMaterial>> WithDetailsAsync() { return (await GetQueryableAsync()) .Where(x => !x.IsDeleted).IncludeDetails(); } /// <summary> /// ç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">ç©æID</param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default) { var entity = await (await GetDbSetAsync()) .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken)); if (entity == null) { throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(WmsMaterial), id); } // 2. è·å DbContext å¹¶æ§è¡å é¤ var dbContext = await GetDbContextAsync(); // ç´æ¥æ§è¡ SQL å é¤ var sql = $"DELETE FROM scms_wmsmaterials WHERE Id ='{entity.Id.ToString()}'"; await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); } /// <summary> /// æ¹éç©çå é¤ç©æåºç¡ä¿¡æ¯è¡¨ï¼ç´æ¥å é¤ï¼ä¸è½¯å é¤ï¼ /// </summary> /// <param name="ids">è¦å é¤çç©æIDå表</param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default) { // 1. æ¥è¯¢ç¬¦åæ¡ä»¶çå®ä½ï¼æªè½¯å é¤çè®°å½ï¼ var entities = await (await GetDbSetAsync()) .Where(x => ids.Contains(x.Id) && !x.IsDeleted) .ToListAsync(GetCancellationToken(cancellationToken)); if (!entities.Any()) { // å¦ææ²¡æéè¦å é¤çè®°å½ï¼ç´æ¥è¿åï¼é¿å ä¸å¿ è¦çæ°æ®åºæä½ï¼ return; } // 2. è·å DbContext å¹¶æ§è¡æ¹éå é¤ var dbContext = await GetDbContextAsync(); var idsToDelete = entities.Select(e => e.Id).ToList(); // ç´æ¥æ§è¡ SQL å é¤ var sql = $"DELETE FROM scms_wmsmaterials WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})"; await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/CMS.Plugin.HIAWms.csproj
@@ -40,7 +40,7 @@ </ItemGroup> <ItemGroup> <PackageReference Include="CMS.Framework.AspNetCore" Version="2.16.1" /> <PackageReference Include="CMS.Framework.AspNetCore" Version="2.28.0" /> <PackageReference Include="CMS.Extensions.Variable" Version="2.16.1" /> <PackageReference Include="CMS.Extensions.Data" Version="2.16.1" /> <PackageReference Include="CMS.Data.Stressing" Version="2.16.1" /> @@ -57,7 +57,7 @@ <ItemGroup> <Reference Include="CmsQueryExtensions"> <HintPath>..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath> <HintPath>..\..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath> </Reference> </ItemGroup> Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs
@@ -1,75 +1,80 @@ using Ao.Lang; using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; using CMS.Plugin.HIAWms.Application.Contracts.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; using System.Reflection; using Volo.Abp; using Volo.Abp.Application.Dtos; namespace CMS.Plugin.HIAWms.Controller { using Ao.Lang; using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; using CMS.Framework.AspNetCore.Users; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; using CMS.Plugin.HIAWms.Application.Contracts.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; using System.Reflection; using Volo.Abp; using Volo.Abp.Application.Dtos; using CmsQueryExtensions.Entitys; namespace CMS.Plugin.HIAWms.Controller { /// <summary> /// ç©æåºç¡ä¿¡æ¯è¡¨æå¡ /// </summary> [ApiController] [TypeFilter(typeof(CMSLanguageFilter))] [TypeFilter(typeof(CMSUowActionFilter))] [TypeFilter(typeof(CMSAuditActionFilter))] [TypeFilter(typeof(CMSExceptionFilter))] [Route("api/v{version:apiVersion}/HIAWms/[controller]")] public class WmsMaterialController : ControllerBase { private readonly IWmsMaterialAppService _wmsMaterialAppService; [ApiController] [TypeFilter(typeof(CMSLanguageFilter))] [TypeFilter(typeof(CMSUowActionFilter))] [TypeFilter(typeof(CMSAuditActionFilter))] [TypeFilter(typeof(CMSExceptionFilter))] [Route("api/v{version:apiVersion}/HIAWms/[controller]")] public class WmsMaterialController : ControllerBase { private readonly IWmsMaterialAppService _wmsMaterialAppService; private readonly ICurrentUser _currentUser; /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialController"/> class. /// </summary> /// <param name="wmsMaterialAppService">The wmsMaterial application service.</param> public WmsMaterialController(IWmsMaterialAppService wmsMaterialAppService) { _wmsMaterialAppService = wmsMaterialAppService; } public WmsMaterialController(IWmsMaterialAppService wmsMaterialAppService, ICurrentUser currentUser) { _wmsMaterialAppService = wmsMaterialAppService; _currentUser = currentUser; } /// <summary> /// è·åç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <returns></returns> [HttpGet] [Route("{id}")] public virtual Task<WmsMaterialDto> GetAsync(Guid id) { return _wmsMaterialAppService.GetAsync(id); } [HttpGet] [Route("{id}")] public virtual Task<WmsMaterialDto> GetAsync(Guid id) { return _wmsMaterialAppService.GetAsync(id); } /// <summary> /// å页è·åç©æåºç¡ä¿¡æ¯è¡¨çå表. /// </summary> /// <param name="input">è¾å ¥.</param> /// <returns></returns> [HttpGet] [Route("Page")] public virtual Task<PagedResultDto<WmsMaterialDto>> GetListAsync([FromQuery] GetWmsMaterialInput input) { return _wmsMaterialAppService.GetListAsync(input); } [HttpGet] [Route("Page")] public virtual Task<PagedResultDto<WmsMaterialDto>> GetListAsync([FromQuery] GetWmsMaterialInput input) { return _wmsMaterialAppService.GetListAsync(input); } /// <summary> /// åå»ºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="input">è¾å ¥.</param> /// <returns></returns> //[Authorize] [HttpPost] public virtual Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) { return _wmsMaterialAppService.CreateAsync(input); } [HttpPost] public virtual Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) { input.CreatorName = _currentUser.UserAccount;//å建人 return _wmsMaterialAppService.CreateAsync(input); } /// <summary> /// æ´æ°ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> @@ -77,112 +82,124 @@ /// <param name="input">è¾å ¥.</param> /// <returns></returns> //[Authorize] [HttpPut] [Route("{id}")] public virtual Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) { return _wmsMaterialAppService.UpdateAsync(id, input); } [HttpPut] [Route("{id}")] public virtual Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) { input.LastModifierName = _currentUser.UserAccount;//ä¿®æ¹äºº return _wmsMaterialAppService.UpdateAsync(id, input); } /// <summary> /// å éç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="ids">Idéå.</param> /// <returns></returns> //[Authorize] [HttpPost] [Route("Clone")] public virtual Task<List<WmsMaterialDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) { return _wmsMaterialAppService.CloneAsync(ids); } [HttpPost] [Route("Clone")] public virtual Task<List<WmsMaterialDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) { return _wmsMaterialAppService.CloneAsync(ids); } /// <summary> /// å é¤ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <returns></returns> //[Authorize] [HttpDelete] [Route("{id}")] public virtual Task DeleteAsync(Guid id) { return _wmsMaterialAppService.DeleteAsync(id); } [HttpDelete] [Route("{id}")] public virtual Task DeleteAsync(Guid id) { //return _wmsMaterialAppService.DeleteAsync(id);//é»è¾å é¤ return _wmsMaterialAppService.DeletePermanentlyAsync(id);//ç©çå é¤ } /// <summary> /// æ¹éå é¤ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="ids">The ids.</param> /// <returns></returns> //[Authorize] [HttpDelete] public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) { return _wmsMaterialAppService.DeleteManyAsync(ids); } [HttpDelete] public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) { MyCurrentUser myCurrentUser = new MyCurrentUser() { UserAccount = _currentUser.UserAccount, UserId = _currentUser.UserId }; // return _wmsMaterialAppService.DeleteManyAsync(ids);//é»è¾å é¤ return _wmsMaterialAppService.BatchDeletePermanentlyAsync(ids);//ç©çå é¤ } /// <summary> /// è°æ´æåºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <returns></returns> [HttpPut] [Route("{id}/AdjustSort/{sort}")] public virtual Task AdjustSortAsync(Guid id, int sort) { return _wmsMaterialAppService.AdjustSortAsync(id, sort); } [HttpPut] [Route("{id}/AdjustSort/{sort}")] public virtual Task AdjustSortAsync(Guid id, int sort) { return _wmsMaterialAppService.AdjustSortAsync(id, sort); } /// <summary> /// å¯¼å ¥ç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <returns></returns> [Authorize] [HttpPost] [Route("Import")] public virtual async Task<IActionResult> ImportAsync(IFormFile file) { using var stream = new MemoryStream(); await file.CopyToAsync(stream); stream.Seek(0L, SeekOrigin.Begin); var sheetNames = stream.GetSheetNames(); var wmsMaterialRows = sheetNames.Contains("é ç½®") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "é ç½®").ToList() : new(); if (!wmsMaterialRows.Any()) { throw new UserFriendlyException("è¯·æ£æ¥å¯¼å ¥çè¡¨æ ¼"); } await _wmsMaterialAppService.ImportAsync(new WmsMaterialsImportModel { WmsMaterials = wmsMaterialRows, }); return Ok(); } [Authorize] [HttpPost] [Route("Import")] public virtual async Task<IActionResult> ImportAsync(IFormFile file) { using var stream = new MemoryStream(); await file.CopyToAsync(stream); stream.Seek(0L, SeekOrigin.Begin); var sheetNames = stream.GetSheetNames(); var wmsMaterialRows = sheetNames.Contains("é ç½®") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "é ç½®").ToList() : new(); if (!wmsMaterialRows.Any()) { throw new UserFriendlyException("è¯·æ£æ¥å¯¼å ¥çè¡¨æ ¼"); } MyCurrentUser myCurrentUser = new MyCurrentUser() { UserAccount = _currentUser.UserAccount, UserId = _currentUser.UserId }; await _wmsMaterialAppService.ImportAsync(new WmsMaterialsImportModel { WmsMaterials = wmsMaterialRows, }, myCurrentUser); return Ok(); } /// <summary> /// 导åºç©æåºç¡ä¿¡æ¯è¡¨ /// </summary> /// <returns></returns> [HttpGet] [Route("Export")] public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInput input) { input.MaxResultCount = int.MaxValue; var exportData = await _wmsMaterialAppService.ExportAsync(input); var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterialå¯¼åºæ¨¡æ¿.xlsx"); if (!System.IO.File.Exists(templatePath)) { templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterialå¯¼åºæ¨¡æ¿.xlsx"); } var memoryStream = new MemoryStream(); await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); memoryStream.Seek(0L, SeekOrigin.Begin); return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; } } } [HttpGet] [Route("Export")] public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInput input) { input.MaxResultCount = int.MaxValue; var exportData = await _wmsMaterialAppService.ExportAsync(input); var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterialå¯¼åºæ¨¡æ¿.xlsx"); if (!System.IO.File.Exists(templatePath)) { templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterialå¯¼åºæ¨¡æ¿.xlsx"); } var memoryStream = new MemoryStream(); await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); memoryStream.Seek(0L, SeekOrigin.Begin); return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; } } }