如何用纯PHP实现库存预测,计算后续5个数值?
PHP库存预测逻辑实现
需求明确
- 库存状态判定
- 红色预警:库存数值 低于最小库存值
- 橙色预警:(可根据业务补充规则,当前按优先处理逻辑预留)
- 绿色正常:库存数值处于「最小库存值 ≤ 库存 ≤ 最大库存值」区间
- 预测规则
- 存在红/橙预警的库存时,优先对这类库存计算补库预测值
- 所有库存均为绿色正常状态时,以「最小库存值 + 固定生产增量」为基准,生成后续5个预测数值
- 生产触发:生产指定品类(如band 2)时,对应库存增加固定增量(如+4)
核心实现代码
<?php // 模拟从数据库获取的库存数据(示例:4个库存项,含品类、当前库存、最小/最大库存) $inventoryData = [ ['category' => 'band 1', 'current_stock' => 3, 'min_stock' => 5, 'max_stock' => 15], ['category' => 'band 2', 'current_stock' => 6, 'min_stock' => 5, 'max_stock' => 15], ['category' => 'band 3', 'current_stock' => 12, 'min_stock' => 5, 'max_stock' => 15], ['category' => 'band 4', 'current_stock' => 4, 'min_stock' => 5, 'max_stock' => 15], ]; // 固定生产增量(生产指定品类时的库存增加值) $productionIncrement = 4; // 预测数量 $predictCount = 5; /** * 判断库存状态 * @param int $currentStock 当前库存 * @param int $minStock 最小库存 * @param int $maxStock 最大库存 * @return string 状态标识:red/orange/green */ function getStockStatus(int $currentStock, int $minStock, int $maxStock): string { if ($currentStock < $minStock) { return 'red'; } // 可在此补充橙色状态的判定规则,比如当前库存介于min和min+增量之间 // elseif ($currentStock >= $minStock && $currentStock < $minStock + $productionIncrement) { // return 'orange'; // } elseif ($currentStock <= $maxStock) { return 'green'; } // 超出最大库存的情况可自行扩展 return 'green'; } /** * 生成库存预测值 * @param array $inventoryData 库存数据集 * @param int $productionIncrement 生产增量 * @param int $predictCount 预测数量 * @return array 预测结果 */ function generateStockPredictions(array $inventoryData, int $productionIncrement, int $predictCount): array { $predictions = []; $hasWarningStock = false; // 先检查是否存在红/橙预警的库存 foreach ($inventoryData as $item) { $status = getStockStatus($item['current_stock'], $item['min_stock'], $item['max_stock']); if ($status === 'red' || $status === 'orange') { $hasWarningStock = true; break; } } if ($hasWarningStock) { // 优先处理预警库存:计算补库到最小库存后的预测值(可根据业务调整补库目标) foreach ($inventoryData as &$item) { $status = getStockStatus($item['current_stock'], $item['min_stock'], $item['max_stock']); if ($status === 'red' || $status === 'orange') { $current = $item['current_stock']; $itemPredict = []; // 每次生产指定品类时库存+增量,直到达到安全线(示例:补到最小库存) for ($i = 0; $i < $predictCount; $i++) { // 如果当前库存已达标,维持在最小库存水平 if ($current >= $item['min_stock']) { $current = $item['min_stock']; } else { // 生产对应品类,库存增加增量 if ($item['category'] === 'band 2') { $current += $productionIncrement; } else { // 其他品类的生产规则可在此扩展 $current += $productionIncrement; } } $itemPredict[] = $current; } $predictions[$item['category']] = $itemPredict; } } } else { // 所有库存正常:基于最小库存+增量生成后续预测值 foreach ($inventoryData as $item) { $baseValue = $item['min_stock'] + $productionIncrement; $itemPredict = []; for ($i = 0; $i < $predictCount; $i++) { // 可根据业务调整是否持续增长或维持,示例为维持基准值 $itemPredict[] = $baseValue; // 如果需要每次生产递增,可改为 $baseValue + ($i * $productionIncrement) } $predictions[$item['category']] = $itemPredict; } } return $predictions; } // 执行预测并输出结果 $predictResult = generateStockPredictions($inventoryData, $productionIncrement, $predictCount); print_r($predictResult); ?>
代码说明
- 库存状态判断函数:
getStockStatus实现基础的红/绿状态判定,橙色状态可根据业务规则补充(比如库存接近最小库存的区间) - 预测生成函数:
generateStockPredictions核心逻辑:- 先遍历库存数据,检查是否存在预警状态(红/橙)
- 有预警时,针对预警库存计算补库后的预测值(示例为补到最小库存水平,可按需调整补库目标)
- 无预警时,以「最小库存+生产增量」为基准生成5个预测值
- 生产规则:针对指定品类(如band 2)的增量逻辑已在代码中预留,可扩展其他品类的生产规则
内容的提问来源于stack exchange,提问作者Bba Kku
相关产品推荐
相关产品推荐

