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

Merge branch 'master' of http://18.167.157.193:1026/guanli/ngds into feature/theo-translate

# Conflicts:
#	backendApi/modules/v1/models/lists/shop/GoodsList.php
#	common/models/ShopGoods.php
#	frontendEle/src/views/shop/order.vue
theo пре 3 година
родитељ
комит
8261398ebe

+ 1 - 0
backendApi/config/urlManagerRules.php

@@ -277,6 +277,7 @@ return [
             'POST emp-level-delete' => 'emp-level-delete',
             'POST bonus-dec-level' => 'bonus-dec-level',
             'POST bonus-emp-level' => 'bonus-emp-level',
+            'POST bonus-star-level' => 'bonus-star-level',
             'GET clear-data' => 'clear-data',
             'GET clear-cache' => 'clear-cache',
             'GET clear-table-cache' => 'clear-table-cache',

+ 23 - 0
backendApi/modules/v1/controllers/ConfigController.php

@@ -29,6 +29,7 @@ use common\models\FlowBonus;
 use common\models\forms\OcrApiForm;
 use common\models\forms\SmsApiForm;
 use common\models\forms\SmsTemplateForm;
+use common\models\StarCrownLevelForm;
 use common\models\forms\WithdrawLevelForm;
 use common\models\OcrApi;
 use common\models\PerfCompany;
@@ -40,6 +41,7 @@ use common\models\DeclarationLevel;
 use common\models\EmployLevel;
 use common\models\SmsApi;
 use common\models\SmsTemplate;
+use common\models\StarCrownLevel;
 use common\models\UserBonus;
 use common\models\UserClose;
 use common\models\UserInfo;
@@ -116,10 +118,13 @@ class ConfigController extends BaseController {
         $decLevel = DeclarationLevel::find()->orderBy('SORT ASC')->asArray()->all();
         // 获取会员聘级相关参数
         $empLevel = EmployLevel::getAllDataWithNumIndex();
+        // 获取会员星级相关参数
+        $starLevel = StarCrownLevel::getAllDataWithNumIndex();
         $result = [
             'config' => $configs,
             'decLevel' => $decLevel,
             'empLevel' => $empLevel,
+            'starLevel' => $starLevel,
         ];
         return static::notice($result);
     }
@@ -178,6 +183,24 @@ class ConfigController extends BaseController {
         }
     }
 
