HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,110 @@ using CMS.Plugin.HIAWms.Domain.Shared.Enums; using Volo.Abp.Application.Dtos; namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; /// <summary> /// WmsMaterialStockæ¥è¯¢åæ°å¯¹è±¡ /// </summary> public class GetWmsMaterialStocksInput : ExtensiblePagedAndSortedResultRequestDto { /// <summary> /// Gets or sets the filter. /// </summary> public string Filter { get; set; } /// <summary> /// Gets or sets the name. /// </summary> public string Name { get; set; } /// <summary> /// å¼å§æ¶é´ /// </summary> public DateTime? StartTime { get; set; } /// <summary> /// ç»ææ¶é´ /// </summary> public DateTime? EndTime { get; set; } /// <summary> /// ç¼å· /// </summary> public virtual string MaterialId { get; set; } /// <summary> /// åç§° /// </summary> public virtual string MaterialName { get; set; } /// <summary> /// 容å¨ç¼å· /// </summary> public string ContainerNo { get; set; } /// <summary> /// 容å¨ç¶æ /// </summary> public ContainerStatusEnum? ContainerStatus { get; set; } /// <summary> /// 容å¨ç±»å /// </summary> public ContainerTypeEnum? ContainerType { get; set; } /// <summary> /// ç©æç¼å· /// </summary> public string MaterialNo { get; set; } /// <summary> /// ç©ææ¹æ¬¡ /// </summary> public string MaterialBatch { get; set; } /// <summary> /// ä¾åºåç¼å· /// </summary> public string SupplierCode { get; set; } /// <summary> /// æºå /// </summary> public string MaterialModel { get; set; } /// <summary> /// åºä½ç¼å· /// </summary> public string PlaceNo { get; set; } /// <summary> /// åºä½ç¶æ /// </summary> public PlaceStatusEnum? PlaceStatus { get; set; } /// <summary> /// åºä½ç±»åç¼å· /// </summary> public PlaceTypeEnum? StorageTypeNo { get; set; } /// <summary> /// åºåç¼å· /// </summary> public string AreaCode { get; set; } /// <summary> /// åºåºåç§° /// </summary> public string AreaName { get; set; } /// <summary> /// æ¯å¦éå® /// </summary> public YesNoEnum? IsLock { get; set; } /// <summary> /// å ¥åºæ¶é´ /// </summary> public DateTime? InStockTime { get; set; } } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; /// <summary> /// WmsMaterialStockåå»ºåæ°å¯¹è±¡ /// </summary> public class WmsMaterialStockCreateDto : WmsMaterialStockCreateOrUpdateDtoBase { /// <summary> /// æåº /// </summary> public virtual int? Sort { get; set; } /// <summary> /// æ¯å¦ç¦ç¨ /// </summary> public bool? IsDisabled { get; set; } = false; } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,112 @@ using CMS.Plugin.HIAWms.Domain.Shared.Enums; using Volo.Abp.Application.Dtos; namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; /// <summary> /// WmsMaterialStockåå»ºææ´æ°åºç±» /// </summary> public abstract class WmsMaterialStockCreateOrUpdateDtoBase : ExtensibleEntityDto { /// <summary> /// ç¼å· /// </summary> public virtual string MaterialId { get; set; } /// <summary> /// åç§° /// </summary> public virtual string MaterialName { get; set; } /// <summary> /// 容å¨ç¼å· /// </summary> public string ContainerNo { get; set; } /// <summary> /// 容å¨ç¶æ /// </summary> public ContainerStatusEnum ContainerStatus { get; set; } /// <summary> /// 容å¨ç±»å /// </summary> public ContainerTypeEnum ContainerType { get; set; } /// <summary> /// ç©æç¼å· /// </summary> public string MaterialNo { get; set; } /// <summary> /// åºåæ°é /// </summary> public int StockNumber { get; set; } /// <summary> /// ç©ææ¹æ¬¡ /// </summary> public string MaterialBatch { get; set; } /// <summary> /// ä¾åºåç¼å· /// </summary> public string SupplierCode { get; set; } /// <summary> /// æºå /// </summary> public string MaterialModel { get; set; } /// <summary> /// åºä½ç¼å· /// </summary> public string PlaceNo { get; set; } /// <summary> /// åºä½ç¶æ /// </summary> public PlaceStatusEnum PlaceStatus { get; set; } /// <summary> /// åºä½ç±»åç¼å· /// </summary> public PlaceTypeEnum StorageTypeNo { get; set; } /// <summary> /// åºåç¼å· /// </summary> public string AreaCode { get; set; } /// <summary> /// åºåºåç§° /// </summary> public string AreaName { get; set; } /// <summary> /// æ¯å¦éå® /// </summary> public int IsLock { get; set; } /// <summary> /// æ¯å¦ç©ºæ /// </summary> public YesNoEnum EmptyContainer { get; protected set; } /// <summary> /// å ¥åºæ¶é´ /// </summary> public DateTime? InStockTime { get; set; } /// <summary> /// 夿³¨ /// </summary> public virtual string Remark { get; set; } /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockCreateOrUpdateDtoBase"/> class. /// </summary> public WmsMaterialStockCreateOrUpdateDtoBase() : base(false) { } } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,205 @@ using CMS.Plugin.HIAWms.Domain.Shared.Enums; using System.Runtime.CompilerServices; using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Entities; namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; /// <summary> /// WmsMaterialStockæ°æ®åæ°å¯¹è±¡ /// </summary> public class WmsMaterialStockDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp { /// <summary> /// ç¼å· /// </summary> public virtual string MaterialId { get; set; } /// <summary> /// åç§° /// </summary> public virtual string MaterialName { get; set; } /// <summary> /// 容å¨ç¼å· /// </summary> public string ContainerNo { get; set; } /// <summary> /// 容å¨ç¶æ /// </summary> public ContainerStatusEnum ContainerStatus { get; set; } /// <summary> /// æçç¶æ /// </summary> public string ContainerStatusDesc { get { return GetEnumDescriptionUtil.GetEnumDescription(ContainerStatus); } } /// <summary> /// 容å¨ç±»å /// </summary> public ContainerTypeEnum ContainerType { get; set; } /// <summary> /// æçç±»å /// </summary> public string ContainerTypeDesc { get { return GetEnumDescriptionUtil.GetEnumDescription(ContainerType); } } /// <summary> /// ç©æç¼å· /// </summary> public string MaterialNo { get; set; } /// <summary> /// åºåæ°é /// </summary> public int StockNumber { get; set; } /// <summary> /// ç©ææ¹æ¬¡ /// </summary> public string MaterialBatch { get; set; } /// <summary> /// ä¾åºåç¼å· /// </summary> public string SupplierCode { get; set; } /// <summary> /// æºå /// </summary> public string MaterialModel { get; set; } /// <summary> /// åºä½ç¼å· /// </summary> public string PlaceNo { get; set; } /// <summary> /// åºä½ç¶æ /// </summary> public PlaceStatusEnum PlaceStatus { get; set; } /// <summary> /// è´§ä½ç¶æ /// </summary> public string PlaceStatusDesc { get { return GetEnumDescriptionUtil.GetEnumDescription(PlaceStatus); } } /// <summary> /// åºä½ç±»åç¼å· /// </summary> public PlaceTypeEnum StorageTypeNo { get; set; } /// <summary> /// è´§ä½ç±»å /// </summary> public string StorageTypeNoDesc { get { return GetEnumDescriptionUtil.GetEnumDescription(StorageTypeNo); } } /// <summary> /// åºåç¼å· /// </summary> public string AreaCode { get; set; } /// <summary> /// åºåºåç§° /// </summary> public string AreaName { get; set; } /// <summary> /// æ¯å¦éå® /// </summary> public YesNoEnum IsLock { get; set; } /// <summary> /// æ¯å¦éå® /// </summary> public string IsLockDesc { get { return GetEnumDescriptionUtil.GetEnumDescription(IsLock); } } /// <summary> /// æ¯å¦ç©ºæ /// </summary> public YesNoEnum EmptyContainer { get; protected set; } /// <summary> /// æ¯å¦ç©ºæ /// </summary> public string EmptyContainerDesc { get { return GetEnumDescriptionUtil.GetEnumDescription(EmptyContainer); } } /// <summary> /// å ¥åºæ¶é´ /// </summary> public DateTime? InStockTime { get; set; } /// <summary> /// æåº /// </summary> public virtual int Sort { get; set; } /// <summary> /// 夿³¨ /// </summary> public virtual string Remark { get; set; } /// <summary> /// æ¯å¦ç¦ç¨ /// </summary> public virtual bool? IsDisabled { get; set; } /// <summary> /// å¹¶åæ³ /// </summary> public string ConcurrencyStamp { get; set; } /// <summary> /// Gets the export data. /// </summary> /// <returns></returns> public Dictionary<string, object> GetExportData() { var exportData = new Dictionary<string, object>(); foreach (var property in this.GetType().GetProperties()) { exportData.Add(property.Name, property.GetValue(this)); } return exportData; } } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockUpdateDto.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ using Volo.Abp.Domain.Entities; namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; /// <summary> /// WmsMaterialStockæ´æ°åæ°å¯¹è±¡ /// </summary> public class WmsMaterialStockUpdateDto : WmsMaterialStockCreateOrUpdateDtoBase, IHasConcurrencyStamp { /// <summary> /// å¹¶åæ³ /// </summary> public string ConcurrencyStamp { get; set; } } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,136 @@ using CMS.Plugin.HIAWms.Domain.Shared.Enums; using MiniExcelLibs.Attributes; namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks { /// <summary> /// WmsMaterialStockså¯¼åºæ¨¡å /// </summary> public class WmsMaterialStocksExportModel { /// <summary> /// WmsMaterialStockå¯¼åºæ¨¡å /// </summary> public class WorkSectionExportModel { /// <summary> /// ç©æç¼å·ï¼å¯ä¸æ è¯ï¼ /// </summary> [ExcelColumn(Name = "ç©æç¼å·", Width = 25)] public string MaterialNo { get; set; } /// <summary> /// ç©æåç§°/æè¿° /// </summary> [ExcelColumn(Name = "ç©æåç§°", Width = 25)] public string MaterialName { get; set; } /// <summary> /// 容å¨/æçç¼å· /// </summary> [ExcelColumn(Name = "容å¨ç¼å·", Width = 25)] public string ContainerNo { get; set; } /// <summary> /// 容å¨ç¶ææä¸¾å¼ /// <para>0-ç©ºå®¹å¨ 1-å·²è£ è½½ 2-æ é</para> /// </summary> [ExcelColumn(Name = "容å¨ç¶æ", Width = 25)] public ContainerStatusEnum ContainerStatus { get; set; } /// <summary> /// 容å¨ç±»åæä¸¾å¼ /// <para>1-æç 2-æç®± 3-å¨è½¬ç®±</para> /// </summary> [ExcelColumn(Name = "容å¨ç±»å", Width = 25)] public ContainerTypeEnum ContainerType { get; set; } /// <summary> /// å½ååºåæ°éï¼æ´æ°ï¼ /// </summary> [ExcelColumn(Name = "åºåæ°é", Width = 25)] public int StockNumber { get; set; } /// <summary> /// ç©ææ¹æ¬¡å·ï¼LOTï¼ /// </summary> [ExcelColumn(Name = "ç©ææ¹æ¬¡", Width = 25)] public string MaterialBatch { get; set; } /// <summary> /// ä¾åºåç¼ç ï¼å ³èä¾åºåè¡¨ï¼ /// </summary> [ExcelColumn(Name = "ä¾åºåç¼å·", Width = 25)] public string SupplierCode { get; set; } /// <summary> /// ç©æè§æ ¼åå· /// </summary> [ExcelColumn(Name = "åå·", Width = 25)] public string MaterialModel { get; set; } /// <summary> /// åºä½ç¼ç ï¼åºä½è¡¨å¤é®ï¼ /// </summary> [ExcelColumn(Name = "åºä½ç¼å·", Width = 25)] public string PlaceNo { get; set; } /// <summary> /// åºä½ç¶ææä¸¾å¼ /// <para>1-ç©ºé² 2-å ç¨ 3-ç¦ç¨</para> /// </summary> [ExcelColumn(Name = "åºä½ç¶æ", Width = 25)] public PlaceStatusEnum PlaceStatus { get; set; } /// <summary> /// åºä½ç±»åæä¸¾å¼ /// <para>1-å¹³é¢åº 2-ç«ä½åº 3-éåè´§æ¶</para> /// </summary> [ExcelColumn(Name = "åºä½ç±»å", Width = 25)] public PlaceTypeEnum StorageTypeNo { get; set; } /// <summary> /// æå±åºåºç¼ç ï¼åºå表å¤é®ï¼ /// </summary> [ExcelColumn(Name = "åºåç¼å·", Width = 25)] public string AreaCode { get; set; } /// <summary> /// åºåºåç§°ï¼æ¾ç¤ºç¨ï¼ /// </summary> [ExcelColumn(Name = "åºåºåç§°", Width = 25)] public string AreaName { get; set; } /// <summary> /// éå®ç¶æ /// <para>0-æªéå® 1-å·²éå®</para> /// </summary> [ExcelColumn(Name = "æ¯å¦éå®", Width = 25)] public int IsLock { get; set; } /// <summary> /// æ¯å¦ç©ºæ /// </summary> [ExcelColumn(Name = "æ¯å¦ç©ºæ", Width = 25)] public YesNoEnum EmptyContainer { get; protected set; } /// <summary> /// æåå ¥åºæ¶é´ï¼å¯ä¸ºç©ºï¼ /// </summary> [ExcelColumn(Name = "å ¥åºæ¶é´", Width = 25, Format = "yyyy-MM-dd HH:mm")] public DateTime? InStockTime { get; set; } /// <summary> /// æ¾ç¤ºæåºåºå· /// </summary> [ExcelColumn(Name = "æåº", Width = 15)] public int Sort { get; set; } /// <summary> /// 夿³¨ä¿¡æ¯ /// </summary> [ExcelColumn(Name = "夿³¨", Width = 30)] public string Remark { get; set; } } } } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksImportModel.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks.WmsMaterialStocksExportModel; namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks { /// <summary> /// WmsMaterialStockså¯¼å ¥æ¨¡å /// </summary> public class WmsMaterialStocksImportModel { private List<WmsMaterialStockImportModel> _wmsmaterialstocks = new(); public List<WmsMaterialStockImportModel> WmsMaterialStocks { get => _wmsmaterialstocks; set { _wmsmaterialstocks = value; var rowIndex = 2; _wmsmaterialstocks?.ForEach(x => x.RowIndex = rowIndex++); } } /// <summary> /// WmsMaterialStockå¯¼å ¥æ¨¡å /// </summary> public class WmsMaterialStockImportModel : WorkSectionExportModel { /// <summary> /// è¡å· /// </summary> public int RowIndex { get; set; } } } } HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using Volo.Abp.Application.Services; namespace CMS.Plugin.HIAWms.Application.Contracts.Services; /// <summary> /// WmsMaterialStockåºç¨æå¡ /// </summary> public interface IWmsMaterialStockAppService : ICrudAppService<WmsMaterialStockDto, Guid, GetWmsMaterialStocksInput, WmsMaterialStockCreateDto, WmsMaterialStockUpdateDto> { /// <summary> /// Clones the asynchronous. /// </summary> /// <param name="ids">The ids.</param> /// <returns></returns> Task<List<WmsMaterialStockDto>> CloneAsync(IEnumerable<Guid> ids); /// <summary> /// Deletes the many asynchronous. /// </summary> /// <param name="ids">The ids.</param> /// <returns></returns> Task DeleteManyAsync(IEnumerable<Guid> ids); /// <summary> /// Adjusts the sort asynchronous. /// </summary> /// <param name="id">The identifier.</param> /// <param name="sort">The sort.</param> /// <returns></returns> Task AdjustSortAsync(Guid id, int sort); /// <summary> /// Imports the asynchronous. /// </summary> /// <param name="input">The input.</param> /// <returns></returns> Task ImportAsync(WmsMaterialStocksImportModel input); /// <summary> /// Exports the asynchronous. /// </summary> /// <param name="input">The input.</param> /// <returns></returns> Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialStocksInput input); } HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,385 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using CMS.Plugin.HIAWms.Application.Contracts.Services; using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; using CMS.Plugin.HIAWms.Domain.Shared; using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; using Volo.Abp.ObjectExtending; using CMS.Plugin.HIAWms.Domain.Shared.Util; namespace CMS.Plugin.HIAWms.Application.Implements; /// <inheritdoc /> public class WmsMaterialStockAppService : CMSPluginAppService, IWmsMaterialStockAppService { private readonly IWmsMaterialStockRepository _wmsmaterialstockRepository; /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockAppService"/> class. /// </summary> /// <param name="wmsmaterialstockRepository">The task job repository.</param> public WmsMaterialStockAppService(IWmsMaterialStockRepository wmsmaterialstockRepository) { _wmsmaterialstockRepository = wmsmaterialstockRepository; } /// <inheritdoc /> public virtual async Task<WmsMaterialStockDto> GetAsync(Guid id) { return ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(await _wmsmaterialstockRepository.GetAsync(id)); } /// <inheritdoc /> public virtual async Task<PagedResultDto<WmsMaterialStockDto>> GetListAsync(GetWmsMaterialStocksInput input) { Check.NotNull(input, nameof(input)); if (input.Sorting.IsNullOrWhiteSpace()) { input.Sorting = nameof(WmsMaterialStock.Sort); } var specification = new WmsMaterialStockSpecification(input.Name); var stock = ObjectMapper.Map<GetWmsMaterialStocksInput, WmsMaterialStock>(input); var count = await _wmsmaterialstockRepository.GetCountAsync(stock, input.StartTime, input.EndTime, input.Filter, specification); var list = await _wmsmaterialstockRepository.GetListAsync(stock, input.StartTime, input.EndTime, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification); return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list)); } /// <inheritdoc /> public virtual async Task<WmsMaterialStockDto> CreateAsync(WmsMaterialStockCreateDto input) { await CheckCreateOrUpdateDtoAsync(input); var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]); } var maxSort = await _wmsmaterialstockRepository.GetMaxSortAsync(); var sort = input.Sort ?? maxSort; var wmsmaterialstock = ObjectMapper.Map<WmsMaterialStockCreateDto, WmsMaterialStock>(input); input.MapExtraPropertiesTo(wmsmaterialstock, MappingPropertyDefinitionChecks.None); wmsmaterialstock.Sort = sort; wmsmaterialstock.InStockTime = DateTime.Now; await _wmsmaterialstockRepository.InsertAsync(wmsmaterialstock); if (input.Sort.HasValue && wmsmaterialstock.Sort != maxSort) { await AdjustSortAsync(wmsmaterialstock.Id, wmsmaterialstock.Sort); } return ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(wmsmaterialstock); } /// <inheritdoc /> public virtual async Task<WmsMaterialStockDto> UpdateAsync(Guid id, WmsMaterialStockUpdateDto input) { await CheckCreateOrUpdateDtoAsync(input); var wmsmaterialstock = await _wmsmaterialstockRepository.GetAsync(id); var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo, wmsmaterialstock.Id); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]); } wmsmaterialstock.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); input.MapExtraPropertiesTo(wmsmaterialstock, MappingPropertyDefinitionChecks.None); wmsmaterialstock.MaterialNo = input.MaterialNo; wmsmaterialstock.MaterialName = input.MaterialName; wmsmaterialstock.ContainerNo = input.ContainerNo; wmsmaterialstock.ContainerStatus = input.ContainerStatus; wmsmaterialstock.ContainerType = input.ContainerType; wmsmaterialstock.StockNumber = input.StockNumber; wmsmaterialstock.MaterialBatch = input.MaterialBatch; wmsmaterialstock.SupplierCode = input.SupplierCode; wmsmaterialstock.MaterialModel = input.MaterialModel; wmsmaterialstock.PlaceNo = input.PlaceNo; wmsmaterialstock.PlaceStatus = input.PlaceStatus; wmsmaterialstock.StorageTypeNo = input.StorageTypeNo; wmsmaterialstock.AreaCode = input.AreaCode; wmsmaterialstock.AreaName = input.AreaName; wmsmaterialstock.IsLock = input.IsLock; wmsmaterialstock.InStockTime = input.InStockTime; wmsmaterialstock.Remark = input.Remark; await _wmsmaterialstockRepository.UpdateAsync(wmsmaterialstock); return ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(wmsmaterialstock); } /// <inheritdoc /> public async Task<List<WmsMaterialStockDto>> CloneAsync(IEnumerable<Guid> ids) { var wmsmaterialstocks = new List<WmsMaterialStock>(); if (ids != null) { var sort = await _wmsmaterialstockRepository.GetMaxSortAsync(); foreach (var id in ids) { var wmsmaterialstock = await _wmsmaterialstockRepository.FindAsync(id); if (wmsmaterialstock != null) { var name = wmsmaterialstock.MaterialNo + WmsMaterialStockConsts.CloneTag; var notExist = false; while (!notExist) { var exist = await _wmsmaterialstockRepository.NameExistAsync(name); if (exist || wmsmaterialstocks.Any(x => x.MaterialNo == name)) { name += WmsMaterialStockConsts.CloneTag; continue; } notExist = true; } //wmsmaterialstock = await _wmsmaterialstockRepository.InsertAsync(wmsmaterialstock.Clone(GuidGenerator.Create(), name, sort++)); wmsmaterialstocks.Add(wmsmaterialstock); } } } return ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(wmsmaterialstocks); } /// <inheritdoc /> public virtual Task DeleteAsync(Guid id) { return _wmsmaterialstockRepository.DeleteAsync(id); } /// <inheritdoc /> public async Task DeleteManyAsync(IEnumerable<Guid> ids) { foreach (var id in ids) { await DeleteAsync(id); } } /// <inheritdoc /> public virtual async Task AdjustSortAsync(Guid id, int sort) { var list = await _wmsmaterialstockRepository.GetListAsync(null, null, null, nameof(WmsMaterialStock.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 _wmsmaterialstockRepository.UpdateManyAsync(list); } /// <inheritdoc /> public async Task ImportAsync(WmsMaterialStocksImportModel input) { Check.NotNull(input, nameof(input)); var wmsmaterialstockCreateDtos = new List<(int RowIndex, WmsMaterialStockCreateDto Item)>(); var wmsmaterialstockUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialStockUpdateDto Item)>(); var wmsmaterialstocks = input.WmsMaterialStocks; if (wmsmaterialstocks != null && wmsmaterialstocks.Any()) { #region å¯¼å ¥æ ¡éª // 夿åç§°æ¯å¦éå¤ï¼å¹¶è¾åºç¬¬å è¡éå¤ var duplicateWmsMaterialStocks = wmsmaterialstocks.GroupBy(x => x.MaterialNo).Where(x => x.Count() > 1).ToList(); if (duplicateWmsMaterialStocks?.Any() == true) { var duplicateWmsMaterialStockMsgs = duplicateWmsMaterialStocks.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡ï¼{x.Key} åç§°éå¤"); var errorMsg = $"å¯¼å ¥å¤±è´¥ï¼é ç½®ï¼ {string.Join(",", duplicateWmsMaterialStockMsgs)}ï¼ç»æ¢å¯¼å ¥"; throw new UserFriendlyException(errorMsg); } #endregion foreach (var wmsmaterialstock in wmsmaterialstocks) { if (wmsmaterialstock.MaterialNo.IsNullOrWhiteSpace() && wmsmaterialstock.MaterialNo.IsNullOrWhiteSpace()) { continue; } if (wmsmaterialstock.MaterialNo.IsNullOrWhiteSpace()) { var errorMsg = $"å¯¼å ¥å¤±è´¥ï¼é ç½®ï¼ç¬¬{wmsmaterialstock.RowIndex}è¡ï¼WmsMaterialStockåç§°ä¸è½ä¸ºç©º"; throw new UserFriendlyException(errorMsg); } var oldWmsMaterialStock = await _wmsmaterialstockRepository.FindByNameAsync(wmsmaterialstock.MaterialNo); if (oldWmsMaterialStock != null) { var wmsMaterialStockUpdateDto = new WmsMaterialStockUpdateDto { // åºç¡ä¿¡æ¯ MaterialNo = wmsmaterialstock.MaterialNo, MaterialName = wmsmaterialstock.MaterialName, Remark = wmsmaterialstock.Remark, // 容å¨ä¿¡æ¯ ContainerNo = wmsmaterialstock.ContainerNo, ContainerStatus = wmsmaterialstock.ContainerStatus, ContainerType = wmsmaterialstock.ContainerType, // åºåä¿¡æ¯ StockNumber = wmsmaterialstock.StockNumber, MaterialBatch = wmsmaterialstock.MaterialBatch, // ä¾åºåä¿¡æ¯ SupplierCode = wmsmaterialstock.SupplierCode, MaterialModel = wmsmaterialstock.MaterialModel, // åºä½ä¿¡æ¯ PlaceNo = wmsmaterialstock.PlaceNo, PlaceStatus = wmsmaterialstock.PlaceStatus, StorageTypeNo = wmsmaterialstock.StorageTypeNo, // åºåºä¿¡æ¯ AreaCode = wmsmaterialstock.AreaCode, AreaName = wmsmaterialstock.AreaName, // ç¶æä¿¡æ¯ IsLock = wmsmaterialstock.IsLock, InStockTime = wmsmaterialstock.InStockTime, // å¹¶åæ§å¶ ConcurrencyStamp = oldWmsMaterialStock.ConcurrencyStamp }; wmsmaterialstockUpdateDtos.Add((wmsmaterialstock.RowIndex, oldWmsMaterialStock.Id, wmsMaterialStockUpdateDto)); } else { var wmsmaterialstockCreateDto = new WmsMaterialStockCreateDto { // åºç¡ä¿¡æ¯ MaterialNo = wmsmaterialstock.MaterialNo, MaterialName = wmsmaterialstock.MaterialName, Remark = wmsmaterialstock.Remark, // 容å¨ä¿¡æ¯ ContainerNo = wmsmaterialstock.ContainerNo, ContainerStatus = wmsmaterialstock.ContainerStatus, ContainerType = wmsmaterialstock.ContainerType, // åºåä¿¡æ¯ StockNumber = wmsmaterialstock.StockNumber, MaterialBatch = wmsmaterialstock.MaterialBatch, // ä¾åºåä¿¡æ¯ SupplierCode = wmsmaterialstock.SupplierCode, MaterialModel = wmsmaterialstock.MaterialModel, // åºä½ä¿¡æ¯ PlaceNo = wmsmaterialstock.PlaceNo, PlaceStatus = wmsmaterialstock.PlaceStatus, StorageTypeNo = wmsmaterialstock.StorageTypeNo, // åºåºä¿¡æ¯ AreaCode = wmsmaterialstock.AreaCode, AreaName = wmsmaterialstock.AreaName, // ç¶æä¿¡æ¯ IsLock = wmsmaterialstock.IsLock, InStockTime = wmsmaterialstock.InStockTime, }; wmsmaterialstockCreateDtos.Add((wmsmaterialstock.RowIndex, wmsmaterialstockCreateDto)); } } } // æ°å¢ foreach (var wmsmaterialstockDto in wmsmaterialstockCreateDtos) { try { await CreateAsync(wmsmaterialstockDto.Item); } catch (Exception e) { var errorMsg = $"å¯¼å ¥å¤±è´¥ï¼é ç½®ï¼ç¬¬{wmsmaterialstockDto.RowIndex}è¡ï¼{e.Message}ï¼ç»æ¢å¯¼å ¥"; throw new UserFriendlyException(errorMsg); } } // æ´æ° foreach (var wmsmaterialstockDto in wmsmaterialstockUpdateDtos) { try { await UpdateAsync(wmsmaterialstockDto.Id, wmsmaterialstockDto.Item); } catch (Exception e) { var errorMsg = $"å¯¼å ¥å¤±è´¥ï¼é ç½®ï¼ç¬¬{wmsmaterialstockDto.RowIndex}è¡ï¼{e.Message}ï¼ç»æ¢å¯¼å ¥"; throw new UserFriendlyException(errorMsg); } } } /// <inheritdoc /> public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialStocksInput input) { Check.NotNull(input, nameof(input)); if (input.Sorting.IsNullOrWhiteSpace()) { input.Sorting = nameof(WmsMaterialStock.Sort); } var specification = new WmsMaterialStockSpecification(input.Name); var stock = ObjectMapper.Map<GetWmsMaterialStocksInput, WmsMaterialStock>(input); var list = await _wmsmaterialstockRepository.GetListAsync(stock, input.StartTime, input.EndTime, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true); var result = ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list); var sheets = new Dictionary<string, object> { ["é ç½®"] = ExportHelper.ConvertListToExportData(result), }; var fileName = result.Count > 1 ? "WmsMaterialStockå表" : result.Count == 1 ? result.First()?.MaterialNo : "WmsMaterialStock模ç"; return (sheets, fileName); } /// <summary> /// Checks the create or update dto asynchronous. /// </summary> /// <param name="input">The input.</param> protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialStockCreateOrUpdateDtoBase input) { Check.NotNull(input, nameof(input)); Check.NotNullOrWhiteSpace(input.MaterialNo, "ç¼å·", WmsMaterialStockConsts.MaxCodeLength); Check.NotNullOrWhiteSpace(input.MaterialName, "åç§°", WmsMaterialStockConsts.MaxNameLength); Check.Length(input.Remark, "夿³¨", WmsMaterialStockConsts.MaxRemarkLength); return Task.CompletedTask; } } HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialStockAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ using AutoMapper; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterials; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using CMS.Plugin.HIAWms.Domain.WmsMaterials; using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; using Volo.Abp.ObjectExtending; namespace CMS.Plugin.HIAWms.Application.MapperProfiles; /// <summary> /// AutoMapperé ç½® /// </summary> /// <seealso cref="AutoMapper.Profile" /> public class WmsMaterialStockAutoMapperProfile : Profile { /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockAutoMapperProfile"/> class. /// </summary> public WmsMaterialStockAutoMapperProfile() { /* You can configure your AutoMapper mapping configuration here. * Alternatively, you can split your mapping configurations * into multiple profile classes for a better organization. */ CreateMap<WmsMaterialStock, WmsMaterialStockDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); CreateMap<WmsMaterialStockCreateDto, WmsMaterialStock>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); CreateMap<GetWmsMaterialStocksInput, WmsMaterialStock>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); } } HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialStocks/WmsMaterialStockConsts.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ namespace CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; /// <summary> /// WmsMaterialStock常éå®ä¹ /// </summary> public static class WmsMaterialStockConsts { public const string CloneTag = "_坿¬"; public static int MaxCodeLength { get; set; } = 64; public static int MaxNameLength { get; set; } = 64; public static int MaxRemarkLength { get; set; } = 256; } HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialStocks/WmsMaterialStockEto.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ namespace CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; /// <summary> /// WmsMaterialStockäºä»¶åæ°å¯¹è±¡ /// </summary> [Serializable] public class WmsMaterialStockEto { /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockEto"/> class. /// </summary> /// <param name="name">The name.</param> public WmsMaterialStockEto(string name) { Name = name; } /// <summary> /// åç§° /// </summary> public string Name { get; } } HIAWms/server/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialStockEventHandler.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; namespace CMS.Plugin.HIAWms.Domain.EventHandlers; /// <summary> /// WmsMaterialStockäºä»¶å¤çç¨åº /// </summary> public class WmsMaterialStockEventHandler : IDistributedEventHandler<WmsMaterialStockEto>, ITransientDependency { /// <inheritdoc /> public Task HandleEventAsync(WmsMaterialStockEto eventData) { return Task.CompletedTask; } } HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,54 @@ using Volo.Abp.Domain.Repositories; using Volo.Abp.Specifications; namespace CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; /// <summary> /// WmsMaterialStockä»å¨ /// </summary> public interface IWmsMaterialStockRepository : IBasicRepository<WmsMaterialStock, Guid> { /// <summary> /// Finds the by name asynchronous. /// </summary> /// <param name="name">The name.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> Task<WmsMaterialStock> FindByNameAsync(string name, CancellationToken cancellationToken = default); /// <summary> /// Names the exist asynchronous. /// </summary> /// <param name="name">The name.</param> /// <param name="id">The identifier.</param> /// <returns></returns> Task<bool> NameExistAsync(string name, Guid? id = null); /// <summary> /// Gets the maximum sort asynchronous. /// </summary> /// <returns></returns> Task<int> GetMaxSortAsync(); /// <summary> /// Gets the list asynchronous. /// </summary> /// <param name="sorting">The sorting.</param> /// <param name="maxResultCount">The maximum result count.</param> /// <param name="skipCount">The skip count.</param> /// <param name="filter">The filter.</param> /// <param name="specification">The specification.</param> /// <param name="includeDetails">if set to <c>true</c> [include details].</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> Task<List<WmsMaterialStock>> GetListAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsMaterialStock> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default); /// <summary> /// Gets the count asynchronous. /// </summary> /// <param name="filter">The filter.</param> /// <param name="specification">The specification.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> Task<long> GetCountAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string filter = null, Specification<WmsMaterialStock> specification = null, CancellationToken cancellationToken = default); } HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,128 @@ using CMS.Plugin.HIAWms.Domain.Shared.Enums; using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; namespace CMS.Plugin.HIAWms.Domain.WmsMaterialStocks { /// <summary> /// WmsMaterialStock /// </summary> public class WmsMaterialStock : FullAuditedAggregateRoot<Guid> { /// <summary> /// ç©æç¼å· /// </summary> public virtual string MaterialId { get; set; } /// <summary> /// ç©æåç§° /// </summary> public virtual string MaterialName { get; set; } /// <summary> /// 容å¨ç¼å· /// </summary> public string ContainerNo { get; set; } /// <summary> /// 容å¨ç¶æ /// </summary> public ContainerStatusEnum ContainerStatus { get; set; } /// <summary> /// 容å¨ç±»å /// </summary> public ContainerTypeEnum ContainerType { get; set; } /// <summary> /// ç©æç¼å· /// </summary> public string MaterialNo { get; set; } /// <summary> /// åºåæ°é /// </summary> public int StockNumber { get; set; } /// <summary> /// ç©ææ¹æ¬¡ /// </summary> public string MaterialBatch { get; set; } /// <summary> /// ä¾åºåç¼å· /// </summary> public string SupplierCode { get; set; } /// <summary> /// åå· /// </summary> public string MaterialModel { get; set; } /// <summary> /// åºä½ç¼å· /// </summary> public string PlaceNo { get; set; } /// <summary> /// åºä½ç¶æ /// </summary> public PlaceStatusEnum PlaceStatus { get; set; } /// <summary> /// åºä½ç±»åç¼å· /// </summary> public PlaceTypeEnum StorageTypeNo { get; set; } /// <summary> /// åºåç¼å· /// </summary> public string AreaCode { get; set; } /// <summary> /// åºåºåç§° /// </summary> public string AreaName { get; set; } /// <summary> /// æ¯å¦éå® /// </summary> public int IsLock { get; set; } /// <summary> /// æ¯å¦ç©ºæ /// </summary> public YesNoEnum EmptyContainer { get; protected set; } /// <summary> /// å ¥åºæ¶é´ /// </summary> public DateTime? InStockTime { get; set; } /// <summary> /// æåº /// </summary> public virtual int Sort { get; set; } /// <summary> /// 夿³¨ /// </summary> public virtual string Remark { get; set; } /// <summary> /// æ¯å¦ç¦ç¨ /// </summary> public virtual bool? IsDisabled { get; protected set; } /// <summary> /// Adjusts the sort. /// </summary> /// <param name="sort">The sort.</param> public void AdjustSort(int sort) { Sort = sort; } } } HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStockDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.Uow; namespace CMS.Plugin.HIAWms.Domain.WmsMaterialStocks { /// <summary> /// WmsMaterialStockç§åæ°æ®æä¾ç¨åº /// </summary> public class WmsMaterialStockDataSeedContributor : IDataSeedContributor, ITransientDependency { private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IWmsMaterialStockRepository _wmsmaterialstockRepository; private readonly IGuidGenerator _guidGenerator; /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockDataSeedContributor"/> class. /// </summary> /// <param name="unitOfWorkManager">The unit of work manager.</param> /// <param name="guidGenerator">The unique identifier generator.</param> /// <param name="wmsmaterialstockRepository">The work section repository.</param> public WmsMaterialStockDataSeedContributor(IUnitOfWorkManager unitOfWorkManager, IGuidGenerator guidGenerator, IWmsMaterialStockRepository wmsmaterialstockRepository) { _unitOfWorkManager = unitOfWorkManager; _wmsmaterialstockRepository = wmsmaterialstockRepository; _guidGenerator = guidGenerator; } /// <inheritdoc /> public async Task SeedAsync(DataSeedContext context) { if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName) { try { //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true); //await unitofWork.SaveChangesAsync(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData") { try { await SeedWmsMaterialStockDataAsync(); } catch (Exception e) { Console.WriteLine(e.Message); } } } /// <summary> /// Seeds the work section data asynchronous. /// </summary> private async Task SeedWmsMaterialStockDataAsync() { using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true); if (await _wmsmaterialstockRepository.GetCountAsync() == 0) { var WmsMaterialStocks = new List<WmsMaterialStock>(); for (int i = 1; i <= 80; i++) { var wmsmaterialstock = new WmsMaterialStock(_guidGenerator.Create(), $"WmsMaterialStock_Code{i}", $"WmsMaterialStock_Name{i}", i, $"WmsMaterialStock_Remark{i}"); WmsMaterialStocks.Add(wmsmaterialstock); } await _wmsmaterialstockRepository.InsertManyAsync(WmsMaterialStocks); await unitofWork.SaveChangesAsync(); } } } } HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStockSpecification.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ using System.Linq.Expressions; namespace CMS.Plugin.HIAWms.Domain.WmsMaterialStocks { /// <summary> /// WmsMaterialStockè§çº¦ /// </summary> public class WmsMaterialStockSpecification : Volo.Abp.Specifications.Specification<WmsMaterialStock> { private readonly string _materialName; /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockSpecification"/> class. /// </summary> public WmsMaterialStockSpecification() { } /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockSpecification"/> class. /// </summary> /// <param name="materialName">The name.</param> public WmsMaterialStockSpecification(string materialName = null) { _materialName = materialName; } /// <inheritdoc /> public override Expression<Func<WmsMaterialStock, bool>> ToExpression() { Expression<Func<WmsMaterialStock, bool>> expression = c => 1 == 1; if (_materialName != null) { expression = expression.And(c => c.MaterialNo == _materialName); } return expression; } } } HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,141 @@ using CMS.Plugin.HIAWms.Domain; using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.EntityFrameworkCore.Modeling; namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; /// <summary> /// EfCoreæ©å± /// </summary> public static partial class CMSPluginEfCoreExtensions { /// <summary> /// Includes the details. /// </summary> /// <param name="queryable">The queryable.</param> /// <param name="include">if set to <c>true</c> [include].</param> /// <returns></returns> public static IQueryable<WmsMaterialStock> IncludeDetails(this IQueryable<WmsMaterialStock> queryable, bool include = true) { if (!include) { return queryable; } return queryable; } /// <summary> /// Configures the wmsmaterialstock. /// </summary> /// <param name="builder">The builder.</param> public static void ConfigureWmsMaterialStock(this ModelBuilder builder) { Check.NotNull(builder, nameof(builder)); builder.Entity<WmsMaterialStock>(b => { // é ç½®è¡¨åæ¶æåç§° b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsMaterialStocks").ToLower(), CMSPluginDbProperties.DbSchema) .HasComment("WMSç©æåºå表"); b.ConfigureByConvention(); // 主é®é ç½® b.HasKey(x => x.Id); // 屿§é ç½® b.Property(x => x.MaterialId) .HasMaxLength(64) .IsRequired() .HasComment("ç©æID"); b.Property(x => x.MaterialName) .HasMaxLength(128) .IsRequired() .HasComment("ç©æåç§°"); b.Property(x => x.ContainerNo) .HasMaxLength(64) .HasComment("容å¨ç¼å·"); b.Property(x => x.ContainerStatus) .HasComment("容å¨ç¶æ"); b.Property(x => x.ContainerType) .HasComment("容å¨ç±»å"); b.Property(x => x.MaterialNo) .HasMaxLength(64) .IsRequired() .HasComment("ç©æç¼å·"); b.Property(x => x.StockNumber) .HasComment("åºåæ°é"); b.Property(x => x.MaterialBatch) .HasMaxLength(64) .HasComment("ç©ææ¹æ¬¡"); b.Property(x => x.SupplierCode) .HasMaxLength(64) .HasComment("ä¾åºåç¼å·"); b.Property(x => x.MaterialModel) .HasMaxLength(128) .HasComment("æºå/è§æ ¼"); b.Property(x => x.PlaceNo) .HasMaxLength(64) .HasComment("åºä½ç¼å·"); b.Property(x => x.PlaceStatus) .HasComment("åºä½ç¶æ;"); b.Property(x => x.StorageTypeNo) .HasComment("åºä½ç±»å"); b.Property(x => x.AreaCode) .HasMaxLength(64) .HasComment("åºåç¼å·"); b.Property(x => x.AreaName) .HasMaxLength(128) .HasComment("åºåºåç§°"); b.Property(x => x.IsLock) .HasComment("æ¯å¦éå®(2:æªéå®,1:å·²éå®)"); b.Property(x => x.EmptyContainer) .HasComment("æ¯å¦ç©ºæ(2:å¦,1:æ¯)"); b.Property(x => x.InStockTime) .HasComment("å ¥åºæ¶é´"); b.Property(x => x.Sort) .HasDefaultValue(0) .HasComment("æåº"); b.Property(x => x.Remark) .HasMaxLength(500) .HasComment("夿³¨"); b.Property(x => x.IsDisabled) .HasComment("æ¯å¦ç¦ç¨"); // ç´¢å¼é ç½® b.HasIndex(x => x.MaterialNo).IsUnique(); b.HasIndex(x => x.MaterialName); b.HasIndex(x => x.ContainerNo); b.HasIndex(x => x.PlaceNo); b.HasIndex(x => x.AreaCode); b.HasIndex(x => new { x.MaterialBatch, x.SupplierCode }); // æ©å±å±æ§é ç½® b.ApplyObjectExtensionMappings(); }); } } HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,119 @@ using System.Linq.Dynamic.Core; using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Specifications; namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories; /// <inheritdoc /> public class EfCoreWmsMaterialStockRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterialStock, Guid>, IWmsMaterialStockRepository { /// <summary> /// Initializes a new instance of the <see cref="EfCoreWmsMaterialStockRepository"/> class. /// </summary> /// <param name="dbContextProvider">The database context provider.</param> public EfCoreWmsMaterialStockRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) : base(dbContextProvider) { } /// <inheritdoc /> public virtual async Task<WmsMaterialStock> FindByNameAsync(string materialNo, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails() .OrderBy(t => t.Sort) .FirstOrDefaultAsync(t => t.MaterialNo == materialNo, GetCancellationToken(cancellationToken)); } /// <inheritdoc /> public async Task<bool> NameExistAsync(string materialNo, Guid? id = null) { return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).AnyAsync(x => x.MaterialNo == materialNo); } /// <inheritdoc /> public async Task<int> GetMaxSortAsync() { var hasAny = await (await GetQueryableAsync()).AnyAsync(); if (!hasAny) { return 1; } var sort = await (await GetQueryableAsync()).MaxAsync(x => x.Sort); return sort + 1; } /// <inheritdoc /> public async Task<List<WmsMaterialStock>> GetListAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsMaterialStock> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default) { specification ??= new WmsMaterialStockSpecification(); return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialNo.Contains(filter) || u.MaterialName.Contains(filter) || u.MaterialBatch.Contains(filter) || u.PlaceNo.Contains(filter) || u.AreaName.Contains(filter)) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialNo), u => u.MaterialNo.Contains(stock.MaterialNo)) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialName), u => u.MaterialName.Contains(stock.MaterialName)) .WhereIf(!string.IsNullOrEmpty(stock?.ContainerNo), u => u.ContainerNo == stock.ContainerNo) .WhereIf(stock?.ContainerStatus > 0, u => u.ContainerStatus == stock.ContainerStatus) .WhereIf(stock?.ContainerType > 0, u => u.ContainerType == stock.ContainerType) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialBatch), u => u.MaterialBatch == stock.MaterialBatch) .WhereIf(!string.IsNullOrEmpty(stock?.SupplierCode), u => u.SupplierCode == stock.SupplierCode) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialModel), u => u.MaterialModel.Contains(stock.MaterialModel)) .WhereIf(!string.IsNullOrEmpty(stock?.PlaceNo), u => u.PlaceNo == stock.PlaceNo) .WhereIf(stock.PlaceStatus > 0, u => u.PlaceStatus == stock.PlaceStatus) .WhereIf(stock?.StorageTypeNo > 0, u => u.StorageTypeNo == stock.StorageTypeNo) .WhereIf(!string.IsNullOrEmpty(stock?.AreaCode), u => u.AreaCode == stock.AreaCode) .WhereIf(!string.IsNullOrEmpty(stock?.AreaName), u => u.AreaName.Contains(stock.AreaName)) .WhereIf(stock.IsLock > 0, u => u.IsLock == stock.IsLock) .WhereIf(startTime.HasValue, u => u.InStockTime >= startTime.Value) .WhereIf(endTime.HasValue, u => u.InStockTime <= endTime.Value) .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsMaterialStock.Sort) : sorting) .PageBy(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); } /// <inheritdoc /> public async Task<long> GetCountAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string filter = null, Specification<WmsMaterialStock> specification = null, CancellationToken cancellationToken = default) { specification ??= new WmsMaterialStockSpecification(); return await (await GetQueryableAsync()) .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialNo.Contains(filter) || u.MaterialName.Contains(filter) || u.MaterialBatch.Contains(filter) || u.PlaceNo.Contains(filter) || u.AreaName.Contains(filter)) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialNo), u => u.MaterialNo.Contains(stock.MaterialNo)) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialName), u => u.MaterialName.Contains(stock.MaterialName)) .WhereIf(!string.IsNullOrEmpty(stock?.ContainerNo), u => u.ContainerNo == stock.ContainerNo) .WhereIf(stock?.ContainerStatus > 0, u => u.ContainerStatus == stock.ContainerStatus) .WhereIf(stock?.ContainerType > 0, u => u.ContainerType == stock.ContainerType) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialBatch), u => u.MaterialBatch == stock.MaterialBatch) .WhereIf(!string.IsNullOrEmpty(stock?.SupplierCode), u => u.SupplierCode == stock.SupplierCode) .WhereIf(!string.IsNullOrEmpty(stock?.MaterialModel), u => u.MaterialModel.Contains(stock.MaterialModel)) .WhereIf(!string.IsNullOrEmpty(stock?.PlaceNo), u => u.PlaceNo == stock.PlaceNo) .WhereIf(stock.PlaceStatus > 0, u => u.PlaceStatus == stock.PlaceStatus) .WhereIf(stock?.StorageTypeNo > 0, u => u.StorageTypeNo == stock.StorageTypeNo) .WhereIf(!string.IsNullOrEmpty(stock?.AreaCode), u => u.AreaCode == stock.AreaCode) .WhereIf(!string.IsNullOrEmpty(stock?.AreaName), u => u.AreaName.Contains(stock.AreaName)) .WhereIf(stock.IsLock > 0, u => u.IsLock == stock.IsLock) .WhereIf(startTime.HasValue, u => u.InStockTime >= startTime.Value) .WhereIf(endTime.HasValue, u => u.InStockTime <= endTime.Value) .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } /// <inheritdoc /> public override async Task<IQueryable<WmsMaterialStock>> WithDetailsAsync() { return (await GetQueryableAsync()).IncludeDetails(); } } HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs
@@ -37,6 +37,7 @@ builder.ConfigureWmsArea(); builder.ConfigureWmsPlace(); builder.ConfigureWmsMaterial(); builder.ConfigureWmsMaterialStock(); /* Configure your own tables/entities inside here */ HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs
@@ -37,6 +37,7 @@ builder.ConfigureWmsArea(); builder.ConfigureWmsPlace(); builder.ConfigureWmsMaterial(); builder.ConfigureWmsMaterialStock(); /* Configure your own tables/entities inside here */ //builder.Entity<YourEntity>(b => HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs
@@ -37,6 +37,7 @@ builder.ConfigureWmsArea(); builder.ConfigureWmsPlace(); builder.ConfigureWmsMaterial(); builder.ConfigureWmsMaterialStock(); /* Configure your own tables/entities inside here */ HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,187 @@ using Ao.Lang; using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; 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 { /// <summary> /// WmsMaterialStockæå¡ /// </summary> [ApiController] [TypeFilter(typeof(CMSLanguageFilter))] [TypeFilter(typeof(CMSUowActionFilter))] [TypeFilter(typeof(CMSAuditActionFilter))] [TypeFilter(typeof(CMSExceptionFilter))] [Route("api/v{version:apiVersion}/HIAWms/[controller]")] public class WmsMaterialStockController : ControllerBase { private readonly IWmsMaterialStockAppService _wmsmaterialstockAppService; /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialStockController"/> class. /// </summary> /// <param name="wmsmaterialstockAppService">The wmsmaterialstock application service.</param> public WmsMaterialStockController(IWmsMaterialStockAppService wmsmaterialstockAppService) { _wmsmaterialstockAppService = wmsmaterialstockAppService; } /// <summary> /// è·åwmsmaterialstock. /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <returns></returns> [HttpGet] [Route("{id}")] public virtual Task<WmsMaterialStockDto> GetAsync(Guid id) { return _wmsmaterialstockAppService.GetAsync(id); } /// <summary> /// è·åwmsmaterialstockçå表. /// </summary> /// <param name="input">è¾å ¥.</param> /// <returns></returns> [HttpGet] public virtual Task<PagedResultDto<WmsMaterialStockDto>> GetListAsync([FromQuery] GetWmsMaterialStocksInput input) { return _wmsmaterialstockAppService.GetListAsync(input); } /// <summary> /// å建wmsmaterialstock. /// </summary> /// <param name="input">è¾å ¥.</param> /// <returns></returns> //[Authorize] [HttpPost] public virtual Task<WmsMaterialStockDto> CreateAsync(WmsMaterialStockCreateDto input) { return _wmsmaterialstockAppService.CreateAsync(input); } /// <summary> /// æ´æ°wmsmaterialstock. /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <param name="input">è¾å ¥.</param> /// <returns></returns> //[Authorize] [HttpPut] [Route("{id}")] public virtual Task<WmsMaterialStockDto> UpdateAsync(Guid id, WmsMaterialStockUpdateDto input) { return _wmsmaterialstockAppService.UpdateAsync(id, input); } /// <summary> /// å éWmsMaterialStock. /// </summary> /// <param name="ids">Idéå.</param> /// <returns></returns> //[Authorize] [HttpPost] [Route("Clone")] public virtual Task<List<WmsMaterialStockDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) { return _wmsmaterialstockAppService.CloneAsync(ids); } /// <summary> /// å é¤wmsmaterialstock. /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <returns></returns> //[Authorize] [HttpDelete] [Route("{id}")] public virtual Task DeleteAsync(Guid id) { return _wmsmaterialstockAppService.DeleteAsync(id); } /// <summary> /// æ¹éå é¤wmsmaterialstock. /// </summary> /// <param name="ids">The ids.</param> /// <returns></returns> //[Authorize] [HttpDelete] public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) { return _wmsmaterialstockAppService.DeleteManyAsync(ids); } /// <summary> /// è°æ´æåº. /// </summary> /// <param name="id">æ è¯ç¬¦.</param> /// <returns></returns> [HttpPut] [Route("{id}/AdjustSort/{sort}")] public virtual Task AdjustSortAsync(Guid id, int sort) { return _wmsmaterialstockAppService.AdjustSortAsync(id, sort); } /// <summary> /// å¯¼å ¥wmsmaterialstock. /// </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 wmsmaterialstockRows = sheetNames.Contains("é ç½®") ? MiniExcel.Query<WmsMaterialStocksImportModel.WmsMaterialStockImportModel>(stream, sheetName: "é ç½®").ToList() : new(); if (!wmsmaterialstockRows.Any()) { throw new UserFriendlyException("è¯·æ£æ¥å¯¼å ¥çè¡¨æ ¼"); } await _wmsmaterialstockAppService.ImportAsync(new WmsMaterialStocksImportModel { WmsMaterialStocks = wmsmaterialstockRows, }); return Ok(); } /// <summary> /// 导åºwmsmaterialstock. /// </summary> /// <returns></returns> [HttpGet] [Route("Export")] public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialStocksInput input) { input.MaxResultCount = int.MaxValue; var exportData = await _wmsmaterialstockAppService.ExportAsync(input); var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterialStockå¯¼åºæ¨¡æ¿.xlsx"); if (!System.IO.File.Exists(templatePath)) { templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterialStockå¯¼åºæ¨¡æ¿.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" }; } } } HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStockµ¼³öÄ£°å.xlsxBinary files differ