| | |
| | | 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.WmsMaterial; |
| | | 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; |
| | | |
| | | /// <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)); |
| | | } |
| | | |
| | | 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; |
| | | |
| | | /// <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="input">è¾å
¥åæ°</param> |
| | | /// <param name="WmsMaterialRepository">The task job repository.</param> |
| | | public WmsMaterialAppService(IWmsMaterialRepository _WmsMaterialRepository) |
| | | { |
| | | wmsMaterialRepository = _WmsMaterialRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæå®ç©æåºç¡ä¿¡æ¯è¡¨ |
| | | /// </summary> |
| | | /// <param name="id"></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; |
| | | } |
| | | } |
| | | 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 insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input); |
| | | insertObj.Sort = sort; |
| | | input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | await wmsMaterialRepository.InsertAsync(insertObj); |
| | | |
| | | //if (input.Sort.HasValue && insertObj.Sort != maxSort) |
| | | //{ |
| | | // await AdjustSortAsync(insertObj.Id, insertObj.Sort); |
| | | //} |
| | | |
| | | return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj); |
| | | } |
| | | |
| | | /// <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 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.MaterialName = input.MaterialName; |
| | | updateObj.IsSelfMade = input.IsSelfMade; |
| | | updateObj.PurchaseType = input.PurchaseType; |
| | | updateObj.Num = input.Num; |
| | | updateObj.MaterialType = input.MaterialType; |
| | | updateObj.SelfNum = input.SelfNum; |
| | | updateObj.PrimaryUnit = input.PrimaryUnit; |
| | | updateObj.Standard = input.Standard; |
| | | updateObj.NullLength = input.NullLength; |
| | | updateObj.OuterDiameter = input.OuterDiameter; |
| | | updateObj.WallThickness = input.WallThickness; |
| | | updateObj.MaterialQuality = input.MaterialQuality; |
| | | updateObj.Length = input.Length; |
| | | updateObj.IsMainBranch = input.IsMainBranch; |
| | | updateObj.Factory = input.Factory; |
| | | updateObj.Certification = input.Certification; |
| | | updateObj.RedundantField1 = input.RedundantField1; |
| | | updateObj.RedundantField2 = input.RedundantField2; |
| | | updateObj.RedundantField3 = input.RedundantField3; |
| | | updateObj.Remark = input.Remark; |
| | | updateObj.IsDisabled = input.IsDisabled; |
| | | updateObj.CreatorName = input.CreatorName; |
| | | updateObj.LastModifierName = input.LastModifierName; |
| | | updateObj.ExtraField1 = input.ExtraField1; |
| | | updateObj.ExtraField2 = input.ExtraField2; |
| | | updateObj.ExtraField3 = input.ExtraField3; |
| | | updateObj.OperationRemark = input.OperationRemark; |
| | | updateObj.DeleteRemark = input.DeleteRemark; |
| | | |
| | | |
| | | 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) |
| | | { |
| | | //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 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 |
| | | { |
| | | MaterialCode = impItem.MaterialCode, |
| | | IsValid = impItem.IsValid, |
| | | MaterialName = impItem.MaterialName, |
| | | IsSelfMade = impItem.IsSelfMade, |
| | | PurchaseType = impItem.PurchaseType, |
| | | Num = impItem.Num, |
| | | MaterialType = impItem.MaterialType, |
| | | SelfNum = impItem.SelfNum, |
| | | PrimaryUnit = impItem.PrimaryUnit, |
| | | Standard = impItem.Standard, |
| | | NullLength = impItem.NullLength, |
| | | 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, |
| | | IsDisabled = impItem.IsDisabled, |
| | | CreatorName = impItem.CreatorName, |
| | | LastModifierName = impItem.LastModifierName, |
| | | ExtraField1 = impItem.ExtraField1, |
| | | ExtraField2 = impItem.ExtraField2, |
| | | ExtraField3 = impItem.ExtraField3, |
| | | OperationRemark = impItem.OperationRemark, |
| | | DeleteRemark = impItem.DeleteRemark, |
| | | |
| | | }; |
| | | |
| | | wmsMaterialUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsMaterialUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsMaterialCreateDto = new WmsMaterialCreateDto |
| | | { |
| | | MaterialCode = impItem.MaterialCode, |
| | | IsValid = impItem.IsValid, |
| | | MaterialName = impItem.MaterialName, |
| | | IsSelfMade = impItem.IsSelfMade, |
| | | PurchaseType = impItem.PurchaseType, |
| | | Num = impItem.Num, |
| | | MaterialType = impItem.MaterialType, |
| | | SelfNum = impItem.SelfNum, |
| | | PrimaryUnit = impItem.PrimaryUnit, |
| | | Standard = impItem.Standard, |
| | | NullLength = impItem.NullLength, |
| | | 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, |
| | | IsDisabled = impItem.IsDisabled, |
| | | CreatorName = impItem.CreatorName, |
| | | LastModifierName = impItem.LastModifierName, |
| | | ExtraField1 = impItem.ExtraField1, |
| | | ExtraField2 = impItem.ExtraField2, |
| | | ExtraField3 = impItem.ExtraField3, |
| | | OperationRemark = impItem.OperationRemark, |
| | | DeleteRemark = impItem.DeleteRemark, |
| | | |
| | | }; |
| | | |
| | | 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 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 ? "ç©æåºç¡ä¿¡æ¯è¡¨å表" : 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, "ç©æç¼ç ï¼å¯ä¸æ è¯ï¼", 64); |
| | | Check.NotNull(input.IsValid, "æ¯å¦ææç©æ"); |
| | | Check.NotNullOrWhiteSpace(input.MaterialName, "ç©æåç§°", 128); |
| | | Check.NotNull(input.PurchaseType, "éè´ç±»åï¼æä¸¾å¼ï¼"); |
| | | Check.NotNull(input.Num, "æ¯å¦ææç©æ"); |
| | | Check.NotNull(input.MaterialType, "ç©æç±»åï¼æä¸¾å¼ï¼"); |
| | | Check.NotNull(input.OuterDiameter, "å¤å¾ï¼åä½ï¼mmï¼"); |
| | | Check.NotNull(input.WallThickness, "å£åï¼åä½ï¼mmï¼"); |
| | | Check.NotNull(input.Length, "é¿åº¦ï¼åä½ï¼mï¼"); |
| | | Check.NotNull(input.IsMainBranch, "æ¯å¦ä¸ºä¸»æ¯ç®¡"); |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | } |