diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs index 93c8a6cae..a0a3a4589 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs @@ -10,6 +10,8 @@ using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Backflushs; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Boms; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Customers; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Dictpjs; +using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocationItems; +using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.InterfaceCalendars; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Products; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.SalePrices; @@ -49,5 +51,7 @@ public class DataExchangeDapperFawtygModule : AbpModule context.Services.AddTransient(); context.Services.AddTransient(); context.Services.AddTransient(); + context.Services.AddTransient(); + context.Services.AddTransient(); } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemLinq2DbRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemLinq2DbRepository.cs new file mode 100644 index 000000000..8b0b70bfe --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemLinq2DbRepository.cs @@ -0,0 +1,12 @@ +using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp.Bases; +using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; + +namespace Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocationItems; +public class ErpLocationItemLinq2DbRepository : Linq2DbCrudRepository, IErpLocationItemLinq2DbRepository +{ + public ErpLocationItemLinq2DbRepository(TyrpDb tyrpDb) : base(tyrpDb) + { + + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs index e59acea0b..c7adc5b0d 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs @@ -21,7 +21,7 @@ public class TyrpDb : DataConnection, ITransientDependency public ITable PurchasePrice => this.GetTable(); public ITable SalePrice => this.GetTable(); public ITable Backflu => this.GetTable(); - - public ITable mes_product => this.GetTable(); - + public ITable ErpLocationItem => this.GetTable(); + public ITable Product => this.GetTable(); + public ITable InterfaceCalendar => this.GetTable(); } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemManager.cs new file mode 100644 index 000000000..49c96fc24 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/ErpLocationItemManager.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public class ErpLocationItemManager : DomainService, IErpLocationItemManager +{ + private readonly IErpLocationItemLinq2DbRepository _repository; + + public ErpLocationItemManager(IErpLocationItemLinq2DbRepository repository) + { + _repository = repository; + } + public virtual async Task> GetToBeProcessedListAsync() + { + var locdouts = await _repository.GetListAsync().ConfigureAwait(false); + return locdouts.ToList(); + + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemLinq2DbRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemLinq2DbRepository.cs new file mode 100644 index 000000000..811025ded --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemLinq2DbRepository.cs @@ -0,0 +1,6 @@ + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public interface IErpLocationItemLinq2DbRepository : ILinq2DbRepository +{ + +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemManager.cs new file mode 100644 index 000000000..b7064d0c0 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/IErpLocationItemManager.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public interface IErpLocationItemManager +{ + Task> GetToBeProcessedListAsync(); +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/locdout.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/locdout.cs new file mode 100644 index 000000000..43eb811b2 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocationItems/locdout.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public class locdout : Entity +{ + /// + /// 储位 + /// + public string locdout_loc { get; set; } + /// + /// 零件 + /// + public string locdout_part { get; set; } + + + public override object[] GetKeys() + { + return new object[] { locdout_loc, locdout_part }; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemConverter.cs new file mode 100644 index 000000000..429314c9e --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemConverter.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; + + +public class ErpLocationItemConverter : IIncomingConverter +{ + private readonly IIncomingToWmsManager _incomingToWmsManager; + private readonly IObjectMapper _objectMapper; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + + public ErpLocationItemConverter( + IIncomingToWmsManager incomingToWmsManager, + IObjectMapper objectMapper, + ILogger logger, + IGuidGenerator guidGenerator +, + IIncomingFromExternalManager incomingFromExternalManager + +) + { + _incomingToWmsManager = incomingToWmsManager; + _objectMapper = objectMapper; + _logger = logger; + _guidGenerator = guidGenerator; + _incomingFromExternalManager = incomingFromExternalManager; + } + public virtual async Task ConvertAsync(List incomingFromExternalList) + { + if (!incomingFromExternalList.Any()) + { + _logger.LogInformation("无开账数据转换"); + return; + } + var incomingToWmsDataList = await BuildIncomingToWmsOfPurchaseOrderAsync(incomingFromExternalList).ConfigureAwait(false); + await _incomingToWmsManager.CreateBulkAsync(incomingToWmsDataList).ConfigureAwait(false); + //归档 + await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); + + } + private async Task> BuildIncomingToWmsOfPurchaseOrderAsync(List incomingDataList) + { + await Task.CompletedTask.ConfigureAwait(false); + var incomingToWmsList = new List(); + var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode); + foreach (var group in groups) + { + var first = group.First(); + var incomingToWms = new IncomingToWms() + { + DataType = first.DataType, + DataAction = first.DataAction, + SourceSystem = first.SourceSystem, + DataIdentityCode = first.SourceDataGroupCode, + }; + incomingToWms.SetId(_guidGenerator.Create()); + incomingToWms.SetEffectiveDate(first.EffectiveDate); + var exchangeErpLocationItem = JsonSerializer.Deserialize(first.DestinationDataContent); + var wmsErpLocationItem = _objectMapper.Map(exchangeErpLocationItem); + incomingToWms.DataContent = JsonSerializer.Serialize(wmsErpLocationItem); + incomingToWmsList.Add(incomingToWms); + } + return incomingToWmsList; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs new file mode 100644 index 000000000..d7f692439 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationItemReader.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; +using Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; + +public class ErpLocationItemReader : IReader +{ + private readonly IErpLocationItemManager _ilocdoutManager; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IConfiguration _configuration; + public ErpLocationItemReader( + IErpLocationItemManager ilocdoutManager + , IIncomingFromExternalManager incomingFromExternalManager + , IGuidGenerator guidGenerator + , ILogger logger + , IConfiguration configuration + ) + { + _guidGenerator = guidGenerator; + _configuration = configuration; + _ilocdoutManager = ilocdoutManager; + _incomingFromExternalManager = incomingFromExternalManager; + _logger = logger; + } + + public virtual async Task> ReadAsync() + { + //从Tyrp读取待处理locdout + var toBeProcessedIssue = await _ilocdoutManager.GetToBeProcessedListAsync().ConfigureAwait(false); + if (!toBeProcessedIssue.Any()) + { + _logger.LogInformation("未读到EOS开账数据"); + return new List(); + } + //locdout逐一转换为locdout + var incomingDataList = BuildIncomingFromExternalFromBomAsync(toBeProcessedIssue); + await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false); + return incomingDataList; + } + private List BuildIncomingFromExternalFromBomAsync(List toBeProcessedIssue) + { + var incomingDataList = new List(); + foreach (var locdout in toBeProcessedIssue) + { + var incomingData = BuildIncomingFromExternal(locdout); + + incomingData.SetEffectiveDate(DateTime.Now); + + try + { + var bm = BuildScrapNoteOrderExchangeMes(locdout); + incomingData.DestinationDataContent = JsonSerializer.Serialize(bm); + incomingData.SetId(_guidGenerator.Create()); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + + incomingDataList.Add(incomingData); + + } + return incomingDataList; + } + private IncomingFromExternal BuildIncomingFromExternal(locdout locdout) + { + var incomingData = new IncomingFromExternal() + { + + DataType = EnumIncomingDataType.ErpLocationItem.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.ERP.ToString(), + SourceDataId = locdout.locdout_loc, + SourceDataGroupCode = locdout.locdout_loc, + SourceDataDetailCode = locdout.locdout_part, + SourceDataContent = JsonSerializer.Serialize(locdout), + WriteTime = DateTime.Now, + Writer = nameof(TyrpIncomingBackgroundWorker), + DestinationSystem = EnumSystemType.ERP.ToString(), + }; + return incomingData; + } + + private static ErpLocationItemExchangeDto BuildScrapNoteOrderExchangeMes(locdout locdout) + { + + var cust = new ErpLocationItemExchangeDto() + { + ErpLocationCode = locdout.locdout_loc, + ItemCode = locdout.locdout_part, + }; + + return cust; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs index 2578ee3a5..667e4a282 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/TyrpIncomingBackgroundWorker.cs @@ -127,6 +127,15 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase //转换Customer await CustomerConverter.ConvertAsync(customersFromExternalList).ConfigureAwait(false); + Logger.LogInformation($"Read ErpLocationItem");//储位与零件对应关系(开账) + var ErpLocationItemReader = workerContext.ServiceProvider.GetRequiredService(); + var ErpLocationItemConverter = workerContext.ServiceProvider.GetRequiredService(); + //读取并保存ErpLocationItem + var erpLocationItemFromExternalList = await ErpLocationItemReader.ReadAsync().ConfigureAwait(false); + //转换ErpLocationItem + await ErpLocationItemConverter.ConvertAsync(erpLocationItemFromExternalList).ConfigureAwait(false); + + Logger.LogInformation($"Read PurchasePrice");//采购价格 var PurchasePriceReader = workerContext.ServiceProvider.GetRequiredService(); var PurchasePriceConverter = workerContext.ServiceProvider.GetRequiredService(); diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs index 9e2224360..3b181f817 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs @@ -82,6 +82,12 @@ public static class IncomingToWmsExtensions public static void thead() { + } + public static async Task HandleErpLocationItemsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) + { + //var erpLocationItem = JsonSerializer.Deserialize(incomingConverted.DataContent); + //var erpLocationItemAppService = workerContext.ServiceProvider.GetRequiredService(); + //await erpLocationItemAppService.UpsertAsync(erpLocationItem).ConfigureAwait(false); } public static async Task HandleErpLocationsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) { diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs index 90c557025..4120b94f6 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs @@ -123,6 +123,9 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase case EnumIncomingDataType.ErpLocation: await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false); break; + case EnumIncomingDataType.ErpLocationItem: + await incomingToWms.HandleErpLocationItemsAsync(workerContext).ConfigureAwait(false); + break; case EnumIncomingDataType.Bom: await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false); break; diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocationItem/ErpLocationItem.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocationItem/ErpLocationItem.cs new file mode 100644 index 000000000..79115255e --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocationItem/ErpLocationItem.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.ErpLocationItem; +public class ErpLocationItemExchangeDto +{ + /// + /// 储位代码 + /// + + [Display(Name = "储位代码")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ErpLocationCode { get; set; } + + /// + /// 物品代码 + /// + [Display(Name = "物品代码")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml index fdd8322ca..57f53ce60 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml @@ -596,6 +596,16 @@ 字典项描述 + + + 储位代码 + + + + + 物品代码 + + 是否可用 diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs index 96c6c26f0..4042cb1de 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs @@ -110,4 +110,8 @@ public enum EnumIncomingDataType /// 标准成本价格 /// StdCostPrice=26, + /// + /// Erp库位零件(开账) + /// + ErpLocationItem = 27, } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs new file mode 100644 index 000000000..84af09533 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Basedata.Domain.Shared; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Basedata.Application.Contracts; +public class ErpLocationItemEditInput : SfsBaseDataCreateOrUpdateInputBase +{ + /// + /// 储位代码 + /// + [Display(Name = "储位代码")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ErpLoactionCode { get; set; } + + /// + /// 物料代码 + /// + [Display(Name = "物料代码")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj index 84d9de372..0cb41fd37 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj @@ -25,4 +25,8 @@ + + + +