using Kean.Domain.Stock.Commands;
using Kean.Domain.Stock.Models;
using Kean.Domain.Stock.Repositories;
using Kean.Domain.Stock.SharedServices.Proxies;
using Kean.Infrastructure.Soap.Hithium.Models;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Kean.Domain.Stock.CommandHandlers
{
///
/// 命令处理程序
///
public sealed class ReuploadHiWMSCommandHandler : CommandHandler
{
private readonly ICommandBus _commandBus; // 命令总线
private readonly IStockRepository _stockRepository; // 存储仓库
private readonly TaskProxy _taskProxy; // 任务服务
private readonly Kean.Infrastructure.Soap.Hithium.WmsAPIService _wmsService; // 海辰WMS
private readonly ILogger _logger; // 日志
///
/// 依赖注入
///
public ReuploadHiWMSCommandHandler(
ICommandBus commandBus,
//INotification notifications,
//IMapper mapper,
TaskProxy taskProxy,
IWarehouseRepository warehouseRepository,
Kean.Infrastructure.Soap.Hithium.WmsAPIService wmsService,
ILogger logger,
IStockRepository stockRepository)
{
_commandBus = commandBus;
//_notifications = notifications;
//_mapper = mapper;
_taskProxy = taskProxy;
_wmsService = wmsService;
_logger = logger;
_stockRepository = stockRepository;
}
///
/// 处理程序
///
public override async Task Handle(ReuploadHiWMSCommand command, CancellationToken cancellationToken)
{
if (command.ValidationResult.IsValid)
{
//bool bFeedback = true;
//if (string.IsNullOrEmpty(command.RequestNo))
//{
// bFeedback = false;
//}
//var stockLines = await _stockRepository.GetLines(command.Barcode);
//if (stockLines == null)
//{
// await _commandBus.Notify(nameof(command.Barcode), $"托盘{command.Barcode}库存明细未找到", command.Barcode, cancellationToken: cancellationToken);
// return;
//}
//foreach (var r in stockLines)
//{
// //校验本地库存 1-本地 2-联机
// if (r.IsLocal == "1")
// {
// bFeedback = false;
// _logger.LogInformation($"上架后上传信息:托盘条码[{command.Barcode}],膜卷号[{r.Bill}],本地库存[{r.IsLocal}]不上传信息");
// break;
// }
//}
//if (bFeedback)
//{
// Feedback feedback = new Feedback();
// feedback.requestNo = command.RequestNo;
// feedback.barcode = command.Barcode;
// feedback.feedbackStatus = command.FeedbackStatus;
// feedback.message = command.Message;
// if (command.FeedbackStatus == "3")
// {
// feedback.message = "人工取消";
// }
// //@=@ W1固定值 postUser
// feedback.postUser = "ASRS";
// //var sResult = string.Empty;
// if (command.Transaction == "Infeed" || command.Transaction == "Bypass")
// {
// //sResult = await _wmsService.FeedbackIn("FeedbackIn", JsonConvert.SerializeObject(feedback, Formatting.Indented), command.Barcode, command.RequestNo);
// _= _wmsService.FeedbackIn("INVENTORY", JsonConvert.SerializeObject(feedback, Formatting.Indented), command.Barcode, command.RequestNo, command.FeedbackStatus);
// }
// if(command.Transaction == "ApplyOut" || command.Transaction == "Outfeed")
// {
// //sResult = await _wmsService.FeedbackOut("FeedbackOut", JsonConvert.SerializeObject(feedback, Formatting.Indented), command.Barcode, command.RequestNo);
// _= _wmsService.FeedbackOut("OUTBOUND", JsonConvert.SerializeObject(feedback, Formatting.Indented), command.Barcode, command.RequestNo, command.FeedbackStatus);
// }
// //Kean.Infrastructure.Soap.Hithium.Models.Result result = JsonConvert.DeserializeObject(sResult);
// if (feedback.feedbackStatus == "2" && command.Transaction == "Infeed")
// {
// //if (result.code == "0")
// //{
// // foreach (var r in stockLines)
// // {
// // SetRollResultCommand commandSetRollResult = new SetRollResultCommand();
// // commandSetRollResult.BatchNo = r.Bill;
// // commandSetRollResult.Code = "0";
// // commandSetRollResult.Message = "";
// // commandSetRollResult.Operator = -4;
// // await _commandBus.Execute(commandSetRollResult, cancellationToken);
// // }
// //}
// //else
// //{
// // await _taskProxy.SetTaskState(0, command.Barcode, "UploadError", result.message, "Task");
// // Output(nameof(command.Message), result.message);
// // return;
// //}
// foreach (var r in stockLines)
// {
// SetRollResultCommand commandSetRollResult = new SetRollResultCommand();
// commandSetRollResult.BatchNo = r.Bill;
// commandSetRollResult.Code = "0";
// commandSetRollResult.Message = "";
// commandSetRollResult.Operator = -4;
// await _commandBus.Execute(commandSetRollResult, cancellationToken);
// }
// await _taskProxy.DeleteTask(command.Barcode);
// }
//}
}
else
{
await _commandBus.Notify(command.ValidationResult,
cancellationToken: cancellationToken);
}
}
}
}