+    /**
+     * 修改会员星级相关的奖金配置
+     * @return mixed
+     * @throws \yii\db\Exception
+     * @throws \yii\web\HttpException
+     */
+    public function actionBonusStarLevel() {
+        $form = new StarCrownLevelForm();
+        if (Yii::$app->request->post() && $form->load(Yii::$app->request->post(), '')) {
+            if ($form->updateBonus()) {
+                StarCrownLevel::updateToCache();
+                return static::notice('更新星级奖金配置成功');
+            } else {
+                return static::notice(Form::formatErrorsForApi($form->getErrors()), 422);
+            }
+        }
+    }
+
     /**
      * 更新封期参数
      * @return mixed

+ 91 - 8
backendEle/src/views/config/bonus-opt.vue

@@ -151,19 +151,19 @@
     </div>
     <div class="panel" v-if="permission.hasPermission(`config/bonus-emp-level`)">
       <div class="panel-heading">
-        荣衔奖和积分配置
+        荣衔配置
       </div>
       <div class="panel-wrapper">
         <div class="panel-body">
           <el-table :data="empLevelTableData" stripe style="width: 100%;">
             <el-table-column prop="LEVEL_NAME" label="级别名称"></el-table-column>
-            <el-table-column label="荣衔奖比例">
-              <template slot-scope="scope">
-                <el-input v-model="scope.row.RX_PERCENT" min="0" max="100">
-                  <template slot="append">%</template>
-                </el-input>
-              </template>
-            </el-table-column>
+<!--            <el-table-column label="荣衔奖比例">-->
+<!--              <template slot-scope="scope">-->
+<!--                <el-input v-model="scope.row.RX_PERCENT" min="0" max="100">-->
+<!--                  <template slot="append">%</template>-->
+<!--                </el-input>-->
+<!--              </template>-->
+<!--            </el-table-column>-->
             <el-table-column label="级别分数">
               <template slot-scope="scope">
                 <el-input v-model="scope.row.LEVEL_SCORE" min="0">
@@ -178,6 +178,27 @@
                 </el-input>
               </template>
             </el-table-column>
+            <el-table-column label="蓝星奖比例">
+              <template slot-scope="scope">
+                  <el-input v-model="scope.row.BS_PERCENT" min="0" max="100">
+                      <template slot="append">%</template>
+                  </el-input>
+              </template>
+            </el-table-column>
+            <el-table-column label="旅游奖比例">
+              <template slot-scope="scope">
+                <el-input v-model="scope.row.TOURISM_PERCENT" min="0" max="100">
+                  <template slot="append">%</template>
+                </el-input>
+              </template>
+            </el-table-column>
+            <el-table-column label="车房奖比例">
+              <template slot-scope="scope">
+                <el-input v-model="scope.row.GARAGE_PERCENT" min="0" max="100">
+                  <template slot="append">%</template>
+                </el-input>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
         <div class="panel-footer">
@@ -186,6 +207,51 @@
         </div>
       </div>
     </div>
+
+      <div class="panel" v-if="permission.hasPermission(`config/bonus-star-level`)">
+          <div class="panel-heading">
+              星级配置
+          </div>
+          <div class="panel-wrapper">
+              <div class="panel-body">
+                  <el-table :data="starLevelTableData" stripe style="width: 100%;">
+                      <el-table-column prop="LEVEL_NAME" label="级别名称"></el-table-column>
+                      <el-table-column label="级别分数(BV)">
+                          <template slot-scope="scope">
+                              <el-input v-model="scope.row.LEVEL_SCORE" min="0">
+                                  <template slot="append">分</template>
+                              </el-input>
+                          </template>
+                      </el-table-column>
+                      <el-table-column label="升级分数(BV)">
+                          <template slot-scope="scope">
+                              <el-input v-model="scope.row.UPGRADE_SCORE" min="0">
+                                  <template slot="append">分</template>
+                              </el-input>
+                          </template>
+                      </el-table-column>
+                      <el-table-column label="旅游奖比例">
+                          <template slot-scope="scope">
+                              <el-input v-model="scope.row.TOURISM_PERCENT" min="0" max="100">
+                                  <template slot="append">%</template>
+                              </el-input>
+                          </template>
+                      </el-table-column>
+                      <el-table-column label="车房奖比例">
+                          <template slot-scope="scope">
+                              <el-input v-model="scope.row.GARAGE_PERCENT" min="0" max="100">
+                                  <template slot="append">%</template>
+                              </el-input>
+                          </template>
+                      </el-table-column>
+                  </el-table>
+              </div>
+              <div class="panel-footer">
+                  <el-button type="primary" @click="onStarSubmit" :loading="starSubmitButtonStat" style="float: right;">保存
+                  </el-button>
+              </div>
+          </div>
+      </div>
   </div>
 </template>
 
@@ -200,6 +266,7 @@ export default {
       this.configData = response.config
       this.decLevelTableData = response.decLevel
       this.empLevelTableData = response.empLevel
+      this.starLevelTableData = response.starLevel
       this.loading = false
     })
   },
@@ -207,11 +274,13 @@ export default {
     return {
       decLevelTableData: null,
       empLevelTableData: null,
+      starLevelTableData: null,
       loading: true,
       submitButtonStat: false,
       qySubmitButtonStat: false,
       glSubmitButtonStat: false,
       ycSubmitButtonStat: false,
+      starSubmitButtonStat: false,
       configData: null,
       permission: permission,
     }
@@ -280,6 +349,20 @@ export default {
         this.ycSubmitButtonStat = false
       })
     },
+    onStarSubmit() {
+      this.starSubmitButtonStat = true
+      network.postData('config/bonus-star-level', {
+          data: this.starLevelTableData
+      }).then(response => {
+          this.$message({
+              message: response,
+              type: 'success'
+          })
+          this.starSubmitButtonStat = false
+      }).catch(_ => {
+          this.starSubmitButtonStat = false
+      })
+    },
   }
 }
 </script>

+ 10 - 0
common/helpers/Cache.php

@@ -16,6 +16,7 @@ use common\models\EmployLevel;
 use common\models\Region;
 use common\models\SmsApi;
 use common\models\SmsTemplate;
+use common\models\StarCrownLevel;
 use common\models\User;
 use common\models\UserNetwork;
 use common\models\UserRelation;
@@ -30,6 +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 ADMIN_ROLE_KEY = 'sys:adminRole';
     const SMS_TEMPLATE_DEC_KEY = 'sys:smsTemplateDec';
     const SMS_TEMPLATE_EMP_KEY = 'sys:smsTemplateEmp';
@@ -145,6 +147,14 @@ class Cache
         return EmployLevel::getFromCache();
     }
 
+    /**
+     * 获取星级
+     * @return array|mixed|\yii\db\ActiveRecord[]
+     */
+    public static function getStarCrownLevelConfig(){
+        return StarCrownLevel::getFromCache();
+    }
+
     /**
      *  更新管理员角色
      * @return array|\yii\db\ActiveRecord[]

+ 13 - 0
common/helpers/Tool.php

@@ -9,6 +9,7 @@
 namespace common\helpers;
 
 
+use Faker\Provider\Uuid;
 use yii\base\Exception;
 use yii\helpers\Url;
 use yii\httpclient\Client;
@@ -453,4 +454,16 @@ class Tool {
         }
         return $prefix.$random_string;
     }
+
+    /**
+     * 生成UUID
+     * @param $upper boolean 是否大写
+     * @param $symbol string 替换符号
+     * @return string|string[]
+     */
+    public static function generateId(bool $upper = true, string $symbol = '')
+    {
+        $uuid = !$upper ? Uuid::uuid() : strtoupper(Uuid::uuid());
+        return str_replace('-', $symbol, $uuid);
+    }
 }

+ 48 - 34
common/helpers/bonus/BonusCalc.php

@@ -10,6 +10,7 @@ namespace common\helpers\bonus;
 
 use common\helpers\Cache;
 use common\helpers\Date;
+use common\helpers\LoggerTool;
 use common\helpers\snowflake\SnowFake;
 use common\helpers\Tool;
 use common\models\CalcBonus;
