فهرست منبع

增加tools:StarCrown和EmpLv的修复

kevin_zhangl 1 سال پیش
والد
کامیت
15deb117d9
1فایلهای تغییر یافته به همراه148 افزوده شده و 0 حذف شده
  1. 148 0
      console/controllers/ToolController.php

+ 148 - 0
console/controllers/ToolController.php

@@ -8,6 +8,8 @@
  */
 namespace console\controllers;
 
+use common\helpers\bonus\BonusSend;
+use common\helpers\bonus\CalcCache;
 use common\helpers\Cache;
 use common\helpers\DataBak;
 use common\helpers\Date;
@@ -18,23 +20,31 @@ use common\helpers\Tool;
 use common\libs\api\sms\SmsApi;
 use common\libs\swoole\RPCApi;
 use common\models\CalcBonus;
+use common\models\CalcBonusBS;
 use common\models\CalcBonusFX;
 use common\models\CalcBonusQY;
 use common\models\CalcBonusYC;
+use common\models\EmployLevel;
 use common\models\FlowBonus;
+use common\models\FlowRemainPv;
 use common\models\forms\ClearDataForm;
 use common\models\forms\DeclarationLoopForm;
 use common\models\forms\UserForm;
+use common\models\Order;
 use common\models\PerfMonth;
 use common\models\PerfOrder;
 use common\models\PerfPeriod;
+use common\models\Period;
 use common\models\ReconsumePool;
 use common\models\ReconsumePoolFlow;
 use common\models\DecOrder;
+use common\models\RemainPv;
+use common\models\StarCrownLevel;
 use common\models\User;
 use common\models\UserInfo;
 use common\models\UserNetwork;
 use common\models\UserRelation;
+use Yii;
 use yii\base\Exception;
 use yii\db\Expression;
 use yii\db\Query;
@@ -214,4 +224,142 @@ class ToolController extends BaseController
             curl_close($curl);
         }
     }
