Преглед изворни кода

Merge branch 'master' of http://18.167.157.193:1026/guanli/ngds into feature/1540-theo-auto-mesure-up

theo пре 3 година
родитељ
комит
8697c19141
63 измењених фајлова са 906 додато и 498 уклоњено
  1. 1 0
      backendApi/config/menu.php
  2. 1 1
      backendApi/config/params.php
  3. 2 0
      backendApi/config/urlManagerRules.php
  4. 49 3
      backendApi/modules/v1/controllers/ArticleController.php
  5. 2 2
      backendApi/modules/v1/controllers/AtlasController.php
  6. 3 3
      backendApi/modules/v1/controllers/ConfigController.php
  7. 2 2
      backendApi/modules/v1/models/lists/bonus/PeriodBonusList.php
  8. 5 5
      backendApi/modules/v1/models/lists/user/IndexList.php
  9. 2 2
      backendApi/modules/v1/models/lists/user/MoveList.php
  10. 51 2
      backendEle/src/utils/editor.js
  11. 2 9
      backendEle/src/utils/tool.js
  12. 1 6
      backendEle/src/views/ad/list.vue
  13. 21 21
      backendEle/src/views/article/category.vue
  14. 4 0
      backendEle/src/views/article/detail.vue
  15. 5 0
      backendEle/src/views/article/edit.vue
  16. 24 1
      backendEle/src/views/article/index.vue
  17. 2 2
      backendEle/src/views/atlas/network-opt.vue
  18. 2 2
      backendEle/src/views/atlas/relation-opt.vue
  19. 4 4
      backendEle/src/views/config/bonus-opt.vue
  20. 189 185
      backendEle/src/views/shop/goods-add.vue
  21. 1 1
      common/helpers/Cache.php
  22. 1 1
      common/helpers/LoggerTool.php
  23. 12 5
      common/helpers/Tool.php
  24. 23 23
      common/helpers/bonus/BonusCalc.php
  25. 4 4
      common/helpers/bonus/BonusSend.php
  26. 13 13
      common/helpers/bonus/CalcCache.php
  27. 3 3
      common/helpers/user/Balance.php
  28. 1 1
      common/helpers/user/Info.php
  29. 1 1
      common/libs/logging/operate/valueType/Config.php
  30. 11 3
      common/models/ApproachOrderCall.php
  31. 8 6
      common/models/Article.php
  32. 3 3
      common/models/CalcBonus.php
  33. 3 3
      common/models/CalcBonusGarage.php
  34. 3 3
      common/models/CalcBonusQY.php
  35. 3 3
      common/models/CalcBonusTourism.php
  36. 3 3
      common/models/CalcBonusVilla.php
  37. 1 1
      common/models/FlowGaragePoints.php
  38. 1 1
      common/models/FlowTourismPoints.php
  39. 1 1
      common/models/FlowVillaPoints.php
  40. 13 13
      common/models/StarCrownLevel.php
  41. 6 6
      common/models/StarCrownLevelForm.php
  42. 8 8
      common/models/User.php
  43. 2 2
      common/models/UserNetwork.php
  44. 2 2
      common/models/UserRelation.php
  45. 29 6
      common/models/forms/ArticleForm.php
  46. 14 14
      common/models/forms/OrderForm.php
  47. 7 3
      common/models/forms/ShopGoodsForm.php
  48. 10 6
      common/models/forms/UploadForm.php
  49. 1 1
      frontendApi/modules/v1/controllers/ArticleController.php
  50. 2 2
      frontendApi/modules/v1/controllers/AtlasController.php
  51. 6 4
      frontendApi/modules/v1/controllers/ShopController.php
  52. 1 1
      frontendEle/src/components/Uploader.vue
  53. 5 5
      frontendEle/src/views/article/list.vue
  54. 16 14
      frontendEle/src/views/atlas/network.vue
  55. 2 2
      frontendEle/src/views/config/receive-address-list.vue
  56. 1 1
      frontendEle/src/views/finance/recharge-add.vue
  57. 45 45
      frontendEle/src/views/login/index.vue
  58. 8 16
      frontendEle/src/views/shop/index.vue
  59. 15 16
      frontendEle/src/views/shop/order-list.vue
  60. 2 2
      frontendEle/src/views/shop/order.vue
  61. 1 0
      sql/upgrade/2022_08_05_1866.sql
  62. 225 0
      sql/upgrade/qtr.sql
  63. 17 0
      sql/upgrade/star_to_crown.sql

+ 1 - 0
backendApi/config/menu.php

@@ -367,6 +367,7 @@ return [
             ['name'=>'Article Management', 'class'=>'', 'icon'=>'', 'controller'=>'article', 'action'=>'index', 'routePath'=>'article/index', 'show'=>1,],//文章列表
             ['name'=>'添加文章', 'class'=>'', 'icon'=>'', 'controller'=>'article', 'action'=>'add', 'routePath'=>'article/add', 'show'=>0,],
             ['name'=>'编辑文章', 'class'=>'', 'icon'=>'', 'controller'=>'article', 'action'=>'edit', 'routePath'=>'article/edit', 'show'=>0,],
+            ['name'=>'文章排序', 'class'=>'', 'icon'=>'', 'controller'=>'article', 'action'=>'edit', 'routePath'=>'article/sort', 'show'=>0,],
             ['name'=>'删除文章', 'class'=>'', 'icon'=>'', 'controller'=>'article', 'action'=>'article-delete', 'routePath'=>'article/article-delete', 'show'=>0,],
 
         ]

+ 1 - 1
backendApi/config/params.php

@@ -2,5 +2,5 @@
 return [
     'adminEmail' => 'admin@example.com',
     'noCheckTokenActions' => ['v1/oauth/login', 'v1/oauth/no-login-modify-password', 'v1/oauth/refresh-access-token', 'v1/oauth/refresh-refresh-token', 'v1/oauth/refresh-token', 'v1/site/days-diff', 'v1/site/page-data', 'v1/site/captcha'],
-    'noCheckPermissionActions' => ['oauth/login', 'oauth/no-login-modify-password', 'oauth/refresh-access-token', 'oauth/refresh-refresh-token', 'oauth/refresh-token', 'oauth/info', 'site/base-info', 'site/days-diff', 'site/page-data', 'site/captcha', 'user/full-info', 'user/filter-user', 'user/generate-user-name', 'reconsume/cant-deduct-date', 'user/get-sub-com', 'user/chk-relation', 'user/get-period-num', 'user/company-bank-get', 'user/main-divide', 'user/chk-del-user', 'reconsume/deduct-audit-add', 'finance/perf-apply-get','file/upload-excel', 'user/move-net-type', 'user/move-get', 'user/reg-info-audit-get', 'user/status-audit-get', 'user/status-audit-get-statuses', 'user/close-login-get', 'user/close-dec-get', 'atlas/main-user-info', 'reconsume/change-audit-get', 'reconsume/cant-deduct-month', 'finance/change-balance-type', 'finance/balance-audit-get', 'file/token', 'finance/perf-audit-get', 'finance/invoice-audit-get', 'finance/withdraw-get', 'finance/deal-type-get', 'ad/upload', 'config/reg-type-get', 'config/pact-get', 'user/reg-info-audit-add-opt', 'reconsume/get-flow-deal-type', 'user/status-close-get', 'finance/mult-point', 'shop/upload'],
+    'noCheckPermissionActions' => ['oauth/login', 'oauth/no-login-modify-password', 'oauth/refresh-access-token', 'oauth/refresh-refresh-token', 'oauth/refresh-token', 'oauth/info', 'site/base-info', 'site/days-diff', 'site/page-data', 'site/captcha', 'user/full-info', 'user/filter-user', 'user/generate-user-name', 'reconsume/cant-deduct-date', 'user/get-sub-com', 'user/chk-relation', 'user/get-period-num', 'user/company-bank-get', 'user/main-divide', 'user/chk-del-user', 'reconsume/deduct-audit-add', 'finance/perf-apply-get','file/upload-excel', 'user/move-net-type', 'user/move-get', 'user/reg-info-audit-get', 'user/status-audit-get', 'user/status-audit-get-statuses', 'user/close-login-get', 'user/close-dec-get', 'atlas/main-user-info', 'reconsume/change-audit-get', 'reconsume/cant-deduct-month', 'finance/change-balance-type', 'finance/balance-audit-get', 'file/token', 'finance/perf-audit-get', 'finance/invoice-audit-get', 'finance/withdraw-get', 'finance/deal-type-get', 'ad/upload', 'config/reg-type-get', 'config/pact-get', 'user/reg-info-audit-add-opt', 'reconsume/get-flow-deal-type', 'user/status-close-get', 'finance/mult-point', 'shop/upload', 'article/upload'],
 ];

+ 2 - 0
backendApi/config/urlManagerRules.php

