Ver código fonte

feat: NG-27: Adjusting Service Award Settlement

kevin 1 ano atrás
pai
commit
a42057a070
2 arquivos alterados com 171 adições e 31 exclusões
  1. 63 31
      common/helpers/bonus/CalcServeBonusCalc.php
  2. 108 0
      common/models/DecOrder.php

+ 63 - 31
common/helpers/bonus/CalcServeBonusCalc.php

@@ -36,6 +36,7 @@ use common\models\CalcBonusTourism;
 use common\models\CalcBonusVilla;
 use common\models\Config;
 use common\models\DeclarationLevel;
+use common\models\DecOrder;
 use common\models\EmployLevel;
 use common\models\PerfMonth;
 use common\models\PerfPeriod;
@@ -590,37 +591,68 @@ class CalcServeBonusCalc extends BaseObject {
                 unset($perfData, $decRoleBonusFrom);
                 if ( $validPvPcs <= 0 ) continue;
 
-                $this->loopRelationParentDo($userId, function ($parent) use($userId, $validPvPcs){
-                    try {
-                    //判断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);
-                    } catch(Exception $e) {
-                        var_dump($e->getMessage(), '------------');
-                    }
-                    unset($bonusUserId, $bonusUserInfo, $isDec, $decRoleId, $parentDecRoleLevel, $parentFwBonusPercent, $cacheMaxPercent, $diffPercent, $fwBonus);
-                });
+                // 查询会员产生时,填写的报单中心
+                $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; // 如果不是报单中心则跳过循环
+                }
+
+                $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){
+//                    try {
+//                    //判断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);
+//                    } catch(Exception $e) {
+//                        var_dump($e->getMessage(), '------------');
+//                    }
+//                    unset($bonusUserId, $bonusUserInfo, $isDec, $decRoleId, $parentDecRoleLevel, $parentFwBonusPercent, $cacheMaxPercent, $diffPercent, $fwBonus);
+//                });
 
                 unset($userId, $validPvPcs);
             }

+ 108 - 0
common/models/DecOrder.php

@@ -0,0 +1,108 @@
+<?php
+
+namespace common\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "{{%DEC_ORDER}}".
+ *
+ * @property string $ID
+ * @property string $DEC_SN 报单编号
+ * @property string $ORDER_SN 订单编号
+ * @property string $USER_ID 会员ID
+ * @property string $TO_USER_ID 报单对象ID
+ * @property string $TYPE 报单类型
+ * @property int $IS_ADMIN 是否管理员操作
+ * @property string $DEC_AMOUNT 报单金额
+ * @property string $DEC_PV 报单PV
+ * @property string $PAID_WALLET 支付钱包
+ * @property int $IS_BATCH 是否批量报单
+ * @property string $REMARK 备注
+ * @property string $REC_USER_ID 推荐人ID
+ * @property string $CON_USER_ID 接点人ID
+ * @property string $DEC_ID 报单中心ID
+ * @property int $PERIOD_NUM 报单期数
+ * @property string $P_CALC_MONTH 分区结算月
+ * @property int $CALC_MONTH 结算月
+ * @property int $CREATED_AT 创建时间
+ * @property string $UPDATER 操作人
+ * @property string $UPDATED_AT 更新时间
+ * @property int $IS_DEL 是否删除
+ * @property int $DELETED_AT 删除时间
+ */
+class DecOrder extends \common\components\ActiveRecord
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return '{{%DEC_ORDER}}';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['USER_ID', 'TO_USER_ID','REC_USER_ID','CON_USER_ID',/*'DEC_ID',*/ 'TYPE', 'PAID_WALLET', 'PERIOD_NUM', 'P_CALC_MONTH', 'CREATED_AT'], 'required'],
+            [['IS_ADMIN', 'IS_BATCH', 'PERIOD_NUM', 'CALC_MONTH', 'CREATED_AT', 'IS_DEL', 'DELETED_AT'], 'integer'],
+            [['DEC_AMOUNT', 'DEC_PV'], 'number'],
+            [['ID', 'DEC_SN', 'ORDER_SN', 'USER_ID', 'TO_USER_ID','REC_USER_ID','CON_USER_ID','DEC_ID', 'TYPE', 'UPDATER', 'UPDATED_AT'], 'string', 'max' => 32],
+            [['PAID_WALLET'], 'string', 'max' => 48],
+            [['REMARK'], 'string', 'max' => 4000],
+            [['DEC_SN'], 'unique'],
+            [['ID'], 'unique'],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'ID' => 'ID',
+            'DEC_SN' => '报单编号',
+            'ORDER_SN' => '订单编号',
+            'USER_ID' => '会员ID',
+            'TO_USER_ID' => '报单对象ID',
+            'TYPE' => '报单类型',
+            'IS_ADMIN' => '是否管理员操作',
+            'DEC_AMOUNT' => '报单金额',
+            'DEC_PV' => '报单PV',
+            'PAID_WALLET' => '支付钱包',
+            'IS_BATCH' => '是否批量报单',
+            'REMARK' => '备注',
+            'REC_USER_ID' => '开拓人编号',
+            'CON_USER_ID' => '上级编号',
+            'DEC_ID' => '上级编号',
+            'PERIOD_NUM' => '报单期数',
+            'P_CALC_MONTH' => '分区结算月',
+            'CALC_MONTH' => '结算月',
+            'CREATED_AT' => '创建时间',
+            'UPDATER' => '操作人',
+            'UPDATED_AT' => '更新时间',
+            'IS_DEL' => '是否删除',
+            'DELETED_AT' => '删除时间',
+        ];
+    }
+
+    public function getRecName()
+    {
+        return $this->hasOne(UserInfo::class, ['USER_ID' => 'TO_USER_ID']);
+    }
+
+    public function getUserByToUserId()
+    {
+        return $this->hasOne(User::class, ['ID' => 'TO_USER_ID']);
+    }
+
+    public function getUserByUserId()
+    {
+        return $this->hasOne(User::class, ['ID' => 'USER_ID']);
+    }
+
+}