Browse Source

增加ERP库位接口

dev_DY_CC
周红军 1 year ago
parent
commit
89524f37ce
  1. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs
  2. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocation/ErpLocationLinq2DbRepository.cs
  3. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs
  4. 22
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/ErpLocationManager.cs
  5. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationLinq2DbRepository.cs
  6. 9
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationManager.cs
  7. 21
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs
  8. 69
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationConverter.cs
  9. 106
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationReader.cs
  10. 48
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocation/ErpLocationExchangeDto.cs

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs

@ -10,6 +10,7 @@ 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.ErpLocations;
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;
@ -46,6 +47,7 @@ public class DataExchangeDapperFawtygModule : AbpModule
context.Services.AddTransient<IProductLinq2DbRepository, ProductLinq2DbRepository>();
context.Services.AddTransient<IDictpjLinq2DbRepository, DictpjLinq2DbRepository>();
context.Services.AddTransient<ICustomerLinq2DbRepository, CustomerLinq2DbRepository>();
context.Services.AddTransient<IErpLocationLinq2DbRepository, ErpLocationLinq2DbRepository>();
context.Services.AddTransient<IBackfluLinq2DbRepository, BackfluLinq2DbRepository>();
context.Services.AddTransient<IPurchasePriceLinq2DbRepository, PurchasePriceLinq2DbRepository>();
context.Services.AddTransient<ISalePriceLinq2DbRepository, SalePriceLinq2DbRepository>();

13
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/ErpLocation/ErpLocationLinq2DbRepository.cs

@ -0,0 +1,13 @@
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.ErpLocations;
public class ErpLocationLinq2DbRepository : Linq2DbCrudRepository<locmout>, IErpLocationLinq2DbRepository
{
public ErpLocationLinq2DbRepository(TyrpDb tyrpDb) : base(tyrpDb)
{
}
}

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/TyrpDb.cs

@ -18,6 +18,7 @@ public class TyrpDb : DataConnection, ITransientDependency
public ITable<vmout> Supplier => this.GetTable<vmout>();
public ITable<pjtmout> Dictpj => this.GetTable<pjtmout>();
public ITable<cmout> Customer => this.GetTable<cmout>();
public ITable<locmout> ErpLocation => this.GetTable<locmout>();
public ITable<ismout> PurchasePrice => this.GetTable<ismout>();
public ITable<spriceout> SalePrice => this.GetTable<spriceout>();
public ITable<scmout> Backflu => this.GetTable<scmout>();

22
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/ErpLocationManager.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 ErpLocationManager : DomainService, IErpLocationManager
{
private readonly IErpLocationLinq2DbRepository _repository;
public ErpLocationManager(IErpLocationLinq2DbRepository repository)
{
_repository = repository;
}
public virtual async Task<List<locmout>> GetToBeProcessedListAsync()
{
var products = await _repository.GetListAsync().ConfigureAwait(false);
return products.ToList();
}
}

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationLinq2DbRepository.cs

@ -0,0 +1,6 @@
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IErpLocationLinq2DbRepository : ILinq2DbRepository<locmout>
{
}

9
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/IErpLocationManager.cs

@ -0,0 +1,9 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public interface IErpLocationManager
{
Task<List<locmout>> GetToBeProcessedListAsync();
}

21
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs

@ -0,0 +1,21 @@
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
public class locmout : Entity
{
/// <summary>
/// 库位
/// </summary>
public string locmout_loc { get; set; }
/// <summary>
/// 库位类型
/// </summary>
public string locmout_stat2 { get; set; }
public override object[] GetKeys()
{
return new object[] { locmout_loc };
}
}

69
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationConverter.cs

@ -0,0 +1,69 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
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.ErpLocation;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming;
public class ErpLocationConverter : IIncomingConverter
{
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly ILogger<ErpLocationConverter> _logger;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
public ErpLocationConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, ILogger<ErpLocationConverter> logger,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_logger = logger;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("No ErpLocations");
return;
}
//按流水号创建单据
var erpLocationRequestList = await BuildIncomingToWmsOfErpLocationRequestAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(erpLocationRequestList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfErpLocationRequestAsync(List<IncomingFromExternal> incomingDataList)
{
await Task.CompletedTask.ConfigureAwait(false);
var incomingToWmsList = new List<IncomingToWms>();
foreach (var item in incomingDataList)
{
var incomingToWms = new IncomingToWms()
{
DataType = item.DataType,
DataAction = item.DataAction,
SourceSystem = item.SourceSystem,
DataIdentityCode = item.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(item.EffectiveDate);
var exchangeErpLocationRequest = JsonSerializer.Deserialize<ErpLocationExchangeDto>(item.DestinationDataContent);
var wmsErpLocationRequest = _objectMapper.Map<ErpLocationExchangeDto, ErpLocationEditInput>(exchangeErpLocationRequest);
incomingToWms.DataContent = JsonSerializer.Serialize(wmsErpLocationRequest);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

106
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Incoming/ErpLocationReader.cs

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
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.ErpLocation;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming;
public class ErpLocationReader : IReader
{
private readonly IErpLocationManager _erpLocationManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<ErpLocationReader> _logger;
public ErpLocationReader(
IErpLocationManager erpLocationManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<ErpLocationReader> logger
)
{
_erpLocationManager = erpLocationManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理locmout
var toBeProcessedDatas = await _erpLocationManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedDatas.Any())
{
_logger.LogInformation("no erpLocations");
return new List<IncomingFromExternal>();
}
//locmout逐一转换为ErpLocation
var incomingDataList = BuildIncomingFromExternalFromShipAsync(toBeProcessedDatas);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromShipAsync(List<locmout> toBeProcessedDatas)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var item in toBeProcessedDatas)
{
var incomingData = BuildIncomingFromExternal(item);
incomingData.SetEffectiveDate(DateTime.Now);
incomingData.SetSuccess();
try
{
var erpLocationNote = BuildErpLocationCreateInput(item);
incomingData.DestinationDataContent = JsonSerializer.Serialize(erpLocationNote);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private static IncomingFromExternal BuildIncomingFromExternal(locmout locmout)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.ErpLocation.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.ERP.ToString(),
SourceDataId = locmout.locmout_loc,
SourceDataGroupCode = locmout.locmout_loc,
SourceDataDetailCode = locmout.locmout_loc,
SourceDataContent = JsonSerializer.Serialize(locmout),
WriteTime = DateTime.Now,
Writer = nameof(TyrpIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static ErpLocationExchangeDto BuildErpLocationCreateInput(locmout locmout)
{
var erpLocation = new ErpLocationExchangeDto()
{
Code = locmout.locmout_loc,
Name = locmout.locmout_loc,
Type = locmout.locmout_stat2,
WarehouseCode = locmout.locmout_stat2,
};
return erpLocation;
}
}

48
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ErpLocation/ErpLocationExchangeDto.cs

@ -0,0 +1,48 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation;
public class ErpLocationExchangeDto
{
/// <summary>
/// 代码
/// </summary>
[Display(Name = "代码")]
[Required]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Name { get; set; }
/// <summary>
/// 描述
/// </summary>
[Display(Name = "描述")]
[StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Description { get; set; }
/// <summary>
/// 类型
/// </summary>
[Display(Name = "类型")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Type { get; set; }
/// <summary>
/// 仓库代码
/// </summary>
[Display(Name = "仓库代码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string WarehouseCode { get; set; }
}
Loading…
Cancel
Save