+
+    public function actionUpdatePercent() {
+        $percent = 100;
+        $periodNum = 134;
+        $period = Period::findOneAsArray('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $periodNum]);
+
+        // 把数据写入数据库中
+        Period::updateAll(['SENT_PERCENT' => $percent], 'PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $periodNum]);
+        \Yii::$app->swooleAsyncTimer->pushAsyncPercentToAdmin($percent, ['MODEL' => 'PERIOD', 'ID' => $period['ID'], 'FIELD' => 'SENT_PERCENT']);
+    }
+
+    public function actionUpdateEmpLevel()
+    {
+        $periodNum = 134;
+        $period = Period::findOneAsArray('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $periodNum]);
+
+        $empLv = EmployLevel::getIdConvertLevelSortCache();
+        $allData = CalcBonusBS::find()
+            ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $periodNum])
+            ->orderBy('CREATED_AT DESC')
+            ->limit(10000)
+            ->all();
+
+        $defaultEmpLv = EmployLevel::getDefaultLevelId();
+        if ($allData) {
+            $transaction = Yii::$app->db->beginTransaction();
+            try {
+                foreach ($allData as $data) {
+                    // 蓝星奖计算的最新聘级
+                    $latestEmpLv = $data['LEVEL_ID'];    // 本期计算最新管理级别
+                    $latestEmpLvSort = $empLv[$latestEmpLv]; // 当前蓝星计算的聘级 级别值
+                    if ($defaultEmpLv == $latestEmpLv) {
+                        continue;
+                    }
+                    // 用户存储的最高聘级
+                    $user = CalcCache::getUserInfo($data['USER_ID'], $periodNum);
+                    $highestEmpLv = $user['EMP_LV']; // 用户的历史最高聘级
+                    $highestEmpLvSort = $empLv[$highestEmpLv]; // 历史最高聘级的 级别值
+                    // 如果当前期的聘级高于用户表的最高聘级,则进行更新
+                    if ($latestEmpLvSort > $highestEmpLvSort) {
+                        User::updateAll(['EMP_LV' => $latestEmpLv], 'ID=:USER_ID', [':USER_ID' => $data['USER_ID']]);
+                        User::deleteBaseInfoFromRedis($data['USER_ID']);
+                    }
+                    // 更新最新用户表级别
+                    User::updateAll([
+                        'LAST_EMP_LV' => $latestEmpLv,
+                        'LAST_EMP_LV_UPDATED_AT' => time(),
+                        'LAST_EMP_LV_UPDATED_PERIOD' => $periodNum
+                    ], 'ID=:USER_ID', [':USER_ID' => $data['USER_ID']]);
+
+                    User::deleteBaseInfoFromRedis($data['USER_ID']);
+                    unset($data);
+                }
+                $transaction->commit();
+            } catch (Exception $e) {
+                $transaction->rollBack();
+                return false;
+            }
+            unset($transaction, $allData, $defaultEmpLv);
+        }
+
+        unset($allData);
+
+        // 刷新会员EmpLv为0
+        User::updateAll([
+            'LAST_EMP_LV' => '',
+            'LAST_EMP_LV_UPDATED_AT' => time(),
+            'LAST_EMP_LV_UPDATED_PERIOD' => $periodNum,
+        ], 'LAST_EMP_LV_UPDATED_PERIOD < :PERIOD_NUM AND LAST_EMP_LV <> ""', [':PERIOD_NUM' => $periodNum]);
+
+        User::deleteAllBaseInfoFromRedis();
+    }
+
+    public function actionUpdateCrownLevel()
+    {
+        $periodNum = 134;
+        $period = Period::findOneAsArray('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $periodNum]);
+
+        $starCrownLv = StarCrownLevel::getIdConvertLevelSortCache();
+        $allData = CalcBonusQY::find()
+            ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $periodNum])
+            ->orderBy('CREATED_AT DESC')
+            ->groupBy('USER_ID')
+            ->limit(10000)
+            ->all();
+
+        $defaultCrownLv = StarCrownLevel::getDefaultLevelId();
+        if ($allData) {
+            $transaction = Yii::$app->db->beginTransaction();
+            try {
+                foreach ($allData as $data) {
+                    // 默认级别不更新
+                    if( $data['LAST_CROWN_LV'] === $defaultCrownLv ) continue;
+
+                    $modernCrownLv = $data['LAST_CROWN_LV'];   // 本期计算出的最新级别
+
+                    $user = CalcCache::getUserInfo($data['USER_ID'], $periodNum);
+                    $originCrownLv = $user['CROWN_LV']; // 用户的历史最高crown级别
+                    $originCrownLvSort = $starCrownLv[$originCrownLv]; // 历史最高crown级别值
+                    $modernCrownLvSort = $starCrownLv[$modernCrownLv]; // 当前计算的crown级别值
+                    if ($modernCrownLvSort > $originCrownLvSort) {
+                        $columns = [
+                            'CROWN_LV' => $data['LAST_CROWN_LV'],
+                            'LAST_CROWN_LV' => $data['LAST_CROWN_LV'],
+                            'LAST_CROWN_LV_UPDATED_AT' => time(),
+                            'LAST_CROWN_LV_UPDATED_PERIOD' => $periodNum,
+                        ];
+                    } else {
+                        $columns = [
+                            'LAST_CROWN_LV' => $data['LAST_CROWN_LV'],
+                            'LAST_CROWN_LV_UPDATED_AT' => time(),
+                            'LAST_CROWN_LV_UPDATED_PERIOD' => $periodNum,
+                        ];
+                    }
+
+                    User::updateAll($columns, 'ID = :USER_ID', [':USER_ID' => $data['USER_ID']]);
+                    User::deleteBaseInfoFromRedis($data['USER_ID']);
+                    unset($data);
+                }
+                $transaction->commit();
+            } catch (Exception $e) {
+                $transaction->rollBack();
+                return false;
+            }
+            unset($transaction, $allData);
+        }
+
+        // 刷新会员CrownLv为0
+        User::updateAll([
+            'LAST_CROWN_LV' => '',
+            'LAST_CROWN_LV_UPDATED_AT' => time(),
+            'LAST_CROWN_LV_UPDATED_PERIOD' => $periodNum,
+        ], 'LAST_CROWN_LV_UPDATED_PERIOD < :PERIOD_NUM AND LAST_CROWN_LV <> ""' , [':PERIOD_NUM' => $periodNum]);
+
+        User::deleteAllBaseInfoFromRedis();
+
+        return true;
+    }
 }