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_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.Attributes; using WIDESEA_Core.BaseController; using WIDESEA_Core.BaseRepository; 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; private readonly IRepository _materialInfoRepository; public AllocateOrderController(IAllocateService service, ILogger logger,IRepository materialInfoRepository) : base(service) { _logger = logger; _materialInfoRepository = materialInfoRepository; } [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 =(int)OrderCreateTypeEnum.UpperSystemPush, 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 = 215; } else if (businessType == BusinessTypeEnum.外部仓库调智仓) { allocateOrder.OrderType = 115; } else if (businessType == BusinessTypeEnum.智仓调智仓) { allocateOrder.OrderType = 117; } foreach (var detailDto in model.Details) { if (businessType == BusinessTypeEnum.外部仓库调智仓 && (detailDto.Barcodes == null || !detailDto.Barcodes.Any())) { return WebResponseContent.Instance.Error($"条码不能为空"); } var materialName = _materialInfoRepository.QueryFirst(x => x.MaterielCode == detailDto.MaterialCode).MaterielName; if (detailDto.Barcodes != null && detailDto.Barcodes.Any()) { foreach (var barcodeDto in detailDto.Barcodes) { Dt_AllocateOrderDetail orderDetail = new Dt_AllocateOrderDetail { WarehouseCode = model.toWarehouse, MaterielCode = detailDto.MaterialCode, MaterielName = materialName, LineNo = detailDto.LineNo, OrderQuantity = barcodeDto.Qty, SupplyCode = barcodeDto.SupplyCode, Unit = detailDto.Unit, Barcode = barcodeDto.Barcode, BatchNo = barcodeDto.BatchNo, BarcodeQty = barcodeDto.Qty, BarcodeUnit = barcodeDto.Unit, ValidDate = barcodeDto.validDate, BoxSN = barcodeDto.BoxSN }; if (businessType == BusinessTypeEnum.智仓调外部仓库 || businessType == BusinessTypeEnum.智仓调智仓) { orderDetail.WarehouseCode = model.fromWarehouse; } allocateOrder.Details.Add(orderDetail); } } else { Dt_AllocateOrderDetail orderDetail = new Dt_AllocateOrderDetail { WarehouseCode = model.toWarehouse, MaterielCode = detailDto.MaterialCode, LineNo = detailDto.LineNo, OrderQuantity = detailDto.Qty, Unit = detailDto.Unit, BarcodeUnit =detailDto.Unit, BarcodeQty=detailDto.Qty, MaterielName = materialName }; if (businessType == BusinessTypeEnum.智仓调外部仓库 || businessType == BusinessTypeEnum.智仓调智仓) { orderDetail.WarehouseCode = model.fromWarehouse; } allocateOrder.Details.Add(orderDetail); } } var content = await Service.ReceiveAllocateOrder(allocateOrder, model.OperationType); if (content.Status) return WebResponseContent.Instance.OK(200); else return WebResponseContent.Instance.Error(content.Message); } } }