|
|
@@ -281,6 +281,8 @@ class BonusCalc extends BaseObject {
|
|
|
$this->calcBsProcedure();
|
|
|
// 将有蓝星管理奖金的用户加入到有奖金缓存用户中
|
|
|
$this->calcBonusBsGL();
|
|
|
+ $this->calcBonusBsGLCF();
|
|
|
+ $this->calcBonusBsYJCF();
|
|
|
$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);
|
|
|
@@ -292,7 +294,7 @@ class BonusCalc extends BaseObject {
|
|
|
$this->_updatePercent(70);
|
|
|
|
|
|
//奖金写库
|
|
|
- // 这里增加新的奖金入库操作.
|
|
|
+ // TODO:这里增加新的奖金入库操作.
|
|
|
$this->loopBonusUsers();
|
|
|
// 入库完成,将各个奖金计算流水会员聘级,更新成蓝星奖当时计算的聘级
|
|
|
$this->loopCalcBlueEmpLv();
|
|
|
@@ -1625,8 +1627,9 @@ class BonusCalc extends BaseObject {
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
- * 蓝星管理奖金
|
|
|
+ * 蓝星管理奖金未拆分
|
|
|
* @param int $offset
|
|
|
* @return bool
|
|
|
* @throws \yii\db\Exception
|
|
|
@@ -1654,7 +1657,8 @@ class BonusCalc extends BaseObject {
|
|
|
//扣除相应的复消积分和管理费
|
|
|
$deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS']);
|
|
|
// 把对碰后的奖金存入缓存中
|
|
|
- CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS', $user['ORI_BONUS'], $deductData);
|
|
|
+ // CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS', $user['ORI_BONUS'], $deductData);
|
|
|
+ CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS', $user['ORI_BONUS']);
|
|
|
$realBonusBs = $deductData['surplus']; // 扣除管理费和复消积分后的实发蓝星奖金
|
|
|
$manageTax = $deductData['manageTax']; // 管理费
|
|
|
$point = $deductData['reConsumePoints'];// 复消积分
|
|
|
@@ -1665,18 +1669,135 @@ class BonusCalc extends BaseObject {
|
|
|
$manageTax = 0; // 管理费
|
|
|
$point = 0;// 复消积分
|
|
|
}
|
|
|
+
|
|
|
+ // 更新蓝星奖金存储过程的实发金额数据
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 蓝星管理奖金
|
|
|
+ * @param int $offset
|
|
|
+ * @return bool
|
|
|
+ * @throws \yii\db\Exception
|
|
|
+ */
|
|
|
+ public function calcBonusBsGLCF(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);
|
|
|
+
|
|
|
+
|
|
|
+ $fxStatus = $this->_isMonthPerfLimit($user['USER_ID']);
|
|
|
+ if ($fxStatus) {
|
|
|
+ //扣除相应的复消积分和管理费
|
|
|
+ $deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS_BU_GL']);
|
|
|
+ // 把对碰后的奖金存入缓存中
|
|
|
+ CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BU_GL', $user['ORI_BONUS_BU_GL'], $deductData);
|
|
|
+ $realBonusBs = $deductData['surplus']; // 扣除管理费和复消积分后的实发蓝星奖金
|
|
|
+ $manageTax = $deductData['manageTax']; // 管理费
|
|
|
+ $point = $deductData['reConsumePoints'];// 复消积分
|
|
|
+ //管理奖管理费存入缓存
|
|
|
+ //CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BU_GLKC', $manageTax);
|
|
|
+ } else {
|
|
|
+ // 如果未满足月消费,则不扣除管理费和复消积分了
|
|
|
+ CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BU_GL', $user['ORI_BONUS_BU_GL']);
|
|
|
+ $realBonusBs = $user['ORI_BONUS_BU_GL'];
|
|
|
+ $manageTax = 0; // 管理费
|
|
|
+ $point = 0;// 复消积分
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
// 更新蓝星奖金存储过程的实发金额数据
|
|
|
- CalcBonusBS::updateAll(['AMOUNT' => $realBonusBs, 'MANAGE_TAX' => $manageTax, 'RECONSUME_POINTS' => $point],
|
|
|
+ CalcBonusBS::updateAll(['ORI_BONUS_BU_GLSF' => $realBonusBs, 'ORI_BONUS_BU_GLKC' => $manageTax, 'ORI_BONUS_BU_GLFX' => $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);
|
|
|
+ return $this->calcBonusBsGLCF($offset + $this->_limit);
|
|
|
}
|
|
|
unset($allData);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 蓝星业绩奖金
|
|
|
+ * @param int $offset
|
|
|
+ * @return bool
|
|
|
+ * @throws \yii\db\Exception
|
|
|
+ */
|
|
|
+ public function calcBonusBsYJCF(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);
|
|
|
+
|
|
|
+
|
|
|
+ $fxStatus = $this->_isMonthPerfLimit($user['USER_ID']);
|
|
|
+ if ($fxStatus) {
|
|
|
+ //扣除相应的复消积分和管理费
|
|
|
+ $deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS_BU_YJ']);
|
|
|
+ // 把对碰后的奖金存入缓存中
|
|
|
+ CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BU_YJ', $user['ORI_BONUS_BU_YJ'], $deductData);
|
|
|
+ $realBonusBs = $deductData['surplus']; // 扣除管理费和复消积分后的实发蓝星奖金
|
|
|
+ $manageTax = $deductData['manageTax']; // 管理费
|
|
|
+ $point = $deductData['reConsumePoints'];// 复消积分
|
|
|
+ //管理奖管理费存入缓存
|
|
|
+ //CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BU_YJKC', $manageTax);
|
|
|
+ } else {
|
|
|
+ // 如果未满足月消费,则不扣除管理费和复消积分了
|
|
|
+ CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BU_YJ', $user['ORI_BONUS_BU_YJ']);
|
|
|
+ $realBonusBs = $user['ORI_BONUS_BU_YJ'];
|
|
|
+ $manageTax = 0; // 管理费
|
|
|
+ $point = 0;// 复消积分
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 更新蓝星奖金存储过程的实发金额数据
|
|
|
+ CalcBonusBS::updateAll(['ORI_BONUS_BU_YJSF' => $realBonusBs, 'ORI_BONUS_BU_YJKC' => $manageTax, 'ORI_BONUS_BU_YJFX' => $point],
|
|
|
+ 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
|
|
|
+ [':USER_ID' => $user['USER_ID'], ':PERIOD_NUM' => $this->_periodNum]);
|
|
|
+ }
|
|
|
+ return $this->calcBonusBsYJCF($offset + $this->_limit);
|
|
|
+ }
|
|
|
+ unset($allData);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 报单管理奖
|
|
|
* @param int $offset
|
|
|
@@ -3008,8 +3129,8 @@ class BonusCalc extends BaseObject {
|
|
|
if( $reConsumePointsTotal < $reConsumePointsCap ) {
|
|
|
$reConsumePoints = $bonus * $this->_sysConfig['reConsumePointsPercent']['VALUE'] / 100;
|
|
|
|
|
|
- // 2022/05/17 复消积分去掉限制,config reConsumePointsMonthCap上限改成大值如5000000
|
|
|
- //$reConsumePoints = min($reConsumePoints, $reConsumePointsCap-$reConsumePointsTotal);
|
|
|
+ // 2022/06/07上限改成10000000
|
|
|
+ $reConsumePoints = min($reConsumePoints, $reConsumePointsCap-$reConsumePointsTotal);
|
|
|
}
|
|
|
unset($reConsumePointsTotal, $reConsumePointsCap);
|
|
|
|
|
|
@@ -3043,18 +3164,23 @@ class BonusCalc extends BaseObject {
|
|
|
}
|
|
|
|
|
|
$allData = CalcMonthBonusUser::findUseDbCalc()->where('CALC_MONTH=:CALC_MONTH', [':CALC_MONTH' => $this->_calcYearMonth])->offset($offset)->limit($this->_limit)->asArray()->all();
|
|
|
+
|
|
|
if ( $allData ) {
|
|
|
foreach ($allData as $everyData) {
|
|
|
+
|
|
|
CalcCache::addHasBonusUsers($everyData['USER_ID'], $this->_periodNum);
|
|
|
|
|
|
unset($everyData);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
unset($allData);
|
|
|
+
|
|
|
$this->loopMonthBonusUserFromDbToCache($offset + $this->_limit);
|
|
|
}
|
|
|
|
|
|
unset($allData);
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -3106,6 +3232,7 @@ class BonusCalc extends BaseObject {
|
|
|
// 给用户发送兑换积分,也需要进行调整查看。
|
|
|
// CalcCache::addHasBonusUsers($everyData['USER_ID'], $this->_periodNum);
|
|
|
$allData = CalcCache::getHasBonusUsers($this->_periodNum, $offset, $this->_limit);
|
|
|
+
|
|
|
if($allData){
|
|
|
$insertDataBonus = [];
|
|
|
foreach($allData as $userId){
|
|
|
@@ -3116,6 +3243,8 @@ class BonusCalc extends BaseObject {
|
|
|
|
|
|
unset($userId, $tempBonusData);
|
|
|
}
|
|
|
+// echo json_encode($insertDataBonus);
|
|
|
+// exit();
|
|
|
CalcBonus::batchInsert($insertDataBonus);
|
|
|
|
|
|
unset($insertDataBonus, $allData);
|
|
|
@@ -3250,7 +3379,7 @@ class BonusCalc extends BaseObject {
|
|
|
|
|
|
|
|
|
//没有共享和管理奖
|
|
|
- $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;
|
|
|
+ $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 + $bonus['BONUS_BU_GL']+ $bonus['BONUS_BU_YJ'];
|
|
|
$realBonusGx = 0;
|
|
|
$realBonusGl = 0;
|
|
|
$realBonusBs = 0; // 蓝星管理奖. BlueStar
|
|
|
@@ -3258,6 +3387,12 @@ class BonusCalc extends BaseObject {
|
|
|
$buleStartOriBonus = 0;
|
|
|
$buleStartManageTax = 0;
|
|
|
$exchangePoints = 0; // 蓝星奖管理奖. 产生的兑换积分
|
|
|
+
|
|
|
+ $blueBonusGL = 0; //拆分蓝星管理奖,原奖金
|
|
|
+ $blueBonusYJ = 0; //拆分蓝星业绩奖,原奖金
|
|
|
+ $blueBonusGLSF = 0;//拆分蓝星管理奖,实发
|
|
|
+ $blueBonusYJSF = 0;//拆分蓝星业绩奖,实发
|
|
|
+
|
|
|
if( $this->_isCalcMonth ) {
|
|
|
// 查看是否复消300
|
|
|
// $monthPerfData = CalcCache::nowMonthPerf($userId, $this->_periodNum);
|
|
|
@@ -3286,15 +3421,23 @@ class BonusCalc extends BaseObject {
|
|
|
':USER_ID' => $userId
|
|
|
]
|
|
|
)
|
|
|
- ->select('AMOUNT,ORI_BONUS,MANAGE_TAX,LEVEL_ID,PRODUCT_POINT')
|
|
|
+ ->select('AMOUNT,ORI_BONUS,MANAGE_TAX,LEVEL_ID,PRODUCT_POINT,ORI_BONUS_BU_YJ,ORI_BONUS_BU_YJSF,ORI_BONUS_BU_GL,ORI_BONUS_BU_GLSF')
|
|
|
->limit(1)
|
|
|
->orderBy('CREATED_AT DESC')
|
|
|
->asArray()
|
|
|
->all();
|
|
|
$userBS = is_array($userBS) ? reset($userBS) : [];
|
|
|
- $blueStartAmount = isset($userBS['AMOUNT']) && !empty($userBS['AMOUNT']) ? $userBS['AMOUNT'] : 0; // 奖金
|
|
|
+ // $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; // 管理费
|
|
|
+
|
|
|
+ $blueBonusGL = isset($userBS['ORI_BONUS_BU_GL']) && !empty($userBS['ORI_BONUS_BU_GL']) ? $userBS['ORI_BONUS_BU_GL'] : 0; // 拆分管理奖原奖金
|
|
|
+ $blueBonusYJ = isset($userBS['ORI_BONUS_BU_YJ']) && !empty($userBS['ORI_BONUS_BU_YJ']) ? $userBS['ORI_BONUS_BU_YJ'] : 0; // 拆分业绩奖原奖金
|
|
|
+
|
|
|
+ $blueBonusGLSF = isset($userBS['ORI_BONUS_BU_GLSF']) && !empty($userBS['ORI_BONUS_BU_GLSF']) ? $userBS['ORI_BONUS_BU_GLSF'] : 0; // 拆分管理奖 实发
|
|
|
+ $blueBonusYJSF = isset($userBS['ORI_BONUS_BU_YJSF']) && !empty($userBS['ORI_BONUS_BU_YJSF']) ? $userBS['ORI_BONUS_BU_YJSF'] : 0; // 拆分业绩奖 实发
|
|
|
+
|
|
|
+ $blueStartAmount = $blueBonusGLSF + $blueBonusYJSF; // 总实发,管理奖实发+业绩奖实发
|
|
|
$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',
|
|
|
@@ -3309,14 +3452,19 @@ class BonusCalc extends BaseObject {
|
|
|
$bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
|
|
|
$realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
|
|
|
$realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
|
|
|
- $realBonusBs = $blueStartAmount; // 蓝星奖直接取数据库中算好的值PRODUCT_POINT
|
|
|
+ $realBonusBs = $blueStartAmount;
|
|
|
$bonusReal += $realBonusGx + $realBonusBs + $realBonusGl;
|
|
|
$exchangePoints = isset($userBS['PRODUCT_POINT']) && !empty($userBS['PRODUCT_POINT']) ? $userBS['PRODUCT_POINT'] : 0; // 兑换积分
|
|
|
unset($monthSumData, $bonusGxSum, $bonusGlSum);
|
|
|
+ //因为调用两次缓存 所以需要减去多余的蓝星总奖金
|
|
|
+ $oriBonusBs = isset($bonus['ORI_BONUS_BS']) && $bonus['ORI_BONUS_BS'] > 0 ? $bonus['ORI_BONUS_BS'] : 0;
|
|
|
+ $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] - $oriBonusBs;
|
|
|
} else {
|
|
|
// 蓝星奖原奖金在扣管理费的时候被加入到了BONUS_TOTAL,需要再减去原奖金
|
|
|
$oriBonusBs = isset($bonus['ORI_BONUS_BS']) && $bonus['ORI_BONUS_BS'] > 0 ? $bonus['ORI_BONUS_BS'] : 0;
|
|
|
- $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] - $oriBonusBs;
|
|
|
+ $oriBonusBsYJCF = isset($bonus['ORI_BONUS_BU_YJ']) && $bonus['ORI_BONUS_BU_YJ'] > 0 ? $bonus['ORI_BONUS_BU_YJ'] : 0;
|
|
|
+ $oriBonusBsGLCF = isset($bonus['ORI_BONUS_BU_GL']) && $bonus['ORI_BONUS_BU_GL'] > 0 ? $bonus['ORI_BONUS_BU_GL'] : 0;
|
|
|
+ $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] - $oriBonusBs - $oriBonusBsYJCF - $oriBonusBsGLCF;
|
|
|
}
|
|
|
}
|
|
|
// if( $this->_isCalcMonth ) {
|
|
|
@@ -3419,6 +3567,17 @@ class BonusCalc extends BaseObject {
|
|
|
'ORI_BONUS_VIP' => $bonus['ORI_BONUS_VIP'],
|
|
|
'ORI_BONUS_STANDARD' => $standardBonus,
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ // 'ORI_BONUS_BU_GLSF' => $bonus['BONUS_BU_GL'],
|
|
|
+ 'ORI_BONUS_BU_GLSF' => $blueBonusGLSF,
|
|
|
+ 'ORI_BONUS_BU_GL' => $blueBonusGL,
|
|
|
+
|
|
|
+
|
|
|
+ 'ORI_BONUS_BU_YJ' => $blueBonusYJ,
|
|
|
+ // 'ORI_BONUS_BU_YJSF' => $bonus['BONUS_BU_YJ'],
|
|
|
+ 'ORI_BONUS_BU_YJSF' => $blueBonusYJSF,
|
|
|
+
|
|
|
//以下没有用
|
|
|
'BONUS_FW' => 0,
|
|
|
'BONUS_FX' => $bonus['BONUS_FX'],
|