kevin_zhangl 3 年之前
父節點
當前提交
efe7bb9d93

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

@@ -208,13 +208,13 @@ class BonusSend extends BaseObject {
             $this->_updatePercent(20);
             //Yii::$app->db->close();
             //Yii::$app->dbShop->close();
-            // 更新聘级
+            // 更新StarDirectory
             $this->updateEmpLevel();
             $this->_updatePercent(40);
             $t4 = microtime(true);
             echo('更新聘级完成,耗时:' . round($t4 - $t3, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
 
-            // 更新星级
+            // 更新StarCrown
             $this->updateCrownLevel();
             $this->_updatePercent(50);
             $t41 = microtime(true);
@@ -620,6 +620,7 @@ class BonusSend extends BaseObject {
      */
     public function updateCrownLevel(int $offset = 0)
     {
+        $starCrownLv = StarCrownLevel::getIdConvertLevelSortCache();
         $allData = CalcBonusQY::findUseDbCalc()
             ->yearMonth($this->_calcYearMonth)
             ->where(
@@ -635,18 +636,43 @@ class BonusSend extends BaseObject {
             ->limit($this->_limit)
             ->all();
 
+        $defaultEmpLv = StarCrownLevel::getDefaultLevelId();
         if ($allData) {
             $transaction = Yii::$app->db->beginTransaction();
             try {
                 foreach ($allData as $data) {
-                    User::updateAll(['CROWN_LV' => $data['LAST_CROWN_LV']], 'ID = :USER_ID', [':USER_ID' => $data['USER_ID']]);
+                    // 默认级别不更新
+                    if( $data['LAST_CROWN_LV'] === $defaultEmpLv ) continue;
+
+                    $modernCrownLv = $data['LAST_CROWN_LV'];   // 本期计算出的最新级别
+
+                    $user = CalcCache::getUserInfo($data['USER_ID'], $this->_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' => $this->_periodNum,
+                        ];
+                    } else {
+                        $columns = [
+                            'LAST_CROWN_LV' => $data['LAST_CROWN_LV'],
+                            'LAST_CROWN_LV_UPDATED_AT' => time(),
+                            'LAST_CROWN_LV_UPDATED_PERIOD' => $this->_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();
-                $this->addError('updateStarCrownLevel', '更新星级失败,原因:' . $e->getMessage());
+                $this->addError('updateStarCrownLevel', '更新StartCrown失败,原因:' . $e->getMessage());
                 return false;
             }
             unset($transaction, $allData);

+ 1 - 1
common/models/StarCrownLevel.php

@@ -100,7 +100,7 @@ class StarCrownLevel extends \common\components\ActiveRecord
         $ret = [];
         $allData = static::find()->where('1=1')->orderBy('SORT ASC, CREATED_AT ASC')->indexBy('ID')->asArray()->all();
         foreach($allData as $data) {
-            $ret[$data['ID']] = $data['LEVEL_SORT'];
+            $ret[$data['ID']] = $data['SORT'];
         }
         return $ret;
     }

+ 1 - 2
frontendEle/src/views/bonus/other.vue

@@ -14,8 +14,7 @@
         </el-table-column>
         <el-table-column label="Stockist Commission" prop="BONUS_BD.value" width="170" v-if="stockistCommissionSwitch === 1"><!-- 服务中心 -->
         </el-table-column>
-        <el-table-column label="Total Bonus" prop="BONUS_TOTAL.value" width="170"><!-- 合计 -->
-        </el-table-column>
+        <el-table-column label="Total Bonus" prop="BONUS_TOTAL.value" width="170"></el-table-column><!-- 合计 -->
         <el-table-column label="Actual Bonus" prop="BONUS_REAL.value" width="170"><!-- 实发 -->
         </el-table-column>
         <el-table-column >

+ 4 - 0
sql/upgrade/2022_08_12_crown.sql

@@ -0,0 +1,4 @@
+
+ALTER TABLE `AR_USER` ADD COLUMN `LAST_CROWN_LV` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '最新Crown级别';
+ALTER TABLE `AR_USER` ADD COLUMN `LAST_CROWN_LV_UPDATED_AT` int(11) NOT NULL DEFAULT 0 COMMENT '最新Crown级别更新时间';
+ALTER TABLE `AR_USER` ADD COLUMN `LAST_CROWN_LV_UPDATED_PERIOD` int(11) NOT NULL DEFAULT 0 COMMENT '最新Crown级别更新期数';