Преглед на файлове

Merge branch 'feature/2047-saveUserLevel' into dev

kevin_zhangl преди 3 години
родител
ревизия
290b53f541
променени са 62 файла, в които са добавени 3329 реда и са изтрити 211 реда
  1. 1 0
      backendApi/config/menu.php
  2. 2 1
      backendApi/config/urlManagerRules.php
  3. 141 97
      backendApi/modules/v1/controllers/BonusController.php
  4. 1 1
      backendApi/modules/v1/controllers/ShopController.php
  5. 12 2
      backendApi/modules/v1/models/lists/atlas/NetworkList.php
  6. 12 2
      backendApi/modules/v1/models/lists/atlas/RelationList.php
  7. 1 0
      backendApi/modules/v1/models/lists/log/AdminHandleList.php
  8. 0 0
      backendApi/modules/v1/models/lists/shop/FlowRemainPvList.php
  9. 9 2
      backendApi/modules/v1/models/lists/shop/OrderList.php
  10. 0 0
      backendApi/modules/v1/models/lists/shop/RemainPvList.php
  11. 36 8
      backendApi/modules/v1/models/lists/user/IndexList.php
  12. 12 0
      backendEle/src/router/index.js
  13. 0 0
      backendEle/src/views/article/detail.vue
  14. 202 0
      backendEle/src/views/bonus/perf-adjustment.vue
  15. 2 39
      backendEle/src/views/config/bonus-opt.vue
  16. 0 0
      backendEle/src/views/shop/flow-remain-pv.vue
  17. 0 0
      backendEle/src/views/shop/remain-pv.vue
  18. 13 13
      backendEle/src/views/user/ba-user-list.vue
  19. 0 20
      common/helpers/bonus/BonusCalc.php
  20. 1 17
      common/helpers/bonus/PerfCalc.php
  21. 0 0
      common/models/ApproachDecOrder.php
  22. 0 0
      common/models/ApproachOrderCall.php
  23. 0 0
      common/models/CalcBonusQuarter.php
  24. 0 0
      common/models/CalcBonusVilla.php
  25. 0 0
      common/models/FlowRemainPv.php
  26. 0 0
      common/models/FlowVillaPoints.php
  27. 0 0
      common/models/RemainPv.php
  28. 10 0
      common/models/UserInfo.php
  29. 16 0
      common/models/UserPerf.php
  30. 6 3
      common/models/Withdraw.php
  31. 0 0
      common/models/forms/ApproachDeclarationForm.php
  32. 0 0
      common/models/forms/ApproachDeclarationLoopForm.php
  33. 0 0
      common/models/forms/ApproachDeclarationUpgradeForm.php
  34. 126 0
      common/models/forms/PerfAdjustmentForm.php
  35. 0 0
      common/models/forms/UserBonusForm.php
  36. 3 1
      frontendApi/modules/v1/controllers/BonusController.php
  37. 1 1
      frontendApi/modules/v1/controllers/UserController.php
  38. 0 0
      frontendEle/src/static/img/ngds-logo.jpg
  39. 0 0
      frontendEle/src/utils/config_trial.js
  40. 0 0
      frontendEle/src/views/atlas/relation.vue
  41. 0 0
      frontendEle/src/views/bonus/historical-cumulative-bonus.vue
  42. 6 3
      frontendEle/src/views/bonus/other.vue
  43. 1 1
      frontendEle/src/views/shop/order-list.vue
  44. 2715 0
      sql/StoredProcedure-NG.sql
  45. 0 0
      sql/coco_milk_0524_fc.sql
  46. 0 0
      sql/upgrade/1350.sql
  47. 0 0
      sql/upgrade/1462.sql
  48. 0 0
      sql/upgrade/1540.sql
  49. 0 0
      sql/upgrade/1684.sql
  50. 0 0
      sql/upgrade/1729.sql
  51. 0 0
      sql/upgrade/1736.sql
  52. 0 0
      sql/upgrade/1741.sql
  53. 0 0
      sql/upgrade/1748.sql
  54. 0 0
      sql/upgrade/1770.sql
  55. 0 0
      sql/upgrade/1988.sql
  56. 0 0
      sql/upgrade/2022_08_05_1866.sql
  57. 0 0
      sql/upgrade/2022_08_12_crown.sql
  58. 0 0
      sql/upgrade/2022_09_05_1969.sql
  59. 0 0
      sql/upgrade/QTRCALC.sql
  60. 0 0
      sql/upgrade/QTRCLEAN.sql
  61. 0 0
      sql/upgrade/qtr.sql
  62. 0 0
      sql/upgrade/star_to_crown.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',
         ],
     ],
     [

+ 141 - 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();
@@ -988,7 +992,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 +1044,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 +1075,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 +1095,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 +1119,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 +1144,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 +1169,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 +1194,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 +1220,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 +1245,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 +1270,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 +1295,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 +1320,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 +1345,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 +1370,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 +1395,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 +1420,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 +1445,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 +1470,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 +1495,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 +1521,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 +1546,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 +1571,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 +1596,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 +1621,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 +1646,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 +1671,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 +1696,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 +1721,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 +1746,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 +1771,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 +1796,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 +1822,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 +1847,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 +1872,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 +1897,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 +1921,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 +1949,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 +1991,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 +2034,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 +2061,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 +2086,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 +2112,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 +2131,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 +2149,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 +2179,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 +2206,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 +2240,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 +2276,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 +2305,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 +2336,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 +2365,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 +2396,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 +2426,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 +2470,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 +2491,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 +2514,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 +2536,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 +2560,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 +2581,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 +2605,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 +2627,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 +2651,7 @@ class BonusController extends BaseController {
     /**
      * 会员实时业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionRealTimePerf() {
         $userName = Yii::$app->request->get('userName');
@@ -2676,7 +2680,7 @@ class BonusController extends BaseController {
     /**
      * 荣衔业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionYcPerf() {
         $userName = Yii::$app->request->get('userName');
@@ -2738,7 +2742,7 @@ class BonusController extends BaseController {
     /**
      * 用户业绩
      * @return mixed
-     * @throws \yii\web\HttpException
+     * @throws HttpException
      */
     public function actionUserPerf() {
         $filter = $this->filterCondition([
@@ -2756,7 +2760,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 +2795,44 @@ 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));
+
+            $perfList = [];
+            // 查询传入会员的安置网下级
+            $memberList = UserNetwork::getFirstFloorChildren($userId);
+            if ($memberList) {
+                foreach ($memberList as $member) {
+                    // 查询会员的业绩
+                    $perfMarket = UserPerf::getPerfMarket($member['USER_ID']);
+                    // 查询会员名
+                    $perfMarket['USER_NAME'] = Info::getUserNameByUserId($member['USER_ID']);
+                    $perfList[] = $perfMarket;
+                }
+            }
+
+            return static::notice(['allData' => $perfList]);
+        } 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); // 非法请求
+        }
+    }
 }

