Parcourir la source

feat: EK-76: Member Auto-Maintenance.

kevinElken il y a 10 mois
Parent
commit
bc28ce096a
1 fichiers modifiés avec 66 ajouts et 8 suppressions
  1. 66 8
      common/models/forms/ApproachOrderForm.php

+ 66 - 8
common/models/forms/ApproachOrderForm.php

@@ -12,6 +12,7 @@ use common\helpers\user\Balance;
 use common\helpers\user\Cash;
 use common\helpers\user\Info;
 use common\libs\logging\operate\AdminOperate;
+use common\models\AmpPeriod;
 use common\models\ApproachDecOrder;
 use common\models\ApproachOrder;
 use common\models\ApproachOrderGoods;
@@ -338,6 +339,12 @@ class ApproachOrderForm extends Model
             }
             OrderGoods::batchInsert($approachOrderGoods);
 
+            // AMP订单
+            $order = Order::findOne($this->_model->ID);
+            if ($order['AUTO_MAINTENANCE'] == 1) {
+                $this->orderAutoMaintenance($order);
+            }
+
             // 会员报单、BA升级
             if (in_array($orderType, ['userDec', 'baUpgrade', 'userUpgrade'])) {
                 // 同步报单
@@ -354,14 +361,6 @@ class ApproachOrderForm extends Model
                             throw new Exception(Form::formatErrorsForApi(Yii::t('app', 'changeUserStatusError')));
                         }
                     }
-                    // 修改BA会员升级状态
-//                    if ($orderType === 'baUpgrade') {
-//                        // 查询BA会员名
-//                        $userInfo = User::findOneAsArray('ID=:USER_ID', [':USER_ID' => $approachDecOrder['TO_USER_ID']]);
-//                        if (!BaUser::updateAll(['WHETHER_UPGRADE' => 1, 'BA_UPGRADE_AT' => time()], 'USER_NAME=:USER_NAME', [':USER_NAME' => $userInfo['USER_NAME']])) {
-//                            throw new Exception(Form::formatErrorsForApi(Yii::t('app', 'brandAmbassadorUpgradeError')));
-//                        }
-//                    }
 
                     // 正式会员-升级单
                     if ($orderType === 'userUpgrade') {
@@ -663,4 +662,63 @@ class ApproachOrderForm extends Model
         }
         return $hash;
     }
+
+    private function orderAutoMaintenance($order)
+    {
+        $nowPeriodNum = Period::instance()->getNowPeriodNum();
+
+        try {
+            $sysConfig = Cache::getSystemConfig();
+            $divideLine = (int)$sysConfig['monthPcsPvFxCondition']['VALUE'];
+
+            $orderTotalBv = $order->PV;
+
+            if ($orderTotalBv <= $divideLine) {
+                return;
+            }
+
+            $lastAmpPeriod = AmpPeriod::find()
+                ->where(['USER_ID' => $order->USER_ID])
+                ->orderBy(['PERIOD_NUM' => SORT_DESC])
+                ->one();
+
+            $startPeriodNum = $lastAmpPeriod ? $lastAmpPeriod->PERIOD_NUM + 1 : $nowPeriodNum;
+
+            if (!$lastAmpPeriod) {
+                $memberOrderBv = Order::find()
+                    ->select('SUM(PV) AS total_pv')
+                    ->where([
+                        'USER_ID' => $order->USER_ID,
+                        'IS_DELETE' => 0,
+                        'PERIOD_NUM' => $nowPeriodNum
+                    ])
+                    ->scalar();
+
+                if ($memberOrderBv >= $divideLine) {
+                    $startPeriodNum = $nowPeriodNum + 1;
+                }
+            }
+
+            $periodCount = floor($orderTotalBv / $divideLine);
+            $remainderBv = $orderTotalBv % $divideLine;
+
+            $ampPeriods = [];
+            for ($i = 1; $i <= $periodCount; $i++) {
+                $currentBv = $i < $periodCount ? $divideLine : ($divideLine + $remainderBv);
+                $ampPeriods[] = [
+                    'USER_ID' => $order->USER_ID,
+                    'ORDER_SN' => $order->SN,
+                    'PERIOD_NUM' => $startPeriodNum + $i - 1,
+                    'BV' => $currentBv,
+                ];
+            }
+
+            if (!empty($ampPeriods)) {
+                AmpPeriod::batchInsert($ampPeriods);
+            }
+        } catch (\Exception $e) {
+            // 记录日志或进行错误处理
+            \Yii::error('Order auto maintenance failed: ' . $e->getMessage());
+        }
+    }
 }