@@ -48,6 +49,7 @@ use common\models\EmployLevel;
 use common\models\FlowBonus;
 use common\models\PerfActiveUser;
 use common\models\ScoreMonth;
+use common\models\StarCrownLevel;
 use common\models\User;
 use common\models\UserInfo;
 use common\models\UserPerf;
@@ -69,6 +71,7 @@ class BonusCalc extends BaseObject {
     private $_sysConfig = [];
     private $_decLevelConfig = [];
     private $_empLevelConfig = [];
+    private $_starCrownLevelConfig = [];
     private $_decRoleConfig = [];
     private $_errors = [];
     private $_periodNum = 0;
@@ -301,11 +304,10 @@ class BonusCalc extends BaseObject {
 
             $this->calcBonusGarage($this->_sysConfig['openGarage']);
             $t22 = microtime(true);
-            echo('计算车房奖' . ($this->_sysConfig['openGarage']['VALUE'] ? '完成' : '关闭').',耗时:' . round($t22 - $t21, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+            echo('计算车房奖' . ($this->_sysConfig['openGarage']['VALUE'] ? '完成' : '关闭').',耗时:' . round($t22 - $t21, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL . PHP_EOL);
             $this->_updatePercent(69);
 
 
-
             //把奖金会员写入缓存
             $this->loopMonthBonusUserFromDbToCache();
             $t30 = microtime(true);
@@ -340,7 +342,7 @@ class BonusCalc extends BaseObject {
 //            $t23 = microtime(true);
 //            echo('积分写库操作完成,耗时:' . round($t23 - $t22, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
             $t35 = microtime(true);
-            echo('结算全部完成,共耗时:' . round($t35 - $t34, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+            echo('结算全部完成,共耗时:' . round($t35 - $t34, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL . PHP_EOL);
         } catch (\Exception $e) {
             $this->errorCalcTask();
             $this->addError('calc', $e->getMessage());
@@ -375,6 +377,7 @@ class BonusCalc extends BaseObject {
         $this->_sysConfig = Cache::getSystemConfig();
         $this->_decLevelConfig = Cache::getDecLevelConfig();
         $this->_empLevelConfig = Cache::getEmpLevelConfig();
+        $this->_starCrownLevelConfig = Cache::getStarCrownLevelConfig();
         $this->_decRoleConfig = CalcCache::getDecRoleConfig($this->_periodNum);
         $periodNum = $this->_periodNum;
         // 获取本年月和上年月
@@ -1205,6 +1208,7 @@ class BonusCalc extends BaseObject {
                     'perfArr' => $perfArr,
                     'touchBonus' => 0,
                 ];
+
                 // 获取会员的报单级别
                 $userBaseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
                 $decLevelConfig = $this->_decLevelConfig;
@@ -1225,7 +1229,7 @@ class BonusCalc extends BaseObject {
                 if ($touchBonusArr['touchBonus'] <= 0) continue;
 
                 $teamBonus = $touchBonusArr['touchBonus'];
-                //判断级别上限
+                //判断级别上限,个人奖金封顶限制
                 $teamBonus = $this->declarationLevelCap($teamBonus, $userId, $userBaseInfo['DEC_LV']);
                 if( $teamBonus <= 0 ) continue;
 
@@ -1238,12 +1242,20 @@ class BonusCalc extends BaseObject {
                 // 把对碰后的奖金存入缓存中
                 CalcCache::bonus($userId, $periodNum, 'BONUS_QY', $teamBonus, $deductData);
 
+                // TODO:取小腿值
+                $payLeg = max([$perfArr['SURPLUS_1L'], $perfArr['SURPLUS_2L']]);
+                // 计算荣衔星级
+                $starCrown = StarCrownLevel::getStarCrown($payLeg);
+                // 星级放入缓存
+                CalcCache::addUserStartCrown($userId, $periodNum, $starCrown['ID']);
+
                 //团队奖流水
                 $insertBonusData[] = [
                     'ID' => SnowFake::instance()->generateId(),
                     'USER_ID' => $userId,
                     'LAST_DEC_LV' => $userBaseInfo['DEC_LV'],
                     'LAST_EMP_LV' => $userBaseInfo['EMP_LV'],
+                    'LAST_STAR_LV' => $starCrown['ID'],
                     'LAST_STATUS' => $userBaseInfo['STATUS'],
                     'AMOUNT' => $deductData['surplus'],
                     'ORI_BONUS' => $teamBonus,
@@ -1260,7 +1272,6 @@ class BonusCalc extends BaseObject {
                         'touchPerfArr' => $touchPerfArr,
                         'nowDecLevelConfig' => $nowDecLevelConfig,
                         'decLevel' => $userBaseInfo['DEC_LV'],
-
                     ]),
                 ];
 
@@ -3377,15 +3388,15 @@ class BonusCalc extends BaseObject {
                         ':PERIOD_NUM' => $this->_periodNum
                     ]
                 );
-                // 共享奖流水
-                CalcBonusGX::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
-                    [
-                        ':USER_ID' => $data['USER_ID'],
-                        ':PERIOD_NUM' => $this->_periodNum
-                    ]
-                );
+//                // 共享奖流水
+//                CalcBonusGX::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
+//                    [
+//                        ':USER_ID' => $data['USER_ID'],
+//                        ':PERIOD_NUM' => $this->_periodNum
+//                    ]
+//                );
                 // 推广奖流水
-                CalcBonusTG::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
+                CalcBonusTG::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
                     [
                         ':USER_ID' => $data['USER_ID'],
                         ':PERIOD_NUM' => $this->_periodNum
@@ -3398,32 +3409,32 @@ class BonusCalc extends BaseObject {
                         ':PERIOD_NUM' => $this->_periodNum
                     ]
                 );
-                // 服务奖流水
-                CalcBonusBD::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
-                    [
-                        ':USER_ID' => $data['USER_ID'],
-                        ':PERIOD_NUM' => $this->_periodNum
-                    ]
-                );
-                // 更新form的聘级
-                CalcBonusGX::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
-                    [
-                        ':FROM_USER_ID' => $data['USER_ID'],
-                        ':PERIOD_NUM' => $this->_periodNum
-                    ]
-                );
-                CalcBonusTG::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
-                    [
-                        ':FROM_USER_ID' => $data['USER_ID'],
-                        ':PERIOD_NUM' => $this->_periodNum
-                    ]
-                );
-                CalcBonusBD::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
+//                // 服务奖流水
+//                CalcBonusBD::updateAll(['LAST_EMP_LV' => $nowBsEmpLv], 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
+//                    [
+//                        ':USER_ID' => $data['USER_ID'],
+//                        ':PERIOD_NUM' => $this->_periodNum
+//                    ]
+//                );
+//                // 更新form的聘级
+//                CalcBonusGX::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM',
+//                    [
+//                        ':FROM_USER_ID' => $data['USER_ID'],
+//                        ':PERIOD_NUM' => $this->_periodNum
+//                    ]
+//                );
+                CalcBonusTG::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM',
                     [
                         ':FROM_USER_ID' => $data['USER_ID'],
                         ':PERIOD_NUM' => $this->_periodNum
                     ]
                 );
+//                CalcBonusBD::updateAll(['LAST_FROM_EMP_LV' => $nowBsEmpLv], 'FROM_USER_ID=:FROM_USER_ID AND PERIOD_NUM=:PERIOD_NUM',
+//                    [
+//                        ':FROM_USER_ID' => $data['USER_ID'],
+//                        ':PERIOD_NUM' => $this->_periodNum
+//                    ]
+//                );
             }
             unset($allData);
             return $this->loopCalcBlueEmpLv($offset + $this->_limit);
@@ -3451,6 +3462,8 @@ class BonusCalc extends BaseObject {
 //            $empLv = $this->nowMonthPerfData($userId)['LAST_EMP_LV'];
 //        }
         $pervSurplusPerf = CalcCache::surplusPerf($userId, $this->_periodNum);
+        // 星级
+        $starCrownLv = CalcCache::getUserStartCrown($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;
@@ -3551,6 +3564,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_STATUS' => $baseInfo['STATUS'],
             'LAST_MOBILE' => $baseInfo['MOBILE'],
             'LAST_PERIOD_AT' => $baseInfo['PERIOD_NUM'],

+ 52 - 0
common/helpers/bonus/BonusSend.php

@@ -22,6 +22,7 @@ use common\models\DealType;
 use common\models\PerfPeriod;
 use common\models\DecOrder;
 use common\models\EmployLevel;
+use common\models\StarCrownLevel;
 use common\models\UserBonus;
 use common\models\UserPerfMonthUpdate;
 use common\models\UserPeriodPoints;
@@ -142,6 +143,13 @@ class BonusSend extends BaseObject {
             $this->_updatePercent(40);
             $t4 = microtime(true);
             echo('更新聘级完成,耗时:' . round($t4 - $t3, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+
+            // 更新星级
+            $this->updateStarLevel();
+            $this->_updatePercent(50);
+            $t41 = microtime(true);
+            echo('更新星级完成,耗时:' . round($t41 - $t4, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+
             // 发放奖金
             $this->sendBonusLoop();
             $this->_updatePercent(60);
@@ -474,6 +482,50 @@ class BonusSend extends BaseObject {
         return true;
     }
 
+    /**
+     * 更新用户星级
+     * @param int $offset
+     * @return bool
+     */
+    public function updateStarLevel(int $offset = 0)
+    {
+        $allData = CalcBonusQY::findUseDbCalc()
+            ->yearMonth($this->_calcYearMonth)
+            ->where(
+                'CALC_MONTH=:CALC_MONTH AND PERIOD_NUM=:PERIOD_NUM',
+                [
+                    ':CALC_MONTH' => $this->_calcYearMonth,
+                    ':PERIOD_NUM' =>$this->_periodNum
+                ]
+            )
+            ->orderBy('CREATED_AT DESC')
+            ->groupBy('USER_ID')
+            ->offset($offset)
+            ->limit($this->_limit)
+            ->all();
+
+        if ($allData) {
+            $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::deleteBaseInfoFromRedis($data['USER_ID']);
+                    unset($data);
+                }
+                $transaction->commit();
+            } catch (Exception $e) {
+                $transaction->rollBack();
+                $this->addError('updateStarCrownLevel', '更新星级失败,原因:' . $e->getMessage());
+                return false;
+            }
+            unset($transaction, $allData);
+            return $this->updateStarLevel($offset + $this->_limit);
+        }
+        unset($allData);
+
+        return true;
+    }
+
     // /**
     //  * 更新会员聘级
     //  * @param int $offset

+ 35 - 1
common/helpers/bonus/CalcCache.php

@@ -19,6 +19,7 @@ use common\models\Period;
 use common\models\DeclarationLevel;
 use common\models\DecRole;
 use common\models\EmployLevel;
+use common\models\StarCrownLevel;
 use common\models\User;
 use common\models\UserBonus;
 use common\models\UserNetwork;
@@ -85,6 +86,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_';
 
     //@todo
     const REDIS_KEY_PREFIX_REPAIR_SURPLUS_PERF = 'calc:repairSurplusPerf_';
@@ -141,6 +143,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);
     }
 
     /**
@@ -207,6 +210,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);
     }
 
     /**
@@ -600,6 +604,32 @@ class CalcCache {
         return $userYcBonusData ? Json::decode($userYcBonusData, true) : [];
     }
 
+    /**
+     * 会员星级加入缓存
+     * @param $userId
+     * @param $periodNum
+     * @param $starCrown
+     */
+    public static function addUserStartCrown($userId, $periodNum, $starCrown) {
+        // 先从已存在的会员池里面获取
+        $data = Yii::$app->redis->hget(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum, $userId);
+        if (!$data) {
+            Yii::$app->redis->hset(self::REDIS_KEY_PREFIX_BONUS_STAR_CROWN_LIST_DATA . $periodNum, $userId, $starCrown);
+        }
+
+        unset($userId, $periodNum, $saveData, $isset);
+    }
+
+    /**
+     * 获取会员星级信息
+     * @param $userId
+     * @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);
+    }
+
     /**
      * 加入有复销业绩的会员列表
      * @param $userId
@@ -764,7 +794,7 @@ class CalcCache {
                 throw new \Exception('用户信息表数据不存在,userId:'.$userId);
             }
             // 在获取商城库的会员的级别信息和是否报单中心的会员
-            $userShopInfo = User::find()->select('REAL_NAME,LAST_DEC_LV,DEC_LV,EMP_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,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();
             if ( !$userShopInfo ) {
                 throw new \Exception('用户表数据不存在,userId:'.$userId);
             }
@@ -773,6 +803,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['IS_DEC'] = $userShopInfo['IS_DEC'];
             $userInfo['DEC_ID'] = $userShopInfo['DEC_ID'];
             $userInfo['DEC_ROLE_ID'] = $userShopInfo['DEC_ROLE_ID'];
@@ -811,6 +842,9 @@ class CalcCache {
             if (!$userInfo['EMP_LV']) {
                 $userInfo['EMP_LV'] = EmployLevel::getDefaultLevelId();
             }
+            if (!$userInfo['STAR_LV']) {
+                $userInfo['STAR_LV'] = StarCrownLevel::getDefaultLevelId();
+            }
             $data = Json::encode($userInfo);
             Yii::$app->redis->hset($key, $userId, $data);
             unset($userInfo, $key, $userId, $periodNum);

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

@@ -189,7 +189,7 @@ class PerfCalc {
             $this->_updatePercent(100);
             $t10 = microtime(true);
 
-            echo('业绩结算全部完成,共耗时:' . round($t10 - $t9, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+            echo('业绩结算全部完成,共耗时:' . round($t10 - $t9, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL . PHP_EOL);
         } catch (\Exception $e) {
             $this->errorCalcTask();
             $this->addError('calc', $e->getMessage());

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

@@ -16,6 +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 DEC_ROLE_ID_TYPE = 'dec_role_id';
     const USER_SYSTEM_TYPE = 'user_system';
     const STATUS_TYPE = 'status';

+ 3 - 1
common/models/CalcBonus.php

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

+ 2 - 1
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'], 'string', 'max' => 32],
+            [['ID', 'USER_ID', 'LAST_DEC_LV', 'LAST_EMP_LV', 'LAST_STAR_LV'], 'string', 'max' => 32],
             [['LOGS'], 'string', 'max' => 2000],
             [['ID'], 'unique'],
         ];
@@ -57,6 +57,7 @@ class CalcBonusQY extends \common\components\ActiveRecord
             'USER_ID' => '会员ID',
             'LAST_DEC_LV' => '结算时会员级别',
             'LAST_EMP_LV' => '结算时会员聘级',
+            'LAST_STAR_LV' => '结算时会员星级',
             'LAST_STATUS' => '结算时状态',
             'AMOUNT' => '金额',
             'PERIOD_NUM' => '结算期数',

+ 4 - 1
common/models/EmployLevel.php

@@ -32,10 +32,11 @@ use yii\helpers\Json;
  * @property int $MIN_EMPLOY_NUM 最小聘级的数量
  * @property string $LEVEL_SCORE 级别分数
  * @property string $UPGRADE_SCORE 升级分数
+ * @property string $TOURISM_PERCENT 旅游奖比例
+ * @property string $GARAGE_PERCENT 车房奖比例
  */
 class EmployLevel extends \common\components\ActiveRecord
 {
-
     const NO_LEVEL_ID = '67BE1C6C21F81B32E055736AECE8644D';
     const JX_ZR_LEVEL_ID = 'E121497617216708615';
     const SHX_ZJ_LEVEL_ID = '99BE5FE7857C216AE000223AECE8644D';
@@ -133,6 +134,8 @@ class EmployLevel extends \common\components\ActiveRecord
             'OTHER_DEPART_PERF' => '去除最大部门,其它部门累计推荐业绩',
             'LEVEL_SCORE' => '级别分数',
             'UPGRADE_SCORE' => '升级分数',
+            'TOURISM_PERCENT' => '旅游奖比例',
+            'GARAGE_PERCENT' => '车房奖比例',
         ];
     }
 

+ 9 - 9
common/models/ShopGoods.php

@@ -42,11 +42,11 @@ class ShopGoods extends \common\components\ActiveRecord
 //            'id' => 2,
 //            'name' => '复消兑换',
 //        ],
-        3 => [
-            'id' => 3,
-            'name' => 'Bonus points', //兑换点数
-            'label' => 'exchange',
-        ],
+//        3 => [
+//            'id' => 3,
+//            'name' => '兑换点数',
+//            'label' => 'exchange',
+//        ],
         4 => [
             'id' => 4,
             'name' => 'Travel bonus', //旅游积分
@@ -97,7 +97,7 @@ class ShopGoods extends \common\components\ActiveRecord
             'name' => 'Common products',//普通商品
             'sell_type' => [
                 self::SALE_TYPE[1],
-                self::SALE_TYPE[3],
+//                self::SALE_TYPE[3],
                 self::SALE_TYPE[7],
             ]
         ],
@@ -215,9 +215,9 @@ class ShopGoods extends \common\components\ActiveRecord
             'point'=>[
                 'name'=>'积分支付' //积分支付
             ],
-            'exchange' => [
-                'name' => '积分点数' //积分点数
-            ],
+//            'exchange' => [
+//                'name' => '积分点数'
+//            ],
             'tourism_points'=>[
                 'name'=>'旅游积分'
             ],

+ 245 - 0
common/models/StarCrownLevel.php

@@ -0,0 +1,245 @@
+<?php
+
+namespace common\models;
+
+use common\helpers\Cache;
+use common\helpers\LoggerTool;
+use Yii;
+
+/**
+ * This is the model class for table "{{%STAR_LEVEL}}".
+ *
+ * @property string $ID
+ * @property string $LEVEL_NAME 级别名称
+ * @property int $ICON_TYPE 图标类型
+ * @property int $ICON_NUM 图标个数
+ * @property int $RX_PERCENT 图标个数
+ * @property string $MIN_LEVEL_ID 上级ID
+ * @property string $LEVEL_SCORE 级别分数
+ * @property string $UPGRADE_SCORE 升级分数
+ * @property string $TOURISM_PERCENT 旅游奖比例
+ * @property string $GARAGE_PERCENT 车房奖比例
+ * @property int $SORT 排序
+ * @property int $CREATED_AT 创建时间
+ * @property int $UPDATED_AT 更新时间
+ * @property string $CREATE_ADMIN 创建人
+ * @property string $UPDATE_ADMIN 更新人
+ */
+class StarCrownLevel extends \common\components\ActiveRecord
+{
+    const NO_LEVEL_ID = 'DCBEDD8E0EAD3DF59D81CCC0C2ACAEFF';
+
+    /**
+     * @inheritdoc
+     */
+    public static function tableName()
+    {
+        return '{{%STAR_LEVEL}}';
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function rules()
+    {
+        return [
+            [['LEVEL_NAME', 'CREATED_AT', 'CREATE_ADMIN'], 'required'],
+            [['SORT', 'CREATED_AT', 'UPDATED_AT', 'ICON_TYPE', 'ICON_NUM'], 'integer'],
+            [['LEVEL_SCORE', 'UPGRADE_SCORE', 'TOURISM_PERCENT', 'GARAGE_PERCENT'], 'number'],
+            [['ID', 'MIN_LEVEL_ID', 'CREATE_ADMIN', 'UPDATE_ADMIN'], 'string', 'max' => 32],
+            [['LEVEL_NAME'], 'string', 'max' => 20],
+            [['LEVEL_NAME'], 'unique'],
+            [['ID'], 'unique'],
+        ];
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function attributeLabels()
+    {
+        return [
+            'ID' => 'ID',
+            'LEVEL_NAME' => '级别名称',
+            'SORT' => '排序',
+            'CREATED_AT' => '创建时间',
+            'UPDATED_AT' => '更新时间',
+            'CREATE_ADMIN' => '创建人',
+            'UPDATE_ADMIN' => '更新人',
+            'ICON_TYPE' => '图标类型',
+            'ICON_NUM' => '图标个数',
+            'MIN_LEVEL_ID' => '上级ID',
+            'LEVEL_SCORE' => '级别分数',
+            'UPGRADE_SCORE' => '升级分数',
+            'TOURISM_PERCENT' => '旅游奖比例',
+            'GARAGE_PERCENT' => '车房奖比例',
+        ];
+    }
+
+    /**
+     * 获取全部级别以数字索引的方式展现
+     * @return array|\yii\db\ActiveRecord[]
+     */
+    public static function getAllDataWithNumIndex()
+    {
+        return static::find()->where('1=1')->orderBy('SORT ASC, CREATED_AT ASC')->indexBy('SORT')->asArray()->all();
+    }
+
+    /**
+     * 获取全部配置
+     * @return array|\yii\db\ActiveRecord[]
+     */
+    public static function getAllData()
+    {
+        return static::find()->where('1=1')->orderBy('SORT ASC, CREATED_AT ASC')->indexBy('ID')->asArray()->all();
+    }
+
+    // 获取级别配置一维度数组,id为键,级别等级为值
+    public static function getIdConvertLevelSort()
+    {
+        $ret = [];
+        $allData = static::find()->where('1=1')->orderBy('SORT ASC, CREATED_AT ASC')->indexBy('ID')->asArray()->all();
+        foreach($allData as $data) {
+            $ret[$data['ID']] = $data['LEVEL_SORT'];
+        }
+        return $ret;
+    }
+
+    /**
+     * 从缓存获取信息
+     * @return array|mixed|\yii\db\ActiveRecord[]
+     */
+    public static function getIdConvertLevelSortCache()
+    {
+        $key = Cache::STAR_LEVEL_CONFIG_KEY . ':idsort';
+        $data = Yii::$app->cache->get($key);
+        if(!$data){
+            // 获取信息
+            $data = self::getIdConvertLevelSort();
+            Yii::$app->cache->set($key, $data);
+        }
+
+        return $data;
+    }
+
+    /**
+     * 从缓存获取信息
+     * @return array|mixed|\yii\db\ActiveRecord[]
+     */
+    public static function getFromCache()
+    {
+        $data = Yii::$app->cache->get(Cache::STAR_LEVEL_CONFIG_KEY);
+        if(!$data){
+            // 获取信息
+            $data = self::getAllData();
+            Yii::$app->cache->set(Cache::STAR_LEVEL_CONFIG_KEY, $data);
+        }
+        return $data;
+    }
+
+    /**
+     *  更新缓存
+     * @return array|\yii\db\ActiveRecord[]
+     */
+    public static function updateToCache()
+    {
+        // 获取配置
+        $data = self::getAllData();
+        Yii::$app->cache->set(Cache::STAR_LEVEL_CONFIG_KEY, $data);
+        return $data;
+    }
+
+    /**
+     * 通过排序获取级别
+     * @param int $sort
+     * @return mixed
+     */
+    public static function getLevelFromSort(int $sort)
+    {
+        static $starLevels;
+        if(!$starLevels){
+            $starLevels = self::getFromCache();
+            $starLevels = array_column($starLevels, null, 'sort');
+        }
+        return $starLevels[$sort];
+    }
+
+    /**
+     * 通过排序获取ID
+     * @param int $sort
+     * @return mixed
+     */
+    public static function getIdFromSort(int $sort)
+    {
+        $level = self::getLevelFromSort($sort);
+        return $level['ID'];
+    }
+
+    /**
+     * 获取默认级别
+     * @return mixed
+     */
+    public static function getDefaultLevelId()
+    {
+        return self::NO_LEVEL_ID;
+    }
+
+    /**
+     * 获取星级的排序
+     * @param $id
+     * @return mixed
+     */
+    public static function getSortById($id)
+    {
+        $starLevels = self::getFromCache();
+        return $starLevels[$id]['SORT'] ?? 0;
+    }
+
+    /**
+     * 通过ID获取星级名称
+     * @param $levelId
+     * @return mixed'
+     */
+    public static function getNameById($levelId)
+    {
+        return self::findOneAsArray('ID = :ID', [':ID' => $levelId])['LEVEL_NAME'] ?? '';
+    }
+
+    /**
+     * 奖金参数
+     */
+    public static function getBonusConfig(){
+        $allData = self::getAllData();
+        $data = [];
+        foreach ($allData as $value) {
+            $data[$value['ID']]['label'] = $value['LEVEL_NAME'];
+            $data[$value['ID']]['value'] = '【旅游奖】拿奖比例' . $value['TOURISM_PERCENT'] . '%,' . '【车房奖】拿奖比例' . $value['GARAGE_PERCENT'] . '%';
+        }
+        return $data;
+    }
+
+    /**
+     * 根据业绩计算星级
+     * @param $payLeg
+     * @return array|mixed|\yii\db\ActiveRecord
+     */
+    public static function getStarCrown($payLeg)
+    {
+        $starCrown = [];
+        $allData = self::getAllData();
+        // 最大边界值
+        $maxData = end($allData);
+        if ($payLeg >= $maxData) {
+            return $maxData;
+        }
+
+        foreach ($allData as $item) {
+            if (($payLeg >= $item['LEVEL_SCORE']) && ($payLeg < $item['UPGRADE_SCORE'])) {
+                $starCrown = $item;
+                break;
+            }
+        }
+
+        return $starCrown ?: $allData[self::NO_LEVEL_ID];
+    }
+}

+ 72 - 0
common/models/StarCrownLevelForm.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace common\models;
+
+use common\components\Model;
+use common\helpers\Form;
+use common\libs\logging\operate\AdminOperate;
+use common\models\DeclarationLevel;
+use common\models\StarCrownLevel;
+
+/**
+ * Login form
+ */
+class StarCrownLevelForm extends Model
+{
+
+    public function init()
+    {
+        parent::init();
+        $this->adminOperateLogger = new AdminOperate([
+            'fetchClass' => StarCrownLevel::class,
+        ]);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function rules()
+    {
+        return [];
+    }
+
+    /**
+     * 更新星级奖金
+     * @return bool
+     * @throws \yii\db\Exception
+     */
+    public function updateBonus()
+    {
+        $beforeData = StarCrownLevel::getBonusConfig();
+        $this->adminOperateLogger->saveBeforeContent=$beforeData;
+
+        $postData = \Yii::$app->request->post('data');
+        $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()));
+                    }
+                }
+            }
+            $transaction->commit();
+        } catch (\Exception $e) {
+            $transaction->rollBack();
+            $this->addError('updateBonus', $e->getMessage());
+            return null;
+        }
+
+        $afterData = StarCrownLevel::getBonusConfig();
+        $this->adminOperateLogger->saveAfterContent = $afterData;
+        unset($beforeData,$afterData);
+
+        $this->adminOperateLogger->clean()->save([
+            'optType' => '更新星级奖金配置',
+        ]);
+        return true;
+    }
+}

+ 10 - 3
common/models/User.php

@@ -38,6 +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 int $PROVINCE 省份
  * @property int $CITY 城市
  * @property int $COUNTY 县区
@@ -113,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', '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', '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],
             [['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],
@@ -159,6 +160,7 @@ class User extends \common\components\ActiveRecord
             'DEC_CLOSED_AT' => '关闭时间',
             'DEC_LV' => '报单级别',
             'EMP_LV' => '聘级',
+            'STAR_LV' => '星级',
             'PROVINCE' => '省份',
             'CITY' => '城市',
             'COUNTY' => '县区',
@@ -239,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,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,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();
             Yii::$app->redis->hset(Cache::USER_INFO_KEY, $userId, Json::encode($userInfo));
         } else {
             $userInfo = Json::decode($userInfo);
@@ -253,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,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,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();
         return Yii::$app->redis->hset(Cache::USER_INFO_KEY, $userId, Json::encode($userInfo));
     }
 
@@ -352,6 +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'],
             'PROVINCE' => $userInfo['PROVINCE'],
             'CITY' => $userInfo['CITY'],
             'COUNTY' => $userInfo['COUNTY'],
@@ -461,6 +464,10 @@ class User extends \common\components\ActiveRecord
                 'label' => '聘级',
                 'type' => ValueTypeConfig::EMP_LV_TYPE,
             ],
+            'STAR_LV' => [
+                'label' => '星级',
+                'type' => ValueTypeConfig::STAR_LV_TYPE,
+            ],
             'LAST_DEC_LV' => [
                 'label' => '上次的报单级别',
                 'type' => ValueTypeConfig::DEC_LV_TYPE,

+ 0 - 6
common/models/forms/ShopGoodsForm.php

@@ -187,9 +187,6 @@ class ShopGoodsForm extends Model
             return null;
         }
 
-        // 汇率
-        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
-
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             // 添加商品
@@ -237,9 +234,6 @@ class ShopGoodsForm extends Model
             return null;
         }
 
-        // 汇率
-        $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
-
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             $model = $this->_model;

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

@@ -95,15 +95,15 @@ class ShopController extends BaseController {
             }
         }
         $userBalance = [
-            'points' => 0,
+//            'points' => 0,
             'cash' => 0,
-            'exchange' => 0,
+//            'exchange' => 0,
             'tourism_points' => 0,
             'garage_points' => 0,
         ];
         if ($userBonusResult = UserBonus::findOneAsArray(['USER_ID' => $userId])) {
-            $userBalance['points'] = $userBonusResult['RECONSUME_POINTS'];
-            $userBalance['exchange'] = $userBonusResult['EXCHANGE_POINTS'];
+//            $userBalance['points'] = $userBonusResult['RECONSUME_POINTS'];
+//            $userBalance['exchange'] = $userBonusResult['EXCHANGE_POINTS'];
             $userBalance['tourism_points'] = $userBonusResult['TOURISM_POINTS'];
             $userBalance['garage_points'] = $userBonusResult['GARAGE_POINTS'];
         }

