brook пре 3 година
родитељ
комит
80294b3a38
46 измењених фајлова са 3397 додато и 262 уклоњено
  1. 1 0
      backendApi/config/menu.php
  2. 2 1
      backendApi/config/urlManagerRules.php
  3. 148 97
      backendApi/modules/v1/controllers/BonusController.php
  4. 4 1
      backendApi/modules/v1/controllers/SiteController.php
  5. 3 2
      backendApi/modules/v1/controllers/UserController.php
  6. 12 2
      backendApi/modules/v1/models/lists/atlas/NetworkList.php
  7. 12 2
      backendApi/modules/v1/models/lists/atlas/RelationList.php
  8. 2 2
      backendApi/modules/v1/models/lists/bonus/BalanceList.php
  9. 2 2
      backendApi/modules/v1/models/lists/bonus/FlowBonusList.php
  10. 4 3
      backendApi/modules/v1/models/lists/bonus/PeriodBonusList.php
  11. 2 2
      backendApi/modules/v1/models/lists/finance/BalanceAuditList.php
  12. 1 0
      backendApi/modules/v1/models/lists/log/AdminHandleList.php
  13. 9 2
      backendApi/modules/v1/models/lists/shop/OrderList.php
  14. 40 12
      backendApi/modules/v1/models/lists/user/IndexList.php
  15. 6 0
      backendEle/src/components/FilterUser.vue
  16. 12 0
      backendEle/src/router/index.js
  17. 3 0
      backendEle/src/utils/baseInfo.js
  18. 2 1
      backendEle/src/utils/vuexStore.js
  19. 1 1
      backendEle/src/views/atlas/network-opt.vue
  20. 1 1
      backendEle/src/views/atlas/relation-opt.vue
  21. 148 0
      backendEle/src/views/bonus/perf-adjustment.vue
  22. 2 39
      backendEle/src/views/config/bonus-opt.vue
  23. 13 13
      backendEle/src/views/user/ba-user-list.vue
  24. 1 1
      backendEle/src/views/user/empty-list.vue
  25. 4 4
      backendEle/src/views/user/index.vue
  26. 1 1
      backendEle/src/views/user/user-add-opt.vue
  27. 24 32
      common/helpers/bonus/BonusCalc.php
  28. 31 9
      common/helpers/bonus/BonusSend.php
  29. 1 17
      common/helpers/bonus/PerfCalc.php
  30. 1 1
      common/helpers/user/Balance.php
  31. 1 1
      common/helpers/user/Info.php
  32. 8 0
      common/models/User.php
  33. 10 0
      common/models/UserInfo.php
  34. 16 0
      common/models/UserPerf.php
  35. 6 3
      common/models/Withdraw.php
  36. 1 1
      common/models/forms/AdminAddUserForm.php
  37. 1 1
      common/models/forms/DeclarationUpgradeForm.php
  38. 126 0
      common/models/forms/PerfAdjustmentForm.php
  39. 3 1
      frontendApi/modules/v1/controllers/BonusController.php
  40. 1 1
      frontendEle/src/views/atlas/network.vue
  41. 1 1
      frontendEle/src/views/atlas/relation.vue
  42. 6 3
      frontendEle/src/views/bonus/other.vue
  43. 1 1
      frontendEle/src/views/dashboard/index.vue
  44. 1 1
      frontendEle/src/views/shop/order-list.vue
  45. 2715 0
      sql/StoredProcedure-NG.sql
  46. 7 0
      sql/upgrade/2047.sql

+ 1 - 0
backendApi/config/menu.php

@@ -284,6 +284,7 @@ return [
 //            ['name'=>'Score-month', 'class'=>'', 'icon'=>'', 'controller'=>'bonus', 'action'=>'score-month', 'routePath'=>'bonus/score-month', 'show'=>1,],//月积分
             ['name'=>'月积分导出', 'class'=>'', 'icon'=>'', 'controller'=>'bonus', 'action'=>'score-month-export', 'routePath'=>'bonus/score-month-export', 'show'=>0,],
             ['name'=>'自动提现', 'class'=>'', 'icon'=>'', 'controller'=>'bonus', 'action'=>'auto-withdraw', 'routePath'=>'bonus/auto-withdraw', 'show'=>0,],
+            ['name'=>'Adjust Performance', 'class'=>'', 'icon'=>'', 'controller'=>'bonus', 'action'=>'perf-adjustment', 'routePath'=>'bonus/perf-adjustment', 'show'=>1,],//调整业绩
         ]
     ],
     /*'report'=>[

+ 2 - 1
backendApi/config/urlManagerRules.php

@@ -416,7 +416,8 @@ return [
             'GET yc-perf' => 'yc-perf',
             'GET period-perf' => 'period-perf',
             'GET period-perf-export' => 'period-perf-export',
-            'GET,POST auto-withdraw' => 'auto-withdraw'
+            'GET,POST auto-withdraw' => 'auto-withdraw',
+            'GET,POST perf-adjustment' => 'perf-adjustment',
         ],
     ],
     [

+ 148 - 97
backendApi/modules/v1/controllers/BonusController.php

@@ -47,6 +47,7 @@ use common\helpers\user\Info;
 use common\helpers\user\Perf;
 use common\models\CalcBonus;
 use common\models\CFLXAudit;
+use common\models\forms\PerfAdjustmentForm;
 use common\models\forms\ResendQYForm;
 use common\models\forms\SendCFAndLXForm;
 use common\models\PerfMonth;
@@ -56,6 +57,8 @@ use common\models\ResendQYAudit;
 use common\models\User;
 use common\models\UserInfo;
 use common\models\UserNetwork;
+use common\models\UserPerf;
+use common\models\UserPerfAdjustment;
 use Yii;
 use common\helpers\Form;
 use common\models\Config;
@@ -65,6 +68,7 @@ use common\models\forms\PeriodForm;
 use common\models\forms\UserBonusForm;
 use common\models\Period;
 use Exception;
+use yii\web\HttpException;
 
 class BonusController extends BaseController {
     public $modelClass = FlowBonus::class;
@@ -80,7 +84,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\InvalidConfigException
      * @throws \yii\httpclient\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPeriod() {
         $filter = $this->filterCondition([
@@ -123,7 +127,7 @@ class BonusController extends BaseController {
      * 封期
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionClosePeriod() {
         $periodNum = \Yii::$app->request->get('periodNum');
@@ -142,7 +146,7 @@ class BonusController extends BaseController {
     /**
      * 计算业绩并生成业绩单
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfPeriod() {
         $periodNum = \Yii::$app->request->get('periodNum');
@@ -162,7 +166,7 @@ class BonusController extends BaseController {
     /**
      * 结算封期
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCalcPeriod() {
         $periodNum = \Yii::$app->request->get('periodNum');
@@ -182,7 +186,7 @@ class BonusController extends BaseController {
     /**
      * 挂网
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionSendPeriod() {
         $periodNum = \Yii::$app->request->get('periodNum');
@@ -202,7 +206,7 @@ class BonusController extends BaseController {
     /**
      * 查看业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerf() {
         // 获取当前年月
@@ -230,7 +234,7 @@ class BonusController extends BaseController {
      * 奖金流水
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowBonus() {
         $filter = $this->filterCondition([
@@ -262,7 +266,7 @@ class BonusController extends BaseController {
      * 奖金流水
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowBonusExport() {
         $filter = $this->filterCondition([
@@ -295,7 +299,7 @@ class BonusController extends BaseController {
      * 复消积分流水
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowRp() {
         $filter = $this->filterCondition([
@@ -322,7 +326,7 @@ class BonusController extends BaseController {
      * 复消积分流水导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowRpExport() {
         $filter = $this->filterCondition([
@@ -351,7 +355,7 @@ class BonusController extends BaseController {
      * 会员余额流水 
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowBalance() {
         $filter = $this->filterCondition([
@@ -376,7 +380,7 @@ class BonusController extends BaseController {
      * 会员余额流水导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowBalanceExport() {
         $filter = $this->filterCondition([
@@ -403,7 +407,7 @@ class BonusController extends BaseController {
      * 兑换积分流水
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowExchange() {
         $filter = $this->filterCondition([
@@ -430,7 +434,7 @@ class BonusController extends BaseController {
      * 兑换积分流水导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowExchangeExport() {
         $filter = $this->filterCondition([
@@ -458,7 +462,7 @@ class BonusController extends BaseController {
      * 现金钱包流水
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowWallet() {
         $filter = $this->filterCondition([
@@ -485,7 +489,7 @@ class BonusController extends BaseController {
      * 现金钱包流水导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowWalletExport() {
         $filter = $this->filterCondition([
@@ -513,7 +517,7 @@ class BonusController extends BaseController {
      * 车房流水
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowCf() {
         $filter = $this->filterCondition([
@@ -541,7 +545,7 @@ class BonusController extends BaseController {
      * 车房养老奖流水导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowCfExport() {
         $filter = $this->filterCondition([
@@ -570,7 +574,7 @@ class BonusController extends BaseController {
      * 领袖分红流水
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowLx() {
         $filter = $this->filterCondition([
@@ -598,7 +602,7 @@ class BonusController extends BaseController {
      * 导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionFlowLxExport() {
         $filter = $this->filterCondition([
@@ -627,7 +631,7 @@ class BonusController extends BaseController {
      * 车房养老奖和领袖分红年度发放审核列表
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCfLxAuditList() {
         $filter = $this->filterCondition([
@@ -652,7 +656,7 @@ class BonusController extends BaseController {
      * 车房养老奖和领袖分红年度发放审核导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCfLxAuditExport() {
         $filter = $this->filterCondition([
@@ -678,7 +682,7 @@ class BonusController extends BaseController {
      * 申请发放车房养老奖和领袖分红
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCfLxApply() {
         if (Yii::$app->request->isPost) {
@@ -701,7 +705,7 @@ class BonusController extends BaseController {
      * 审核车房养老奖和领袖分红
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCfLxAudit() {
         $formModel = new SendCFAndLXForm();
@@ -716,7 +720,7 @@ class BonusController extends BaseController {
      * 删除车房领袖审核信息
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCfLxAuditDelete() {
         $sendCFAndLXForm = new SendCFAndLXForm();
@@ -734,7 +738,7 @@ class BonusController extends BaseController {
      * 查看所传期数的各项奖金
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPeriodDetail() {
         $periodNum = \Yii::$app->request->get('periodNum');
@@ -769,7 +773,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionNewPeriodBonus() {
         $periodNum = Period::calculatedMaxPeriodNum();
@@ -781,7 +785,7 @@ class BonusController extends BaseController {
      * 最新一期奖金导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionNewPeriodBonusExport() {
         $filter = $this->filterCondition([
@@ -831,7 +835,7 @@ class BonusController extends BaseController {
      * 获取往期已结算的奖金
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionOtherPeriodBonus() {
         $periodNumRequest = \Yii::$app->request->get('periodNum');
@@ -853,7 +857,7 @@ class BonusController extends BaseController {
      * 往期奖金导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionOtherPeriodBonusExport() {
         $filter = $this->filterCondition([
@@ -912,7 +916,7 @@ class BonusController extends BaseController {
     /**
      * 获取筛选类型
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionOtherPeriodBonusFilterTypes(){
         $listObj = new PeriodBonusList();
@@ -936,6 +940,7 @@ class BonusController extends BaseController {
             'LAST_REAL_NAME' => 'CB.LAST_REAL_NAME',
             'LAST_DEC_LV_NAME' => 'CB.LAST_DEC_LV',
             'LAST_EMP_LV_NAME' => 'CB.LAST_EMP_LV',
+            'LAST_CROWN_LV_NAME' => 'CB.LAST_CROWN_LV',
             'LAST_MOBILE' => 'CB.LAST_MOBILE',
             'LAST_PERIOD_AT' => 'CB.LAST_PERIOD_AT',
             'LAST_CREATED_AT' => 'CB.LAST_CREATED_AT',
@@ -988,7 +993,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownQy() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1040,7 +1045,7 @@ class BonusController extends BaseController {
      * 团队奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownQyExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1071,7 +1076,7 @@ class BonusController extends BaseController {
      * 团队奖向上追溯
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpQy() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1091,7 +1096,7 @@ class BonusController extends BaseController {
      * 团队奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpQyExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1115,7 +1120,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownYc() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1140,7 +1145,7 @@ class BonusController extends BaseController {
      * 荣衔奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownYcExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1165,7 +1170,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownBd() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1190,7 +1195,7 @@ class BonusController extends BaseController {
      * 服务奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownBdExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1216,7 +1221,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownTg() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1241,7 +1246,7 @@ class BonusController extends BaseController {
      * 推广奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownTgExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1266,7 +1271,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownXf() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1291,7 +1296,7 @@ class BonusController extends BaseController {
      * 消费奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownXfExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1316,7 +1321,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownYj() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1341,7 +1346,7 @@ class BonusController extends BaseController {
      * 业绩奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownYjExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1366,7 +1371,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownGx() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1391,7 +1396,7 @@ class BonusController extends BaseController {
      * 共享奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownGxExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1416,7 +1421,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownGl() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1441,7 +1446,7 @@ class BonusController extends BaseController {
      * 管理奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownGlExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1466,7 +1471,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpYc() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1491,7 +1496,7 @@ class BonusController extends BaseController {
      * 荣衔奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpYcExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1517,7 +1522,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpBd() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1542,7 +1547,7 @@ class BonusController extends BaseController {
      * 服务奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpBdExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1567,7 +1572,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpTg() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1592,7 +1597,7 @@ class BonusController extends BaseController {
      * 推广奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpTgExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1617,7 +1622,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpXf() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1642,7 +1647,7 @@ class BonusController extends BaseController {
      * 推广奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpXfExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1667,7 +1672,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpYj() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1692,7 +1697,7 @@ class BonusController extends BaseController {
      * 业绩奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpYjExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1717,7 +1722,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpGx() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1742,7 +1747,7 @@ class BonusController extends BaseController {
      * 共享奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpGxExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1767,7 +1772,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpGl() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1792,7 +1797,7 @@ class BonusController extends BaseController {
      * 管理奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpGlExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1818,7 +1823,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownFx() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1843,7 +1848,7 @@ class BonusController extends BaseController {
      * 复销奖向下追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceDownFxExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1868,7 +1873,7 @@ class BonusController extends BaseController {
      * @return mixed
      * @throws \yii\base\Exception
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpFx() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1893,7 +1898,7 @@ class BonusController extends BaseController {
      * 复销奖向上追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceUpFxExport() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1917,7 +1922,7 @@ class BonusController extends BaseController {
      * 核算会员区域津贴
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionCalcQy() {
         $periodNum = Yii::$app->request->get('periodNum');
@@ -1945,7 +1950,7 @@ class BonusController extends BaseController {
      * 补发区域津贴列表
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQyList() {
         $filter = $this->filterCondition([
@@ -1987,7 +1992,7 @@ class BonusController extends BaseController {
      * 区域津贴补发列表导出 
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQyListExport() {
         $filter = $this->filterCondition([
@@ -2030,7 +2035,7 @@ class BonusController extends BaseController {
      * 补发区域津贴
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQy() {
         if (Yii::$app->request->isPost) {
@@ -2057,7 +2062,7 @@ class BonusController extends BaseController {
      * 补发审核表
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQyAuditList() {
         $filter = $this->filterCondition([
@@ -2082,7 +2087,7 @@ class BonusController extends BaseController {
      * 补发审核表导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQyAuditListExport() {
         $filter = $this->filterCondition([
@@ -2108,7 +2113,7 @@ class BonusController extends BaseController {
      * 审核补发区域津贴
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQyAudit() {
         $formModel = new ResendQYForm();
@@ -2127,7 +2132,7 @@ class BonusController extends BaseController {
      * 删除补发区域津贴审核信息
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionResendQyAuditDelete() {
         $resendQYForm = new ResendQYForm();
@@ -2145,7 +2150,7 @@ class BonusController extends BaseController {
      * 余额列表
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionBalanceList() {
         $filter = $this->filterCondition([
@@ -2175,7 +2180,7 @@ class BonusController extends BaseController {
      * 会员奖金余额导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionBalanceExport() {
         $filter = $this->filterCondition([
@@ -2202,7 +2207,7 @@ class BonusController extends BaseController {
      * 报单中心店补/补贴追溯
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceBt() {
         $startPeriodNum = Yii::$app->request->get('startPeriodNum');
@@ -2236,7 +2241,7 @@ class BonusController extends BaseController {
      * 报单中心补贴追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceBtExport() {
         $startPeriodNum = Yii::$app->request->get('startPeriodNum');
@@ -2272,7 +2277,7 @@ class BonusController extends BaseController {
      * 报单中心货补追溯
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceFl() {
         $startPeriodNum = Yii::$app->request->get('startPeriodNum');
@@ -2301,7 +2306,7 @@ class BonusController extends BaseController {
      * 报单中心货补追溯导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceFlExport() {
         $startPeriodNum = Yii::$app->request->get('startPeriodNum');
@@ -2332,7 +2337,7 @@ class BonusController extends BaseController {
      * 区域业绩提成追溯
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceFw() {
         $startPeriodNum = Yii::$app->request->get('startPeriodNum');
@@ -2361,7 +2366,7 @@ class BonusController extends BaseController {
      * 区域业绩提成导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionTraceFwExport() {
         $startPeriodNum = Yii::$app->request->get('startPeriodNum');
@@ -2392,7 +2397,7 @@ class BonusController extends BaseController {
      * 业绩单
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfOrder(){
         $filter = $this->filterCondition([
@@ -2422,7 +2427,7 @@ class BonusController extends BaseController {
      * 业绩单导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfOrderExport() {
         $filter = $this->filterCondition([
@@ -2466,7 +2471,7 @@ class BonusController extends BaseController {
      * 月积分
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionScoreMonth(){
         $filter = $this->filterCondition([
@@ -2487,7 +2492,7 @@ class BonusController extends BaseController {
      * 月积分导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionScoreMonthExport() {
         $filter = $this->filterCondition([
@@ -2510,7 +2515,7 @@ class BonusController extends BaseController {
      * 月业绩
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfMonth(){
         $filter = $this->filterCondition([
@@ -2532,7 +2537,7 @@ class BonusController extends BaseController {
      * 月业绩导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfMonthExport() {
         $filter = $this->filterCondition([
@@ -2556,7 +2561,7 @@ class BonusController extends BaseController {
      * 期业绩
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfPeriodList(){
         $filter = $this->filterCondition([
@@ -2577,7 +2582,7 @@ class BonusController extends BaseController {
      * 期业绩导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfPeriodListExport() {
         $filter = $this->filterCondition([
@@ -2601,7 +2606,7 @@ class BonusController extends BaseController {
      * 达标业绩
      * @return mixed
      * @throws \yii\base\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfStandard(){
         $filter = $this->filterCondition([
@@ -2623,7 +2628,7 @@ class BonusController extends BaseController {
      * 达标业绩导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionPerfStandardExport() {
         $filter = $this->filterCondition([
@@ -2647,7 +2652,7 @@ class BonusController extends BaseController {
     /**
      * 会员实时业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionRealTimePerf() {
         $userName = Yii::$app->request->get('userName');
@@ -2676,7 +2681,7 @@ class BonusController extends BaseController {
     /**
      * 荣衔业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionYcPerf() {
         $userName = Yii::$app->request->get('userName');
@@ -2738,7 +2743,7 @@ class BonusController extends BaseController {
     /**
      * 用户业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionUserPerf() {
         $filter = $this->filterCondition([
@@ -2756,7 +2761,7 @@ class BonusController extends BaseController {
      * 月业绩导出
      * @return mixed
      * @throws \yii\db\Exception
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionUserPerfExport() {
         $filter = $this->filterCondition([
@@ -2791,4 +2796,50 @@ class BonusController extends BaseController {
         }
     }
 
+    /**
+     * 查询安置网下级会员和业绩、修改业绩
+     * @return mixed|void
+     * @throws HttpException
+     * @throws \yii\base\Exception
+     */
+    public function actionPerfAdjustment()
+    {
+        // 查询业绩
+        if (\Yii::$app->request->isGet) {
+            $memberCode = Yii::$app->request->get('memberCode');
+            $userId = Info::getUserIdByUserName(trim($memberCode));
+
+            // 查询传入会员业绩
+            $perfMarket = UserPerf::getPerfMarket($userId);
+            if ($perfMarket) {
+                // 查询传入会员的安置网下级
+                $memberList = UserNetwork::getFirstFloorChildren($userId);
+                $memberList = array_column($memberList, NULL, 'RELATIVE_LOCATION');
+                // 左腿1市场
+                $leftPerfUserName = (isset($memberList[1]) && $memberList[1]['USER_ID']) ? Info::getUserNameByUserId($memberList[1]['USER_ID']) : '';
+                // 右腿2市场
+                $rightPerfUserName = (isset($memberList[2]) && $memberList[1]['USER_ID']) ? Info::getUserNameByUserId($memberList[2]['USER_ID']) : '';
+
+                // 会员编号
+                $perfMarket['USER_NAME'] = $memberCode;
+                $perfMarket['SURPLUS_1L_USER_NAME'] = $leftPerfUserName;
+                $perfMarket['SURPLUS_2L_USER_NAME'] = $rightPerfUserName;
+
+                return static::notice(['allData' => $perfMarket]);
+            }
+
+            return static::notice('No data', 400);
+        } else if (\Yii::$app->request->isPost) {
+            $formModel = new PerfAdjustmentForm();
+            $formModel->scenario = 'perfAdjustment';
+            $post = \Yii::$app->request->post();
+            if ($formModel->load($post, '') && $formModel->perfAdjustment()) {
+                return static::notice('Successful');
+            } else {
+                return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
+            }
+        } else {
+            return static::notice('Illegal request', 400); // 非法请求
+        }
+    }
 }

