|
|
@@ -14,6 +14,7 @@ use common\helpers\snowflake\SnowFake;
|
|
|
use common\helpers\Tool;
|
|
|
use common\models\CalcBonus;
|
|
|
use common\models\CalcBonusBD;
|
|
|
+use common\models\CalcBonusBS;
|
|
|
use common\models\CalcBonusBT;
|
|
|
use common\models\CalcBonusCF;
|
|
|
use common\models\CalcBonusFL;
|
|
|
@@ -32,6 +33,7 @@ use common\models\CalcBonusXF;
|
|
|
use common\models\CalcBonusYC;
|
|
|
use common\models\CalcBonusYJ;
|
|
|
use common\models\CalcMonthBonusUser;
|
|
|
+use common\models\Config;
|
|
|
use common\models\FlowDeductZR;
|
|
|
use common\models\PerfCompany;
|
|
|
use common\models\PerfMonth;
|
|
|
@@ -41,6 +43,8 @@ use common\models\ResendQY;
|
|
|
use common\models\DeclarationLevel;
|
|
|
use common\models\DecOrder;
|
|
|
use common\models\EmployLevel;
|
|
|
+use common\models\FlowBonus;
|
|
|
+use common\models\PerfActiveUser;
|
|
|
use common\models\ScoreMonth;
|
|
|
use common\models\User;
|
|
|
use common\models\UserInfo;
|
|
|
@@ -84,6 +88,8 @@ class BonusCalc extends BaseObject {
|
|
|
|
|
|
const LOOP_FINISH = 1;
|
|
|
const LOOP_CONTINUE = 2;
|
|
|
+ const GX_FLOOR_LIMIT = 5; // 共享奖向上找的最大层级
|
|
|
+ const GX_LIMIT_SWITCH = true; // 是否开启共享奖向上找的最大限制 true 为开启 false 关闭
|
|
|
|
|
|
const ORDER_TYPE_TO_FW_COEFFICIENT = [
|
|
|
'ZC' => 'fwCoefficientFromZc',
|
|
|
@@ -224,7 +230,7 @@ class BonusCalc extends BaseObject {
|
|
|
}
|
|
|
$t9 = microtime(true);
|
|
|
echo('计算团队奖'.($this->_sysConfig['openQY']['VALUE']?'完成':'关闭').',耗时:' . round($t9 - $t8, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
- $this->_updatePercent(40);
|
|
|
+ $this->_updatePercent(65);
|
|
|
|
|
|
if($this->_sysConfig['openGX']['VALUE']) {
|
|
|
$this->calcBonusGXBefore();
|
|
|
@@ -232,7 +238,7 @@ class BonusCalc extends BaseObject {
|
|
|
}
|
|
|
$t11 = microtime(true);
|
|
|
echo('计算共享奖'.($this->_sysConfig['openGX']['VALUE']?'完成':'关闭').',耗时:' . round($t11 - $t9, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
- $this->_updatePercent(45);
|
|
|
+ $this->_updatePercent(68);
|
|
|
|
|
|
if($this->_sysConfig['openGL']['VALUE']) {
|
|
|
$this->calcBonusBdGL();
|
|
|
@@ -270,6 +276,15 @@ class BonusCalc extends BaseObject {
|
|
|
echo('计算达标奖'.($this->_sysConfig['openJXS']['VALUE']?'完成':'关闭').',耗时:' . round($t18 - $t17, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
$this->_updatePercent(65);
|
|
|
|
|
|
+ // 蓝星奖入库,实际上是插入有奖金会员数据缓存中.
|
|
|
+ // 调用存储过程,计算蓝星管理奖金
|
|
|
+ $this->calcBsProcedure();
|
|
|
+ // 将有蓝星管理奖金的用户加入到有奖金缓存用户中
|
|
|
+ $this->calcBonusBsGL();
|
|
|
+ $t18temp = microtime(true);
|
|
|
+ echo('计算蓝星管理奖'.($this->_sysConfig['openGL']['VALUE']?'完成':'关闭').',耗时:' . round($t18temp - $t18, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
+ $this->_updatePercent(65);
|
|
|
+
|
|
|
//把奖金会员写入缓存
|
|
|
$this->loopMonthBonusUserFromDbToCache();
|
|
|
$t19 = microtime(true);
|
|
|
@@ -277,13 +292,16 @@ class BonusCalc extends BaseObject {
|
|
|
$this->_updatePercent(70);
|
|
|
|
|
|
//奖金写库
|
|
|
+ // 这里增加新的奖金入库操作.
|
|
|
$this->loopBonusUsers();
|
|
|
+ // 入库完成,将各个奖金计算流水会员聘级,更新成蓝星奖当时计算的聘级
|
|
|
+ $this->loopCalcBlueEmpLv();
|
|
|
$this->_updatePercent(75);
|
|
|
unset($calcWrite);
|
|
|
$t20 = microtime(true);
|
|
|
echo('奖金写库操作完成,耗时:' . round($t20 - $t19, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
|
|
|
- //把本期奖金会员入库
|
|
|
+ //把本期奖金会员入库 - 把缓存中的月奖用户信息存到数据库.存储过程的入库不在这里进行,这里代码取的缓存,存储过程没有缓存,在上面进行入库
|
|
|
$this->loopMonthBonusUserToDb();
|
|
|
$t21 = microtime(true);
|
|
|
echo('奖金会员入库完成,耗时:' . round($t21 - $t20, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
@@ -1395,8 +1413,14 @@ class BonusCalc extends BaseObject {
|
|
|
foreach ($allData as $userId) {
|
|
|
//判断$userId 能否得共享奖
|
|
|
|
|
|
- //判断 是否本期小市场(安置关系)新增980pv 能否得奖
|
|
|
- if ( !$this->checkSmallMarketPerf($userId) ) {
|
|
|
+ // //判断 是否本期小市场(安置关系)新增980pv 能否得奖
|
|
|
+ // if ( !$this->checkSmallMarketPerf($userId) ) {
|
|
|
+ // unset($userId);
|
|
|
+ // continue;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 20220407 小市场980判断->改成判断此期用户是否有原报单团队奖金
|
|
|
+ if ( !$this->checkHasOriBonusQyBd($userId) ) {
|
|
|
unset($userId);
|
|
|
continue;
|
|
|
}
|
|
|
@@ -1441,6 +1465,12 @@ class BonusCalc extends BaseObject {
|
|
|
if ($allData) {
|
|
|
echo sprintf("时间:[%s]共享奖,当前offset为:【%s】" . PHP_EOL, date('Y-m-d H:i:s', time()) , $offset);
|
|
|
$insertBonusData = [];
|
|
|
+ // 获取线上找几层和是否开启找几层的限制
|
|
|
+ $configsGx = Config::find()->where(
|
|
|
+ 'CONFIG_NAME="gxNoPvFindLimitSwitch" OR CONFIG_NAME="gxNoPvFindLimitTimes"'
|
|
|
+ )->orderBy('SORT ASC')->indexBy('CONFIG_NAME')->asArray()->all();
|
|
|
+ $openFindLimit = isset($configsGx['gxNoPvFindLimitSwitch']) ? $configsGx['gxNoPvFindLimitSwitch']['VALUE'] : 1; // 是否开放了 得奖人不满足980就找一个满足980的人来得这个奖 的最大向上循环次数
|
|
|
+ $findLimitTimes = isset($configsGx['gxNoPvFindLimitTimes']) ? $configsGx['gxNoPvFindLimitTimes']['VALUE'] : 5 ; // 开放的限制层数
|
|
|
foreach ($allData as $userId) {
|
|
|
$bonusUserData = [];
|
|
|
$bonusPercentOne = $this->_sysConfig['shareRecPercent']['VALUE'] / 100;
|
|
|
@@ -1496,12 +1526,14 @@ class BonusCalc extends BaseObject {
|
|
|
$userEmpLevel = $userBaseInfo['EMP_LV'];
|
|
|
foreach ($bonusUserData as $bonusUserDataEvery) {
|
|
|
$bonusUserId = $bonusUserDataEvery['bonusUid'];
|
|
|
- //判断 是否本期小市场(安置关系)新增980pv 能否得奖
|
|
|
- if ( $bonusUserDataEvery['validMinPv'] && !$this->checkSmallMarketPerf($bonusUserId) ) {
|
|
|
-// unset($bonusUserDataEvery, $bonusUserId);
|
|
|
+ //判断 是否本期小市场(安置关系)新增980pv 能否得奖->20220407改成判断得奖人此期是否有报单团队奖金
|
|
|
+ // if ( $bonusUserDataEvery['validMinPv'] && !$this->checkSmallMarketPerf($bonusUserId) ) { 20220407
|
|
|
+ if ( $bonusUserDataEvery['validMinPv'] && !$this->checkHasOriBonusQyBd($bonusUserId) ) {
|
|
|
+// unset($bonusUserDataEvery, $bonusUserId);
|
|
|
// continue;
|
|
|
//得奖人不满足980就找一个满足980的人来得这个奖
|
|
|
- $bonusUserId = $this->getMinBdPvNetworkParent($bonusUserId);
|
|
|
+ // 20220407改成判断得奖人此期是否有报单团队奖金,如果没有则找一个此期有报单团队奖金得人
|
|
|
+ $bonusUserId = $this->getMinBdPvNetworkParent($bonusUserId, $openFindLimit, $findLimitTimes);
|
|
|
if ( !$bonusUserId ) {
|
|
|
unset($bonusUserDataEvery, $bonusUserId);
|
|
|
continue;
|
|
|
@@ -1566,6 +1598,60 @@ class BonusCalc extends BaseObject {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ // 执行蓝星管理奖金的存储过程
|
|
|
+ public function calcBsProcedure() {
|
|
|
+ if( !$this->_isCalcMonth ) {
|
|
|
+ // 不是结算月,则不进行计算
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $result = \Yii::$app->db->createCommand("CALL CalcBlue(:periodNum)")
|
|
|
+ ->bindValue(':periodNum' , $this->_periodNum )
|
|
|
+ ->execute();
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 蓝星管理奖金
|
|
|
+ * @param int $offset
|
|
|
+ * @return bool
|
|
|
+ * @throws \yii\db\Exception
|
|
|
+ */
|
|
|
+ public function calcBonusBsGL(int $offset = 0) {
|
|
|
+ if( !$this->_isCalcMonth ) {
|
|
|
+ // 不是结算月,则不进行计算
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 从缓存获取分页有收入的会员信息
|
|
|
+ $allData = CalcBonusBS::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 $user) {
|
|
|
+ // 添加到有奖励信息的数据中
|
|
|
+ CalcCache::addHasBonusUsers($user['USER_ID'], $this->_periodNum);
|
|
|
+ //CalcCache::addHasMonthBonusUsers($user['USER_ID'], $this->_periodNum);
|
|
|
+ //扣除相应的复消积分和管理费
|
|
|
+ $deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS']);
|
|
|
+ // 把对碰后的奖金存入缓存中
|
|
|
+ CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS', $user['ORI_BONUS'], $deductData);
|
|
|
+ $realBonusBs = $deductData['surplus']; // 扣除管理费和复消积分后的实发蓝星奖金
|
|
|
+ $manageTax = $deductData['manageTax']; // 管理费
|
|
|
+ $point = $deductData['reConsumePoints'];// 复消积分
|
|
|
+ // 更新蓝星奖金存储过程的实发金额数据
|
|
|
+ CalcBonusBS::updateAll(['AMOUNT' => $realBonusBs, 'MANAGE_TAX' => $manageTax, 'RECONSUME_POINTS' => $point],
|
|
|
+ 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [':USER_ID' => $user['USER_ID'], ':PERIOD_NUM' => $this->_periodNum]);
|
|
|
+ }
|
|
|
+ return $this->calcBonusBsGL($offset + $this->_limit);
|
|
|
+ }
|
|
|
+ unset($allData);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 报单管理奖
|
|
|
@@ -2651,6 +2737,19 @@ class BonusCalc extends BaseObject {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 共享奖,判断当期此用户,是否有原报单团队奖金
|
|
|
+ */
|
|
|
+ public function checkHasOriBonusQyBd($userId) {
|
|
|
+ //判断$parent是否有首单团队奖
|
|
|
+ $bonus = CalcCache::bonus($userId, $this->_periodNum);
|
|
|
+ if( isset($bonus['ORI_BONUS_QY_BD']) && $bonus['ORI_BONUS_QY_BD'] > 0 ) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 判断除大市场外 其它市场的报单业绩
|
|
|
* @param $userId
|
|
|
@@ -2712,26 +2811,56 @@ class BonusCalc extends BaseObject {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取有最小报单PV的用效父级
|
|
|
+ * 获取有最小报单PV的用效父级 20220407修改成是否此期此用户有原报单团队奖金
|
|
|
* @param $userId
|
|
|
* @return string
|
|
|
*/
|
|
|
- public function getMinBdPvNetworkParent($userId) {
|
|
|
+ public function getMinBdPvNetworkParent($userId, $openFindLimit = 1, $findLimitTimes = 5) {
|
|
|
$validParentId = '';
|
|
|
- $this->loopNetworkParentDo($userId, function ($parent) use(&$validParentId) {
|
|
|
- if ( $this->checkSmallMarketPerf($parent['PARENT_UID']) ) {
|
|
|
+ $validDeep = 1;
|
|
|
+ $this->loopNetworkParentDo($userId, function ($parent) use(&$validParentId,&$validDeep,$openFindLimit,$findLimitTimes) {
|
|
|
+ if ( $this->checkHasOriBonusQyBd($parent['PARENT_UID']) ) {
|
|
|
$validParentId = $parent['PARENT_UID'];
|
|
|
unset($parent);
|
|
|
return self::LOOP_FINISH;
|
|
|
}
|
|
|
+ // 只找5层
|
|
|
+ if ( $openFindLimit && $validDeep >= $findLimitTimes ) {
|
|
|
+ unset($parent);
|
|
|
+ return self::LOOP_FINISH;
|
|
|
+ }
|
|
|
+
|
|
|
+ $validDeep += 1;
|
|
|
unset($parent);
|
|
|
});
|
|
|
|
|
|
return$validParentId;
|
|
|
}
|
|
|
+ // public function getMinBdPvNetworkParent($userId, $openFindLimit = 1, $findLimitTimes = 5) {
|
|
|
+ // $validParentId = '';
|
|
|
+ // $validDeep = 1;
|
|
|
+ // $this->loopNetworkParentDo($userId, function ($parent) use(&$validParentId,&$validDeep,$openFindLimit,$findLimitTimes) {
|
|
|
+ // if ( $this->checkSmallMarketPerf($parent['PARENT_UID']) ) {
|
|
|
+ // $validParentId = $parent['PARENT_UID'];
|
|
|
+ // unset($parent);
|
|
|
+ // return self::LOOP_FINISH;
|
|
|
+ // }
|
|
|
+ // // 只找5层
|
|
|
+ // if ( $openFindLimit && $validDeep >= $findLimitTimes ) {
|
|
|
+ // unset($parent);
|
|
|
+ // return self::LOOP_FINISH;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // $validDeep += 1;
|
|
|
+ // unset($parent);
|
|
|
+ // });
|
|
|
+
|
|
|
+ // return$validParentId;
|
|
|
+ // }
|
|
|
|
|
|
/**
|
|
|
* 按级别的收入上限
|
|
|
+ * 新的需求调整: 改成不按月进行限制,并且去掉vip奖
|
|
|
* @param $bonus
|
|
|
* @param $userId
|
|
|
* @param $declarationLevel
|
|
|
@@ -2741,18 +2870,7 @@ class BonusCalc extends BaseObject {
|
|
|
$decLevelConfig = $this->_decLevelConfig;
|
|
|
$nowDecLevelConfig = $decLevelConfig[$declarationLevel];
|
|
|
unset($decLevelConfig);
|
|
|
-
|
|
|
- //本月往期奖金 这里执行速度可能慢一些,但需求如此没有办法
|
|
|
- $lastData = CalcCache::lastPeriodMonthCalcBonus($userId, $this->_periodNum, $this->_calcMonth);
|
|
|
- $lastTotal = $lastData['ORI_BONUS_QY_SUM'] + $lastData['ORI_BONUS_VIP_SUM'];
|
|
|
-
|
|
|
- // 从缓存中获取用户的奖金
|
|
|
- $bonusData = CalcCache::bonus($userId, $this->_periodNum);
|
|
|
- $thisTotal = $bonusData['ORI_BONUS_QY'] + $bonusData['ORI_BONUS_VIP'];
|
|
|
- $maxGetBonus = $nowDecLevelConfig['INCOME_CAP'] * $this->_calcMonthPeriodNumCount - $lastTotal - $thisTotal;
|
|
|
- unset($lastData, $lastTotal, $bonusData, $thisTotal);
|
|
|
- if( $maxGetBonus <= 0 ) return 0.00;
|
|
|
-
|
|
|
+ $maxGetBonus = $nowDecLevelConfig['INCOME_CAP'];
|
|
|
if( $bonus <= $maxGetBonus) {
|
|
|
return $bonus;
|
|
|
}else {
|
|
|
@@ -2760,6 +2878,29 @@ class BonusCalc extends BaseObject {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // public function declarationLevelCap($bonus, $userId, $declarationLevel) {
|
|
|
+ // $decLevelConfig = $this->_decLevelConfig;
|
|
|
+ // $nowDecLevelConfig = $decLevelConfig[$declarationLevel];
|
|
|
+ // unset($decLevelConfig);
|
|
|
+
|
|
|
+ // //本月往期奖金 这里执行速度可能慢一些,但需求如此没有办法
|
|
|
+ // $lastData = CalcCache::lastPeriodMonthCalcBonus($userId, $this->_periodNum, $this->_calcMonth);
|
|
|
+ // $lastTotal = $lastData['ORI_BONUS_QY_SUM'] + $lastData['ORI_BONUS_VIP_SUM'];
|
|
|
+
|
|
|
+ // // 从缓存中获取用户的奖金
|
|
|
+ // $bonusData = CalcCache::bonus($userId, $this->_periodNum);
|
|
|
+ // $thisTotal = $bonusData['ORI_BONUS_QY'] + $bonusData['ORI_BONUS_VIP'];
|
|
|
+ // $maxGetBonus = $nowDecLevelConfig['INCOME_CAP'] * $this->_calcMonthPeriodNumCount - $lastTotal - $thisTotal;
|
|
|
+ // unset($lastData, $lastTotal, $bonusData, $thisTotal);
|
|
|
+ // if( $maxGetBonus <= 0 ) return 0.00;
|
|
|
+
|
|
|
+ // if( $bonus <= $maxGetBonus) {
|
|
|
+ // return $bonus;
|
|
|
+ // }else {
|
|
|
+ // return $maxGetBonus;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
/**
|
|
|
* 总奖金限制
|
|
|
* @param $bonus
|
|
|
@@ -2934,6 +3075,10 @@ class BonusCalc extends BaseObject {
|
|
|
public function loopBonusUsers($offset = 0) {
|
|
|
echo sprintf("时间:[%s]缓存奖金数据入库,当前offset为:【%s】" . PHP_EOL, date('Y-m-d H:i:s', time()) , $offset);
|
|
|
// 从缓存列表里面从底层往上倒序获取会员
|
|
|
+
|
|
|
+ // 这里有问题,因为蓝星奖,是存储过程计算的,并没有加入缓存,这里需要修改.
|
|
|
+ // 给用户发送兑换积分,也需要进行调整查看。
|
|
|
+ // CalcCache::addHasBonusUsers($everyData['USER_ID'], $this->_periodNum);
|
|
|
$allData = CalcCache::getHasBonusUsers($this->_periodNum, $offset, $this->_limit);
|
|
|
if($allData){
|
|
|
$insertDataBonus = [];
|
|
|
@@ -2953,6 +3098,93 @@ class BonusCalc extends BaseObject {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ // 奖金入库完成,将各个奖金计算流水会员聘级,更新成蓝星奖当时计算的聘级
|
|
|
+ public function loopCalcBlueEmpLv($offset = 0) {
|
|
|
+ if( !$this->_isCalcMonth ) {
|
|
|
+ // 不是结算月,则不需要进行聘级调整
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 从缓存获取分页有收入的会员信息
|
|
|
+ $allData = CalcBonusBS::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']; // 当前蓝星奖计算(即管理奖) 的等级
|
|
|
+ // 修改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',
|
|
|
+ [
|
|
|
+ ':USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ // 奖金流水
|
|
|
+ FlowBonus::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ // 共享奖流水
|
|
|
+ CalcBonusGX::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ // 推广奖流水
|
|
|
+ CalcBonusTG::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ // 团队奖流水
|
|
|
+ CalcBonusQY::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ // 服务奖流水
|
|
|
+ CalcBonusBD::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ // 更新form的聘级
|
|
|
+ CalcBonusGX::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':FROM_USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ CalcBonusTG::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':FROM_USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ CalcBonusBD::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [
|
|
|
+ ':FROM_USER_ID' => $data['USER_ID'],
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum
|
|
|
+ ]
|
|
|
+ );
|
|
|
+ }
|
|
|
+ unset($allData);
|
|
|
+ return $this->loopCalcBlueEmpLv($offset + $this->_limit);
|
|
|
+ }
|
|
|
+ unset($allData);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 奖金
|
|
|
* @param $userId
|
|
|
@@ -2971,24 +3203,123 @@ class BonusCalc extends BaseObject {
|
|
|
// }
|
|
|
$pervSurplusPerf = CalcCache::surplusPerf($userId, $this->_periodNum);
|
|
|
|
|
|
+ // //没有共享和管理奖 以前的管理奖和共享奖逻辑
|
|
|
+ // $bonusReal = $bonus['BONUS_BD'] + $bonus['BONUS_TG'] + $bonus['BONUS_XF'] + $bonus['BONUS_YJ'] + $bonus['BONUS_QY'] + $bonus['BONUS_YC'] + $bonus['BONUS_YC_EXTRA'] + $bonus['BONUS_VIP'] + $standardBonus;
|
|
|
+ // $realBonusGx = 0;
|
|
|
+ // $realBonusGl = 0;
|
|
|
+ // if( $this->_isCalcMonth ) {
|
|
|
+ // //查看是否复消300
|
|
|
+ // $monthPerfData = CalcCache::nowMonthPerf($userId, $this->_periodNum);
|
|
|
+ // $fxPvStatus = $monthPerfData['PV_PCS_FX'] >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE'];
|
|
|
+ // if ( $fxPvStatus ) {//加上本期和往期的共享和管理奖
|
|
|
+ // $monthSumData = CalcBonus::findUseSlaves()->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH', ['USER_ID'=>$userId, 'CALC_MONTH'=>$this->_calcYearMonth])->asArray()->one();
|
|
|
+ // $bonusGxSum = $monthSumData['BONUS_GX_SUM'] ?? 0;
|
|
|
+ // $bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
|
|
|
+ // $realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
|
|
|
+ // $realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
|
|
|
+ // $bonusReal += $realBonusGx + $realBonusGl;
|
|
|
+ // unset($monthSumData, $bonusGxSum, $bonusGlSum);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+
|
|
|
//没有共享和管理奖
|
|
|
$bonusReal = $bonus['BONUS_BD'] + $bonus['BONUS_TG'] + $bonus['BONUS_XF'] + $bonus['BONUS_YJ'] + $bonus['BONUS_QY'] + $bonus['BONUS_YC'] + $bonus['BONUS_YC_EXTRA'] + $bonus['BONUS_VIP'] + $standardBonus;
|
|
|
$realBonusGx = 0;
|
|
|
$realBonusGl = 0;
|
|
|
+ $realBonusBs = 0; // 蓝星管理奖. BlueStar
|
|
|
+ $blueStartAmount = 0;
|
|
|
+ $buleStartOriBonus = 0;
|
|
|
+ $buleStartManageTax = 0;
|
|
|
+ $exchangePoints = 0; // 蓝星奖管理奖. 产生的兑换积分
|
|
|
if( $this->_isCalcMonth ) {
|
|
|
//查看是否复消300
|
|
|
$monthPerfData = CalcCache::nowMonthPerf($userId, $this->_periodNum);
|
|
|
$fxPvStatus = $monthPerfData['PV_PCS_FX'] >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE'];
|
|
|
- if ( $fxPvStatus ) {//加上本期和往期的共享和管理奖
|
|
|
- $monthSumData = CalcBonus::findUseSlaves()->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH', ['USER_ID'=>$userId, 'CALC_MONTH'=>$this->_calcYearMonth])->asArray()->one();
|
|
|
+ // BONUS_REAL 字段是发到用户的真实奖金
|
|
|
+ if ( $fxPvStatus ) {
|
|
|
+ // 管理奖改成了蓝星奖,但是对于用户来说依旧叫管理奖.字段改成bs.
|
|
|
+ // 因为管理奖(即蓝星奖,是用存储过程计算的,则此处直接取AR_CALC_BONUS_BS表中计算的结果数据使用,
|
|
|
+ // 并将管理奖结果同步到当前结算月的CalcBonus中)
|
|
|
+ // 由于单独奖金流水记录每次都插入,所以倒叙找最新的数据.
|
|
|
+ $userBS = CalcBonusBS::find()
|
|
|
+ ->where(
|
|
|
+ 'PERIOD_NUM=:PERIOD_NUM AND USER_ID=:USER_ID',
|
|
|
+ [
|
|
|
+ ':PERIOD_NUM' => $this->_periodNum,
|
|
|
+ ':USER_ID' => $userId
|
|
|
+ ]
|
|
|
+ )
|
|
|
+ ->select('AMOUNT,ORI_BONUS,MANAGE_TAX,LEVEL_ID,PRODUCT_POINT')
|
|
|
+ ->limit(1)
|
|
|
+ ->orderBy('CREATED_AT DESC')
|
|
|
+ ->asArray()
|
|
|
+ ->all();
|
|
|
+ $userBS = is_array($userBS) ? reset($userBS) : [];
|
|
|
+ $blueStartAmount = isset($userBS['AMOUNT']) && !empty($userBS['AMOUNT']) ? $userBS['AMOUNT'] : 0; // 奖金
|
|
|
+ $buleStartOriBonus = isset($userBS['ORI_BONUS']) && !empty($userBS['ORI_BONUS']) ? $userBS['ORI_BONUS'] : 0; // 原奖金
|
|
|
+ // $buleStartManageTax = isset($userBS['MANAGE_TAX']) && !empty($userBS['MANAGE_TAX']) ? $userBS['MANAGE_TAX'] : 0; // 管理费
|
|
|
+ $monthSumData = CalcBonus::findUseSlaves()
|
|
|
+ ->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')
|
|
|
+ ->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH',
|
|
|
+ [
|
|
|
+ 'USER_ID'=>$userId,
|
|
|
+ 'CALC_MONTH'=>$this->_calcYearMonth
|
|
|
+ ]
|
|
|
+ )
|
|
|
+ ->asArray()
|
|
|
+ ->one();
|
|
|
$bonusGxSum = $monthSumData['BONUS_GX_SUM'] ?? 0;
|
|
|
$bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
|
|
|
$realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
|
|
|
$realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
|
|
|
- $bonusReal += $realBonusGx + $realBonusGl;
|
|
|
+ $realBonusBs = $blueStartAmount; // 蓝星奖直接取数据库中算好的值PRODUCT_POINT
|
|
|
+ $bonusReal += $realBonusGx + $realBonusBs + $realBonusGl;
|
|
|
+ $exchangePoints = isset($userBS['PRODUCT_POINT']) && !empty($userBS['PRODUCT_POINT']) ? $userBS['PRODUCT_POINT'] : 0; // 兑换积分
|
|
|
+
|
|
|
+ $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] + $buleStartOriBonus; // 管理奖在存储过程计算,这里单独加上管理奖(即蓝星奖)
|
|
|
unset($monthSumData, $bonusGxSum, $bonusGlSum);
|
|
|
}
|
|
|
}
|
|
|
+ // if( $this->_isCalcMonth ) {
|
|
|
+ // // 将查看是否复消300的逻辑,改成月结时判断当前月有一周活跃则本月活跃
|
|
|
+ // // 1. 获取此业绩期的月份
|
|
|
+ // $periodInfo = Period::getInfoByPeriodNum($this->_periodNum);
|
|
|
+
|
|
|
+ // $calcMonth = $periodInfo['CALC_YEAR'].'-'.$periodInfo['CALC_MONTH']; // 2025-7
|
|
|
+ // // 获取此月的第一天和最后一天时间戳
|
|
|
+ // $fday = date('Y-m-01', strtotime($calcMonth));
|
|
|
+ // $lday = date('Y-m-d', strtotime("$fday +1 month -1 day"));
|
|
|
+ // $ftime = strtotime($fday);
|
|
|
+ // $ltime = strtotime($lday.' 23:59:59');
|
|
|
+ // // 2. 根据业绩期的月份,判断用户是否是活跃状态.
|
|
|
+ // $fxPvStatus = PerfActiveUser::findUseDbCalc()
|
|
|
+ // ->select('USER_ID')
|
|
|
+ // ->where("USER_ID=:USER_ID ", [':USER_ID' => $userId])
|
|
|
+ // ->andWhere(['or',
|
|
|
+ // [
|
|
|
+ // 'and',
|
|
|
+ // ['>=', 'SRATR_AT', $ftime],
|
|
|
+ // ['<=', 'SRATR_AT', $ltime]
|
|
|
+ // ],
|
|
|
+ // [
|
|
|
+ // 'and',
|
|
|
+ // ['>=', 'END_AT', $ftime],
|
|
|
+ // ['<=', 'END_AT', $ltime]
|
|
|
+ // ]
|
|
|
+ // ])
|
|
|
+ // ->asArray()
|
|
|
+ // ->all();
|
|
|
+ // if ( !empty($fxPvStatus) ) {//加上本期和往期的共享和管理奖
|
|
|
+ // $monthSumData = CalcBonus::findUseSlaves()->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH', ['USER_ID'=>$userId, 'CALC_MONTH'=>$this->_calcYearMonth])->asArray()->one();
|
|
|
+ // $bonusGxSum = $monthSumData['BONUS_GX_SUM'] ?? 0;
|
|
|
+ // $bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
|
|
|
+ // $realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
|
|
|
+ // $realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
|
|
|
+ // $bonusReal += $realBonusGx + $realBonusGl;
|
|
|
+ // unset($monthSumData, $bonusGxSum, $bonusGlSum);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
$result = [
|
|
|
'USER_ID' => $userId,
|
|
|
@@ -3010,6 +3341,7 @@ class BonusCalc extends BaseObject {
|
|
|
'LAST_REC_REAL_NAME' => $baseInfo['REC_REAL_NAME'],
|
|
|
'LAST_CON_USER_NAME' => $baseInfo['CON_USER_NAME'],
|
|
|
'LAST_CON_REAL_NAME' => $baseInfo['CON_REAL_NAME'],
|
|
|
+ 'EXCHANGE_POINTS' => $exchangePoints, // 兑换积分
|
|
|
// 'LAST_LOCATION' => $baseInfo['LOCATION'] ? $baseInfo['LOCATION'] : 1,
|
|
|
//@todo
|
|
|
'LAST_LOCATION' => 1,
|
|
|
@@ -3037,6 +3369,9 @@ class BonusCalc extends BaseObject {
|
|
|
'REAL_BONUS_GX' => $realBonusGx,
|
|
|
'ORI_BONUS_GL' => $bonus['ORI_BONUS_GL'],
|
|
|
'REAL_BONUS_GL' => $realBonusGl,
|
|
|
+ 'BONUS_BS' => $realBonusBs, // 新的管理奖金,即蓝星管理奖
|
|
|
+ 'ORI_BONUS_BS' => $buleStartOriBonus, // 蓝星管理奖金原奖金,即包含管理费
|
|
|
+ 'REAL_BONUS_BS' => $realBonusBs, // 实发蓝星管理奖金
|
|
|
'ORI_BONUS_GL_BD' => $bonus['ORI_BONUS_GL_BD'],
|
|
|
'ORI_BONUS_GL_FX' => $bonus['ORI_BONUS_GL_FX'],
|
|
|
'ORI_BONUS_QY' => $bonus['ORI_BONUS_QY'],
|