Browse Source

feat: NG-71: 会员奖金发放、级别发放、绩效奖金发放

kevin 1 year ago
parent
commit
8df56fb40a

+ 0 - 8
backendApi/modules/v1/controllers/BonusController.php

@@ -149,7 +149,6 @@ class BonusController extends BaseController {
         $formModel = new PeriodForm();
         $formModel->scenario = 'send';
         if ($formModel->load(Yii::$app->request->get(), '') && $formModel->sendWebToAsync()) {
-            // Log::adminHandle('第' . $periodNum . '期挂网');
             return static::notice('挂网已开始处理,请等待');
         } else {
             return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
@@ -829,7 +828,6 @@ class BonusController extends BaseController {
             'BONUS_YJ' => 'CB.BONUS_YJ',
             'BONUS_GX' => 'CB.BONUS_GX',
             'BONUS_GL' => 'CB.BONUS_GL',
-            // 'BONUS_GL' => 'CB.BONUS_BS',
             'BONUS_QY' => 'CB.BONUS_QY',
             'BONUS_YC' => 'CB.BONUS_YC',
             'PV_1L' => 'CB.PV_1L',
@@ -848,14 +846,8 @@ class BonusController extends BaseController {
         }else{
             $periodNum = explode(",", $periodNumRequest)[1];
         }
-//        if(!isset($filter['params'][':PERIODNUM'])){
-//            return static::notice('请填写期数',400);
-//        }
-//        $periodNum = $filter['params'][':PERIODNUM'];
         $period = Period::instance();
         $yearMonth = $period->getYearMonth($periodNum);
-//        $filter['condition'] .= ' AND CB.PERIOD_NUM=:PERIOD_NUM';
-//        $filter['params'][':PERIOD_NUM'] = $periodNum;
         $form = new BonusExportForm();
         $result = $form->run(array_merge($filter, ['others'=>['yearMonth'=>$yearMonth]]), 'Member Bonus'); // 往期奖金
         if (!$result) {

+ 81 - 224
common/helpers/bonus/BonusSend.php

@@ -23,6 +23,7 @@ use common\models\PerfPeriod;
 use common\models\EmployLevel;
 use common\models\UserBonus;
 use common\models\UserPerfMonthUpdate;
+use common\models\UserPerformance;
 use common\models\UserPeriodPoints;
 use common\models\UserInfo;
 use common\models\UserPerf;
@@ -188,71 +189,23 @@ class BonusSend extends BaseObject {
             // 初始化
             $this->initTask();
             echo('挂网开始');
-            $this->putFakeOrder();
-            // 先把有remainPv的订单处理一下,将remainPv加入到remain_pv及流水表
-            echo('处理当期REMAIN PV ' . date('Y-m-d  H:i:s', time()) . PHP_EOL);
-            $this->_calcRemainPv();
-            $t2 = microtime(true);
-            echo('初始化完成,当前期数【' . $this->_periodNum . '】,耗时:' . round($t2 - $t1, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+
             // 改变状态
             $this->setSendStatus('start');
-            $t3 = microtime(true);
-            echo('改变状态完成,耗时:' . round($t3 - $t2, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
-            $this->_updatePercent(20);
-            //Yii::$app->db->close();
-            //Yii::$app->dbShop->close();
-            // 更新StarDirectory
-            $this->updateEmpLevel();
-            $this->_updatePercent(40);
-            $t4 = microtime(true);
-            echo('更新聘级完成,耗时:' . round($t4 - $t3, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
 
-            // 更新StarCrown
-            $this->updateCrownLevel();
-            $this->_updatePercent(50);
-            $t41 = microtime(true);
-            echo('更新星级完成,耗时:' . round($t41 - $t4, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+            // 发放荣衔级别(Honor/Emp)、Elite级别
+            $this->sendMemberLevel();
+            $this->_updatePercent(30);
+            $t2 = microtime(true);
+            echo('更新会员级别完成,耗时:' . round($t2 - $t1, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
 
             // 发放奖金
             $this->sendBonusLoop();
-            $this->_updatePercent(60);
-            $t5 = microtime(true);
-            echo('发放奖金完成,耗时:' . round($t5 - $t4, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
-            // 更新会员上次报单级别
-//            $this->updateUserDevLv();
-//            $this->_updatePercent(80);
-            $t6 = microtime(true);
-//            echo('更新会员上次报单级别完成,耗时:' . round($t6 - $t5, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
-            // 更新会员累计业绩
-            $this->updateUserPerf();
             $this->_updatePercent(80);
-            $t7 = microtime(true);
-            echo('更新会员累计业绩完成,耗时:' . round($t7 - $t6, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
-
-            $this->updateUserPerfMonth();
-            $this->_updatePercent(90);
-            $t8 = microtime(true);
-            echo('更新会员累计月业绩完成,耗时:' . round($t8 - $t7, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
-
-            // 更新活跃用户状态,更新为已处理
-            // $this->updateActiveUser();
-            // $this->_updatePercent(95);
-            // $t9 = microtime(true);
-            // echo('更新会员累计月业绩完成,耗时:' . round($t9 - $t8, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+            $t3 = microtime(true);
+            echo('发放奖金完成,耗时:' . round($t3 - $t2, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
 
-            // 开启子进程去完成下面的循环发放和循环改聘级和循环更新累计业绩
-            /*$process = new Process('sendBonus', 3);
-            $process->run(function($workId, $pmid){
-                $this->processStep($workId);
-            });
-            while (true){
-                if($process->isFinish()) break;
-            }
-            unset($process);
-            $this->_updatePercent(90);
-            $t4 = microtime(true);
-            echo('所有子进程的任务完成,耗时:'.round($t4 - $t3, 3).',内存使用:'.(round(memory_get_usage()/1024/1024, 3)).'MB'.PHP_EOL);*/
-            echo('全部奖金发放完成,耗时:'.round($t7 - $t1, 3).',内存使用:'.(round(memory_get_usage()/1024/1024, 3)).'MB'.PHP_EOL);
+            echo('全部奖金发放完成,耗时:'.round($t3 - $t1, 3).',内存使用:'.(round(memory_get_usage()/1024/1024, 3)).'MB'.PHP_EOL);
             $this->_updatePercent(100);
         } catch (\Exception $e) {
             LoggerTool::error('sendBonus' . sprintf('File【%s】, Line【%s】, Msg【%s】', $e->getFile(), $e->getLine(), $e->getMessage()));
@@ -262,59 +215,8 @@ class BonusSend extends BaseObject {
         if (count($this->_errors) > 0) {
             return false;
         }
-        return true;
-    }
-
-    /**
-     * 处理order表中有remain_pv的订单
-     * 将结果写入到remainPv相关表中
-     *
-     */
-    private function _calcRemainPv(){
-        $sysConfig = Cache::getSystemConfig();
-        $mesureUpCondition =  $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NG默认30
-        $orders = Order::find()->where('PERIOD_NUM=:PERIOD_NUM AND REMAIN_PV>0 AND IS_DELETE=0',[':PERIOD_NUM'=>$this->_periodNum])->asArray()->all();
-        foreach($orders as $order){
-            $oRemainPv = RemainPv::find()->where(['USER_ID' => $order['USER_ID']])->one();
-            $myRemainPv = $oRemainPv?$oRemainPv['REMAIN_PV']:0;
-            $transactionRemain = \Yii::$app->db->beginTransaction();
-            try{
-                $flowRemainPvModel = new FlowRemainPv();
-                $flowRemainPvModel->ID = $this->_generateSn();
-                $flowRemainPvModel->USER_ID = $order['USER_ID'];
-                $flowRemainPvModel->REMAIN_PV_FLOW = $order['REMAIN_PV'];
-                $flowRemainPvModel->REMAIN_PV_TOTAL = $myRemainPv + $order['REMAIN_PV'];
-                $flowRemainPvModel->PERIOD_NUM = $this->_periodNum;
-                $flowRemainPvModel->UPDATED_AT = Date::nowTime();
-                $flowRemainPvModel->ORDER_SN = $order['SN'];
-                if(!$flowRemainPvModel->save()){
-                    $this->addErrors($flowRemainPvModel->getErrors());
-                    return false;
-                }
 
-                $oRemainPv = RemainPv::find()->where(['USER_ID' => $order['USER_ID']])->one();
-                if($oRemainPv){
-                    $oRemainPv->updateCounters(['REMAIN_PV'=>$order['REMAIN_PV']]);
-                }else{
-                    $remainPvModel = new RemainPv();
-                    $remainPvModel->ID = $this->_generateSn();
-                    $remainPvModel->USER_ID = $order['USER_ID'];
-                    $remainPvModel->UPDATED_AT = Date::nowTime();
-                    $remainPvModel->REMAIN_PV = $order['REMAIN_PV'];
-                    $remainPvModel->STATUS = 1;
-                    if(!$remainPvModel->save()){
-                        $this->addErrors($remainPvModel->getErrors());
-                        return false;
-                    }
-                }
-                $transactionRemain->commit();
-            } catch (Exception $e) {
-                $transactionRemain->rollBack();
-                $this->addError('add', $e->getMessage());
-                return null;
-            }
-        }
-        return null;
+        return true;
     }
 
     /**
@@ -404,133 +306,44 @@ class BonusSend extends BaseObject {
      * @return bool
      * @throws \yii\db\Exception
      */
-    public function sendBonusLoop($page=1) {
+    public function sendBonusLoop($page = 1) {
         echo sprintf("时间:[%s]数据库发奖,当前page为:【%s】" . PHP_EOL, date('Y-m-d H:i:s', time()), $page);
         $periodNum = $this->_periodNum;
         // 从奖金结算表中获取当期未发放的所有数据
-//        $allData = CalcBonus::findUseDbCalc()
         $allData = CalcBonus::find()
-        ->yearMonth($this->_calcYearMonth)
-        ->where(
-            '(IS_SENT=0 OR IS_SENT=2) AND CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM',
-            [':CALC_MONTH' => $this->_calcYearMonth, ':PERIOD_NUM' => $periodNum]
-        )
-        ->limit($this->_limit)
-        ->asArray()
-        ->all();
+            ->yearMonth($this->_calcYearMonth)
+            ->select('ID, USER_ID, BONUS_REAL, BONUS_TOTAL, MANAGE_TAX, ')
+            ->where('(IS_SENT=0 OR IS_SENT=2) AND CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM',
+                [':CALC_MONTH' => $this->_calcYearMonth, ':PERIOD_NUM' => $this->_periodNum]
+            )
+            ->limit($this->_limit)
+            ->asArray()
+            ->all();
+
         if ($allData) {
             $transaction = Yii::$app->db->beginTransaction();
             try {
                 foreach ($allData as $key => $data) {
-                    // 期奖金
-//                    $periodAmount = $data['BONUS_QY'] + $data['BONUS_YC'] + $data['BONUS_XF'] + $data['BONUS_BD'] + $data['BONUS_TG'] + $data['BONUS_YJ'] + $data['BONUS_GX'] + $data['BONUS_GL'];
-                    $periodAmount = $data['BONUS_REAL'];
-                    // 获取本期结算的管理员
-//                    $period = Period::findOneAsArray(['PERIOD_NUM'=>$periodNum]);
-//                    $updateAminId = $period['CALC_ADMIN_ID'];
-                    if ($periodAmount > 0) {
-                        Balance::changeUserBonus($data['USER_ID'], 'bonus', $periodAmount, [
-                            'CALC_ID' => $data['ID'],
-                            'REMARK' => 'From Period ' . $periodNum,
-                            'PERIOD_NUM' => $periodNum,
-                            'QY' => $data['BONUS_QY'],
-                            'FW' => $data['BONUS_FW'],
-                            'YC' => $data['BONUS_YC'],
-                            'VIP' => $data['BONUS_VIP'],
-                            'BD' => $data['BONUS_BD'],
-                            'TG' => $data['BONUS_TG'],
-                            'YJ' => $data['BONUS_YJ'],
-                            'GX' => $data['BONUS_GX'],
-                            'GL' => $data['BONUS_GL'],
-                            'BS' => $data['BONUS_BS'],
-                            'BS_MNT' => $data['BONUS_BS_MNT'],
-                            'BS_ABBR' => $data['BONUS_BS_ABBR'],
-
-                            'ORI_QY' => $data['ORI_BONUS_QY'],
-                            'ORI_YC' => $data['ORI_BONUS_YC'],
-                            'ORI_VIP' => $data['ORI_BONUS_VIP'],
-                            'ORI_STANDARD' => $data['ORI_BONUS_STANDARD'],
-                            'ORI_BD' => $data['ORI_BONUS_BD'],
-                            'ORI_TG' => $data['ORI_BONUS_TG'],
-                            'ORI_YJ' => $data['ORI_BONUS_YJ'],
-                            'ORI_GX' => $data['ORI_BONUS_GX'],
-                            'ORI_GL' => $data['ORI_BONUS_GL'],
-                            'ORI_BS' => $data['ORI_BONUS_BS'],
-                            'ORI_BS_MNT' => $data['ORI_BONUS_BS_MNT'],
-                            'ORI_BS_ABBR' => $data['ORI_BONUS_BS_ABBR'],
-
-                            'RECONSUME_POINTS_TOTAL' => $data['RECONSUME_POINTS'],
-                            'EXCHANGE_POINTS_TOTAL' => $data['EXCHANGE_POINTS'],
-                            'MANAGE_TAX' => $data['MANAGE_TAX'],
-
-                            'BONUS_TOTAL' => $data['BONUS_TOTAL'],
-
-                            'DEAL_TYPE_ID' => DealType::BONUS_SEND,
-                            'SORT' => $key * 10,
-                            'BONUS_ISSUE' => true,
-                        ]);
-//                        $this->_teamworkBonus($data['USER_ID'], $periodAmount, $key);
+                    // 用户奖金发放
+                    if ($data['BONUS_REAL'] > 0) {
+                        Balance::changeUserBonus($data['USER_ID'], 'userBonus', $data['BONUS_REAL'],
+                            [
+                                'CALC_ID' => $data['ID'],
+                                'REMARK' => 'From Period ' . $data['PERIOD_NUM'],
+                                'PERIOD_NUM' => $periodNum,
+                                'MANAGE_TAX' => $data['MANAGE_TAX'],
+                                'BONUS_TOTAL' => $data['BONUS_TOTAL'],
+                                'DEAL_TYPE_ID' => DealType::BONUS_SEND,
+                                'SORT' => $key * 10,
+                                'BONUS_ISSUE' => true,
+                            ]);
                     }
 
-                    // 旅游奖
-                    if ($data['BONUS_TOURISM'] > 0) {
-                        Balance::changeUserBonus($data['USER_ID'], 'tourism_points', $data['BONUS_TOURISM'], [
-                            'CALC_ID' => $data['ID'],
-                            'REMARK' => 'From Period ' . $periodNum,
-                            'PERIOD_NUM' => $periodNum,
-                            'TOURISM_POINTS' => $data['BONUS_TOURISM'],
-                            'DEAL_TYPE_ID' => DealType::TOURISM_SEND,
-                            'SORT' => $key * 10,
-                            'BONUS_ISSUE' => true,
-                        ]);
-                    }
-                    // 车奖
-                    if ($data['BONUS_GARAGE'] > 0) {
-                        Balance::changeUserBonus($data['USER_ID'], 'garage_points', $data['BONUS_GARAGE'], [
-                            'CALC_ID' => $data['ID'],
-                            'REMARK' => 'From Period ' . $periodNum,
-                            'PERIOD_NUM' => $periodNum,
-                            'GARAGE_POINTS' => $data['BONUS_GARAGE'],
-                            'DEAL_TYPE_ID' => DealType::GARAGE_SEND,
-                            'SORT' => $key * 10,
-                            'BONUS_ISSUE' => true,
-                        ]);
-                    }
-                    // 房奖
-                    if ($data['BONUS_VILLA'] > 0) {
-                        Balance::changeUserBonus($data['USER_ID'], 'villa_points', $data['BONUS_VILLA'], [
-                            'CALC_ID' => $data['ID'],
-                            'REMARK' => 'From Period ' . $periodNum,
-                            'PERIOD_NUM' => $periodNum,
-                            'VILLA_POINTS' => $data['BONUS_VILLA'],
-                            'DEAL_TYPE_ID' => DealType::VILLA_SEND,
-                            'SORT' => $key * 10,
-                            'BONUS_ISSUE' => true,
-                        ]);
+                    // 绩效奖金发放
+                    if ($data['BONUS_PB'] > 0) {
+                        UserPerformance::sentUserPerformance($data['USER_ID'], $data['BONUS_PB'], $data['PERIOD_NUM']);
                     }
 
-                    //发放重消积分
-//                    if ($data['RECONSUME_POINTS'] > 0) {
-//                        Balance::changeUserBonus($data['USER_ID'], 'reconsume_points', $data['RECONSUME_POINTS'], [
-//                            'CALC_ID' => $data['ID'],
-//                            'REMARK' => 'From ' . $periodNum . '期',
-//                            'PERIOD_NUM' => $periodNum,
-//                            'RECONSUME_POINTS' => $data['RECONSUME_POINTS'],
-//                            'DEAL_TYPE_ID' => DealType::RECONSUME_POINTS_SEND,
-//                        ]);
-//                    }
-//
-//                    //发放兑换积分
-//                    if ($data['EXCHANGE_POINTS'] > 0) {
-//                        Balance::changeUserBonus($data['USER_ID'], 'exchange_points', $data['EXCHANGE_POINTS'], [
-//                            'CALC_ID' => $data['ID'],
-//                            'REMARK' => 'From ' . $periodNum . '期',
-//                            'PERIOD_NUM' => $periodNum,
-//                            'EXCHANGE_POINTS' => $data['EXCHANGE_POINTS'],
-//                            'DEAL_TYPE_ID' => DealType::EXCHANGE_POINTS_SEND,
-//                            'BONUS_ISSUE' => true,
-//                        ]);
-//                    }
                     // 把记录标记为已发放状态
                     CalcBonus::updateAll(['IS_SENT' => 1, 'SENT_AT' => Date::nowTime()], 'ID=:ID', [':ID' => $data['ID']]);
 
@@ -627,6 +440,50 @@ class BonusSend extends BaseObject {
         return true;
     }
 
+    public function sendMemberLevel()
+    {
+        $transaction = Yii::$app->db->beginTransaction();
+        try {
+            $db = Yii::$app->db;
+
+            $sql =<<<SQL
+                UPDATE `AR_USER` `user`
+                    INNER JOIN `AR_CALC_BONUS` `bonus` ON `user`.`ID` = `bonus`.`USER_ID` AND `bonus`.`CALC_MONTH` = :CALC_MONTH AND `bonus`.`PERIOD_NUM` = :PERIOD_NUM
+                SET
+                    `user`.`EMP_LV` = `bonus`.`EMP_LV`, 
+                    `user`.`LAST_EMP_LV` = `bonus`.`LAST_EMP_LV`, 
+                    `user`.`LAST_EMP_LV_UPDATED_AT` = :UPDATED_AT, 
+                    `user`.`LAST_EMP_LV_UPDATED_PERIOD` = :PERIOD_NUM, 
+                    
+                    `user`.`ELITE_LV` = `bonus`.`ELITE_LV`, 
+                    `user`.`LAST_ELITE_LV` = `bonus`.`LAST_ELITE_LV`, 
+                    `user`.`LAST_ELITE_LV_UPDATED_AT` = :UPDATED_AT, 
+                    `user`.`LAST_ELITE_LV_UPDATED_PERIOD` = :PERIOD_NUM
+SQL;
+
+            $db->createCommand($sql)
+                ->bindValues(
+                    [
+                        ':CALC_MONTH' => $this->_calcYearMonth,
+                        ':PERIOD_NUM' => $this->_periodNum,
+                        ':UPDATED_AT' => time(),
+                    ])
+                ->execute();
+
+            $transaction->commit();
+
+            // 删除缓存中的会员信息
+            User::deleteAllBaseInfoFromRedis();
+
+        } catch (Exception $e) {
+            $transaction->rollBack();
+            $this->addError('sendLevelFailed', '发放会员级别失败,原因:' . $e->getMessage());
+            return false;
+        }
+
+        return true;
+    }
+
     // 更活跃会员,将is_send改成1
     public function updateActiveUser() {
         $ret = PerfActiveUser::updateAll(

+ 19 - 281
common/helpers/user/Balance.php

@@ -39,42 +39,22 @@ use yii\db\Expression;
 class Balance {
     const INCR_REDUCE = 0;      // 减少
     const INCR_ADD = 1;         // 增加
-    const INCR_FREEZE = 2;      // 冻结
-    const INCR_UNFREEZE = 3;    // 解冻
-
-    const BONUS_BALANCE_LOCK_KEY = 'Bonus';
-    const RECONSUME_POINTS_BALANCE_LOCK_KEY = 'reconsumePoints';
-    const EXCHANGE_POINTS_BALANCE_LOCK_KEY = 'exchangePoints';
-    const CF_BALANCE_LOCK_KEY = 'CF';
-    const LX_BALANCE_LOCK_KEY = 'LX';
+
+    const BONUS_BALANCE_LOCK_KEY = 'userBonus:';
     const INVOICE_BALANCE_LOCK_KEY = 'Invoice';
-    const TOURISM_POINTS_BALANCE_LOCK_KEY = 'tourismPoints';
-    const GARAGE_POINTS_BALANCE_LOCK_KEY = 'garagePoints';
-    const VILLA_POINTS_BALANCE_LOCK_KEY = 'villaPoints';
+    const USER_PERFORMANCE_BONUS_BALANCE_LOCK_KEY = 'userPerformanceBonus:';
 
     const BALANCE_TYPE = [
-        'exchange' => [
-            'id'    => 'exchange',
-            'title' => '兑换点数',
-            'attr'  => 'EXCHANGE_POINTS',
-            'pv'    => false,
-        ],
-        'tourism_points' => [
-            'id'    => 'tourism_points',
-            'title' => '旅游积分',
-            'attr'  => 'TOURISM_POINTS',
-            'pv'    => false,
-        ],
-        'garage_points' => [
-            'id'    => 'garage_points',
-            'title' => '车奖积分',
-            'attr'  => 'GARAGE_POINTS',
+        'userBonus' => [
+            'id'    => 'userBonus',
+            'title' => '奖金',
+            'attr'  => 'userBonus',
             'pv'    => false,
         ],
-        'villa_points' => [
-            'id'    => 'villa_points',
-            'title' => '房奖积分',
-            'attr'  => 'VILLA_POINTS',
+        'userPerformanceBonus' => [
+            'id'    => 'userPerformanceBonus',
+            'title' => '绩效奖金',
+            'attr'  => 'userPerformanceBonus',
             'pv'    => false,
         ],
     ];
@@ -279,29 +259,11 @@ class Balance {
         $exchangeRate = 1;  // TODO:奖金发放美元
         // redis加锁(防止并发余额数值不准确出错)
         switch ($type) {
-            case 'BONUS':
+            case 'userBonus':
                 $lockKey = self::BONUS_BALANCE_LOCK_KEY . $userId;
                 break;
-            case 'RECONSUME_POINTS':
-                $lockKey = self::RECONSUME_POINTS_BALANCE_LOCK_KEY . $userId;
-                break;
-            case 'EXCHANGE_POINTS':
-                $lockKey = self::EXCHANGE_POINTS_BALANCE_LOCK_KEY . $userId;
-                break;
-            case 'CF':
-                $lockKey = self::CF_BALANCE_LOCK_KEY . $userId;
-                break;
-            case 'LX':
-                $lockKey = self::LX_BALANCE_LOCK_KEY . $userId;
-                break;
-            case 'TOURISM_POINTS':
-                $lockKey = self::TOURISM_POINTS_BALANCE_LOCK_KEY . $userId;
-                break;
-            case 'GARAGE_POINTS':
-                $lockKey = self::GARAGE_POINTS_BALANCE_LOCK_KEY . $userId;
-                break;
-            case 'VILLA_POINTS':
-                $lockKey = self::VILLA_POINTS_BALANCE_LOCK_KEY . $userId;
+            case 'userPerformanceBonus':
+                $lockKey = self::USER_PERFORMANCE_BONUS_BALANCE_LOCK_KEY . $userId;
                 break;
             default:
                 throw new Exception('流水类型错误');
@@ -321,250 +283,26 @@ class Balance {
                     throw new Exception('金额不足');
                 }
 
-                if (isset($params['QY'])) {
-                    $paramData['QY_TOTAL'] = new Expression('QY_TOTAL + ' . ($issueBonus ? $params['QY'] * $exchangeRate : $params['QY']));
-                    //$oneUserBonusModel->QY_TOTAL += $params['QY'];
-                }
-                if (isset($params['FW'])) {
-                    $paramData['FW_TOTAL'] = new Expression('FW_TOTAL + ' . ($issueBonus ? $params['FW'] * $exchangeRate : $params['FW']));
-                }
-                if (isset($params['YC'])) {
-                    $paramData['YC_TOTAL'] = new Expression('YC_TOTAL + ' . ($issueBonus ? $params['YC'] * $exchangeRate : $params['YC']));
-                    //$oneUserBonusModel->YC_TOTAL += $params['YC'];
-                }
-                if (isset($params['VIP'])) {
-                    $paramData['VIP_TOTAL'] = new Expression('VIP_TOTAL + ' . ($issueBonus ? $params['VIP'] * $exchangeRate : $params['VIP']));
-                }
-                if (isset($params['BD'])) {
-                    $paramData['BD_TOTAL'] = new Expression('BD_TOTAL + ' . ($issueBonus ? $params['BD'] * $exchangeRate : $params['BD']));
-                    //$oneUserBonusModel->BD_TOTAL += $params['BD'];
-                }
-                if (isset($params['TG'])) {
-                    $paramData['TG_TOTAL'] = new Expression('TG_TOTAL + ' . ($issueBonus ? $params['TG'] * $exchangeRate : $params['TG']));
-                    //$oneUserBonusModel->TG_TOTAL += $params['TG'];
-                }
-                if (isset($params['YJ'])) {
-                    $paramData['YJ_TOTAL'] = new Expression('YJ_TOTAL + ' . ($issueBonus ? $params['YJ'] * $exchangeRate : $params['YJ']));
-                    //$oneUserBonusModel->YJ_TOTAL += $params['YJ'];
-                }
-                if (isset($params['GX'])) {
-                    $paramData['GX_TOTAL'] = new Expression('GX_TOTAL + ' . ($issueBonus ? $params['GX'] * $exchangeRate : $params['GX']));
-                    //$oneUserBonusModel->GX_TOTAL += $params['GX'];
-                }
-                if (isset($params['GL'])) {
-                    $paramData['GL_TOTAL'] = new Expression('GL_TOTAL + ' . ($issueBonus ? $params['GL'] * $exchangeRate : $params['GL']));
-                    //$oneUserBonusModel->GL_TOTAL += $params['GL'];
-                }
-                if (isset($params['BS'])) {
-                    $paramData['BS_TOTAL'] = new Expression('BS_TOTAL + ' . ($issueBonus ? $params['BS'] * $exchangeRate : $params['BS']));
-                }
-                if (isset($params['BS_MNT'])) {
-                    $paramData['BS_MNT_TOTAL'] = new Expression('BS_MNT_TOTAL + ' . ($issueBonus ? $params['BS_MNT'] * $exchangeRate : $params['BS_MNT']));
-                }
-                if (isset($params['BS_ABBR'])) {
-                    $paramData['BS_ABBR_TOTAL'] = new Expression('BS_ABBR_TOTAL + ' . ($issueBonus ? $params['BS_ABBR'] * $exchangeRate : $params['BS_ABBR']));
-                }
-                if (isset($params['TOURISM_POINTS'])) {
-                    $paramData['TOURISM_POINTS_TOTAL'] = new Expression('TOURISM_POINTS_TOTAL + ' . ($issueBonus ? $params['TOURISM_POINTS'] * $exchangeRate : $params['TOURISM_POINTS']));
-                }
-                if (isset($params['GARAGE_POINTS'])) {
-                    $paramData['GARAGE_POINTS_TOTAL'] = new Expression('GARAGE_POINTS_TOTAL + ' . ($issueBonus ? $params['GARAGE_POINTS'] * $exchangeRate : $params['GARAGE_POINTS']));
-                }
-                if (isset($params['VILLA_POINTS'])) {
-                    $paramData['VILLA_POINTS_TOTAL'] = new Expression('VILLA_POINTS_TOTAL + ' . ($issueBonus ? $params['VILLA_POINTS'] * $exchangeRate : $params['VILLA_POINTS']));
-                }
-                if (isset($params['RECONSUME_POINTS_TOTAL'])) {
-                    $paramData['RECONSUME_POINTS_TOTAL'] = new Expression('RECONSUME_POINTS_TOTAL + ' . ($issueBonus ? $params['RECONSUME_POINTS_TOTAL'] * $exchangeRate : $params['RECONSUME_POINTS_TOTAL']));
-                    //$oneUserBonusModel->RECONSUME_POINTS_TOTAL += $params['RECONSUME_POINTS_TOTAL'];
-                }
-                if (isset($params['EXCHANGE_POINTS_TOTAL'])) {
-                    $paramData['EXCHANGE_POINTS_TOTAL'] = new Expression('EXCHANGE_POINTS_TOTAL + ' . ($issueBonus ? $params['EXCHANGE_POINTS_TOTAL'] * $exchangeRate : $params['EXCHANGE_POINTS_TOTAL']));
-                    //$oneUserBonusModel->RECONSUME_POINTS_TOTAL += $params['RECONSUME_POINTS_TOTAL'];
-                }
-                if (isset($params['MANAGE_TAX'])) {
-                    $paramData['MANAGE_TAX'] = new Expression('MANAGE_TAX + ' . ($issueBonus ? $params['MANAGE_TAX'] * $exchangeRate : $params['MANAGE_TAX']));
-                    //$oneUserBonusModel->MANAGE_TAX += $params['MANAGE_TAX'];
-                }
-
-                if (isset($params['ORI_QY'])) {
-                    $paramData['ORI_QY_TOTAL'] = new Expression('ORI_QY_TOTAL + ' . ($issueBonus ? $params['ORI_QY'] * $exchangeRate : $params['ORI_QY']));
-                    //$oneUserBonusModel->ORI_QY_TOTAL += $params['ORI_QY'];
-                }
-//                if (isset($params['ORI_FW'])) {
-//                    $paramData['ORI_FW_TOTAL'] = new Expression('ORI_FW_TOTAL + '.$params['ORI_FW']);
-//                }
-                if (isset($params['ORI_YC'])) {
-                    $paramData['ORI_YC_TOTAL'] = new Expression('ORI_YC_TOTAL + ' . ($issueBonus ? $params['ORI_YC'] * $exchangeRate : $params['ORI_YC']));
-                    //$oneUserBonusModel->ORI_YC_TOTAL += $params['ORI_YC'];
-                }
-                if (isset($params['ORI_VIP'])) {
-                    $paramData['ORI_VIP_TOTAL'] = new Expression('ORI_VIP_TOTAL + ' . ($issueBonus ? $params['ORI_VIP'] * $exchangeRate : $params['ORI_VIP']));
-                }
-                if (isset($params['ORI_STANDARD'])) {
-                    $paramData['ORI_STANDARD_TOTAL'] = new Expression('ORI_STANDARD_TOTAL + ' . ($issueBonus ? $params['ORI_STANDARD'] * $exchangeRate : $params['ORI_STANDARD']));
-                }
-                if (isset($params['ORI_TG'])) {
-                    $paramData['ORI_TG_TOTAL'] = new Expression('ORI_TG_TOTAL + ' . ($issueBonus ? $params['ORI_TG'] * $exchangeRate : $params['ORI_TG']));
-                    //$oneUserBonusModel->ORI_TG_TOTAL += $params['ORI_TG'];
-                }
-                if (isset($params['ORI_YJ'])) {
-                    $paramData['ORI_YJ_TOTAL'] = new Expression('ORI_YJ_TOTAL + ' . ($issueBonus ? $params['ORI_YJ'] * $exchangeRate : $params['ORI_YJ']));
-                    //$oneUserBonusModel->ORI_YJ_TOTAL += $params['ORI_YJ'];
-                }
-                if (isset($params['ORI_GX'])) {
-                    $paramData['ORI_GX_TOTAL'] = new Expression('ORI_GX_TOTAL + ' . ($issueBonus ? $params['ORI_GX'] * $exchangeRate : $params['ORI_GX']));
-                    //$oneUserBonusModel->ORI_GX_TOTAL += $params['ORI_GX'];
-                }
-                if (isset($params['ORI_GL'])) {
-                    $paramData['ORI_GL_TOTAL'] = new Expression('ORI_GL_TOTAL + ' . ($issueBonus ? $params['ORI_GL'] * $exchangeRate : $params['ORI_GL']));
-                    //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
-                }
-                if (isset($params['ORI_BS'])) {
-                    $paramData['ORI_BS_TOTAL'] = new Expression('ORI_BS_TOTAL + ' . ($issueBonus ? $params['ORI_BS'] * $exchangeRate : $params['ORI_BS']));
-                    //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
-                }
-                if (isset($params['ORI_BS_MNT'])) {
-                    $paramData['BS_MNT_ORI_TOTAL'] = new Expression('BS_MNT_ORI_TOTAL + ' . ($issueBonus ? $params['ORI_BS_MNT'] * $exchangeRate : $params['ORI_BS_MNT']));
-                    //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
-                }
-                if (isset($params['ORI_BS_ABBR'])) {
-                    $paramData['BS_ABBR_ORI_TOTAL'] = new Expression('BS_ABBR_ORI_TOTAL + ' . ($issueBonus ? $params['ORI_BS_ABBR'] * $exchangeRate : $params['ORI_BS_ABBR']));
-                    //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
-                }
-
                 if (isset($params['BONUS_TOTAL'])) {
                     $paramData['BONUS_TOTAL'] = new Expression('BONUS_TOTAL + ' . ($issueBonus ? $params['BONUS_TOTAL'] * $exchangeRate : $params['BONUS_TOTAL']));
-                    //$oneUserBonusModel->BONUS_TOTAL += $params['BONUS_TOTAL'];
                 }
+                // 奖金发放
                 UserBonus::updateAll($paramData, 'USER_ID=:USER_ID', [':USER_ID' => $userId]);
-
             } else {
                 $paramData = [
-                    'USER_ID'=>$userId,
-                    $type=>$issueBonus ? $amount * $exchangeRate : $amount,
-                    'CREATED_AT'=>Date::nowTime()
+                    'USER_ID' => $userId,
+                    $type => $issueBonus ? $amount * $exchangeRate : $amount,
+                    'CREATED_AT' => Date::nowTime()
                 ];
 
-                if (isset($params['QY'])) {
-//                    $paramData['QY_TOTAL'] = new Expression('QY_TOTAL + '.$params['QY']);
-                    $paramData['QY_TOTAL'] =  ($issueBonus ? $params['QY'] * $exchangeRate : $params['QY']);
-                }
-                if (isset($params['FW'])) {
-//                    $paramData['FW_TOTAL'] = new Expression('FW_TOTAL + '.$params['FW']);
-                    $paramData['FW_TOTAL'] = ($issueBonus ? $params['FW'] * $exchangeRate : $params['FW']);
-                }
-                if (isset($params['YC'])) {
-//                    $paramData['YC_TOTAL'] = new Expression('YC_TOTAL + '.$params['YC']);
-                    $paramData['YC_TOTAL'] = ($issueBonus ? $params['YC'] * $exchangeRate : $params['YC']);
-                }
-                if (isset($params['VIP'])) {
-//                    $paramData['VIP_TOTAL'] = new Expression('VIP_TOTAL + '.$params['VIP']);
-                    $paramData['VIP_TOTAL'] = ($issueBonus ? $params['VIP'] * $exchangeRate : $params['VIP']);
-                }
-
-                if (isset($params['BD'])) {
-//                    $paramData['BD_TOTAL'] = new Expression('BD_TOTAL + '.$params['BD']);
-                    $paramData['BD_TOTAL'] = ($issueBonus ? $params['BD'] * $exchangeRate : $params['BD']);
-                    //$oneUserBonusModel->BD_TOTAL += $params['BD'];
-                }
-                if (isset($params['TG'])) {
-//                    $paramData['TG_TOTAL'] = new Expression('TG_TOTAL + '.$params['TG']);
-                    $paramData['TG_TOTAL'] = ($issueBonus ? $params['TG'] * $exchangeRate : $params['TG']);
-                }
-                if (isset($params['YJ'])) {
-//                    $paramData['YJ_TOTAL'] = new Expression('YJ_TOTAL + '.$params['YJ']);
-                    $paramData['YJ_TOTAL'] = ($issueBonus ? $params['YJ'] * $exchangeRate : $params['YJ']);
-                }
-                if (isset($params['GX'])) {
-//                    $paramData['GX_TOTAL'] = new Expression('GX_TOTAL + '.$params['GX']);
-                    $paramData['GX_TOTAL'] = ($issueBonus ? $params['GX'] * $exchangeRate : $params['GX']);
-                }
-                if (isset($params['GL'])) {
-//                    $paramData['GL_TOTAL'] = new Expression('GL_TOTAL + '.$params['GL']);
-                    $paramData['GL_TOTAL'] = ($issueBonus ? $params['GL'] * $exchangeRate : $params['GL']);
-                }
-                if (isset($params['BS'])) {
-                    $paramData['BS_TOTAL'] = ($issueBonus ? $params['BS'] * $exchangeRate : $params['BS']);
-                    //$oneUserBonusModel->GL_TOTAL += $params['GL'];
-                }
-                if (isset($params['BS_MNT'])) {
-                    $paramData['BS_MNT_TOTAL'] = ($issueBonus ? $params['BS_MNT'] * $exchangeRate : $params['BS_MNT']);
-                }
-                if (isset($params['BS_ABBR'])) {
-                    $paramData['BS_ABBR_TOTAL'] = ($issueBonus ? $params['BS_ABBR'] * $exchangeRate : $params['BS_ABBR']);
-                }
-                if (isset($params['TOURISM_POINTS'])) {
-                    $paramData['TOURISM_POINTS_TOTAL'] = $params['TOURISM_POINTS'];
-                }
-                if (isset($params['GARAGE_POINTS'])) {
-                    $paramData['GARAGE_POINTS_TOTAL'] = $params['GARAGE_POINTS'];
-                }
-                if (isset($params['VILLA_POINTS'])) {
-                    $paramData['VILLA_POINTS_TOTAL'] = $params['VILLA_POINTS'];
-                }
-                if (isset($params['RECONSUME_POINTS_TOTAL'])) {
-//                    $paramData['RECONSUME_POINTS_TOTAL'] = new Expression('RECONSUME_POINTS_TOTAL + '.$params['RECONSUME_POINTS_TOTAL']);
-                    $paramData['RECONSUME_POINTS_TOTAL'] = ($issueBonus ? $params['RECONSUME_POINTS_TOTAL'] * $exchangeRate : $params['RECONSUME_POINTS_TOTAL']);
-                }
                 if (isset($params['MANAGE_TAX'])) {
-//                    $paramData['MANAGE_TAX'] = new Expression('MANAGE_TAX + '.$params['MANAGE_TAX']);
                     $paramData['MANAGE_TAX'] = ($issueBonus ? $params['MANAGE_TAX'] * $exchangeRate : $params['MANAGE_TAX']);
                 }
 
-                if (isset($params['ORI_QY'])) {
-//                    $paramData['ORI_QY_TOTAL'] = new Expression('ORI_QY_TOTAL + '.$params['ORI_QY']);
-                    $paramData['ORI_QY_TOTAL'] = ($issueBonus ? $params['ORI_QY'] * $exchangeRate : $params['ORI_QY']);
-                }
-//                if (isset($params['ORI_FW'])) {
-////                    $paramData['ORI_FW_TOTAL'] = new Expression('ORI_FW_TOTAL + '.$params['ORI_FW']);
-//                    $paramData['ORI_FW_TOTAL'] = $params['ORI_FW'];
-//                }
-                if (isset($params['ORI_YC'])) {
-//                    $paramData['ORI_YC_TOTAL'] = new Expression('ORI_YC_TOTAL + '.$params['ORI_YC']);
-                    $paramData['ORI_YC_TOTAL'] = ($issueBonus ? $params['ORI_YC'] * $exchangeRate : $params['ORI_YC']);
-                }
-                if (isset($params['ORI_VIP'])) {
-//                    $paramData['ORI_VIP_TOTAL'] = new Expression('ORI_VIP_TOTAL + '.$params['ORI_VIP']);
-                    $paramData['ORI_VIP_TOTAL'] = ($issueBonus ? $params['ORI_VIP'] * $exchangeRate : $params['ORI_VIP']);
-                }
-                if (isset($params['ORI_STANDARD'])) {
-                    $paramData['ORI_STANDARD_TOTAL'] = ($issueBonus ? $params['ORI_STANDARD'] * $exchangeRate : $params['ORI_STANDARD']);
-                }
-                if (isset($params['ORI_BD'])) {
-//                    $paramData['ORI_BD_TOTAL'] = new Expression('ORI_BD_TOTAL + '.$params['ORI_BD']);
-                    $paramData['ORI_BD_TOTAL'] = ($issueBonus ? $params['ORI_BD'] * $exchangeRate : $params['ORI_BD']);
-                }
-                if (isset($params['ORI_TG'])) {
-//                    $paramData['ORI_TG_TOTAL'] = new Expression('ORI_TG_TOTAL + '.$params['ORI_TG']);
-                    $paramData['ORI_TG_TOTAL'] = ($issueBonus ? $params['ORI_TG'] * $exchangeRate : $params['ORI_TG']);
-                }
-                if (isset($params['ORI_YJ'])) {
-//                    $paramData['ORI_YJ_TOTAL'] = new Expression('ORI_YJ_TOTAL + '.$params['ORI_YJ']);
-                    $paramData['ORI_YJ_TOTAL'] = ($issueBonus ? $params['ORI_YJ'] * $exchangeRate : $params['ORI_YJ']);
-                }
-                if (isset($params['ORI_GX'])) {
-//                    $paramData['ORI_GX_TOTAL'] = new Expression('ORI_GX_TOTAL + '.$params['ORI_GX']);
-                    $paramData['ORI_GX_TOTAL'] = ($issueBonus ? $params['ORI_GX'] * $exchangeRate : $params['ORI_GX']);
-                }
-                if (isset($params['ORI_GL'])) {
-//                    $paramData['ORI_GL_TOTAL'] = new Expression('ORI_GL_TOTAL + '.$params['ORI_GL']);
-                    $paramData['ORI_GL_TOTAL'] = ($issueBonus ? $params['ORI_GL'] * $exchangeRate : $params['ORI_GL']);
-                }
-                if (isset($params['ORI_BS'])) {
-                    $paramData['ORI_BS_TOTAL'] = ($issueBonus ? $params['ORI_BS'] * $exchangeRate : $params['ORI_BS']);
-                    //$oneUserBonusModel->ORI_GL_TOTAL += $params['ORI_GL'];
-                }
-                if (isset($params['ORI_BS_MNT'])) {
-                    $paramData['BS_MNT_ORI_TOTAL'] = ($issueBonus ? $params['ORI_BS_MNT'] * $exchangeRate : $params['ORI_BS_MNT']);
-                }
-                if (isset($params['ORI_BS_ABBR'])) {
-                    $paramData['BS_ABBR_ORI_TOTAL'] = ($issueBonus ? $params['ORI_BS_ABBR'] * $exchangeRate : $params['ORI_BS_ABBR']);
-                }
-
                 if (isset($params['BONUS_TOTAL'])) {
-//                    $paramData['BONUS_TOTAL'] = new Expression('BONUS_TOTAL + '.$params['BONUS_TOTAL']);
                     $paramData['BONUS_TOTAL'] = ($issueBonus ? $params['BONUS_TOTAL'] * $exchangeRate : $params['BONUS_TOTAL']);
                 }
+                // 新增用户奖金记录
                 UserBonus::insertOne($paramData);
             }
 

+ 0 - 28
common/models/BalanceAudit.php

@@ -35,38 +35,10 @@ class BalanceAudit extends \common\components\ActiveRecord
             'name' => 'bonus',
             'label' => 'Member bonus account',//会员账户奖金
         ],
-//        'reconsume_points' => [
-//            'name' => 'reconsume_points',
-//            'label' => '复消积分',
-//        ],
-//        'exchange_points' => [
-//            'name' => 'exchange_points',
-//            'label' => '兑换积分',
-//        ],
         'cash' => [
             'name' => 'cash',
             'label' => 'Member Ecoin account',// 会员账户余额
         ],
-//        'cf' => [
-//            'name' => 'cf',
-//            'label' => '车房养老奖余额',
-//        ],
-//        'lx' => [
-//            'name' => 'lx',
-//            'label' => '领袖分红奖余额',
-//        ],
-//        'tourism_points' => [
-//            'name' => 'tourism_points',
-//            'label' => '旅游积分',
-//        ],
-        'garage_points' => [
-            'name' => 'garage_points',
-            'label' => 'Car points',// 车奖积分
-        ],
-        'villa_points' => [
-            'name' => 'villa_points',
-            'label' => 'Villa points',// 房奖积分
-        ],
     ];
 
     /**

+ 1 - 2
common/models/CalcBonus.php

@@ -126,7 +126,7 @@ class CalcBonus extends \common\components\ActiveRecord
             [['USER_ID', 'LAST_USER_NAME', 'LAST_REAL_NAME', 'LAST_MOBILE', 'LAST_SYSTEM_ID','LAST_LOCATION', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'CALCULATED_AT', 'P_CALC_MONTH', 'CREATED_AT'], 'required'],
             [['LAST_STATUS', 'LAST_PERIOD_AT', 'LAST_CREATED_AT', 'LAST_PROVINCE', 'LAST_CITY', 'LAST_COUNTY', 'LAST_IS_DIRECT_SELLER', 'LAST_LOCATION', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'CALCULATED_AT', 'IS_SENT', 'SENT_AT', 'CREATED_AT'], 'integer'],
             [['ORI_BONUS_BS','EXCHANGE_POINTS','BONUS_BS','BONUS_QY', 'BONUS_YC', 'BONUS_VIP', 'BONUS_FX', 'BONUS_LS', 'BONUS_FW', 'BONUS_BT', 'BONUS_BT_PROD', 'BONUS_BT_TOOL', 'DEDUCT_ZR', 'BONUS_FL', 'BONUS_CF', 'BONUS_LX', 'SHOULD_QY', 'SHOULD_DEDUCT_ZR', 'PV_1L', 'QY_1L', 'SURPLUS_1L', 'PV_2L', 'QY_2L', 'SURPLUS_2L', 'PV_3L', 'QY_3L', 'SURPLUS_3L', 'PV_4L', 'QY_4L', 'SURPLUS_4L', 'PV_5L', 'QY_5L', 'SURPLUS_5L', 'PV_PCS', 'PV_LS_TOUCH', 'SURPLUS_LS', 'QY_LS', 'PV_TOUCH', 'BONUS_REAL', 'BONUS_TOTAL', 'BONUS_INCOME', 'ORI_BONUS_QY','ORI_BONUS_QY_BD','ORI_BONUS_QY_FX','ORI_BONUS_YC', 'ORI_BONUS_VIP','ORI_BONUS_STANDARD','BONUS_BD','ORI_BONUS_BD','BONUS_TG','ORI_BONUS_TG','BONUS_XF','ORI_BONUS_XF','BONUS_YJ','ORI_BONUS_YJ','ORI_BONUS_YJ_BD','ORI_BONUS_YJ_FX','BONUS_GX','ORI_BONUS_GX','REAL_BONUS_GX','BONUS_GL','ORI_BONUS_GL','REAL_BONUS_GL','ORI_BONUS_GL_BD','ORI_BONUS_GL_FX','RECONSUME_POINTS','MANAGE_TAX', 'BONUS_TOURISM', 'BONUS_GARAGE', 'BONUS_VILLA'], 'number'],
-            [['ID', 'USER_ID', 'LAST_DEC_LV', 'LAST_EMP_LV', 'LAST_SUB_COM_ID', 'LAST_SYSTEM_ID', 'LAST_CROWN_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'LAST_DEC_LV', 'LAST_EMP_LV', 'LAST_SUB_COM_ID', 'LAST_SYSTEM_ID'], 'string', 'max' => 32],
             [['LAST_USER_NAME', 'LAST_REC_USER_NAME', 'LAST_CON_USER_NAME'], 'string', 'max' => 16],
             [['LAST_REAL_NAME', 'LAST_REC_REAL_NAME', 'LAST_CON_REAL_NAME'], 'string', 'max' => 128],
             [['LAST_MOBILE'], 'string', 'max' => 11],
@@ -147,7 +147,6 @@ class CalcBonus extends \common\components\ActiveRecord
             'LAST_REAL_NAME' => '结算时会员姓名',
             'LAST_DEC_LV' => '结算时会员级别',
             'LAST_EMP_LV' => '结算时会员聘级',
-            'LAST_CROWN_LV' => '结算时会员星级',
             'LAST_STATUS' => '结算时状态',
             'LAST_MOBILE' => '结算时手机号码',
             'LAST_PERIOD_AT' => '结算时加入期数',

+ 29 - 3
common/models/DealType.php

@@ -37,9 +37,9 @@ class DealType extends \common\components\ActiveRecord
     CONST DEDUCT_LOGOUT = 'A1F1E76F34EE4981AB3BF4F8D20BB53E';//注销扣除
     CONST RECONSUME_POINTS_EXCHANGE = 'YA627DTHN81OBO7NIQ1OP8N3PGZX5C66';//复消积分兑换
     CONST EXCHANGE_POINTS_EXCHANGE = '316872011148300288';//兑换积分兑换
-    CONST TOURISM_SEND = '364305038266470400';// 旅游奖奖金发放
-    CONST GARAGE_SEND = '364305160249413632';// 车奖奖金发放
-    CONST VILLA_SEND = '390992293622059008';// 房奖奖金发放
+    CONST USER_PERFORMANCE_SEND = 'User Performance grant';// 绩效奖金发放
+    CONST USER_PERFORMANCE_EXCHANGE = 'User Performance exchange';// 绩效奖金兑换
+    CONST USER_PERFORMANCE_EXPIRED = 'User Performance expired';// 绩效奖金过期
 
     /**
      * {@inheritdoc}
@@ -111,6 +111,32 @@ class DealType extends \common\components\ActiveRecord
         return self::find()->select('ID,TYPE_NAME')->where('IS_PRESET=0 AND IS_ENABLE=1')->indexBy('ID')->orderBy('SORT_ORDER DESC')->asArray()->all();
     }
 
+    public static function getDealTypeIdByTag($tag)
+    {
+        $records = self::getFromCache();
+
+        foreach ($records as $record) {
+            if ($record['TYPE_NAME'] == $tag) {
+                return $record['ID'];
+            }
+        }
+
+        return '';
+    }
+
+    public static function getDealTypeTagById($dealTypeId)
+    {
+        $records = self::getFromCache();
+
+        foreach ($records as $id => $record) {
+            if ($dealTypeId == $id) {
+                return $record['TYPE_NAME'];
+            }
+        }
+
+        return '';
+    }
+
     /**
      * 获取全部交易类型
      * @return array|\yii\db\ActiveRecord[]

+ 20 - 90
common/models/UserBonus.php

@@ -13,41 +13,8 @@ use common\libs\logging\operate\valueType\Config as ValueTypeConfig;
  * @property string $USER_ID 会员ID
  * @property string $BONUS 奖金总额
  * @property string $BONUS_FREEZE 奖金冻结部分
- * @property string $CF 车房养老奖
- * @property string $LX 领袖分红奖
- * @property string $TOURISM_POINTS 旅游积分
- * @property string $GARAGE_POINTS 车房积分
- * @property string $QY_TOTAL 区域津贴累计
- * @property string $YC_TOTAL 育成津贴累计
- * @property string $VIP_TOTAL VIP奖金累计
- * @property string $FX_TOTAL 复销奖累计
- * @property string $LS_TOTAL 零售奖累计
- * @property string $FW_TOTAL 区级店业绩提成累计
- * @property string $BT_TOTAL 店补累计
- * @property string $BT_PROD_TOTAL 产品补贴累计
- * @property string $BT_TOOL_TOTAL 工具流补贴累计
- * @property string $CF_TOTAL 车房养老奖累计
- * @property string $LX_TOTAL 领袖分红累计
- * @property string $DEDUCT_ZR_TOTAL 责任业绩扣除累计
- * @property string $FL_TOTAL 形象店货补累计
- * @property string $TOURISM_POINTS_TOTAL 旅游积分累积
- * @property string $GARAGE_POINTS_TOTAL 车奖积分累积
- * @property string $VILLA_POINTS_TOTAL 房奖积分累积
  * @property int $VER 乐观锁标识
  * @property int $CREATED_AT 创建时间
- * @property int $BD_TOTAL 服务奖累计
- * @property int $TG_TOTAL 推广奖累计
- * @property int $YJ_TOTAL 业绩奖累计
- * @property int $GX_TOTAL 共享奖累计
- * @property int $GL_TOTAL 管理奖累计
- * @property int $ORI_QY_TOTAL 团队奖原奖金累计
- * @property int $ORI_YC_TOTAL 荣衔奖原奖金累计
- * @property int $ORI_VIP_TOTAL VIP奖原奖金累计
- * @property int $ORI_BD_TOTAL 服务奖原奖金累计
- * @property int $ORI_TG_TOTAL 推广奖原奖金累计
- * @property int $ORI_YJ_TOTAL 业绩奖原奖金累计
- * @property int $ORI_GX_TOTAL 共享奖原奖金累计
- * @property int $ORI_GL_TOTAL 管理奖原奖金累计
  * @property int $RECONSUME_POINTS 复消积分
  * @property int $RECONSUME_POINTS_EXPIRED 复消积分过期
  * @property int $RECONSUME_POINTS_TOTAL 复消积分累计
@@ -73,7 +40,7 @@ class UserBonus extends \common\components\ActiveRecord
     {
         return [
             [['USER_ID', 'CREATED_AT'], 'required'],
-            [['BS_TOTAL','ORI_BS_TOTAL','BS','BONUS', 'BONUS_FREEZE', 'CF', 'LX', 'QY_TOTAL', 'YC_TOTAL', 'VIP_TOTAL', 'FX_TOTAL', 'LS_TOTAL', 'FW_TOTAL', 'BT_TOTAL', 'BT_PROD_TOTAL', 'BT_TOOL_TOTAL', 'CF_TOTAL', 'LX_TOTAL', 'DEDUCT_ZR_TOTAL', 'FL_TOTAL', 'BD_TOTAL','TG_TOTAL','YJ_TOTAL','GX_TOTAL','GL_TOTAL', 'ORI_QY_TOTAL','ORI_YC_TOTAL','ORI_YC_TOTAL','ORI_BD_TOTAL','ORI_TG_TOTAL','ORI_YJ_TOTAL','ORI_GX_TOTAL','ORI_GL_TOTAL','RECONSUME_POINTS','MANAGE_TAX', 'RECONSUME_POINTS_EXPIRED', 'RECONSUME_POINTS_TOTAL', 'BONUS_TOTAL', 'TOURISM_POINTS', 'GARAGE_POINTS', 'VILLA_POINTS'], 'number'],
+            [['BONUS', 'RECONSUME_POINTS', 'MANAGE_TAX', 'BONUS_TOTAL'], 'number'],
             [['VER', 'CREATED_AT'], 'integer'],
             [['ID','USER_ID'], 'string', 'max' => 32],
             [['USER_ID'], 'unique'],
@@ -89,51 +56,13 @@ class UserBonus extends \common\components\ActiveRecord
             'ID' => 'ID',
             'USER_ID' => '会员ID',
             'BONUS' => '奖金总额',
-            'BONUS_FREEZE' => '奖金冻结部分',
-            'CF' => '车房养老奖',
-            'LX' => '领袖分红奖',
-            'QY_TOTAL' => '区域津贴累计',
-            'YC_TOTAL' => '育成津贴累计',
-            'VIP_TOTAL' => 'VIP奖金累计',
-            'FX_TOTAL' => '复销奖累计',
-            'LS_TOTAL' => '零售奖累计',
-            'FW_TOTAL' => '服务奖累计',
-            'BT_TOTAL' => '店补累计',
-            'BT_PROD_TOTAL' => '产品补贴累计',
-            'BT_TOOL_TOTAL' => '工具流补贴累计',
-            'CF_TOTAL' => '车房养老奖累计',
-            'LX_TOTAL' => '领袖分红累计',
-            'DEDUCT_ZR_TOTAL' => '责任业绩扣除累计',
-            'FL_TOTAL' => '形象店货补累计',
             'VER' => '乐观锁标识',
             'CREATED_AT' => '创建时间',
-            'BD_TOTAL'=> '服务奖累计',
-            'TG_TOTAL'=> '推广奖累计',
-            'YJ_TOTAL'=> '业绩奖累计',
-            'GX_TOTAL'=> '共享奖累计',
-            'GL_TOTAL'=> '管理奖累计',
-            'ORI_QY_TOTAL' => '团队奖原奖金累计',
-            'ORI_YC_TOTAL' => '荣衔奖原奖金累计',
-            'ORI_VIP_TOTAL' => 'VIP奖原奖金累计',
-            'ORI_BD_TOTAL' => '服务奖原奖金累计',
-            'ORI_TG_TOTAL' => '推广奖原奖金累计',
-            'ORI_YJ_TOTAL' => '业绩奖原奖金累计',
-            'ORI_GX_TOTAL' => '共享奖原奖金累计',
-            'ORI_GL_TOTAL' => '管理奖原奖金累计',
             'RECONSUME_POINTS' => '复消积分',
             'RECONSUME_POINTS_TOTAL' => '复消积分累计',
             'RECONSUME_POINTS_EXPIRED' => '复消积分过期',
             'MANAGE_TAX' => '管理费累计',
             'BONUS_TOTAL' => '总奖金累计',
-            'BS' => '蓝星奖(即新的管理奖)',
-            'BS_TOTAL' => '蓝星(管理)累计',
-            'ORI_BS_TOTAL' => '蓝星原奖金累计',
-            'TOURISM' => '旅游积分',
-            'TOURISM_TOTAL' => '旅游积分累计',
-            'GARAGE' => '车奖积分',
-            'GARAGE_TOTAL' => '车奖积分累计',
-            'VILLA' => '房奖积分',
-            'VILLA_TOTAL' => '房奖积分累计',
         ];
     }
 
@@ -145,11 +74,6 @@ class UserBonus extends \common\components\ActiveRecord
         return [
             'USER_ID' => '会员ID',
             'BONUS' => '会员账户',
-            'CF' => '车房养老奖',
-            'LX' => '领袖分红奖',
-            'TOURISM' => '旅游积分',
-            'GARAGE' => '车奖积分',
-            'VILLA' => '房奖积分',
         ];
     }
 
@@ -167,19 +91,25 @@ class UserBonus extends \common\components\ActiveRecord
      * @param $userId
      * @return array|null
      */
-    public static function getBonusByUserId($userId){
-        $data = UserBonus::findOneAsArray('USER_ID=:USER_ID', [':USER_ID'=>$userId], 'USER_ID,BONUS,CF,LX');
-        if(!$data){
-            $data = [
-                'USER_ID' => $userId,
-                'BONUS' => 0,
-                'CF' => 0,
-                'LX' => 0,
-                'TOURISM' => 0,
-                'GARAGE' => 0,
-                'VILLA' => 0,
-            ];
+    public static function getBonusByUserId($userId)
+    {
+        $data = UserBonus::findOneAsArray('USER_ID=:USER_ID', [':USER_ID'=>$userId], 'USER_ID,BONUS');
+
+        return $data ?: ['USER_ID' => $userId, 'BONUS' => 0];
+    }
+
+    public function insertOrUpdate()
+    {
+        if ($this->USER_ID !== null) {
+            $pk = $this->USER_ID;
+            if (!empty($this->$pk)) {
+                return $this->update();
+            } else {
+                return $this->insert();
+            }
+        } else {
+            // 如果模型没有定义主键,则直接插入
+            return $this->insert();
         }
-        return $data;
     }
 }

+ 48 - 0
common/models/UserPerformance.php

@@ -184,4 +184,52 @@ class UserPerformance extends \common\components\ActiveRecord
 
         return true;
     }
+
+    /**
+     * 绩效奖金发放
+     * @param $userId
+     * @param $amount
+     * @param $bountyPeriodNum
+     * @return bool
+     * @throws Exception
+     */
+    public static function sentUserPerformance($userId, $amount, $bountyPeriodNum): bool
+    {
+        if ($amount == 0) {
+            return true;
+        }
+
+        $period = Period::instance();
+        $periodNum = $period->getNowPeriodNum();
+
+        $db = \Yii::$app->db;
+        $transaction = $db->beginTransaction();
+        try {
+            // 奖金发放
+            $id = self::primaryKey();
+            self::insertOne([
+                'ID' => $id,
+                'USER_ID' => $userId,
+                'AMOUNTS' => $amount,
+                'ORIGINAL' => $amount,
+                'STATUS_ID' => self::NEWS,
+                'EXPIRED_AT' => date('Y-m-d', strtotime('+1 year', time())),
+                'CREATED_AT' => date('Y-m-d', time()),
+                'UPDATED_AT' => date('Y-m-d', time()),
+                'REMARK' => DealType::getDealTypeIdByTag('User Performance grant'),
+                'BOUNTY_PERIOD_NUM' => $bountyPeriodNum,
+                'PAID_PERIOD_NUM' => $periodNum,
+            ]);
+
+            // 写日志
+            UserPerformanceLogs::changeAmountLogs($id, $amount, $periodNum);
+
+            $transaction->commit();
+        } catch (\Exception $e) {
+            $transaction->rollBack();
+            throw new Exception($e->getMessage());
+        }
+
+        return true;
+    }
 }

+ 1 - 1
common/models/UserPerformanceLogs.php

@@ -47,7 +47,7 @@ class UserPerformanceLogs extends \common\components\ActiveRecord
         return [
             'ID' => 'ID',
             'USER_ID' => '用户id',
-            'AMOUNTS' => '消耗金额',
+            'AMOUNTS' => '金额',
             'CREATED_AT' => '修改时间',
         ];
     }

+ 6 - 1
common/models/forms/PeriodForm.php

@@ -312,6 +312,7 @@ class PeriodForm extends Model
             $this->addError('send', Form::formatErrorsForApi($model->getErrors()));
             return null;
         }
+
         // 异步处理添加任务
         $settings = \Yii::$app->params['swooleAsyncTimer'];
         $bonusSettings = \Yii::$app->params['swooleBonusConfig'];
@@ -328,11 +329,14 @@ class PeriodForm extends Model
      * 异步处理挂网逻辑
      * @param $handleUserId
      * @return bool|null
+     * @throws \yii\db\Exception
      */
-    public function sendAsync($handleUserId){
+    public function sendAsync($handleUserId): ?bool
+    {
         if(!$this->validate()){
             return null;
         }
+
         $bonusSend = BonusSend::instance();
         $bonusSend->init($this->periodNum, $handleUserId);
         $asyncResult = $bonusSend->sendStep();
@@ -342,6 +346,7 @@ class PeriodForm extends Model
             $bonusSend->errorTask();
             $this->addErrors($bonusSend->getErrors());
         }
+
         return $asyncResult;
     }