+ 4 - 1
backendApi/modules/v1/controllers/SiteController.php

@@ -67,8 +67,10 @@ class SiteController extends BaseController
     public function actionBaseInfo(){
         // 会员级别
         $decLevels = Cache::getDecLevelConfig();
-        // 
+        // 管理星
         $empLevels = Cache::getEmpLevelConfig();
+        // 皇冠星级
+        $crownLevels = Cache::getStarCrownLevelConfig();
         // 注册类型
         $regTypes = RegType::getTypes();
         // 类型
@@ -104,6 +106,7 @@ class SiteController extends BaseController
         return [
             'decLevels' => $decLevels,
             'empLevels' => $empLevels,
+            'crownLevels' => $crownLevels,
             'regTypes' => $regTypes,
             'dealTypes' => $dealTypes,
             'systems' => $systems,

+ 3 - 2
backendApi/modules/v1/controllers/UserController.php

@@ -114,8 +114,9 @@ class UserController extends BaseController
             'DEC_LV_UPDATED_AT' => 'U.DEC_LV_UPDATED_AT',
             'LAST_DEC_LV_NAME' => 'U.LAST_DEC_LV',
             'EMP_LV_NAME' => 'U.EMP_LV',
-//            'HIGHEST_EMP_LV_NAME' => 'UI.HIGHEST_EMP_LV',
-//            'HIGHEST_EMP_LV_PERIOD' => 'UI.HIGHEST_EMP_LV_PERIOD',
+            'LAST_EMP_LV_NAME' => 'U.LAST_EMP_LV',
+            'CROWN_LV_NAME' => 'U.CROWN_LV',
+            'LAST_CROWN_LV_NAME' => 'U.LAST_CROWN_LV',
             'REC_USER_NAME' => 'RU.USER_NAME',
             'CON_USER_NAME' => 'CU.USER_NAME',
             'ID_CARD' => 'U.ID_CARD',

+ 12 - 2
backendApi/modules/v1/models/lists/atlas/NetworkList.php

@@ -10,8 +10,10 @@ use common\helpers\user\Perf;
 use common\libs\dataList\column\Price;
 use common\libs\dataList\DataListInterface;
 use common\models\CalcBonus;
+use common\models\EmployLevel;
 use common\models\PerfMonth;
 use common\models\Period;
+use common\models\StarCrownLevel;
 use common\models\UserBind;
 use common\models\UserInfo;
 use common\libs\dataList\column\DateTime;
@@ -42,6 +44,7 @@ class NetworkList extends \common\libs\dataList\DataList implements DataListInte
         $mainUserInfo = Info::baseInfo($userId, $periodNum);
         $decLevelConfig = Cache::getDecLevelConfig();
         $empLevelConfig = Cache::getEmpLevelConfig();
+        $crownLevelConfig = Cache::getStarCrownLevelConfig();
         $param = [];
         if ( $this->pageSize ) $param['pageSize'] = $this->pageSize;
         if ( $this->page !== null ) $param['page'] = $this->page;
@@ -56,7 +59,8 @@ class NetworkList extends \common\libs\dataList\DataList implements DataListInte
             $this->listData['list'][$key]['REAL_NAME'] = $userBaseInfo['REAL_NAME'];
             $this->listData['list'][$key]['PERIOD_AT'] = $userBaseInfo['PERIOD_AT'];
             $this->listData['list'][$key]['DEC_LV_NAME'] = $decLevelConfig[$userBaseInfo['DEC_LV']]['LEVEL_NAME'];
-            $this->listData['list'][$key]['EMP_LV_NAME'] = isset($empLevelConfig[$userBaseInfo['EMP_LV']])?$empLevelConfig[$userBaseInfo['EMP_LV']]['LEVEL_NAME']:'';
+            $this->listData['list'][$key]['EMP_LV_NAME'] = isset($empLevelConfig[$userBaseInfo['EMP_LV']])?$empLevelConfig[$userBaseInfo['EMP_LV']]['LEVEL_NAME']:$empLevelConfig[EmployLevel::getDefaultLevelId()]['LEVEL_NAME'];
+            $this->listData['list'][$key]['CROWN_LV_NAME'] = isset($crownLevelConfig[$userBaseInfo['CROWN_LV']]) ? $crownLevelConfig[$userBaseInfo['CROWN_LV']]['LEVEL_NAME'] : $crownLevelConfig[StarCrownLevel::getDefaultLevelId()]['LEVEL_NAME'];
         }
         $this->listData['periodNum'] = $periodNum;
         $this->listData['listTopDeep'] = $mainUserInfo['NETWORK_DEEP'];
@@ -89,7 +93,13 @@ class NetworkList extends \common\libs\dataList\DataList implements DataListInte
                     ],
                 ],
                 'EMP_LV_NAME' => [
-                    'header' => 'Recommended Member Rank', // 推荐会员聘级
+                    'header' => 'Highest Director', // 最高管理星级
+                    'headerOther' => [
+                        'width' => '210',
+                    ],
+                ],
+                'CROWN_LV_NAME' => [
+                    'header' => 'Highest Crown', // 最高皇冠星级
                     'headerOther' => [
                         'width' => '210',
                     ],

+ 12 - 2
backendApi/modules/v1/models/lists/atlas/RelationList.php

@@ -9,7 +9,9 @@ use common\helpers\user\Info;
 use common\libs\dataList\column\Price;
 use common\libs\dataList\DataListInterface;
 use common\models\CalcBonus;
+use common\models\EmployLevel;
 use common\models\Period;
+use common\models\StarCrownLevel;
 use common\models\UserBind;
 use common\models\UserInfo;
 use common\libs\dataList\column\DateTime;
@@ -40,6 +42,7 @@ class RelationList extends \common\libs\dataList\DataList implements DataListInt
         $mainUserInfo = Info::baseInfo($userId, $periodNum);
         $decLevelConfig = Cache::getDecLevelConfig();
         $empLevelConfig = Cache::getEmpLevelConfig();
+        $crownLevelConfig = Cache::getStarCrownLevelConfig();
         $param = [];
         if ( $this->pageSize ) $param['pageSize'] = $this->pageSize;
         if ( $this->page !== null ) $param['page'] = $this->page;
@@ -53,7 +56,8 @@ class RelationList extends \common\libs\dataList\DataList implements DataListInt
             $this->listData['list'][$key]['REAL_NAME'] = $userBaseInfo['REAL_NAME'];
             $this->listData['list'][$key]['PERIOD_AT'] = $userBaseInfo['PERIOD_AT'];
             $this->listData['list'][$key]['DEC_LV_NAME'] = $decLevelConfig[$userBaseInfo['DEC_LV']]['LEVEL_NAME'];
-            $this->listData['list'][$key]['EMP_LV_NAME'] = isset($empLevelConfig[$userBaseInfo['EMP_LV']])?$empLevelConfig[$userBaseInfo['EMP_LV']]['LEVEL_NAME']:'';
+            $this->listData['list'][$key]['EMP_LV_NAME'] = isset($empLevelConfig[$userBaseInfo['EMP_LV']]) ? $empLevelConfig[$userBaseInfo['EMP_LV']]['LEVEL_NAME'] : $empLevelConfig[EmployLevel::getDefaultLevelId()]['LEVEL_NAME'];
+            $this->listData['list'][$key]['CROWN_LV_NAME'] = isset($crownLevelConfig[$userBaseInfo['CROWN_LV']]) ? $crownLevelConfig[$userBaseInfo['CROWN_LV']]['LEVEL_NAME'] : $crownLevelConfig[StarCrownLevel::getDefaultLevelId()]['LEVEL_NAME'];
         }
         $this->listData['periodNum'] = $periodNum;
         $this->listData['listTopDeep'] = $mainUserInfo['RELATION_DEEP'];