+ 1 - 1
backendApi/modules/v1/controllers/ShopController.php

@@ -415,7 +415,7 @@ class ShopController extends BaseController {
             'STATUS' => 'O.STATUS',
             'IS_AUTO' => 'O.IS_AUTO'
         ]);
-        $filter['condition'] = !$filter['condition'] ? '1=1 AND O.IS_DELETE=0' : ('O.IS_DELETE=0 ' . $filter['condition']);
+        $filter['condition'] = !$filter['condition'] ? ' AND O.IS_DELETE=0' : ('O.IS_DELETE=0 ' . $filter['condition']);
         $form = new ShopExportForm();
         $result = $form->run($filter, 'Order_List'); // 订单列表
         if (!$result) {

+ 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' => 'The Highest Director Rank', // 推荐会员聘级
+                    'headerOther' => [
+                        'width' => '210',
+                    ],
+                ],
+                'CROWN_LV_NAME' => [
+                    'header' => 'The Highest Crown Rank', // 推荐会员聘级
                     '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' => 'The Highest Director Rank', // 推荐会员聘级
+                    'headerOther' => [
+                        'width' => '210',
+                    ],
+                ],
+                'CROWN_LV_NAME' => [
+                    'header' => 'The Highest Crown Rank', // 推荐会员聘级
                     'headerOther' => [
                         'width' => '210',
                     ],

+ 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],

