Jelajahi Sumber

调整最新级别的逻辑

root 3 tahun lalu
induk
melakukan
a8557cb9e1
1 mengubah file dengan 27 tambahan dan 13 penghapusan
  1. 27 13
      common/helpers/bonus/BonusCalc.php

+ 27 - 13
common/helpers/bonus/BonusCalc.php

@@ -3431,10 +3431,6 @@ class BonusCalc extends BaseObject {
 
     // 奖金入库完成,将各个奖金计算流水会员聘级,更新成蓝星奖当时计算的聘级
     public function loopCalcBlueEmpLv($offset = 0) {
-        if( !$this->_isCalcMonth ) {
-            // 不是结算月,则不需要进行聘级调整
-            return false;
-        }
         $allData = CalcBonus::findUseDbCalc()
             ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
             ->offset($offset)
@@ -3443,17 +3439,35 @@ class BonusCalc extends BaseObject {
             ->all();
         if ($allData) {
             foreach ($allData as $data) {
-                // 获取蓝星表中的数据
-                $blueBsInfo = CalcBonusBS::findOneAsArray(
-                    'PERIOD_NUM=:PERIOD_NUM  AND USER_ID=:USER_ID', 
-                    [':PERIOD_NUM'=>$this->_periodNum, ':USER_ID'=>$data['USER_ID']]
-                );
-                if (!empty($blueBsInfo)) {
-                    $nowBsEmpLv = $blueBsInfo['LEVEL_ID']; // 当前蓝星奖计算(即管理奖) 的等级
+                // 会员的最新级别,查看上一期,如果无数据,则就是无级别。 上一期到下一期结算月之间,都显示上一期的最新级别。
+                if ($this->_isCalcMonth) {
+                    // 如果是结算月,则直接获取当期结算结果
+                    $blueBsInfo = CalcBonusBS::findOneAsArray(
+                        'PERIOD_NUM=:PERIOD_NUM  AND USER_ID=:USER_ID', 
+                        [':PERIOD_NUM'=>$this->_periodNum, ':USER_ID'=>$data['USER_ID']]
+                    );
+                    if (!empty($blueBsInfo)) {
+                        $nowBsEmpLv = $blueBsInfo['LEVEL_ID']; // 当前蓝星奖计算(即管理奖) 的等级
+                    } else {
+                        $nowBsEmpLv = EmployLevel::NO_LEVEL_ID;
+                    }
                 } else {
-                    $nowBsEmpLv = EmployLevel::NO_LEVEL_ID;
+                    // 如果不是结算月,则找上一期的结算月数据
+                    $forwardMonthPeriod = Period::find()
+                    ->where('IS_MONTH=1 AND PERIOD_NUM<:PERIOD_NUM', [':PERIOD_NUM'=>$this->_periodNum])
+                    ->asArray()
+                    ->one();
+                    $forwardPeriodNum = $forwardMonthPeriod['PERIOD_NUM'];
+                    $blueBsInfo = CalcBonusBS::findOneAsArray(
+                        'PERIOD_NUM=:PERIOD_NUM  AND USER_ID=:USER_ID', 
+                        [':PERIOD_NUM'=>$forwardPeriodNum, ':USER_ID'=>$data['USER_ID']]
+                    );
+                    if (!empty($blueBsInfo)) {
+                        $nowBsEmpLv = $blueBsInfo['LEVEL_ID']; // 当前蓝星奖计算(即管理奖) 的等级
+                    } else {
+                        $nowBsEmpLv = EmployLevel::NO_LEVEL_ID;
+                    }
                 }
-                
                 // 修改AR_CALC_BONUS的LAST_EMP_LV聘级,修改奖金流水的聘级AR_FLOW_BONUS表的LAST_EMP_LV
                 // 期结算结果
                 CalcBonus::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',