Explorar el Código

超节损计算优化

unknown hace 5 días
padre
commit
e822587972
Se han modificado 1 ficheros con 26 adiciones y 4 borrados
  1. 26 4
      application/api/controller/OrderSuperLoss.php

+ 26 - 4
application/api/controller/OrderSuperLoss.php

@@ -387,7 +387,29 @@ class OrderSuperLoss extends Api
                 $total['loss'] += $gy_data[$k]['loss'];
                 $total['reward'] += floatval(str_replace(',', '', $gy_data[$k]['工序超节损金额']));
             }
-            $total['reward'] = number_format($total['reward'],2);
+            $feedQty = floatval($data['实际投料']) * 10000;
+            $realRateVal = $feedQty > 0 ? (floatval($cp_data[0]['cp_sl']) / $feedQty * 100) : 0;
+            $rewardMultiplier = $this->resolveSuperLossRewardMultiplier(
+                floatval($target_rate),
+                $realRateVal,
+                floatval($data['材料废'] ?? 0),
+                $feedQty
+            );
+            $data['reward_rate'] = (string)$rewardMultiplier;
+            $data['材料废占比'] = $feedQty > 0
+                ? number_format(floatval($data['材料废'] ?? 0) / $feedQty * 100, 4) . '%'
+                : null;
+            if ($rewardMultiplier > 1) {
+                $total['reward'] = 0;
+                foreach ($gy_data as $k => $item) {
+                    $baseReward = floatval(str_replace(',', '', (string)$gy_data[$k]['工序超节损金额']));
+                    if ($baseReward != 0.0) {
+                        $gy_data[$k]['工序超节损金额'] = number_format($baseReward * $rewardMultiplier, 4);
+                    }
+                    $total['reward'] += floatval(str_replace(',', '', $gy_data[$k]['工序超节损金额']));
+                }
+            }
+            $total['reward'] = number_format($total['reward'], 2);
             $data['gy_data'] = $gy_data;
             $data['total'] = $total;
             $this->success('请求成功',$data);
@@ -2243,15 +2265,15 @@ class OrderSuperLoss extends Api
 
         $diff = $realRate - $targetRate;
 
-        if ($targetRate >= 97) {
+        if ($targetRate > 97) {
             $triggerHigh = 1.5;
             $triggerLow = -2.0;
             $multiplier = 1.3;
-        } elseif ($targetRate >= 95) {
+        } elseif ($targetRate > 95) {
             $triggerHigh = 2.0;
             $triggerLow = -2.5;
             $multiplier = 1.3;
-        } elseif ($targetRate >= 90) {
+        } elseif ($targetRate > 90) {
             $triggerHigh = 3.0;
             $triggerLow = -3.0;
             $multiplier = 1.3;