using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Data.Common;
using System.Diagnostics.Eventing.Reader;
using System.Threading.Tasks;
using WIDESEA_Common.AllocateEnum;
using WIDESEA_Core;
using WIDESEA_Core.Attributes;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.Allocate;
using WIDESEA_IAllocateService;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
using WIDESEA_WMSServer.Controllers.Check;
namespace WIDESEA_WMSServer.Controllers.Allocate
{
///
/// 调拨单
///
[Route("api/AllocateOrder")]
[ApiController]
public class AllocateOrderController : ApiBaseController
{
private readonly ILogger _logger;
public AllocateOrderController(IAllocateService service, ILogger logger) : base(service)
{
_logger = logger;
}
[HttpPost, Route("ReceiveAllocateOrder"), MethodParamsValidate, AllowAnonymous]
public async Task ReceiveAllocateOrder([FromBody] AllocateDto model)
{
_logger.LogInformation("AllocateOrderController ReceiveAllocateOrder: " + JsonConvert.SerializeObject(model));
Dt_AllocateOrder allocateOrder = new Dt_AllocateOrder
{
OrderNo = model.OrderNo,
UpperOrderNo = model.OrderNo,
BusinessType = model.BusinessType,
FactoryArea = model.FactoryArea,
IsBatch = model.IsBatch,
CreateType = model.OperationType,
FromWarehouse = model.fromWarehouse,
ToWarehouse = model.toWarehouse,
Details = new List()
};
Enum.TryParse(allocateOrder.BusinessType, out var businessType);
//allocateOrder.OrderType = businessType == BusinessTypeEnum.智仓调外部仓库 ? 215 : 115;
if (businessType == BusinessTypeEnum.智仓调外部仓库)
{
allocateOrder.OrderType = 115;
}
else if (businessType == BusinessTypeEnum.外部仓库调智仓)
{
allocateOrder.OrderType = 215;
}
foreach (var detailDto in model.Details)
{
if (businessType == BusinessTypeEnum.智仓调外部仓库 && (detailDto.Barcodes == null || !detailDto.Barcodes.Any()))
{
return WebResponseContent.Instance.Error($"条码不能为空");
}
if (detailDto.Barcodes != null && detailDto.Barcodes.Any())
{
foreach (var barcodeDto in detailDto.Barcodes)
{
Dt_AllocateOrderDetail orderDetail = new Dt_AllocateOrderDetail
{
WarehouseCode = detailDto.WarehouseCode,
MaterielCode = detailDto.MaterialCode,
LineNo = detailDto.LineNo,
OrderQuantity = detailDto.Qty,
SupplyCode = barcodeDto.SupplyCode,
Unit = detailDto.Unit,
Barcode = barcodeDto.Barcode,
BatchNo = barcodeDto.BatchNo,
BarcodeQty = barcodeDto.Qty,
BarcodeUnit = barcodeDto.Unit,
ValidDate = barcodeDto.validDate,
};
allocateOrder.Details.Add(orderDetail);
}
}
else
{
Dt_AllocateOrderDetail orderDetail = new Dt_AllocateOrderDetail
{
WarehouseCode = detailDto.WarehouseCode,
MaterielCode = detailDto.MaterialCode,
LineNo = detailDto.LineNo,
OrderQuantity = detailDto.Qty,
Unit = detailDto.Unit
};
allocateOrder.Details.Add(orderDetail);
}
allocateOrder.Details.AddRange(allocateOrder.Details);
}
var content = await Service.ReceiveAllocateOrder(allocateOrder, model.OperationType);
if (content.Status) return WebResponseContent.Instance.OK(200);
else return WebResponseContent.Instance.Error(content.Message);
}
}
}