Переглянути джерело

feat: NG-71: 会员奖金发放、级别发放、绩效奖金发放

kevin 1 рік тому
батько
коміт
af216415bc

+ 24 - 4
common/helpers/bonus/BonusSend.php

@@ -18,6 +18,7 @@ use common\helpers\user\Info;
 use common\helpers\user\Reconsume;
 use common\libs\api\sms\SmsApi;
 use common\models\DealType;
+use common\models\EliteLevel;
 use common\models\FlowRemainPv;
 use common\models\PerfPeriod;
 use common\models\EmployLevel;
@@ -194,7 +195,7 @@ class BonusSend extends BaseObject {
             $this->setSendStatus('start');
 
             // 发放荣衔级别(Honor/Emp)、Elite级别
-            $this->sendMemberLevel();
+            $this->sentMemberLevel();
             $this->_updatePercent(30);
             $t2 = microtime(true);
             echo('更新会员级别完成,耗时:' . round($t2 - $t1, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
@@ -440,25 +441,42 @@ class BonusSend extends BaseObject {
         return true;
     }
 
-    public function sendMemberLevel()
+    public function sentMemberLevel()
     {
         $transaction = Yii::$app->db->beginTransaction();
         try {
             $db = Yii::$app->db;
 
+            // 刷新所有会员最新EliteLevel和最新EmpLevel为默认等级
+            User::updateAll(
+                [
+                    'LAST_EMP_LV' => EmployLevel::getDefaultLevelId(),
+                    'LAST_EMP_LV_UPDATED_AT' => time(),
+                    'LAST_EMP_LV_UPDATED_PERIOD' => $this->_periodNum,
+                    'LAST_ELITE_LV' => EliteLevel::getDefaultLevelId(),
+                    'LAST_ELITE_LV_UPDATED_AT' => time(),
+                    'LAST_ELITE_LV_UPDATED_PERIOD' => $this->_periodNum,
+                ]);
+
+            // 刷新会员最高EliteLevel和最高EmpLevel(统一数据,更新为默认Elite级别)
+            User::updateAll(['EMP_LV' => EmployLevel::getDefaultLevelId()], "EMP_LV = '' OR EMP_LV IS NULL");
+            User::updateAll(['ELITE_LV' => EliteLevel::getDefaultLevelId()], "ELITE_LV = '' OR ELITE_LV IS NULL");
+
             $sql =<<<SQL
                 UPDATE `AR_USER` `user`
                     INNER JOIN `AR_CALC_BONUS` `bonus` ON `user`.`ID` = `bonus`.`USER_ID` AND `bonus`.`CALC_MONTH` = :CALC_MONTH AND `bonus`.`PERIOD_NUM` = :PERIOD_NUM
                 SET
-                    `user`.`EMP_LV` = `bonus`.`EMP_LV`, 
+                    `user`.`EMP_LV` = `bonus`.`HIGHEST_HONOR_LV`, 
                     `user`.`LAST_EMP_LV` = `bonus`.`LAST_EMP_LV`, 
                     `user`.`LAST_EMP_LV_UPDATED_AT` = :UPDATED_AT, 
                     `user`.`LAST_EMP_LV_UPDATED_PERIOD` = :PERIOD_NUM, 
                     
-                    `user`.`ELITE_LV` = `bonus`.`ELITE_LV`, 
+                    `user`.`ELITE_LV` = `bonus`.`HIGHEST_ELITE_LV`, 
                     `user`.`LAST_ELITE_LV` = `bonus`.`LAST_ELITE_LV`, 
                     `user`.`LAST_ELITE_LV_UPDATED_AT` = :UPDATED_AT, 
                     `user`.`LAST_ELITE_LV_UPDATED_PERIOD` = :PERIOD_NUM
+                WHERE
+                    `bonus`.`PERIOD_NUM` = :PERIOD_NUM
 SQL;
 
             $db->createCommand($sql)
@@ -472,6 +490,8 @@ SQL;
 
             $transaction->commit();
 
+            // 刷新本期无Elite的用户级别
+
             // 删除缓存中的会员信息
             User::deleteAllBaseInfoFromRedis();
 

+ 1 - 0
common/models/User.php

@@ -38,6 +38,7 @@ use common\libs\logging\operate\valueType\Config as ValueTypeConfig;
  * @property int $DEC_CLOSED_AT 关闭时间
  * @property string $DEC_LV 报单级别
  * @property string $EMP_LV 聘级
+ * @property string $ELITE_LV Elite级别
  * @property int $PROVINCE 省份
  * @property int $CITY 城市
  * @property int $COUNTY 县区

+ 1 - 0
common/models/forms/ApproachDeclarationForm.php

@@ -786,6 +786,7 @@ class ApproachDeclarationForm extends Model
         $user->DEC_LV = $this->decLv;
         $user->LAST_DEC_LV = $this->decLv;
         $user->EMP_LV = EmployLevel::getDefaultLevelId();
+        $user->ELITE_LV = EmployLevel::getDefaultLevelId();
         $user->PROVINCE = $this->province ?? 0;
         $user->LGA_NAME = $this->lgaName;
         $user->CITY_NAME = $this->cityName;

+ 2 - 0
common/models/forms/DeclarationForm.php

@@ -15,6 +15,7 @@ use common\models\Countries;
 use common\models\CurrencyConversions;
 use common\models\DeclarationPackage;
 use common\models\DecOrder;
+use common\models\EliteLevel;
 use common\models\EmployLevel;
 use common\models\Language;
 use common\models\Order;
@@ -827,6 +828,7 @@ class DeclarationForm extends Model
         $user->DEC_LV = $this->decLv;
         $user->LAST_DEC_LV = $this->decLv;
         $user->EMP_LV = EmployLevel::getDefaultLevelId();
+        $user->ELITE_LV = EliteLevel::getDefaultLevelId();
         $user->PROVINCE = $this->province ?? 0;
         $user->LGA_NAME = $this->lgaName;
         $user->CITY_NAME = $this->cityName;