|
|
@@ -297,8 +297,7 @@ class BonusCalc extends BaseObject {
|
|
|
echo('奖金会员写入缓存完成,耗时:' . round($t19 - $t18, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
$this->_updatePercent(70);
|
|
|
|
|
|
- //奖金写库
|
|
|
- // TODO:这里增加新的奖金入库操作.
|
|
|
+ //奖金写库 -- 注意,必须在月奖会员加入缓存之后loopMonthBonusUserFromDbToCache()
|
|
|
$this->loopBonusUsers();
|
|
|
// 入库完成,将各个奖金计算流水会员聘级,更新成蓝星奖当时计算的聘级
|
|
|
$this->loopCalcBlueEmpLv();
|
|
|
@@ -1643,15 +1642,13 @@ class BonusCalc extends BaseObject {
|
|
|
|
|
|
|
|
|
// //扣除相应的复消积分和管理费
|
|
|
- $deductData = $this->deduct($bonusUserId, $bonus);
|
|
|
- CalcCache::bonus($bonusUserId, $this->_periodNum, 'BONUS_GX', $bonus, $deductData,'',true);
|
|
|
-
|
|
|
- //
|
|
|
- // 非月节点,共享奖实发覆盖成0. 只有月节点期的时候,才sum一下总共享奖原奖金,再扣管理费和复消积分
|
|
|
- //CalcCache::bonus($bonusUserId, $this->_periodNum, 'BONUS_GX', $bonus);
|
|
|
+ // 共享奖调整,周共享奖信息,不扣除管理费和复消费积分
|
|
|
+ // $deductData = $this->deduct($bonusUserId, $bonus);
|
|
|
+ // CalcCache::bonus($bonusUserId, $this->_periodNum, 'BONUS_GX', $bonus, $deductData,'',true);
|
|
|
+ CalcCache::bonus($bonusUserId, $this->_periodNum, 'BONUS_GX', $bonus);
|
|
|
CalcCache::addHasMonthBonusUsers($bonusUserId, $this->_periodNum);
|
|
|
|
|
|
- //共享奖流水
|
|
|
+ //共享奖流水 rm1820 月总扣除复消积分和管理费,流水中不扣除.
|
|
|
$insertBonusData[] = [
|
|
|
'ID' => SnowFake::instance()->generateId(),
|
|
|
'USER_ID' => $bonusUserId,
|
|
|
@@ -1662,10 +1659,10 @@ class BonusCalc extends BaseObject {
|
|
|
'LAST_FROM_DEC_LV' => $userBaseInfo['DEC_LV'],
|
|
|
'LAST_FROM_EMP_LV' => $userEmpLevel,
|
|
|
'LAST_FROM_STATUS' => $userBaseInfo['STATUS'],
|
|
|
- 'AMOUNT' => $deductData['surplus'], // 20220524 共享奖金,前三期只展示原奖金,最后一期月节点,才展示实发还有复消积分
|
|
|
+ // 'AMOUNT' => 0,
|
|
|
'ORI_BONUS' => $bonus,
|
|
|
- 'RECONSUME_POINTS' => $deductData['reConsumePoints'],// 20220524 共享奖金,前三期只展示原奖金,最后一期月节点,才展示实发还有复消积分
|
|
|
- 'MANAGE_TAX' => $deductData['manageTax'], // 20220524 共享奖金,前三期只展示原奖金,最后一期月节点,才展示实发还有复消积分
|
|
|
+ // 'RECONSUME_POINTS' => 0,
|
|
|
+ // 'MANAGE_TAX' => 0,
|
|
|
'PERIOD_NUM' => $this->_periodNum,
|
|
|
'CALC_YEAR' => $this->_calcYear,
|
|
|
'CALC_MONTH' => $this->_calcYearMonth,
|
|
|
@@ -3215,7 +3212,7 @@ class BonusCalc extends BaseObject {
|
|
|
if( $reConsumePointsTotal < $reConsumePointsCap ) {
|
|
|
$reConsumePoints = $bonus * $this->_sysConfig['reConsumePointsPercent']['VALUE'] / 100;
|
|
|
|
|
|
- // 2022/06/07上限改成10000000
|
|
|
+ // 2022/06/07上限改成10000000 奖金乘以比例 上限1000 // 当月总复消积分 前三期加当前的
|
|
|
$reConsumePoints = min($reConsumePoints, $reConsumePointsCap-$reConsumePointsTotal);
|
|
|
}
|
|
|
unset($reConsumePointsTotal, $reConsumePointsCap);
|
|
|
@@ -3240,7 +3237,7 @@ class BonusCalc extends BaseObject {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 把往期有月奖金的会员加到本期有奖会员缓存列表中
|
|
|
+ * 把往期有月奖金的会员加到本期有奖会员缓存列表中
|
|
|
* @param int $offset
|
|
|
* @return bool
|
|
|
*/
|
|
|
@@ -3439,31 +3436,8 @@ class BonusCalc extends BaseObject {
|
|
|
$baseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
|
|
|
$perfData = CalcCache::nowPeriodPerf($userId, $this->_periodNum);
|
|
|
$empLv = $baseInfo['EMP_LV'];
|
|
|
-// if($this->_isCalcMonth){
|
|
|
-// $empLv = $this->nowMonthPerfData($userId)['LAST_EMP_LV'];
|
|
|
-// }
|
|
|
$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;
|
|
|
@@ -3479,26 +3453,16 @@ class BonusCalc extends BaseObject {
|
|
|
$blueBonusGLSF = 0;//拆分蓝星管理奖,实发
|
|
|
$blueBonusYJSF = 0;//拆分蓝星业绩奖,实发
|
|
|
|
|
|
+ // rm1820 共享奖周算且不计入总原奖金中,所以需要在总原奖金中去掉
|
|
|
+ $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] - $bonus['ORI_BONUS_GX'];
|
|
|
+ $oriGxMonthBonus = 0; // 月共享奖金,结算月之和原总金额
|
|
|
+ $monthGxReal = $monthGxManageTax = $monthGxpoint = 0;
|
|
|
+ $bonus['BONUS_GX'] = 0; // 以前的周共享奖实发金额,新版本每周不发,不扣除复消积分管理费,所以这里给0
|
|
|
if( $this->_isCalcMonth ) {
|
|
|
- // 查看是否复消300
|
|
|
- // $monthPerfData = CalcCache::nowMonthPerf($userId, $this->_periodNum);
|
|
|
- // $monthPerf = $monthPerfData['PV_PCS_FX'];
|
|
|
- // // $fxPvStatus 改成月报单+复消之和是否300
|
|
|
- // $decPvInfo = PerfPeriod::findUseSlaves()->select('SUM(PV_PCS_ZC) AS ZC_SUM')
|
|
|
- // ->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH', ['USER_ID'=>$userId, 'CALC_MONTH'=>$this->_calcYearMonth])
|
|
|
- // ->asArray()
|
|
|
- // ->one();
|
|
|
- // $decPv = isset($decPvInfo['ZC_SUM']) && $decPvInfo['ZC_SUM'] > 0 ? $decPvInfo['ZC_SUM'] : 0;
|
|
|
- // $totalCheckPv = $monthPerf + $decPv;
|
|
|
- // $fxPvStatus = $totalCheckPv >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE'];
|
|
|
- // 逻辑改成,用户此月累计消费总额大于等于配置,取消订单类型的配置
|
|
|
$fxPvStatus = $this->_isMonthPerfLimit($userId);
|
|
|
// BONUS_REAL 字段是发到用户的真实奖金
|
|
|
if ( $fxPvStatus ) {
|
|
|
- // 管理奖改成了蓝星奖,但是对于用户来说依旧叫管理奖.字段改成bs.
|
|
|
- // 因为管理奖(即蓝星奖,是用存储过程计算的,则此处直接取AR_CALC_BONUS_BS表中计算的结果数据使用,
|
|
|
- // 并将管理奖结果同步到当前结算月的CalcBonus中)
|
|
|
- // 由于单独奖金流水记录每次都插入,所以倒叙找最新的数据.
|
|
|
+ // 月节点,获取蓝星管理奖数据
|
|
|
$userBS = CalcBonusBS::find()
|
|
|
->where(
|
|
|
'PERIOD_NUM=:PERIOD_NUM AND USER_ID=:USER_ID',
|
|
|
@@ -3515,8 +3479,6 @@ class BonusCalc extends BaseObject {
|
|
|
$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; // 管理费
|
|
|
- // 20220524 共享奖金,前三期只展示原奖金,最后一期月节点,才展示实发还有复消积分.获取总gx原奖金,一起扣除管理费和复消积分
|
|
|
|
|
|
$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; // 拆分业绩奖原奖金
|
|
|
@@ -3525,8 +3487,9 @@ class BonusCalc extends BaseObject {
|
|
|
$blueBonusYJSF = isset($userBS['ORI_BONUS_BU_YJSF']) && !empty($userBS['ORI_BONUS_BU_YJSF']) ? $userBS['ORI_BONUS_BU_YJSF'] : 0; // 拆分业绩奖 实发
|
|
|
|
|
|
//$blueStartAmount = $blueBonusGLSF + $blueBonusYJSF; // 总实发,管理奖实发+业绩奖实发
|
|
|
+ #rm1820 共享奖金月节点合起来原奖金一起扣除管理费和复消积分
|
|
|
$monthSumData = CalcBonus::findUseSlaves()
|
|
|
- ->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')
|
|
|
+ ->select('SUM(ORI_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,
|
|
|
@@ -3535,89 +3498,40 @@ class BonusCalc extends BaseObject {
|
|
|
)
|
|
|
->asArray()
|
|
|
->one();
|
|
|
- // 因为非月节点周期,未发放复消积分.所以,需要结算月满足最低消费的时候,一起发放
|
|
|
- $gxPointMonth = CalcBonusGX::findUseSlaves()
|
|
|
- ->select('SUM(RECONSUME_POINTS) AS FLOW_GX_POINT, SUM(MANAGE_TAX) AS FLOW_MANAGE_TAX')
|
|
|
- ->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH AND PERIOD_NUM!=:PERIOD_NUM',
|
|
|
- [
|
|
|
- 'USER_ID'=>$userId,
|
|
|
- 'CALC_MONTH'=>$this->_calcYearMonth,
|
|
|
- 'PERIOD_NUM' => $this->_periodNum
|
|
|
- ]
|
|
|
- )
|
|
|
- ->asArray()
|
|
|
- ->one();
|
|
|
- // 如果已发放了复消积分,则不能再累加之前的了
|
|
|
$bonusGxSum = $monthSumData['BONUS_GX_SUM'] ?? 0;
|
|
|
+ $bonusGxSum = $bonus['ORI_BONUS_GX'] + $bonusGxSum;
|
|
|
+ $oriGxMonthBonus = $bonusGxSum;
|
|
|
+ if ($bonusGxSum > 0) {
|
|
|
+ // 扣除管理费和复消积分
|
|
|
+ //扣除相应的复消积分和管理费
|
|
|
+ $deductData = $this->deduct($userId, $bonusGxSum);
|
|
|
+ $monthGxReal = $deductData['surplus']; // 扣除管理费和复消积分后的实发金额
|
|
|
+ $monthGxManageTax = $deductData['manageTax']; // 管理费
|
|
|
+ $monthGxpoint = $deductData['reConsumePoints'];// 复消积分
|
|
|
+ }
|
|
|
+ $realBonusGx = $monthGxReal;
|
|
|
$bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
|
|
|
- $bonusPoint = $gxPointMonth['FLOW_GX_POINT'] ?? 0;
|
|
|
- $bonusManage = $gxPointMonth['FLOW_MANAGE_TAX'] ?? 0;
|
|
|
- $bonus['RECONSUME_POINTS'] = $bonus['RECONSUME_POINTS'] + $bonusPoint;
|
|
|
- $bonus['MANAGE_TAX'] = $bonus['MANAGE_TAX'] + $bonusManage;
|
|
|
- $realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
|
|
|
+ $bonus['RECONSUME_POINTS'] = $bonus['RECONSUME_POINTS'] + $monthGxpoint;
|
|
|
+ $bonus['MANAGE_TAX'] = $bonus['MANAGE_TAX'] + $monthGxManageTax;
|
|
|
$realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
|
|
|
$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'] - $blueBonusGL - $blueBonusYJ;
|
|
|
+ // 共享奖最后一起算,所以总原奖金中,需要加上整个月的数据
|
|
|
+ $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] + $oriGxMonthBonus;
|
|
|
} else {
|
|
|
// 蓝星奖原奖金在扣管理费的时候被加入到了BONUS_TOTAL,需要再减去原奖金
|
|
|
$oriBonusBs = isset($bonus['ORI_BONUS_BS']) && $bonus['ORI_BONUS_BS'] > 0 ? $bonus['ORI_BONUS_BS'] : 0;
|
|
|
// 如果未满足,则复消积分,应该不能发放
|
|
|
- $bonus['RECONSUME_POINTS'] = $bonus['RECONSUME_POINTS']- $bonus['GX_RECONSUME_POINTS'];
|
|
|
- $bonus['MANAGE_TAX'] = $bonus['MANAGE_TAX'] - $bonus['GX_MANAGE_TAX'];
|
|
|
$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;
|
|
|
}
|
|
|
- } else {
|
|
|
- // 非月节点,共享奖金不发放复消积分和奖金
|
|
|
- $bonus['RECONSUME_POINTS'] = $bonus['RECONSUME_POINTS']- $bonus['GX_RECONSUME_POINTS'];
|
|
|
- $bonus['MANAGE_TAX'] = $bonus['MANAGE_TAX'] - $bonus['GX_MANAGE_TAX'];
|
|
|
- }
|
|
|
- // 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,
|
|
|
'LAST_USER_NAME' => $baseInfo['USER_NAME'],
|
|
|
@@ -3663,6 +3577,9 @@ class BonusCalc extends BaseObject {
|
|
|
'ORI_BONUS_YJ_BD' => $bonus['ORI_BONUS_YJ_BD'],
|
|
|
'ORI_BONUS_YJ_FX' => $bonus['ORI_BONUS_YJ_FX'],
|
|
|
'ORI_BONUS_GX' => $bonus['ORI_BONUS_GX'],
|
|
|
+ 'ORI_MONTH_GX_BONUS' => $oriGxMonthBonus,
|
|
|
+ 'GX_MANAGE_TAX' => $monthGxManageTax, //月共享奖管理费
|
|
|
+ 'GX_RECONSUME_POINTS' => $monthGxpoint, //月共享奖复消积分
|
|
|
'REAL_BONUS_GX' => $realBonusGx,
|
|
|
'ORI_BONUS_GL' => $bonus['ORI_BONUS_GL'],
|
|
|
'REAL_BONUS_GL' => $realBonusGl,
|