+ 0 - 0
backendApi/modules/v1/models/lists/shop/FlowRemainPvList.php


+ 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'=> [

+ 0 - 0
backendApi/modules/v1/models/lists/shop/RemainPvList.php


+ 36 - 8
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' => 'The Highest Director Rank', // 最高管理星
                     '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' => 'The Newest Director Rank', // 最新管理星级
+                    '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' => 'The Highest Crown Rank', // 最高皇冠星级
+                    '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' => 'The Newest Crown Rank', // 最新皇冠星级
                     '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']
@@ -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'=> 'The Highest Director Rank', 'other'=> 'empLevel'], // 最高管理星级
+                'LAST_EMP_LV_NAME'=> ['name'=> 'The Newest Director Rank', 'other'=> 'empLevel'], // 最新管理星级
+                'CROWN_LV_NAME'=> ['name'=> 'The Highest Crown Rank', 'other'=> 'crownLevel'], // 最高皇冠星级
+                'LAST_CROWN_LV_NAME'=> ['name'=> 'The Newest Crown Rank', 'other'=> 'crownLevel'], // 最新皇冠星级
 //                'HIGHEST_EMP_LV_NAME'=> ['name'=> '历史最高聘级', 'other'=> 'empLevel'],
 //                'HIGHEST_EMP_LV_PERIOD'=> ['name'=> '首次达到历史最高聘级的期数'],
                 'REC_USER_NAME'=> ['name'=> 'Recommendation No'],//推荐编号

+ 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'),

+ 0 - 0
backendEle/src/views/article/detail.vue


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