@@ -503,6 +503,8 @@ return [
             'POST category-add' => 'category-add',
             'GET,POST category-delete' => 'category-delete',
             'GET category-sort' => 'category-sort',
+            'POST upload' => 'upload',
+            'GET sort' => 'sort',
         ],
     ],
     [

+ 49 - 3
backendApi/modules/v1/controllers/ArticleController.php

@@ -7,11 +7,15 @@
  */
 namespace backendApi\modules\v1\controllers;
 
+use common\helpers\Cache;
+use common\helpers\Form;
 use common\models\Article;
 use common\models\ArticleCategory;
 use common\models\forms\ArticleCategoryForm;
 use common\models\forms\ArticleForm;
+use common\models\forms\UploadForm;
 use Yii;
+use yii\web\UploadedFile;
 
 class ArticleController extends BaseController
 {
@@ -80,8 +84,8 @@ class ArticleController extends BaseController
      */
     public function actionIndex(){
         $data = Article::lists('', [], [
-            'select' => 'ID,TITLE,CID,STATUS,CREATED_AT',
-            'orderBy' => 'CREATED_AT',
+            'select' => 'ID,TITLE,CID,STATUS,SORT,CREATED_AT',
+            'orderBy' => 'SORT ASC,CREATED_AT DESC',
         ]);
         // 全部分类
         $data['allCategory'] = ArticleCategory::getAllCategory();
@@ -148,7 +152,7 @@ class ArticleController extends BaseController
         $id = \Yii::$app->request->get('id');
         $data = null;
         if($id){
-            $data = Article::findOneAsArray('ID=:ID AND STATUS=1', [':ID'=>$id], 'ID,TITLE,CID,CREATED_AT');
+            $data = Article::findOneAsArray('ID=:ID AND STATUS=1', [':ID'=>$id], 'ID,TITLE,CID,SORT,CREATED_AT');
         }
         if($data){
             // 暂时先从文件中取内容
@@ -163,4 +167,46 @@ class ArticleController extends BaseController
             return static::notice('Article not exists!', 400); // 文章不存在
         }
     }
+
+    /**
+     * 上传图片
+     * @return mixed
+     * @throws \yii\base\Exception
+     * @throws \yii\db\Exception
+     * @throws \yii\web\HttpException
+     */
+    public function actionUpload() {
+        if (\Yii::$app->request->isPost) {
+            $formModel = new UploadForm();
+            $formModel->scenario = 'article';
+            $formModel->file = UploadedFile::getInstanceByName('file');
+            $formModel->token = \Yii::$app->request->request('uploadToken');;
+            if($formModel->file && $uploader = $formModel->upload()){
+                return static::notice($uploader->URL);
+            } else {
+                return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
+            }
+        } else {
+            $token = Cache::setUploadToken();
+            return static::notice($token);
+        }
+    }
+
+    /**
+     * 排序
+     * @return mixed
+     * @throws \yii\web\HttpException
+     */
+    public function actionSort()
+    {
+        if (Yii::$app->request->get('id')) {
+            $formModel = new ArticleForm();
+            $formModel->scenario = 'sort';
+            if ($formModel->load(Yii::$app->request->get(), '') && $formModel->sortTo()) {
+                return static::notice('Success');
+            } else {
+                return static::notice('Fail', 400);
+            }
+        }
+    }
 }

+ 2 - 2
backendApi/modules/v1/controllers/AtlasController.php

@@ -81,7 +81,7 @@ class AtlasController extends BaseController {
 //        print_r($baseInfo);exit;
         $decLevelConfig = Cache::getDecLevelConfig();
         $empLevelConfig = Cache::getEmpLevelConfig();
-        $starLevelConfig = Cache::getStarCrownLevelConfig();
+        $crownLevelConfig = Cache::getStarCrownLevelConfig();
         return static::notice([
             [
                 'TOP_RELATION_DEEP' => $baseInfo['RELATION_DEEP'],
@@ -92,7 +92,7 @@ class AtlasController extends BaseController {
                 'PERIOD_AT' => $baseInfo['PERIOD_AT'],
                 'DEC_LV_NAME' => $decLevelConfig[$baseInfo['DEC_LV']]['LEVEL_NAME'],
                 'EMP_LV_NAME' => isset($empLevelConfig[$baseInfo['EMP_LV']])?$empLevelConfig[$baseInfo['EMP_LV']]['LEVEL_NAME']:'',
-                'STAR_LV_NAME' => isset($starLevelConfig[$baseInfo['STAR_LV']])?$starLevelConfig[$baseInfo['STAR_LV']]['LEVEL_NAME']:'',
+                'CROWN_LV_NAME' => isset($crownLevelConfig[$baseInfo['CROWN_LV']])?$crownLevelConfig[$baseInfo['CROWN_LV']]['LEVEL_NAME']:'',
                 'leaf' => false,
                 'icon' => 'el-icon-user-solid',
                 'children' => null,

+ 3 - 3
backendApi/modules/v1/controllers/ConfigController.php

@@ -119,12 +119,12 @@ class ConfigController extends BaseController {
         // 获取会员聘级相关参数
         $empLevel = EmployLevel::getAllDataWithNumIndex();
         // 获取会员星级相关参数
-        $starLevel = StarCrownLevel::getAllDataWithNumIndex();
+        $crownLevel = StarCrownLevel::getAllDataWithNumIndex();
         $result = [
             'config' => $configs,
             'decLevel' => $decLevel,
             'empLevel' => $empLevel,
-            'starLevel' => $starLevel,
+            'crownLevel' => $crownLevel,
         ];
         return static::notice($result);
     }
@@ -189,7 +189,7 @@ class ConfigController extends BaseController {
      * @throws \yii\db\Exception
      * @throws \yii\web\HttpException
      */
-    public function actionBonusStarLevel() {
+    public function actionBonusCrownLevel() {
         $form = new StarCrownLevelForm();
         if (Yii::$app->request->post() && $form->load(Yii::$app->request->post(), '')) {
             if ($form->updateBonus()) {

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

@@ -56,7 +56,7 @@ class PeriodBonusList extends \common\libs\dataList\DataList implements DataList
             foreach ($this->listData['list'] as $key => $value) {
                 $this->listData['list'][$key]['LAST_DEC_LV_NAME'] = Cache::getDecLevelConfig()[$value['LAST_DEC_LV']]['LEVEL_NAME'];
                 $this->listData['list'][$key]['LAST_EMP_LV_NAME'] = Cache::getEmpLevelConfig()[$value['LAST_EMP_LV']]['LEVEL_NAME'];
-                $this->listData['list'][$key]['LAST_STAR_LV_NAME'] = Cache::getStarCrownLevelConfig()[$value['LAST_STAR_LV']]['LEVEL_NAME'] ?? $value['LAST_STAR_LV'];
+                $this->listData['list'][$key]['LAST_CROWN_LV_NAME'] = Cache::getStarCrownLevelConfig()[$value['LAST_CROWN_LV']]['LEVEL_NAME'] ?? $value['LAST_CROWN_LV'];
                 $this->listData['list'][$key]['LAST_STATUS_NAME'] = \Yii::$app->params['userStatus'][$value['LAST_STATUS']]['label'];
 
                 $this->listData['list'][$key]['LAST_REC_USER_NAME'] = Info::getUserNameByUserId($value['REC_UID']);
@@ -123,7 +123,7 @@ class PeriodBonusList extends \common\libs\dataList\DataList implements DataList
                         'width' => '140',
                     ],
                 ],
-                'LAST_STAR_LV_NAME' => [
+                'LAST_CROWN_LV_NAME' => [
                     'header' => 'Member star at settlement',//结算时会员聘级
                     'headerOther' => [
                         'width' => '140',

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

@@ -81,7 +81,7 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
     public function getColumn(){
         $decLevelConfig = Cache::getDecLevelConfig();
         $empLevelConfig = Cache::getEmpLevelConfig();
-        $starLevelConfig = Cache::getStarCrownLevelConfig();
+        $crownLevelConfig = Cache::getStarCrownLevelConfig();
         $decRoleConfig = DecRole::getAllData();
         $systemConfig = UserSystem::getAllSystems();
         $openBankConfig = OpenBank::getAllOpenBank();
@@ -180,13 +180,13 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
                         'tag'=>['type'=>'warning', 'size' => 'small', 'class'=>'no-border']
                     ],
                 ],
-                'STAR_LV_NAME' => [
+                'CROWN_LV_NAME' => [
                     'header' => 'Real time crown', // 实时星级
                     'headerOther' => [
                         'width' => '130',
                     ],
-                    'value' => function($row) use($starLevelConfig) {
-                        return isset($starLevelConfig[$row['STAR_LV']])?$starLevelConfig[$row['STAR_LV']]['LEVEL_NAME']:'';
+                    'value' => function($row) use($crownLevelConfig) {
+                        return isset($crownLevelConfig[$row['CROWN_LV']])?$crownLevelConfig[$row['CROWN_LV']]['LEVEL_NAME']:'';
                     },
                     'valueOther' => [
                         'tag'=>['type'=>'warning', 'size' => 'small', 'class'=>'no-border']
@@ -595,7 +595,7 @@ class IndexList extends \common\libs\dataList\DataList implements DataListInterf
 //                'DEC_LV_UPDATED_AT'=> ['name'=> '实时调整日期', 'other'=> 'date'],
 //                'LAST_DEC_LV_NAME'=> ['name'=> '结算时会员级别', 'other'=> 'decLevel'],
                 'EMP_LV_NAME'=> ['name'=> 'Real time employment', 'other'=> 'empLevel'], // 实时聘级
-                'STAR_LV_NAME'=> ['name'=> 'Real time Crown', 'other'=> 'starLevel'], // 实时聘级
+                'CROWN_LV_NAME'=> ['name'=> 'Real time Crown', 'other'=> 'crownLevel'], // 实时聘级
 //                'HIGHEST_EMP_LV_NAME'=> ['name'=> '历史最高聘级', 'other'=> 'empLevel'],
 //                'HIGHEST_EMP_LV_PERIOD'=> ['name'=> '首次达到历史最高聘级的期数'],
                 'REC_USER_NAME'=> ['name'=> 'Recommendation No'],//推荐编号

+ 2 - 2
backendApi/modules/v1/models/lists/user/MoveList.php

@@ -61,11 +61,11 @@ class MoveList extends \common\libs\dataList\DataList implements DataListInterfa
                 'ID' => null,
                 'USER_ID' => null,
                 'MOVE_USER_NAME' => [
-                    'header' => 'Move members', // 移动的会员
+                    'header' => 'Move member', // 移动的会员
                     'headerOther' => ['width' => '150'],
                 ],
                 'MOVE_REAL_NAME' => [
-                    'header' => 'Move members name', // 移动的会员名字
+                    'header' => 'Move member name', // 移动的会员名字
                     'headerOther' => [
                         'width' => '150',
                     ],

+ 51 - 2
backendEle/src/utils/editor.js

@@ -1,7 +1,10 @@
 import {CDN_IMG_URL} from './config'
+import network from "./network";
+import {SERVER_API_HTTP_TYPE,SERVER_API_DOMAIN} from '@/utils/config'
 
 const EDITOR_ROOT_URL = `${CDN_IMG_URL}/tinymce`
 const EDITOR_LANGUAGE = `${EDITOR_ROOT_URL}/langs/zh_CN.js`
+
 let fullEditor = {
   // language_url: EDITOR_LANGUAGE,
   height: 500,
@@ -16,9 +19,55 @@ let textEditor = {
   plugins: [
     'advlist autolink lists link charmap print preview anchor textcolor colorpicker',
     'searchreplace visualblocks code fullscreen',
-    'insertdatetime media table contextmenu paste code help'
+    'insertdatetime media table contextmenu paste image code help'
   ],
-  toolbar: 'undo redo |  formatselect | bold italic backcolor forecolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | help'
+  toolbar: 'undo redo |  formatselect | bold italic backcolor forecolor | link image | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | preview | help',
+  automatic_uploads: false,
+  image_title: false,
+  image_description: false,
+  images_upload_base_path: 'article',
+  file_picker_types: 'file image media',
+  images_upload_handler: (blobInfo, success, failure) => {
+      const handler = async () => {
+          let token = await network.getData('file/token');
+
+          let params = new FormData()
+          params.append('file', blobInfo.blob())
+          params.append('uploadToken', token)
+          await network.postData('ad/upload', params).then(response => {
+              let imageUrl = SERVER_API_HTTP_TYPE + SERVER_API_DOMAIN + '/uploads/' + response;
+              success(imageUrl)
+          }).catch(error => {
+              failure(error)
+          })
+      }
+
+      handler();
+  },
+  file_picker_callback: (callback, value, meta) => {
+      // 模拟出一个input用于添加本地文件
+      let inputElem = document.createElement('input');
+      inputElem.setAttribute('type', 'file');
+      inputElem.click();
+      inputElem.onchange = () => {
+          const handler = async () => {
+              let token = await network.getData('file/token');
+              let file = inputElem.files[0];
+
+              let params = new FormData()
+              params.append('file', file);
+              params.append('uploadToken', token);
+              await network.postData('article/upload', params).then(response => {
+                  let fileUrl = SERVER_API_HTTP_TYPE + SERVER_API_DOMAIN + '/uploads/' + response;
+                  callback(fileUrl, {text: response})
+              }).catch(error => {
+                  console.log(error)
+              })
+          }
+
+          handler();
+      }
+  },
 }
 
 export {

+ 2 - 9
backendEle/src/utils/tool.js

@@ -2,8 +2,8 @@ import errorCode from './errorCode'
 import baseInfo from './baseInfo'
 import userInfo from './userInfo'
 import router from '@/router'
-import {PRICE_IS_ROUND,SERVER_API_DOMAIN} from './config'
-import ElementUI from 'element-ui'
+import network from '@/utils/network'
+import {PRICE_IS_ROUND, SERVER_API_DOMAIN} from './config'
 
 let tool = {
   /**
@@ -262,13 +262,6 @@ let tool = {
       window.location.href = window.location.href.replace(searchStr, '$1$2'+value+'$4')
     }
   },
-
-  imageRenderSoup(cover) {
-    return cover.indexOf(SERVER_API_DOMAIN) > 0
-  },
-  imageRenderLang(cover) {
-    return SERVER_API_DOMAIN + '/uploads/' + cover
-  }
 }
 
 export default tool

+ 1 - 6
backendEle/src/views/ad/list.vue

@@ -5,12 +5,7 @@
                 @selection-change="handleSelectionChange" @row-click="handleExpand">
         <el-table-column type="expand">
           <template slot-scope="scope">
-            <a v-if="scope.row.TYPE === '1'" :href="getHref(scope.row.CONTENT)" target="_blank" class="islide">
-                <img :src="getImage(scope.row.IMAGE)" width="100px" height="100px" :alt="scope.row.TITLE">
-            </a>
-            <router-link v-else :to="`/article/detail/${scope.row.CONTENT}`" target="_blank" class="islide">
-                <img :src="getImage(scope.row.IMAGE)" width="100px" height="100px" :alt="scope.row.TITLE">
-            </router-link>
+              <img :src="getImage(scope.row.IMAGE)" width="100%" height="100%" :alt="scope.row.TITLE">
           </template>
         </el-table-column>
         <el-table-column type="selection" width="55"></el-table-column>

+ 21 - 21
backendEle/src/views/article/category.vue

@@ -15,29 +15,29 @@
             {{tool.formatDate(scope.row.CREATED_AT)}}
           </template>
         </el-table-column>
-        <el-table-column fixed="right" label="Action" width="180"><!--操作-->
-          <template slot-scope="scope">
-            <el-dropdown size="small" trigger="click">
-              <el-button type="primary" size="small" @click.stop="">
-                Action<i class="el-icon-arrow-down el-icon--right"></i>
-              </el-button>
-              <el-dropdown-menu slot="dropdown">
-                <el-dropdown-item command="edit" @click.native="handleDelete(scope.row)">Delete</el-dropdown-item>
-              </el-dropdown-menu>
-            </el-dropdown>
-          </template>
-        </el-table-column>
+<!--        <el-table-column fixed="right" label="Action" width="180">&lt;!&ndash;操作&ndash;&gt;-->
+<!--          <template slot-scope="scope">-->
+<!--            <el-dropdown size="small" trigger="click">-->
+<!--              <el-button type="primary" size="small" @click.stop="">-->
+<!--                Action<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
+<!--              </el-button>-->
+<!--              <el-dropdown-menu slot="dropdown">-->
+<!--                <el-dropdown-item command="edit" @click.native="handleDelete(scope.row)">Delete</el-dropdown-item>-->
+<!--              </el-dropdown-menu>-->
+<!--            </el-dropdown>-->
+<!--          </template>-->
+<!--        </el-table-column>-->
       </el-table>
       <div class="white-box-footer">
-        <el-dropdown size="small" trigger="click">
-          <el-button type="primary" size="small">
-            Selected data<!--所选数据--><i class="el-icon-arrow-down el-icon--right"></i>
-          </el-button>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item command="delete" @click.native="handleMuliDel()">Delete</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
-        <el-button type="primary" size="small" @click="handleAdd">New category</el-button><!--新建分类-->
+<!--        <el-dropdown size="small" trigger="click">-->
+<!--          <el-button type="primary" size="small">-->
+<!--            Selected data&lt;!&ndash;所选数据&ndash;&gt;<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
+<!--          </el-button>-->
+<!--          <el-dropdown-menu slot="dropdown">-->
+<!--            <el-dropdown-item command="delete" @click.native="handleMuliDel()">Delete</el-dropdown-item>-->
+<!--          </el-dropdown-menu>-->
+<!--        </el-dropdown>-->
+<!--        <el-button type="primary" size="small" @click="handleAdd">New category</el-button>&lt;!&ndash;新建分类&ndash;&gt;-->
         <el-pagination
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"

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

@@ -16,6 +16,7 @@ import Vue from 'vue'
 import network from '@/utils/network'
 import tool from '@/utils/tool'
 import store from '@/utils/vuexStore'
+import {SERVER_API_HTTP_TYPE,SERVER_API_DOMAIN} from '@/utils/config'
 
 export default {
   name: 'article_detail',
@@ -46,6 +47,9 @@ export default {
         this.loading = false
       })
     },
+    getLink(fileUrl) {
+      return fileUrl.indexOf('http') > -1 ? fileUrl : SERVER_API_HTTP_TYPE + SERVER_API_DOMAIN + '/uploads/' + fileUrl;
+    },
   }
 }
 

+ 5 - 0
backendEle/src/views/article/edit.vue

@@ -10,6 +10,9 @@
             <el-option v-for="item in allCategory" :label="item.CATE_NAME" :value="item.ID" :key="item.ID"></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="Order" style="width: 500px;"><!--排序值-->
+            <el-input v-model="form.sort"></el-input>
+        </el-form-item>
         <el-form-item label="Content"><!--内容-->
           <editor id="contentEditor" :cloud-channel="editorRootUrl" ref="contentEditor" v-model="form.content"
                   :init="editorOptions"></editor>
@@ -41,6 +44,7 @@ export default {
         this.form.title = response.oneData.TITLE
         this.form.cid = response.oneData.CID
         this.form.content = response.oneData.CONTENT
+        this.form.sort = response.oneData.SORT
         this.allCategory = response.allCategory
         this.loading = false
         this.isEdit = true
@@ -58,6 +62,7 @@ export default {
         title: '',
         cid: null,
         content: '',
+        sort: 1,
       },
       allCategory: null,
       loading: false,

+ 24 - 1
backendEle/src/views/article/index.vue

@@ -3,12 +3,30 @@
     <div class="white-box">
       <el-table :data="tableData" stripe style="width: 100%;" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column label="Title" prop="TITLE"></el-table-column><!--标题-->
+        <el-table-column label="ID" prop="ID">
+          <template slot-scope="scope">
+            <router-link :to="`/article/detail/${scope.row.ID}`" target="_blank" class="islide">
+              <span>{{ scope.row.ID }}</span>
+            </router-link>
+          </template>
+        </el-table-column>
+        <el-table-column label="Title" prop="TITLE">
+          <template slot-scope="scope">
+            <router-link :to="`/article/detail/${scope.row.ID}`" target="_blank" class="islide">
+              <span>{{ scope.row.TITLE }}</span>
+            </router-link>
+          </template>
+        </el-table-column><!--标题-->
         <el-table-column label="Category"><!--分类-->
           <template slot-scope="scope">
             {{allData.allCategory[scope.row.CID].CATE_NAME}}
           </template>
         </el-table-column>
+        <el-table-column label="Sort" width="100"> <!-- 排序 -->
+          <template slot-scope="scope">
+            <el-input v-model="scope.row.SORT" min="0" max="99" @change="handleChangeSort(scope.row, scope.row.SORT)"></el-input>
+          </template>
+        </el-table-column>
         <el-table-column label="Creation time"><!--创建时间-->
           <template slot-scope="scope">
             {{tool.formatDate(scope.row.CREATED_AT)}}
@@ -98,6 +116,11 @@ export default {
     handleMuliDel () {
       this.delData()
     },
+    handleChangeSort (row, sort) {
+      network.getData('/article/sort', {id: row.ID, sort: sort}).then(_ => {
+        this.getData(this.currentPage, this.pageSize)
+      })
+    },
     getData (page, pageSize) {
       let obj = this
       network.getPageData(this, 'article/index', page, pageSize, this.filterData, function (response) {

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

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

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

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

+ 4 - 4
backendEle/src/views/config/bonus-opt.vue

@@ -221,7 +221,7 @@
           </div>
           <div class="panel-wrapper">
               <div class="panel-body">
-                  <el-table :data="starLevelTableData" stripe style="width: 100%;">
+                  <el-table :data="crownLevelTableData" stripe style="width: 100%;">
                       <el-table-column prop="LEVEL_NAME" label="级别名称"></el-table-column>
                       <el-table-column label="级别分数(BV)">
                           <template slot-scope="scope">
@@ -280,7 +280,7 @@ export default {
       this.configData = response.config
       this.decLevelTableData = response.decLevel
       this.empLevelTableData = response.empLevel
-      this.starLevelTableData = response.starLevel
+      this.crownLevelTableData = response.crownLevel
       this.loading = false
     })
   },
@@ -288,7 +288,7 @@ export default {
     return {
       decLevelTableData: null,
       empLevelTableData: null,
-      starLevelTableData: null,
+      crownLevelTableData: null,
       loading: true,
       submitButtonStat: false,
       qySubmitButtonStat: false,
@@ -366,7 +366,7 @@ export default {
     onStarSubmit() {
       this.starSubmitButtonStat = true
       network.postData('config/bonus-star-level', {
-          data: this.starLevelTableData
+          data: this.crownLevelTableData
       }).then(response => {
           this.$message({
               message: response,

+ 189 - 185
backendEle/src/views/shop/goods-add.vue

@@ -21,6 +21,9 @@
                 <!-- <el-form-item label="复消购买方式">
                     <el-checkbox  v-for="(value,key) in sellType" v-model="form.sellType[key-1]" :key="key" >{{value.name}}</el-checkbox>
                 </el-form-item> -->
+                <el-form-item label="BV split">
+                    <el-checkbox v-model="form.pvSplit"></el-checkbox>
+                </el-form-item>
                 <el-form-item label="Product Category"><!-- 商品分类 -->
                     <el-select v-model="form.categoryType" placeholder="">
                         <el-option v-for="item in categoryType" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -83,196 +86,197 @@
 </template>
 
 <script>
-    import store from '@/utils/vuexStore'
-    import network from '@/utils/network'
-    import tool from '@/utils/tool'
-    import baseInfo from '../../utils/baseInfo'
-    import LeoUploader from '@/components/Uploader';
-    export default {
-        name: "goods-add",
-        components:{LeoUploader},
-        mounted () {
-            this.getData();
-            this.getFileToken();
-        },
-        data(){
-            return{
-                dialogImageUrl: '',
-                dialogVisible: false,
-                disabled: false,
-                loading: false,
-                file:null,
-                uploadToken:'',
-                form:{
-                    goodsName:'',
-                    type:'',
-                    giftType:[false,false,false,false],
-                    sellType:[false,false],
-                    goodsNo:'',
-                    unit:'',
-                    marketPrice:'',
-                    sellPrice:'',
-                    pricePv:'',
-                    point:'',
-                    storeNums:'',
-                    content:'',
-                    sort:'',
-                    discount:'',
-                    cover:'',
-                    textarea:'',
-                    sellDiscount:'',
-                    categoryType: '',
-                    sellPriceStandard: '',
-                    taxRate: 0,
-                },
-                submitButtonStat: false,
-                goodsType:[],
-                GiftTypeArr:[],
-                categoryType: [],
-                sellType:null,
-                width:'100px',
-                height:'100px',
-                pvDisabled: true,
-                exchangeRate: baseInfo.exchangeRate(),
-            }
-        },
-        watch:{
-            dialogVisible(newVal,oldVal){
-                console.log(newVal,oldVal)
-            },
-            // 监听商品分类,控制PV是否展示
-            'form.categoryType': {
-                deep: true,
-                handler(modern, origin) {
-                    this.pvDisabled = (parseInt(modern) === 1)
-                }
-            },
-            // 监听商品标准价格,自动计算销售价格
-            // 'form.sellPriceStandard': {
-            //     deep: true,
-            //     handler(modern, origin) {
-            //         this.form.sellPrice = modern * this.exchangeRate
-            //     }
-            // },
-        },
-        methods: {
-            handleRemove(file) {
-                console.log(file);
-            },
-            upLoadSuccess(file){
-                this.form.cover=file;
-            },
-            handlePictureCardPreview(file) {
-                this.dialogImageUrl = file.url;
-                this.dialogVisible = true;
-                this.file=file;
-                // console.log(file);
+import store from '@/utils/vuexStore'
+import network from '@/utils/network'
+import tool from '@/utils/tool'
+import baseInfo from '../../utils/baseInfo'
+import LeoUploader from '@/components/Uploader';
+export default {
+  name: 'goods-add',
+  components: {LeoUploader},
+  mounted () {
+    this.getData();
+    this.getFileToken();
+  },
+  data () {
+    return {
+      dialogImageUrl: '',
+      dialogVisible: false,
+      disabled: false,
+      loading: false,
+      file: null,
+      uploadToken: '',
+      form: {
+        goodsName: '',
+        type: '',
+        giftType: [false,false,false,false],
+        sellType: [false,false],
+        goodsNo: '',
+        unit: '',
+        marketPrice: '',
+        sellPrice: '',
+        pvSplit: '',
+        pricePv: '',
+        point: '',
+        storeNums: '',
+        content: '',
+        sort: '',
+        discount: '',
+        cover: '',
+        textarea: '',
+        sellDiscount: '',
+        categoryType: '',
+        sellPriceStandard: '',
+        taxRate: 0,
+      },
+      submitButtonStat: false,
+      goodsType: [],
+      GiftTypeArr: [],
+      categoryType: [],
+      sellType: null,
+      width: '100px',
+      height: '100px',
+      pvDisabled: true,
+      exchangeRate: baseInfo.exchangeRate(),
+    }
+  },
+  watch: {
+    dialogVisible (newVal,oldVal) {
+      console.log(newVal,oldVal)
+    },
+    // 监听商品分类,控制PV是否展示
+    'form.categoryType': {
+      deep: true,
+      handler (modern, origin) {
+        this.pvDisabled = (parseInt(modern) === 1)
+      }
+    },
+    // 监听商品标准价格,自动计算销售价格
+    // 'form.sellPriceStandard': {
+    //     deep: true,
+    //     handler(modern, origin) {
+    //         this.form.sellPrice = modern * this.exchangeRate
+    //     }
+    // },
+  },
+  methods: {
+    handleRemove (file) {
+      console.log(file);
+    },
+    upLoadSuccess (file) {
+      this.form.cover = file;
+    },
+    handlePictureCardPreview (file) {
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = true;
+      this.file = file;
+      // console.log(file);
 
-            },
-            handleDownload(file) {
-                console.log(file);
-            },
-            getFile(){
-                let data={
-                    uploadToken:this.uploadToken,
-                    file:this.file
-                }
-                if(this.uploadToken){
-                    network.postData('shop/upload',data)
-                    .then(response=>{
-                        console.log(response);
-                    })
-                }
-            },
-            getFileToken(){
-                network.getData('shop/upload').then(response=>{
-                   this.uploadToken=response;
-                })
-            },
-            getData (page, pageSize) {
-                let filterData = this.filterModel
-                let vueObj = this
-                network.getPageData(this, 'shop/goods-add', page, pageSize, this.filterModel, response=>{
-                    this.categoryType = response.categoryType
-                    this.goodsType=response.goodsType
-                    this.GiftTypeArr=response.giftType
-                    this.sellType=response.sellType
-                    // this.form.sellType=this.form.sellType.map((item,index)=>{
-                    //   return response.sellType.some(val=>(index+1).toString()==val)
-                    // })
-                })
-            },
-            addSubmit() {
-                this.submitButtonStat = true
-                let path = 'shop/goods-add';
+    },
+    handleDownload (file) {
+      console.log(file);
+    },
+    getFile () {
+      let data = {
+        uploadToken: this.uploadToken,
+        file: this.file
+      }
+      if (this.uploadToken) {
+        network.postData('shop/upload', data)
+          .then(response => {
+            console.log(response);
+          })
+      }
+    },
+    getFileToken () {
+      network.getData('shop/upload').then(response => {
+        this.uploadToken = response;
+      })
+    },
+    getData (page, pageSize) {
+      let filterData = this.filterModel
+      let vueObj = this
+      network.getPageData(this, 'shop/goods-add', page, pageSize, this.filterModel, response => {
+        this.categoryType = response.categoryType
+        this.goodsType = response.goodsType
+        this.GiftTypeArr = response.giftType
+        this.sellType = response.sellType
+        // this.form.sellType=this.form.sellType.map((item,index)=>{
+        //   return response.sellType.some(val=>(index+1).toString()==val)
+        // })
+      })
+    },
+    addSubmit () {
+      this.submitButtonStat = true
+      let path = 'shop/goods-add';
 
-                // let sellType =[]
-                // this.form.sellType.map((item,index)=>{
-                //   if(item){
-                //     sellType.push((index+1).toString())
-                //   }
-                // });
+      // let sellType =[]
+      // this.form.sellType.map((item,index)=>{
+      //   if(item){
+      //     sellType.push((index+1).toString())
+      //   }
+      // });
 
-                let sen_gift=[];
-                this.form.giftType.map((item,index)=>{
-                    if(item){
-                        sen_gift.push((index+1).toString())
-                    }
-                })
+      let sen_gift = [];
+      this.form.giftType.map((item,index) => {
+        if (item) {
+          sen_gift.push((index+1).toString())
+        }
+      })
 
-                let postData = {
-                    goodsName: this.form.goodsName,
-                    sellDiscount: this.form.sellDiscount,
-                    discount: this.form.type.discount,
-                    type: this.form.type,
-                    giftType: sen_gift,
-                    // sellType: sellType,
-                    sellType: this.form.sellType,
-                    categoryType: this.form.categoryType,
-                    goodsNo: this.form.goodsNo,
-                    unit: this.form.unit,
-                    marketPrice: this.form.marketPrice,
-                    sellPrice: this.form.sellPrice,
-                    sellPriceStandard: this.form.sellPriceStandard,
-                    pricePv: this.form.pricePv,
-                    // point: this.form.point,
-                    storeNums: this.form.storeNums,
-                    content: this.form.content,
-                    sort: this.form.sort,
-                    cover: this.form.cover,
-                    taxRate: this.form.taxRate,
-                }
+      let postData = {
+        goodsName: this.form.goodsName,
+        sellDiscount: this.form.sellDiscount,
+        discount: this.form.type.discount,
+        type: this.form.type,
+        giftType: sen_gift,
+        // sellType: sellType,
+        sellType: this.form.sellType,
+        pvSplit: this.form.pvSplit,
+        categoryType: this.form.categoryType,
+        goodsNo: this.form.goodsNo,
+        unit: this.form.unit,
+        marketPrice: this.form.marketPrice,
+        sellPrice: this.form.sellPrice,
+        sellPriceStandard: this.form.sellPriceStandard,
+        pricePv: this.form.pricePv,
+        // point: this.form.point,
+        storeNums: this.form.storeNums,
+        content: this.form.content,
+        sort: this.form.sort,
+        cover: this.form.cover,
+        taxRate: this.form.taxRate,
+      }
 
-                return network.postData(path, postData).then(response => {
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                    this.submitButtonStat = false
-                    this.$router.go(-1)
-                }).catch(() => {
-                    this.submitButtonStat = false
-                })
-            },
-           /*
-            handleEdit() {
-                this.dialogEditFormVisible = false
-                this.$message({
-                    message: '正在修改数据',
-                    type: 'info'
-                })
-                let path = 'finance/deal-type-edit'
-                network.postData(path, this.form).then(response => {
-                    this.$message({
-                        message: response,
-                        type: 'success'
-                    })
-                    this.getData(this.currentPage, this.pageSize)
-                }).catch(response => {
-                })
-            },*/
-        }
-    }
+      return network.postData(path, postData).then(response => {
+        this.$message({
+          message: response,
+          type: 'success'
+        })
+        this.submitButtonStat = false
+        this.$router.go(-1)
+      }).catch(() => {
+        this.submitButtonStat = false
+      })
+    },
+    // handleEdit() {
+    //   this.dialogEditFormVisible = false
+    //   this.$message({
+    //     message: '正在修改数据',
+    //     type: 'info'
+    //   })
+    //   let path = 'finance/deal-type-edit'
+    //   network.postData(path, this.form).then(response => {
+    //     this.$message({
+    //       message: response,
+    //       type: 'success'
+    //     })
+    //     this.getData(this.currentPage, this.pageSize)
+    //   }).catch(response => {
+    //   })
+    // },
+  }
+}
 </script>
 
 <style scoped>

+ 1 - 1
common/helpers/Cache.php

@@ -31,7 +31,7 @@ class Cache
     const DEC_LEVEL_CONFIG_KEY = 'sys:decLevel';
     const DEC_ROLE_CONFIG_KEY = 'sys:decRole';
     const EMP_LEVEL_CONFIG_KEY = 'sys:empLevel';
-    const STAR_LEVEL_CONFIG_KEY = 'sys:starLevel';
+    const CROWN_LEVEL_CONFIG_KEY = 'sys:crownLevel';
     const ADMIN_ROLE_KEY = 'sys:adminRole';
     const SMS_TEMPLATE_DEC_KEY = 'sys:smsTemplateDec';
     const SMS_TEMPLATE_EMP_KEY = 'sys:smsTemplateEmp';

+ 1 - 1
common/helpers/LoggerTool.php

@@ -12,7 +12,7 @@ class LoggerTool
     {
         $logger = new Logger('info');
         // 添加一些处理器
-        $logger->pushHandler(new StreamHandler(__DIR__ . "/../runtime/logs/trace.log", Logger::DEBUG));
+        $logger->pushHandler(new StreamHandler(__DIR__ . "/../runtime/logs/info.log", Logger::DEBUG));
         $logger->pushHandler(new FirePHPHandler());
         $logger->info(json_encode($message));
     }

+ 12 - 5
common/helpers/Tool.php

@@ -11,9 +11,9 @@ namespace common\helpers;
 
 use common\models\ApproachOrderCall;
 use Faker\Provider\Uuid;
-use yii\base\Exception;
 use yii\helpers\Url;
 use yii\httpclient\Client;
+use yii\mongodb\Exception;
 
 class Tool {
 
@@ -499,9 +499,16 @@ class Tool {
      */
     public static function approachOrderCall($call)
     {
-        $model = new ApproachOrderCall();
-        $model->event = $call['event'];
-        $model->data = $call['data'];
-        $model->insert();
+        try {
+            $model = new ApproachOrderCall();
+            $model->sn = $call['data']['metadata']['custom_fields'][0]['value'] ?? '';
+            $model->reference = $call['data']['reference'] ?? '';
+            $model->event = $call['event'];
+            $model->data = $call['data'];
+            $model->insert();
+        } catch (Exception $e) {
+            LoggerTool::info($call);
+            LoggerTool::error(sprintf('[%s] [%s] [%s]', $e->getFile(), $e->getLine(), $e->getMessage()));
+        }
     }
 }

+ 23 - 23
common/helpers/bonus/BonusCalc.php

@@ -1266,7 +1266,7 @@ class BonusCalc extends BaseObject {
                 // 计算荣衔星级
                 $starCrown = StarCrownLevel::getStarCrown($payLeg);
                 // 星级放入缓存
-                CalcCache::addUserStartCrown($userId, $periodNum, $starCrown['ID']);
+                CalcCache::addUserStarCrown($userId, $periodNum, $starCrown['ID']);
 
                 //团队奖流水
                 $insertBonusData[] = [
@@ -1275,7 +1275,7 @@ class BonusCalc extends BaseObject {
                     'ORI_CAPPED_BONUS_QY' => $capBonusQy,
                     'LAST_DEC_LV' => $userBaseInfo['DEC_LV'],
                     'LAST_EMP_LV' => $userBaseInfo['EMP_LV'],
-                    'LAST_STAR_LV' => $starCrown['ID'],
+                    'LAST_CROWN_LV' => $starCrown['ID'],
                     'LAST_STATUS' => $userBaseInfo['STATUS'],
                     'AMOUNT' => $deductData['surplus'],
                     'ORI_BONUS' => $teamBonus,
@@ -1656,8 +1656,8 @@ class BonusCalc extends BaseObject {
     public function calcQuarter() {
         if( !$this->_isCalcMonth || !in_array($this->_calcMonth, [3,6,9,12])) {
             // 不是结算月,则不进行计算
-            print_r('不是季结点,进这里,不计算季度奖');
-            return false;
+            echo('不是季结点,进这里,不计算季度奖'. PHP_EOL);
+            return true;
         }
         $result = \Yii::$app->db->createCommand("CALL QtrCalc(:periodNum)")
             ->bindValue(':periodNum' , $this->_periodNum )
@@ -1715,7 +1715,7 @@ class BonusCalc extends BaseObject {
         $userStarCrown = CalcBonusQY::find()
             ->yearMonth($this->_calcYearMonth)
             ->where('CALC_MONTH=:CALC_MONTH', [':CALC_MONTH' => $this->_calcYearMonth])
-            ->select('USER_ID,LAST_STAR_LV')
+            ->select('USER_ID,LAST_CROWN_LV')
             ->groupBy('USER_ID')
             ->asArray()
             ->all();
@@ -1728,11 +1728,11 @@ class BonusCalc extends BaseObject {
         $bonusPointComplex = 0;
         $insertBonusData = [];
         foreach($bonusUsers as $userId) {
-            // 计算奖金:取starDirectorPoint和startCrownPoint的大个值
+            // 计算奖金:取starDirectorPoint和starCrownPoint的大个值
             $starDirectorPoint = $this->_empLevelConfig[$userStarDirectorObj[$userId]['LEVEL_ID']]['TOURISM_PERCENT'] ?? 0;
-            $startCrownPoint = $this->_starCrownLevelConfig[$userStarCrownObj[$userId]['LAST_STAR_LV']]['TOURISM_PERCENT'] ?? 0;
+            $starCrownPoint = $this->_starCrownLevelConfig[$userStarCrownObj[$userId]['LAST_CROWN_LV']]['TOURISM_PERCENT'] ?? 0;
             // 奖金比例:
-            $bonusPoint = max($starDirectorPoint, $startCrownPoint);
+            $bonusPoint = max($starDirectorPoint, $starCrownPoint);
 
             $insertBonusData[] = [
                 'ID' => SnowFake::instance()->generateId(),
@@ -1740,7 +1740,7 @@ class BonusCalc extends BaseObject {
                 'LAST_DEC_LV' => $userStarDirectorObj[$userId]['LAST_DEC_LV'],
                 'LAST_EMP_LV' => $userStarDirectorObj[$userId]['LAST_EMP_LV'],
                 'LAST_STATUS' => $userStarDirectorObj[$userId]['LAST_STATUS'],
-                'LAST_STAR_LV' => $userStarCrownObj[$userId]['LAST_STAR_LV'],
+                'LAST_CROWN_LV' => $userStarCrownObj[$userId]['LAST_CROWN_LV'],
                 'AMOUNT_STANDARD' => 0,
                 'POINT' => $bonusPoint,
                 'PERIOD_NUM' => $this->_periodNum,
@@ -1813,21 +1813,21 @@ class BonusCalc extends BaseObject {
         // 基于团队奖/绩效奖结果计算会员的StarCrown.StarCrown基于周期计算,一个月会产生多次,取月周期中的最高星级
         $subQuery = CalcBonusQY::find()
             ->yearMonth($this->_calcYearMonth)
-            ->where('CALC_MONTH = :CALC_MONTH AND LAST_STAR_LV <> :NO_STAR_LV', [':CALC_MONTH' => $this->_calcYearMonth, ':NO_STAR_LV' => StarCrownLevel::NO_LEVEL_ID])
-            ->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_STAR_LV,LAST_STATUS,LEVEL_NAME,SORT')
+            ->where('CALC_MONTH = :CALC_MONTH AND LAST_CROWN_LV <> :NO_CROWN_LV', [':CALC_MONTH' => $this->_calcYearMonth, ':NO_CROWN_LV' => StarCrownLevel::NO_LEVEL_ID])
+            ->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_CROWN_LV,LAST_STATUS,LEVEL_NAME,SORT')
             ->joinWith(['starCrown' => function($query) {
                 $query->select(['LEVEL_NAME', 'SORT']);
             }])
             ->having(1)
             ->orderBy('USER_ID ASC, SORT DESC');
-        $userStarCrownObj = (new Query())->from(['u' => $subQuery])->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_STAR_LV,LAST_STATUS,LEVEL_NAME,SORT')->groupBy('USER_ID')->indexBy('USER_ID')->all();
+        $userStarCrownObj = (new Query())->from(['u' => $subQuery])->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_CROWN_LV,LAST_STATUS,LEVEL_NAME,SORT')->groupBy('USER_ID')->indexBy('USER_ID')->all();
 
         // 奖金点数综合
         $bonusPointComplex = 0;
         $insertBonusData = [];
         foreach($userStarCrownObj as $item) {
             // 奖金比例
-            $bonusPoint = $this->_starCrownLevelConfig[$item['LAST_STAR_LV']]['VILLA_PERCENT'] ?? 0;
+            $bonusPoint = $this->_starCrownLevelConfig[$item['LAST_CROWN_LV']]['VILLA_PERCENT'] ?? 0;
             if (!$bonusPoint) {
                 continue;
             }
@@ -1838,7 +1838,7 @@ class BonusCalc extends BaseObject {
                 'LAST_DEC_LV' => $item['LAST_DEC_LV'],
                 'LAST_EMP_LV' => $item['LAST_EMP_LV'],
                 'LAST_STATUS' => $item['LAST_STATUS'],
-                'LAST_STAR_LV' => $item['LAST_STAR_LV'],
+                'LAST_CROWN_LV' => $item['LAST_CROWN_LV'],
                 'AMOUNT' => 0,
                 'POINT' => $bonusPoint,
                 'PERIOD_NUM' => $this->_periodNum,
@@ -1927,14 +1927,14 @@ class BonusCalc extends BaseObject {
         // 基于团队奖/绩效奖结果计算会员的StarCrown.StarCrown基于周期计算,一个月会产生多次,取月周期中的最高星级
         $subQuery = CalcBonusQY::find()
             ->yearMonth($this->_calcYearMonth)
-            ->where('CALC_MONTH = :CALC_MONTH AND LAST_STAR_LV <> :NO_STAR_LV', [':CALC_MONTH' => $this->_calcYearMonth, ':NO_STAR_LV' => StarCrownLevel::NO_LEVEL_ID])
-            ->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_STAR_LV,LAST_STATUS,LEVEL_NAME,SORT')
+            ->where('CALC_MONTH = :CALC_MONTH AND LAST_CROWN_LV <> :NO_CROWN_LV', [':CALC_MONTH' => $this->_calcYearMonth, ':NO_CROWN_LV' => StarCrownLevel::NO_LEVEL_ID])
+            ->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_CROWN_LV,LAST_STATUS,LEVEL_NAME,SORT')
             ->joinWith(['starCrown' => function($query) {
                 $query->select(['LEVEL_NAME', 'SORT']);
             }])
             ->having(1)
             ->orderBy('USER_ID ASC, SORT DESC');
-        $userStarCrownObj = (new Query())->from(['u' => $subQuery])->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_STAR_LV,LAST_STATUS,LEVEL_NAME,SORT')->groupBy('USER_ID')->indexBy('USER_ID')->all();
+        $userStarCrownObj = (new Query())->from(['u' => $subQuery])->select('USER_ID,LAST_DEC_LV,LAST_EMP_LV,LAST_CROWN_LV,LAST_STATUS,LEVEL_NAME,SORT')->groupBy('USER_ID')->indexBy('USER_ID')->all();
         
         // 合并用户ID,去重
         $bonusUsers = array_unique(array_merge(array_keys($userStarDirectorObj), array_keys($userStarCrownObj)));
@@ -1944,11 +1944,11 @@ class BonusCalc extends BaseObject {
         $bonusPointComplex = 0;
         $insertBonusData = [];
         foreach($bonusUsers as $userId) {
-            // 计算奖金:取starDirectorPoint和startCrownPoint的大个值
+            // 计算奖金:取starDirectorPoint和starCrownPoint的大个值
             $starDirectorPoint = !isset($userStarDirectorObj[$userId]['LEVEL_ID']) ? 0 : ($this->_empLevelConfig[$userStarDirectorObj[$userId]['LEVEL_ID']]['GARAGE_PERCENT'] ?? 0);
-            $startCrownPoint = !isset($userStarCrownObj[$userId]['LAST_STAR_LV']) ? 0: ($this->_starCrownLevelConfig[$userStarCrownObj[$userId]['LAST_STAR_LV']]['GARAGE_PERCENT'] ?? 0);
+            $starCrownPoint = !isset($userStarCrownObj[$userId]['LAST_CROWN_LV']) ? 0: ($this->_starCrownLevelConfig[$userStarCrownObj[$userId]['LAST_CROWN_LV']]['GARAGE_PERCENT'] ?? 0);
             // 奖金比例:
-            $bonusPoint = max($starDirectorPoint, $startCrownPoint);
+            $bonusPoint = max($starDirectorPoint, $starCrownPoint);
 
             $insertBonusData[] = [
                 'ID' => SnowFake::instance()->generateId(),
@@ -1956,7 +1956,7 @@ class BonusCalc extends BaseObject {
                 'LAST_DEC_LV' => $userStarDirectorObj[$userId]['LAST_DEC_LV'] ?? ($userStarCrownObj[$userId]['LAST_DEC_LV'] ?? ''),
                 'LAST_EMP_LV' => $userStarDirectorObj[$userId]['LAST_EMP_LV'] ?? ($userStarCrownObj[$userId]['LAST_EMP_LV'] ?? ''),
                 'LAST_STATUS' => $userStarDirectorObj[$userId]['LAST_STATUS'] ?? ($userStarCrownObj[$userId]['LAST_STATUS'] ?? 1),
-                'LAST_STAR_LV' => $userStarCrownObj[$userId]['LAST_STAR_LV'] ?? '',
+                'LAST_CROWN_LV' => $userStarCrownObj[$userId]['LAST_CROWN_LV'] ?? '',
                 'AMOUNT' => 0,
                 'POINT' => $bonusPoint,
                 'PERIOD_NUM' => $this->_periodNum,
@@ -3720,7 +3720,7 @@ class BonusCalc extends BaseObject {
 //        }
         $pervSurplusPerf = CalcCache::surplusPerf($userId, $this->_periodNum);
         // 星级
-        $starCrownLv = CalcCache::getUserStartCrown($userId, $this->_periodNum);
+        $starCrownLv = CalcCache::getUserStarCrown($userId, $this->_periodNum);
 
         // //没有共享和管理奖 以前的管理奖和共享奖逻辑
         // $bonusReal = $bonus['BONUS_BD'] + $bonus['BONUS_TG'] + $bonus['BONUS_XF'] + $bonus['BONUS_YJ'] + $bonus['BONUS_QY'] + $bonus['BONUS_YC'] + $bonus['BONUS_YC_EXTRA'] + $bonus['BONUS_VIP'] + $standardBonus;
@@ -3826,7 +3826,7 @@ class BonusCalc extends BaseObject {
             'LAST_REAL_NAME' => $baseInfo['REAL_NAME'],
             'LAST_DEC_LV' => $baseInfo['DEC_LV'],
             'LAST_EMP_LV' => $empLv,
-            'LAST_STAR_LV' => $starCrownLv ?? StarCrownLevel::getDefaultLevelId(),
+            'LAST_CROWN_LV' => $starCrownLv ?? StarCrownLevel::getDefaultLevelId(),
             'LAST_STATUS' => $baseInfo['STATUS'],
             'LAST_MOBILE' => $baseInfo['MOBILE'],
             'LAST_PERIOD_AT' => $baseInfo['PERIOD_NUM'],

+ 4 - 4
common/helpers/bonus/BonusSend.php

@@ -214,7 +214,7 @@ class BonusSend extends BaseObject {
             echo('更新聘级完成,耗时:' . round($t4 - $t3, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
 
             // 更新星级
-            $this->updateStarLevel();
+            $this->updateCrownLevel();
             $this->_updatePercent(50);
             $t41 = microtime(true);
             echo('更新星级完成,耗时:' . round($t41 - $t4, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
@@ -617,7 +617,7 @@ class BonusSend extends BaseObject {
      * @param int $offset
      * @return bool
      */
-    public function updateStarLevel(int $offset = 0)
+    public function updateCrownLevel(int $offset = 0)
     {
         $allData = CalcBonusQY::findUseDbCalc()
             ->yearMonth($this->_calcYearMonth)
@@ -638,7 +638,7 @@ class BonusSend extends BaseObject {
             $transaction = Yii::$app->db->beginTransaction();
             try {
                 foreach ($allData as $data) {
-                    User::updateAll(['STAR_LV' => $data['LAST_STAR_LV']], 'ID = :USER_ID', [':USER_ID' => $data['USER_ID']]);
+                    User::updateAll(['CROWN_LV' => $data['LAST_CROWN_LV']], 'ID = :USER_ID', [':USER_ID' => $data['USER_ID']]);
                     User::deleteBaseInfoFromRedis($data['USER_ID']);
                     unset($data);
                 }
@@ -649,7 +649,7 @@ class BonusSend extends BaseObject {
                 return false;
             }
             unset($transaction, $allData);
-            return $this->updateStarLevel($offset + $this->_limit);
+            return $this->updateCrownLevel($offset + $this->_limit);
         }
         unset($allData);
 

+ 13 - 13
common/helpers/bonus/CalcCache.php

@@ -90,7 +90,7 @@ class CalcCache {
     const REDIS_KEY_PREFIX_GX_BONUS_DEEP_TWO_LIST_DATA = 'calc:gxBonusDeepTwoListData_';
     const REDIS_KEY_PREFIX_YC_BONUS_LIST_DATA = 'calc:ycBonusListData_';
     const REDIS_KEY_PREFIX_FW_BONUS_LIST_DATA = 'calc:fwBonusListData_';
-    const REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA = 'calc:bonusStarCrownListData_';
+    const REDIS_KEY_PREFIX_BONUS_CROWN_CROWN_LIST_DATA = 'calc:bonusStarCrownListData_';
 
     //@todo
     const REDIS_KEY_PREFIX_REPAIR_SURPLUS_PERF = 'calc:repairSurplusPerf_';
@@ -149,7 +149,7 @@ class CalcCache {
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_HAS_MONTH_BONUS_USER . $periodNum);
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_HAS_MONTH_BONUS_USER_POOL . $periodNum);
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_FW_BONUS_LIST_DATA . $periodNum);
-        Yii::$app->redis->del(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum);
+        Yii::$app->redis->del(self::REDIS_KEY_PREFIX_BONUS_CROWN_CROWN_LIST_DATA . $periodNum);
     }
 
     /**
@@ -216,7 +216,7 @@ class CalcCache {
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_GX_BONUS_DEEP_TWO_LIST_DATA . $periodNum);
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_YC_BONUS_LIST_DATA . $periodNum);
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_FW_BONUS_LIST_DATA . $periodNum);
-        Yii::$app->redis->del(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum);
+        Yii::$app->redis->del(self::REDIS_KEY_PREFIX_BONUS_CROWN_CROWN_LIST_DATA . $periodNum);
     }
 
     /**
@@ -614,13 +614,13 @@ class CalcCache {
      * 会员星级加入缓存
      * @param $userId
      * @param $periodNum
-     * @param $starCrown
+     * @param $crownCrown
      */
-    public static function addUserStartCrown($userId, $periodNum, $starCrown) {
+    public static function addUserStarCrown($userId, $periodNum, $starCrown) {
         // 先从已存在的会员池里面获取
-        $data = Yii::$app->redis->hget(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum, $userId);
+        $data = Yii::$app->redis->hget(self::REDIS_KEY_PREFIX_BONUS_CROWN_CROWN_LIST_DATA . $periodNum, $userId);
         if (!$data) {
-            Yii::$app->redis->hset(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum, $userId, $starCrown);
+            Yii::$app->redis->hset(self::REDIS_KEY_PREFIX_BONUS_CROWN_CROWN_LIST_DATA . $periodNum, $userId, $starCrown);
         }
 
         unset($userId, $periodNum, $saveData, $isset);
@@ -632,8 +632,8 @@ class CalcCache {
      * @param $periodNum
      * @return array
      */
-    public static function getUserStartCrown($userId, $periodNum) {
-        return Yii::$app->redis->hget(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum, $userId);
+    public static function getUserStarCrown($userId, $periodNum) {
+        return Yii::$app->redis->hget(self::REDIS_KEY_PREFIX_BONUS_CROWN_CROWN_LIST_DATA . $periodNum, $userId);
     }
 
     /**
@@ -800,7 +800,7 @@ class CalcCache {
                 throw new \Exception('用户信息表数据不存在,userId:'.$userId);
             }
             // 在获取商城库的会员的级别信息和是否报单中心的会员
-            $userShopInfo = User::find()->select('REAL_NAME,LAST_DEC_LV,DEC_LV,EMP_LV,STAR_LV,IS_DEC,DEC_ID,DEC_ROLE_ID,STATUS,PERIOD_AT,MOBILE,CREATED_AT,SUB_COM_ID,PROVINCE,CITY,COUNTY,DEC_PROVINCE,DEC_CITY,DEC_COUNTY,IS_DIRECT_SELLER,SUB_COM_LEADER')->where('ID=:ID', [':ID' => $userId])->asArray()->one();
+            $userShopInfo = User::find()->select('REAL_NAME,LAST_DEC_LV,DEC_LV,EMP_LV,CROWN_LV,IS_DEC,DEC_ID,DEC_ROLE_ID,STATUS,PERIOD_AT,MOBILE,CREATED_AT,SUB_COM_ID,PROVINCE,CITY,COUNTY,DEC_PROVINCE,DEC_CITY,DEC_COUNTY,IS_DIRECT_SELLER,SUB_COM_LEADER')->where('ID=:ID', [':ID' => $userId])->asArray()->one();
             if ( !$userShopInfo ) {
                 throw new \Exception('用户表数据不存在,userId:'.$userId);
             }
@@ -809,7 +809,7 @@ class CalcCache {
             //先用last_dec_lv
             $userInfo['DEC_LV'] = $userShopInfo['LAST_DEC_LV'];
             $userInfo['EMP_LV'] = $userShopInfo['EMP_LV'];
-            $userInfo['STAR_LV'] = $userShopInfo['STAR_LV'];
+            $userInfo['CROWN_LV'] = $userShopInfo['CROWN_LV'];
             $userInfo['IS_DEC'] = $userShopInfo['IS_DEC'];
             $userInfo['DEC_ID'] = $userShopInfo['DEC_ID'];
             $userInfo['DEC_ROLE_ID'] = $userShopInfo['DEC_ROLE_ID'];
@@ -848,8 +848,8 @@ class CalcCache {
             if (!$userInfo['EMP_LV']) {
                 $userInfo['EMP_LV'] = EmployLevel::getDefaultLevelId();
             }
-            if (!$userInfo['STAR_LV']) {
-                $userInfo['STAR_LV'] = StarCrownLevel::getDefaultLevelId();
+            if (!$userInfo['CROWN_LV']) {
+                $userInfo['CROWN_LV'] = StarCrownLevel::getDefaultLevelId();
             }
             $data = Json::encode($userInfo);
             Yii::$app->redis->hset($key, $userId, $data);

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

@@ -620,13 +620,13 @@ class Balance {
             } elseif (strtolower($type) == 'lx') {
                 FlowLX::insertOne($flowInsertData);
             } elseif (strtolower($type) == 'tourism_points') {
-                $flowInsertData['LAST_STAR_LV'] = $userInfo['LAST_STAR_LV'];
+                $flowInsertData['LAST_CROWN_LV'] = $userInfo['LAST_CROWN_LV'];
                 FlowTourismPoints::insertOne($flowInsertData);
             } elseif (strtolower($type) == 'garage_points') {
-                $flowInsertData['LAST_STAR_LV'] = $userInfo['LAST_STAR_LV'];
+                $flowInsertData['LAST_CROWN_LV'] = $userInfo['LAST_CROWN_LV'];
                 FlowGaragePoints::insertOne($flowInsertData);
             } elseif (strtolower($type) == 'villa_points') {
-                $flowInsertData['LAST_STAR_LV'] = $userInfo['LAST_STAR_LV'];
+                $flowInsertData['LAST_CROWN_LV'] = $userInfo['LAST_CROWN_LV'];
                 FlowVillaPoints::insertOne($flowInsertData);
             }
 

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

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

+ 1 - 1
common/libs/logging/operate/valueType/Config.php

@@ -16,7 +16,7 @@ class Config{
     const AREA_TYPE = 'area';
     const EMP_LV_TYPE = 'emp_lv';
     const DEC_LV_TYPE = 'dec_lv';
-    const STAR_LV_TYPE = 'star_lv';
+    const CROWN_LV_TYPE = 'crown_lv';
     const DEC_ROLE_ID_TYPE = 'dec_role_id';
     const USER_SYSTEM_TYPE = 'user_system';
     const STATUS_TYPE = 'status';

+ 11 - 3
common/models/ApproachOrderCall.php

@@ -9,8 +9,10 @@ use Yii;
  * This is the model class for collection "ar_approach_order_call".
  *
  * @property \MongoDB\BSON\ObjectID|string $_id
- * @property mixed $event
- * @property mixed $data
+ * @property string $sn 订单号
+ * @property string $reference 支付唯一凭证
+ * @property mixed $event 事件
+ * @property mixed $data 回调内容
 
  */
 class ApproachOrderCall extends MongoActiveRecord
@@ -44,7 +46,10 @@ class ApproachOrderCall extends MongoActiveRecord
     public function attributes()
     {
         return [
-            'id',
+            '_id',
+            'sn',
+            'reference',
+            'event',
             'data',
         ];
     }
@@ -55,6 +60,9 @@ class ApproachOrderCall extends MongoActiveRecord
     public function attributeLabels()
     {
         return [
+            '_id' => 'objectID',
+            'sn' => 'orderSn',
+            'reference' => 'reference',
             'event' => 'event',
             'data' => 'data',
         ];

+ 8 - 6
common/models/Article.php

@@ -12,6 +12,7 @@ use Yii;
  * @property string $CID 分类ID
  * @property string $CONTENT 内容
  * @property int $STATUS 状态
+ * @property int $SORT 排序值
  * @property int $CREATED_AT 创建时间
  */
 class Article extends \common\components\ActiveRecord
@@ -31,7 +32,7 @@ class Article extends \common\components\ActiveRecord
     {
         return [
             [['CID', 'CREATED_AT'], 'required'],
-            [['STATUS', 'CREATED_AT'], 'integer'],
+            [['STATUS', 'CREATED_AT', 'SORT'], 'integer'],
             [['ID', 'CID'], 'string', 'max' => 32],
             [['TITLE'], 'string', 'max' => 255],
             [['CONTENT'], 'string', 'max' => 4000],
@@ -47,11 +48,12 @@ class Article extends \common\components\ActiveRecord
     {
         return [
             'ID' => 'ID',
-            'TITLE' => '标题',
-            'CID' => '分类ID',
-            'CONTENT' => '内容',
-            'STATUS' => '状态',
-            'CREATED_AT' => '创建时间',
+            'TITLE' => 'Title', // 标题
+            'CID' => 'Category Type', // 分类
+            'CONTENT' => 'Content', // 内容
+            'STATUS' => 'State', // 状态
+            'Order' => 'Sort', // 排序
+            'CREATED_AT' => 'Creation Time', // 创建时间
         ];
     }
 }

+ 3 - 3
common/models/CalcBonus.php

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

+ 3 - 3
common/models/CalcBonusGarage.php

@@ -11,7 +11,7 @@ use Yii;
  * @property string $USER_ID 会员ID
  * @property string $LAST_DEC_LV 结算时会员级别
  * @property string $LAST_EMP_LV 结算时会员聘级
- * @property string $LAST_STAR_LV 结算时会员星级
+ * @property string $LAST_CROWN_LV 结算时会员星级
  * @property int $LAST_STATUS 结算时状态
  * @property string $AMOUNT 奖金金额
  * @property string $POINT 会员提点
@@ -46,7 +46,7 @@ class CalcBonusGarage extends \common\components\ActiveRecord
             [['USER_ID', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'POINT'], 'number'],
             [['LAST_STATUS', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'CREATED_AT'], 'integer'],
-            [['ID', 'USER_ID', 'LAST_DEC_LV', 'BONUS_TYPE', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'LAST_DEC_LV', 'BONUS_TYPE', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['P_CALC_MONTH'], 'safe'],
             [['LOGS'], 'string', 'max' => 2000],
             [['ID'], 'unique'],
@@ -63,7 +63,7 @@ class CalcBonusGarage extends \common\components\ActiveRecord
             'USER_ID' => '会员ID',
             'LAST_DEC_LV' => '结算时会员级别',
             'LAST_EMP_LV' => '结算时会员聘级',
-            'LAST_STAR_LV' => '结算时会员星级',
+            'LAST_CROWN_LV' => '结算时会员星级',
             'LAST_STATUS' => '结算时状态',
             'AMOUNT' => '奖金金额',
             'POINT' => '奖金比例',

+ 3 - 3
common/models/CalcBonusQY.php

@@ -41,7 +41,7 @@ class CalcBonusQY extends \common\components\ActiveRecord
             [['USER_ID', 'PERIOD_NUM', 'CALC_MONTH', 'CALCULATED_AT', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'ORI_BONUS', 'RECONSUME_POINTS', 'MANAGE_TAX'], 'number'],
             [['LAST_STATUS', 'PERIOD_NUM', 'CALC_MONTH', 'CALCULATED_AT', 'CREATED_AT'], 'integer'],
-            [['ID', 'USER_ID', 'LAST_DEC_LV', 'LAST_EMP_LV', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'LAST_DEC_LV', 'LAST_EMP_LV', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['LOGS'], 'string', 'max' => 2000],
             [['ID'], 'unique'],
         ];
@@ -57,7 +57,7 @@ class CalcBonusQY extends \common\components\ActiveRecord
             'USER_ID' => '会员ID',
             'LAST_DEC_LV' => '结算时会员级别',
             'LAST_EMP_LV' => '结算时会员聘级',
-            'LAST_STAR_LV' => '结算时会员星级',
+            'LAST_CROWN_LV' => '结算时会员星级',
             'LAST_STATUS' => '结算时状态',
             'AMOUNT' => '金额',
             'PERIOD_NUM' => '结算期数',
@@ -73,6 +73,6 @@ class CalcBonusQY extends \common\components\ActiveRecord
 
     public function getStarCrown()
     {
-        return $this->hasOne(StarCrownLevel::class, ['ID' => 'LAST_STAR_LV']);
+        return $this->hasOne(StarCrownLevel::class, ['ID' => 'LAST_CROWN_LV']);
     }
 }

+ 3 - 3
common/models/CalcBonusTourism.php

@@ -11,7 +11,7 @@ use Yii;
  * @property string $USER_ID 会员ID
  * @property string $LAST_DEC_LV 结算时会员级别
  * @property string $LAST_EMP_LV 结算时会员聘级
- * @property string $LAST_STAR_LV 结算时会员星级
+ * @property string $LAST_CROWN_LV 结算时会员星级
  * @property int $LAST_STATUS 结算时状态
  * @property string $AMOUNT 奖金金额
  * @property string $POINT 奖金比例
@@ -46,7 +46,7 @@ class CalcBonusTourism extends \common\components\ActiveRecord
             [['USER_ID', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'POINT'], 'number'],
             [['LAST_STATUS', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'CREATED_AT'], 'integer'],
-            [['ID', 'USER_ID', 'LAST_DEC_LV', 'BONUS_TYPE', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'LAST_DEC_LV', 'BONUS_TYPE', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['P_CALC_MONTH'], 'safe'],
             [['LOGS'], 'string', 'max' => 2000],
             [['ID'], 'unique'],
@@ -63,7 +63,7 @@ class CalcBonusTourism extends \common\components\ActiveRecord
             'USER_ID' => '会员ID',
             'LAST_DEC_LV' => '结算时会员级别',
             'LAST_EMP_LV' => '结算时会员聘级',
-            'LAST_STAR_LV' => '结算时会员星级',
+            'LAST_CROWN_LV' => '结算时会员星级',
             'LAST_STATUS' => '结算时状态',
             'AMOUNT' => '奖金金额',
             'POINT' => '奖金比例',

+ 3 - 3
common/models/CalcBonusVilla.php

@@ -11,7 +11,7 @@ use Yii;
  * @property string $USER_ID 会员ID
  * @property string $LAST_DEC_LV 结算时会员级别
  * @property string $LAST_EMP_LV 结算时会员聘级
- * @property string $LAST_STAR_LV 结算时会员星级
+ * @property string $LAST_CROWN_LV 结算时会员星级
  * @property int $LAST_STATUS 结算时状态
  * @property string $AMOUNT 奖金金额
  * @property string $POINT 会员提点
@@ -46,7 +46,7 @@ class CalcBonusVilla extends \common\components\ActiveRecord
             [['USER_ID', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'POINT'], 'number'],
             [['LAST_STATUS', 'PERIOD_NUM', 'CALC_YEAR', 'CALC_MONTH', 'CREATED_AT'], 'integer'],
-            [['ID', 'USER_ID', 'LAST_DEC_LV', 'BONUS_TYPE', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'LAST_DEC_LV', 'BONUS_TYPE', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['P_CALC_MONTH'], 'safe'],
             [['LOGS'], 'string', 'max' => 2000],
             [['ID'], 'unique'],
@@ -63,7 +63,7 @@ class CalcBonusVilla extends \common\components\ActiveRecord
             'USER_ID' => '会员ID',
             'LAST_DEC_LV' => '结算时会员级别',
             'LAST_EMP_LV' => '结算时会员聘级',
-            'LAST_STAR_LV' => '结算时会员星级',
+            'LAST_CROWN_LV' => '结算时会员星级',
             'LAST_STATUS' => '结算时状态',
             'AMOUNT' => '奖金金额',
             'POINT' => '奖金比例',

+ 1 - 1
common/models/FlowGaragePoints.php

@@ -48,7 +48,7 @@ class FlowGaragePoints extends \common\components\ActiveRecord
             [['USER_ID', 'REMARK', 'PERIOD_NUM', 'CALC_MONTH', 'P_MONTH', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'TOTAL'], 'number'],
             [['IS_INCR', 'PERIOD_NUM', 'CALC_MONTH', 'CREATED_AT', 'DELETED', 'DELETED_AT', 'SORT'], 'integer'],
-            [['ID', 'USER_ID', 'CALC_ID', 'ADMIN_NAME', 'TRANSFER_SN', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'CALC_ID', 'ADMIN_NAME', 'TRANSFER_SN', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['REMARK'], 'string', 'max' => 255],
             [['ID'], 'unique'],
         ];

+ 1 - 1
common/models/FlowTourismPoints.php

@@ -48,7 +48,7 @@ class FlowTourismPoints extends \common\components\ActiveRecord
             [['USER_ID', 'REMARK', 'PERIOD_NUM', 'CALC_MONTH', 'P_MONTH', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'TOTAL'], 'number'],
             [['IS_INCR', 'PERIOD_NUM', 'CALC_MONTH', 'CREATED_AT', 'DELETED', 'DELETED_AT', 'SORT'], 'integer'],
-            [['ID', 'USER_ID', 'CALC_ID', 'ADMIN_NAME', 'TRANSFER_SN', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'CALC_ID', 'ADMIN_NAME', 'TRANSFER_SN', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['REMARK'], 'string', 'max' => 255],
             [['ID'], 'unique'],
         ];

+ 1 - 1
common/models/FlowVillaPoints.php

@@ -48,7 +48,7 @@ class FlowVillaPoints extends \common\components\ActiveRecord
             [['USER_ID', 'REMARK', 'PERIOD_NUM', 'CALC_MONTH', 'P_MONTH', 'CREATED_AT'], 'required'],
             [['AMOUNT', 'TOTAL'], 'number'],
             [['IS_INCR', 'PERIOD_NUM', 'CALC_MONTH', 'CREATED_AT', 'DELETED', 'DELETED_AT', 'SORT'], 'integer'],
-            [['ID', 'USER_ID', 'CALC_ID', 'ADMIN_NAME', 'TRANSFER_SN', 'LAST_STAR_LV'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'CALC_ID', 'ADMIN_NAME', 'TRANSFER_SN', 'LAST_CROWN_LV'], 'string', 'max' => 32],
             [['REMARK'], 'string', 'max' => 255],
             [['ID'], 'unique'],
         ];

+ 13 - 13
common/models/StarCrownLevel.php

@@ -7,7 +7,7 @@ use common\helpers\LoggerTool;
 use Yii;
 
 /**
- * This is the model class for table "{{%STAR_LEVEL}}".
+ * This is the model class for table "{{%CROWN_LEVEL}}".
  *
  * @property string $ID
  * @property string $LEVEL_NAME 级别名称
@@ -34,7 +34,7 @@ class StarCrownLevel extends \common\components\ActiveRecord
      */
     public static function tableName()
     {
-        return '{{%STAR_LEVEL}}';
+        return '{{%CROWN_LEVEL}}';
     }
 
     /**
@@ -111,7 +111,7 @@ class StarCrownLevel extends \common\components\ActiveRecord
      */
     public static function getIdConvertLevelSortCache()
     {
-        $key = Cache::STAR_LEVEL_CONFIG_KEY . ':idsort';
+        $key = Cache::CROWN_LEVEL_CONFIG_KEY . ':idsort';
         $data = Yii::$app->cache->get($key);
         if(!$data){
             // 获取信息
@@ -128,11 +128,11 @@ class StarCrownLevel extends \common\components\ActiveRecord
      */
     public static function getFromCache()
     {
-        $data = Yii::$app->cache->get(Cache::STAR_LEVEL_CONFIG_KEY);
+        $data = Yii::$app->cache->get(Cache::CROWN_LEVEL_CONFIG_KEY);
         if(!$data){
             // 获取信息
             $data = self::getAllData();
-            Yii::$app->cache->set(Cache::STAR_LEVEL_CONFIG_KEY, $data);
+            Yii::$app->cache->set(Cache::CROWN_LEVEL_CONFIG_KEY, $data);
         }
         return $data;
     }
@@ -145,7 +145,7 @@ class StarCrownLevel extends \common\components\ActiveRecord
     {
         // 获取配置
         $data = self::getAllData();
-        Yii::$app->cache->set(Cache::STAR_LEVEL_CONFIG_KEY, $data);
+        Yii::$app->cache->set(Cache::CROWN_LEVEL_CONFIG_KEY, $data);
         return $data;
     }
 
@@ -156,12 +156,12 @@ class StarCrownLevel extends \common\components\ActiveRecord
      */
     public static function getLevelFromSort(int $sort)
     {
-        static $starLevels;
-        if(!$starLevels){
-            $starLevels = self::getFromCache();
-            $starLevels = array_column($starLevels, null, 'sort');
+        static $crownLevels;
+        if(!$crownLevels){
+            $crownLevels = self::getFromCache();
+            $crownLevels = array_column($crownLevels, null, 'sort');
         }
-        return $starLevels[$sort];
+        return $crownLevels[$sort];
     }
 
     /**
@@ -191,8 +191,8 @@ class StarCrownLevel extends \common\components\ActiveRecord
      */
     public static function getSortById($id)
     {
-        $starLevels = self::getFromCache();
-        return $starLevels[$id]['SORT'] ?? 0;
+        $crownLevels = self::getFromCache();
+        return $crownLevels[$id]['SORT'] ?? 0;
     }
 
     /**

+ 6 - 6
common/models/StarCrownLevelForm.php

@@ -44,12 +44,12 @@ class StarCrownLevelForm extends Model
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             foreach ($postData as $value) {
-                $starLevelModel = StarCrownLevel::findOne(['ID' => $value['ID']]);
-                if ($starLevelModel) {
-                    $starLevelModel->TOURISM_PERCENT = $value['TOURISM_PERCENT'];
-                    $starLevelModel->GARAGE_PERCENT = $value['GARAGE_PERCENT'];
-                    if (!$starLevelModel->save()) {
-                        throw new \Exception(Form::formatErrorsForApi($starLevelModel->getErrors()));
+                $crownLevelModel = StarCrownLevel::findOne(['ID' => $value['ID']]);
+                if ($crownLevelModel) {
+                    $crownLevelModel->TOURISM_PERCENT = $value['TOURISM_PERCENT'];
+                    $crownLevelModel->GARAGE_PERCENT = $value['GARAGE_PERCENT'];
+                    if (!$crownLevelModel->save()) {
+                        throw new \Exception(Form::formatErrorsForApi($crownLevelModel->getErrors()));
                     }
                 }
             }

+ 8 - 8
common/models/User.php

@@ -38,7 +38,7 @@ use common\libs\logging\operate\valueType\Config as ValueTypeConfig;
  * @property int $DEC_CLOSED_AT 关闭时间
  * @property string $DEC_LV 报单级别
  * @property string $EMP_LV 聘级
- * @property string $STAR_LV 星级
+ * @property string $CROWN_LV 星级
  * @property int $PROVINCE 省份
  * @property int $CITY 城市
  * @property int $COUNTY 县区
@@ -114,7 +114,7 @@ class User extends \common\components\ActiveRecord
             [['USER_NAME', 'PASSWORD_HASH', 'PAY_PASSWORD', 'REAL_NAME', 'ID_CARD', 'AVATAR'], 'required'],
             [['NATION', 'ID_TYPE', 'BANK_PROVINCE', 'BANK_CITY', 'BANK_COUNTY', 'CREATED_AT', 'UPDATED_AT', 'STATUS', 'DEC_CLOSED', 'DEC_CLOSED_AT', 'PROVINCE', 'CITY', 'COUNTY', 'DELETED', 'DELETED_AT', 'IS_DEC', 'IS_ATLAS', 'IS_RECHARGE','IS_STUDIO',  'PERIOD_AT', 'DEC_PROVINCE', 'DEC_CITY', 'DEC_COUNTY', 'IS_UNION', 'STATUS_AT', 'VERIFIED', 'VERIFIED_AT', 'ALLOW_LOGIN', 'NOT_OPERATING', 'REG_FROM', 'BANK_UPDATED_AT', 'IS_DIRECT_SELLER', 'DEC_LV_UPDATED_AT', 'DEC_LV_UPDATED_PERIOD', 'PART_FUNC_CLOSED', 'LAST_DEC_LV_UPDATED_PERIOD', 'LAST_DEC_LV_UPDATED_AT', 'DEC_CREATED_AT', 'DEC_CREATED_PERIOD', 'PASSWORD_CHANGED', 'SUB_COM_LEADER', 'READ_AGREEMENT', 'IS_FIRST_OPEN', 'IS_MODIFY_PASSWORD'], 'integer'],
             [['ZG_UPGRADE_PV'], 'number'],
-            [['ID', 'OPEN_BANK', 'BANK_NO', 'DEC_LV', 'EMP_LV', 'STAR_LV', 'SUB_COM_ID', 'DEC_ID', 'DEC_ROLE_ID', 'ID_CARD_PREFIX', 'SEX', 'DEC_PHONE', 'GUARANTOR', 'USER_CREATOR', 'USER_UPDATER', 'LAST_DEC_LV', 'EMAIL'], 'string', 'max' => 32],
+            [['ID', 'OPEN_BANK', 'BANK_NO', 'DEC_LV', 'EMP_LV', 'CROWN_LV', 'SUB_COM_ID', 'DEC_ID', 'DEC_ROLE_ID', 'ID_CARD_PREFIX', 'SEX', 'DEC_PHONE', 'GUARANTOR', 'USER_CREATOR', 'USER_UPDATER', 'LAST_DEC_LV', 'EMAIL'], 'string', 'max' => 32],
             [['USER_NAME', 'SPOUSE_NAME', 'TEL'], 'string', 'max' => 16],
             [['PASSWORD_HASH', 'PAY_PASSWORD', 'ID_IMAGE', 'BANK_ADDRESS', 'AVATAR'], 'string', 'max' => 255],
             [['REAL_NAME', 'APP_CLIENT_ID', 'BONUS_APP_CLIENT_ID'], 'string', 'max' => 128],
@@ -160,7 +160,7 @@ class User extends \common\components\ActiveRecord
             'DEC_CLOSED_AT' => '关闭时间',
             'DEC_LV' => '报单级别',
             'EMP_LV' => '聘级',
-            'STAR_LV' => '星级',
+            'CROWN_LV' => '星级',
             'PROVINCE' => '省份',
             'CITY' => '城市',
             'COUNTY' => '县区',
@@ -241,7 +241,7 @@ class User extends \common\components\ActiveRecord
     public static function getBaseInfoFromRedis($userId){
         $userInfo = Yii::$app->redis->hget(Cache::USER_INFO_KEY, $userId);
         if(!$userInfo){
-            $userInfo = static::find()->select('ID,USER_NAME,NATION,REAL_NAME,ID_CARD,ID_TYPE,MOBILE,ADDRESS,STATUS,DEC_LV,LAST_DEC_LV,EMP_LV,STAR_LV,DEC_CLOSED,AVATAR,OPEN_BANK,BANK_ADDRESS,BANK_NO,VERIFIED,IS_UNION,IS_DEC,IS_ATLAS,IS_RECHARGE,IS_STUDIO,DEC_ROLE_ID,PROVINCE,CITY,COUNTY,EMAIL')->where('ID=:ID', [':ID'=>$userId])->asArray()->one();
+            $userInfo = static::find()->select('ID,USER_NAME,NATION,REAL_NAME,ID_CARD,ID_TYPE,MOBILE,ADDRESS,STATUS,DEC_LV,LAST_DEC_LV,EMP_LV,CROWN_LV,DEC_CLOSED,AVATAR,OPEN_BANK,BANK_ADDRESS,BANK_NO,VERIFIED,IS_UNION,IS_DEC,IS_ATLAS,IS_RECHARGE,IS_STUDIO,DEC_ROLE_ID,PROVINCE,CITY,COUNTY,EMAIL')->where('ID=:ID', [':ID'=>$userId])->asArray()->one();
             Yii::$app->redis->hset(Cache::USER_INFO_KEY, $userId, Json::encode($userInfo));
         } else {
             $userInfo = Json::decode($userInfo);
@@ -255,7 +255,7 @@ class User extends \common\components\ActiveRecord
      * @return mixed
      */
     public static function updateBaseInfoToRedis($userId){
-        $userInfo = static::find()->select('ID,USER_NAME,NATION,REAL_NAME,ID_CARD,ID_TYPE,MOBILE,ADDRESS,STATUS,DEC_LV,LAST_DEC_LV,EMP_LV,STAR_LV,DEC_CLOSED,AVATAR,OPEN_BANK,BANK_ADDRESS,BANK_NO,VERIFIED,IS_UNION,IS_DEC,IS_ATLAS,IS_RECHARGE,IS_STUDIO,DEC_ROLE_ID,PROVINCE,CITY,COUNTY,EMAIL')->where('ID=:ID', [':ID'=>$userId])->asArray()->one();
+        $userInfo = static::find()->select('ID,USER_NAME,NATION,REAL_NAME,ID_CARD,ID_TYPE,MOBILE,ADDRESS,STATUS,DEC_LV,LAST_DEC_LV,EMP_LV,CROWN_LV,DEC_CLOSED,AVATAR,OPEN_BANK,BANK_ADDRESS,BANK_NO,VERIFIED,IS_UNION,IS_DEC,IS_ATLAS,IS_RECHARGE,IS_STUDIO,DEC_ROLE_ID,PROVINCE,CITY,COUNTY,EMAIL')->where('ID=:ID', [':ID'=>$userId])->asArray()->one();
         return Yii::$app->redis->hset(Cache::USER_INFO_KEY, $userId, Json::encode($userInfo));
     }
 
@@ -354,7 +354,7 @@ class User extends \common\components\ActiveRecord
             'BANK_ADDRESS' => $userInfo['BANK_ADDRESS'],
             'DEC_LV' => $userInfo['DEC_LV'],
             'EMP_LV' => $userInfo['EMP_LV'],
-            'STAR_LV' => $userInfo['STAR_LV'],
+            'CROWN_LV' => $userInfo['CROWN_LV'],
             'PROVINCE' => $userInfo['PROVINCE'],
             'CITY' => $userInfo['CITY'],
             'COUNTY' => $userInfo['COUNTY'],
@@ -464,9 +464,9 @@ class User extends \common\components\ActiveRecord
                 'label' => '聘级',
                 'type' => ValueTypeConfig::EMP_LV_TYPE,
             ],
-            'STAR_LV' => [
+            'CROWN_LV' => [
                 'label' => '星级',
-                'type' => ValueTypeConfig::STAR_LV_TYPE,
+                'type' => ValueTypeConfig::CROWN_LV_TYPE,
             ],
             'LAST_DEC_LV' => [
                 'label' => '上次的报单级别',

+ 2 - 2
common/models/UserNetwork.php

@@ -261,7 +261,7 @@ class UserNetwork extends \common\components\ActiveRecord
         if($allData){
             $decLevelConfig = Cache::getDecLevelConfig();
             $empLevelConfig = Cache::getEmpLevelConfig();
-            $starLevelConfig = Cache::getStarCrownLevelConfig();
+            $crownLevelConfig = Cache::getStarCrownLevelConfig();
             foreach($allData as $key=>$data){
                 // 获取用户的基本信息
                 $baseInfo = Info::baseInfo($data['USER_ID'], $periodNum);
@@ -272,7 +272,7 @@ class UserNetwork extends \common\components\ActiveRecord
                     'REAL_NAME' => $baseInfo['REAL_NAME'],
                     'DEC_LV_NAME' => $decLevelConfig[$baseInfo['DEC_LV']]['LEVEL_NAME'],
                     'EMP_LV_NAME' => isset($empLevelConfig[$baseInfo['EMP_LV']])?$empLevelConfig[$baseInfo['EMP_LV']]['LEVEL_NAME']:'',
-                    'STAR_LV_NAME' => isset($starLevelConfig[$baseInfo['STAR_LV']])?$starLevelConfig[$baseInfo['STAR_LV']]['LEVEL_NAME']:'',
+                    'CROWN_LV_NAME' => isset($crownLevelConfig[$baseInfo['CROWN_LV']])?$crownLevelConfig[$baseInfo['CROWN_LV']]['LEVEL_NAME']:'',
 //                    'MOBILE' => $baseInfo['MOBILE'],
                     'PERIOD_AT' => $baseInfo['PERIOD_AT'],
                 ]);

+ 2 - 2
common/models/UserRelation.php

@@ -205,7 +205,7 @@ class UserRelation extends \common\components\ActiveRecord
         if($allData){
             $decLevelConfig = Cache::getDecLevelConfig();
             $empLevelConfig = Cache::getEmpLevelConfig();
-            $starLevelConfig = Cache::getStarCrownLevelConfig();
+            $crownLevelConfig = Cache::getStarCrownLevelConfig();
             foreach($allData as $key=>$data){
                 // 获取用户的基本信息
                 $baseInfo = Info::baseInfo($data['USER_ID'], $periodNum);
@@ -215,7 +215,7 @@ class UserRelation extends \common\components\ActiveRecord
                     'REAL_NAME' => $baseInfo['REAL_NAME'],
                     'DEC_LV_NAME' => $decLevelConfig[$baseInfo['DEC_LV']]['LEVEL_NAME'],
                     'EMP_LV_NAME' => isset($empLevelConfig[$baseInfo['EMP_LV']])?$empLevelConfig[$baseInfo['EMP_LV']]['LEVEL_NAME']:'',
-                    'STAR_LV_NAME' => isset($starLevelConfig[$baseInfo['STAR_LV']])?$starLevelConfig[$baseInfo['STAR_LV']]['LEVEL_NAME']:'',
+                    'CROWN_LV_NAME' => isset($crownLevelConfig[$baseInfo['CROWN_LV']])?$crownLevelConfig[$baseInfo['CROWN_LV']]['LEVEL_NAME']:'',
                     'PERIOD_AT' => $baseInfo['PERIOD_AT'],
                 ]);
                 // 获取字节点数量

+ 29 - 6
common/models/forms/ArticleForm.php

@@ -16,6 +16,7 @@ class ArticleForm extends Model
     public $id;
     public $title;
     public $cid;
+    public $sort;
     public $content;
 
     /**
@@ -36,9 +37,10 @@ class ArticleForm extends Model
     {
         return [
             'id' => 'ID',
-            'title' => '标题',
-            'cid' => '分类',
-            'content' => '内容',
+            'title' => 'Title',//标题
+            'cid' => 'Type', // 分类
+            'content' => 'Content', // 内容
+            'sort' => 'Sort', // 排序
         ];
     }
 
@@ -50,8 +52,9 @@ class ArticleForm extends Model
     {
         $parentScenarios =  parent::scenarios();
         $customScenarios = [
-            'add' => ['title', 'cid', 'content'],
-            'edit' => ['id','title', 'cid', 'content'],
+            'add' => ['title', 'cid', 'content', 'sort'],
+            'edit' => ['id','title', 'cid', 'content', 'sort'],
+            'sort' => ['id', 'sort'],
         ];
         return array_merge($parentScenarios, $customScenarios);
     }
@@ -73,14 +76,17 @@ class ArticleForm extends Model
                 $model->CREATED_AT = Date::nowTime();
             } elseif($this->scenario == 'edit') {
                 $model = Article::findOne(['ID'=>$this->id]);
+            }  elseif($this->scenario == 'sort') {
+                $model = Article::findOne(['ID'=>$this->id]);
             } else {
-                $this->addError('edit', '提交场景不存在');
+                $this->addError('edit', 'Scenario not exists');// 提交场景不存在
                 return null;
             }
             $model->TITLE = $this->title;
             $model->CID = $this->cid;
             $model->CONTENT = '';
             $model->STATUS = 1;
+            $model->SORT = $this->sort;
             if(!$model->save()){
                 throw new Exception(Form::formatErrorsForApi($model->getErrors()));
             }
@@ -96,5 +102,22 @@ class ArticleForm extends Model
         return $model;
     }
 
+    /**
+     * 排序
+     * @return Article
+     */
+    public function sortTo(): ?Article
+    {
+        if (!$this->validate()) {
+            return null;
+        }
 
+        $model = Article::findOne(['ID' => $this->id]);
+        $model->SORT = $this->sort;
+        if (!$model->save()) {
+            $this->addError('sortTo', Form::formatErrorsForApi($model->getErrors()));
+            return null;
+        }
+        return $model;
+    }
 }

+ 14 - 14
common/models/forms/OrderForm.php

@@ -92,25 +92,25 @@ class OrderForm extends Model
     public function attributeLabels()
     {
         return [
-            'sn' => '订单号',
+            'sn' => 'Order Code', // 订单号
             'expressCompany' => '快递公司',
             'orderTrackNo' => '快递单号',
-            'status' => '状态',
-            'remark' => '备注',
-            'type' => '订单类型',
-            'addressId' => '收货地址',
-            'payType' => '支付方式',
-            'goodsId' => 'product ID',//商品ID
+            'status' => 'State', // 状态
+            'remark' => 'Remark', // 备注
+            'type' => 'Order Type',// 订单类型
+            'addressId' => 'Shipping address',// 收货地址
+            'payType' => 'Pay Typa',// 支付方式
+            'goodsId' => 'Product ID',//商品ID
             'goodsNum' => 'Product quantity',//商品数量
             'userName' => 'Repeat sales Member No. does not exist',//复消会员编号
-            'consignee' => '收货人',
-            'acceptMobile' => '收货电话',
-            'province' => '省',
-            'city' => '市',
-            'county' => '区',
-            'lgaName' => 'lga name',
+            'consignee' => 'Consignee',// 收货人
+            'acceptMobile' => 'Accept Mobile',// 收货电话
+            'province' => 'Province',// 省
+            'city' => 'City',// 市
+            'county' => 'County',// 区
+            'lgaName' => 'Lga Name',
             'cityName' => 'City Name',
-            'detailaddress' => '收货详细地址',
+            'detailaddress' => 'Address',// 收货详细地址
             'email' => 'Email',
         ];
     }

+ 7 - 3
common/models/forms/ShopGoodsForm.php

@@ -22,6 +22,7 @@ class ShopGoodsForm extends Model
     public $sellDiscount;
     public $giftType;
     public $sellType;
+    public $pvSplit;
     public $goodsNo;
     public $unit;
     public $taxRate;
@@ -73,7 +74,8 @@ class ShopGoodsForm extends Model
             'sellDiscount' => 'Discount Rate', // 会员折扣
             'giftType' => 'Product Type', // 商品类型
             'categoryType' => 'Product Category', // 商品分类
-            'sellType' => 'SellType', //出售方式
+            'sellType' => 'SellType', // 出售方式
+            'pvSplit' => 'PV Split', // pv分期
             'goodsNo' => 'Product Code', // 产品编号
             'unit' => 'Unit', // 单位
             'cover' => 'Cover',// 封面
@@ -97,8 +99,8 @@ class ShopGoodsForm extends Model
     {
         $parentScenarios =  parent::scenarios();
         $customScenarios = [
-            'add' => ['goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv','storeNums', 'content','sort','cover', 'categoryType', 'sellPriceStandard', 'taxRate', 'taxAmount'],
-            'edit' => ['id','goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv', 'storeNums', 'content','sort','cover', 'categoryType', 'sellPriceStandard', 'taxRate'],
+            'add' => ['goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv','storeNums', 'content','sort','cover', 'categoryType', 'sellPriceStandard', 'taxRate', 'taxAmount','pvSplit'],
+            'edit' => ['id','goodsName','sellDiscount','giftType', 'sellType','goodsNo','unit','sellPrice','marketPrice','pricePv', 'storeNums', 'content','sort','cover', 'categoryType', 'sellPriceStandard', 'taxRate','pvSplit'],
             'changeStatus' => ['selectedIds', 'status'],
         ];
         return array_merge($parentScenarios, $customScenarios);
@@ -198,6 +200,7 @@ class ShopGoodsForm extends Model
             $shopGoods->GIFT_TYPE = implode(',',$this->giftType);
 //             $shopGoods->SELL_TYPE = implode(',',$this->sellType);
             $shopGoods->SELL_TYPE = $this->sellType;
+            $shopGoods->PV_SPLIT = $this->pvSplit;
             $shopGoods->GOODS_NO = $this->goodsNo;
             $shopGoods->UNIT = $this->unit ? $this->unit : '个';
             $shopGoods->COVER = $this->cover ? $this->cover : '';
@@ -245,6 +248,7 @@ class ShopGoodsForm extends Model
             $model->GIFT_TYPE = implode(',',$this->giftType);
 //            $model->SELL_TYPE = implode(',',$this->sellType);
             $model->SELL_TYPE = $this->sellType;
+            $model->PV_SPLIT = $this->pvSplit;
             $model->GOODS_NO = $this->goodsNo;
             $model->UNIT = $this->unit ? $this->unit : '个';
             $model->COVER = $this->cover ? $this->cover : '';

+ 10 - 6
common/models/forms/UploadForm.php

@@ -9,6 +9,7 @@ use common\helpers\Excel;
 use common\helpers\Form;
 use common\helpers\http\RemoteUploadApi;
 use common\helpers\ocr\OcrApi;
+use common\helpers\Tool;
 use common\helpers\user\Info;
 use common\models\ExcelAddUser;
 use common\models\ExcelImport;
@@ -66,6 +67,7 @@ class UploadForm extends Model {
             'invoiceFront' => ['file', 'token', 'remark', 'withdrawId'],
             'proveFront' => ['file', 'token', 'rechargeId'],
             'ad' => ['file', 'token'],
+            'article' => ['file', 'token'],
             'excel' => ['file', 'token', 'excelOption'],
             'goodsImg' => ['file', 'token'],
         ];
@@ -170,21 +172,23 @@ class UploadForm extends Model {
                         'md5' => $uploadResult['md5'] ?? null,
                     ];
                 } else {
-                    throw new Exception('文件远程上传失败');
+                    throw new Exception('Remote service error');
                 }
                 // 删除本地临时文件
                 unlink($this->file->tempName);
             } else {
+                // 生成文件名
+                $fileName = Tool::generateId(false);
                 // 保存在本地
-                $localPath = \Yii::getAlias('@common/runtime/uploads/') . $this->file->baseName . '.' . $this->file->extension;
+                $localPath = \Yii::getAlias('@common/runtime/uploads/') . $fileName . '.' . $this->file->extension;
                 if (!$this->file->saveAs($localPath)) {
-                    throw new Exception('文件保存失败');
+                    throw new Exception('Failed');
                 }
                 $uploadInfo = [
-                    'fileName' => $this->file->baseName . '.' . $this->file->extension,
+                    'fileName' => $fileName . '.' . $this->file->extension,
                     'category' => $uploadCategory,
 //                    'url' => $localPath,
-                    'url' => $this->file->baseName . '.' . $this->file->extension,
+                    'url' => $fileName . '.' . $this->file->extension,
                     'fileSize' => null,
                     'md5' => null,
                 ];
@@ -200,7 +204,7 @@ class UploadForm extends Model {
             $uploads->REMARK = $uploadRemark;
             $uploads->CREATED_AT = Date::nowTime();
             if (!$uploads->save()) {
-                throw new Exception('上传文件信息保存失败');
+                throw new Exception('Save error');
             }
             // 如果是上传发票,更新发票信息,并绑定提现记录
             if ($this->scenario == 'invoiceFront') {

+ 1 - 1
frontendApi/modules/v1/controllers/ArticleController.php

@@ -90,7 +90,7 @@ class ArticleController extends BaseController
             }
             return static::notice($data);
         } else {
-            return static::notice('文章不存在', 400);
+            return static::notice('The article does not exist', 400);// 文章不存在
         }
     }
 }

+ 2 - 2
frontendApi/modules/v1/controllers/AtlasController.php

@@ -51,7 +51,7 @@ class AtlasController extends BaseController {
         $baseInfo = Info::baseInfo($userId, $periodNum);
         $decLevelConfig = Cache::getDecLevelConfig();
         $empLevelConfig = Cache::getEmpLevelConfig();
-        $starLevelConfig = Cache::getStarCrownLevelConfig();
+        $crownLevelConfig = Cache::getStarCrownLevelConfig();
         return static::notice([
             [
                 'TOP_RELATION_DEEP' => $baseInfo['RELATION_DEEP'],
@@ -62,7 +62,7 @@ class AtlasController extends BaseController {
                 'PERIOD_AT' => $baseInfo['PERIOD_AT'],
                 'DEC_LV_NAME' => $decLevelConfig[$baseInfo['DEC_LV']]['LEVEL_NAME'],
                 'EMP_LV_NAME' => $empLevelConfig[$baseInfo['EMP_LV']]['LEVEL_NAME'],
-                'STAR_LV_NAME' => $starLevelConfig[$baseInfo['STAR_LV']]['LEVEL_NAME'],
+                'CROWN_LV_NAME' => $crownLevelConfig[$baseInfo['CROWN_LV']]['LEVEL_NAME'],
                 'leaf' => false,
                 'icon' => 'el-icon-user-solid',
                 'children' => null,

+ 6 - 4
frontendApi/modules/v1/controllers/ShopController.php

@@ -146,7 +146,7 @@ class ShopController extends BaseController {
         if (\Yii::$app->request->isPost) {
             $formModel = new OrderForm();
             $formModel->scenario = 'userOrder';
-            $formModel->remark = '复销备注';
+            $formModel->remark = 'FX';//复销备注
             $post = \Yii::$app->request->post();
             $post['type'] = DeclarationForm::TYPE_FX;
             if ($formModel->load($post, '') && $order = $formModel->add()) {
@@ -196,9 +196,10 @@ class ShopController extends BaseController {
     public function actionVerifyApproachOrder() {
         if (\Yii::$app->request->isPost) {
             $request = \Yii::$app->request->post();
-            // TODO:支付webhook回调日志
-            LoggerTool::info($request);
-//            Tool::approachOrderCall($request);
+
+            // 支付webhook回调日志
+            Tool::approachOrderCall($request);
+
             try {
                 $data = $request['data'];
                 $status = $request['data']['status'] ?? 'false';
@@ -392,6 +393,7 @@ class ShopController extends BaseController {
 //                $data['list'][$key]['FULL_ADDRESS'] .= Region::getCnName($value['COUNTY']);
 //            }
             $data['list'][$key]['TAX_AMOUNT'] = Tool::formatPrice(($value['REAL_PRICE'] - $value['REAL_PRICE'] / (1 + $value['TAX_RATE'] / 100)) * $value['BUY_NUMS']);
+            $data['list'][$key]['TOTAL_AMOUNT'] = Tool::formatPrice($value['REAL_PRICE'] * $value['BUY_NUMS']);
         }
 
         return static::notice($data);

+ 1 - 1
frontendEle/src/components/Uploader.vue

@@ -94,7 +94,7 @@
     methods: {
       uploaderHandleBefore() {
         this.$message({
-          message: '正在上传,请稍后。请勿关闭窗口!',
+          message: 'Uploading, please hold on. Do not close the window!', // 正在上传,请稍后。请勿关闭窗口!
           type: 'warning',
           duration: 0,
         })

+ 5 - 5
frontendEle/src/views/article/list.vue

@@ -7,11 +7,11 @@
             <router-link :to="`/article/detail/${scope.row.ID}`">{{scope.row.TITLE}}</router-link>
           </template>
         </el-table-column>
-        <el-table-column label="Classification">
-          <template slot-scope="scope">
-            {{allData.allCategory[scope.row.CID].CATE_NAME}}
-          </template>
-        </el-table-column>
+<!--        <el-table-column label="Classification">-->
+<!--          <template slot-scope="scope">-->
+<!--            {{allData.allCategory[scope.row.CID].CATE_NAME}}-->
+<!--          </template>-->
+<!--        </el-table-column>-->
         <el-table-column label="Creation Time">
           <template slot-scope="scope">
             {{tool.formatDate(scope.row.CREATED_AT)}}

+ 16 - 14
frontendEle/src/views/atlas/network.vue

@@ -2,10 +2,10 @@
   <div v-loading="loading">
     <div class="white-box">
       <div class="filter-user" @keyup.enter="enterToGetData()" >
-        <el-input v-model="mainUserName" size="small" style="width:300px;">
+        <el-input v-model="mainUserName" size="small" style="width:300px;" class="top-member">
           <template slot="prepend">Top Member</template>
         </el-input>
-        <el-input v-model="expandDeep" size="small" style="width:200px;">
+        <el-input v-model="expandDeep" size="small" style="width:200px;" class="spread-depth">
           <template slot="prepend">Spread depth</template>
         </el-input>
         <el-input v-model="periodNum" size="small" style="width:150px;" v-show="false">
@@ -24,8 +24,8 @@
             <el-tag>Name: {{data.REAL_NAME}}</el-tag>
             <el-tag type="danger">Location: {{data.RELATIVE_LOCATION}}</el-tag>
             <el-tag type="success">Level: {{data.DEC_LV_NAME}}</el-tag>
-            <el-tag type="warning">Rank: {{data.EMP_LV_NAME}}, {{data.STAR_LV_NAME}}</el-tag>
-<!--            <el-tag type="warning">Star: {{data.STAR_LV_NAME}}</el-tag>-->
+            <el-tag type="warning">Rank: {{data.EMP_LV_NAME}}, {{data.CROWN_LV_NAME}}</el-tag>
+<!--            <el-tag type="warning">Star: {{data.CROWN_LV_NAME}}</el-tag>-->
             <el-tag>Joining Period: {{data.PERIOD_AT}}</el-tag>
           </span>
         </span>
@@ -52,11 +52,11 @@ export default {
     return {
       loading: true,
       tabActiveName: 'first',
-      //relation
+      // relation
       props: {
         label: 'USER_NAME',
         children: 'children',
-        //isLeaf: 'leaf',
+        // isLeaf: 'leaf',
         icon: 'icon',
       },
       treeData: null,
@@ -86,8 +86,8 @@ export default {
       this.$message({
         message: 'Retrieving data, please wait.', // 正在获取数据,请稍后
       })
-      //this.periodNum = baseInfo.nowPeriodNum()
-      //this.filterForm.periodNum = baseInfo.nowPeriodNum()
+      // this.periodNum = baseInfo.nowPeriodNum()
+      // this.filterForm.periodNum = baseInfo.nowPeriodNum()
       this.getMainData(null,true)
     },
     getMainData (userName = null, getList = false) {
@@ -106,7 +106,7 @@ export default {
         thisObj.treeData = response
         thisObj.topDeep = Number(response[0].TOP_NETWORK_DEEP)
         thisObj.listPeriodNum = response[0].listPeriodNum
-        if(getList) thisObj.getListData()
+        if (getList) thisObj.getListData()
         thisObj.loading = false
       }).catch(response => {
         thisObj.loading = false
@@ -137,8 +137,8 @@ export default {
         thisData.isExpanded = true
       })
     },
-    countTopDeep (deep,topDeep){
-      return Number(deep)-Number(topDeep)
+    countTopDeep (deep,topDeep) {
+      return Number(deep) - Number(topDeep)
     },
     handleCurrentChange (page) {
       this.getListData(page, this.pageSize)
@@ -164,9 +164,9 @@ export default {
       })
     },
     onMessageCallback (data) {
-      //this.getData(this.currentPage, this.pageSize, false)
+      // this.getData(this.currentPage, this.pageSize, false)
     },
-    handleExport (){
+    handleExport () {
       this.$confirm(`Are you sure you want to export the current data?`, 'Hint', { // 确定要导出当前数据吗?
         confirmButtonText: 'confirm', // 确定
         cancelButtonText: 'cancel', // 取消
@@ -188,11 +188,13 @@ export default {
 }
 </script>
 
-<style>
+<style scoped>
   .filter-user{font-size: 14px;margin-bottom: 20px;}
   .filter-user:after{content: '';display: table;
       clear: both;}
   .filter-user .el-input-group{float: left;margin-right: 15px;}
+  .filter-user >>> .el-input__inner{border: 1px solid #DCDFE6;width: 100%;background: none;border-radius: 0;float: right;display: block; }
+  .filter-user >>> .el-input-group__prepend{border-top: 1px solid #DCDFE6;border-left: 1px solid #DCDFE6;border-bottom: 1px solid #DCDFE6;border-right:none;}
   .el-tree {
       padding-bottom: 20px;
       font-size: 14px;

+ 2 - 2
frontendEle/src/views/config/receive-address-list.vue

@@ -16,11 +16,11 @@
           </template>
         </el-table-column>
 
-        <el-table-column fixed="right" label="Edit/Delete" width="180"><!-- 操作 -->
+        <el-table-column fixed="right" label="Action" width="180"><!-- 操作 -->
           <template slot-scope="scope">
             <el-dropdown size="small" trigger="click">
               <el-button type="primary" size="small" @click.stop="">
-                Edit/Delete<!-- 操作该数据 --><i class="el-icon-arrow-down el-icon--right"></i>
+                Action<!-- 操作该数据 --><i class="el-icon-arrow-down el-icon--right"></i>
 
               </el-button>
               <el-dropdown-menu slot="dropdown">

+ 1 - 1
frontendEle/src/views/finance/recharge-add.vue

@@ -3,7 +3,7 @@
         <div class="white-box">
             <el-form ref="form"  label-width="250px" class="form-page">
                 <el-form-item label="Recharge Amount">
-                    <el-input v-model="form.applyAmount" type="number" min="1" max="10000000000"></el-input>
+                    <el-input-number v-model="form.applyAmount" :min="1" :max="10000000000" label="" style="width: 400px"></el-input-number>
                 </el-form-item>
                 <el-form-item label="Bank account">
                     <el-input v-model="form.bankNo"></el-input>

+ 45 - 45
frontendEle/src/views/login/index.vue

@@ -1,40 +1,40 @@
 <template>
   <div class="login-wrapper">
     <div class="login-writh">
-    <div class="login-padding">
-    <div class="login-left">
-      <img src="../../static/img/simple-img.jpg" alt="">
-    </div>
-    <div class="login-box">
-      <div class="white-box">
-        <h3 class="white-box-title">Welcome</h3><!--欢迎回来-->
-        <el-form ref="form" :model="loginForm" label-width="80px">
-          <el-form-item label-width="0px" class="border-bottom username">
-            <el-input v-model="loginForm.userName" placeholder="UserName" @change="refreshLoginVerifyStatus"><!--账户-->
-              <template slot="prepend"><!--<i class="el-icon-user"></i>--><i></i></template>
-            </el-input>
-          </el-form-item>
-          <el-form-item label-width="0px" class="border-bottom key-name">
-            <el-input type="password" v-model="loginForm.password" auto-complete="off" placeholder="Password"><!--密码-->
-              <template slot="prepend"><!--<i class="el-icon-lock"></i>--><i></i></template>
-            </el-input>
-          </el-form-item>
-          <el-form-item label-width="0px" class="border-bottom key-name" v-show="isLoginVerify">
-            <el-input type="verifyCode" v-model="loginForm.verifyCode" auto-complete="off" @keyup.enter.native="onSubmit" placeholder="Captcha"><!--验证码-->
-              <template slot="prepend"><i></i></template>
-            </el-input>
-            <el-image :src="captchaUrl" @click="changeCaptcha">
-            </el-image>
-          </el-form-item>
-          <el-form-item label-width="0px" style="border-radius: 0">
-            <el-button class="submit-button" type="primary" @click="onSubmit" :loading="submitButtonStat">Login</el-button><!--登录-->
-          </el-form-item>
-        </el-form>
+      <div class="login-padding">
+        <div class="login-left">
+          <img src="../../static/img/simple-img.jpg" alt="">
+        </div>
+        <div class="login-box">
+          <div class="white-box">
+            <h3 class="white-box-title">Welcome</h3><!--欢迎回来-->
+            <el-form ref="form" :model="loginForm" label-width="80px">
+              <el-form-item label-width="0px" class="border-bottom username">
+                <el-input v-model="loginForm.userName" placeholder="UserName" @change="refreshLoginVerifyStatus"><!--账户-->
+                  <template slot="prepend"><!--<i class="el-icon-user"></i>--><i></i></template>
+                </el-input>
+              </el-form-item>
+              <el-form-item label-width="0px" class="border-bottom key-name">
+                <el-input type="password" v-model="loginForm.password" auto-complete="off" placeholder="Password"><!--密码-->
+                  <template slot="prepend"><!--<i class="el-icon-lock"></i>--><i></i></template>
+                </el-input>
+              </el-form-item>
+              <el-form-item label-width="0px" class="border-bottom key-name" v-show="isLoginVerify">
+                <el-input type="verifyCode" v-model="loginForm.verifyCode" auto-complete="off" @keyup.enter.native="onSubmit" placeholder="Captcha"><!--验证码-->
+                  <template slot="prepend"><i></i></template>
+                </el-input>
+                <el-image :src="captchaUrl" @click="changeCaptcha">
+                </el-image>
+              </el-form-item>
+              <el-form-item label-width="0px" style="border-radius: 0">
+                <el-button class="submit-button" type="primary" @click="onSubmit" :loading="submitButtonStat">Login</el-button><!--登录-->
+              </el-form-item>
+            </el-form>
+          </div>
+        </div>
       </div>
     </div>
   </div>
-    </div>
-  </div>
 
 </template>
 
@@ -61,9 +61,9 @@ export default {
         verifyCode: '',
       },
       submitButtonStat: false,
-      pageId:'',
+      pageId: '',
       captchaUrl: '',
-      isLoginVerify:false,
+      isLoginVerify: false,
     }
   },
   beforeCreate () {
@@ -94,7 +94,7 @@ export default {
       let pageId = this.pageId
       if (baseInfo.daysDiff() === null) {
         promise = network.getDaysDiff().then(response => {
-          if( this.isLoginVerify ) {
+          if (this.isLoginVerify) {
             let verifyCode = this.loginForm.verifyCode
             let data = {
               userName,
@@ -107,7 +107,7 @@ export default {
           }
         })
       } else {
-        if( this.isLoginVerify ) {
+        if (this.isLoginVerify) {
           let verifyCode = this.loginForm.verifyCode
           let data = {
             userName,
@@ -115,7 +115,7 @@ export default {
             verifyCode,
           }
           promise = network.loginGetAccessToken(userName, password, `oauth/login?page_id=${pageId}`, data)
-        }else {
+        } else {
           promise = network.loginGetAccessToken(userName, password)
         }
       }
@@ -133,17 +133,17 @@ export default {
       }).catch(error => {
         console.log(error);
         this.refreshLoginVerifyStatus();
-        if( this.isLoginVerify ) {
+        if (this.isLoginVerify) {
           this.changeCaptcha()
         }
-        if( error.message === 'ERROR_IS_MODIFY_PASSWORD' ) {
+        if (error.message === 'ERROR_IS_MODIFY_PASSWORD') {
           // this.submitButtonStat = false
           // console.log(this.loginForm.userName);
           this.$router.push(`/modify-password/${this.loginForm.userName}`)
-        }else {
+        } else {
           error = tool.errorHandle(error)
-            this.$message.error(error.message)
-            // this.submitButtonStat = false
+          this.$message.error(error.message)
+          // this.submitButtonStat = false
         }
         // error = tool.errorHandle(error)
         // this.$message.error(error.message)
@@ -151,10 +151,10 @@ export default {
       })
 
     },
-    changeCaptcha() {
+    changeCaptcha () {
       this.captchaUrl = REQUEST_URL + 'site/captcha?page_id=' + this.pageId + '&v=' + Math.random();
     },
-    refreshLoginVerifyStatus() {
+    refreshLoginVerifyStatus () {
       let path = 'oauth/is-login-verify'
       axiosObj.post(path, {userName:this.loginForm.userName}).then(response => {
         this.isLoginVerify = response === 1;
@@ -224,9 +224,9 @@ export default {
     background-color: #0c195d !important;
     border-color: #0c195d !important;
   }
-  .el-input-group--prepend .el-input__inner, .el-input-group__append{/*border: none;*/background: none;border-radius: 0;/*width:94%;*/float: right;display: block; }
+  .el-input-group--prepend .el-input__inner, .el-input-group__append{border: none;background: none;border-radius: 0;width:94%;float: right;display: block; }
   .border-bottom {border-bottom:2px #0c195d solid;}
-  /*.el-input-group__append, .el-input-group__prepend{border: none;}*/
+  .el-input-group__append, .el-input-group__prepend{border: none;}
   input:-webkit-autofill {
     transition: background-color 5000s ease-in-out 0s;
   }

+ 8 - 16
frontendEle/src/views/shop/index.vue

@@ -60,21 +60,13 @@
                 </el-tab-pane>
             </el-tabs>
             <div class="white-box-footer">
-                <el-row>
-                  <el-col :span="3">
-                      <el-button type="primary" size="small" @click="goToAccounts()">Check Out</el-button><!--去结算-->
-                  </el-col>
-                  <el-col :span="15">
-                      <div class='flex data' style="line-height: 35px; font-size: 14px;">
-                          <div style="margin-right: 2rem;">Price:₦ {{ sell_price_sum }}</div><!--商品价格-->
-                          <div style="margin-right: 2rem;">BV:{{ price_pv_sum }}</div><!--商品BV-->
-                          <div>Tax:₦ {{ tax_sum }}</div><!--商品BV-->
-                      </div>
-                  </el-col>
-                  <el-col :span="6">
-                      <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
-                  </el-col>
-                </el-row>
+                <el-button type="primary" size="small" @click="goToAccounts()">Check Out</el-button><!--去结算-->
+                <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
+            </div>
+            <div class='flex data' style="line-height: 35px; font-size: 14px;margin-top: 20px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
+              <div style="margin-right: 2rem;">Price:₦ {{ sell_price_sum }}</div><!--商品价格-->
+              <div style="margin-right: 2rem;">BV:{{ price_pv_sum }}</div><!--商品BV-->
+              <div>Tax:₦ {{ tax_sum }}</div><!--商品BV-->
             </div>
         </div>
     </div>
@@ -113,7 +105,7 @@ export default {
                 selectLock:false,
                 goodsCategory: '1',
                 goodsActive: [],
-                maxHeight: tool.getTableHeight(),
+                maxHeight: tool.getTableHeight() - 35,
                 sell_price_sum: 0.00,
                 price_pv_sum: 0.00,
                 tax_sum: 0.00,

+ 15 - 16
frontendEle/src/views/shop/order-list.vue

@@ -2,23 +2,22 @@
     <div v-loading="loading">
         <div class="white-box">
             <el-table class="withdraw-table" :data="tableData" :max-height="maxHeight" style="width: 100%;" :span-method="objectSpanMethod">
-              <el-table-column width="120" label="Product code" prop="SKU_CODE"></el-table-column><!--商品编号-->
+              <el-table-column width="120" label="Product Code" prop="SKU_CODE"></el-table-column><!--商品编号-->
               <el-table-column width="120" label="Product Name" prop="GOODS_TITLE"></el-table-column><!--商品名称-->
-                <el-table-column width="120" label="Quantity" prop="BUY_NUMS"></el-table-column><!--数量-->
-                <el-table-column width="120" label="Product price"><!--商品价格-->
-                    <template slot-scope="props">
-                        {{ Math.round(props.row.REAL_PRICE * props.row.BUY_NUMS * 100) / 100 }}
-                    </template>
-                </el-table-column>
-                <el-table-column width="120" label="Product BV"><!--商品BV-->
-                    <template slot-scope="props">
-                        <span v-if="![4, 5, 6].includes(props.row.CATEGORY_TYPE)">{{ Math.round(props.row.REAL_PV * props.row.BUY_NUMS * 100) / 100 }}</span>
-                        <span v-else>0</span>
-                    </template>
-                </el-table-column>
-                <el-table-column width="120" label="Tax rate" prop="TAX_RATE"></el-table-column><!--税率-->
+              <el-table-column width="120" label="Product Price" prop="REAL_PRICE"><!--商品价格-->
+              </el-table-column>
+              <el-table-column width="120" label="Product BV"><!--商品BV-->
+                <template slot-scope="props">
+                  <span v-if="![4, 5, 6].includes(props.row.CATEGORY_TYPE)">{{ Math.round(props.row.REAL_PV * props.row.BUY_NUMS * 100) / 100 }}</span>
+                  <span v-else>0</span>
+                </template>
+              </el-table-column>
+                <el-table-column width="120" label="Qty" prop="BUY_NUMS"></el-table-column><!--数量-->
+
+                <el-table-column width="120" label="Tax Rate" prop="TAX_RATE"></el-table-column><!--税率-->
                 <el-table-column width="120" label="Tax" prop="TAX_AMOUNT"></el-table-column><!--税额-->
-                <el-table-column width="150" label="Product category" prop="CATEGORY"></el-table-column><!--商品分类-->
+                <el-table-column width="120" label="Total Price" prop="TOTAL_AMOUNT"></el-table-column><!--税额-->
+                <el-table-column width="150" label="Product Category" prop="CATEGORY"></el-table-column><!--商品分类-->
                 <el-table-column width="120" label="Order Code" prop="SN"></el-table-column><!--订单编号-->
                 <el-table-column width="120" label="Member Code" prop="USER_NAME"></el-table-column><!--会员编号-->
                 <el-table-column width="120" label="Member Name" prop="REAL_NAME"></el-table-column><!--会员姓名-->
@@ -80,7 +79,7 @@
   //
       objectSpanMethod(obj) {
 
-        if (obj.columnIndex > 6) {
+        if (obj.columnIndex > 7) {
           // ⼆维数组存储的数据取出
           var _row = this.spanArr[obj.rowIndex];
           var _col = _row > 0 ? 1 : 0;

+ 2 - 2
frontendEle/src/views/shop/order.vue

@@ -395,7 +395,7 @@ export default{
             this.form.metadata.custom_fields[0].value = response.SN
             this.visible = true
           }).catch(() => {
-            this.submitButtonStat = true
+            this.submitButtonStat = false
           })
         } else {
           // 非PayStack支付
@@ -403,7 +403,7 @@ export default{
             this.submitButtonStat = false
             this.$router.push({path: `/shop/order-list`})
           }).catch(() => {
-            this.submitButtonStat = true
+            this.submitButtonStat = false
           })
         }
       }).catch(() => {

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

@@ -0,0 +1 @@
+ALTER TABLE `AR_ARTICLE` ADD COLUMN `SORT` tinyint NOT NULL DEFAULT 10 COMMENT '排序值' AFTER `STATUS`;

+ 225 - 0
sql/upgrade/qtr.sql

@@ -0,0 +1,225 @@
+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;
+
+
+-- 查找,所有星级用户
+
+SELECT COUNT(*) INTO OCROWN1NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 1);
+SELECT COUNT(*) INTO OCROWN2NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 2);
+SELECT COUNT(*) INTO OCROWN3NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 3);
+SELECT COUNT(*) INTO OCROWN4NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 4);
+SELECT COUNT(*) INTO OCROWN5NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 5);
+SELECT COUNT(*) INTO OCROWN6NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 6);
+SELECT COUNT(*) INTO OCROWN7NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 7);
+
+SET CROWN1U = OCROWN1NUM;
+SET CROWN2U = OCROWN2NUM * 1.5;
+SET CROWN3U = OCROWN3NUM * 2;
+SET CROWN4U = OCROWN4NUM * 2.5;
+SET CROWN5U = OCROWN5NUM * 3;
+SET CROWN6U = OCROWN6NUM * 3.5;
+SET CROWN7U = OCROWN7NUM * 4;
+
+CALL QTRCALCRECORD(5,'计算每一份奖金',PCPID,NOW());
+COMMIT;
+
+SET TOTALU = CROWN1U + CROWN2U + CROWN3U + CROWN4U + CROWN5U + CROWN6U + CROWN7U;
+
+SET BONUSPERU = TBONUS / TOTALU; -- 算出每一份奖金的金额
+
+IF(CROWN1U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 1);
+
+END IF;
+CALL QTRCALCRECORD(11,'计算1星奖金',PCPID,NOW());
+COMMIT;
+
+IF(CROWN2U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU * 1.5 AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 2);
+	
+END IF;
+CALL QTRCALCRECORD(12,'计算2星奖金',PCPID,NOW());
+COMMIT;
+
+IF(CROWN3U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU * 2 AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 3);
+	
+END IF;
+CALL QTRCALCRECORD(13,'计算3星奖金',PCPID,NOW());
+COMMIT;
+
+IF(CROWN4U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU * 2.5 AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 4);
+	
+END IF;
+CALL QTRCALCRECORD(14,'计算4星奖金',PCPID,NOW());
+COMMIT;
+
+IF(CROWN5U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU * 3 AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 5);
+	
+END IF;
+CALL QTRCALCRECORD(15,'计算5星奖金',PCPID,NOW());
+COMMIT;
+
+IF(CROWN6U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU * 3.5 AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 6);
+	
+END IF;
+CALL QTRCALCRECORD(16,'计算6星奖金',PCPID,NOW());
+COMMIT;
+
+IF(CROWN7U > 0) THEN
+	INSERT INTO AR_QTR_CALC_USER
+		SELECT 
+			NULL AS ID, 
+			USER_ID, 
+			BONUSPERU * 4 AS AMOUNT, 
+			CALC_YEAR, 
+			CALC_MONTH, 
+			PERIOD_NUM
+		FROM 
+			AR_CALC_BONUS_QY 
+		WHERE 
+			PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 7);
+	
+END IF;
+CALL QTRCALCRECORD(17,'计算7星奖金',PCPID,NOW());
+COMMIT;
+
+INSERT INTO AR_CALC_BONUS_QUARTER
+	SELECT
+		NULL AS ID,
+		USER_ID,
+		AMOUNT AS ORI_BONUS,
+		0 AS MANAGE_TAX,
+		AMOUNT,
+		0 AS RECONSUME_POINTS,
+		CALC_YEAR, 
+		CALC_MONTH, 
+		PERIOD_NUM,
+		0 AS CREATE_AT
+	FROM
+		AR_QTR_CALC_USER;
+
+CALL QTRCALCRECORD(20,'写入季度奖金表',PCPID,NOW());
+COMMIT;	
+
+END

+ 17 - 0
sql/upgrade/star_to_crown.sql

@@ -0,0 +1,17 @@
+ALTER TABLE AR_CALC_BONUS CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_CALC_BONUS_GARAGE CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_CALC_BONUS_QY CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_CALC_BONUS_TOURISM CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_CALC_BONUS_VILLA CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_FLOW_GARAGE_POINTS CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_FLOW_VILLA_POINTS CHANGE LAST_STAR_LV LAST_CROWN_LV VARCHAR(32);
+
+ALTER TABLE AR_STAR_LEVEL RENAME TO AR_CROWN_LEVEL;
+
+ALTER TABLE AR_USER CHANGE STAR_LV CROWN_LV VARCHAR(32);