1
heshaofeng
2026-03-25 37454e625df68d40897112b2e8c2e3cf4d7163e3
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -146,31 +146,39 @@
                            BarcodeQty = item.OrderQuantity,
                            BarcodeUnit = item.Unit,
                        };
                        var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty);
                        outboundOrderDetail.Unit = issueoStockResult.Unit;
                        outboundOrderDetail.OrderQuantity = issueoStockResult.Quantity;
                        var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty);
                        outboundOrderDetail.MoveQty = moveissueoStockResult.Quantity;
                        var unitConvertResult = await ConvertUnitAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty, item.BarcodeMoveQty);
                        outboundOrderDetail.Unit = unitConvertResult.Unit;
                        outboundOrderDetail.OrderQuantity = unitConvertResult.OrderQuantity;
                        outboundOrderDetail.MoveQty = unitConvertResult.MoveQty;
                        outboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? "";
                        outboundOrderDetails.Add(outboundOrderDetail);
                    }
                    else
                    {
                        var unitConvertResult = await ConvertUnitAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty, item.BarcodeMoveQty);
                        #region é”å®šçŠ¶æ€ä¸‹éžæ•°é‡å­—æ®µä¸€è‡´æ€§æ ¡éªŒ
                        if (outboundOrderDetail.LockQuantity != 0)
                        {
                            var isFieldChanged = !string.Equals(outboundOrderDetail.MaterielCode, item.MaterielCode)
                                || !string.Equals(outboundOrderDetail.SupplyCode, item.SupplyCode)
                                || !string.Equals(outboundOrderDetail.BatchNo, item.BatchNo)
                                || !string.Equals(outboundOrderDetail.Unit, item.Unit)
                                || !string.Equals(outboundOrderDetail.Unit, unitConvertResult.Unit)
                                || !string.Equals(outboundOrderDetail.WarehouseCode, item.WarehouseCode)
                                || !string.Equals(outboundOrderDetail.lineNo, item.lineNo)
                                || outboundOrderDetail.MoveQty != item.MoveQty;
                                ;
                            if (isFieldChanged)
                            {
                                return WebResponseContent.Instance.Error($"行号{item.lineNo}已锁定出库(锁定数量:{outboundOrderDetail.LockQuantity}),仅允许修改订单数量,禁止修改物料/批次/仓库等其他信息");
                            }
                            else
                            {
                                if(item.MoveQty > (outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity))
                                {
                                    return WebResponseContent.Instance.Error($"行号{item.lineNo}挪料数量不能超过剩下的订单数量{outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity}");
                                }
                                outboundOrderDetail.MoveQty = item.MoveQty;
                            }
                        }
                        #endregion
@@ -195,12 +203,9 @@
                            outboundOrderDetail.BarcodeMoveQty = item.MoveQty;
                            outboundOrderDetail.BarcodeQty = item.OrderQuantity;
                            outboundOrderDetail.BarcodeUnit = item.Unit;
                            var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty);
                            outboundOrderDetail.Unit = issueoStockResult.Unit;
                            outboundOrderDetail.OrderQuantity = issueoStockResult.Quantity;
                            var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty);
                            outboundOrderDetail.MoveQty = moveissueoStockResult.Quantity;
                            outboundOrderDetail.Unit = unitConvertResult.Unit;
                            outboundOrderDetail.OrderQuantity = unitConvertResult.OrderQuantity;
                            outboundOrderDetail.MoveQty = unitConvertResult.MoveQty;
                        }
                        else
                        {
@@ -238,6 +243,7 @@
                if (outboundOrder.Details.All(x => x.OverOutQuantity >= x.OrderQuantity - x.MoveQty))
                {
                    outboundOrder.OrderStatus = (int)OutOrderStatusEnum.出库完成;
                    outboundOrder.ReturnToMESStatus = 1;
                }
                BaseDal.UpdateData(outboundOrder);
@@ -501,5 +507,26 @@
            return new PageGridData<Dt_OutboundOrder>(totalCount, data);
        }
        private async Task<UnitConvertResult> ConvertUnitAsync(string materielCode, string barcodeUnit, decimal barcodeQty, decimal barcodeMoveQty)
        {
            var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(materielCode, barcodeUnit, barcodeQty);
            var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(materielCode, barcodeUnit, barcodeMoveQty);
            return new UnitConvertResult
            {
                Unit = issueoStockResult.Unit,
                OrderQuantity = issueoStockResult.Quantity,
                MoveQty = moveissueoStockResult.Quantity
            };
        }
        private class UnitConvertResult
        {
            public string Unit { get; set; }
            public decimal OrderQuantity { get; set; }
            public decimal MoveQty { get; set; }
        }
    }
}