+ 0 - 13
frontendEle/src/views/shop/order.vue

@@ -88,29 +88,17 @@
                 Account Balance:	<!-- 账户余额 -->
                 <div class="sum">
                     <div v-if="category_type === 1">
-<!--                        <div class="sum_box">-->
-<!--                            <div>账户积分</div>-->
-<!--                            <div>{{ balance.points }}</div>-->
-<!--                        </div>-->
                         <div class="sum_box">
                             <div>Account Balance</div><!-- 账户余额 -->
                             <div>₦ {{ balance.cash }} NGN</div>
                         </div>
-                        <div class="sum_box">
-                            <div>Exchange points</div><!-- 兑换点数 -->
-                            <div>{{ balance.exchange }}</div>
-                        </div>
                     </div>
-
                     <div v-if="category_type === 4">
                         <div class="sum_box">
                             <div>Travel bonus</div><!-- 旅游积分 -->
                             <div>{{ balance.travel_points }}</div>
                         </div>
                     </div>
-
-
-
                     <div v-if="category_type === 5">
                         <div class="sum_box">
                             <div>车房积分</div>
@@ -119,7 +107,6 @@
                     </div>
                     </div>
                 </div>
-
                 <div>
                     <el-button type="danger" @click="cancelOrder()">Go Back</el-button>
                     <el-button type="primary" @click="goToAccounts()" :loading="submitButtonStat">Settle accounts</el-button><!--去结算-->