Wang Chen 4 лет назад
Родитель
Сommit
9676bfad1a
2 измененных файлов с 42 добавлено и 0 удалено
  1. 36 0
      app/Libs/Helpers.php
  2. 6 0
      app/Modules/Trade/Pay/PaySuccessAbstract.php

+ 36 - 0
app/Libs/Helpers.php

@@ -727,6 +727,42 @@ function getProp($param, $key, $default = '')
 }
 }
 
 
 /**
 /**
+ * 求最大公约数 Greatest Common Divisor(GCD)
+ * @param $a
+ * @param $b
+ * @return int
+ */
+function gcd($a, $b)
+{
+    // 防止因除数为0而崩溃
+    if ($a === 0 || $b === 0) {
+        return 1;
+    }
+
+    if ($a % $b === 0) {
+        return $b;
+    }
+
+    return gcd($b, $a % $b);
+}
+
+/**
+ * 格式化比例值
+ * @param $value1
+ * @param $value2
+ * @param $gcd
+ * @return array|float[]|int[]
+ */
+function proportion($value1, $value2, $gcd)
+{
+    if ($gcd === 0) {
+        return [$value1, $value2];
+    }
+
+    return [$value1 / $gcd, $value2 / $gcd];
+}
+
+/**
  * 钉钉通知异常
  * 钉钉通知异常
  * @param $message
  * @param $message
  */
  */

+ 6 - 0
app/Modules/Trade/Pay/PaySuccessAbstract.php

@@ -106,6 +106,12 @@ abstract class PaySuccessAbstract
         $tikTokChargeRequest->send_order_id = $sendOrderId;
         $tikTokChargeRequest->send_order_id = $sendOrderId;
         $tikTokChargeRequest->molecule      = $reportRate;
         $tikTokChargeRequest->molecule      = $reportRate;
 
 
+        // 求最大公约数、格式化比例值
+        $molecule    = $reportRate;
+        $denominator = $tikTokChargeRequest->denominator;
+        $gcd         = gcd($molecule, $denominator);
+        [$tikTokChargeRequest->molecule, $tikTokChargeRequest->denominator] = proportion($molecule, $denominator, $gcd);
+
         // 需要跟派单设置的回传类型一致才上报
         // 需要跟派单设置的回传类型一致才上报
         $job = new QappTikTokUserCharge($tikTokChargeRequest);
         $job = new QappTikTokUserCharge($tikTokChargeRequest);
         dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_charge_queue'));
         dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_charge_queue'));