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 237e0dcf6..93c8a6cae 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 @@ -11,6 +11,8 @@ 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.Products; +using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices; +using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.SalePrices; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Venders; namespace Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp; @@ -45,5 +47,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/PurchasePrices/PurchasePriceLinq2DbRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/PurchasePrices/PurchasePriceLinq2DbRepository.cs new file mode 100644 index 000000000..798d16e4c --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/PurchasePrices/PurchasePriceLinq2DbRepository.cs @@ -0,0 +1,14 @@ +using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp; +using Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp.Bases; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; + +namespace Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices; +public class PurchasePriceLinq2DbRepository : + Linq2DbCrudRepository, + IPurchasePriceLinq2DbRepository +{ + public PurchasePriceLinq2DbRepository(TyrpDb tyrpDb) : base(tyrpDb) + { + + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/SalePrices/SalePriceLinq2DbRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/SalePrices/SalePriceLinq2DbRepository.cs new file mode 100644 index 000000000..3592a4604 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/SalePrices/SalePriceLinq2DbRepository.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +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.SalePrices; + +public class SalePriceLinq2DbRepository : + Linq2DbCrudRepository, + ISalePriceLinq2DbRepository +{ + public SalePriceLinq2DbRepository(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 cd66f0a1e..e59acea0b 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 @@ -18,6 +18,8 @@ public class TyrpDb : DataConnection, ITransientDependency public ITable Supplier => this.GetTable(); public ITable Dictpj => this.GetTable(); public ITable Customer => this.GetTable(); + public ITable PurchasePrice => this.GetTable(); + public ITable SalePrice => this.GetTable(); public ITable Backflu => this.GetTable(); public ITable mes_product => this.GetTable(); diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/IPurchasePriceLinq2DbRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/IPurchasePriceLinq2DbRepository.cs new file mode 100644 index 000000000..288cd4216 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/IPurchasePriceLinq2DbRepository.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public interface IPurchasePriceLinq2DbRepository : ILinq2DbRepository +{ +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/IPurchasePriceManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/IPurchasePriceManager.cs new file mode 100644 index 000000000..bb8d17af9 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/IPurchasePriceManager.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public interface IPurchasePriceManager +{ + Task> GetToBeProcessedListAsync(); +} \ No newline at end of file diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/PurchasePriceManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/PurchasePriceManager.cs new file mode 100644 index 000000000..9ffff750c --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/PurchasePriceManager.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public class PurchasePriceManager : DomainService, IPurchasePriceManager +{ + private readonly IPurchasePriceLinq2DbRepository _repository; + public PurchasePriceManager(IPurchasePriceLinq2DbRepository repository) + { + _repository = repository; + } + + public async Task> GetToBeProcessedListAsync() + { + var purchaseprice = await _repository.GetListAsync().ConfigureAwait(false); + return purchaseprice.ToList(); + } +} + diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/ismout.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/ismout.cs new file mode 100644 index 000000000..3c070a6f9 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/PurchasePrices/ismout.cs @@ -0,0 +1,33 @@ +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 ismout : Entity +{ + /// + /// 物料代码 + /// + public string ismout_part { get; set; } + + /// + /// 供应商代码 + /// + public string ismout_vend { get; set; } + + /// + /// 采购价格 + /// + public decimal ismout_price { get; set; } + + public override object[] GetKeys() + { + return new object[] { ismout_part, ismout_vend }; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/ISalePriceLinq2DbRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/ISalePriceLinq2DbRepository.cs new file mode 100644 index 000000000..d0872925b --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/ISalePriceLinq2DbRepository.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public interface ISalePriceLinq2DbRepository : ILinq2DbRepository +{ +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/ISalePriceManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/ISalePriceManager.cs new file mode 100644 index 000000000..7e7b877e5 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/ISalePriceManager.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +public interface ISalePriceManager +{ + Task> GetToBeProcessedListAsync(); +} \ No newline at end of file diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/SalePriceManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/SalePriceManager.cs new file mode 100644 index 000000000..b95ea2e22 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/SalePriceManager.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; + +public class SalePriceManager : DomainService, ISalePriceManager +{ + private readonly ISalePriceLinq2DbRepository _repository; + public SalePriceManager(ISalePriceLinq2DbRepository repository) + { + _repository = repository; + } + + public async Task> GetToBeProcessedListAsync() + { + var saleprice = await _repository.GetListAsync().ConfigureAwait(false); + return saleprice.ToList(); + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/spriceout.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/spriceout.cs new file mode 100644 index 000000000..d0bc15c7a --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/SalePrices/spriceout.cs @@ -0,0 +1,33 @@ +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 spriceout : Entity +{ + /// + /// 物料代码 + /// + public string spriceout_part { get; set; } + + /// + /// 客户代码 + /// + public string spriceout_cust { get; set; } + + /// + /// 销售价格 + /// + public decimal spriceout_price { get; set; } + + public override object[] GetKeys() + { + return new object[] { spriceout_part, spriceout_cust }; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/FawtygAutoMapperProfile.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/FawtygAutoMapperProfile.cs index 0e7b7064d..8cbc197bb 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/FawtygAutoMapperProfile.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/FawtygAutoMapperProfile.cs @@ -20,10 +20,13 @@ using Win_in.Sfs.Wms.DataExchange.WMS.ProductionReturnNote; using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; using Win_in.Sfs.Wms.DataExchange.WMS.ProductRecycleNote; using Win_in.Sfs.Wms.DataExchange.WMS.PurchaseOrder; +using Win_in.Sfs.Wms.DataExchange.WMS.PurchasePrice; using Win_in.Sfs.Wms.DataExchange.WMS.PurchaseReturn; using Win_in.Sfs.Wms.DataExchange.WMS.PutawayNote; using Win_in.Sfs.Wms.DataExchange.WMS.RecycledMaterialReceiptNote; +using Win_in.Sfs.Wms.DataExchange.WMS.SalePrice; using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote; +using Win_in.Sfs.Wms.DataExchange.WMS.StdCostPrice; using Win_in.Sfs.Wms.DataExchange.WMS.Supplier; using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; using Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote; @@ -107,6 +110,9 @@ public class FawtygAutoMapperProfile : Profile CreateMap(); CreateMap(); CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); CreateMap(); CreateMap(); diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/PurchasePriceConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/PurchasePriceConverter.cs new file mode 100644 index 000000000..90e8ebcf0 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/PurchasePriceConverter.cs @@ -0,0 +1,75 @@ +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.PurchasePrice; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; + +public class PurchasePriceConverter : IIncomingConverter +{ + private readonly IIncomingToWmsManager _incomingToWmsManager; + private readonly IObjectMapper _objectMapper; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + + public PurchasePriceConverter( + 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 exchangePurchasePrice = JsonSerializer.Deserialize(first.DestinationDataContent); + var wmsPurchasePrice = _objectMapper.Map(exchangePurchasePrice); + incomingToWms.DataContent = JsonSerializer.Serialize(wmsPurchasePrice); + incomingToWmsList.Add(incomingToWms); + } + return incomingToWmsList; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/PurchasePriceReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/PurchasePriceReader.cs new file mode 100644 index 000000000..b7f2a1305 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/PurchasePriceReader.cs @@ -0,0 +1,133 @@ +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.PurchasePrice; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; + +public class PurchasePriceReader : IReader +{ + private readonly IPurchasePriceManager _iPurchasePriceManager; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IConfiguration _configuration; + private readonly IPurchasePriceSheetAppService _purchasePriceAppService; + private readonly IObjectMapper _objectMapper; + public PurchasePriceReader( + IPurchasePriceManager iPurchasePriceManager + , IIncomingFromExternalManager incomingFromExternalManager + , IGuidGenerator guidGenerator + , ILogger logger + , IConfiguration configuration, + IPurchasePriceSheetAppService purchasePriceSheetAppService, + IObjectMapper objectMapper + ) + { + _guidGenerator = guidGenerator; + _configuration = configuration; + _iPurchasePriceManager = iPurchasePriceManager; + _incomingFromExternalManager = incomingFromExternalManager; + _logger = logger; + _purchasePriceAppService = purchasePriceSheetAppService; + _objectMapper = objectMapper; + } + + public virtual async Task> ReadAsync() + { + //从Tyrp读取待处理PurchasePrice + var toBeProcessedPurchasePrices = await _iPurchasePriceManager.GetToBeProcessedListAsync().ConfigureAwait(false); + if (!toBeProcessedPurchasePrices.Any()) + { + _logger.LogInformation("no PurchasePrices"); + return new List(); + } + //获取wms采购单价数据 + SfsBaseDataRequestInputBase input = new SfsBaseDataRequestInputBase(); + var wmsPurchasePrices = await _purchasePriceAppService.GetAllListByFilterAsync(input).ConfigureAwait(false); + var wmsToPurchasePriceExchangeDtos = _objectMapper.Map, List>(wmsPurchasePrices); + List eosToBomExchangeDtos = new List(); + foreach (var toBeProcessedPurchasePrice in toBeProcessedPurchasePrices) + { + var purchasePrice = BuildScrapNoteOrderExchangeMes(toBeProcessedPurchasePrice); + eosToBomExchangeDtos.Add(purchasePrice); + } + //和wms和eos数据进行比较,获取需要处理得数据 + var updateDatas = eosToBomExchangeDtos.Except(wmsToPurchasePriceExchangeDtos).ToList(); + if (!updateDatas.Any()) + { + _logger.LogInformation("no PurchasePrices"); + return new List(); + } + //PurchasePrice逐一转换为PurchasePrice + var incomingDataList = BuildIncomingFromExternalFromBomAsync(updateDatas, toBeProcessedPurchasePrices); + await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false); + return incomingDataList; + } + private List BuildIncomingFromExternalFromBomAsync(List updateDatas,List toBeProcessedPurchasePrices) + { + var incomingDataList = new List(); + foreach (var data in updateDatas) + { + var item = toBeProcessedPurchasePrices.FirstOrDefault(r => r.ismout_part == data.ItemCode && r.ismout_vend == data.SupplierCode); + var incomingData = BuildIncomingFromExternal(item); + + incomingData.SetEffectiveDate(DateTime.Now); + + try + { + incomingData.DestinationDataContent = JsonSerializer.Serialize(data); + incomingData.SetId(_guidGenerator.Create()); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + + incomingDataList.Add(incomingData); + + } + return incomingDataList; + } + private IncomingFromExternal BuildIncomingFromExternal(ismout PurchasePrice) + { + var incomingData = new IncomingFromExternal() + { + + DataType = EnumIncomingDataType.PurchasePrice.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.ERP.ToString(), + SourceDataId = PurchasePrice.ismout_part, + SourceDataGroupCode = PurchasePrice.ismout_part, + SourceDataDetailCode = PurchasePrice.ismout_vend, + SourceDataContent = JsonSerializer.Serialize(PurchasePrice), + WriteTime = DateTime.Now, + Writer = nameof(TyrpIncomingBackgroundWorker), + DestinationSystem = EnumSystemType.ERP.ToString(), + }; + return incomingData; + } + + private static PurchasePriceExchangeDto BuildScrapNoteOrderExchangeMes(ismout PurchasePrice) + { + + var price = new PurchasePriceExchangeDto() + { + ItemCode = PurchasePrice.ismout_part, + SupplierCode = PurchasePrice.ismout_vend, + PurchasePrice = PurchasePrice.ismout_price, + Description = "接口同步", + }; + return price; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/SalePriceConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/SalePriceConverter.cs new file mode 100644 index 000000000..9c85f08ce --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/SalePriceConverter.cs @@ -0,0 +1,74 @@ +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.SalePrice; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; +public class SalePriceConverter : IIncomingConverter +{ + private readonly IIncomingToWmsManager _incomingToWmsManager; + private readonly IObjectMapper _objectMapper; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + + public SalePriceConverter( + 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 exchangeSalePrice = JsonSerializer.Deserialize(first.DestinationDataContent); + var wmsSalePrice = _objectMapper.Map(exchangeSalePrice); + incomingToWms.DataContent = JsonSerializer.Serialize(wmsSalePrice); + incomingToWmsList.Add(incomingToWms); + } + return incomingToWmsList; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/SalePriceReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/SalePriceReader.cs new file mode 100644 index 000000000..e44190ea5 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/SalePriceReader.cs @@ -0,0 +1,132 @@ +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.SalePrice; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; +public class SalePriceReader : IReader +{ + private readonly ISalePriceManager _iSalePriceManager; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IConfiguration _configuration; + private readonly ISalePriceSheetAppService _SalePriceAppService; + private readonly IObjectMapper _objectMapper; + public SalePriceReader( + ISalePriceManager iSalePriceManager + , IIncomingFromExternalManager incomingFromExternalManager + , IGuidGenerator guidGenerator + , ILogger logger + , IConfiguration configuration, + ISalePriceSheetAppService SalePriceSheetAppService, + IObjectMapper objectMapper + ) + { + _guidGenerator = guidGenerator; + _configuration = configuration; + _iSalePriceManager = iSalePriceManager; + _incomingFromExternalManager = incomingFromExternalManager; + _logger = logger; + _SalePriceAppService = SalePriceSheetAppService; + _objectMapper = objectMapper; + } + + public virtual async Task> ReadAsync() + { + //从Tyrp读取待处理SalePrice + var toBeProcessedSalePrices = await _iSalePriceManager.GetToBeProcessedListAsync().ConfigureAwait(false); + if (!toBeProcessedSalePrices.Any()) + { + _logger.LogInformation("no SalePrices"); + return new List(); + } + //获取wms销售单价数据 + SfsBaseDataRequestInputBase input = new SfsBaseDataRequestInputBase(); + var wmsSalePrices = await _SalePriceAppService.GetAllListByFilterAsync(input).ConfigureAwait(false); + var wmsToSalePriceExchangeDtos = _objectMapper.Map, List>(wmsSalePrices); + List eosToBomExchangeDtos = new List(); + foreach (var toBeProcessedSalePrice in toBeProcessedSalePrices) + { + var SalePrice = BuildScrapNoteOrderExchangeMes(toBeProcessedSalePrice); + eosToBomExchangeDtos.Add(SalePrice); + } + //和wms和eos数据进行比较,获取需要处理得数据 + var updateDatas = eosToBomExchangeDtos.Except(wmsToSalePriceExchangeDtos).ToList(); + if (!updateDatas.Any()) + { + _logger.LogInformation("no SalePrices"); + return new List(); + } + //SalePrice逐一转换为SalePrice + var incomingDataList = BuildIncomingFromExternalFromBomAsync(updateDatas, toBeProcessedSalePrices); + await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false); + return incomingDataList; + } + private List BuildIncomingFromExternalFromBomAsync(List updateDatas, List toBeProcessedSalePrices) + { + var incomingDataList = new List(); + foreach (var data in updateDatas) + { + var item = toBeProcessedSalePrices.FirstOrDefault(r => r.spriceout_part == data.ItemCode && r.spriceout_cust == data.CustomerCode); + var incomingData = BuildIncomingFromExternal(item); + + incomingData.SetEffectiveDate(DateTime.Now); + + try + { + incomingData.DestinationDataContent = JsonSerializer.Serialize(data); + incomingData.SetId(_guidGenerator.Create()); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + + incomingDataList.Add(incomingData); + + } + return incomingDataList; + } + private IncomingFromExternal BuildIncomingFromExternal(spriceout SalePrice) + { + var incomingData = new IncomingFromExternal() + { + + DataType = EnumIncomingDataType.SalePrice.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.ERP.ToString(), + SourceDataId = SalePrice.spriceout_part, + SourceDataGroupCode = SalePrice.spriceout_part, + SourceDataDetailCode = SalePrice.spriceout_cust, + SourceDataContent = JsonSerializer.Serialize(SalePrice), + WriteTime = DateTime.Now, + Writer = nameof(TyrpIncomingBackgroundWorker), + DestinationSystem = EnumSystemType.ERP.ToString(), + }; + return incomingData; + } + + private static SalePriceExchangeDto BuildScrapNoteOrderExchangeMes(spriceout SalePrice) + { + + var price = new SalePriceExchangeDto() + { + ItemCode = SalePrice.spriceout_part, + CustomerCode = SalePrice.spriceout_cust, + SalePrice = SalePrice.spriceout_price, + Description = "接口同步", + }; + return price; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/StdCostPriceConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/StdCostPriceConverter.cs new file mode 100644 index 000000000..881c3c830 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/StdCostPriceConverter.cs @@ -0,0 +1,75 @@ +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.StdCostPrice; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; + +public class StdCostPriceConverter : IIncomingConverter +{ + private readonly IIncomingToWmsManager _incomingToWmsManager; + private readonly IObjectMapper _objectMapper; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + + public StdCostPriceConverter( + 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 exchangeStdCostPrice = JsonSerializer.Deserialize(first.DestinationDataContent); + var wmsStdCostPrice = _objectMapper.Map(exchangeStdCostPrice); + incomingToWms.DataContent = JsonSerializer.Serialize(wmsStdCostPrice); + incomingToWmsList.Add(incomingToWms); + } + return incomingToWmsList; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/StdCostPriceReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/StdCostPriceReader.cs new file mode 100644 index 000000000..fe6a5dafb --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/StdCostPriceReader.cs @@ -0,0 +1,131 @@ +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.StdCostPrice; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; +public class StdCostPriceReader : IReader +{ + private readonly IProductManager _productManager; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly ILogger _logger; + private readonly IGuidGenerator _guidGenerator; + private readonly IConfiguration _configuration; + private readonly IStdCostPriceSheetAppService _StdCostPriceAppService; + private readonly IObjectMapper _objectMapper; + public StdCostPriceReader( + IProductManager productManager + , IIncomingFromExternalManager incomingFromExternalManager + , IGuidGenerator guidGenerator + , ILogger logger + , IConfiguration configuration, + IStdCostPriceSheetAppService StdCostPriceSheetAppService, + IObjectMapper objectMapper + ) + { + _guidGenerator = guidGenerator; + _configuration = configuration; + _productManager = productManager; + _incomingFromExternalManager = incomingFromExternalManager; + _logger = logger; + _StdCostPriceAppService = StdCostPriceSheetAppService; + _objectMapper = objectMapper; + } + + public virtual async Task> ReadAsync() + { + //从ERP读取待处理part + var toBeProcessedProducts = await _productManager.GetToBeProcessedListAsync().ConfigureAwait(false); + if (!toBeProcessedProducts.Any()) + { + _logger.LogInformation("no StdCostPrices"); + return new List(); + } + //获取wms标准成本单价数据 + SfsBaseDataRequestInputBase input = new SfsBaseDataRequestInputBase(); + var wmsStdCostPrices = await _StdCostPriceAppService.GetAllListByFilterAsync(input).ConfigureAwait(false); + var wmsToStdCostPriceExchangeDtos = _objectMapper.Map, List>(wmsStdCostPrices); + List eosToBomExchangeDtos = new List(); + foreach (var toBeProcessedProduct in toBeProcessedProducts) + { + var StdCostPrice = BuildScrapNoteOrderExchangeMes(toBeProcessedProduct); + eosToBomExchangeDtos.Add(StdCostPrice); + } + //和wms和eos数据进行比较,获取需要处理得数据 + var updateDatas = eosToBomExchangeDtos.Except(wmsToStdCostPriceExchangeDtos).ToList(); + if (!updateDatas.Any()) + { + _logger.LogInformation("no StdCostPrices"); + return new List(); + } + //StdCostPrice逐一转换为StdCostPrice + var incomingDataList = BuildIncomingFromExternalFromBomAsync(updateDatas, toBeProcessedProducts); + await _incomingFromExternalManager.CreateBulkAsync(incomingDataList).ConfigureAwait(false); + return incomingDataList; + } + private List BuildIncomingFromExternalFromBomAsync(List updateDatas, List toBeProcessedProducts) + { + var incomingDataList = new List(); + foreach (var data in updateDatas) + { + var item = toBeProcessedProducts.FirstOrDefault(r => r.mes_product_part == data.ItemCode); + var incomingData = BuildIncomingFromExternal(item); + + incomingData.SetEffectiveDate(DateTime.Now); + + try + { + incomingData.DestinationDataContent = JsonSerializer.Serialize(data); + incomingData.SetId(_guidGenerator.Create()); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + + incomingDataList.Add(incomingData); + + } + return incomingDataList; + } + private IncomingFromExternal BuildIncomingFromExternal(mes_product product) + { + var incomingData = new IncomingFromExternal() + { + + DataType = EnumIncomingDataType.StdCostPrice.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.ERP.ToString(), + SourceDataId = product.mes_product_part_ser.ToString(), + SourceDataGroupCode = product.mes_product_part, + SourceDataDetailCode = product.mes_product_part, + SourceDataContent = JsonSerializer.Serialize(product), + WriteTime = DateTime.Now, + Writer = nameof(TyrpIncomingBackgroundWorker), + DestinationSystem = EnumSystemType.ERP.ToString(), + }; + return incomingData; + } + + private static StdCostPriceExchangeDto BuildScrapNoteOrderExchangeMes(mes_product product) + { + + var price = new StdCostPriceExchangeDto() + { + ItemCode = product.mes_product_part, + StdCostPrice = product.mes_product_price_std, + Description = "接口同步", + }; + return price; + } +} 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 81dc7c649..2578ee3a5 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 @@ -126,6 +126,30 @@ public class TyrpIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase var customersFromExternalList = await CustomerReader.ReadAsync().ConfigureAwait(false); //转换Customer await CustomerConverter.ConvertAsync(customersFromExternalList).ConfigureAwait(false); + + Logger.LogInformation($"Read PurchasePrice");//采购价格 + var PurchasePriceReader = workerContext.ServiceProvider.GetRequiredService(); + var PurchasePriceConverter = workerContext.ServiceProvider.GetRequiredService(); + //读取并保存PurchasePrice + var purchasePriceFromExternalList = await PurchasePriceReader.ReadAsync().ConfigureAwait(false); + //转换PurchasePrice + await PurchasePriceConverter.ConvertAsync(purchasePriceFromExternalList).ConfigureAwait(false); + + Logger.LogInformation($"Read SalePrice");//销售价格 + var SalePriceReader = workerContext.ServiceProvider.GetRequiredService(); + var SalePriceConverter = workerContext.ServiceProvider.GetRequiredService(); + //读取并保存SalePrice + var salePriceFromExternalList = await SalePriceReader.ReadAsync().ConfigureAwait(false); + //转换SalePrice + await SalePriceConverter.ConvertAsync(salePriceFromExternalList).ConfigureAwait(false); + + Logger.LogInformation($"Read StdCostPrice");//标准成本价格 + var StdCostPriceReader = workerContext.ServiceProvider.GetRequiredService(); + var StdCostPriceConverter = workerContext.ServiceProvider.GetRequiredService(); + //读取并保存StdCostPrice + var stdCostPriceFromExternalList = await StdCostPriceReader.ReadAsync().ConfigureAwait(false); + //转换StdCostPrice + await StdCostPriceConverter.ConvertAsync(stdCostPriceFromExternalList).ConfigureAwait(false); } else { diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/DeliverNoteConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/DeliverNoteConverter.cs index 7cc307439..a8d5409e5 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/DeliverNoteConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/DeliverNoteConverter.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text.Json; using System.Threading.Tasks; 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; @@ -19,16 +20,19 @@ public class DeliverNoteConverter : IOutgoingConverter private readonly IOutgoingToExternalManager _outgoingToExternalManager; // private readonly IUserDepartmentAppService _departmentAppService; private readonly IObjectMapper _objectMapper; + private readonly ISalePriceSheetAppService _salePriceSheetAppService; public DeliverNoteConverter( IOutgoingFromWmsManager outgoingFromWmsManager , IOutgoingToExternalManager outgoingToExternalManager - , IObjectMapper objectMapper + , IObjectMapper objectMapper, + ISalePriceSheetAppService salePriceSheetAppService ) { _outgoingFromWmsManager = outgoingFromWmsManager; _outgoingToExternalManager = outgoingToExternalManager; _objectMapper = objectMapper; + _salePriceSheetAppService = salePriceSheetAppService; } /// @@ -40,38 +44,22 @@ public class DeliverNoteConverter : IOutgoingConverter var outgoingToExternalList = new List(); //获取要同步得数据 var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Deliver, EnumSystemType.ERP).ConfigureAwait(false); + List outgoingFromWmsToTyrp = new List();//待传列表 foreach (var outgoingFromWms in outgoingFromWmsList) { - string tyrpNumber = outgoingFromWms.TyrpNumber; - #region 主表 + bool flag = true;//用于标注是否同步,如果没有销售价格不同步 + string tyrpNumber = outgoingFromWms.TyrpNumber; var wmsReceipt = JsonSerializer.Deserialize(outgoingFromWms.DataContent); - var exchangeReceipt = _objectMapper.Map(wmsReceipt); - var purchaseOrder = BuildDataInterface(exchangeReceipt, tyrpNumber); - var outgoingToExternal = new OutgoingToExternal() - { - DataType = EnumOutgoingDataType.Deliver.ToString(), - TableType = EnumExchangeTableType.MainTable, - DataAction = outgoingFromWms.DataAction, - SerialNumber=tyrpNumber, - SourceSystem = EnumSystemType.WMS.ToString(), - SourceDataId = wmsReceipt.Id.ToString(), - SourceDataGroupCode = wmsReceipt.Number, - SourceDataDetailCode = wmsReceipt.Number, - Writer = nameof(TyrpOutgoingBackgroundWorker), - DestinationSystem = EnumSystemType.ERP.ToString(), - DestinationDataId = "", - }; - outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); - outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt); - outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(purchaseOrder); - outgoingToExternalList.Add(outgoingToExternal); - #endregion - #region 明细 - var WipDetails = wmsReceipt.Details.GroupBy(r=>new { r.Number,r.ItemCode,r.FromLocationErpCode}).Select(p => new DeliverNoteDetailExchangeDto { Qty = p.Sum(itm => itm.Qty), Number = p.Key.Number, ItemCode = p.Key.ItemCode, FromLocationErpCode = p.Key.FromLocationErpCode }); - + var WipDetails = wmsReceipt.Details.GroupBy(r => new { r.Number, r.ItemCode, r.FromLocationErpCode }).Select(p => new DeliverNoteDetailExchangeDto { Qty = p.Sum(itm => itm.Qty), Number = p.Key.Number, ItemCode = p.Key.ItemCode, FromLocationErpCode = p.Key.FromLocationErpCode }); foreach (var detail in WipDetails) { + var item= _salePriceSheetAppService.GetByItemCodeAndCustomerCode(detail.ItemCode, wmsReceipt.CustomerCode); + if (item==null) + { + flag = false; + continue; + } var outgoingDetailToExternal = new OutgoingToExternal() { DataType = EnumOutgoingDataType.Deliver.ToString(), @@ -93,11 +81,38 @@ public class DeliverNoteConverter : IOutgoingConverter outgoingToExternalList.Add(outgoingDetailToExternal); } #endregion + #region 主表 + if (flag) + { + var exchangeReceipt = _objectMapper.Map(wmsReceipt); + var purchaseOrder = BuildDataInterface(exchangeReceipt, tyrpNumber); + var outgoingToExternal = new OutgoingToExternal() + { + DataType = EnumOutgoingDataType.Deliver.ToString(), + TableType = EnumExchangeTableType.MainTable, + DataAction = outgoingFromWms.DataAction, + SerialNumber = tyrpNumber, + SourceSystem = EnumSystemType.WMS.ToString(), + SourceDataId = wmsReceipt.Id.ToString(), + SourceDataGroupCode = wmsReceipt.Number, + SourceDataDetailCode = wmsReceipt.Number, + Writer = nameof(TyrpOutgoingBackgroundWorker), + DestinationSystem = EnumSystemType.ERP.ToString(), + DestinationDataId = "", + }; + outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); + outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt); + outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(purchaseOrder); + outgoingToExternalList.Add(outgoingToExternal); + outgoingFromWmsToTyrp.Add(outgoingFromWms);//加入到待传列表 + } + #endregion + } //插入到中间表OutgoingToExternal await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false); //将outgoingFromWms数据归档 - await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false); + await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsToTyrp).ConfigureAwait(false); return outgoingToExternalList; } 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 df79d9221..9e2224360 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 @@ -126,7 +126,24 @@ public static class IncomingToWmsExtensions var customerAppService = workerContext.ServiceProvider.GetRequiredService(); await customerAppService.UpsertAsyncByInterface(customer).ConfigureAwait(false); } - + public static async Task HandlePurchasePricesAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) + { + var purchaseprice = JsonSerializer.Deserialize(incomingConverted.DataContent); + var purchasepriceAppService = workerContext.ServiceProvider.GetRequiredService(); + await purchasepriceAppService.UpsertAsyncByInterface(purchaseprice).ConfigureAwait(false); + } + public static async Task HandleSalePricesAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) + { + var saleprice = JsonSerializer.Deserialize(incomingConverted.DataContent); + var salepriceAppService = workerContext.ServiceProvider.GetRequiredService(); + await salepriceAppService.UpsertAsyncByInterface(saleprice).ConfigureAwait(false); + } + public static async Task HandleStdCostPricesAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) + { + var stdcostprice = JsonSerializer.Deserialize(incomingConverted.DataContent); + var stdcostpriceAppService = workerContext.ServiceProvider.GetRequiredService(); + await stdcostpriceAppService.UpsertAsyncByInterface(stdcostprice).ConfigureAwait(false); + } public static async Task HandleCustomerItemsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) { var customerItem = JsonSerializer.Deserialize(incomingConverted.DataContent); 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 f38446257..e152404a9 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 @@ -141,6 +141,15 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase case EnumIncomingDataType.Customer: await incomingToWms.HandleCustomersAsync(workerContext).ConfigureAwait(false); break; + case EnumIncomingDataType.PurchasePrice: + await incomingToWms.HandlePurchasePricesAsync(workerContext).ConfigureAwait(false); + break; + case EnumIncomingDataType.SalePrice: + await incomingToWms.HandleSalePricesAsync(workerContext).ConfigureAwait(false); + break; + case EnumIncomingDataType.StdCostPrice: + await incomingToWms.HandleStdCostPricesAsync(workerContext).ConfigureAwait(false); + break; case EnumIncomingDataType.CustomerItem: await incomingToWms.HandleCustomerItemsAsync(workerContext).ConfigureAwait(false); break; diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PurchasePrice/PurchasePriceExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PurchasePrice/PurchasePriceExchangeDto.cs new file mode 100644 index 000000000..423d484e2 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/PurchasePrice/PurchasePriceExchangeDto.cs @@ -0,0 +1,49 @@ +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Wms.DataExchange.WMS.Bom; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.PurchasePrice; +public class PurchasePriceExchangeDto +{ + /// + /// 物品代码 + /// + + [Display(Name = "物品代码")] + [Required] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } + + /// + /// 供应商编号 + /// + [Display(Name = "供应商编号")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string SupplierCode { get; set; } + + /// + /// 价格单描述 + /// + public string Description { get; set; } + + /// + /// 客户简称 + /// + public decimal PurchasePrice { get; set; } + + public override bool Equals(object obj) + { + if (obj is PurchasePriceExchangeDto) + { + PurchasePriceExchangeDto purchaseprice = obj as PurchasePriceExchangeDto; + return ItemCode == purchaseprice.ItemCode && SupplierCode == purchaseprice.SupplierCode && PurchasePrice == purchaseprice.PurchasePrice; + } + return false; + } + public override int GetHashCode() + { + return ItemCode.GetHashCode() ^ SupplierCode.GetHashCode() ^ PurchasePrice.GetHashCode(); + } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/SalePrice/SalePriceExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/SalePrice/SalePriceExchangeDto.cs new file mode 100644 index 000000000..b422a5408 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/SalePrice/SalePriceExchangeDto.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using IdentityServer4.Models; +using System.Xml.Linq; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.SalePrice; + +public class SalePriceExchangeDto +{ + /// + /// 物品代码 + /// + + [Display(Name = "物品代码")] + [Required] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } + + /// + /// 客户编号 + /// + [Display(Name = "客户编号")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string CustomerCode { get; set; } + + /// + /// 价格单描述 + /// + public string Description { get; set; } + + /// + /// 销售价格 + /// + public decimal SalePrice { get; set; } + + public override bool Equals(object obj) + { + if (obj is SalePriceExchangeDto) + { + SalePriceExchangeDto saleprice = obj as SalePriceExchangeDto; + return ItemCode == saleprice.ItemCode && CustomerCode == saleprice.CustomerCode && SalePrice == saleprice.SalePrice; + } + return false; + } + public override int GetHashCode() + { + return ItemCode.GetHashCode() ^ CustomerCode.GetHashCode() ^ SalePrice.GetHashCode(); + } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/StdCostPrice/StdCostPriceExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/StdCostPrice/StdCostPriceExchangeDto.cs new file mode 100644 index 000000000..72024e249 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/StdCostPrice/StdCostPriceExchangeDto.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using IdentityServer4.Models; +using System.Xml.Linq; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.StdCostPrice; +public class StdCostPriceExchangeDto +{ + /// + /// 物品代码 + /// + + [Display(Name = "物品代码")] + [Required] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } + /// + /// 价格单描述 + /// + public string Description { get; set; } + + /// + /// 标准成本价 + /// + public decimal StdCostPrice { get; set; } + + public override bool Equals(object obj) + { + if (obj is StdCostPriceExchangeDto) + { + StdCostPriceExchangeDto scp = obj as StdCostPriceExchangeDto; + return ItemCode == scp.ItemCode && StdCostPrice == scp.StdCostPrice; + } + return false; + } + public override int GetHashCode() + { + return ItemCode.GetHashCode() ^ StdCostPrice.GetHashCode(); + } +} 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 880561d6c..fdd8322ca 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 @@ -1026,6 +1026,26 @@ 明细 + + + 物品代码 + + + + + 供应商编号 + + + + + 价格单描述 + + + + + 客户简称 + + 库位组 @@ -1291,6 +1311,26 @@ 生效日期 + + + 物品代码 + + + + + 客户编号 + + + + + 价格单描述 + + + + + 销售价格 + + 目标箱码 @@ -1391,6 +1431,21 @@ 明细 + + + 物品代码 + + + + + 价格单描述 + + + + + 标准成本价 + + ASN单号 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 5d89c1c37..9f0e609e4 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 @@ -98,5 +98,17 @@ public enum EnumIncomingDataType /// 退货单 /// PurchaseReturn = 23, + /// + /// 采购价格 + /// + PurchasePrice=24, + /// + /// 销售价格 + /// + SalePrice = 25, + /// + /// 标准成本价格 + /// + StdCostPrice=26, } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs index 12919f44c..6dd5ec48e 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/IPurchasePriceSheetAppService.cs @@ -6,4 +6,5 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public interface IPurchasePriceSheetAppService : ISfsBaseDataAppServiceBase { Task GetByItemCodeAsync(string itemCode,string supplierCode); + Task UpsertAsyncByInterface(PurchasePriceSheetEditInput input); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetEditInput.cs index 2bb715174..946fe004f 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetEditInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetEditInput.cs @@ -10,49 +10,36 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public class PurchasePriceSheetEditInput : SfsBaseDataCreateOrUpdateInputBase { #region Base - /// - /// 价格单名称 - /// - [Display(Name = "价格单名称")] - [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Name { get; set; } - /// /// 价格单描述 /// [Display(Name = "价格单描述")] - [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")] public string Description { get; set; } + #endregion - /// - /// 货币ID - /// - [Display(Name = "货币Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid CurrencyId { get; set; } + #region Create /// - /// 是否可用 + /// 价格单编码 /// - [Display(Name = "是否可用")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] - public bool Enabled { get; set; } - #endregion + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } - #region Create /// - /// 代码 + /// 供应商编号 /// - [Display(Name = "代码")] + [Display(Name = "供应商编号")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Code { get; set; } + public string SupplierCode { get; set; } /// - /// 供应商ID + /// 采购价格 /// - [Display(Name = "供应商Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid SupplierId { get; set; } + [Display(Name = "采购价格")] + public decimal PurchasePrice { get; set; } + #endregion } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetImportInput.cs index 38ed8abab..3a4842ef7 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetImportInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PurchasePrices/Inputs/PurchasePriceSheetImportInput.cs @@ -13,51 +13,29 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public class PurchasePriceSheetImportInput : SfsBaseDataImportInputBase { - /// - /// 供应商ID - /// - - [Display(Name = "供应商Id")] - [Required(ErrorMessage = "{0}是必填项")] - - public Guid SupplierId { get; set; } - - /// - /// 供应商名称 - /// - [Display(Name = "供应商名称")] - public string SupplierName { get; set; } - /// /// 价格单编码 /// - [Display(Name = "代码")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Code { get; set; } + public string ItemCode { get; set; } /// - /// 价格单名称 + /// 供应商编号 /// - [Display(Name = "价格单名称")] - public string Name { get; set; } - + [Display(Name = "供应商编号")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string SupplierCode { get; set; } /// /// 价格单描述 /// [Display(Name = "价格单描述")] - public string Description { get; set; } - - /// - /// 货币ID - /// - [Display(Name = "货币Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid CurrencyId { get; set; } - + public string Description { get; set; } = "EXCLE导入"; /// - /// 货币名称 + /// 采购价格 /// - [Display(Name = "货币名称")] - public string CurrencyName { get; set; } + [Display(Name = "采购价格")] + public decimal PurchasePrice { get; set; } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/ISalePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/ISalePriceSheetAppService.cs index 09c869cd0..c146d6d00 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/ISalePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/ISalePriceSheetAppService.cs @@ -1,6 +1,9 @@ +using System.Threading.Tasks; + namespace Win_in.Sfs.Basedata.Application.Contracts; public interface ISalePriceSheetAppService : ISfsBaseDataAppServiceBase { - + Task GetByItemCodeAndCustomerCode(string itemCode, string customerCode); + Task UpsertAsyncByInterface(SalePriceSheetEditInput input); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetEditInput.cs index 04317c807..5bacb202e 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetEditInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetEditInput.cs @@ -10,12 +10,6 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public class SalePriceSheetEditInput : SfsBaseDataCreateOrUpdateInputBase { #region Base - /// - /// 价格单名称 - /// - [Display(Name = "价格单名称")] - [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Name { get; set; } /// /// 价格单描述 @@ -25,34 +19,25 @@ public class SalePriceSheetEditInput : SfsBaseDataCreateOrUpdateInputBase public string Description { get; set; } /// - /// 货币ID + /// 物料代码 /// - [Display(Name = "货币Id")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] - public Guid CurrencyId { get; set; } - - /// - /// 是否可用 - /// - [Display(Name = "是否可用")] - [Required(ErrorMessage = "{0}是必填项")] - public bool Enabled { get; set; } - #endregion + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } - #region Create /// - /// 代码 + /// 客户代码 /// - [Display(Name = "代码")] + [Display(Name = "客户代码")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Code { get; set; } + public string CustomerCode { get; set; } /// - /// 客户ID + /// 销售价格 /// - [Display(Name = "客户Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid CustomerId { get; set; } + [Display(Name = "销售价格")] + public decimal SalePrice { get; set; } #endregion } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetImportInput.cs index 17965badd..82dcadb6b 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetImportInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SalePrices/Inputs/SalePriceSheetImportInput.cs @@ -13,48 +13,31 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public class SalePriceSheetImportInput : SfsBaseDataImportInputBase { /// - /// 客户ID - /// - [Display(Name = "客户Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid CustomerId { get; set; } - - /// - /// 客户名称 - /// - [Display(Name = "客户名称")] - public string CustomerName { get; set; } - - /// - /// 价格单名称 + /// 价格单描述 /// - [Display(Name = "价格单名称")] - public string Name { get; set; } + [Display(Name = "价格单描述")] + [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string Description { get; set; } /// - /// 代码 + /// 物料代码 /// - [Display(Name = "代码")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Code { get; set; } - - /// - /// 价格单描述 - /// - [Display(Name = "价格单描述")] - public string Description { get; set; } + public string ItemCode { get; set; } /// - /// 货币ID + /// 客户代码 /// - [Display(Name = "货币Id")] + [Display(Name = "客户代码")] [Required(ErrorMessage = "{0}是必填项")] - public Guid CurrencyId { get; set; } + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string CustomerCode { get; set; } /// - /// 货币名称 + /// 销售价格 /// - [Display(Name = "货币名称")] - public string CurrencyName { get; set; } + [Display(Name = "销售价格")] + public decimal SalePrice { get; set; } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/IStdCostPriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/IStdCostPriceSheetAppService.cs index 882a246b6..5304021e9 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/IStdCostPriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/IStdCostPriceSheetAppService.cs @@ -1,5 +1,10 @@ +using System.Threading.Tasks; +using Win_in.Sfs.Basedata.Domain; + namespace Win_in.Sfs.Basedata.Application.Contracts; public interface IStdCostPriceSheetAppService : ISfsBaseDataAppServiceBase { + Task GetByItemCode(string itemCode); + Task UpsertAsyncByInterface(StdCostPriceSheetEditInput input); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetEditInput.cs index 3f8a460bb..8e6ff07ef 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetEditInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetEditInput.cs @@ -10,13 +10,6 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public class StdCostPriceSheetEditInput : SfsBaseDataCreateOrUpdateInputBase { #region Base - /// - /// 价格单名称 - /// - [Display(Name = "价格单名称")] - [Required(ErrorMessage = "{0}是必填项")] - [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Name { get; set; } /// /// 价格单描述 @@ -26,33 +19,19 @@ public class StdCostPriceSheetEditInput : SfsBaseDataCreateOrUpdateInputBase public string Description { get; set; } /// - /// 货币ID - /// - [Display(Name = "货币Id")] - public Guid CurrencyId { get; set; } - - /// - /// 是否可用 + /// 标准成本价格 /// - [Display(Name = "是否可用")] - [Required(ErrorMessage = "{0}是必填项")] - public bool Enabled { get; set; } + [Display(Name = "销售价格")] + public decimal StdCostPrice { get; set; } #endregion #region Create /// - /// 代码 + /// 物料代码 /// - [Display(Name = "代码")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Code { get; set; } - - /// - /// 供应商ID - /// - [Display(Name = "供应商Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid SupplierId { get; set; } + public string ItemCode { get; set; } #endregion } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetImportInput.cs index 6e4c33b6f..8538b47bb 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetImportInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/StdCostPrices/Inputs/StdCostPriceSheetImportInput.cs @@ -9,36 +9,6 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; /// public class StdCostPriceSheetImportInput : SfsBaseDataImportInputBase { - /// - /// 供应商Id - /// - [Display(Name = "供应商Id")] - [Required(ErrorMessage = "{0}是必填项")] - public Guid SupplierId { get; set; } - - /// - /// 供应商名称 - /// - [Display(Name = "供应商名称")] - [Required(ErrorMessage = "{0}是必填项")] - public string SupplierName { get; set; } - - /// - /// 价格单名称 - /// - [Display(Name = "价格单名称")] - [Required(ErrorMessage = "{0}是必填项")] - [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Name { get; set; } - - /// - /// 代码 - /// - [Display(Name = "代码")] - [Required(ErrorMessage = "{0}是必填项")] - [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string Code { get; set; } - /// /// 价格单描述 /// @@ -47,17 +17,17 @@ public class StdCostPriceSheetImportInput : SfsBaseDataImportInputBase public string Description { get; set; } /// - /// 货币Id + /// 标准成本价格 /// - [Display(Name = "货币Id")] - [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] - public Guid CurrencyId { get; set; } + [Display(Name = "销售价格")] + public decimal StdCostPrice { get; set; } /// - /// 货币名称 + /// 物料代码 /// - [Display(Name = "货币名称")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] - public string CurrencyName { get; set; } + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs index afdfae2a4..8f75e08fe 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PurchasePrices/PurchasePriceSheetAppService.cs @@ -13,10 +13,10 @@ namespace Win_in.Sfs.Basedata.Application; public class PurchasePriceSheetAppService : SfsBaseDataAppServiceBase, IPurchasePriceSheetAppService { - private readonly IPurchasePriceSheetRepository _purchasePriceSheetRepository; + private readonly IPurchasePriceSheetRepository _repository; public PurchasePriceSheetAppService(IPurchasePriceSheetRepository repository, IDistributedCache cache) : base(repository, cache) { - _purchasePriceSheetRepository= repository; + _repository = repository; base.CreatePolicyName = PurchasePriceSheetPermissions.Create; base.UpdatePolicyName = PurchasePriceSheetPermissions.Update; base.DeletePolicyName = PurchasePriceSheetPermissions.Delete; @@ -30,8 +30,15 @@ public class PurchasePriceSheetAppService : SfsBaseDataAppServiceBase GetByItemCodeAsync(string itemCode,string supplierCode) { - var entity = await _purchasePriceSheetRepository.FindAsync(p => p.ItemCode== itemCode&&p.SupplierCode== supplierCode).ConfigureAwait(false); + var entity = await _repository.FindAsync(p => p.ItemCode== itemCode&&p.SupplierCode== supplierCode).ConfigureAwait(false); var dto = ObjectMapper.Map(entity); return dto; } + [HttpPost("upsert-interface")] + + public virtual async Task UpsertAsyncByInterface(PurchasePriceSheetEditInput input) + { + var entity = ObjectMapper.Map(input); + await _repository.UpsertAsyncByInterface(entity).ConfigureAwait(false); + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SalePrices/SalePriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SalePrices/SalePriceSheetAppService.cs index 4ad4c1311..31662e574 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SalePrices/SalePriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SalePrices/SalePriceSheetAppService.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Caching; +using Volo.Abp.Domain.Entities; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain.Shared; @@ -12,12 +14,28 @@ namespace Win_in.Sfs.Basedata.Application; public class SalePriceSheetAppService : SfsBaseDataAppServiceBase, ISalePriceSheetAppService { - + private readonly ISalePriceSheetRepository _repository; public SalePriceSheetAppService(ISalePriceSheetRepository repository, IDistributedCache cache) : base(repository, cache) { base.CreatePolicyName = SalePriceSheetPermissions.Create; base.UpdatePolicyName = SalePriceSheetPermissions.Update; base.DeletePolicyName = SalePriceSheetPermissions.Delete; + _repository = repository; + } + + [HttpPost("upsert-interface")] + + public virtual async Task UpsertAsyncByInterface(SalePriceSheetEditInput input) + { + var entity = ObjectMapper.Map(input); + await _repository.UpsertAsyncByInterface(entity).ConfigureAwait(false); + } + [HttpPut("get-by-itemcode-and-customercode")] + public virtual async Task GetByItemCodeAndCustomerCode(string itemCode,string customerCode) + { + var entity = await _repository.GetAsync(p => p.ItemCode == itemCode&&p.CustomerCode== customerCode).ConfigureAwait(false); + var dto = ObjectMapper.Map(entity); + return dto; } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/StdCostPrices/StdCostPriceSheetAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/StdCostPrices/StdCostPriceSheetAppService.cs index 62900ef38..a676d326f 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/StdCostPrices/StdCostPriceSheetAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/StdCostPrices/StdCostPriceSheetAppService.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Caching; +using Volo.Abp.Domain.Entities; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain.Shared; @@ -12,7 +14,7 @@ namespace Win_in.Sfs.Basedata.Application; public class StdCostPriceSheetAppService : SfsBaseDataAppServiceBase, IStdCostPriceSheetAppService { - + private readonly IStdCostPriceSheetRepository _repository; public StdCostPriceSheetAppService(IStdCostPriceSheetRepository repository, IDistributedCache cache) : base(repository, cache) { @@ -20,4 +22,20 @@ public class StdCostPriceSheetAppService : SfsBaseDataAppServiceBase(input); + await _repository.UpsertAsyncByInterface(entity).ConfigureAwait(false); + } + + [HttpPut("get-by-itemcode")] + public virtual async Task GetByItemCode(string itemCode) + { + var entity = await _repository.GetAsync(p => p.ItemCode == itemCode).ConfigureAwait(false); + var dto = ObjectMapper.Map(entity); + return dto; + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PurchasePrices/IPurchasePriceSheetRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PurchasePrices/IPurchasePriceSheetRepository.cs index 743451d79..bdb0b1a88 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PurchasePrices/IPurchasePriceSheetRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PurchasePrices/IPurchasePriceSheetRepository.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; + namespace Win_in.Sfs.Basedata.Domain; public interface IPurchasePriceSheetRepository : ISfsBaseDataRepositoryBase { - + Task UpsertAsyncByInterface(PurchasePriceSheet entity); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SalePrices/ISalePriceSheetRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SalePrices/ISalePriceSheetRepository.cs index 65af320fa..e7414ece9 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SalePrices/ISalePriceSheetRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/SalePrices/ISalePriceSheetRepository.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; + namespace Win_in.Sfs.Basedata.Domain; public interface ISalePriceSheetRepository : ISfsBaseDataRepositoryBase { - + Task UpsertAsyncByInterface(SalePriceSheet entity); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/StdCostPrices/IStdCostPriceSheetRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/StdCostPrices/IStdCostPriceSheetRepository.cs index 00dbb4898..c03d20090 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/StdCostPrices/IStdCostPriceSheetRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/StdCostPrices/IStdCostPriceSheetRepository.cs @@ -1,5 +1,8 @@ +using System.Threading.Tasks; + namespace Win_in.Sfs.Basedata.Domain; public interface IStdCostPriceSheetRepository : ISfsBaseDataRepositoryBase { + Task UpsertAsyncByInterface(StdCostPriceSheet entity); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PurchasePrices/PurchasePriceSheetEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PurchasePrices/PurchasePriceSheetEfCoreRepository.cs index c6fd3ff7e..9e13ab91e 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PurchasePrices/PurchasePriceSheetEfCoreRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PurchasePrices/PurchasePriceSheetEfCoreRepository.cs @@ -1,3 +1,6 @@ +using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; +using System; using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Basedata.Domain; @@ -9,4 +12,20 @@ public class PurchasePriceSheetEfCoreRepository : SfsBaseDataEfCoreRepositoryBas { } + + public virtual async Task UpsertAsyncByInterface(PurchasePriceSheet entity) + { + var dbSet = await GetDbSetAsync().ConfigureAwait(false); + var exist = await dbSet.FirstOrDefaultAsync(p => p.ItemCode == entity.ItemCode&& p.SupplierCode == entity.SupplierCode).ConfigureAwait(false); + if (exist == null) + { + var insRet = await InsertAsync(entity).ConfigureAwait(false); + } + else + { + exist.PurchasePrice = entity.PurchasePrice; + exist.Description = entity.Description; + exist.LastModificationTime = DateTime.Now; + } + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/SalePrices/SalePriceSheetEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/SalePrices/SalePriceSheetEfCoreRepository.cs index bc667d6ab..2df8da08b 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/SalePrices/SalePriceSheetEfCoreRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/SalePrices/SalePriceSheetEfCoreRepository.cs @@ -1,3 +1,6 @@ +using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; +using System; using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Basedata.Domain; @@ -9,4 +12,19 @@ public class SalePriceSheetEfCoreRepository : SfsBaseDataEfCoreRepositoryBase p.ItemCode == entity.ItemCode && p.CustomerCode == entity.CustomerCode).ConfigureAwait(false); + if (exist == null) + { + var insRet = await InsertAsync(entity).ConfigureAwait(false); + } + else + { + exist.SalePrice = entity.SalePrice; + exist.Description = entity.Description; + exist.LastModificationTime = DateTime.Now; + } + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/StdCostPrices/StdCostPriceSheetEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/StdCostPrices/StdCostPriceSheetEfCoreRepository.cs index 16b2c7bca..968856d73 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/StdCostPrices/StdCostPriceSheetEfCoreRepository.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/StdCostPrices/StdCostPriceSheetEfCoreRepository.cs @@ -1,3 +1,6 @@ +using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; +using System; using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Basedata.Domain; @@ -8,4 +11,19 @@ public class StdCostPriceSheetEfCoreRepository : SfsBaseDataEfCoreRepositoryBase public StdCostPriceSheetEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } + public virtual async Task UpsertAsyncByInterface(StdCostPriceSheet entity) + { + var dbSet = await GetDbSetAsync().ConfigureAwait(false); + var exist = await dbSet.FirstOrDefaultAsync(p => p.ItemCode == entity.ItemCode).ConfigureAwait(false); + if (exist == null) + { + var insRet = await InsertAsync(entity).ConfigureAwait(false); + } + else + { + exist.StdCostPrice = entity.StdCostPrice; + exist.Description = entity.Description; + exist.LastModificationTime = DateTime.Now; + } + } } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceDTO.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceDTO.cs index 108026c59..bcbd6f810 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceDTO.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceDTO.cs @@ -212,5 +212,18 @@ public class BalanceDTO : SfsBasicDTOBase /// [Display(Name = "最后事务号")] public string LastTransNumber { get; set; } + /// + /// 标准成本单价 + /// + [Display(Name = "标准成本单价")] + public decimal StdCostPrice { get; set; } + /// + /// 标准成本价格 + /// + [Display(Name = "标准成本价格")] + public decimal StdCost + { + get { return StdCostPrice *Qty; } + } } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs index 57c5febea..811bd981f 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/IBalanceAppService.cs @@ -165,4 +165,5 @@ public interface IBalanceAppService /// Task> GetListByErpLocationCodeAndItemCodeAsync(string erplocationCode, string itemCode); Task> GetRecommendBalancesByLocationsAsync(RecommendBalanceRequestInput input); + Task> GetBalancePagedListByFilterAsync(SfsInventoryRequestInputBase sfsRequestInput, bool includeDetails = false, CancellationToken cancellationToken = default); } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs index 08efeb97e..a8408e666 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.Domain.Repositories; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; @@ -40,6 +41,7 @@ public class BalanceAppService private readonly ITransferLogManager _transferLogManager; private readonly IBalanceManager _balanceManager; private readonly IItemBasicAppService _itemBasicAppService; + private readonly IStdCostPriceSheetAppService _stdCostPriceSheetAppService; public BalanceAppService( IBalanceRepository repository, @@ -47,7 +49,8 @@ public class BalanceAppService IBalanceManager balanceManager, ILocationAclService locationAclService, IItemBasicAclService itemBasicAclService, - IItemBasicAppService itemBasicAppService) : base(repository) + IItemBasicAppService itemBasicAppService, + IStdCostPriceSheetAppService stdCostPriceSheetAppService) : base(repository) { _repository = repository; _transferLogManager = transferLogManager; @@ -55,10 +58,11 @@ public class BalanceAppService _locationAclService = locationAclService; _itemBasicAclService = itemBasicAclService; _itemBasicAppService = itemBasicAppService; + _stdCostPriceSheetAppService= stdCostPriceSheetAppService; } #region Update - + /// /// 修改批次 /// @@ -254,7 +258,25 @@ public class BalanceAppService #endregion Update #region Get - + /// + /// 获取库存余额带标准价格得 + /// + /// + /// + /// + /// + [HttpPost("get-list")] + public virtual async Task> GetBalancePagedListByFilterAsync(SfsInventoryRequestInputBase sfsRequestInput, bool includeDetails = false, + CancellationToken cancellationToken = default) + { + var result =await base.GetPagedListByFilterAsync(sfsRequestInput, includeDetails, cancellationToken); + foreach (var item in result.Items) + { + var std = await _stdCostPriceSheetAppService.GetByItemCode(item.ItemCode).ConfigureAwait(false); + item.StdCostPrice = std == null ? 0 : std.StdCostPrice; + } + return result; + } /// /// /// diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAutoMapperProfile.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAutoMapperProfile.cs index 2643d78fc..68722ee3e 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAutoMapperProfile.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAutoMapperProfile.cs @@ -10,7 +10,9 @@ public partial class InventoryApplicationAutoMapperProfile : Profile private void BalanceAutoMapperProfile() { CreateMap() - .Ignore(x => x.Configuration); + .Ignore(x => x.Configuration) + .Ignore(x => x.StdCostPrice) + .Ignore(x => x.StdCost); CreateMap(); CreateMap();