111
tjx
4 天以前 ccb1ebbf88c1fb456ca30f121c6ef108246689cc
StandardPda/MES.Service/service/Warehouse/SalesPalletManager.cs
@@ -94,4 +94,67 @@
        return query.ToList();
    }
    /// <summary>
    /// 创建销售订单发货
    /// </summary>
    /// <param name="request">发货请求参数</param>
    /// <returns></returns>
    public int CreateSalesOrderShipping(CreateSalesOrderShippingRequestDto request)
    {
        //验证request.PalletIds是否为空
        if (request.PalletIds == null || !request.PalletIds.Any())
        {
            throw new Exception("销售托盘ID列表不能为空");
        }
        //调用GetSalesPalletDetail方法拿到返回值
        var allDetails = new List<SalesPalletDetailQueryDto>();
        foreach (var palletId in request.PalletIds)
        {
            var detailQuery = new SalesPalletDetailQueryDto { Mid = palletId };
            var details = GetSalesPalletDetail(detailQuery);
            allDetails.AddRange(details);
        }
        if (!allDetails.Any())
        {
            throw new Exception("未找到销售托盘明细数据");
        }
        //提取出结果集的Stackcode并去重
        var stackCodes = allDetails
            .Where(d => !string.IsNullOrEmpty(d.Stackcode))
            .Select(d => d.Stackcode)
            .Distinct()
            .ToList();
        if (!stackCodes.Any())
        {
            throw new Exception("未找到有效的栈板码");
        }
        //select * from MES_INV_ITEM_STOCKS where STACKCODE in (Stackcode去重后的结果);
        var stockItems = Db.Queryable<MesInvItemStocks>()
            .Where(s => stackCodes.Contains(s.StackCode) && s.Quantity > 0)
            .ToList();
        if (!stockItems.Any())
        {
            throw new Exception("未找到对应的库存数据");
        }
        //调用MesInvItemStocksManager.CreateReturnMaterialRequest方法
        var stockManager = new MesInvItemStocksManager();
        var itemStockQuery = new ItemStockQueryDto
        {
            UserCode = request.UserCode,
            Station = request.Station,
            ItemBarcodes = stackCodes
        };
        stockManager.CreateReturnMaterialRequest(itemStockQuery);
        return stackCodes.Count;
    }
}