You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

181 lines
7.9 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Wms.DataExchange.Application.Contracts;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.MesAgent
{
public class MesL7PartsInfoWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly OutgoingOptions _options;
private readonly IPostService _postService;
private readonly IMesProductL7PartsNoteAppService _mesProductL7PartsNoteAppService;
private readonly IProductL7PartsNoteAppService _productL7PartsNoteAppService;
private readonly IItemBasicAppService _itemBasicAppService;
public MesL7PartsInfoWorker(
AbpAsyncTimer timer,
IOptions<DataExchangeOptions> options,
IServiceScopeFactory serviceScopeFactory,
IProductL7PartsNoteAppService productL7PartsNoteAppService,
IMesProductL7PartsNoteAppService mesProductL7PartsNoteAppService,
IItemBasicAppService itemBasicAppService,
IPostService postService
) : base(timer, serviceScopeFactory)
{
_options = options.Value.OutgoingOptions;
_postService = postService;
_itemBasicAppService = itemBasicAppService;
_productL7PartsNoteAppService = productL7PartsNoteAppService;
_mesProductL7PartsNoteAppService = mesProductL7PartsNoteAppService;
Timer.Period = options.Value.OutgoingOptions.PeriodSeconds * 1000; //default 5 minutes
}
[UnitOfWork]
protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
Logger.LogInformation("Starting: Handling Outgoing Exchange data...");
if (!_options.Active)
{
Logger.LogInformation("Outgoing Exchange is not active!");
return;
}
////Resolve dependencies
//var outgoingDataManager = workerContext
// .ServiceProvider
// .GetRequiredService<IOutgoingDataManager>();
////Do the work
//var batchSize = _options.BatchSize;
//var retryTimes = _options.RetryTimes;
//var outgoingDataList = await outgoingDataManager.GetReadyListAsync(batchSize, retryTimes);
//Logger.LogInformation($"{outgoingDataList.Count} Outgoing Exchange records were Found");
//foreach (var outgoingData in outgoingDataList)
//{
// try
// {
// //定时主动推送数据到外部系统
// await PostToOtherSystemAsync(outgoingData);
// //归档并删除
// await outgoingDataManager.FileAndDeleteAsync(outgoingData);
// }
// catch (Exception e)
// {
// Logger.LogException(e);
// e = e.GetBaseException();
// outgoingData.SetError(EnumExchangeDataErrorCode.Exception, e.Message);
// await outgoingDataManager.UpdateAsync(outgoingData);
// }
//}
Logger.LogInformation("Completed: Handling Outgoing Exchange data...");
}
//protected virtual async Task PostToOtherSystemAsync(OutgoingData outgoingData)
//{
// //if (Enum.TryParse(outgoingData.DataType, true, out EnumOutgoingDataType dataType))
// //{
// // var baseUrl = _options.BaseUrl;
// // var apiUrl = GetApiUrl(dataType, _options);
// // var dataContent = outgoingData.DataContent;
// // if (!TryDeserialize(dataType, dataContent))
// // {
// // outgoingData.SetError(EnumExchangeDataErrorCode.WrongDataFormat, dataType.ToString());
// // }
// // var username = _options.Username;
// // var password = _options.Password;
// // await _postService.PostAsync(baseUrl, apiUrl, dataContent, username, password);
// // outgoingData.SetSuccess();
// //}
// //else
// //{
// // outgoingData.SetError(EnumExchangeDataErrorCode.UnknownDataType, "UnknownDataType");
// //}
//}
private bool TryDeserialize(EnumOutgoingDataType dataType, string dataContent)
{
//try
//{
// switch (dataType)
// {
// case EnumOutgoingDataType.Receipt:
// var tryReceipt = JsonSerializer.Deserialize<Receipt>(dataContent);
// break;
// case EnumOutgoingDataType.Return:
// var tryReturn = JsonSerializer.Deserialize<Return>(dataContent);
// break;
// case EnumOutgoingDataType.Transfer:
// var tryTransfer = JsonSerializer.Deserialize<Transfer>(dataContent);
// break;
// case EnumOutgoingDataType.BackFlush:
// var tryBackFlush = JsonSerializer.Deserialize<Backflush>(dataContent);
// break;
// case EnumOutgoingDataType.Rework:
// var tryRework = JsonSerializer.Deserialize<Rework>(dataContent);
// break;
// case EnumOutgoingDataType.PreShipper:
// var tryPreShipper = JsonSerializer.Deserialize<PreShipper>(dataContent);
// break;
// case EnumOutgoingDataType.Count:
// var tryCount = JsonSerializer.Deserialize<Count>(dataContent);
// break;
// case EnumOutgoingDataType.UnplannedReceipt:
// var tryUnplannedReceipt = JsonSerializer.Deserialize<UnplannedReceipt>(dataContent);
// break;
// case EnumOutgoingDataType.UnplannedDeliver:
// var tryUnplannedDeliver = JsonSerializer.Deserialize<UnplannedDeliver>(dataContent);
// break;
// default:
// throw new ArgumentOutOfRangeException(nameof(dataType), dataType, null);
// }
//}
//catch (Exception)
//{
// return false;
//}
return true;
}
private string GetApiUrl(EnumOutgoingDataType dataType, OutgoingOptions options)
{
var apiUrl = dataType switch
{
EnumOutgoingDataType.Receipt => options.ApiUrls.Receipt,//采购收货
EnumOutgoingDataType.Return => options.ApiUrls.Return,//采购退货
EnumOutgoingDataType.Transfer => options.ApiUrls.Transfer,//库存转移
EnumOutgoingDataType.BackFlush => options.ApiUrls.BackFlush, //生产回冲
EnumOutgoingDataType.Rework => options.ApiUrls.Rework, //返修
EnumOutgoingDataType.PreShipper => options.ApiUrls.PreShipper, //预发运
EnumOutgoingDataType.UnplannedReceipt => options.ApiUrls.UnplannedReceipt, //计划外入库
EnumOutgoingDataType.UnplannedDeliver => options.ApiUrls.UnplannedDeliver, //计划外出库
EnumOutgoingDataType.Count => options.ApiUrls.Count, //盘点
_ => throw new ArgumentOutOfRangeException(nameof(dataType), dataType, null)
};
return apiUrl;
}
}
}