@@ -0,0 +1,202 @@
+<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: 45px;">
+        <el-row>
+          <el-col :span="11">
+            <div class="grid-content bg-purple" v-show="leftPerfFormShow" style="width: 100%">
+              <el-card class="box-card" shadow="hover">
+                <el-form :model="leftPerfForm" status-icon ref="leftPerfForm" label-width="120px" width="100%" class="demo-ruleForm">
+                  <el-form-item label="Member Code" prop="USER_NAME">
+                    <el-input type="text" size="small" v-model="leftPerfForm.USER_ID" v-show="false" width="100%"></el-input>
+                    <el-input type="text" size="small" v-model="leftPerfForm.USER_NAME" readonly disabled></el-input>
+                  </el-form-item>
+
+                  <el-divider content-position="left">L. Market Balance Performance</el-divider>
+                  <el-form-item label="Balance" prop="SURPLUS_1L"><!--综合结余业绩-->
+                    <el-input type="text" size="small" v-model="leftPerfForm.SURPLUS_1L" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Entry" prop="SURPLUS_1L_ZC"><!--首单结余业绩-->
+                    <el-input type="text" size="small" v-model="leftPerfForm.SURPLUS_1L_ZC" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Reconditioning" prop="SURPLUS_1L_FX"><!--复消结余业绩-->
+                    <el-input type="text" size="small" v-model="leftPerfForm.SURPLUS_1L_FX" autocomplete="off"></el-input>
+                  </el-form-item>
+
+                  <el-divider content-position="left">R. Market Balance Performance</el-divider>
+                  <el-form-item label="Balance" prop="SURPLUS_2L"><!--综合结余业绩-->
+                    <el-input type="text" size="small" v-model="leftPerfForm.SURPLUS_2L" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Entry Balance" prop="SURPLUS_2L_ZC">
+                    <el-input type="text" size="small" v-model="leftPerfForm.SURPLUS_2L_ZC" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Reconditioning" prop="SURPLUS_2L_FX"><!--复消结余业绩-->
+                    <el-input type="text" size="small" v-model="leftPerfForm.SURPLUS_2L_FX" autocomplete="off"></el-input>
+                  </el-form-item>
+
+                  <el-form-item>
+                    <el-button type="primary" size="small" @click="handlePerfAdjustment('leftPerfForm')">Save</el-button>
+                  </el-form-item>
+                </el-form>
+              </el-card>
+            </div>
+          </el-col>
+
+          <el-col :span="2" v-show="rightPerfFormShow">
+            <div class="grid-content bg-purple" v-show="rightPerfFormShow" style="width: 100%; height: 100px;"></div>
+          </el-col>
+
+          <el-col :span="11">
+            <div class="grid-content bg-purple" v-show="rightPerfFormShow" style="width: 100%; ">
+              <el-card class="box-card" shadow="hover">
+                <el-form :model="rightPerfForm" status-icon ref="rightPerfForm" label-width="120px" width="100%" class="demo-ruleForm">
+                  <el-form-item label="Member Code" prop="USER_NAME">
+                    <el-input type="text" size="small" v-model="rightPerfForm.USER_ID" v-show="false"></el-input>
+                    <el-input type="text" size="small" v-model="rightPerfForm.USER_NAME" readonly disabled></el-input>
+                  </el-form-item>
+
+                  <el-divider content-position="left" >L. Market Balance Performance</el-divider>
+                  <el-form-item label="Balance" prop="SURPLUS_1L"><!--综合结余业绩-->
+                    <el-input type="text" size="small" v-model="rightPerfForm.SURPLUS_1L" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Entry" prop="SURPLUS_1L_ZC"><!--首单结余业绩-->
+                    <el-input type="text" size="small" v-model="rightPerfForm.SURPLUS_1L_ZC" autocomplete="off" ></el-input>
+                  </el-form-item>
+                  <el-form-item label="Reconditioning" prop="SURPLUS_1L_FX"><!--复消结余业绩-->
+                    <el-input type="text" size="small" v-model="rightPerfForm.SURPLUS_1L_FX" autocomplete="off"></el-input>
+                  </el-form-item>
+
+                  <el-divider content-position="left">R. Market Balance Performance</el-divider>
+                  <el-form-item label="Balance" prop="SURPLUS_2L"><!--综合结余业绩-->
+                    <el-input type="text" size="small" v-model="rightPerfForm.SURPLUS_2L" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Entry" prop="SURPLUS_2L_ZC"><!--首单结余业绩-->
+                    <el-input type="text" size="small" v-model="rightPerfForm.SURPLUS_2L_ZC" autocomplete="off"></el-input>
+                  </el-form-item>
+                  <el-form-item label="Reconditioning" prop="SURPLUS_2L_FX"><!--复消结余业绩-->
+                    <el-input type="text" size="small" v-model="rightPerfForm.SURPLUS_2L_FX" autocomplete="off"></el-input>
+                  </el-form-item>
+
+                  <el-form-item>
+                    <el-button type="primary" size="small" @click="handlePerfAdjustment('rightPerfForm')">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: '',
+      tableList: [],
+      leftPerfFormShow: false,
+      rightPerfFormShow: false,
+      leftPerfForm: {
+        USER_ID: '',
+        USER_NAME: '',
+        SURPLUS_1L: '',
+        SURPLUS_1L_ZC: '',
+        SURPLUS_1L_FX: '',
+        SURPLUS_2L: '',
+        SURPLUS_2L_ZC: '',
+        SURPLUS_2L_FX: '',
+      },
+      rightPerfForm: {
+        USER_ID: '',
+        USER_NAME: '',
+        SURPLUS_1L: '',
+        SURPLUS_1L_ZC: '',
+        SURPLUS_1L_FX: '',
+        SURPLUS_2L: '',
+        SURPLUS_2L_ZC: '',
+        SURPLUS_2L_FX: '',
+      },
+    }
+  },
+  methods: {
+    // 查询安置网的下级会员和业绩
+    getData() {
+      if (!this.memberCode.length) {
+        this.$message({
+          message: 'Please enter member code',
+          type: 'info'
+        });
+        return false;
+      }
+
+      return network.getData(`bonus/perf-adjustment`, { memberCode : this.memberCode }).then(response => {
+        this.tableList = response.allData;
+
+        this.leftPerfFormShow = this.tableList.length >= 1;
+        this.rightPerfFormShow = this.tableList.length === 2;
+
+        if (this.leftPerfFormShow) {
+          this.leftPerfForm = this.tableList[0];
+        }
+        if (this.rightPerfFormShow) {
+          this.rightPerfForm = this.tableList[1];
+        }
+
+        this.loading = false;
+      }).catch(error => {
+        this.$message({
+          message: error,
+          type: 'error'
+        });
+
+        this.loading = false;
+      })
+    },
+    // 修改会员业绩
+    handlePerfAdjustment(formName) {
+      this.$confirm('Confirm and revise member performance?', 'Hits', { // 确认修改会员业绩
+        confirmButtonText: 'Confirm',
+        cancelButtonText: 'Cancel',
+        type: 'warning'
+      }).then(() => {
+        this.loading = true;
+        const formData = formName === 'leftPerfForm' ? this.leftPerfForm : this.rightPerfForm;
+        return network.postData(`bonus/perf-adjustment`, formData).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">

+ 0 - 0
backendEle/src/views/shop/flow-remain-pv.vue


+ 0 - 0
backendEle/src/views/shop/remain-pv.vue


+ 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>

+ 0 - 20
common/helpers/bonus/BonusCalc.php

@@ -532,11 +532,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 +615,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'],
-                        ],
                     ]),
                 ];
 
