using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_DTO.CalcOut; namespace WIDESEA_WMSServer.Controllers.Outbound { [Route("api/[controller]")] [ApiController] public class OutboundController : ControllerBase { private readonly WIDESEA_IOutboundService.IOutboundService _outboundService; public OutboundController(WIDESEA_IOutboundService.IOutboundService outboundService) { _outboundService = outboundService; } /// /// 分拣出库操作 /// /// 分拣出库请求 /// 分拣出库响应 [HttpPost, Route("ProcessPickingOutbound"), AllowAnonymous] public WebResponseContent ProcessPickingOutbound([FromBody] PickingOutboundRequestDTO request) { try { if (!ModelState.IsValid) return WebResponseContent.Instance.Error(string.Join("; ", ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage))); return _outboundService.ProcessPickingOutbound(request); } catch (Exception ex) { return WebResponseContent.Instance.Error($"分拣出库操作失败: {ex.Message}"); } } object lockObj = new object(); [HttpPost, Route("CompleteOutboundWithBarcode"), AllowAnonymous] public WebResponseContent CompleteOutboundWithBarcode([FromBody] OutboundCompleteRequestDTO request) { try { lock (lockObj) { if (!ModelState.IsValid) return WebResponseContent.Instance.Error(string.Join("; ", ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage))); return _outboundService.CompleteOutboundWithBarcode(request); } } catch (Exception ex) { return WebResponseContent.Instance.Error($"出库扫描操作失败: {ex.Message}"); } } [HttpPost, Route("CompleteOutboundWithPallet"), AllowAnonymous] public WebResponseContent CompleteOutboundWithPallet([FromBody] OutboundCompletePalletRequestDTO request) { try { lock (lockObj) { if (!ModelState.IsValid) return WebResponseContent.Instance.Error(string.Join("; ", ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage))); return _outboundService.CompleteOutboundWithPallet(request); } } catch (Exception ex) { return WebResponseContent.Instance.Error($"整箱出库操作失败: {ex.Message}"); } } [HttpPost,HttpGet, Route("GetOrderInfo"), AllowAnonymous] public WebResponseContent GetOrderInfo(string orderNo) { return _outboundService.GetOrderInfo(orderNo); } [HttpPost, Route("QueryPickingTasks"), AllowAnonymous] public WebResponseContent QueryPickingTasks(string palletCode, string orderNo) { return _outboundService.QueryPickingTasks(palletCode, orderNo); } [HttpPost, Route("QueryPickedList"), AllowAnonymous] public WebResponseContent QueryPickedList(string orderNo, string palletCode) { return _outboundService.QueryPickedList(orderNo, palletCode); } [HttpPost, Route("EmptyBox"), AllowAnonymous] public async Task EmptyBox([FromBody] ReturnToWarehouseDTO returnToWarehouse) { return await _outboundService.EmptyBox(returnToWarehouse.palletCode); } [HttpPost, Route("ReturnToWarehouse"), AllowAnonymous] public async Task ReturnToWarehouse([FromBody]ReturnToWarehouseDTO returnToWarehouse) { return await _outboundService.ReturnToWarehouse(returnToWarehouse.palletCode, returnToWarehouse.orderNo, returnToWarehouse.station); } [HttpPost, Route("RecheckPicking"), AllowAnonymous] public WebResponseContent RecheckPicking([FromBody] RecheckPickingDTO pickingDTO) { return _outboundService.RecheckPicking(pickingDTO); } [HttpPost, Route("PrintFromData"), AllowAnonymous] public WebResponseContent PrintFromData(string barcode) { return _outboundService.PrintFromData(barcode); } } }