@@ -89,7 +93,13 @@ class RelationList extends \common\libs\dataList\DataList implements DataListInt
                     ],
                 ],
                 'EMP_LV_NAME' => [
-                    'header' => 'Recommended Member Rank', // 推荐会员聘级
+                    'header' => 'Highest Director', // 推荐会员聘级
+                    'headerOther' => [
+                        'width' => '210',
+                    ],
+                ],
+                'CROWN_LV_NAME' => [
+                    'header' => 'Highest Crown ', // 推荐会员聘级
                     'headerOther' => [
                         'width' => '210',
                     ],

+ 2 - 2
backendApi/modules/v1/models/lists/bonus/BalanceList.php

@@ -74,7 +74,7 @@ class BalanceList extends \common\libs\dataList\DataList implements DataListInte
                     ],
                 ],
                 'IS_DEC' => [
-                    'header' => 'Whether Declaration Center', // 是否报单中心
+                    'header' => 'Whether Stockist', // 是否报单中心
                     'value' => function($row) {
                         return (new YesNo([
                             'value' => $row['IS_DEC'],
@@ -199,7 +199,7 @@ class BalanceList extends \common\libs\dataList\DataList implements DataListInte
             $this->filterTypes = [
                 'USER_NAME'=> ['isUserTable'=> false, 'name'=> 'Member Code'], // 会员编号
                 'REAL_NAME'=> ['isUserTable'=> false, 'name'=> 'Member Name'], // 会员姓名
-                'IS_DEC'=> ['isUserTable'=> false, 'name'=> 'Whether Declaration Center', 'other'=> 'yesOrNo'], // 是否报单中心
+                'IS_DEC'=> ['isUserTable'=> false, 'name'=> 'Whether Stockist', 'other'=> 'yesOrNo'], // 是否报单中心
                 'BONUS'=> ['isUserTable'=> false, 'name'=> 'Member Bonus'], // 会员奖金余额
                 'CASH'=> ['isUserTable'=> false, 'name'=> 'Member Ecoin'], // 会员余额
                 'PERIOD_AT'=> ['isUserTable'=> false, 'name'=> 'Joining Period'], // 加入期数

+ 2 - 2
backendApi/modules/v1/models/lists/bonus/FlowBonusList.php

@@ -110,7 +110,7 @@ class FlowBonusList extends \common\libs\dataList\DataList implements DataListIn
                     ],
                 ],
                 'IS_DEC' => [
-                    'header' => 'Whether Declaration Center', // 是否报单中心
+                    'header' => 'Whether Stockist', // 是否报单中心
                     'value' => function ($row) {
                         return (new YesNo([
                             'value' => $row['IS_DEC'],
@@ -206,7 +206,7 @@ class FlowBonusList extends \common\libs\dataList\DataList implements DataListIn
                 'REAL_NAME' => ['isUserTable' => false, 'name' => 'Member Name'], // 会员姓名
                 'LAST_DEC_LV_NAME' => ['isUserTable' => false, 'name' => 'Member Level', 'other' => 'decLevel'], // 会员等级
                 'LAST_EMP_LV_NAME' => ['isUserTable' => false, 'name' => 'Rank', 'other' => 'empLevel'], // 聘级
-                'IS_DEC' => ['isUserTable' => false, 'name' => 'Whether Declaration Center', 'other' => 'yesOrNo'], // 是否报单中心
+                'IS_DEC' => ['isUserTable' => false, 'name' => 'Whether Stockist', 'other' => 'yesOrNo'], // 是否报单中心
                 'AMOUNT' => ['isUserTable' => false, 'name' => 'Debit/Credit'], // 交易额
                 'TOTAL' => ['isUserTable' => false, 'name' => 'New Balance'], // 交易后余额
                 'ADMIN_NAME' => ['isUserTable' => false, 'name' => 'Operator'], // 操作人

+ 4 - 3
backendApi/modules/v1/models/lists/bonus/PeriodBonusList.php

@@ -118,13 +118,13 @@ class PeriodBonusList extends \common\libs\dataList\DataList implements DataList
                     ],
                 ],
                 'LAST_EMP_LV_NAME' => [
-                    'header' => 'Director Rank', // 结算时会员聘
+                    'header' => 'Latest Director', // 结算时会员最新管理星
                     'headerOther' => [
                         'width' => '140',
                     ],
                 ],
                 'LAST_CROWN_LV_NAME' => [
-                    'header' => 'Crown Rank',//结算时会员聘
+                    'header' => 'Latest Crown',//结算时会员最新皇冠星
                     'headerOther' => [
                         'width' => '140',
                     ],
@@ -304,7 +304,8 @@ class PeriodBonusList extends \common\libs\dataList\DataList implements DataList
                 'LAST_USER_NAME'=> ['isUserTable'=> false, 'name'=> 'Member Code'], // 会员编号
                 'LAST_REAL_NAME'=> ['isUserTable'=> false, 'name'=> 'Member Name'], // 会员姓名
                 'LAST_DEC_LV_NAME'=> ['isUserTable'=> false, 'name'=> 'PC Member Level', 'other'=> 'decLevel'], // 结算时会员级别
-                'LAST_EMP_LV_NAME'=> ['isUserTable'=> false, 'name'=> 'Director Rank', 'other'=> 'empLevel'], // 结算时会员聘级
+                'LAST_EMP_LV_NAME'=> ['isUserTable'=> false, 'name'=> 'Latest Director', 'other'=> 'empLevel'], // 结算时会员管理星级
+                'LAST_CROWN_LV_NAME'=> ['isUserTable'=> false, 'name'=> 'Latest Crown', 'other'=> 'crownLevel'], // 结算时会员皇冠星级
                 'LAST_MOBILE'=> ['isUserTable'=> false, 'name'=> 'Phone Number'], // 手机号
                 'LAST_PERIOD_AT'=> ['isUserTable'=> false, 'name'=> 'Joining Period'], // 加入期数
                 'LAST_CREATED_AT'=> ['isUserTable'=> false, 'name'=> 'Joining Date', 'other'=> 'date'], // 加入时间

+ 2 - 2
backendApi/modules/v1/models/lists/finance/BalanceAuditList.php

@@ -87,7 +87,7 @@ class BalanceAuditList extends \common\libs\dataList\DataList implements DataLis
                     ],
                 ],
                 'LAST_DEC_ROLE_NAME' => [
-                    'header' => 'Declaration center level', // 报单中心级别
+                    'header' => 'Stockist level', // 报单中心级别
                     'headerOther' => [
                         'width' => '170',
                     ],
@@ -207,7 +207,7 @@ class BalanceAuditList extends \common\libs\dataList\DataList implements DataLis
                 'USER_NAME' => ['isUserTable' => false, 'name' => 'Member code'], //会员编号
                 'REAL_NAME' => ['isUserTable' => false, 'name' => 'Member name'], //会员姓名
                 'LAST_DEC_LV_NAME' => ['isUserTable' => false, 'name' => 'Member level', 'other' => 'decLevel'], // 会员级别
-                'LAST_DEC_ROLE_NAME' => ['isUserTable' => false, 'name' => 'Declaration center level', 'other' => 'decRole'], // 报单中心级别
+                'LAST_DEC_ROLE_NAME' => ['isUserTable' => false, 'name' => 'Stockist level', 'other' => 'decRole'], // 报单中心级别
                 'LAST_EMP_LV_NAME' => ['isUserTable' => false, 'name' => 'rank', 'other' => 'empLevel'], // 聘级
                 'TYPE_NAME' => ['isUserTable' => false, 'name' => 'Account type', 'other' => 'select', 'selectData' => Tool::formatFilter(BalanceAudit::TYPE, 'name', 'label')], // 账户类型
                 'DEAL_TYPE_NAME' => ['isUserTable' => false, 'name' => 'Transaction type', 'other' => 'select', 'selectData' => Tool::formatFilter(DealType::getAllTypesForShow(), 'ID', 'TYPE_NAME')], // 交易类型

+ 1 - 0
backendApi/modules/v1/models/lists/log/AdminHandleList.php

@@ -155,6 +155,7 @@ class AdminHandleList extends \common\libs\dataList\DataList implements DataList
                 ['id'=>'添加体系','name'=>'添加体系'],
                 ['id'=>'编辑体系','name'=>'编辑体系'],
                 ['id'=>'恢复体系','name'=>'恢复体系'],
+                ['id'=>'perf adjustment','name'=>'perf adjustment'],
             ];
             $this->filterTypes = [
                 'opt_type' => ['isUserTable'=>false, 'name'=>'操作类型', 'other'=> 'select', 'selectData'=> $selectData],

+ 9 - 2
backendApi/modules/v1/models/lists/shop/OrderList.php

@@ -178,7 +178,7 @@ class OrderList extends \common\libs\dataList\DataList implements DataListInterf
                     'value' => function ($row) {
                         switch ($row['ORDER_TYPE']) {
                             case 'ZC':
-                                return 'Welcome pack';
+                                return 'Welcome Pack';
                             case 'FX':
                                 return in_array($row['PAY_TYPE'], ['cash', 'pay_stack']) ? 'Repeat Purchase': 'Points'; //'重消' : '积分'
                         }
@@ -361,7 +361,14 @@ class OrderList extends \common\libs\dataList\DataList implements DataListInterf
                 'SN'=> ['name'=> 'Order No'],//订单编号
                 'USER_NAME'=> ['name'=> 'Member Code'],//会员编号
                 'MOBILE'=> ['name'=> 'Contact 1'],//联系方式1
-                'ORDER_TYPE'=> ['name'=> 'Order Type'],
+                'ORDER_TYPE'=> [
+                    'name'=> 'Order Type',
+                    'other'=> 'select',
+                    'selectData'=> [
+                        ['id' => 'ZC', 'name' => 'Welcome Pack'],
+                        ['id' => 'FX', 'name' => 'Repeat Purchase'],
+                    ]
+                    ],
                 'PERIOD_NUM'=> ['name'=> 'Number Of Periods'],//期数
                 'CREATED_AT'=> ['name'=> 'Creation Time', 'other'=>'date'],//创建时间
                 'STATUS'=> [

+ 40 - 12
backendApi/modules/v1/models/lists/user/IndexList.php

@@ -6,8 +6,10 @@ use common\helpers\http\BackendToFrontendApi;
 use common\helpers\user\Info;
 use common\libs\dataList\DataListInterface;
 use common\models\DecRole;
+use common\models\EmployLevel;
 use common\models\OpenBank;
 use common\models\Region;
+use common\models\StarCrownLevel;
 use common\models\User;
 use common\models\UserInfo;
 use common\libs\dataList\column\DateTime;
@@ -167,24 +169,48 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                     ],
                 ],
                 'EMP_LV_NAME' => [
-                    'header' => 'Current Director Rank', // 实时聘
+                    'header' => 'Highest Director', // 最高管理星
                     'headerOther' => [
-                        'width' => '160',
+                        'width' => '190',
                     ],
                     'value' => function($row) use($empLevelConfig) {
-                        return isset($empLevelConfig[$row['EMP_LV']])?$empLevelConfig[$row['EMP_LV']]['LEVEL_NAME']:'';
+                        return isset($empLevelConfig[$row['EMP_LV']]) ? $empLevelConfig[$row['EMP_LV']]['LEVEL_NAME'] : $empLevelConfig[EmployLevel::getDefaultLevelId()]['LEVEL_NAME'];
+                    },
+                    'valueOther' => [
+                        'tag'=>['type'=>'warning', 'size' => 'small', 'class'=>'no-border']
+                    ],
+                ],
+                'LAST_EMP_LV_NAME' => [
+                    'header' => 'Latest Director', // 最新管理星级
+                    'headerOther' => [
+                        'width' => '190',
+                    ],
+                    'value' => function($row) use($empLevelConfig) {
+                        return isset($empLevelConfig[$row['LAST_EMP_LV']]) ? $empLevelConfig[$row['LAST_EMP_LV']]['LEVEL_NAME'] : $empLevelConfig[EmployLevel::getDefaultLevelId()]['LEVEL_NAME'];
                     },
                     'valueOther' => [
                         'tag'=>['type'=>'warning', 'size' => 'small', 'class'=>'no-border']
                     ],
                 ],
                 'CROWN_LV_NAME' => [
-                    'header' => 'Current Crown Rank', // 实时星级
+                    'header' => 'Highest Crown ', // 最高皇冠星级
+                    'headerOther' => [
+                        'width' => '180',
+                    ],
+                    'value' => function($row) use($crownLevelConfig) {
+                        return isset($crownLevelConfig[$row['CROWN_LV']]) ? $crownLevelConfig[$row['CROWN_LV']]['LEVEL_NAME'] : $crownLevelConfig[StarCrownLevel::getDefaultLevelId()]['LEVEL_NAME'];
+                    },
+                    'valueOther' => [
+                        'tag'=>['type'=>'warning', 'size' => 'small', 'class'=>'no-border']
+                    ],
+                ],
+                'LAST_CROWN_LV_NAME' => [
+                    'header' => 'Latest Crown', // 最新皇冠星级
                     'headerOther' => [
-                        'width' => '150',
+                        'width' => '180',
                     ],
                     'value' => function($row) use($crownLevelConfig) {
-                        return isset($crownLevelConfig[$row['CROWN_LV']])?$crownLevelConfig[$row['CROWN_LV']]['LEVEL_NAME']:'';
+                        return isset($crownLevelConfig[$row['LAST_CROWN_LV']]) ? $crownLevelConfig[$row['LAST_CROWN_LV']]['LEVEL_NAME'] : $crownLevelConfig[StarCrownLevel::getDefaultLevelId()]['LEVEL_NAME'];
                     },
                     'valueOther' => [
                         'tag'=>['type'=>'warning', 'size' => 'small', 'class'=>'no-border']
@@ -229,7 +255,7 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                     'headerOther' => ['width' => '150'],
                 ],
                 'IS_DEC' => [
-                    'header' => 'Whether Declaration Center', // 是否报单中心
+                    'header' => 'Whether Stockist', // 是否报单中心
                     'value' => function($row) {
                         return (new YesNo([
                             'value' => $row['IS_DEC'],
@@ -245,7 +271,7 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                     },
                 ],
                 'IS_ATLAS' => [
-                    'header' => 'Wheter Atlas Display', // 是否显示图谱
+                    'header' => 'Whether Chart Display', // 是否显示图谱
                     'value' => function($row) {
                         return (new YesNo([
                             'value' => $row['IS_ATLAS'],
@@ -263,7 +289,7 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                     },
                 ],
                 'IS_RECHARGE' => [
-                    'header' => 'Wheter Recharge Display', // 是否显示充值
+                    'header' => 'Whether Recharge Display', // 是否显示充值
                     'value' => function($row) {
                         return (new YesNo([
                             'value' => $row['IS_RECHARGE'],
@@ -356,8 +382,10 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                 'DEC_LV_NAME'=> ['name'=> 'Real time membership level', 'other'=> 'decLevel'], // 实时会员级别
 //                'DEC_LV_UPDATED_AT'=> ['name'=> '实时调整日期', 'other'=> 'date'],
 //                'LAST_DEC_LV_NAME'=> ['name'=> '结算时会员级别', 'other'=> 'decLevel'],
-                'EMP_LV_NAME'=> ['name'=> 'Real time employment', 'other'=> 'empLevel'], // 实时聘级
-                'CROWN_LV_NAME'=> ['name'=> 'Real time Crown', 'other'=> 'crownLevel'], // 实时聘级
+                'EMP_LV_NAME'=> ['name'=> 'Highest Director', 'other'=> 'empLevel'], // 最高管理星级
+                'LAST_EMP_LV_NAME'=> ['name'=> 'Latest Director', 'other'=> 'empLevel'], // 最新管理星级
+                'CROWN_LV_NAME'=> ['name'=> 'Highest Crown', 'other'=> 'crownLevel'], // 最高皇冠星级
+                'LAST_CROWN_LV_NAME'=> ['name'=> 'Latest Crown', 'other'=> 'crownLevel'], // 最新皇冠星级
 //                'HIGHEST_EMP_LV_NAME'=> ['name'=> '历史最高聘级', 'other'=> 'empLevel'],
 //                'HIGHEST_EMP_LV_PERIOD'=> ['name'=> '首次达到历史最高聘级的期数'],
                 'REC_USER_NAME'=> ['name'=> 'Recommendation No'],//推荐编号
@@ -371,7 +399,7 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                 'MOBILE'=> ['name'=> 'Phone Number'],//手机号码
 //                'TEL'=> ['name'=> '备用手机号码'],
                 'DEC_USER_NAME'=> ['name'=> 'Stockist Code'], // 所属报单中心编号
-                'IS_DEC'=> ['name'=> 'Declaration center or not', 'other'=> 'yesOrNo'],//是否报单中心
+                'IS_DEC'=> ['name'=> 'Stockist or not', 'other'=> 'yesOrNo'],//是否报单中心
                 'IS_STUDIO'=> ['name'=> 'Studio or not', 'other'=> 'yesOrNo'],//是否工作室
                 'DEC_ROLE_NAME'=> ['name'=> 'Stockist Level', 'other'=> 'decRole'],//报单中心级别
 //                'OPEN_BANK_NAME'=> ['name'=> '开户银行', 'other'=> 'banks'],

+ 6 - 0
backendEle/src/components/FilterUser.vue

@@ -172,6 +172,12 @@ export default {
           valueField: 'ID',
           values: baseInfo.empLevels()
         },
+        crownLevel: {
+          placeholder: 'Select Crown Level', // 请选择聘级
+          labelField: 'LEVEL_NAME',
+          valueField: 'ID',
+          values: baseInfo.crownLevels()
+        },
         decRole: {
           placeholder: 'Select Stockist Level',
           labelField: 'ROLE_NAME',

+ 12 - 0
backendEle/src/router/index.js

@@ -1170,6 +1170,18 @@ export const constantRouterMap = [
           ],
         },
       },
+      {
+        path: '/bonus/perf-adjustment',
+        component: _import('bonus/perf-adjustment'),
+        name: 'bonus-perf-adjustment',
+        meta: {
+          title: 'Adjust Performance', // 业绩调整
+          breadcrumb: [
+            {title: 'Dashboard', path: '/dashboard/index'}, // Dashboard
+            {title: 'Bonus Management', path: '/bonus/period'}, // 奖金管理
+          ],
+        },
+      },
       {
         path: '/bonus/perf-standard',
         component: _import('bonus/perf-standard'),

+ 3 - 0
backendEle/src/utils/baseInfo.js

@@ -25,6 +25,9 @@ const baseInfo = {
   empLevels () {
     return this.get('empLevels')
   },
+  crownLevels () {
+    return this.get('crownLevels')
+  },
   regTypes () {
     return this.get('regTypes')
   },

+ 2 - 1
backendEle/src/utils/vuexStore.js

@@ -13,6 +13,7 @@ const moduleBaseInfo = {
   state: {
     decLevels: null,
     empLevels: null,
+    crownLevels: null,
     adminRoles: null,
     menu: null,
     daysDiff: null,
@@ -38,4 +39,4 @@ export default new Vuex.Store({
     baseInfo: moduleBaseInfo,
     regionInfo: moduleRegionInfo,
   }
-})
+})

+ 1 - 1
backendEle/src/views/atlas/network-opt.vue

@@ -27,7 +27,7 @@
                 <el-tag>Name<!-- 姓名 -->:{{data.REAL_NAME}}</el-tag>
                 <el-tag type="danger"><!-- 区位 -->Location:{{data.RELATIVE_LOCATION}}</el-tag>
                 <el-tag type="success"><!-- 级别 -->Level:{{data.DEC_LV_NAME}}</el-tag>
-                <el-tag type="warning"><!-- 聘级 -->Rank:{{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
+                <el-tag type="warning"><!-- 聘级 -->Highest:{{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
                 <el-tag><!-- 加入期数 -->Joining Period:{{data.PERIOD_AT}}</el-tag>
               </span>
             </span>

+ 1 - 1
backendEle/src/views/atlas/relation-opt.vue

@@ -26,7 +26,7 @@
                       <el-tag><!-- 会员编号 -->Member Code:{{ node.label }}</el-tag>
                       <el-tag type="success">Name<!-- 姓名 -->:{{data.REAL_NAME}}</el-tag>
                       <el-tag type="warning">Level<!-- 级别 -->:{{data.DEC_LV_NAME}}</el-tag>
-                      <el-tag type="warning">Rank:<!-- 聘级 -->{{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
+                      <el-tag type="warning">Highest:<!-- 聘级 -->{{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
 <!--                      <el-tag type="warning">Star:&lt;!&ndash; 星级 &ndash;&gt;{{data.CROWN_LV_NAME}}</el-tag>-->
                     </span>
                 </span>

+ 148 - 0
backendEle/src/views/bonus/perf-adjustment.vue

@@ -0,0 +1,148 @@
+<template>
+  <div v-loading="loading">
+    <div class="white-box">
+      <div class="filter-user" @keyup.enter="getData()">
+        <el-input v-model="memberCode" size="small" style="width:400px;">
+          <template slot="prepend">Member Code</template>
+        </el-input>
+        <el-button type="primary" icon="el-icon-search" size="small" @click="getData()">Confirm<!-- 确定 --></el-button>
+      </div>
+
+      <div style="margin-top: 25px;" v-show="show">
+        <el-row>
+          <el-col :span="16">
+            <div class="grid-content bg-purple" style="width: 100%">
+              <el-card class="box-card" shadow="hover">
+                <el-form :model="perfForm" status-icon ref="perfForm" label-width="250px" width="100%" class="demo-ruleForm">
+                  <el-form-item label="Member Code" prop="USER_NAME" v-show="false">
+                    <el-input type="text" size="small" v-model="perfForm.USER_ID"></el-input>
+                    <el-input type="text" size="small" v-model="perfForm.USER_NAME"></el-input>
+                  </el-form-item>
+
+                  <el-divider><span style="font-weight: bold;">L. Market Balance Performance</span></el-divider>
+                  <el-form-item label="Member Code" prop="SURPLUS_1L_USER_NAME"><!--会员编号-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_1L_USER_NAME" autocomplete="off" readonly></el-input>
+                  </el-form-item>
+                  <el-form-item label="Balance Performance" prop="SURPLUS_1L"><!--综合结余业绩-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_1L" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Entry Balance Performance" prop="SURPLUS_1L_ZC"><!--首单结余业绩-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_1L_ZC" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Reconditioning Balance Performance" prop="SURPLUS_1L_FX"><!--复消结余业绩-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_1L_FX" autocomplete="off"></el-input>
+                  </el-form-item>
+
+                  <el-divider><span style="font-weight: bold;">R. Market Balance Performance</span></el-divider>
+                  <el-form-item label="Member Code" prop="SURPLUS_2L_USER_NAME"><!--会员编号-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_2L_USER_NAME" autocomplete="off" readonly></el-input>
+                  </el-form-item>
+                  <el-form-item label="Balance Performance" prop="SURPLUS_2L"><!--综合结余业绩-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_2L" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Entry Balance Performance" prop="SURPLUS_2L_ZC">
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_2L_ZC" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Reconditioning Balance Performance" prop="SURPLUS_2L_FX"><!--复消结余业绩-->
+                    <el-input type="text" size="small" v-model="perfForm.SURPLUS_2L_FX" autocomplete="off"></el-input>
+                  </el-form-item>
+
+                  <el-form-item>
+                    <el-button type="primary" size="small" @click="handlePerfAdjustment('perfForm')">Save</el-button>
+                  </el-form-item>
+                </el-form>
+              </el-card>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import network from '@/utils/network'
+
+export default {
+  name: 'bonus-perf-adjustment',
+  data() {
+    return {
+      loading: false,
+      memberCode: '',
+      show: false,
+      perfForm: {
+        USER_ID: '',
+        USER_NAME: '',
+        SURPLUS_1L: '',
+        SURPLUS_1L_ZC: '',
+        SURPLUS_1L_FX: '',
+        SURPLUS_21L_USER_NAME: '',
+        SURPLUS_2L: '',
+        SURPLUS_2L_ZC: '',
+        SURPLUS_2L_FX: '',
+        SURPLUS_2L_USER_NAME: '',
+      },
+    }
+  },
+  methods: {
+    // 查询安置网的下级会员和业绩
+    getData() {
+      if (!this.memberCode.length) {
+        this.$message({
+          message: 'Please enter member code',
+          type: 'info'
+        });
+        return false;
+      }
+
+      // 清除上一次的填充结果
+      this.$refs['perfForm'].resetFields();
+      this.show = false;
+
+      return network.getData(`bonus/perf-adjustment`, { memberCode : this.memberCode }).then(response => {
+        this.perfForm = response.allData;
+        this.show = true;
+        this.loading = false;
+      }).catch(error => {
+        this.$message({
+          message: error,
+          type: 'warning'
+        });
+
+        this.loading = false;
+      })
+    },
+    // 修改会员业绩
+    handlePerfAdjustment(formName) {
+      this.$confirm('Confirm and revise member performance?', 'Hits', { // 确认修改会员业绩
+        confirmButtonText: 'Confirm',
+        cancelButtonText: 'Cancel',
+        type: 'warning'
+      }).then(() => {
+        this.loading = true;
+        return network.postData(`bonus/perf-adjustment`, this.perfForm).then(response => {
+          this.$message({
+            message: response,
+            type: 'success'
+          });
+          this.loading = false;
+
+          // 刷新数据
+          this.getData();
+        }).catch(error => {
+          this.$message({
+            message: error,
+            type: 'warning'
+          });
+          this.loading = false;
+        });
+      })
+    },
+  }
+}
+</script>
+
+<style>
+  .filter-user { font-size: 14px; margin-bottom: 20px; }
+  .filter-user:after { content: ''; display: table;  clear: both; }
+</style>

+ 2 - 39
backendEle/src/views/config/bonus-opt.vue

@@ -119,46 +119,9 @@
         </div>
       </div>
     </div>
-    <div class="panel" v-if="permission.hasPermission(`config/bonus-dec-level`)">
-      <div class="panel-heading">
-        管理奖
-      </div>
-      <div class="panel-wrapper">
-        <div class="panel-body">
-          <el-table :data="decLevelTableData" stripe style="width: 100%;">
-            <el-table-column prop="LEVEL_NAME" label="级别名称"></el-table-column>
-            <el-table-column label="奇数代数(推广1人)">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.GL_ODD_DEEP_ONE" min="0" max="100">
-                  <template slot="append">代</template>
-                </el-input>
-              </template>
-            </el-table-column>
-            <el-table-column label="奇数代数(推广2人)">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.GL_ODD_DEEP_TWO" min="0" max="100">
-                  <template slot="append">代</template>
-                </el-input>
-              </template>
-            </el-table-column>
-            <el-table-column label="奇数代数(推广3人)">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.GL_ODD_DEEP_THREE" min="0" max="100">
-                  <template slot="append">代</template>
-                </el-input>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-        <div class="panel-footer">
-          <el-button type="primary" @click="onGLSubmit" :loading="glSubmitButtonStat" style="float: right;">保存
-          </el-button>
-        </div>
-      </div>
-    </div>
     <div class="panel" v-if="permission.hasPermission(`config/bonus-emp-level`)">
       <div class="panel-heading">
-        荣衔配置
+        总监级别配置
       </div>
       <div class="panel-wrapper">
         <div class="panel-body">
@@ -217,7 +180,7 @@
 
       <div class="panel" v-if="permission.hasPermission(`config/bonus-star-level`)">
           <div class="panel-heading">
-              星级配置
+            皇冠级别配置
           </div>
           <div class="panel-wrapper">
               <div class="panel-body">

+ 13 - 13
backendEle/src/views/user/ba-user-list.vue

@@ -19,21 +19,21 @@
             </template>
             <template v-else>
               <template v-if="tableHeader.index === 'USER_NAME'">
-                <el-dropdown v-if="permission.hasPermission(`user/login-to-frontend`)">
+<!--                <el-dropdown v-if="permission.hasPermission(`user/login-to-frontend`)">-->
                   <span class="el-dropdown-link">
-                    {{scope.row.USER_NAME.value}} <i class="el-icon-arrow-down el-icon--right"></i>
+                    {{scope.row.USER_NAME.value}} <!--<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
                   </span>
-                  <el-dropdown-menu slot="dropdown">
-                    <el-dropdown-item command="login" v-show="scope.row.BTF_URL !== null">
-                      <a :href="`${frontendServer}/#/login-by-backend?${scope.row.BTF_URL}`" target="_blank" style="color:#606266;">
-                        Quick logon<!-- 快速登录 -->
-                      </a>
-                    </el-dropdown-item>
-                  </el-dropdown-menu>
-                </el-dropdown>
-                <el-tag type="primary" size="small" class="no-border" v-if="!permission.hasPermission(`user/login-to-frontend`)">
-                  {{scope.row.USER_NAME.value}}
-                </el-tag>
+<!--                  <el-dropdown-menu slot="dropdown">-->
+<!--                    <el-dropdown-item command="login" v-show="scope.row.BTF_URL !== null">-->
+<!--                      <a :href="`${frontendServer}/#/login-by-backend?${scope.row.BTF_URL}`" target="_blank" style="color:#606266;">-->
+<!--                        Quick logon&lt;!&ndash; 快速登录 &ndash;&gt;-->
+<!--                      </a>-->
+<!--                    </el-dropdown-item>-->
+<!--                  </el-dropdown-menu>-->
+<!--                </el-dropdown>-->
+<!--                <el-tag type="primary" size="small" class="no-border" v-if="!permission.hasPermission(`user/login-to-frontend`)">-->
+<!--                  {{scope.row.USER_NAME.value}}-->
+<!--                </el-tag>-->
               </template>
               <template v-else>
                 <div v-html="scope.row[tableHeader.index].value"></div>

+ 1 - 1
backendEle/src/views/user/empty-list.vue

@@ -364,7 +364,7 @@
                 })
                 return
             }
-            let isAtlasTip = isAtlas === true ? 'show atlas': 'hide atlas'//'显示图谱' : '隐藏图谱'
+            let isAtlasTip = isAtlas === true ? 'show chart': 'hide chart'//'显示图谱' : '隐藏图谱'
             this.$confirm(`Are you sure you want to【${isAtlasTip}】?`, 'Hint', {//`确定要对所选会员【${isAtlasTip}】吗?`, '提示'
                 confirmButtonText: 'confirm', // 确定
                 cancelButtonText: 'cancel', // 取消

+ 4 - 4
backendEle/src/views/user/index.vue

@@ -111,10 +111,10 @@
         <!--</el-dropdown>-->
         <el-dropdown size="small" trigger="click" v-show="permission.hasPermission(`user/is-dec`)">
           <el-button type="primary" size="small" @click.stop="">
-            Declaration Center Management<!-- 报单中心管理 --><i class="el-icon-arrow-down el-icon--right"></i>
+            Stockist Management<!-- 报单中心管理 --><i class="el-icon-arrow-down el-icon--right"></i>
           </el-button>
           <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item command="isDec" @click.native="handleIsDecManage(true)">Set as declaration Center<!-- 设为报单中心 --></el-dropdown-item>
+            <el-dropdown-item command="isDec" @click.native="handleIsDecManage(true)">Set as Stockist<!-- 设为报单中心 --></el-dropdown-item>
             <el-dropdown-item command="notDec" @click.native="handleIsDecManage(false)">Cancel Stockist<!-- 取消报单中心 -->
             </el-dropdown-item>
           </el-dropdown-menu>
@@ -430,7 +430,7 @@
               })
               return
           }
-          let isDecTip = isDec === true ? 'Set as declaration Center' : 'Cancel Stockist'//'设为报单中心' : '取消报单中心'
+          let isDecTip = isDec === true ? 'Set as Stockist' : 'Cancel Stockist'//'设为报单中心' : '取消报单中心'
           this.$confirm(`Are you sure you want to【${isDecTip}】?`, 'Hint', {//确定要对所选会员【${isDecTip}】吗?`, '提示'
               confirmButtonText: 'confirm', // 确定
               cancelButtonText: 'cancel', // 取消
@@ -488,7 +488,7 @@
                 })
                 return
             }
-            let isAtlasTip = isAtlas === true ? 'Display Atlas' : 'Hidden Atlas'//'显示图谱' : '隐藏图谱'
+            let isChartTip = isAtlas === true ? 'Display Chart' : 'Hidden Chart'//'显示图谱' : '隐藏图谱'
             this.$confirm(`Are you sure you want to【${isAtlasTip}】?`, 'Hint', {//`确定要对所选会员【${isAtlasTip}】吗?`, '提示'
                 confirmButtonText: 'confirm', // 确定
                 cancelButtonText: 'cancel', // 取消

+ 1 - 1
backendEle/src/views/user/user-add-opt.vue

@@ -24,7 +24,7 @@
                            :value="item.ID"></el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="Declaration center or not"><!-- 是否报单中心 -->
+            <el-form-item label="Stockist or not"><!-- 是否报单中心 -->
               <el-switch v-model="form.isDec"></el-switch>
             </el-form-item>
             <el-form-item label="Stockist Level" v-show="form.isDec"><!-- 报单中心级别 -->

+ 24 - 32
common/helpers/bonus/BonusCalc.php

@@ -360,7 +360,8 @@ class BonusCalc extends BaseObject {
             echo('结算全部完成,共耗时:' . round($t35 - $t34, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL . PHP_EOL);
         } catch (\Exception $e) {
             $this->errorCalcTask();
-            $this->addError('calc', sprintf('File【%s】, Line【%s】, Msg【%s】', $e->getFile(), $e->getLine(), $e->getMessage()));
+            LoggerTool::error('calcBonus' . sprintf('File【%s】, Line【%s】, Msg【%s】', $e->getFile(), $e->getLine(), $e->getMessage()));
+            $this->addError('calcBonus', sprintf('%s',$e->getMessage()));
             return false;
         }
         return true;
@@ -532,11 +533,6 @@ class BonusCalc extends BaseObject {
                         'decPercentConfig' => $this->_sysConfig['decPercent']['VALUE'],
                         'recNum' => $bonusUserInfo['REC_NUM'],
                         'decAmount' => $bonusUserInfo['ZC_AMOUNT'],
-                        'bonusTotalLimit' => [
-                            $this->_sysConfig['bonusTotalZeroLimit']['VALUE'],
-                            $this->_sysConfig['bonusTotalOneLimit']['VALUE'],
-                            $this->_sysConfig['bonusTotalTwoLimit']['VALUE'],
-                        ],
                     ]),
                 ];
 
@@ -620,11 +616,6 @@ class BonusCalc extends BaseObject {
                         'recNum' => $userBaseInfo['REC_NUM'],
                         'decAmount' => $userBaseInfo['ZC_AMOUNT'],
                         'decLevel' => $userBaseInfo['DEC_LV'],
-                        'bonusTotalLimit' => [
-                            $this->_sysConfig['bonusTotalZeroLimit']['VALUE'],
-                            $this->_sysConfig['bonusTotalOneLimit']['VALUE'],
-                            $this->_sysConfig['bonusTotalTwoLimit']['VALUE'],
-                        ],
                     ]),
                 ];
 
@@ -1276,6 +1267,7 @@ class BonusCalc extends BaseObject {
                     'LAST_DEC_LV' => $userBaseInfo['DEC_LV'],
                     'LAST_EMP_LV' => $userBaseInfo['EMP_LV'],
                     'LAST_CROWN_LV' => $lastCrownLv,
+                    'CROWN_LV' => $userBaseInfo['CROWN_LV'],
                     'LAST_STATUS' => $userBaseInfo['STATUS'],
                     'AMOUNT' => $deductData['surplus'],
                     'ORI_BONUS' => $oriBonus,
@@ -1638,11 +1630,6 @@ class BonusCalc extends BaseObject {
                             'incomeBonus' => $incomeBonus,
                             'recNum' => $userBaseInfo['REC_NUM'],
                             'decAmount' => $userBaseInfo['ZC_AMOUNT'],
-                            'bonusTotalLimit' => [
-                                $this->_sysConfig['bonusTotalZeroLimit']['VALUE'],
-                                $this->_sysConfig['bonusTotalOneLimit']['VALUE'],
-                                $this->_sysConfig['bonusTotalTwoLimit']['VALUE'],
-                            ],
                         ]),
                     ];
 
@@ -2470,11 +2457,6 @@ class BonusCalc extends BaseObject {
                             'decAmount' => $bonusUserBaseInfo['ZC_AMOUNT'],
                             'fromUserId' => $userId,
                             'decLevel' => $bonusUserBaseInfo['DEC_LV'],
-                            'bonusTotalLimit' => [
-                                $this->_sysConfig['bonusTotalZeroLimit']['VALUE'],
-                                $this->_sysConfig['bonusTotalOneLimit']['VALUE'],
-                                $this->_sysConfig['bonusTotalTwoLimit']['VALUE'],
-                            ],
                         ]),
                     ];
 
@@ -3690,13 +3672,13 @@ class BonusCalc extends BaseObject {
                         ':PERIOD_NUM' => $this->_periodNum
                     ]
                 );
-                // 奖金流水
-                FlowBonus::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
-                    [
-                        ':USER_ID' => $data['USER_ID'],
-                        ':PERIOD_NUM' => $this->_periodNum
-                    ]
-                );
+//                // 奖金流水
+//                FlowBonus::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
+//                    [
+//                        ':USER_ID' => $data['USER_ID'],
+//                        ':PERIOD_NUM' => $this->_periodNum
+//                    ]
+//                );
 //                // 共享奖流水
 //                CalcBonusGX::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
 //                    [
@@ -3767,7 +3749,7 @@ class BonusCalc extends BaseObject {
         $tourismBonus = CalcCache::tourismBonus($userId, $this->_periodNum);
         $garageBonus = CalcCache::garageBonus($userId, $this->_periodNum);
         $villaBonus = CalcCache::villaBonus($userId, $this->_periodNum);
-        $empLv = $baseInfo['EMP_LV'];
+        $nowDirectorLv = $baseInfo['EMP_LV'];
 //        if($this->_isCalcMonth){
 //            $empLv = $this->nowMonthPerfData($userId)['LAST_EMP_LV'];
 //        }
@@ -3813,6 +3795,7 @@ class BonusCalc extends BaseObject {
         if( $this->_isCalcMonth ) {
             // 个人月消费PV大于配置值,才会计算发放蓝星奖
             $fxPvStatus = $this->_isMonthPerfLimit($userId);
+            $nowDirectorLv = EmployLevel::getDefaultLevelId();
             // BONUS_REAL 字段是发到用户的真实奖金
             if ( $fxPvStatus ) {
                 // 管理奖改成了蓝星奖,但是对于用户来说依旧叫管理奖.字段改成bs.
@@ -3860,7 +3843,8 @@ class BonusCalc extends BaseObject {
                 ->one();
                 $realBonusBs = $blueStartAmount; // 蓝星奖直接取数据库中算好的值PRODUCT_POINT
                 $exchangePoints = isset($userBS['PRODUCT_POINT']) && !empty($userBS['PRODUCT_POINT']) ? $userBS['PRODUCT_POINT'] : 0; // 兑换积分
-
+                // 会员最新$nowDirectorLv
+                $nowDirectorLv = $userBS['LEVEL_ID'] ?? $nowDirectorLv;
                 // 蓝星奖总奖金:管理奖+业绩奖
 //                $blueStartOriBonus = $blueStartOriBonusMnt + $blueStartOriBonusAbbr;
 //                $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] + $blueStartOriBonus; // 管理奖在存储过程计算,这里单独加上管理奖(即蓝星奖)
@@ -3873,13 +3857,21 @@ class BonusCalc extends BaseObject {
             }
         }
 
+        // 查询会员本期是否有团队奖
+        $userBonusQY = CalcBonusQY::findOneAsArray('PERIOD_NUM=:PERIOD_NUM AND USER_ID=:USER_ID',
+            [
+                ':PERIOD_NUM' => $this->_periodNum,
+                ':USER_ID' => $userId
+            ]);
+        // 会员本期最新CrownLV
+        $nowCrownLv = $userBonusQY['LAST_CROWN_LV'] ?? StarCrownLevel::getDefaultLevelId();
         $result = [
             'USER_ID' => $userId,
             'LAST_USER_NAME' => $baseInfo['USER_NAME'],
             'LAST_REAL_NAME' => $baseInfo['REAL_NAME'],
             'LAST_DEC_LV' => $baseInfo['DEC_LV'],
-            'LAST_EMP_LV' => $empLv,
-            'LAST_CROWN_LV' => $starCrownLv ?? StarCrownLevel::getDefaultLevelId(),
+            'LAST_EMP_LV' => $nowDirectorLv,
+            'LAST_CROWN_LV' => $nowCrownLv,
             'LAST_STATUS' => $baseInfo['STATUS'],
             'LAST_MOBILE' => $baseInfo['MOBILE'],
             'LAST_PERIOD_AT' => $baseInfo['PERIOD_NUM'],

+ 31 - 9
common/helpers/bonus/BonusSend.php

@@ -11,6 +11,7 @@ namespace common\helpers\bonus;
 use common\components\ActiveRecord;
 use common\helpers\DataBak;
 use common\helpers\Form;
+use common\helpers\LoggerTool;
 use common\helpers\Tool;
 use common\helpers\user\Balance;
 use common\helpers\user\Info;
@@ -261,7 +262,8 @@ class BonusSend extends BaseObject {
             echo('全部奖金发放完成,耗时:'.round($t7 - $t1, 3).',内存使用:'.(round(memory_get_usage()/1024/1024, 3)).'MB'.PHP_EOL);
             $this->_updatePercent(100);
         } catch (\Exception $e) {
-            $this->addError('sendBonus', sprintf('File【%s】, Line【%s】, Msg【%s】', $e->getFile(), $e->getLine(), $e->getMessage()));
+            LoggerTool::error('sendBonus' . sprintf('File【%s】, Line【%s】, Msg【%s】', $e->getFile(), $e->getLine(), $e->getMessage()));
+            $this->addError('sendBonus', sprintf('%s',$e->getMessage()));
             return false;
         }
         if (count($this->_errors) > 0) {
@@ -564,8 +566,7 @@ class BonusSend extends BaseObject {
     public function updateEmpLevel(int $offset = 0) {
         if ($this->_isCalcMonth) {
             $empLv = EmployLevel::getIdConvertLevelSortCache();
-//            $allData = CalcBonus::findUseDbCalc()
-            $allData = CalcBonus::find()
+            $allData = CalcBonusBS::find()
             ->yearMonth($this->_calcYearMonth)
             ->where(
                 'CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM', 
@@ -595,10 +596,16 @@ class BonusSend extends BaseObject {
                             // 如果当前期的级别值大于历史最高级别,则更新用户表里的最高聘级
                             User::updateAll(['EMP_LV' => $nowBsEmpLv], 'ID=:USER_ID', [':USER_ID' => $data['USER_ID']]);
                             User::deleteBaseInfoFromRedis($data['USER_ID']);
-                            unset($data);
-                        } else {
-                            continue;
                         }
+
+                        // 更新最新级别
+                        User::updateAll([
+                            'LAST_EMP_LV' => $nowBsEmpLv,
+                            'LAST_EMP_LV_UPDATED_AT' => time(),
+                            'LAST_EMP_LV_UPDATED_PERIOD' => $this->_periodNum
+                        ], 'ID=:USER_ID', [':USER_ID' => $data['USER_ID']]);
+                        User::deleteBaseInfoFromRedis($data['USER_ID']);
+                        unset($data);
                     }
                     $transaction->commit();
                 } catch (Exception $e) {
@@ -610,6 +617,14 @@ class BonusSend extends BaseObject {
                 return $this->updateEmpLevel($offset + $this->_limit);
             }
             unset($allData);
+
+            // 刷新会员EmpLv为0
+            User::updateAll([
+                'LAST_EMP_LV' => '',
+                'LAST_EMP_LV_UPDATED_AT' => time(),
+                'LAST_EMP_LV_UPDATED_PERIOD' => $this->_periodNum,
+            ], 'LAST_EMP_LV_UPDATED_PERIOD < :PERIOD_NUM AND LAST_EMP_LV <> ""', [':PERIOD_NUM' => $this->_periodNum]);
+            User::deleteAllBaseInfoFromRedis();
         }
         return true;
     }
@@ -638,13 +653,13 @@ class BonusSend extends BaseObject {
             ->limit($this->_limit)
             ->all();
 
-        $defaultEmpLv = StarCrownLevel::getDefaultLevelId();
+        $defaultCrownLv = StarCrownLevel::getDefaultLevelId();
         if ($allData) {
             $transaction = Yii::$app->db->beginTransaction();
             try {
                 foreach ($allData as $data) {
                     // 默认级别不更新
-                    if( $data['LAST_CROWN_LV'] === $defaultEmpLv ) continue;
+                    if( $data['LAST_CROWN_LV'] === $defaultCrownLv ) continue;
 
                     $modernCrownLv = $data['LAST_CROWN_LV'];   // 本期计算出的最新级别
 
@@ -680,7 +695,14 @@ class BonusSend extends BaseObject {
             unset($transaction, $allData);
             return $this->updateCrownLevel($offset + $this->_limit);
         }
-        unset($allData);
+
+        // 刷新会员CrownLv为0
+        User::updateAll([
+            'LAST_CROWN_LV' => '',
+            'LAST_CROWN_LV_UPDATED_AT' => time(),
+            'LAST_CROWN_LV_UPDATED_PERIOD' => $this->_periodNum,
+        ], 'LAST_CROWN_LV_UPDATED_PERIOD < :PERIOD_NUM AND LAST_CROWN_LV <> ""' , [':PERIOD_NUM' => $this->_periodNum]);
+        User::deleteAllBaseInfoFromRedis();
 
         return true;
     }

+ 1 - 17
common/helpers/bonus/PerfCalc.php

@@ -1072,16 +1072,7 @@ class PerfCalc {
                 $periodPerf = CalcCache::nowPeriodPerf($userId, $this->_periodNum);
 
                 $userBaseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
-                //级别必须为VIP
-                $isVip = false;
-                if( $userBaseInfo['DEC_LV'] === DeclarationLevel::VIP_LEVEL_ID ) {
-                    $isVip= true;
-                }
-                if( $this->_sysConfig['vipBonusGoldDecLevel']['VALUE'] && $userBaseInfo['DEC_LV'] === DeclarationLevel::JIN_ZUAN_LEVEL_ID ) {
-                    $isVip = true;
-                }
-
-
+                
                 $nowMonthPerf = [
                     'USER_ID' => $userId,
                     'FX_AMOUNT_CASH' => $everyData['FX_AMOUNT_CASH_SUM'],
@@ -1094,13 +1085,6 @@ class PerfCalc {
                     'PV_4L' => $everyData['PV_4L_SUM'],
                     'PV_5L' => $everyData['PV_5L_SUM'],
 
-                    //VIP统计相关业绩
-                    'VIP_PV_1L_ZC' => $isVip ? $everyData['PV_1L_ZC_SUM'] : 0,
-                    'VIP_PV_2L_ZC' => $isVip ? $everyData['PV_2L_ZC_SUM'] : 0,
-                    'VIP_PV_3L_ZC' => $isVip ? $everyData['PV_3L_ZC_SUM'] : 0,
-                    'VIP_PV_4L_ZC' => $isVip ? $everyData['PV_4L_ZC_SUM'] : 0,
-                    'VIP_PV_5L_ZC' => $isVip ? $everyData['PV_5L_ZC_SUM'] : 0,
-
                     //总数据,历史+本期。不能用上月加本月,因为上月可能没业绩,上上个月有业绩。
                     'PV_1L_TOTAL' => $periodPerf['PV_1L'] + $userLastPerf['PV_1L'],
                     'PV_2L_TOTAL' => $periodPerf['PV_2L'] + $userLastPerf['PV_2L'],

+ 1 - 1
common/helpers/user/Balance.php

@@ -571,7 +571,7 @@ class Balance {
             $flowInsertData = [
                 'USER_ID' => $userId,
                 'LAST_DEC_LV' => $userInfo['DEC_LV'],
-                'LAST_EMP_LV' => $userInfo['EMP_LV'],
+                'LAST_EMP_LV' => $userInfo['LAST_EMP_LV'],
                 'LAST_STATUS' => $userInfo['STATUS'],
                 'CALC_ID' => $params['CALC_ID'] ?? null,
                 'AMOUNT' => ($issueBonus ? $amount * $exchangeRate : $amount),

+ 1 - 1
common/helpers/user/Info.php

@@ -622,7 +622,7 @@ class Info {
      * @return array|null
      */
     public static function getLastInfo($userId){
-        $data = User::findOneAsArray('ID=:ID', [':ID' => $userId], 'LAST_DEC_LV AS DEC_LV,EMP_LV,STATUS,CROWN_LV AS LAST_CROWN_LV');
+        $data = User::findOneAsArray('ID=:ID', [':ID' => $userId], 'LAST_DEC_LV AS DEC_LV,EMP_LV,LAST_EMP_LV,STATUS,CROWN_LV,LAST_CROWN_LV');
         return $data;
     }
 

+ 8 - 0
common/models/User.php

@@ -267,6 +267,14 @@ class User extends \common\components\ActiveRecord
         Yii::$app->redis->hdel(Cache::USER_INFO_KEY, $userId);
     }
 
+    /**
+     * 批量删除用户
+     * @return void
+     */
+    public static function deleteAllBaseInfoFromRedis() {
+        \Yii::$app->redis->del(Cache::USER_INFO_KEY);
+    }
+
     /**
      *  判断用户是否是观察期
      *  观望期:自加入算起2个月

+ 10 - 0
common/models/UserInfo.php

@@ -249,6 +249,16 @@ class UserInfo extends \common\components\ActiveRecord
         ];
     }
 
+    /**
+     * 查询安置网的会员
+     * @param $userId
+     * @return array|null
+     */
+    public static function getPlacementChildren($userId): ?array
+    {
+        return static::findAllAsArray('REC_UID=:REC_UID', [':REC_UID' => $userId], 'USER_ID,USER_NAME');
+    }
+
     public function getRecUserName()
     {
         return $this->hasOne(UserInfo::class, ['USER_ID' => 'REC_UID']);

+ 16 - 0
common/models/UserPerf.php

@@ -171,6 +171,12 @@ class UserPerf extends \common\components\ActiveRecord
             'PV_4L' => '四市场累计业绩',
             'PV_5L' => '五市场累计业绩',
             'PV_PSS' => '推荐团队累计业绩',
+            'SURPLUS_1L'    => '一市场综合结余业绩',
+            'SURPLUS_1L_ZC' => '一市场综合报单业绩',
+            'SURPLUS_1L_FX' => '一市场复消结余业绩',
+            'SURPLUS_2L'    => '二市场综合结余业绩',
+            'SURPLUS_2L_ZC' => '二市场综合报单业绩',
+            'SURPLUS_2L_FX' => '二市场复消结余业绩',
         ];
     }
 
@@ -217,4 +223,14 @@ class UserPerf extends \common\components\ActiveRecord
 
         return $result;
     }
+
+    /**
+     * 查询会员结余业绩
+     * @param $userId
+     * @return array|null
+     */
+    public static function getPerfMarket($userId): ?array
+    {
+        return self::findOneAsArray('USER_ID=:USER_ID', [':USER_ID' => $userId], 'USER_ID,SURPLUS_1L,SURPLUS_1L_ZC,SURPLUS_1L_FX,SURPLUS_2L,SURPLUS_2L_ZC,SURPLUS_2L_FX');
+    }
 }

+ 6 - 3
common/models/Withdraw.php

@@ -157,13 +157,16 @@ class Withdraw extends \common\components\ActiveRecord {
      */
     public static function getPeriod($nowTime) {
         $period = Period::instance();
+        $nowPeriodNum = $period->getNowPeriodNum();
         $year = $period->getNowYear();
         $month = $period->getNowMonth();
         $yearMonth = $period->getNowYearMonth();
-        $thisMonth = Period::getPeriodNumRangeFromMonth($year, $month);
-        $period->setPeriodNum($thisMonth['min']);
+//        $thisMonth = Period::getPeriodNumRangeFromMonth($year, $month);
+//        $period->setPeriodNum($thisMonth['min']);
+        $period->setPeriodNum($nowPeriodNum);
         $endTime = $period->getNowPeriodEnd();
-        return ['nowPeriodNum' => $thisMonth['min'], 'nowYear' => $year, 'nowMonth' => $month, 'yearMonth'=>$yearMonth, 'endTime' => $endTime];
+//        return ['nowPeriodNum' => $thisMonth['min'], 'nowYear' => $year, 'nowMonth' => $month, 'yearMonth'=>$yearMonth, 'endTime' => $endTime];
+        return ['nowPeriodNum' => $nowPeriodNum, 'nowYear' => $year, 'nowMonth' => $month, 'yearMonth'=>$yearMonth, 'endTime' => $endTime];
     }
 
     /**

+ 1 - 1
common/models/forms/AdminAddUserForm.php

@@ -114,7 +114,7 @@ class AdminAddUserForm extends Model {
             'decLv' => 'Real time declaration level',//实时报单级别
             'areaSelected' => 'Location',//所在地区
             'tel' => 'Telephone',//电话
-            'isDec' => 'Declaration center or not',//是否报单中心
+            'isDec' => 'Stockist or not',//是否报单中心
             'decUserName' => 'Stockist No', // 报单中心编号
             'birthday' => 'birthday',//生日
             'decRoleId' => 'Stockist Level',//报单中心级别

+ 1 - 1
common/models/forms/DeclarationUpgradeForm.php

@@ -401,7 +401,7 @@ class DeclarationUpgradeForm extends Model
             $flipParent = array_flip(array_filter($this->_tempNetworkParentUser[$this->insertUserName]));
             if (!isset($flipParent[$this->decUserName])) {
 //                $this->addError($attribute, '为' . $this->insertUserName . '升级报单,报单中心' . $this->decUserName . '不在' . $this->insertUserName . '的安置网上级中');
-                $this->addError($attribute, 'by' . $this->insertUserName . 'Upgrade declaration, declaration Center' . $this->decUserName . 'be not in' . $this->insertUserName . 'Online level of resettlement');
+                $this->addError($attribute, 'by' . $this->insertUserName . 'Upgrade declaration, Stockist' . $this->decUserName . 'be not in' . $this->insertUserName . 'Online level of resettlement');
                 return ;
             }
             $this->_decId = $decUser['ID'];

+ 126 - 0
common/models/forms/PerfAdjustmentForm.php

@@ -0,0 +1,126 @@
+<?php
+namespace common\models\forms;
+
+use common\components\Model;
+use common\helpers\Form;
+use common\libs\logging\operate\AdminOperate;
+use common\models\Period;
+use common\models\UserPerf;
+use yii\base\Exception;
+
+class PerfAdjustmentForm extends Model
+{
+    public $USER_ID;
+    public $USER_NAME;
+
+    public $SURPLUS_1L;
+    public $SURPLUS_1L_ZC;
+    public $SURPLUS_1L_FX;
+
+    public $SURPLUS_2L;
+    public $SURPLUS_2L_ZC;
+    public $SURPLUS_2L_FX;
+
+    public function init()
+    {
+        parent::init();
+        $this->adminOperateLogger = new AdminOperate([
+            'fetchClass' => UserPerf::class,
+        ]);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function rules()
+    {
+        return [
+            [['USER_ID', 'SURPLUS_1L', 'SURPLUS_1L_ZC', 'SURPLUS_1L_FX', 'SURPLUS_2L', 'SURPLUS_2L_ZC', 'SURPLUS_2L_FX'], 'required'],
+        ];
+    }
+
+    /**
+     * 指定场景
+     * @return array
+     */
+    public function scenarios() {
+        $parentScenarios = parent::scenarios();
+        $customScenarios = [
+            'perfAdjustment' => ['USER_ID', 'USER_NAME', 'SURPLUS_1L', 'SURPLUS_1L_ZC', 'SURPLUS_1L_FX', 'SURPLUS_2L', 'SURPLUS_2L_ZC', 'SURPLUS_2L_FX']
+        ];
+        return array_merge($parentScenarios, $customScenarios);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function attributeLabels()
+    {
+        return [
+            'USER_ID'       => '会员ID',
+            'SURPLUS_1L'    => '一市场综合结余业绩',
+            'SURPLUS_1L_ZC' => '一市场综合报单业绩',
+            'SURPLUS_1L_FX' => '一市场复消结余业绩',
+            'SURPLUS_2L'    => '二市场综合结余业绩',
+            'SURPLUS_2L_ZC' => '二市场综合报单业绩',
+            'SURPLUS_2L_FX' => '二市场复消结余业绩',
+        ];
+    }
+
+    /**
+     * 调整会员业绩
+     * @return bool|null
+     */
+    public function perfAdjustment(): ?bool
+    {
+        if (!$this->validate()) {
+            return false;
+        }
+
+        $transaction = \Yii::$app->db->beginTransaction();
+        try {
+            // 修改前业绩
+            $userPerf = UserPerf::find()
+                ->where('USER_ID=:USER_ID', [':USER_ID' => $this->USER_ID])
+                ->select('USER_ID,SURPLUS_1L,SURPLUS_1L_ZC,SURPLUS_1L_FX,SURPLUS_2L,SURPLUS_2L_ZC,SURPLUS_2L_FX')
+                ->one();
+            if (!$userPerf->toArray()) {
+                throw new Exception('Member performance does not exist'); // 会员业绩不存在
+            }
+
+            $this->adminOperateLogger->beforeUpdate($userPerf);
+
+            $modernPerf = [
+                'SURPLUS_1L'    => $this->SURPLUS_1L,
+                'SURPLUS_1L_ZC' => $this->SURPLUS_1L_ZC,
+                'SURPLUS_1L_FX' => $this->SURPLUS_1L_FX,
+                'SURPLUS_2L'    => $this->SURPLUS_2L,
+                'SURPLUS_2L_ZC' => $this->SURPLUS_2L_ZC,
+                'SURPLUS_2L_FX' => $this->SURPLUS_2L_FX,
+            ];
+            if (!UserPerf::updateAll($modernPerf, 'USER_ID=:USER_ID', [':USER_ID' => $this->USER_ID])) {
+                throw new Exception(Form::formatErrorsForApi($userPerf->getErrors()));
+            }
+
+            $transaction->commit();
+
+            $afterUpdate = UserPerf::find()
+                ->where('USER_ID=:USER_ID', [':USER_ID' => $this->USER_ID])
+                ->select('USER_ID,SURPLUS_1L,SURPLUS_1L_ZC,SURPLUS_1L_FX,SURPLUS_2L,SURPLUS_2L_ZC,SURPLUS_2L_FX')
+                ->one();
+            $this->adminOperateLogger->afterUpdate($afterUpdate)->clean()->save([
+                'optType' => 'perf adjustment', // 调整业绩
+                'userId' => $this->USER_ID,
+                'userName' => $this->USER_NAME,
+                'periodNum' => Period::instance()->getNowPeriodNum(),
+            ]);
+        } catch (Exception $e) {
+            $transaction->rollBack();
+            $this->addError('perfAdjustment', $e->getMessage());
+            return false;
+        }
+
+        return true;
+    }
+
+}

+ 3 - 1
frontendApi/modules/v1/controllers/BonusController.php

@@ -266,9 +266,11 @@ class BonusController extends BaseController {
         $sysConfig = Cache::getSystemConfig();
 
         if($detailSwitch) {
+            $data['USER_NAME'] = ['name' => '编号', 'value' => Info::getUserNameByUserId(\Yii::$app->user->id)];
             $data['PERIOD_NUM'] = ['name' => '期数', 'value' => $periodNum];
             $data['LAST_DEC_LV'] = ['name' => '级别', 'value' => Cache::getDecLevelConfig()[$calcBonus['LAST_DEC_LV']]['LEVEL_NAME']];
-            $data['LAST_EMP_LV'] = ['name' => '荣誉', 'value' => Cache::getEmpLevelConfig()[$calcBonus['LAST_EMP_LV']]['LEVEL_NAME']];
+            $data['LAST_EMP_LV'] = ['name' => '管理星级', 'value' => Cache::getEmpLevelConfig()[$calcBonus['LAST_EMP_LV']]['LEVEL_NAME']];
+            $data['LAST_CROWN_LV'] = ['name' => '皇冠星级', 'value' => Cache::getStarCrownLevelConfig()[$calcBonus['LAST_CROWN_LV']]['LEVEL_NAME']];
             if ($sysConfig['openTG']['VALUE']) {
                 // 销售奖金 就是 原来的推广奖
                 $data['ORI_BONUS_TG'] = ['name' => '销售奖金', 'value' => Tool::formatPrice($calcBonus['ORI_BONUS_TG'])];

+ 1 - 1
frontendEle/src/views/atlas/network.vue

@@ -24,7 +24,7 @@
             <el-tag>Name: {{data.REAL_NAME}}</el-tag>
             <el-tag type="danger">Location: {{data.RELATIVE_LOCATION}}</el-tag>
             <el-tag type="success">Level: {{data.DEC_LV_NAME}}</el-tag>
-            <el-tag type="warning">Rank: {{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
+            <el-tag type="warning">Highest: {{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
 <!--            <el-tag type="warning">Star: {{data.CROWN_LV_NAME}}</el-tag>-->
             <el-tag>Joining Period: {{data.PERIOD_AT}}</el-tag>
           </span>

+ 1 - 1
frontendEle/src/views/atlas/relation.vue

@@ -24,7 +24,7 @@
             <el-tag>Name: {{data.REAL_NAME}}</el-tag>
 <!--            <el-tag type="danger">Location: {{data.RELATIVE_LOCATION}}</el-tag>-->
             <el-tag type="success">Level: {{data.DEC_LV_NAME}}</el-tag>
-            <el-tag type="warning">Rank: {{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
+            <el-tag type="warning">Highest: {{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
 <!--            <el-tag type="warning">Star: {{data.CROWN_LV_NAME}}</el-tag>-->
             <el-tag>Joining Period: {{data.PERIOD_AT}}</el-tag>
           </span>

+ 6 - 3
frontendEle/src/views/bonus/other.vue

@@ -25,10 +25,13 @@
 
       </el-table>
     </div>
-    <el-dialog :title="`Period ${periodNum} bonus`" :visible.sync="dialogFlowVisible" width="70%"><!-- 100期奖金 -->
-        <el-descriptions title="" class="bonus-list" v-if="newData" :column="2" border>
-          <el-descriptions-item class="bonus-item" label="Pay cycle">{{newData.PERIOD_NUM.value}}</el-descriptions-item><!-- 期数 -->
+    <el-dialog :title="`Period ${periodNum} bonus`" :visible.sync="dialogFlowVisible" width="60%"><!-- 100期奖金 -->
+        <el-descriptions title="" class="bonus-list" v-if="newData" :column="2" border size="medium" style="width: 100%">
+          <el-descriptions-item class="bonus-item" label="Member Code">{{newData.USER_NAME.value}}</el-descriptions-item><!-- 用户编号 -->
+          <el-descriptions-item class="bonus-item" label="Pay Cycle">{{newData.PERIOD_NUM.value}}</el-descriptions-item><!-- 期数 -->
           <el-descriptions-item class="bonus-item" label="Member Level">{{newData.LAST_DEC_LV.value}}</el-descriptions-item><!-- 会员等级 -->
+          <el-descriptions-item class="bonus-item" label="Latest Director">{{newData.LAST_EMP_LV.value}}</el-descriptions-item><!-- 会员管理星级 -->
+          <el-descriptions-item class="bonus-item" label="Latest Crown">{{newData.LAST_CROWN_LV.value}}</el-descriptions-item><!-- 会员皇冠星级 -->
           <el-descriptions-item class="bonus-item" label="Welcome Bonus" v-if="newData.ORI_BONUS_TG_SWITCH === 1">{{newData.ORI_BONUS_TG.value}}</el-descriptions-item><!-- 销售奖金 -->
           <el-descriptions-item class="bonus-item" label="Team Bonus" v-if="newData.ORI_BONUS_QY_SWITCH === 1">{{newData.ORI_BONUS_QY.value}}</el-descriptions-item><!-- 绩效奖 -->
           <el-descriptions-item class="bonus-item" label="Director Bonus">{{newData.ORI_BONUS_BS.value}}</el-descriptions-item><!-- 蓝星奖金/管理奖 -->

+ 1 - 1
frontendEle/src/views/dashboard/index.vue

@@ -10,7 +10,7 @@
           <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
             <el-row :gutter="10">
               <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="12">Current System Time:{{nowDateTime}}</el-col> <!--当前系统时间-->
-              <el-col :xs="24" :sm="24" :md="24" :lg="4" :xl="12">Rank:{{myEmpLv['LEVEL_NAME']!='No Rank'?myEmpLv['LEVEL_NAME']:''}}
+              <el-col :xs="24" :sm="24" :md="24" :lg="4" :xl="12">Highest Director:{{myEmpLv['LEVEL_NAME']!='No Rank'?myEmpLv['LEVEL_NAME']:''}}
                 <!--<span v-if="myEmpLv['ICON_TYPE']==0">No Rank</span><img
                   :src="getEmpIco(myEmpLv['ICON_TYPE'])" alt=""
                   v-for="(o,key) in parseInt(myEmpLv['ICON_NUM'])"

+ 1 - 1
frontendEle/src/views/shop/order-list.vue

@@ -80,7 +80,7 @@
   //
       objectSpanMethod(obj) {
 
-        if (obj.columnIndex > 7) {
+        if (obj.columnIndex > 8) {
           // ⼆维数组存储的数据取出
           var _row = this.spanArr[obj.rowIndex];
           var _col = _row > 0 ? 1 : 0;

+ 2715 - 0
sql/StoredProcedure-NG.sql

@@ -0,0 +1,2715 @@
+-- MariaDB dump 10.19  Distrib 10.7.4-MariaDB, for Linux (x86_64)
+--
+-- Host: ngds-db-live.cdehazle30lc.ap-east-1.rds.amazonaws.com    Database: coco_milk_0524
+-- ------------------------------------------------------
+-- Server version	10.6.7-MariaDB-log
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Dumping routines for database 'coco_milk_0524'
+--
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALC10` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC10`(IN `PCPID` INT)
+BEGIN
+    DECLARE
+        MLAYER,
+        MMAXLAYER INT;
+    DECLARE
+        MRATE,
+        MLIMITPV DECIMAL ( 10, 2 );-- 查询第一个级别的限制以及等奖比例
+    SELECT
+        T.ACHIEVE_PV,
+        T.BS_PERCENT / 100 INTO MLIMITPV,
+        MRATE
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = 'E121497617216708615';
+    SELECT
+        MAX( LAYER ) INTO MLAYER
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            PV > 0;
+
+    SET MMAXLAYER := MLAYER;
+    WHILE
+            MLAYER >= 0 DO
+            IF
+                ( MLAYER < MMAXLAYER ) THEN-- 向上累计
+                UPDATE AR_BS_BONUS_103_CALC T1
+                    INNER JOIN (
+                        SELECT
+                            INTRODUCER_ID,
+                            SUM( GPV10 ) GPV10
+                        FROM
+                            AR_BS_BONUS_103_CALC
+                        WHERE
+                                LAYER = MLAYER + 1
+                          AND USER_TYPE10 = 0
+                          AND GPV10 > 0
+                        GROUP BY
+                            INTRODUCER_ID
+                    ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
+                        AND T1.LAYER = MLAYER
+                SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
+                UPDATE AR_BS_BONUS_103_CALC T
+                SET T.GPV10 = 0
+                WHERE
+                        T.GPV10 < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
+
+            END IF;
+            UPDATE AR_BS_BONUS_103_CALC T1
+            SET T1.GPV10 = T1.GPV10 + T1.PV
+            WHERE
+                    T1.LAYER = MLAYER
+              AND T1.PV > 0;-- 是否达标 如果达标
+            UPDATE AR_BS_BONUS_103_CALC T
+            SET T.USER_TYPE10 = 10
+            WHERE
+                    T.GPV10 >= T.ACHIEVE_PERF_PV
+              AND T.LAYER = MLAYER
+              AND T.USER_TYPE10 = 0;
+            IF
+                ( MLAYER > 0 ) THEN-- 升级为蓝星A
+                CALL CALCUPGARDE ( MLAYER );
+
+            END IF;
+
+            SET MLAYER := MLAYER - 1;
+
+        END WHILE;
+    UPDATE AR_BS_BONUS_103_CALC T
+    SET T.BONUS10 = T.GPV10 * MRATE
+    WHERE
+            T.USER_TYPE10 = 10
+      AND T.GPV10 > 0;
+    UPDATE AR_BS_BONUS_103_CALC
+    SET USER_TYPE = 0;
+
+    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+    SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
+                                                                                             AND GPV10 > 0;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALC20` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC20`(IN `PCPID` INT)
+BEGIN
+    DECLARE
+        MLAYER,
+        MMAXLAYER,
+        MCOUNT INT;
+    DECLARE
+        MRATE,
+        MLIMITPV DECIMAL ( 10, 2 );
+    START TRANSACTION;-- 第一个级别的限制
+    SELECT
+        T.ACHIEVE_PV INTO MLIMITPV
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = 'E121497617216708615';-- 第二个级别得奖的比例
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE5FE7857C216AE055736AECE8644D';
+    SELECT
+        MAX( LAYER ) INTO MLAYER
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            PV > 0;
+
+    SET MMAXLAYER := MLAYER;
+    WHILE
+            MLAYER >= 0 DO
+            IF
+                ( MLAYER < MMAXLAYER ) THEN-- 向上累计
+                UPDATE AR_BS_BONUS_103_CALC T1
+                    INNER JOIN (
+                        SELECT
+                            INTRODUCER_ID,
+                            SUM( GPV ) GPV
+                        FROM
+                            AR_BS_BONUS_103_CALC
+                        WHERE
+                                LAYER = MLAYER + 1
+                          AND USER_TYPE = 0
+                          AND GPV > 0
+                        GROUP BY
+                            INTRODUCER_ID
+                    ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
+                        AND T1.LAYER = MLAYER
+                SET T1.GPV = T2.GPV;-- 没有升级的会员需要将自己的小组业绩清零
+                UPDATE AR_BS_BONUS_103_CALC T
+                SET T.GPV = 0
+                WHERE
+                        T.GPV < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND GPV > 0;
+
+            END IF;
+            UPDATE AR_BS_BONUS_103_CALC T1
+            SET T1.GPV = T1.GPV + T1.PV
+            WHERE
+                    T1.LAYER = MLAYER;-- 是否达标 如果达标
+            UPDATE AR_BS_BONUS_103_CALC T
+            SET T.USER_TYPE = 10
+            WHERE
+                    T.GPV >= T.ACHIEVE_PERF_PV
+              AND T.LAYER = MLAYER;
+
+            SET MLAYER := MLAYER - 1;
+
+        END WHILE;
+    UPDATE AR_BS_BONUS_103_CALC
+    SET GPV = 0
+    WHERE
+            USER_TYPE = 0
+      AND GPV > 0;
+    SELECT
+        MAX( LAYER ) INTO MLAYER
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            USER_TYPE > 0;
+
+    SET MMAXLAYER := MLAYER;-- 添加至新网体页面
+    INSERT INTO AR_BS_BONUS_103_CALC_NET ( USER_ID, INTRODUCER_ID, CALC_PERIOD_ID, USER_TYPE, GPV, DIRECTLY_UNDER, LAYER, TEAM_GPV ) SELECT
+                                                                                                                                         USER_ID,
+                                                                                                                                         INTRODUCER_ID,
+                                                                                                                                         CALC_PERIOD_ID,
+                                                                                                                                         USER_TYPE,
+                                                                                                                                         GPV,
+                                                                                                                                         0,
+                                                                                                                                         LAYER,
+                                                                                                                                         0
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            LAYER <= MLAYER; -- 处理新的网体
+    DELETE FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER AND USER_TYPE = 0; SET MLAYER := MLAYER - 1; WHILE MLAYER >= 0 DO-- 计算直属宽度
+    UPDATE AR_BS_BONUS_103_CALC_NET T1
+        INNER JOIN ( SELECT INTRODUCER_ID, COUNT( * ) SONS FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER + 1 GROUP BY INTRODUCER_ID ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
+            AND T1.LAYER = MLAYER
+    SET T1.DIRECTLY_UNDER = T2.SONS;-- 本人达标并且下属满足一个及以上的达标数升级为第二个级别
+    UPDATE AR_BS_BONUS_103_CALC_NET T1
+    SET T1.USER_TYPE = 20
+    WHERE
+            T1.LAYER = MLAYER
+      AND USER_TYPE = 10
+      AND DIRECTLY_UNDER >= 1;-- 计算本层达标人员
+    SELECT
+        COUNT( * ) INTO MCOUNT
+    FROM
+        AR_BS_BONUS_103_CALC_NET C
+    WHERE
+            C.DIRECTLY_UNDER >= 2
+      AND C.USER_TYPE = 0
+      AND LAYER = MLAYER;
+    IF
+        ( MCOUNT > 0 ) THEN
+        CALL CALC20_0 ( MLAYER, PCPID );
+
+    END IF;-- 删除未达标人员
+    CALL CALCDELNET ( MLAYER );
+
+    SET MLAYER := MLAYER - 1;
+
+        END WHILE;-- 计算GPV_4_CALC,会员级别
+    UPDATE AR_BS_BONUS_103_CALC C1
+        INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
+    SET C1.GPV_4_CALC = C2.GPV,
+        C1.USER_TYPE = C2.USER_TYPE;-- 计算见习奖金
+    UPDATE AR_BS_BONUS_103_CALC C1
+        INNER JOIN ( SELECT INTRODUCER_ID, SUM( GPV ) ALL_GPV FROM AR_BS_BONUS_103_CALC_NET GROUP BY INTRODUCER_ID ) C2 ON C1.USER_ID = C2.INTRODUCER_ID
+            AND C1.USER_TYPE = 20
+    SET C1.BONUS20 = C2.ALL_GPV * MRATE;
+    COMMIT;
+    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE, PERIOD_NUM ) SELECT
+                                                                                                                           C1.USER_ID,
+                                                                                                                           NULL,
+                                                                                                                           20,
+                                                                                                                           C2.ALL_GPV * MRATE,
+                                                                                                                           C2.ALL_GPV,
+                                                                                                                           MRATE,
+                                                                                                                           PCPID
+    FROM
+        AR_BS_BONUS_103_CALC C1
+            INNER JOIN ( SELECT INTRODUCER_ID, SUM( GPV ) ALL_GPV FROM AR_BS_BONUS_103_CALC_NET GROUP BY INTRODUCER_ID ) C2 ON C1.USER_ID = C2.INTRODUCER_ID
+            AND C1.USER_TYPE = 20
+            AND ALL_GPV > 0;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALC20_0` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC20_0`(IN PLAYER INT,IN `PCPID` INT)
+BEGIN
+	DECLARE
+		FLAG INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MMAXUSERID VARCHAR ( 50 );
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		MC CURSOR FOR SELECT
+		C.USER_ID 
+	FROM
+		AR_BS_BONUS_103_CALC_NET C 
+	WHERE
+		C.DIRECTLY_UNDER >= 2 
+		AND C.USER_TYPE = 0 
+		AND LAYER = PLAYER;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;-- 打开游标
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MUSERID;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;-- 这里是为了显示获取结果
+		SELECT
+			MIN( GPV ) INTO MGPV 
+		FROM
+			AR_BS_BONUS_103_CALC_NET C 
+		WHERE
+			C.INTRODUCER_ID = MUSERID 
+			AND C.USER_TYPE >= 10;
+		SELECT
+			MAX( USER_ID ) INTO MMAXUSERID 
+		FROM
+			AR_BS_BONUS_103_CALC_NET C 
+		WHERE
+			C.INTRODUCER_ID = MUSERID 
+			AND C.GPV = MGPV;
+		UPDATE AR_BS_BONUS_103_CALC_NET C 
+		SET C.USER_TYPE = 20,
+		C.GPV = MGPV 
+		WHERE
+			USER_ID = MUSERID;
+		UPDATE AR_BS_BONUS_103_CALC_NET C 
+		SET C.GPV = 0 
+		WHERE
+			USER_ID = MMAXUSERID;-- 关闭游标
+		
+		INSERT INTO AR_CALC_BONUS_BS_DETAIL_GPV(USER_ID,INTRODUCER_ID,GPV,PERIOD_NUM)
+		VALUES(MMAXUSERID,MUSERID,MGPV,PCPID);
+	END LOOP;
+	CLOSE MC;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCBLUE` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCBLUE`(IN `PCPID` INT)
+LABEL: BEGIN
+DECLARE MCALCYEAR INT;
+DECLARE MISMONTH,MCALCMONTH,MISSENT TINYINT;
+
+START TRANSACTION;
+-- 日志;
+DELETE FROM AR_BS_BONUS_103_CALC_EVENT ;-- WHERE CALC_PERIOD_ID >= PCPID;
+CALL CALCRECORD(-1,'开始',PCPID,NOW());
+COMMIT;
+-- SELECT USER_ID INTO MISMONTH FROM ZR_USER;
+SELECT AP.IS_MONTH,AP.CALC_MONTH,AP.CALC_YEAR,AP.IS_SENT
+INTO MISMONTH,MCALCMONTH,MCALCYEAR,MISSENT
+FROM AR_PERIOD AP WHERE AP.PERIOD_NUM = PCPID;
+
+	-- 查看是否月结
+-- IF(MISMONTH  =  0 OR MISSENT = 1)THEN
+-- LEAVE LABEL;
+-- END IF;
+
+
+-- 清除数据
+CALL CALCRECORD(1,'清除数据',PCPID,NOW());
+COMMIT;
+CALL CALCCLEAN(PCPID);
+COMMIT;
+
+-- 初始化
+CALL CALCRECORD(2,'初始化',PCPID,NOW());
+COMMIT;
+CALL CALCINIT(PCPID,MCALCMONTH,MCALCYEAR);
+COMMIT;
+
+
+-- 初始业绩
+-- 3.蓝星奖
+CALL CALCRECORD(3,'蓝星奖',PCPID,NOW());
+COMMIT;
+CALL CALC10(PCPID);
+COMMIT;
+
+-- 4.新网体
+CALL CALCRECORD(4,'新网体',PCPID,NOW());
+COMMIT;
+CALL CALC20(PCPID);
+COMMIT;
+
+-- 5.升级主任
+CALL CALCRECORD(5,'升级主任',PCPID,NOW());
+COMMIT;
+CALL CALCUP30;
+COMMIT;
+
+-- 6.计算主任自己第一层的总业绩
+CALL CALCRECORD(6,'计算主任自己第一层的总业绩',PCPID,NOW());
+COMMIT;
+CALL CALCTOTALGPV;
+COMMIT;
+
+-- 7.计算平级奖
+CALL CALCRECORD(7,'计算平级奖',PCPID,NOW());
+COMMIT;
+CALL CALCLEVEL(PCPID);
+COMMIT;
+
+-- 8.积分
+CALL CALCRECORD(8,'积分',PCPID,NOW());
+COMMIT;
+CALL CALCPOINT;
+COMMIT;
+
+-- 9.汇总
+CALL CALCRECORD(9,'汇总',PCPID,NOW());
+COMMIT;
+CALL CALCSUMMARY;
+COMMIT;
+
+-- 10.记录总表
+CALL CALCRECORD(10,'记录总表',PCPID,NOW());
+COMMIT;
+CALL CALCKEEP(MCALCYEAR,MCALCMONTH);
+COMMIT;
+
+-- 11.计算拨出比
+CALL CALCRECORD(11,'计算拨出比',PCPID,NOW());
+COMMIT;
+CALL CALCSTAT(PCPID);
+COMMIT;
+
+CALL CALCRECORD(12,'结束',PCPID,NOW());
+COMMIT;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCCHECKING` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCCHECKING`(IN `PCPID` INT)
+LABEL : BEGIN-- 遍历数据结束标志
+	DECLARE
+		MCOLUMNNAME,
+		MVALUES,
+		MVALUES0,
+		MVALUES1,
+		MVALUES2 VARCHAR ( 100 );-- 定义预处理SQL语句
+	DECLARE
+		SQL_FOR_SELECT VARCHAR ( 2000 );
+	DECLARE
+		MCOUNT INT DEFAULT 0;
+	DECLARE
+		DONE INT DEFAULT FALSE;
+	DECLARE
+		MISMONTH,
+		MISSEND TINYINT;-- 游标
+	DECLARE
+		CUR_ACCOUNT CURSOR FOR SELECT
+		COLUMN_NAME 
+	FROM
+		INFORMATION_SCHEMA.COLUMNS 
+	WHERE
+		TABLE_NAME = 'AR_CALC_BONUS_BS_DETAIL' 
+		AND TABLE_SCHEMA = 'aikang_db_28' 
+		AND COLUMN_NAME NOT IN ( 'CALC_YEAR', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT', 'ID', 'LAYER' ) 
+		AND DATA_TYPE IN ( 'DECIMAL', 'DOUBLE', 'INT' );-- 将结束标志绑定到游标
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET DONE = TRUE;
+	START TRANSACTION;
+	SELECT
+		AP.IS_MONTH,
+		AP.IS_SENT INTO MISMONTH,
+		MISSEND 
+	FROM
+		AR_PERIOD AP 
+	WHERE
+		AP.PERIOD_NUM = PCPID;-- 查看是否月结
+	IF
+		( MISMONTH = 0 OR MISSEND = 1 ) THEN
+			LEAVE LABEL;
+		
+	END IF;-- 打开游标
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_CHECKING 
+	WHERE
+		PERIOD_NUM >= PCPID;
+	OPEN CUR_ACCOUNT;-- 遍历
+	READ_LOOP :
+	LOOP-- 取值 取多个字段
+		FETCH NEXT 
+		FROM
+			CUR_ACCOUNT INTO MCOLUMNNAME;
+		IF
+			DONE THEN
+				LEAVE READ_LOOP;
+			
+		END IF;
+		
+		SET SQL_FOR_SELECT = CONCAT(
+			"SELECT COUNT(*) INTO @MVALUES0 FROM (SELECT IFNULL(A1.USER_ID,'-1') MAIN_ID,IFNULL(A2.USER_ID,'-1') TEST_ID,IFNULL(A1.",
+			MCOLUMNNAME,
+			",0) NAME1,IFNULL(A2.",
+			MCOLUMNNAME,
+			",0) NAME2 FROM AR_CALC_BONUS_BS_DETAIL A1 LEFT JOIN AR_CALC_BONUS_BS_DETAIL_CALC A2 ON A1.USER_ID = A2.USER_ID WHERE A1.PERIOD_NUM = ",
+			PCPID,
+			" AND A2.PERIOD_NUM = ",
+			PCPID,
+			" UNION SELECT IFNULL(A2.USER_ID,'-1') MAIN_ID,IFNULL(A1.USER_ID,'-1') TEST_ID,IFNULL(A2.",
+			MCOLUMNNAME,
+			",0) NAME1,IFNULL(A1.",
+			MCOLUMNNAME,
+			",0) NAME2 FROM AR_CALC_BONUS_BS_DETAIL_CALC A1 LEFT JOIN AR_CALC_BONUS_BS_DETAIL A2 ON A1.USER_ID = A2.USER_ID WHERE A1.PERIOD_NUM = ",
+			PCPID,
+			" AND A2.PERIOD_NUM = ",
+			PCPID,
+			") B WHERE B.MAIN_ID != B.TEST_ID OR ABS(B.NAME1-B.NAME2)>0.5" 
+		);-- 拼接查询SQL语句
+		
+		SET @SQL = SQL_FOR_SELECT;
+		PREPARE STMT 
+		FROM
+			@SQL;-- 预处理动态SQL语句
+		EXECUTE STMT;-- 执行SQL语句
+		DEALLOCATE PREPARE STMT;
+		
+		SET MVALUES0 := @MVALUES0;
+		
+		SET SQL_FOR_SELECT = CONCAT( "SELECT IFNULL(SUM(", MCOLUMNNAME, "),0) INTO @MVALUES1 FROM  AR_CALC_BONUS_BS_DETAIL  WHERE PERIOD_NUM = '", PCPID, "'" );-- 拼接查询SQL语句
+		
+		SET @SQL = SQL_FOR_SELECT;
+		PREPARE STMT 
+		FROM
+			@SQL;-- 预处理动态SQL语句
+		EXECUTE STMT;-- 执行SQL语句
+		DEALLOCATE PREPARE STMT;
+		
+		SET MVALUES1 := @MVALUES1;
+		
+		SET SQL_FOR_SELECT = CONCAT( "SELECT IFNULL(SUM(", MCOLUMNNAME, "),0) INTO @MVALUES2 FROM  AR_CALC_BONUS_BS_DETAIL_CALC  WHERE USER_ID != '0' AND PERIOD_NUM = '", PCPID, "'" );-- 拼接查询SQL语句
+		
+		SET @SQL = SQL_FOR_SELECT;
+		PREPARE STMT 
+		FROM
+			@SQL;-- 预处理动态SQL语句
+		EXECUTE STMT;-- 执行SQL语句
+		DEALLOCATE PREPARE STMT;
+		
+		SET MVALUES2 := @MVALUES2;
+		INSERT INTO AR_CALC_BONUS_BS_CHECKING ( PERIOD_NUM, COLUMN_NAME, DIFF_COUNT, MAIN_SUM, CALC_SUM, DIFF_SUM )
+		VALUES
+			(
+				PCPID,
+				MCOLUMNNAME,
+				MVALUES0,
+				MVALUES1,
+				MVALUES2,
+				ABS(
+					CONVERT (
+						MVALUES1,
+						DECIMAL ( 12, 2 ))- CONVERT (
+						MVALUES2,
+					DECIMAL ( 12, 2 ))));
+		COMMIT;
+		
+	END LOOP;
+	CLOSE CUR_ACCOUNT;
+	SELECT
+		COUNT(*) INTO MCOUNT 
+	FROM
+		AR_CALC_BONUS_BS_CHECKING 
+	WHERE
+		( DIFF_COUNT > 0 OR DIFF_SUM >= 1 ) 
+		AND COLUMN_NAME IN (
+			'USER_TYPE10',
+			'USER_TYPE',
+			'BONUS10',
+			'BONUS20',
+			'BONUS30',
+			'BONUS40',
+			'BONUS50',
+			'BONUS60',
+			'BONUS70',
+			'BONUS80',
+			'BONUS90',
+			'BONUS100',
+			'BONUS110',
+			'ORI_BONUS',
+			'AMOUNT',
+			'PRODUCT_POINT' 
+		);
+	IF
+		( MCOUNT = 0 ) THEN
+			UPDATE AR_CALC_BONUS_BS_STAT T 
+			SET T.CHECK_STATUS = 1 
+		WHERE
+			T.PERIOD_NUM = PCPID;
+		
+	END IF;
+	COMMIT;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCCLEAN` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCCLEAN`(IN `PCPID` INT)
+BEGIN-- 删除当期奖金
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_CALC;
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_TEST 
+	WHERE
+		CALC_PERIOD_ID >= PCPID;-- 使用的奖金表
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS 
+	WHERE
+		PERIOD_NUM >= PCPID;
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_DETAIL 
+	WHERE
+		PERIOD_NUM >= PCPID;-- 删除当期网体
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_CALC_NET;
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_TEST_NET 
+	WHERE
+		CALC_PERIOD_ID >= PCPID;-- 删除拨出表
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_STAT 
+	WHERE
+		PERIOD_NUM >= PCPID;-- 删除明细表
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_DETAIL_BONUS 
+	WHERE
+		PERIOD_NUM >= PCPID;-- 删除日志
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_DETAIL_GPV 
+	WHERE
+		PERIOD_NUM >= PCPID;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCDELNET` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCDELNET`(IN `PLAYER` INT)
+BEGIN
+	DECLARE
+		FLAG INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MMAXUSERID,
+		MINTRODUCERID VARCHAR ( 50 );
+	/*DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		DN CURSOR FOR SELECT
+		USER_ID 
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		LAYER = PLAYER 
+		AND USER_TYPE = 0;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;*/
+	START TRANSACTION;-- 打开游标
+	/*OPEN DN;-- 获取结果
+	L2 :
+	LOOP
+			FETCH DN INTO MUSERID;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;-- 查询需要删除会员的推荐人ID
+		SELECT
+			T.INTRODUCER_ID INTO MINTRODUCERID 
+		FROM
+			AR_BS_BONUS_103_CALC_NET T 
+		WHERE
+			T.USER_ID = MUSERID;-- 更改需要删除会员第一代的推荐人ID以及层数
+		UPDATE AR_BS_BONUS_103_CALC_NET T 
+		SET T.INTRODUCER_ID = MINTRODUCERID,
+		T.LAYER = T.LAYER - 1 
+		WHERE
+			T.INTRODUCER_ID = MUSERID;-- 关闭游标
+		
+	END LOOP;
+	CLOSE DN;*/
+	UPDATE AR_BS_BONUS_103_CALC_NET
+	SET DELETED = 1
+	WHERE
+		LAYER = PLAYER 
+		AND USER_TYPE = 0;
+	UPDATE AR_BS_BONUS_103_CALC_NET T1
+	INNER JOIN AR_BS_BONUS_103_CALC_NET T2
+	ON T1.INTRODUCER_ID = T2.USER_ID AND T1.LAYER = PLAYER+1 AND T2.LAYER =  PLAYER AND T2.USER_TYPE = 0
+	SET T1.INTRODUCER_ID = T2.INTRODUCER_ID,T1.LAYER = PLAYER;
+	DELETE
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		LAYER = PLAYER 
+		AND USER_TYPE = 0
+		AND DELETED = 1;
+	COMMIT;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCINIT` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCINIT`(IN `PCPID` INT, IN `PCALCMONTH` TINYINT, IN `PCALCYEAR` INT)
+BEGIN
+
+    DECLARE
+        AC_USER_NO INT;     -- 邀请会员达标数
+    DECLARE
+        MLIMITPV,   -- 邀请会员不及格达标PV
+        AC_PERF_PV DECIMAL ( 10, 2 );   -- 邀请会员及格达标PV
+
+    -- 查询第一个级别的邀请会员数、达标PV值以及等奖比例
+    SELECT
+        T.ACHIEVE_PV,
+        T.ACHIEVE_PERF_PV,
+        T.ACHIEVE_MEMBER_NUM
+    INTO MLIMITPV, AC_PERF_PV, AC_USER_NO
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+        T.ID = 'E121497617216708615';
+
+    INSERT INTO AR_BS_BONUS_103_CALC (
+        LAST_DEC_LV,
+        LAST_EMP_LV,
+        LAST_STATUS,
+        USER_ID,
+        INTRODUCER_ID,
+        LAYER,
+        PV,
+        GPV10,
+        GPV,
+        GPV_4_CALC,
+        USER_TYPE10,
+        USER_TYPE,
+        BONUS10,
+        BONUS20,
+        BONUS30,
+        BONUS40,
+        BONUS50,
+        BONUS60,
+        BONUS70,
+        BONUS80,
+        BONUS90,
+        BONUS100,
+        BONUS110,
+        BONUS,
+        PRODUCT_POINT,
+        CALC_PERIOD_ID,
+        ACHIEVE_MEMBER_NUM,
+        ACHIEVE_PERF_PV
+    ) SELECT
+          AU.LAST_DEC_LV,
+          AU.EMP_LV,
+          AU.STATUS,
+          AU.ID,
+          IFNULL( AURN.PARENT_UID, 0 ),
+          AURN.TOP_DEEP,
+          IFNULL( AO.PV, 0 ),
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          PCPID,
+          IFNULL(DO.ACHIEVE_MEMBER_NUM, 0),
+          IF(DO.ACHIEVE_MEMBER_NUM >= AC_USER_NO, AC_PERF_PV, MLIMITPV)
+    FROM
+        AR_USER AU
+    INNER JOIN AR_USER_RELATION_NEW AURN ON AU.ID = AURN.USER_ID
+    LEFT JOIN (
+        SELECT
+            USER_ID,
+            SUM( PV ) PV
+        FROM
+            AR_PERF_ORDER
+        WHERE
+                PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
+        GROUP BY
+            USER_ID
+    ) AO ON AO.USER_ID = AU.ID
+    LEFT JOIN (
+        SELECT
+            R.PARENT_UID,
+            COUNT(R.USER_ID) AS ACHIEVE_MEMBER_NUM
+        FROM
+            AR_PERF_ORDER O
+            INNER JOIN AR_USER_RELATION_NEW R ON O.USER_ID = R.USER_ID
+        WHERE
+            O.DEC_TYPE = 'ZC' AND O.PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
+        GROUP BY R.PARENT_UID
+    ) DO ON DO.PARENT_UID = AU.ID
+    WHERE
+            AU.DELETED = 0;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCKEEP` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCKEEP`(IN PCALCYEAR int, IN PCALCMONTH int)
+BEGIN
+    INSERT INTO AR_BS_BONUS_103_TEST SELECT
+        *
+    FROM
+        AR_BS_BONUS_103_CALC;
+    INSERT INTO AR_BS_BONUS_103_TEST_NET SELECT
+        *
+    FROM
+        AR_BS_BONUS_103_CALC_NET;
+    INSERT INTO AR_CALC_BONUS_BS (
+        USER_ID,
+        INTRODUCER_ID,
+        LAST_DEC_LV,
+        LAST_EMP_LV,
+        LAST_STATUS,
+        LEVEL_ID,
+        ORI_BONUS,
+        MANAGE_TAX,
+        AMOUNT,
+        PRODUCT_POINT,
+        PERIOD_NUM,
+        CALC_YEAR,
+        CALC_MONTH,
+        P_CALC_MONTH,
+        CREATED_AT,
+        ORI_BONUS_MNT,
+        MANAGE_TAX_MNT,
+        AMOUNT_MNT,
+        ORI_BONUS_ABBR,
+        MANAGE_TAX_ABBR,
+        AMOUNT_ABBR,
+        ACHIEVE_MEMBER_NUM,
+        ACHIEVE_PERF_PV
+    ) SELECT
+          A.USER_ID,
+          A.INTRODUCER_ID,
+          A.LAST_DEC_LV,
+          A.LAST_EMP_LV,
+          A.LAST_STATUS,
+          B.ID,
+          IFNULL( A.BONUS, 0 ),
+          0,
+          IFNULL( A.BONUS, 0 ),
+          IFNULL( A.PRODUCT_POINT, 0 ),
+          CALC_PERIOD_ID,
+          PCALCYEAR,
+          PCALCYEAR*100+PCALCMONTH,
+          NOW(),
+          UNIX_TIMESTAMP(
+                  NOW()),
+          IFNULL( A.BONUS_MNT, 0 ),
+          0,
+          IFNULL( A.BONUS_MNT, 0 ),
+          IFNULL( A.BONUS_ABBR, 0 ),
+          0,
+          IFNULL( A.BONUS_ABBR, 0 ),
+          A.ACHIEVE_MEMBER_NUM,
+          A.ACHIEVE_PERF_PV
+    FROM
+        AR_BS_BONUS_103_CALC A
+            LEFT JOIN AR_EMPLOY_LEVEL B ON A.USER_TYPE = B.SORT * 10
+    WHERE
+            A.BONUS > 0
+       OR A.PRODUCT_POINT > 0;
+    INSERT INTO AR_CALC_BONUS_BS_DETAIL (
+        USER_ID,
+        INTRODUCER_ID,
+        LAST_DEC_LV,
+        LAST_EMP_LV,
+        LAST_STATUS,
+        LEVEL_ID,
+        ORI_BONUS,
+        MANAGE_TAX,
+        AMOUNT,
+        PRODUCT_POINT,
+        PERIOD_NUM,
+        LAYER,
+        PV,
+        GPV10,
+        GPV,
+        GPV_4_CALC,
+        USER_TYPE10,
+        USER_TYPE,
+        BONUS10,
+        BONUS20,
+        BONUS30,
+        BONUS40,
+        BONUS50,
+        BONUS60,
+        BONUS70,
+        BONUS80,
+        BONUS90,
+        BONUS100,
+        BONUS110,
+        CALC_YEAR,
+        CALC_MONTH,
+        P_CALC_MONTH,
+        CREATED_AT,
+        ORI_BONUS_MNT,
+        MANAGE_TAX_MNT,
+        AMOUNT_MNT,
+        ORI_BONUS_ABBR,
+        MANAGE_TAX_ABBR,
+        AMOUNT_ABBR
+    ) SELECT
+          USER_ID,
+          INTRODUCER_ID,
+          LAST_DEC_LV,
+          LAST_EMP_LV,
+          LAST_STATUS,
+          B.ID,
+          IFNULL( BONUS, 0 ),
+          0,
+          IFNULL( BONUS, 0 ),
+          IFNULL( PRODUCT_POINT, 0 ),
+          CALC_PERIOD_ID,
+          LAYER,
+          PV,
+          GPV10,
+          GPV,
+          GPV_4_CALC,
+          USER_TYPE10,
+          USER_TYPE,
+          BONUS10,
+          BONUS20,
+          BONUS30,
+          BONUS40,
+          BONUS50,
+          BONUS60,
+          BONUS70,
+          BONUS80,
+          BONUS90,
+          BONUS100,
+          BONUS110,
+          PCALCYEAR,
+          PCALCYEAR*100+PCALCMONTH,
+          NOW(),
+          UNIX_TIMESTAMP(
+                  NOW()),
+          IFNULL( A.BONUS_MNT, 0 ),
+          0,
+          IFNULL( A.BONUS_MNT, 0 ),
+          IFNULL( A.BONUS_ABBR, 0 ),
+          0,
+          IFNULL( A.BONUS_ABBR, 0 )
+    FROM
+        AR_BS_BONUS_103_CALC A
+            LEFT JOIN ( SELECT ID, SORT FROM AR_EMPLOY_LEVEL ) B ON A.USER_TYPE = B.SORT * 10;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCLEVEL` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCLEVEL`(IN `PCPID` INT)
+BEGIN
+	DECLARE
+		FLAG,
+		MLAYER,
+		MUSERTYPE INT DEFAULT 0;
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	
+		DECLARE
+		MC CURSOR FOR SELECT
+		LAYER
+	FROM
+		AR_BS_BONUS_103_CALC_NET T 
+	WHERE
+		T.USER_TYPE = 30 GROUP BY LAYER ORDER BY LAYER DESC;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;
+	START TRANSACTION;-- 打开游标
+
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MLAYER;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;
+		
+-- 计算当前层数的奖金以及向上所贡献的奖金
+			CALL CALCLEVEL_ ( MLAYER ,PCPID);
+	END LOOP;
+	CLOSE MC;
+	/*WHILE
+			( MLAYER >= 0 ) DO-- 计算当前层数的奖金以及向上所贡献的奖金
+			CALL CALCLEVEL_ ( MLAYER );
+		
+		SET MLAYER := MLAYER - 1;
+		
+	END WHILE;*/-- 级别更新
+	
+
+	UPDATE AR_BS_BONUS_103_CALC C1
+	INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID 
+	AND C1.USER_TYPE <> C2.USER_TYPE 
+	SET C1.USER_TYPE = C2.USER_TYPE;
+
+
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCLEVEL_` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCLEVEL_`(IN PLAYER int, IN PCPID int)
+BEGIN
+	DECLARE
+		FLAG,
+		MLAYER,
+		MUSERTYPE INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MBONUSID,
+		MNEWBONUSID VARCHAR ( 50 );
+	DECLARE
+		MRATE,
+		MRATE30,
+		MRATE40,
+		MRATE50,
+		MRATE60,
+		MRATE70,
+		MRATE80,
+		MRATE90,
+		MRATE100,
+		MRATE110,
+		MBONUS,
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		MC CURSOR FOR SELECT
+		C.USER_ID,
+		C.TEAM_GPV 
+	FROM
+		AR_BS_BONUS_103_CALC_NET C 
+	WHERE
+		C.USER_TYPE >= 30 
+		AND LAYER = PLAYER;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;
+
+	START TRANSACTION;
+
+	-- 取各级别蓝星奖比例【开始】
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE30 
+	FROM
+		AR_EMPLOY_LEVEL T 
+	WHERE
+		T.ID = 'E121497617216708616';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE40 
+	FROM
+		AR_EMPLOY_LEVEL T 
+	WHERE
+		T.ID = '67BE6A4D03C52288E055736AECE8644D';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE50 
+	FROM
+		AR_EMPLOY_LEVEL T 
+	WHERE
+		T.ID = '67BE6EA2070D22EBE055736AECE8644D';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE60
+	FROM
+		AR_EMPLOY_LEVEL T
+	WHERE
+		T.ID = '67BE742A336F2370E055736AECE8644D';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE70
+	FROM
+		AR_EMPLOY_LEVEL T
+	WHERE
+		T.ID = '67BE805032C22492E055736AECE8644D';
+
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE80
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '67BE82019BE524CAE055736AECE8644D';
+#
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE90
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '99BE5FE7857C216AE055736AECE8644D';
+#
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE100
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '99BE5FE9008C216AE055736AECE8644D';
+#
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE110
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '99BE5FE7857C216AE000223AECE8644D';
+    -- 取各级别蓝星奖比例【结束】
+
+    -- 打开游标
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MUSERID,
+			MGPV;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;-- 这里是为了显示获取结果
+		
+		SET MLAYER := 1;
+		
+		SET MBONUSID := MUSERID;
+		OUTER_LABEL :
+		WHILE ( MLAYER <= 5 ) DO
+			IF ( MLAYER > 1 ) THEN
+					CALL CALCREFEREE ( MBONUSID, MNEWBONUSID );
+				IF ( ISNULL( MNEWBONUSID ) OR MNEWBONUSID = 0 ) THEN
+						LEAVE OUTER_LABEL;
+					ELSE 
+						SET MBONUSID := MNEWBONUSID;
+					
+				END IF;
+				
+			END IF;
+			IF
+				( MLAYER = 1 ) THEN
+					
+					SET MRATE := MRATE30;
+				
+				ELSEIF ( MLAYER = 2 ) THEN
+				
+				SET MRATE := MRATE40;
+				
+				ELSEIF ( MLAYER = 3 ) THEN
+				
+				SET MRATE := MRATE50;
+				
+				ELSEIF ( MLAYER = 4 ) THEN
+				
+				SET MRATE := MRATE60;
+				
+				ELSEIF ( MLAYER = 5 ) THEN
+				
+				SET MRATE := MRATE70;
+				
+				ELSEIF ( MLAYER = 6 ) THEN
+				
+				SET MRATE := MRATE80;
+				
+				ELSEIF ( MLAYER = 7 ) THEN
+				
+				SET MRATE := MRATE90;
+				
+				ELSEIF ( MLAYER = 8 ) THEN
+				
+				SET MRATE := MRATE100;
+				
+				ELSEIF ( MLAYER = 9 ) THEN
+				
+				SET MRATE := MRATE110;
+				
+			END IF;
+			
+			SET MBONUS := MGPV * MRATE;
+			IF
+				( MLAYER = 1 ) THEN
+					UPDATE AR_BS_BONUS_103_CALC T 
+					SET T.BONUS30 = T.BONUS30 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, NULL, 30, MBONUS, MGPV, MRATE ,PCPID);
+				
+				ELSEIF ( MLAYER = 2 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS40 = T.BONUS40 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 40, MBONUS, MGPV, MRATE ,PCPID);
+				
+				ELSEIF ( MLAYER = 3 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS50 = T.BONUS50 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 50, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 4 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS60 = T.BONUS60 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 60, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 5 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS70 = T.BONUS70 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 70, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 6 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS80 = T.BONUS80 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 80, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 7 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS90 = T.BONUS90 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 90, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 8 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS100 = T.BONUS100 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 100, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 9 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS110 = T.BONUS110 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 110, MBONUS, MGPV, MRATE,PCPID );
+				
+			END IF;-- 计算会员的级别
+			UPDATE AR_BS_BONUS_103_CALC_NET T 
+			SET T.USER_TYPE = ( MLAYER + 2 )* 10 
+			WHERE
+				T.USER_ID = MBONUSID 
+				AND USER_TYPE <=(
+					MLAYER + 1 
+				)* 10;
+			
+			SET MLAYER := MLAYER + 1;
+			
+		END WHILE;-- 关闭游标
+		
+	END LOOP;
+	CLOSE MC;
+	COMMIT;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCLEVEL_kevin_01` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_unicode_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCLEVEL_kevin_01`(IN PLAYER int, IN PCPID int)
+BEGIN
+    DECLARE
+        FLAG,
+        MLAYER,
+        MUSERTYPE INT DEFAULT 0;
+    DECLARE
+        MUSERID,
+        MBONUSID,
+        MNEWBONUSID VARCHAR ( 50 );
+    DECLARE
+        MRATE,
+        MRATE30,
+        MRATE40,
+        MRATE50,
+        MRATE60,
+        MRATE70,
+        MRATE80,
+        MRATE90,
+        MRATE100,
+        MRATE110,
+        MBONUS,
+        MGPV DECIMAL ( 10, 2 );
+    DECLARE
+        MC CURSOR FOR SELECT
+                          C.USER_ID,
+                          C.TEAM_GPV
+                      FROM
+                          AR_BS_BONUS_103_CALC_NET C
+                      WHERE
+                              C.USER_TYPE >= 30
+                        AND LAYER = PLAYER;
+    DECLARE
+        CONTINUE HANDLER FOR NOT FOUND
+        SET FLAG = 1;
+    START TRANSACTION;
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE30
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = 'E121497617216708616';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE40
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE6A4D03C52288E055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE50
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE6EA2070D22EBE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE60
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE742A336F2370E055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE70
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE805032C22492E055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE80
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE82019BE524CAE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE90
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '99BE5FE7857C216AE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE100
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '99BE5FE9008C216AE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE110
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '99BE5FE7857C216AE000223AECE8644D';-- 打开游标
+    OPEN MC;-- 获取结果
+    L2 :
+    LOOP
+        FETCH MC INTO MUSERID,
+            MGPV;
+        IF
+                FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+            LEAVE L2;
+
+        END IF;-- 这里是为了显示获取结果
+
+        SET MLAYER := 1;
+
+        SET MBONUSID := MUSERID;
+        OUTER_LABEL :
+        WHILE
+            ( MLAYER <= 9 ) DO
+                IF
+                    ( MLAYER > 1 ) THEN
+                    CALL CALCREFEREE ( MBONUSID, MNEWBONUSID );
+                    IF
+                        ( ISNULL( MNEWBONUSID ) OR MNEWBONUSID = 0 ) THEN
+                        LEAVE OUTER_LABEL;
+                    ELSE
+                        SET MBONUSID := MNEWBONUSID;
+
+                    END IF;
+
+                END IF;
+                IF
+                    ( MLAYER = 1 ) THEN
+
+                    SET MRATE := MRATE30;
+
+                ELSEIF ( MLAYER = 2 ) THEN
+
+                    SET MRATE := MRATE40;
+
+                ELSEIF ( MLAYER = 3 ) THEN
+
+                    SET MRATE := MRATE50;
+
+                ELSEIF ( MLAYER = 4 ) THEN
+
+                    SET MRATE := MRATE60;
+
+                ELSEIF ( MLAYER = 5 ) THEN
+
+                    SET MRATE := MRATE70;
+
+                ELSEIF ( MLAYER = 6 ) THEN
+
+                    SET MRATE := MRATE80;
+
+                ELSEIF ( MLAYER = 7 ) THEN
+
+                    SET MRATE := MRATE90;
+
+                ELSEIF ( MLAYER = 8 ) THEN
+
+                    SET MRATE := MRATE100;
+
+                ELSEIF ( MLAYER = 9 ) THEN
+
+                    SET MRATE := MRATE110;
+
+                END IF;
+
+                SET MBONUS := MGPV * MRATE;
+                IF
+                    ( MLAYER = 1 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS30 = T.BONUS30 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, NULL, 30, MBONUS, MGPV, MRATE ,PCPID);
+
+                ELSEIF ( MLAYER = 2 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS40 = T.BONUS40 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 40, MBONUS, MGPV, MRATE ,PCPID);
+
+                ELSEIF ( MLAYER = 3 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS50 = T.BONUS50 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 50, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 4 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS60 = T.BONUS60 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 60, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 5 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS70 = T.BONUS70 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 70, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 6 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS80 = T.BONUS80 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 80, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 7 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS90 = T.BONUS90 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 90, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 8 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS100 = T.BONUS100 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 100, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 9 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS110 = T.BONUS110 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 110, MBONUS, MGPV, MRATE,PCPID );
+
+                END IF;-- 计算会员的级别
+                UPDATE AR_BS_BONUS_103_CALC_NET T
+                SET T.USER_TYPE = ( MLAYER + 2 )* 10
+                WHERE
+                        T.USER_ID = MBONUSID
+                  AND USER_TYPE <=(
+                                          MLAYER + 1
+                                      )* 10;
+
+                SET MLAYER := MLAYER + 1;
+
+            END WHILE;-- 关闭游标
+
+    END LOOP;
+    CLOSE MC;
+    COMMIT;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCMAIN` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCMAIN`(IN `PCPID` int,OUT `PRESULT` varchar(100))
+BEGIN
+	#Routine body goes here...
+DECLARE EXIT HANDLER FOR SQLEXCEPTION  
+SET PRESULT = 'FAIL';
+ CALL CalcBlue(PCPID);
+SET PRESULT = 'SUCCESS';
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCPOINT` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCPOINT`()
+BEGIN
+	DECLARE
+		MPOINTRATE DECIMAL ( 10, 2 );
+	SELECT 
+	VALUE
+		/ 100 INTO MPOINTRATE 
+	FROM
+		AR_CONFIG 
+	WHERE
+		CONFIG_NAME = 'bsNoPvPointsPercent';
+	UPDATE AR_BS_BONUS_103_CALC 
+	SET PRODUCT_POINT = PV * MPOINTRATE 
+	WHERE
+		USER_TYPE10 = 0 
+		AND USER_TYPE = 0 
+		AND PV > 0;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCRECORD` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCRECORD`(IN `PID` INT, IN `PEVENT` VARCHAR ( 255 ), IN `PCPID` INT, IN `PNOW` DATETIME)
+BEGIN
+	INSERT INTO AR_BS_BONUS_103_CALC_EVENT ( ID, EVENT, CREATION_TIME, CALC_PERIOD_ID )
+	VALUES
+		( PID, PEVENT, NOW(), PCPID );
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCREFEREE` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCREFEREE`(IN `PBONUSID` VARCHAR ( 50 ),
+	OUT `PNEWBONUSID` VARCHAR ( 50 ))
+BEGIN
+	DECLARE
+		MUSERID,
+		MBONUSID VARCHAR ( 50 );
+	DECLARE
+		MUSERTYPE INT;
+	
+	/*SET MUSERID := PBONUSID;
+	OUTER_LABEL :
+	WHILE
+			(
+			ISNULL( MBONUSID )) DO
+		SELECT
+			INTRODUCER_ID INTO MUSERID 
+		FROM
+			AR_BS_BONUS_103_CALC_NET T 
+		WHERE
+			T.USER_ID = MUSERID;
+		IF
+			( MUSERID = 0 ) THEN
+				
+				SET PNEWBONUSID := NULL;
+			LEAVE OUTER_LABEL;
+			
+		END IF;
+		SELECT
+			USER_TYPE INTO MUSERTYPE 
+		FROM
+			AR_BS_BONUS_103_CALC_NET T 
+		WHERE
+			T.USER_ID = MUSERID;
+		IF
+			( MUSERTYPE >= 30 ) THEN
+				
+				SET PNEWBONUSID := MUSERID;
+			LEAVE OUTER_LABEL;
+			
+		END IF;
+		
+	END WHILE;*/
+  SELECT INTRODUCER_ID30 INTO PNEWBONUSID FROM AR_BS_BONUS_103_CALC_NET WHERE USER_ID = PBONUSID;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCSTAT` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCSTAT`(IN PCPID int)
+BEGIN
+	INSERT INTO AR_CALC_BONUS_BS_STAT (
+		PERIOD_NUM,
+		TOTAL_PV,
+		BONUS10,
+		PERCENT10,
+		BONUS20,
+		PERCENT20,
+		BONUS30,
+		PERCENT30,
+		BONUS40,
+		PERCENT40,
+		BONUS50,
+		PERCENT50,
+		BONUS60,
+		PERCENT60,
+		BONUS70,
+		PERCENT70,
+		BONUS80,
+		PERCENT80,
+		BONUS90,
+		PERCENT90,
+		BONUS100,
+		PERCENT100,
+		BONUS110,
+		PERCENT110,
+		BONUS,
+		PERCENT,
+		CHECK_STATUS,
+        BONUS_MNT,
+        BONUS_MNT_PERCENT,
+        BONUS_ABBR,
+        BONUS_ABBR_PERCENT
+	) SELECT
+	PCPID,
+	SUM( PV ),
+	SUM( BONUS10 ),
+	0,
+	SUM( BONUS20 ),
+	0,
+	SUM( BONUS30 ),
+	0,
+	SUM( BONUS40 ),
+	0,
+	SUM( BONUS50 ),
+	0,
+	SUM( BONUS60 ),
+	0,
+	SUM( BONUS70 ),
+	0,
+	SUM( BONUS80 ),
+	0,
+	SUM( BONUS90 ),
+	0,
+	SUM( BONUS100 ),
+	0,
+	SUM( BONUS110 ),
+	0,
+	SUM( BONUS ),
+	0,
+	0,
+    SUM(BONUS_MNT),
+    0,
+	SUM(BONUS_ABBR),
+    0
+	FROM
+		AR_BS_BONUS_103_CALC;
+
+	UPDATE AR_CALC_BONUS_BS_STAT 
+        SET PERCENT10 = BONUS10 / TOTAL_PV,
+        PERCENT20 = BONUS20 / TOTAL_PV,
+        PERCENT30 = BONUS30 / TOTAL_PV,
+        PERCENT40 = BONUS40 / TOTAL_PV,
+        PERCENT50 = BONUS50 / TOTAL_PV,
+        PERCENT60 = BONUS60 / TOTAL_PV,
+        PERCENT70 = BONUS70 / TOTAL_PV,
+        PERCENT80 = BONUS80 / TOTAL_PV,
+        PERCENT90 = BONUS90 / TOTAL_PV,
+        PERCENT100 = BONUS100 / TOTAL_PV,
+        PERCENT110 = BONUS110 / TOTAL_PV,
+        PERCENT = BONUS / TOTAL_PV,
+        BONUS_MNT_PERCENT = BONUS_MNT / TOTAL_PV,
+        BONUS_ABBR_PERCENT = BONUS_ABBR / TOTAL_PV
+	WHERE
+		PERIOD_NUM = PCPID AND TOTAL_PV > 0;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCSUMMARY` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCSUMMARY`()
+BEGIN
+	UPDATE AR_BS_BONUS_103_CALC T 
+	    SET T.BONUS = BONUS10 + BONUS20 + BONUS30 + BONUS40 + BONUS50 + BONUS60 + BONUS70 + BONUS80 + BONUS90 + BONUS100 + BONUS110,
+	        T.BONUS_MNT = BONUS30 + BONUS40 + BONUS50 + BONUS60 + BONUS70 + BONUS80 + BONUS90 + BONUS100 + BONUS110,
+	        T.BONUS_ABBR = BONUS10 + BONUS20
+	WHERE
+		T.BONUS10 > 0 
+		OR T.BONUS20 > 0 
+		OR T.BONUS30 > 0 
+		OR T.BONUS40 > 0 
+		OR T.BONUS50 > 0 
+		OR T.BONUS60 > 0 
+		OR T.BONUS70 > 0 
+		OR T.BONUS80 > 0 
+		OR T.BONUS90 > 0 
+		OR T.BONUS100 > 0 
+		OR T.BONUS110 > 0;
+	UPDATE AR_BS_BONUS_103_CALC T 
+	SET GPV = 0 
+	WHERE
+		T.INTRODUCER_ID = '0' 
+		AND USER_TYPE = 0;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCTOTALGPV` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCTOTALGPV`()
+BEGIN
+	DECLARE
+		MLAYER,
+		MMINLAYER,
+		MUSERTYPE INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MMAXUSERID VARCHAR ( 50 );
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	SELECT
+		MAX( LAYER ) INTO MLAYER 
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		GPV > 0;
+	SELECT
+		MIN( LAYER ) INTO MMINLAYER 
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		USER_TYPE = 30;
+	UPDATE AR_BS_BONUS_103_CALC_NET T1
+	INNER JOIN AR_BS_BONUS_103_CALC_NET T2 ON IFNULL( T1.INTRODUCER_ID, '0' ) = T2.USER_ID 
+	AND T1.USER_TYPE = 30 
+	AND T2.USER_TYPE = 30 
+	SET T1.INTRODUCER_ID30 = T2.USER_ID;
+	WHILE
+			MLAYER > MMINLAYER DO
+			CALL CALCTOTALGPV_ ( MLAYER, MMINLAYER );
+		
+		SET MLAYER = MLAYER - 1;
+		
+	END WHILE;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCTOTALGPV_` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCTOTALGPV_`(IN `PLAYER` INT, -- 第几层
+	IN `PMINLAYER` INT)
+BEGIN
+	DECLARE
+		FLAG,
+		MLAYER,
+		MINTLAYER,
+		MUSERTYPE,
+		MINTTYPE INT DEFAULT 0;
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		MUSERID,
+		MUSERINTID,
+		MINTUSERID,
+		MINTRODUCERID VARCHAR ( 50 );
+	DECLARE
+		MC CURSOR FOR SELECT
+		C.USER_ID,
+		C.INTRODUCER_ID,
+		C.USER_TYPE,
+		C.GPV 
+	FROM
+		(
+		SELECT
+			USER_ID,
+			IFNULL( INTRODUCER_ID, '0' ) INTRODUCER_ID,
+			USER_TYPE,
+			GPV 
+		FROM
+			AR_BS_BONUS_103_CALC_NET 
+		WHERE
+			LAYER = PLAYER 
+			AND GPV > 0 
+			OR ( GPV = 0 AND USER_TYPE = 30 ) 
+		ORDER BY
+			USER_ID DESC 
+		) C;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;
+	START TRANSACTION;-- 打开游标
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MUSERID,
+			MUSERINTID,
+			MUSERTYPE,
+			MGPV;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;
+		SET MLAYER = PLAYER;
+		
+		SET MINTUSERID = MUSERINTID;
+		IF
+			( MINTUSERID != '0' ) THEN
+				OUTLABEL :
+			WHILE
+					MLAYER > PMINLAYER DO
+				SELECT
+					INTRODUCER_ID,
+					USER_TYPE,
+					LAYER INTO MINTRODUCERID,
+					MINTTYPE,
+					MLAYER 
+				FROM
+					AR_BS_BONUS_103_CALC_NET 
+				WHERE
+					USER_ID = MINTUSERID;
+				IF
+					( MINTUSERID != MUSERINTID AND MINTTYPE = 30 ) THEN
+						UPDATE AR_BS_BONUS_103_CALC_NET 
+						SET TEAM_GPV = TEAM_GPV + MGPV 
+					WHERE
+						USER_ID = MINTUSERID;
+					IF
+						( MUSERTYPE = 30 ) THEN
+							UPDATE AR_BS_BONUS_103_CALC_NET 
+							SET INTRODUCER_ID30 = MINTUSERID 
+						WHERE
+							USER_ID = MUSERID 
+							AND INTRODUCER_ID30 IS NULL;
+						
+					END IF;
+					LEAVE OUTLABEL;
+					
+				END IF;
+				
+				SET MINTUSERID = MINTRODUCERID;
+				
+			END WHILE;
+			
+		END IF;-- 关闭游标
+		
+	END LOOP;
+	CLOSE MC;
+	COMMIT;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCUP30` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCUP30`()
+BEGIN
+	START TRANSACTION;
+	UPDATE AR_BS_BONUS_103_CALC_NET T1 
+	SET T1.USER_TYPE = 30 
+	WHERE
+		USER_TYPE >= 10 
+		AND DIRECTLY_UNDER >= 3;
+	COMMIT;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CALCUPGARDE` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCUPGARDE`(IN `PLAYER` INT)
+BEGIN
+	DECLARE
+		MLAYER,
+		MCOUNT,
+		MCOUNT1,
+		MCOUNT2 INT;
+	
+	SET MLAYER := PLAYER;
+	SELECT
+		COUNT(*) INTO MCOUNT 
+	FROM
+		AR_BS_BONUS_103_CALC T 
+	WHERE
+		T.LAYER = MLAYER 
+		AND USER_TYPE10 = 10 
+		AND USER_TYPE = 0;
+	IF
+		( MCOUNT > 0 ) THEN
+			BREAKLABLE :
+		WHILE
+				MLAYER > 0 DO
+			SELECT
+				COUNT(*) INTO MCOUNT1 
+			FROM
+				AR_BS_BONUS_103_CALC T1 
+			WHERE
+				T1.USER_TYPE10 = 10 
+				AND T1.LAYER = MLAYER - 1;
+			UPDATE AR_BS_BONUS_103_CALC T1
+			INNER JOIN ( SELECT INTRODUCER_ID FROM AR_BS_BONUS_103_CALC WHERE LAYER = MLAYER AND USER_TYPE10 = 10 GROUP BY INTRODUCER_ID ) T2 ON T1.USER_ID = T2.INTRODUCER_ID 
+			AND T1.USER_TYPE10 = 0 
+			AND T1.LAYER = MLAYER - 1 
+			SET T1.USER_TYPE10 = 10,
+			T1.USER_TYPE = 10;
+			SELECT
+				COUNT(*) INTO MCOUNT2 
+			FROM
+				AR_BS_BONUS_103_CALC T1 
+			WHERE
+				T1.USER_TYPE10 = 10 
+				AND T1.LAYER = MLAYER - 1;
+			IF
+				( MCOUNT1 = MCOUNT2 ) THEN
+					LEAVE BREAKLABLE;
+				
+			END IF;
+			
+			SET MLAYER := MLAYER - 1;
+			
+		END WHILE;
+		
+	END IF;
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CLEANACTIVE` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CLEANACTIVE`(IN `UNUMBER` VARCHAR(32))
+BEGIN
+DECLARE t_error INTEGER DEFAULT 0;    
+DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
+
+START TRANSACTION;
+  -- 备份用户的余额 奖金 兑换积分 复消积分
+	INSERT INTO `AR_ACTIVED_ACCOUNT_BACK` ( `USER_ID`, `USER_NAME`, `USER_CASH`, `EXCHANGE_POINTS`, `EXCHANGE_POINTS_TOTAL`, `RECONSUME_POINTS`, `RECONSUME_POINTS_TOTAL`, `USER_BONUS`, `RECONSUME_POINTS_EXPIRED` ) SELECT
+`AR_USER_BONUS`.`USER_ID`,
+`AR_USER`.`USER_NAME`,
+`AR_USER_WALLET`.`CASH`,
+`AR_USER_BONUS`.`EXCHANGE_POINTS`,
+`AR_USER_BONUS`.`EXCHANGE_POINTS_TOTAL`,
+`AR_USER_BONUS`.`RECONSUME_POINTS`,
+`AR_USER_BONUS`.`RECONSUME_POINTS_TOTAL`,
+`AR_USER_BONUS`.`BONUS`,
+`AR_USER_BONUS`.`RECONSUME_POINTS_EXPIRED` 
+FROM
+	`AR_USER_BONUS`
+	INNER JOIN `AR_USER` ON `AR_USER`.`ID` = `AR_USER_BONUS`.`USER_ID`
+	LEFT JOIN `AR_USER_WALLET` ON `AR_USER_WALLET`.`USER_ID` = `AR_USER_BONUS`.`USER_ID` 
+WHERE
+	`AR_USER`.`USER_NAME` = `UNUMBER`;
+
+	-- 删除用户奖金
+	DELETE  `UB`  FROM  `AR_USER_BONUS` `UB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	
+	-- 清除用户的cash余额
+	UPDATE `AR_USER_WALLET` INNER JOIN `AR_USER` ON `AR_USER`.`ID`=`AR_USER_WALLET`.`USER_ID`      SET  `AR_USER_WALLET`.`CASH`=0 WHERE `AR_USER`.`USER_NAME` = `UNUMBER`; 
+	
+	
+	-- 删除用户累计业绩
+	DELETE  `UP`  FROM  `AR_USER_PERF` `UP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	
+	-- 删除用户总奖金发送记录
+	DELETE  `CB`  FROM  `AR_CALC_BONUS` `CB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	
+	-- 删除用户各个奖金发送记录
+	DELETE  `CBBD`  FROM  `AR_CALC_BONUS_BD` `CBBD` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBBD`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBBS`  FROM  `AR_CALC_BONUS_BS` `CBBS` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBBS`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBBT`  FROM  `AR_CALC_BONUS_BT` `CBBT` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBBT`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBCF`  FROM  `AR_CALC_BONUS_CF` `CBCF` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBCF`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBFL`  FROM  `AR_CALC_BONUS_FL` `CBFL` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBFL`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBFW`  FROM  `AR_CALC_BONUS_FW` `CBFW` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBFW`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBFX`  FROM  `AR_CALC_BONUS_FX` `CBFX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBFX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBGL`  FROM  `AR_CALC_BONUS_GL` `CBGL` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBGL`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBGX`  FROM  `AR_CALC_BONUS_GX` `CBGX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBGX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBLS`  FROM  `AR_CALC_BONUS_LS` `CBLS` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBLS`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBLX`  FROM  `AR_CALC_BONUS_LX` `CBLX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBLX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBQY`  FROM  `AR_CALC_BONUS_QY` `CBQY` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBQY`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBST`  FROM  `AR_CALC_BONUS_STANDARD` `CBST` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBST`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBTG`  FROM  `AR_CALC_BONUS_TG` `CBTG` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBTG`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBVIP`  FROM  `AR_CALC_BONUS_VIP` `CBVIP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBVIP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBXF`  FROM  `AR_CALC_BONUS_XF` `CBXF` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBXF`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBYC`  FROM  `AR_CALC_BONUS_YC` `CBYC` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBYC`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBYJ`  FROM  `AR_CALC_BONUS_YJ` `CBYJ` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBYJ`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CMBU`  FROM  `AR_CALC_MONTH_BONUS_USER` `CMBU` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CMBU`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FB`  FROM  `AR_FLOW_BONUS` `FB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FC`  FROM  `AR_FLOW_CF` `FC` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FC`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FDZ`  FROM  `AR_FLOW_DEDUCT_ZR` `FDZ` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FDZ`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FEP`  FROM  `AR_FLOW_EXCHANGE_POINTS` `FEP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FEP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FLX`  FROM  `AR_FLOW_LX` `FLX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FLX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FRP`  FROM  `AR_FLOW_RECONSUME_POINTS` `FRP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FRP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FW`  FROM  `AR_FLOW_WALLET` `FW` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FW`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `HB`  FROM  `AR_HISTORY_BONUS` `HB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`HB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `UPEP`  FROM  `AR_USER_PERIOD_EXCHANGE_POINTS` `UPEP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UPEP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `UPP`  FROM  `AR_USER_PERIOD_POINTS` `UPP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UPP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `AW`  FROM  `AR_WITHDRAW` `AW` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`AW`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `AT`  FROM  `AR_TRANSFER` `AT` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`AT`.`OUT_UID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `ABA`  FROM  `AR_BALANCE_AUDIT` `ABA` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`ABA`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `R`  FROM  `AR_RECHARGE` `R` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`R`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `ASM`  FROM  `AR_SCORE_MONTH` `ASM` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`ASM`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	IF t_error = 1 THEN    
+      ROLLBACK;    
+  ELSE
+	    COMMIT;
+	END IF;
+	select t_error;  -- 返回标识位的结果集
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `CONFOUNDING_DATA` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CONFOUNDING_DATA`()
+BEGIN
+	#Routine body goes here...
+	UPDATE AR_BALANCE_AUDIT SET CREATE_REMARK = '';
+	
+	UPDATE AR_CALC_BONUS SET LAST_REAL_NAME = CONCAT(LAST_USER_NAME,'REAL_NAME'),LAST_REC_REAL_NAME = CONCAT(LAST_REC_USER_NAME,'REAL_NAME'),LAST_CON_REAL_NAME = CONCAT(LAST_CON_USER_NAME,'REAL_NAME');
+
+	UPDATE AR_FLOW_BONUS SET REMARK ='';
+	
+	UPDATE AR_FLOW_WALLET SET REMARK ='';
+	
+	UPDATE AR_ORDER SET CONSIGNEE = CONCAT(USER_NAME,'CONSIGNEE_NAME'),MOBILE = '18888888888',ADDRESS = 'Virtual Address';
+	
+	UPDATE AR_ORDER_DEC SET MOBILE = '18888888888',CONSIGNEE = CONCAT(USER_NAME,'CONSIGNEE_NAME'),ADDRESS = 'Virtual Address';
+	
+	UPDATE AR_ORDER_SHOP SET MOBILE = '18888888888',CONSIGNEE = CONCAT(USER_NAME,'CONSIGNEE_NAME'),ADDRESS = 'Virtual Address';
+
+	UPDATE AR_RECEIVE_ADDRESS SET CONSIGNEE = CONCAT(USER_NAME,'CONSIGNEE_NAME'),MOBILE = '18888888888',ADDRESS = 'Virtual Address';
+
+	UPDATE AR_RECHARGE SET REAL_NAME = USER_ID;
+
+	UPDATE AR_TRANSFER SET LAST_OUT_REAL_NAME = CONCAT(LAST_OUT_USER_NAME,'REAL_NAME'),LAST_IN_REAL_NAME = CONCAT(LAST_IN_USER_NAME,'REAL_NAME'),REMARK = '';
+
+	UPDATE AR_USER SET REAL_NAME = CONCAT(USER_NAME,'REAL_NAME'),MOBILE = '18888888888',ADDRESS = 'Virtual Address';
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `QTRCALC` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `QTRCALC`(IN `PCPID` INT)
+LABEL: BEGIN
+-- DECLARE QTRSTARTPID, QTRSTARTMONTH, THISYEAR, THISMONTH, MISMONTH INT;
+
+DECLARE TBONUS,BONUSPERU DECIMAL; -- 奖金总额,每份奖金
+DECLARE QTRSTARTMONTH, THISYEAR, THISMONTH, MISMONTH INT; -- 这个月
+
+-- DECLARE OCROWN1NUM,OCROWN2NUM,OCROWN3NUM,OCROWN4NUM,OCROWN5NUM,OCROWN6NUM,OCROWN7NUM INT; -- 各星级的人数,原始不加权
+-- DECLARE  CROWN1U, CROWN2U, CROWN3U, CROWN4U, CROWN5U, CROWN6U, CROWN7U INT; -- 各星级的人数(加权)
+
+DECLARE TOTALU INT; -- 加权的总份数
+
+DECLARE MAXID, USERTBID INT;
+DECLARE Q, R INT;
+
+START TRANSACTION;
+-- 日志;
+DELETE FROM AR_QTR_CALC_RECORD ;
+CALL QTRCALCRECORD(-1,'开始',PCPID,NOW());
+COMMIT;
+
+CALL QTRCLEAN(PCPID);
+CALL QTRCALCRECORD(1,'清除数据',PCPID,NOW());
+COMMIT;
+
+SELECT
+ CALC_YEAR, CALC_MONTH, IS_MONTH INTO THISYEAR, THISMONTH, MISMONTH FROM AR_PERIOD WHERE PERIOD_NUM = PCPID;
+
+CALL QTRCALCRECORD(2,'初始化',PCPID,NOW());
+COMMIT;
+
+-- 查看是否季度结
+
+IF(THISMONTH!=3 AND THISMONTH!=6 AND THISMONTH!=9 AND THISMONTH!=12) OR MISMONTH!=1 THEN
+  CALL QTRCALCRECORD(12,'非季结,结束',PCPID,NOW());
+	COMMIT;
+  LEAVE LABEL;
+END IF;
+
+CALL QTRCALCRECORD(3,'计算总奖金',PCPID,NOW());
+COMMIT;
+
+-- 按照条件,查询当前季度所有月的总PV,计算总奖金
+SET QTRSTARTMONTH = THISMONTH - 2;
+
+SELECT 
+   SUM(PV_PCS) * 0.02 
+INTO TBONUS
+  FROM AR_PERF_MONTH 
+WHERE CALC_MONTH >= CONCAT(THISYEAR, lpad(QTRSTARTMONTH,2,0)) AND CALC_MONTH <= CONCAT(THISYEAR, lpad(THISMONTH,2,0));
+
+CALL QTRCALCRECORD(4,'计算总人数及加权',PCPID,NOW());
+COMMIT;
+
+
+-- 查找,所有星级用户
+INSERT INTO AR_QTR_CALC_WEIGHT
+	SELECT 
+		NULL AS ID,
+		QY.USER_ID,
+		MAX(CL.SORT) AS MAX_SORT,
+		(MAX(CL.SORT) - 1)/2 + 1 AS WEIGHT,
+		PERIOD_NUM,
+		CALC_MONTH,
+		CALC_YEAR
+	FROM
+		AR_CALC_BONUS_QY AS QY
+	 INNER JOIN 
+		AR_CROWN_LEVEL AS CL
+	 ON QY.LAST_CROWN_LV = CL.ID
+	 INNER JOIN 
+		AR_USER AS U
+	 ON QY.USER_ID = U.ID
+	 
+	WHERE
+		QY.LAST_CROWN_LV != (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 0)
+		AND U.DEC_LV = '67ABCE0ECE705575E055736AECE8644D'
+		AND QY.CALC_MONTH >= CONCAT(THISYEAR, lpad(QTRSTARTMONTH,2,0)) 
+		AND QY.CALC_MONTH <= CONCAT(THISYEAR, lpad(THISMONTH,2,0))
+
+	GROUP BY USER_ID, CALC_MONTH;
+
+COMMIT;
+
+INSERT INTO AR_QTR_CALC_SCORE
+	SELECT
+		NULL AS ID,
+		USER_ID, 
+		COUNT(*) AS CNT,
+		SUM(WEIGHT) AS SCORE,
+		CALC_MONTH,
+		CALC_YEAR
+	FROM 
+		AR_QTR_CALC_WEIGHT
+	GROUP BY USER_ID;
+
+COMMIT;
+	
+SELECT SUM(SCORE) INTO TOTALU FROM AR_QTR_CALC_SCORE;
+
+SET BONUSPERU = TBONUS / TOTALU;
+
+
+CALL QTRCALCRECORD(5,'计算每一份奖金',PCPID,NOW());
+COMMIT;
+
+INSERT INTO AR_QTR_CALC_USER
+	SELECT 
+		NULL AS ID,
+		SC.USER_ID,
+		BONUSPERU * SC.SCORE AS AMOUNT,
+		CALC_YEAR,
+		CALC_MONTH,
+		PCPID AS PERIOD_NUM
+	FROM
+		AR_QTR_CALC_SCORE AS SC;
+
+CALL QTRCALCRECORD(6,'写入user表',PCPID,NOW());
+
+COMMIT;
+
+INSERT INTO AR_CALC_BONUS_QUARTER
+	SELECT
+		NULL AS ID,
+		AU.USER_ID,
+		AU.AMOUNT AS ORI_BONUS,
+		0 AS MANAGE_TAX,
+		AU.AMOUNT,
+		0 AS RECONSUME_POINTS,
+		U.DEC_LV,
+		AU.CALC_MONTH, 
+		AU.PERIOD_NUM,
+		NOW() AS CREATE_AT
+	FROM
+		AR_QTR_CALC_USER AS AU
+	 LEFT JOIN
+	  AR_USER AS U
+	 ON AU.USER_ID = U.ID;
+
+CALL QTRCALCRECORD(20,'写入季度奖金表',PCPID,NOW());
+COMMIT;	
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `QTRCALCRECORD` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `QTRCALCRECORD`(IN `PID` INT, IN `PEVENT` VARCHAR ( 255 ), IN `PCPID` INT, IN `PNOW` DATETIME)
+BEGIN
+	INSERT INTO AR_QTR_CALC_RECORD ( ID, EVENT, CREATION_TIME, CALC_PERIOD_ID )
+	VALUES
+		( PID, PEVENT, NOW(), PCPID );
+
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `QTRCLEAN` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `QTRCLEAN`(IN `PCPID` INT)
+BEGIN-- 删除当期奖金
+	DELETE 
+	FROM
+		AR_CALC_BONUS_QUARTER
+	WHERE
+		PERIOD_NUM >= PCPID;
+  TRUNCATE
+		AR_QTR_CALC_USER;
+	TRUNCATE
+		AR_QTR_CALC_WEIGHT;
+	TRUNCATE
+		AR_QTR_CALC_SCORE;
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
+/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
+/*!50003 DROP PROCEDURE IF EXISTS `UPPERCASE` */;
+/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client  = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
+DELIMITER ;;
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `UPPERCASE`(IN DBNAME VARCHAR(200))
+BEGIN 
+  
+DECLARE DONE INT DEFAULT 0;  
+  
+DECLARE OLDNAME VARCHAR(200);  
+  
+DECLARE CUR CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DBNAME;  
+  
+DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = 1;  
+  
+OPEN CUR;  
+  
+REPEAT  
+  
+FETCH CUR INTO OLDNAME;  
+  
+SET @NEWNAME = UPPER(OLDNAME);  
+SET @ISNOTSAME = @NEWNAME <> BINARY OLDNAME;   
+IF NOT DONE && @ISNOTSAME THEN   
+SET @SQL = CONCAT('RENAME TABLE `',OLDNAME,'` TO `', LOWER(@NEWNAME), '_TMP` ');   
+PREPARE TMPSTMT FROM @SQL;   
+EXECUTE TMPSTMT;  
+
+SET @SQL = CONCAT('RENAME TABLE `',LOWER(@NEWNAME),'_TMP` TO `',@NEWNAME, '`');   
+PREPARE TMPSTMT FROM @SQL;   
+EXECUTE TMPSTMT; 
+  
+DEALLOCATE PREPARE TMPSTMT;  
+  
+END IF;   
+UNTIL DONE END REPEAT;   
+CLOSE CUR;   
+END ;;
+DELIMITER ;
+/*!50003 SET sql_mode              = @saved_sql_mode */ ;
+/*!50003 SET character_set_client  = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection  = @saved_col_connection */ ;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2022-09-30  6:50:45

+ 7 - 0
sql/upgrade/2047.sql

@@ -0,0 +1,7 @@
+-- 会员表增加EMP_LV属性字段
+ALTER TABLE `AR_USER` ADD COLUMN `LAST_EMP_LV` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '最新EMP级别';
+ALTER TABLE `AR_USER` ADD COLUMN `LAST_EMP_LV_UPDATED_AT` int(11) NOT NULL DEFAULT 0 COMMENT '最新EMP级别更新时间';
+ALTER TABLE `AR_USER` ADD COLUMN `LAST_EMP_LV_UPDATED_PERIOD` int(11) NOT NULL DEFAULT 0 COMMENT '最新EMP级别更新期数';
+
+-- 团队奖增加最高级别
+ALTER TABLE `AR_CALC_BONUS_QY` ADD COLUMN `CROWN_LV` varchar(32) NOT NULL DEFAULT '' COMMENT '最高EMP级别' AFTER `LAST_CROWN_LV`;