@@ -1638,11 +1628,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 +2455,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'],
-                            ],
                         ]),
                     ];
 

+ 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'],

+ 0 - 0
common/models/ApproachDecOrder.php


+ 0 - 0
common/models/ApproachOrderCall.php


+ 0 - 0
common/models/CalcBonusQuarter.php


+ 0 - 0
common/models/CalcBonusVilla.php


+ 0 - 0
common/models/FlowRemainPv.php


+ 0 - 0
common/models/FlowVillaPoints.php


+ 0 - 0
common/models/RemainPv.php


+ 10 - 0
common/models/UserInfo.php

@@ -248,4 +248,14 @@ 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');
+    }
 }

+ 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];
     }
 
     /**

+ 0 - 0
common/models/forms/ApproachDeclarationForm.php


+ 0 - 0
common/models/forms/ApproachDeclarationLoopForm.php


+ 0 - 0
common/models/forms/ApproachDeclarationUpgradeForm.php


+ 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;
+    }
+
+}

+ 0 - 0
common/models/forms/UserBonusForm.php


+ 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
frontendApi/modules/v1/controllers/UserController.php

@@ -674,7 +674,7 @@ class UserController extends BaseController {
         }
 
         // 只查询普通商品
-        $allGoods = ShopGoods::find()->where("ID='399659569762144384'")->orderBy('SORT ASC')->asArray()->all();
+        $allGoods = ShopGoods::find()->where("ID='375895243322691584'")->orderBy('SORT ASC')->asArray()->all();
         if (!$userName) {
             return static::notice('Failed to generate member number', 400); // 会员编号生成失败
         }

+ 0 - 0
frontendEle/src/static/img/ngds-logo.jpg


+ 0 - 0
frontendEle/src/utils/config_trial.js


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


+ 0 - 0
frontendEle/src/views/bonus/historical-cumulative-bonus.vue


+ 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="The newest director bonus">{{newData.LAST_EMP_LV.value}}</el-descriptions-item><!-- 会员管理星级 -->
+          <el-descriptions-item class="bonus-item" label="The newest crown bonus">{{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/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

+ 0 - 0
sql/coco_milk_0524_fc.sql


+ 0 - 0
sql/upgrade/1350.sql


+ 0 - 0
sql/upgrade/1462.sql


+ 0 - 0
sql/upgrade/1540.sql


+ 0 - 0
sql/upgrade/1684.sql


+ 0 - 0
sql/upgrade/1729.sql


+ 0 - 0
sql/upgrade/1736.sql


+ 0 - 0
sql/upgrade/1741.sql


+ 0 - 0
sql/upgrade/1748.sql


+ 0 - 0
sql/upgrade/1770.sql


+ 0 - 0
sql/upgrade/1988.sql


+ 0 - 0
sql/upgrade/2022_08_05_1866.sql


+ 0 - 0
sql/upgrade/2022_08_12_crown.sql


+ 0 - 0
sql/upgrade/2022_09_05_1969.sql


+ 0 - 0
sql/upgrade/QTRCALC.sql


+ 0 - 0
sql/upgrade/QTRCLEAN.sql


+ 0 - 0
sql/upgrade/qtr.sql


+ 0 - 0
sql/upgrade/star_to_crown.sql