Procházet zdrojové kódy

最新聘级更新,由nc迁移

theo před 3 roky
rodič
revize
56b0173226
1 změnil soubory, kde provedl 31 přidání a 7 odebrání
  1. 31 7
      common/helpers/bonus/BonusCalc.php

+ 31 - 7
common/helpers/bonus/BonusCalc.php

@@ -3625,21 +3625,45 @@ class BonusCalc extends BaseObject {
 
     // 奖金入库完成,将各个奖金计算流水会员聘级,更新成蓝星奖当时计算的聘级
     public function loopCalcBlueEmpLv($offset = 0) {
-        if( !$this->_isCalcMonth ) {
-            // 不是结算月,则不需要进行聘级调整
-            return false;
-        }
         // 从缓存获取分页有收入的会员信息
-        $allData = CalcBonusBS::findUseDbCalc()
+        $allData = CalcBonus::findUseDbCalc()
             ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
-            ->groupBy('USER_ID')
             ->offset($offset)
             ->limit($this->_limit)
             ->asArray()
             ->all();
         if ($allData) {
             foreach ($allData as $data) {
-                $nowBsEmpLv = $data['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 {
+                    // 如果不是结算月,则找上一期的结算月数据
+                    $forwardMonthPeriod = Period::find()
+                    ->where('IS_MONTH=1 AND PERIOD_NUM<:PERIOD_NUM', [':PERIOD_NUM'=>$this->_periodNum])
+                    ->orderBy('PERIOD_NUM DESC')
+                    ->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',