|
|
@@ -40,6 +40,9 @@ use common\models\CalcBonusYJ;
|
|
|
use common\models\CalcMonthBonusUser;
|
|
|
use common\models\Config;
|
|
|
use common\models\FlowDeductZR;
|
|
|
+use common\models\Order;
|
|
|
+use common\models\OrderGoods;
|
|
|
+use common\models\OrderShop;
|
|
|
use common\models\PerfCompany;
|
|
|
use common\models\PerfMonth;
|
|
|
use common\models\PerfPeriod;
|
|
|
@@ -51,6 +54,7 @@ use common\models\EmployLevel;
|
|
|
use common\models\FlowBonus;
|
|
|
use common\models\PerfActiveUser;
|
|
|
use common\models\ScoreMonth;
|
|
|
+use common\models\ShopGoods;
|
|
|
use common\models\StarCrownLevel;
|
|
|
use common\models\User;
|
|
|
use common\models\UserInfo;
|
|
|
@@ -840,42 +844,71 @@ class BonusCalc extends BaseObject {
|
|
|
unset($perfData, $decRoleBonusFrom);
|
|
|
if ( $validPvPcs <= 0 ) continue;
|
|
|
|
|
|
- $this->loopRelationParentDo($userId, function ($parent) use($userId, $validPvPcs){
|
|
|
-
|
|
|
- //判断parent的报单中心级别 和 服务奖比例
|
|
|
- $bonusUserId = $parent['PARENT_UID'];
|
|
|
- //计算级别之后更新过userInfo的缓存,缓存中级别发生了变化
|
|
|
- $bonusUserInfo = CalcCache::getUserInfo($bonusUserId, $this->_periodNum);
|
|
|
- $isDec = $bonusUserInfo['IS_DEC'];
|
|
|
- if($isDec == 0) return self::LOOP_CONTINUE;
|
|
|
- $decRoleId = $bonusUserInfo['DEC_ROLE_ID'];
|
|
|
- if( !$decRoleId ) return self::LOOP_CONTINUE;
|
|
|
- if( !isset($this->_decRoleConfig[$decRoleId]) ) return self::LOOP_CONTINUE;
|
|
|
-
|
|
|
- $parentDecRoleLevel = $this->_decRoleConfig[$decRoleId];
|
|
|
- $parentFwBonusPercent = $parentDecRoleLevel['FW_BONUS_PERCENT'] ?? 0;
|
|
|
- $cacheMaxPercent = CalcCache::fwMaxBonusPercent($userId, $this->_periodNum);
|
|
|
- $diffPercent = $parentFwBonusPercent - $cacheMaxPercent;
|
|
|
- if( $diffPercent <= 0 ) return self::LOOP_CONTINUE;
|
|
|
-
|
|
|
- $fwBonus = $validPvPcs * $diffPercent / 100;
|
|
|
- if( $fwBonus <= 0 ) return self::LOOP_CONTINUE;
|
|
|
-
|
|
|
- //给本人添加服务奖比例
|
|
|
- CalcCache::fwMaxBonusPercent($userId, $this->_periodNum, $parentFwBonusPercent);
|
|
|
- //记录奖金和奖金来源到缓存 并实现在缓存中奖金累加
|
|
|
- CalcCache::saveFwBonusList($bonusUserId, $this->_periodNum, $fwBonus, ['fromUid'=>$userId, 'fromPvPcs'=>$validPvPcs]);
|
|
|
- CalcCache::addHasFwBonusUsers($bonusUserId, $this->_periodNum);
|
|
|
+ // 查询会员产生时,填写的报单中心
|
|
|
+ $bonusUserId = DecOrder::find()->where('TO_USER_ID=:TO_USER_ID', [':TO_USER_ID' => $userId])->select('DEC_ID')->column();
|
|
|
+ echo 'BonusCalcFw. ' . json_encode(['bonusCalc', $userId, $bonusUserId]);
|
|
|
+ //判断parent的报单中心级别 和 服务奖比例
|
|
|
+ //计算级别之后更新过userInfo的缓存,缓存中级别发生了变化
|
|
|
+ $bonusUserInfo = CalcCache::getUserInfo($bonusUserId, $this->_periodNum);
|
|
|
+ $isDec = $bonusUserInfo['IS_DEC'];
|
|
|
+ if ($isDec == 0) {
|
|
|
+ return self::LOOP_CONTINUE; // 如果不是报单中心则跳过循环
|
|
|
+ }
|
|
|
|
|
|
- //达到最大的比例就不在向上找了
|
|
|
-// if( $parentFwBonusPercent >= $maxLevelPercent ) return self::LOOP_FINISH;
|
|
|
- unset($bonusUserId, $bonusUserInfo, $isDec, $decRoleId, $parentDecRoleLevel, $parentFwBonusPercent, $cacheMaxPercent, $diffPercent, $fwBonus);
|
|
|
- });
|
|
|
+ $decRoleId = $bonusUserInfo['DEC_ROLE_ID'];
|
|
|
+ if( !$decRoleId ) return self::LOOP_CONTINUE;
|
|
|
+ if( !isset($this->_decRoleConfig[$decRoleId]) ) return self::LOOP_CONTINUE;
|
|
|
+
|
|
|
+ // 取报单中心级别对应的拿奖比例
|
|
|
+ $parentDecRoleLevel = $this->_decRoleConfig[$decRoleId];
|
|
|
+ $parentFwBonusPercent = $parentDecRoleLevel['FW_BONUS_PERCENT'] ?? 0;
|
|
|
+ $cacheMaxPercent = CalcCache::fwMaxBonusPercent($userId, $this->_periodNum);
|
|
|
+ $diffPercent = $parentFwBonusPercent - $cacheMaxPercent;
|
|
|
+ if( $diffPercent <= 0 ) return self::LOOP_CONTINUE;
|
|
|
+
|
|
|
+ $fwBonus = $validPvPcs * $diffPercent / 100;
|
|
|
+ if( $fwBonus <= 0 ) return self::LOOP_CONTINUE;
|
|
|
+
|
|
|
+ //给本人添加服务奖比例
|
|
|
+ CalcCache::fwMaxBonusPercent($userId, $this->_periodNum, $parentFwBonusPercent);
|
|
|
+ //记录奖金和奖金来源到缓存 并实现在缓存中奖金累加
|
|
|
+ CalcCache::saveFwBonusList($bonusUserId, $this->_periodNum, $fwBonus, ['fromUid'=>$userId, 'fromPvPcs'=>$validPvPcs]);
|
|
|
+ CalcCache::addHasFwBonusUsers($bonusUserId, $this->_periodNum);
|
|
|
+
|
|
|
+// $this->loopRelationParentDo($userId, function ($parent) use($userId, $validPvPcs) {
|
|
|
+// //判断parent的报单中心级别 和 服务奖比例
|
|
|
+// $bonusUserId = $parent['PARENT_UID'];
|
|
|
+// //计算级别之后更新过userInfo的缓存,缓存中级别发生了变化
|
|
|
+// $bonusUserInfo = CalcCache::getUserInfo($bonusUserId, $this->_periodNum);
|
|
|
+// $isDec = $bonusUserInfo['IS_DEC'];
|
|
|
+// if($isDec == 0) return self::LOOP_CONTINUE;
|
|
|
+// $decRoleId = $bonusUserInfo['DEC_ROLE_ID'];
|
|
|
+// if( !$decRoleId ) return self::LOOP_CONTINUE;
|
|
|
+// if( !isset($this->_decRoleConfig[$decRoleId]) ) return self::LOOP_CONTINUE;
|
|
|
+//
|
|
|
+// $parentDecRoleLevel = $this->_decRoleConfig[$decRoleId];
|
|
|
+// $parentFwBonusPercent = $parentDecRoleLevel['FW_BONUS_PERCENT'] ?? 0;
|
|
|
+// $cacheMaxPercent = CalcCache::fwMaxBonusPercent($userId, $this->_periodNum);
|
|
|
+// $diffPercent = $parentFwBonusPercent - $cacheMaxPercent;
|
|
|
+// if( $diffPercent <= 0 ) return self::LOOP_CONTINUE;
|
|
|
+//
|
|
|
+// $fwBonus = $validPvPcs * $diffPercent / 100;
|
|
|
+// if( $fwBonus <= 0 ) return self::LOOP_CONTINUE;
|
|
|
+//
|
|
|
+// //给本人添加服务奖比例
|
|
|
+// CalcCache::fwMaxBonusPercent($userId, $this->_periodNum, $parentFwBonusPercent);
|
|
|
+// //记录奖金和奖金来源到缓存 并实现在缓存中奖金累加
|
|
|
+// CalcCache::saveFwBonusList($bonusUserId, $this->_periodNum, $fwBonus, ['fromUid'=>$userId, 'fromPvPcs'=>$validPvPcs]);
|
|
|
+// CalcCache::addHasFwBonusUsers($bonusUserId, $this->_periodNum);
|
|
|
+//
|
|
|
+// //达到最大的比例就不在向上找了
|
|
|
+//// if( $parentFwBonusPercent >= $maxLevelPercent ) return self::LOOP_FINISH;
|
|
|
+// unset($bonusUserId, $bonusUserInfo, $isDec, $decRoleId, $parentDecRoleLevel, $parentFwBonusPercent, $cacheMaxPercent, $diffPercent, $fwBonus);
|
|
|
+// });
|
|
|
|
|
|
unset($userId, $validPvPcs);
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
unset($allData, $insertBonusData);
|
|
|
return $this->calcBonusBDStepOne($offset + $this->_limit);
|
|
|
}
|
|
|
@@ -4126,13 +4159,45 @@ class BonusCalc extends BaseObject {
|
|
|
return $fxPvStatus;
|
|
|
}
|
|
|
|
|
|
- // 判断会员是否活跃
|
|
|
+ // 判断会员是否活跃:1. 当月消费30BV. 2.任意水机+150粒的EKSP. (满足任意条件即可)
|
|
|
public function _isPerfActive($userId): bool
|
|
|
{
|
|
|
+ // 条件1: 当月消费30BV
|
|
|
$pv = PerfPeriod::find()->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])
|
|
|
->SUM('PV_PCS');
|
|
|
|
|
|
- return $pv >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE'];
|
|
|
+ if ($pv >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE']) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $calcMonth = $this->_calcYear . ($this->_calcMonth == 1 ? '0' . $this->_calcMonth : $this->_calcMonth);
|
|
|
+
|
|
|
+ // 条件2: 任意水机+150粒的EKSP(HES150N)
|
|
|
+ $orderEKSP = Order::find()
|
|
|
+ ->alias('O')
|
|
|
+ ->join('INNER JOIN', OrderGoods::tableName() . ' AS G', 'O.SN = G.ORDER_SN')
|
|
|
+ ->where("O.IS_DELETE=0 AND O.USER_ID=:USER_ID AND LEFT(O.P_CALC_MONTH, 7)=:P_CALC_MONTH AND O.PERIOD_NUM<=:PERIOD_NUM AND G.SKU_CODE=:SKU_CODE",
|
|
|
+ ['USER_ID' => $userId, 'P_CALC_MONTH' => $calcMonth, 'PERIOD_NUM' => $this->_periodNum, ':SKU_CODE' => 'HES150N'])
|
|
|
+ ->count();
|
|
|
+ if (!$orderEKSP) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 所有分期商品
|
|
|
+ $instalmentShopGoods = ShopGoods::find()->where('INSTALMENT>0 AND STATUS=1')->select('GOODS_NO')->column();
|
|
|
+ $instalmentShopGoods = implode("','", $instalmentShopGoods);
|
|
|
+ $orderInstalment = Order::find()
|
|
|
+ ->alias('O')
|
|
|
+ ->join('INNER JOIN', OrderGoods::tableName() . ' AS G', 'O.SN = G.ORDER_SN')
|
|
|
+ ->where("O.IS_DELETE=0 AND O.USER_ID=:USER_ID AND LEFT(O.P_CALC_MONTH, 7)=:P_CALC_MONTH AND O.PERIOD_NUM<=:PERIOD_NUM AND G.SKU_CODE IN ('{$instalmentShopGoods}')",
|
|
|
+ ['USER_ID' => $userId, 'P_CALC_MONTH' => $calcMonth, 'PERIOD_NUM' => $this->_periodNum])
|
|
|
+ ->count();
|
|
|
+ if (!$orderInstalment) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|