Explorar el Código

Merge branch 'master' into feature/EK-744

kevinElken hace 8 meses
padre
commit
a013d90230
Se han modificado 47 ficheros con 1104 adiciones y 262 borrados
  1. 7 6
      backendApi/config/menu.php
  2. 5 8
      backendApi/config/params.php
  3. 25 19
      backendApi/config/urlManagerRules.php
  4. 73 15
      backendApi/modules/v1/controllers/AdminController.php
  5. 161 11
      backendApi/modules/v1/controllers/BonusController.php
  6. 124 0
      backendApi/modules/v1/controllers/ConfigController.php
  7. 26 2
      backendApi/modules/v1/controllers/CurrencyController.php
  8. 114 4
      backendApi/modules/v1/controllers/FinanceController.php
  9. 102 9
      backendApi/modules/v1/controllers/ShopController.php
  10. 26 4
      backendApi/modules/v1/controllers/SiteController.php
  11. 102 13
      backendApi/modules/v1/controllers/UserController.php
  12. 36 31
      backendApi/modules/v1/models/Admin.php
  13. 56 0
      backendApi/modules/v1/models/AdminCountry.php
  14. 24 2
      backendApi/modules/v1/models/AdminForm.php
  15. 9 0
      backendApi/modules/v1/models/AdminRole.php
  16. 8 3
      backendApi/modules/v1/models/lists/bonus/BalanceList.php
  17. 8 4
      backendApi/modules/v1/models/lists/bonus/FlowBonusList.php
  18. 7 2
      backendApi/modules/v1/models/lists/bonus/PerfMonthList.php
  19. 10 5
      backendApi/modules/v1/models/lists/bonus/PerfOrderList.php
  20. 8 1
      backendApi/modules/v1/models/lists/bonus/PeriodBonusList.php
  21. 7 2
      backendApi/modules/v1/models/lists/bonus/UserPerfList.php
  22. 7 2
      backendApi/modules/v1/models/lists/finance/BalanceAuditList.php
  23. 1 1
      backendApi/modules/v1/models/lists/finance/RechargeList.php
  24. 12 2
      backendApi/modules/v1/models/lists/finance/TransferList.php
  25. 9 63
      backendApi/modules/v1/models/lists/shop/GoodsList.php
  26. 6 6
      backendApi/modules/v1/models/lists/shop/OrderList.php
  27. 6 1
      backendApi/modules/v1/models/lists/shop/OrderPeriodAdjustList.php
  28. 7 2
      backendApi/modules/v1/models/lists/user/ChangeHighestEmpLevelList.php
  29. 7 3
      backendApi/modules/v1/models/lists/user/DecLevelList.php
  30. 7 2
      backendApi/modules/v1/models/lists/user/MoveList.php
  31. BIN
      backendEle/static/src/img/ngds-logo.jpg
  32. 2 10
      common/config/main.php
  33. 3 4
      common/libs/export/BaseExport.php
  34. 1 1
      common/messages/en-US/app.php
  35. 1 1
      common/messages/zh-CN/app.php
  36. 20 0
      common/models/Countries.php
  37. 0 1
      common/models/Currency.php
  38. 6 3
      common/models/Region.php
  39. 1 1
      common/models/User.php
  40. 0 4
      common/models/forms/ShopGoodsForm.php
  41. 32 4
      common/models/forms/WithdrawForm.php
  42. 8 1
      console/controllers/BonusController.php
  43. 1 1
      frontendApi/config/params.php
  44. 14 4
      frontendApi/modules/v1/controllers/ShopController.php
  45. 3 4
      frontendApi/modules/v1/controllers/SiteController.php
  46. 12 0
      frontendApi/modules/v1/controllers/UserController.php
  47. BIN
      frontendEle/static/src/img/ngds-logo.jpg

+ 7 - 6
backendApi/config/menu.php

@@ -29,6 +29,7 @@ return [
             ['name'=>'编辑商品', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'goods-edit', 'routePath'=>'shop/goods-edit', 'show'=>0,],
             ['name'=>'商品上下架', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'goods-status', 'routePath'=>'shop/goods-status', 'show'=>0],
             ['name'=>'删除商品', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'goods-delete', 'routePath'=>'shop/goods-delete', 'show'=>0,],
+            ['name'=>'商品国家', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'goods-add', 'routePath'=>'site/countries', 'show'=>0],
             ['name'=>'商品列表导出', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'goods-list-export', 'routePath'=>'shop/goods-list-export', 'show'=>0,],
             ['name'=>'Order list', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-list', 'routePath'=>'shop/order-list', 'show'=>1, 'wiki' => 'orderList'],//订单列表
             ['name'=>'订单列表导出', 'class'=>'', 'icon'=>'', 'controller'=>'shop', 'action'=>'order-list-export', 'routePath'=>'shop/order-list-export', 'show'=>0,],
@@ -66,8 +67,8 @@ return [
             ['name'=>'Member level adjustment list', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'dec-level-list', 'routePath'=>'user/dec-level-list', 'show'=>1, 'wiki' => 'memberLevelAdjustmentList'],//会员级别调整列表
             ['name'=>'修改会员级别', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'change-user-dec-level', 'routePath'=>'user/change-user-dec-level', 'show'=>0,],
             ['name'=>'Modify Stockist level', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'change-user-dec-role', 'routePath'=>'user/change-user-dec-role', 'show'=>1, 'wiki' => 'modifyStockistLevel'],//修改报单中心级别
-            ['name'=>'会员最高聘级调整', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'change-user-dec-level', 'routePath'=>'user/change-highest-emp-level-list', 'show'=>1, 'wiki' => 'memberHighestEmpLevelAdjustment'],
-            ['name'=>'修改会员最高聘级', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'change-user-dec-level', 'routePath'=>'user/change-highest-emp-level', 'show'=>0,],
+            ['name'=>'会员最高聘级调整', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'change-highest-emp-level-list', 'routePath'=>'user/change-highest-emp-level-list', 'show'=>1, 'wiki' => 'memberHighestEmpLevelAdjustment'],
+            ['name'=>'修改会员最高聘级', 'class'=>'', 'icon'=>'', 'controller'=>'user', 'action'=>'change-highest-emp-level', 'routePath'=>'user/change-highest-emp-level', 'show'=>0,],
         ]
     ],
     'atlas'=>[
@@ -274,10 +275,10 @@ return [
             ['name'=>'编辑会员级别', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-level-edit', 'routePath'=>'config/dec-level-edit', 'show'=>0,],
             ['name'=>'报单中心级别配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-role', 'routePath'=>'config/dec-role', 'show'=>1, 'wiki' => 'decRoleConfig'],
             ['name'=>'编辑报单中心级别', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-role-edit', 'routePath'=>'config/dec-role-edit', 'show'=>0,],
-            ['name'=>'汇率列表', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'currencies-conversions', 'routePath'=>'currency/currencies-conversions', 'show'=>1,  'wiki' => 'exchangeRateConfig'],
-            ['name'=>'汇率配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'set-currencies-conversions', 'routePath'=>'currency/set-currencies-conversions', 'show'=>0],
-            ['name'=>'运费模板列表', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'transportation', 'routePath'=>'transportation/transportation', 'show'=>1,  'wiki' => 'transportationConfig'],
-            ['name'=>'运费模板设置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'set-transportation', 'routePath'=>'transportation/set-transportation', 'show'=>0],
+            ['name'=>'汇率列表', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'currencies', 'routePath'=>'config/currencies', 'config'=>'config/currencies', 'show'=>1,  'wiki' => 'currenciesConfig'],
+            ['name'=>'汇率配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'set-currencies-conversions', 'config'=>'config/set-currencies-conversions', 'show'=>0],
+            ['name'=>'运费模板', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'transportation', 'routePath'=>'config/transportation', 'show'=>1,  'wiki' => 'transportationConfig'],
+            ['name'=>'运费设置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'set-transportation', 'routePath'=>'config/set-transportation', 'show'=>0],
         ],
     ],
 ];

+ 5 - 8
backendApi/config/params.php

@@ -13,7 +13,6 @@ return [
         'v1/site/send-notice',
         'v1/site/send-notify',
         'v1/site/languages',
-        'v1/site/countries',
         'v1/ad/sort',
         'v1/article/detail',
         'v1/admin/change-language',
@@ -24,8 +23,8 @@ return [
         'v1/bonus/calc-period',
         'v1/calc/record-list',
         'v1/calc/auto-calc',
-        'v1/shop/order-detail',
         'v1/shop/order-period-adjust-batch',
+//        'v1/site/countries'
     ],
     'noCheckPermissionActions' => [
         'oauth/login',
@@ -39,7 +38,6 @@ return [
         'site/page-data',
         'site/captcha',
         'site/languages',
-        'site/countries',
         'user/full-info',
         'user/filter-user',
         'user/generate-user-name',
@@ -85,10 +83,10 @@ return [
         'demo/ipayments',
         'article/detail',
         'admin/change-language',
-        'currency/currencies-conversions',
-        'currency/set-currencies-conversions',
-        'transportation/transportation',
-        'transportation/set-transportation',
+//        'currency/currencies-conversions',
+//        'currency/set-currencies-conversions',
+//        'transportation/transportation',
+//        'transportation/set-transportation',
         'bonus/auto-calc',
         'bonus/calc-period',
         'bonus/close-period',
@@ -96,7 +94,6 @@ return [
         'bonus/calc-period',
         'calc/record-list',
         'calc/auto-calc',
-        'shop/order-detail',
         'shop/order-period-adjust-batch',
     ],
 ];

+ 25 - 19
backendApi/config/urlManagerRules.php

@@ -322,6 +322,10 @@ return [
             'POST,GET sms' => 'sms',
             'POST,GET transfer' => 'transfer',
             'POST,GET score' => 'score',
+            'GET currencies' => 'currencies',
+            'POST set-currencies-conversions' => 'set-currencies-conversions',
+            'GET transportation' => 'transportation',
+            'POST set-transportation' => 'set-transportation',
         ],
     ],
     [
@@ -593,23 +597,25 @@ return [
             'GET sync-calc-record/<periodNum>' => 'sync-calc-record',
         ],
     ],
-    [
-        'class' => 'yii\rest\UrlRule',
-        'pluralize' => false,
-        'controller' => 'v1/currency',
-        'extraPatterns' => [
-            'GET currencies' => 'currencies',
-            'GET currencies-conversions' => 'currencies-conversions',
-            'POST set-currencies-conversions' => 'set-currencies-conversions',
-        ],
-    ],
-    [
-        'class' => 'yii\rest\UrlRule',
-        'pluralize' => false,
-        'controller' => 'v1/transportation',
-        'extraPatterns' => [
-            'GET transportation' => 'transportation',
-            'POST set-transportation' => 'set-transportation',
-        ],
-    ],
+//    [
+//        'class' => 'yii\rest\UrlRule',
+//        'pluralize' => false,
+//        'controller' => 'v1/currency',
+//        'extraPatterns' => [
+//            'GET currencies' => 'currencies',
+//            'GET currencies-conversions' => 'currencies-conversions',
+//            'POST set-currencies-conversions' => 'set-currencies-conversions',
+//            'GET transportation' => 'transportation',
+//            'POST set-transportation' => 'set-transportation',
+//        ],
+//    ],
+//    [
+//        'class' => 'yii\rest\UrlRule',
+//        'pluralize' => false,
+//        'controller' => 'v1/transportation',
+//        'extraPatterns' => [
+//            'GET transportation' => 'transportation',
+//            'POST set-transportation' => 'set-transportation',
+//        ],
+//    ],
 ];

+ 73 - 15
backendApi/modules/v1/controllers/AdminController.php

@@ -8,6 +8,7 @@
 namespace backendApi\modules\v1\controllers;
 
 use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\AdminCountry;
 use backendApi\modules\v1\models\AdminForm;
 use backendApi\modules\v1\models\AdminRoleForm;
 use common\helpers\Cache;
@@ -15,6 +16,7 @@ use common\helpers\Date;
 use common\helpers\Form;
 use common\helpers\Log;
 use common\helpers\Tool;
+use common\models\Countries;
 use Yii;
 use backendApi\modules\v1\models\AdminRole;
 use backendApi\modules\v1\models\User;
@@ -23,6 +25,7 @@ use yii\helpers\Json;
 class AdminController extends BaseController
 {
     public $modelClass = User::class;
+
     public function behaviors() {
         $behaviors = parent::behaviors();
         //$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
@@ -38,22 +41,27 @@ class AdminController extends BaseController
         $filter = $this->filterCondition([
             'ADMIN_NAME' => 'A.ADMIN_NAME',
             'REAL_NAME' => 'A.REAL_NAME',
-            'REMARK' => 'A.REMARK',
             'ROLE_NAME' => 'AR.ROLE_NAME',
             'IS_ENABLE' => 'A.IS_ENABLE',
-            'LOGIN_NUMS' => 'A.LOGIN_NUMS',
-            'LAST_LOGIN_IP' => 'A.LAST_LOGIN_IP',
-            'LAST_LOGIN_AT' => 'A.LAST_LOGIN_AT',
-            'BIND_IP' => 'A.BIND_IP',
-            'CREATED_AT' => 'A.CREATED_AT',
-            'UPDATED_AT' => 'A.UPDATED_AT',
-            'CREATE_ADMIN_NAME' => 'ADMC.ADMIN_NAME',
-            'UPDATE_ADMIN_NAME' => 'ADMU.ADMIN_NAME',
         ]);
 
         $condition = $filter['condition'];
-        $condition .= ' AND A.IS_DEL=0';
         $params = $filter['params'];
+        $condition .= ' AND A.IS_DEL=0';
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $adminIds = AdminCountry::find()->select('ADMIN_ID')->where(['in', 'COUNTRY_ID', $adminCountry])->column();
+            $quotedAdminId = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminIds);
+
+            $condition .= ' AND A.ID IN (' . implode(',', $quotedAdminId) . ')';
+        }
+
         $data = Admin::lists($condition, $params, [
             'select' => 'A.*,AR.ROLE_NAME,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME UPDATE_ADMIN_NAME',
             'from' => Admin::tableName().' AS A',
@@ -64,6 +72,19 @@ class AdminController extends BaseController
             ],
             'orderBy' => 'A.CREATED_AT ASC',
         ]);
+
+        foreach ($data['list'] as &$admin) {
+            $isSuperAdmin = AdminRole::isSuperAdmin($admin['ROLE_ID']);
+            $admin['isSuper'] = $isSuperAdmin;
+            if ($isSuperAdmin) {
+                $admin['countryId'] = [];
+                $admin['country'] = [];
+            } else {
+                $admin['countryId'] = AdminCountry::getCountry($admin['ID']);
+                $admin['country'] = Countries::find()->select('NAME')->where(['in', 'ID', $admin['countryId']])->column();
+            }
+        }
+
         return static::notice($data);
     }
 
@@ -80,9 +101,21 @@ class AdminController extends BaseController
                 // Log::adminHandle('添加管理员:'.$result->ADMIN_NAME);
             });
         }
-        // 获取全部管理员角色
-        $adminRoles = Cache::getAdminRole();
-        return static::notice(['adminRoles'=>$adminRoles]);
+
+        $countries = Cache::getCountries();
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
+        return static::notice([
+            'adminRoles' => Cache::getAdminRole(),
+            'countries'  => $countries
+        ]);
     }
 
     /**
@@ -99,10 +132,35 @@ class AdminController extends BaseController
                 // Log::adminHandle('编辑管理员:'.$result->ADMIN_NAME);
             });
         }
-        $oneData = Admin::findOneAsArray(['ID'=>$id]);
+
+        $oneData = Admin::findOneAsArray(['ID' => $id]);
+        $adminCountry = AdminCountry::getCountry($id);
         // 获取全部管理员角色
         $adminRoles = Cache::getAdminRole();
-        return static::notice(['oneData'=>['adminName'=>$oneData['ADMIN_NAME'],'realName'=>$oneData['REAL_NAME'],'remark'=>$oneData['REMARK'],'isEnable'=>$oneData['IS_ENABLE']?true:false,'isModifyPassword'=>$oneData['IS_MODIFY_PASSWORD']?true:false,'bindIp'=>$oneData['BIND_IP'],'roleId'=>$oneData['ROLE_ID']], 'adminRoles'=>$adminRoles]);
+
+        $countries = Cache::getCountries();
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
+        return static::notice([
+            'adminRoles' => $adminRoles,
+            'countries'  => $countries,
+            'oneData' => [
+                'adminName' => $oneData['ADMIN_NAME'],
+                'realName' => $oneData['REAL_NAME'],
+                'remark' => $oneData['REMARK'],
+                'isEnable' => (bool)$oneData['IS_ENABLE'],
+                'isModifyPassword' => (bool)$oneData['IS_MODIFY_PASSWORD'],
+                'bindIp' => $oneData['BIND_IP'],
+                'roleId' => $oneData['ROLE_ID'],
+                'countryId' => AdminCountry::getCountry($oneData['ID']),
+            ]]);
     }
 
     /**

+ 161 - 11
backendApi/modules/v1/controllers/BonusController.php

@@ -8,6 +8,8 @@
 
 namespace backendApi\modules\v1\controllers;
 
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use backendApi\modules\v1\models\exportForms\BonusExportForm;
 use backendApi\modules\v1\models\lists\bonus\BalanceList;
 use backendApi\modules\v1\models\lists\bonus\FlowBalanceList;
@@ -197,6 +199,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new FlowBonusList();
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
         return static::notice($data);
@@ -227,8 +241,23 @@ class BonusController extends BaseController {
             'REMARK' => 'REMARK',
             'TRANSFER_SN' => 'TRANSFER_SN',
         ]);
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new BonusExportForm();
-        $result = $form->run($filter, 'Bonus_Flow'); // 奖金流水
+        $result = $form->run(['condition'=>$condition, 'params'=>$params], 'Bonus_Flow'); // 奖金流水
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }
@@ -311,6 +340,9 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+
+
         $listObj = new FlowBalanceList();
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
         return static::notice($data);
@@ -836,8 +868,23 @@ class BonusController extends BaseController {
         }
         $period = Period::instance();
         $yearMonth = $period->getYearMonth($periodNum);
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND CU.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new BonusExportForm();
-        $result = $form->run(array_merge($filter, ['others'=>['yearMonth'=>$yearMonth]]), 'Member Bonus'); // 往期奖金
+        $result = $form->run(array_merge(['condition'=>$condition, 'params'=>$params, 'others'=>['yearMonth'=>$yearMonth]]), 'Member Bonus'); // 往期奖金
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }
@@ -894,6 +941,17 @@ class BonusController extends BaseController {
             $params[':PERIOD_NUM'] = $periodNum;
         }
 
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND CU.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new PeriodBonusList();
         return $listObj->getList(['condition'=>$condition, 'params'=>$params, 'others'=>['yearMonth'=>$yearMonth]]);
     }
@@ -2066,11 +2124,22 @@ class BonusController extends BaseController {
         $filter = $this->filterCondition([
             'USER_NAME' => 'UI.USER_NAME',
             'REAL_NAME' => 'UI.REAL_NAME',
-            'userIds' => 'UB.USER_ID',
             'IS_DEC' => 'UI.IS_DEC',
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND UI.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new BalanceList();
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
         return static::notice($data);
@@ -2086,17 +2155,25 @@ class BonusController extends BaseController {
         $filter = $this->filterCondition([
             'USER_NAME' => 'UI.USER_NAME',
             'REAL_NAME' => 'UI.REAL_NAME',
-            'userIds' => 'UB.USER_ID',
-            'BONUS' => 'BONUS',
             'IS_DEC' => 'UI.IS_DEC',
-            'PERIOD_AT' => 'UI.PERIOD_AT',
-            'MOBILE' => 'UI.MOBILE',
-            'TEL' => 'UI.TEL',
-//            'CF' => 'CF',
-//            'LX' => 'LX',
         ]);
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND UI.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new BonusExportForm();
-        $result = $form->run($filter, '会员奖金余额');
+        $result = $form->run(['condition'=>$condition, 'params'=>$params], '会员奖金余额');
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }
@@ -2317,6 +2394,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new PerfOrderList();
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
 
@@ -2359,6 +2448,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new BonusExportForm();
         $result = $form->run(['condition'=>$condition, 'params'=>$params], '业绩单');
         if (!$result) {
@@ -2427,6 +2528,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new PerfMonthList();
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
 
@@ -2449,6 +2562,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new BonusExportForm();
         $result = $form->run(['condition'=>$condition, 'params'=>$params], '月业绩');
         if (!$result) {
@@ -2651,6 +2776,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new UserPerfList();
         $data = $listObj->getList(['condition'=>$condition, 'params'=>$params]);
 
@@ -2669,6 +2806,18 @@ class BonusController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new BonusExportForm();
         $result = $form->run(['condition'=>$condition, 'params'=>$params], '用户业绩');
         if (!$result) {
@@ -2682,6 +2831,7 @@ class BonusController extends BaseController {
      *
      */
     public function actionAutoWithdraw() {
+        Cache::setWithdrawLock(0); // todo
         $withdrawLock = Cache::getWithdrawLock();
         if ($withdrawLock!=0){
             return static::notice(Form::formatErrorsForApi('已有进程在生成'), 400);

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

@@ -9,14 +9,22 @@
 namespace backendApi\modules\v1\controllers;
 
 use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\Form;
+use common\helpers\LoggerTool;
+use common\models\Countries;
+use common\models\Currency;
+use common\models\CurrencyConversions;
 use common\models\DecRole;
 use common\models\forms\ConfigForm;
 use common\models\forms\ConfigPeriodForm;
+use common\models\forms\CurrenciesConversionsForm;
 use common\models\forms\DecLevelForm;
 use common\models\forms\DecRoleForm;
+use common\models\forms\FreeTemplateForm;
 use common\models\forms\RegTypeForm;
 use common\models\forms\DeclarationLevelForm;
 use common\models\forms\EmployLevelForm;
@@ -24,6 +32,7 @@ use common\models\forms\OcrApiForm;
 use common\models\forms\SmsApiForm;
 use common\models\forms\SmsTemplateForm;
 use common\models\forms\WithdrawLevelForm;
+use common\models\FreeTemplate;
 use common\models\OcrApi;
 use common\models\RegType;
 use common\models\DeclarationLevel;
@@ -35,10 +44,18 @@ use Yii;
 use common\models\Config;
 use yii\base\Exception;
 use yii\helpers\Json;
+use yii\web\HttpException;
 
 class ConfigController extends BaseController {
     public $modelClass = Config::class;
 
+    public $currencyModelClass = Currency::class;
+
+    public $currencyConversionsModelClass = CurrencyConversions::class;
+
+    public $freeTemplateModelClass = FreeTemplate::class;
+    public $countiesModelClass = Countries::class;
+
     public function behaviors() {
         return parent::behaviors();
     }
@@ -798,4 +815,111 @@ class ConfigController extends BaseController {
         file_put_contents($path, $content, LOCK_EX);
         return static::notice(Yii::t('ctx', 'successfully'));
     }
+
+    public function actionCurrencies()
+    {
+        // 国家
+        $countries = Cache::getCountries();
+        // 货币
+        $currencies = $this->currencyModelClass::getFromCache();
+        // 汇率
+        $currencyConversion = $this->currencyConversionsModelClass::getFromCache();
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
+        $countriesCurrencyIds = array_column($countries, 'LOCAL_CURRENCY_ID');
+        $currencyConversion = array_filter($currencyConversion, fn($item) => in_array($item['TO_CURRENCY_ID'], $countriesCurrencyIds));
+        $currencyConversion = array_values($currencyConversion);
+        $currencyConversion = array_column($currencyConversion, null, 'TO_CURRENCY_ID');
+
+        $currencies = array_filter($currencies, fn($item) => in_array($item['ID'], $countriesCurrencyIds));
+        $currencies = array_values($currencies);
+
+        foreach ($currencies as &$currency) {
+            $currency['PRODUCT_RATE'] = $currencyConversion[$currency['ID']]['PRODUCT_RATE'] ?? 0;
+            $currency['BONUSES_RATE'] = $currencyConversion[$currency['ID']]['BONUSES_RATE'] ?? 0;
+        }
+
+        return static::notice(['data' => $currencies]);
+    }
+
+    /**
+     * @throws \yii\db\Exception
+     * @throws HttpException
+     */
+    public function actionSetCurrenciesConversions()
+    {
+        if (\Yii::$app->request->isPost) {
+            $formModel = new CurrenciesConversionsForm();
+            $formModel->scenario = 'setCurrenciesConversions';
+            if ($formModel->load(\Yii::$app->request->post(), '') && $formModel->setCurrenciesConversions()) {
+                // 更新缓存
+                $this->currencyConversionsModelClass::updateToCache();
+
+                return static::notice(\Yii::t('ctx', 'successfully'));
+            } else {
+                return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
+
+            }
+        }
+
+        return static::notice(\Yii::t('ctx', 'illegalRequest'));
+    }
+
+    public function actionTransportation()
+    {
+        // 国家列表
+        $countries = $this->countiesModelClass::getFromCache();
+        // 运费列表
+        $transportation = $this->freeTemplateModelClass::getFromCache();
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+            $countriesId = array_column($countries, 'ID');
+
+            $transportation = array_filter($transportation, fn($item) => in_array($item['country_id'], $countriesId));
+            $transportation = array_values($transportation);
+        }
+
+        $transportation = array_column($transportation, NULL, 'country_id');
+
+        foreach ($countries as &$country) {
+            $country['freight'] = $transportation[$country['ID']]['freight'] ?? 0;
+            $country['free_shipping'] = $transportation[$country['ID']]['free_shipping'] ?? 0;
+            $country['currency'] = $this->currencyModelClass::getById($country['LOCAL_CURRENCY_ID']);
+        }
+
+        return static::notice(['data' => $countries]);
+    }
+
+    public function actionSetTransportation()
+    {
+        if (\Yii::$app->request->isPost) {
+            $formModel = new FreeTemplateForm();
+            $formModel->scenario = 'setTransportation';
+            if ($formModel->load(\Yii::$app->request->post(), '') && $formModel->setTransportation()) {
+                // 更新缓存
+                $this->modelClass::updateToCache();
+
+                return static::notice(\Yii::t('ctx', 'successfully'));
+            } else {
+                return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
+
+            }
+        }
+
+        return static::notice(\Yii::t('ctx', 'illegalRequest'));
+    }
 }

+ 26 - 2
backendApi/modules/v1/controllers/CurrencyController.php

@@ -2,10 +2,14 @@
 
 namespace backendApi\modules\v1\controllers;
 
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
+use common\helpers\Cache;
 use common\helpers\Form;
 use common\models\Currency;
 use common\models\CurrencyConversions;
 use common\models\forms\CurrenciesConversionsForm;
+use Yii;
 use yii\db\Exception;
 use yii\web\HttpException;
 
@@ -23,10 +27,30 @@ class CurrencyController extends BaseController
 
     public function actionCurrenciesConversions()
     {
-        // 货币列表
+        // 国家
+        $countries = Cache::getCountries();
+        // 货币
         $currencies = $this->modelClass::getFromCache();
-        // 货币汇率配置
+        // 汇率配置
         $currencyConversion = $this->currencyConversionsModelClass::getFromCache();
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+            $countriesId = array_column($countries, 'ID');
+
+            $currencies = array_filter($currencies, fn($currency) => in_array($currency['ID'], $countriesId));
+            $currencies = array_values($currencies);
+            $currenciesId = array_column($currencies, 'ID');
+
+            $currencyConversion = array_filter($currencyConversion, fn($conversion) => in_array($conversion['TO_CURRENCY_ID'], $currenciesId));
+            $currencyConversion = array_values($currencyConversion);
+        }
+
         $currencyConversion = array_column($currencyConversion, NULL, 'TO_CURRENCY_ID');
 
         foreach ($currencies as &$currency) {

+ 114 - 4
backendApi/modules/v1/controllers/FinanceController.php

@@ -9,6 +9,8 @@
 namespace backendApi\modules\v1\controllers;
 
 use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use backendApi\modules\v1\models\exportForms\FinanceExportForm;
 use backendApi\modules\v1\models\lists\finance\BalanceAuditList;
 use backendApi\modules\v1\models\lists\finance\HistoryBonusList;
@@ -93,6 +95,18 @@ class FinanceController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new BalanceAuditList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
         return static::notice($data);
@@ -123,8 +137,23 @@ class FinanceController extends BaseController {
             'CREATE_ADMIN_NAME' => 'ADMC.ADMIN_NAME',
             'AUDIT_ADMIN_NAME' => 'ADMU.ADMIN_NAME',
         ]);
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new FinanceExportForm();
-        $result = $form->run($filter, Yii::t('ctx', 'memberEcoinAdjustmentListFileName')); // 会员余额调整列表
+        $result = $form->run(['condition' => $condition, 'params' => $params], Yii::t('ctx', 'memberEcoinAdjustmentListFileName')); // 会员余额调整列表
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }
@@ -273,6 +302,18 @@ class FinanceController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new TransferList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
         return static::notice($data);
@@ -305,8 +346,23 @@ class FinanceController extends BaseController {
             'PERIOD_NUM' => 'PERIOD_NUM',
             'REMARK' => 'REMARK',
         ]);
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new FinanceExportForm();
-        $result = $form->run($filter, Yii::t('ctx', 'financeControllerTransferListExport')); // 转账列表
+        $result = $form->run(['condition' => $condition, 'params' => $params], Yii::t('ctx', 'financeControllerTransferListExport')); // 转账列表
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }
@@ -330,6 +386,18 @@ class FinanceController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new WithdrawList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
 
@@ -453,8 +521,23 @@ class FinanceController extends BaseController {
                  $filter['condition'] .= " AND W.WITHDRAW_PERIOD_NUM = $periodNum";
             }
         }
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new FinanceExportForm();
-        $result = $form->run($filter, Yii::t('ctx', 'exportWithdrawApplyExcelName')); // 提现申请
+        $result = $form->run(['condition' => $condition, 'params' => $params], Yii::t('ctx', 'exportWithdrawApplyExcelName')); // 提现申请
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }
@@ -1084,6 +1167,18 @@ class FinanceController extends BaseController {
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new RechargeList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
         return static::notice($data);
@@ -1104,8 +1199,23 @@ class FinanceController extends BaseController {
             'BANK_NO' => 'R.BANK_NO',
             'CREATED_AT' => 'R.CREATED_AT',
         ]);
+
+        $condition = $filter['condition'];
+        $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $form = new FinanceExportForm();
-        $result = $form->run($filter, 'Recharge'); // 充值申请
+        $result = $form->run(['condition' => $condition, 'params' => $params], 'Recharge'); // 充值申请
         if (!$result) {
             return static::notice(Form::formatErrorsForApi($form->getErrors()), 400);
         }

+ 102 - 9
backendApi/modules/v1/controllers/ShopController.php

@@ -8,6 +8,8 @@
 
 namespace backendApi\modules\v1\controllers;
 
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use backendApi\modules\v1\models\exportForms\BaShopExportForm;
 use backendApi\modules\v1\models\exportForms\ShopExportForm;
 use backendApi\modules\v1\models\lists\shop\DecOrderList;
@@ -24,6 +26,9 @@ use backendApi\modules\v1\models\lists\shop\FlowRemainPvList;
 use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\Form;
+use common\helpers\LoggerTool;
+use common\models\Countries;
+use common\models\Currency;
 use common\models\CurrencyConversions;
 use common\models\DeclarationPackage;
 use common\models\DecOrder;
@@ -136,11 +141,36 @@ class ShopController extends BaseController {
                 return static::notice(Form::formatErrorsForApi($formModel->getErrors()),400);
             }
         }
+
+        $countries = Cache::getCountries();
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
+        // 货币
+        $currencies = Cache::getCurrencies();
+        $currencies = array_column($currencies, NULL, 'ID');
+        // 货币汇率
+        $currenciesConversions = CurrencyConversions::getFromCache();
+        $currenciesConversions = array_column($currenciesConversions, NULL, 'TO_CURRENCY_ID');
+
+        foreach ($countries as $key => $country) {
+            $countries[$key]['LOCAL_CURRENCY_NAME'] = $currencies[$country['LOCAL_CURRENCY_ID']]['NAME'] ?? '';
+            $countries[$key]['CURRENCY_PRODUCT_RATE'] = $currenciesConversions[$country['LOCAL_CURRENCY_ID']]['PRODUCT_RATE'] ?? 0;
+        }
+
         return static::notice([
             'sellType' => ShopGoods::getSaleType(),
             'goodsType' => ShopGoods::getGoodType(),
             'giftType' => ShopGoods::getGiftType(),
             'categoryType' => ShopGoods::getCategoryType(),
+            'countries' => $countries,
         ]);
     }
 
@@ -179,15 +209,24 @@ class ShopController extends BaseController {
         $currenciesConversions = CurrencyConversions::getFromCache();
         $currenciesConversions = array_column($currenciesConversions, NULL, 'TO_CURRENCY_ID');
 
-        foreach ($countries as &$country) {
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
+        foreach ($countries as $key => $country) {
             // 货币
-            $country['LOCAL_CURRENCY_NAME'] = $currencies[$country['LOCAL_CURRENCY_ID']]['NAME'] ?? '';
-            $country['CURRENCY_PRODUCT_RATE'] = $currenciesConversions[$country['LOCAL_CURRENCY_ID']]['PRODUCT_RATE'] ?? 0;
+            $countries[$key]['LOCAL_CURRENCY_NAME'] = $currencies[$country['LOCAL_CURRENCY_ID']]['NAME'] ?? '';
+            $countries[$key]['CURRENCY_PRODUCT_RATE'] = $currenciesConversions[$country['LOCAL_CURRENCY_ID']]['PRODUCT_RATE'] ?? 0;
             // 商品属性
-            $country['SHOP_GOODS_NATURE'] = ShopGoodsNature::findAllAsArray('GOODS_ID=:GOODS_ID AND COUNTRY_ID=:COUNTRY_ID', [':GOODS_ID' => $id, ':COUNTRY_ID' => $country['ID']]);
+            $countries[$key]['SHOP_GOODS_NATURE'] = ShopGoodsNature::findAllAsArray('GOODS_ID=:GOODS_ID AND COUNTRY_ID=:COUNTRY_ID', [':GOODS_ID' => $id, ':COUNTRY_ID' => $country['ID']]);
         }
 
-        $data['SHOP_GOODS_NATURE'] = $countries;
+        $data['SHOP_GOODS_NATURE'] = array_values($countries);
 
         return static::notice(
             [
@@ -428,7 +467,21 @@ class ShopController extends BaseController {
             'COUNTRY' => 'O.COUNTRY_ID',
             'IS_AUTO' => 'O.IS_AUTO'
         ]);
+
         $condition = ' 1=1 ' . $filter['condition'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition = ' 1=1 ' . $filter['condition'] . " AND O.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $params = $filter['params'];
         $condition .= $condition ? ' AND O.IS_DELETE=0' : ' O.IS_DELETE=0';
         $listObj = new OrderList();
@@ -454,7 +507,21 @@ class ShopController extends BaseController {
             'STATUS' => 'O.STATUS',
             'IS_AUTO' => 'O.IS_AUTO'
         ]);
-        $filter['condition'] = !$filter['condition'] ? '1=1 AND O.IS_DELETE=0' : ('O.IS_DELETE=0 ' . $filter['condition']);
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $filter['condition'] = ('O.IS_DELETE=0 ' . $filter['condition']) . " AND O.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        } else {
+            $filter['condition'] = ('O.IS_DELETE=0 ' . $filter['condition']);
+        }
+
         $form = new ShopExportForm();
         $result = $form->run($filter, \Yii::t('ctx', 'shopOrderListExport')); // 订单列表
         if (!$result) {
@@ -910,6 +977,17 @@ class ShopController extends BaseController {
                 'MODERN_PERIOD'=> 'P.MODERN_PERIOD',
                 'CREATED_AT'=> 'P.CREATED_AT',
             ]);
+
+            $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+            if (!$isSuper) {
+                $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+                $adminCountry = AdminCountry::getCountry($adminId);
+                $quotedAdminCountry = array_map(function($item) {
+                    return "'" . addslashes($item) . "'";
+                }, $adminCountry);
+                $filter['condition'] .= ' AND O.COUNTRY_ID IN (' . implode(',', $quotedAdminCountry) . ')';
+            }
+
             $listObj = new OrderPeriodAdjustList();
             $data = $listObj->getList(['condition' => $filter['condition'], 'params' => $filter['params']]);
             return static::notice($data);
@@ -925,12 +1003,26 @@ class ShopController extends BaseController {
     {
         $orderSn = \Yii::$app->request->get('orderSn');
 
-        $order = Order::findOneAsArray('SN=:SN', [':SN' => $orderSn]);
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function ($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $order = Order::findOneAsArray('SN=:SN AND COUNTRY_ID IN (' . implode(',', $quotedAdminCountry) . ')', [':SN' => $orderSn]);
+        } else {
+            $order = Order::findOneAsArray('SN=:SN', [':SN' => $orderSn]);
+        }
         if (!$order) {
             return static::notice(Yii::t('ctx', 'orderNotExist'), 400);
         }
+
         $order['ORDER_TYPE'] = $order['ORDER_TYPE'] === 'ZC' ? Yii::t('ctx', 'shopOrderListOrderTypeZc') : Yii::t('ctx', 'shopOrderListOrderTypeFx');
-        // 如果当前订单所在期数已挂网,则不可调整
+        $order['COUNTRY'] = Countries::getById($order['COUNTRY_ID'])['NAME'] ?? '';
+
+        // 已挂网,不可调整
         $period = Period::getInfoByPeriodNum($order['PERIOD_NUM']);
         if (!$period) {
             return static::notice(Yii::t('ctx', 'invalidPcNo'), 400);
@@ -938,7 +1030,8 @@ class ShopController extends BaseController {
         if ($period['IS_SENT'] > 0) {
             return static::notice(Yii::t('ctx', 'orderHasBeenConnected'), 400);
         }
-        // 根据订单期数查询可调整期数
+
+        // 可调整期数
         $availablePeriod = [];
         if ($order['PERIOD_NUM']) {
             $availablePeriod = Period::getPeriodList(+$order['PERIOD_NUM'] - 1);

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

@@ -7,6 +7,9 @@
  */
 namespace backendApi\modules\v1\controllers;
 
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
+use common\helpers\LoggerTool;
 use common\helpers\snowflake\PageSnowFake;
 use common\helpers\Tool;
 use common\models\CurrencyConversions;
@@ -103,6 +106,8 @@ class SiteController extends BaseController
         $periodNum = $period->getNowPeriodNum();
         // 汇率
         $exchangeRate = floatval(Cache::getSystemConfig()['exchangeRate']['VALUE'] ?? 0);
+        $isSuperAdmin = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+
         return [
             'decLevels' => $decLevels,
             'empLevels' => $empLevels,
@@ -122,6 +127,7 @@ class SiteController extends BaseController
             'allNation' => $allNation,
             'nowPeriodNum' => $periodNum,
             'exchangeRate' => $exchangeRate,
+            'isSuperAdmin' => $isSuperAdmin,
         ];
     }
 
@@ -179,6 +185,17 @@ class SiteController extends BaseController
     {
         // 国家
         $countries = Cache::getCountries();
+
+//        $filter = \Yii::$app->request->get('filter', 0);
+        $isSuperAdmin = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuperAdmin) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
         // 货币
         $currencies = Cache::getCurrencies();
         $currencies = array_column($currencies, NULL, 'ID');
@@ -186,10 +203,15 @@ class SiteController extends BaseController
         $currenciesConversions = CurrencyConversions::getFromCache();
         $currenciesConversions = array_column($currenciesConversions, NULL, 'TO_CURRENCY_ID');
 
-        foreach ($countries as &$country) {
-            $country['LOCAL_CURRENCY_NAME'] = $currencies[$country['LOCAL_CURRENCY_ID']]['NAME'] ?? '';
-            $country['CURRENCY_PRODUCT_RATE'] = $currenciesConversions[$country['LOCAL_CURRENCY_ID']]['PRODUCT_RATE'] ?? 0;
-        }
+        $countries = array_map(function ($country) use ($currencies, $currenciesConversions) {
+            return array_merge(
+                $country,
+                [
+                    'LOCAL_CURRENCY_NAME' => $currencies[$country['LOCAL_CURRENCY_ID']]['NAME'] ?? '',
+                    'CURRENCY_PRODUCT_RATE' => $currenciesConversions[$country['LOCAL_CURRENCY_ID']]['PRODUCT_RATE'] ?? 0
+                ]
+            );
+        }, $countries);
 
         return static::notice(['data' => $countries]);
     }

+ 102 - 13
backendApi/modules/v1/controllers/UserController.php

@@ -10,6 +10,8 @@ namespace backendApi\modules\v1\controllers;
 
 use backendApi\modules\v1\components\UserAuth;
 use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use backendApi\modules\v1\models\exportForms\BaUserExportForm;
 use backendApi\modules\v1\models\exportForms\UserExportForm;
 use backendApi\modules\v1\models\lists\shop\BaUserList;
@@ -27,6 +29,7 @@ use common\helpers\Date;
 use common\helpers\Form;
 use common\helpers\http\BackendToFrontendApi;
 use common\helpers\Log;
+use common\helpers\LoggerTool;
 use common\helpers\NetPoint;
 use common\helpers\Tool;
 use common\helpers\user\Balance;
@@ -143,9 +146,26 @@ class UserController extends BaseController
             ],
             'ADDRESS' => 'U.ADDRESS',
         ]);
-        $condition = $filter['condition'];
-        $params = $filter['params'];
-        $condition .= ' AND UI.DELETED=0 ';
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition = $filter['condition'] ?? '';
+            $filter['condition'] = $condition . " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+
+            $condition = $filter['condition'];
+            $params = $filter['params'];
+            $condition .= " AND UI.DELETED=0 AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        } else {
+            $condition = $filter['condition'] ?? '';
+            $params = $filter['params'];
+        }
+
         $listObj = new IndexList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
         return static::notice($data);
@@ -200,6 +220,22 @@ class UserController extends BaseController
             'VERIFIED_AT' => 'U.VERIFIED_AT',
             'ALLOW_TRANSFER' => 'UI.ALLOW_TRANSFER',
         ]);
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition = $filter['condition'] ?? '';
+            $filter['condition'] = $condition . " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        } else {
+            $condition = $filter['condition'] ?? '';
+            $filter['condition'] = $condition;
+        }
+
         $form = new UserExportForm();
         $result = $form->run($filter, 'Member_List');
         if (!$result) {
@@ -691,27 +727,30 @@ class UserController extends BaseController
     public function actionMove()
     {
         $filter = $this->filterCondition([
-//            'userIds' => 'UM.USER_ID',
             'filterStatus' => 'UM.AUDIT_STATUS',
             'MOVE_USER_NAME' => 'CU.USER_NAME',
             'MOVE_REAL_NAME' => 'CU.REAL_NAME',
-//            'moveType' => 'UM.TYPE',
-//            'FROM_USER_NAME' => 'FUI.USER_NAME',
-//            'TO_USER_NAME' => 'TUI.USER_NAME',
             'MOVE_PERCENT_SHOW' => 'UM.MOVE_PERCENT',
-//            'STARTED_AT' => 'UM.STARTED_AT',
-//            'ENDED_AT' => 'UM.ENDED_AT',
             'CREATE_ADMIN_NAME' => 'ADMC.ADMIN_NAME',
             'PERIOD_NUM' => 'UM.PERIOD_NUM',
-//            'CREATED_AT' => 'UM.CREATED_AT',
             'AUDIT_ADMIN_NAME' => 'ADMU.ADMIN_NAME',
             'MOVE_ADMIN_NAME' => 'ADMC.ADMIN_NAME',
-//            'AUDIT_PERIOD_NUM' => 'UM.AUDIT_PERIOD_NUM',
             'AUDITED_AT' => 'UM.AUDITED_AT',
-//            'CREATE_REMARK' => 'UM.CREATE_REMARK',
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND CU.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new MoveList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
         return static::notice($data);
@@ -876,6 +915,17 @@ class UserController extends BaseController
     {
         $userName = Yii::$app->request->get('userName');
         $userInfo = Info::getBaseUserByUserName($userName);
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            if (!in_array($userInfo['COUNTRY_ID'], $adminCountry)) {
+                return static::notice('Member number does not exist', 400);
+            }
+        }
+
         if($userInfo){
             $decLevelConfig = Cache::getDecLevelConfig();
             $userInfo['LEVEL_NAME'] = isset($decLevelConfig[$userInfo['DEC_LV']])?$decLevelConfig[$userInfo['DEC_LV']]['LEVEL_NAME'] : '';
@@ -883,6 +933,9 @@ class UserController extends BaseController
             $userInfo['CASH'] = Cash::getAvailableBalance($userInfo['ID']);
             $userInfo['RECONSUME_POINTS'] = Balance::getBalanceReconsumePoints($userInfo['ID']);
             $userInfo['EXCHANGE_POINTS'] = Balance::getBalanceExchangePoints($userInfo['ID']);
+            $userInfo['country'] = Countries::getNameById($userInfo['COUNTRY_ID']);
+            $userInfo['countryCode'] = Countries::getCodeById($userInfo['COUNTRY_ID']);
+
             return static::notice($userInfo);
         }else{
             return static::notice('Member number does not exist', 400);//会员编号不存在
@@ -1152,13 +1205,25 @@ class UserController extends BaseController
         $data['allNation'] = \Yii::$app->params['nation'];
         $data['region'] = Region::getByCountryId($userInfo['COUNTRY_ID']);
         $data['language'] = Language::getFromCache();
-        $data['country'] = Countries::getFromCache();
         $data['allOpenBank'] = OpenBank::find()
             ->where('STATUS=:STATUS AND COUNTRY_ID=:COUNTRY_ID', [':STATUS' => 1, ':COUNTRY_ID' => $userInfo['COUNTRY_ID']])
             ->orderBy('BANK_NAME ASC')
             ->asArray()
             ->all();
 
+        $countries = Countries::getFromCache();
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+
+            $countries = array_filter($countries, fn($country) => in_array($country['ID'], $adminCountry));
+            $countries = array_values($countries);
+        }
+
+        $data['country'] = array_values($countries);
+
         $data['userInfo'] = [
             'userId' => $userInfo['ID'],
             'nation' => \Yii::$app->params['nation'][$userInfo['NATION']]['name']??'',
@@ -1433,6 +1498,18 @@ class UserController extends BaseController
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND CU.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new DecLevelList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
 
@@ -2397,6 +2474,18 @@ class UserController extends BaseController
         ]);
         $condition = $filter['condition'];
         $params = $filter['params'];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition .= " AND CU.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         $listObj = new ChangeHighestEmpLevelList();
         $data = $listObj->getList(['condition' => $condition, 'params' => $params]);
 

+ 36 - 31
backendApi/modules/v1/models/Admin.php

@@ -132,6 +132,11 @@ class Admin extends ActiveRecord
         return $data ? $data['ADMIN_NAME'] : null;
     }
 
+    public static function getRoleIdById($id){
+        $data = self::findOneAsArray('ID=:ID', [':ID' => $id], 'ROLE_ID');
+        return $data ? $data['ROLE_ID'] : null;
+    }
+
     /**
      * 操作日志记录条件
      * @return array
@@ -140,11 +145,11 @@ class Admin extends ActiveRecord
         return [
             'ADMIN_NAME' => '用户名',
             'REAL_NAME' => '会员姓名',
-            'REMARK' => '备注',
+//            'REMARK' => '备注',
             'ROLE_ID' => [
                 'label' => '角色名称',
                 'type' => function($data){
-                    $value = isset($data['value']) ? $data['value'] : '';
+                    $value = $data['value'] ?? '';
                     $result = AdminRole::findOneAsArray('ID=:ID', [':ID'=>$value], 'ROLE_NAME');
                     return !empty($result) ? $result['ROLE_NAME'] : '';
                 },
@@ -153,35 +158,35 @@ class Admin extends ActiveRecord
                 'label' => '是否启用',
                 'type' => ValueTypeConfig::YES_NO_TYPE,
             ],
-            'BIND_IP' => '绑定IP',
-            'CREATE_ADMIN' => [
-                'label' => '创建人',
-                'type' => function($data){
-                    $value = isset($data['value']) ? $data['value'] : '';
-                    $result = Admin::findOneAsArray('ID=:ID', [':ID'=>$value], 'ADMIN_NAME');
-                    return !empty($result) ? $result['ADMIN_NAME'] : '';
-                },
-            ],
-            'UPDATE_ADMIN' => [
-                'label' => '更新人',
-                'type' => function($data){
-                    $value = isset($data['value']) ? $data['value'] : '';
-                    $result = Admin::findOneAsArray('ID=:ID', [':ID'=>$value], 'ADMIN_NAME');
-                    return !empty($result) ? $result['ADMIN_NAME'] : '';
-                },
-            ],
-            'CREATED_AT' => [
-                'label' => '创建时间',
-                'type' => ValueTypeConfig::DATE_TIME_TYPE,
-            ],
-            'UPDATED_AT' => [
-                'label' => '更新时间',
-                'type' => ValueTypeConfig::DATE_TIME_TYPE,
-            ],
-            'IS_MODIFY_PASSWORD' => [
-                'label' => '是否修改密码',
-                'type' => ValueTypeConfig::YES_NO_TYPE,
-            ],
+//            'BIND_IP' => '绑定IP',
+//            'CREATE_ADMIN' => [
+//                'label' => '创建人',
+//                'type' => function($data){
+//                    $value = isset($data['value']) ? $data['value'] : '';
+//                    $result = Admin::findOneAsArray('ID=:ID', [':ID'=>$value], 'ADMIN_NAME');
+//                    return !empty($result) ? $result['ADMIN_NAME'] : '';
+//                },
+//            ],
+//            'UPDATE_ADMIN' => [
+//                'label' => '更新人',
+//                'type' => function($data){
+//                    $value = isset($data['value']) ? $data['value'] : '';
+//                    $result = Admin::findOneAsArray('ID=:ID', [':ID'=>$value], 'ADMIN_NAME');
+//                    return !empty($result) ? $result['ADMIN_NAME'] : '';
+//                },
+//            ],
+//            'CREATED_AT' => [
+//                'label' => '创建时间',
+//                'type' => ValueTypeConfig::DATE_TIME_TYPE,
+//            ],
+//            'UPDATED_AT' => [
+//                'label' => '更新时间',
+//                'type' => ValueTypeConfig::DATE_TIME_TYPE,
+//            ],
+//            'IS_MODIFY_PASSWORD' => [
+//                'label' => '是否修改密码',
+//                'type' => ValueTypeConfig::YES_NO_TYPE,
+//            ],
         ];
     }
 }

+ 56 - 0
backendApi/modules/v1/models/AdminCountry.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace backendApi\modules\v1\models;
+
+use common\components\ActiveRecord;
+
+/**
+ * This is the model class for table "{{%ADMIN_COUNTRY}}".
+ *
+ * @property string $ID
+ * @property string $ADMIN_ID 管理ID
+ * @property string $COUNTRY_ID 国家ID
+ */
+class AdminCountry extends ActiveRecord
+{
+    /**
+     * @inheritdoc
+     */
+    public static function tableName()
+    {
+        return '{{%ADMIN_COUNTRY}}';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['ADMIN_ID', 'COUNTRY_ID',], 'required'],
+            [['ID', 'COUNTRY_ID'], 'string', 'max' => 32],
+            [['ID'], 'unique'],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'ID' => 'ID',
+            'ADMIN_ID' => '管理ID',
+            'COUNTRY_ID' => '国家ID',
+        ];
+    }
+
+    /**
+     * @param $adminId
+     * @return array
+     */
+    public static function getCountry($adminId): array
+    {
+        return self::find()->select('COUNTRY_ID')->where(['ADMIN_ID' => $adminId])->column();
+    }
+}

+ 24 - 2
backendApi/modules/v1/models/AdminForm.php

@@ -23,6 +23,7 @@ class AdminForm extends Model
     public $surePassword;
     public $roleId;
     public $lang;
+    public $countryId;
 
     public function init() {
         parent::init();
@@ -54,8 +55,8 @@ class AdminForm extends Model
     {
         $parentScenarios =  parent::scenarios();
         $customScenarios = [
-            'add' => ['adminName', 'realName', 'password', 'surePassword', 'roleId', 'remark', 'isEnable', 'isModifyPassword', 'bindIp'],
-            'edit' => ['id', 'password', 'surePassword', 'roleId', 'realName', 'remark', 'isEnable', 'isModifyPassword', 'bindIp'],
+            'add' => ['adminName', 'realName', 'password', 'surePassword', 'roleId', 'remark', 'isEnable', 'isModifyPassword', 'bindIp', 'countryId'],
+            'edit' => ['id', 'password', 'surePassword', 'roleId', 'realName', 'remark', 'isEnable', 'isModifyPassword', 'bindIp', 'countryId'],
             'changePassword' => ['password', 'surePassword'],
             'noLoginModifyPassword' => ['adminName', 'oldPassword', 'password', 'surePassword'],
             'changeLanguage' => ['adminName', 'lang'],
@@ -77,6 +78,7 @@ class AdminForm extends Model
             'password' => '密码',
             'surePassword' => '确认密码',
             'roleId' => '角色',
+            'countryId' => '国家',
         ];
     }
 
@@ -173,6 +175,15 @@ class AdminForm extends Model
                 'userName' => $model->ADMIN_NAME,
                 'remark' => $this->remark,
             ]);
+
+            if (!AdminRole::isSuperAdmin($this->roleId)) {
+                foreach ($this->countryId as $country) {
+                    $adminCountry = new AdminCountry();
+                    $adminCountry->ADMIN_ID = $model->ID;
+                    $adminCountry->COUNTRY_ID = $country;
+                    $adminCountry->save();
+                }
+            }
         } elseif($this->scenario == 'edit') {
             $this->adminOperateLogger->afterUpdate($model);
             $this->adminOperateLogger->clean()->save([
@@ -180,6 +191,17 @@ class AdminForm extends Model
                 'userName' => $model->ADMIN_NAME,
                 'remark' => $this->remark,
             ]);
+
+            (new AdminCountry())->deleteAll(['ADMIN_ID' => $model->ID]);
+            if (!AdminRole::isSuperAdmin($this->roleId)) {
+                // 国家
+                foreach ($this->countryId as $country) {
+                    $adminCountry = new AdminCountry();
+                    $adminCountry->ADMIN_ID = $model->ID;
+                    $adminCountry->COUNTRY_ID = $country;
+                    $adminCountry->save();
+                }
+            }
         } elseif($this->scenario == 'noLoginModifyPassword') {
             $this->adminOperateLogger->clean()->save([
                 'optType' => '不登录重置密码',

+ 9 - 0
backendApi/modules/v1/models/AdminRole.php

@@ -187,4 +187,13 @@ class AdminRole extends \common\components\ActiveRecord
         }
         return $allColumns;
     }
+
+    /**
+     * 判断是否为超级管理员角色
+     * @param string $roleId 角色ID
+     * @return bool
+     */
+    public static function isSuperAdmin($roleId){
+        return $roleId === Yii::$app->params['superAdminRoleId'];
+    }
 }

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

@@ -6,6 +6,7 @@ use common\helpers\user\Info;
 use common\libs\dataList\column\Price;
 use common\libs\dataList\column\YesNo;
 use common\libs\dataList\DataListInterface;
+use common\models\Countries;
 use common\models\User;
 use common\models\UserBind;
 use common\models\UserBonus;
@@ -34,13 +35,14 @@ class BalanceList extends \common\libs\dataList\DataList implements DataListInte
     {
         $this->condition .= ' AND UI.STATUS=1 AND I.LAST_LOGIN_AT>=1620748800';
         $this->listData = UserBonus::lists($this->condition, $this->params, [
-            'select' => 'UB.*,UI.*,UW.CASH, UP.AMOUNTS AS PRP',
+            'select' => 'UB.*,UI.*,UW.CASH, UP.AMOUNTS AS PRP, C.NAME AS COUNTRY',
             'from' => UserBonus::tableName() . ' AS UB',
             'join' => [
-                ['LEFT JOIN', User::tableName() . ' AS UI', 'UI.ID=UB.USER_ID'],
+                ['INNER JOIN', User::tableName() . ' AS UI', 'UI.ID=UB.USER_ID'],
                 ['LEFT JOIN', UserWallet::tableName() . ' AS UW', 'UW.USER_ID=UB.USER_ID'],
                 ['LEFT JOIN', UserInfo::tableName() . ' AS I', 'I.USER_ID=UB.USER_ID'],
-                ['LEFT JOIN', "(SELECT USER_ID,SUM(AMOUNTS) AS AMOUNTS FROM AR_USER_PERFORMANCE WHERE STATUS_ID<30 GROUP BY USER_ID) UP", 'UW.USER_ID=UP.USER_ID']
+                ['LEFT JOIN', "(SELECT USER_ID,SUM(AMOUNTS) AS AMOUNTS FROM AR_USER_PERFORMANCE WHERE STATUS_ID<30 GROUP BY USER_ID) UP", 'UW.USER_ID=UP.USER_ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'UI.COUNTRY_ID=C.ID'],
             ],
             'orderBy' => 'UB.CREATED_AT ASC, UB.ID ASC',
             'page' => $this->page,
@@ -74,6 +76,9 @@ class BalanceList extends \common\libs\dataList\DataList implements DataListInte
                         'tag'=>['type'=>'success', 'size' => 'small', 'class'=>'no-border']
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'IS_DEC' => [
                     'header' => \Yii::t('ctx', 'whetherStockist'), // 是否报单中心
                     'value' => function($row) {

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

@@ -8,9 +8,11 @@ use common\helpers\user\Info;
 use common\libs\dataList\column\Price;
 use common\libs\dataList\column\YesNo;
 use common\libs\dataList\DataListInterface;
+use common\models\Countries;
 use common\models\DealType;
 use common\models\FlowBonus;
 use common\libs\dataList\column\DateTime;
+use common\models\User;
 use Yii;
 
 class FlowBonusList extends \common\libs\dataList\DataList implements DataListInterface {
@@ -28,18 +30,17 @@ class FlowBonusList extends \common\libs\dataList\DataList implements DataListIn
      */
     public function dataHandle() {
         $this->listData = FlowBonus::lists($this->condition, $this->params, [
-            'select' => 'FB.*,U.USER_NAME,U.REAL_NAME,U.IS_DEC',
+            'select' => 'FB.*,U.USER_NAME,U.REAL_NAME,U.IS_DEC, C.NAME AS COUNTRY',
             'orderBy' => 'FB.CREATED_AT DESC,FB.SORT DESC,FB.AUTO_SORT DESC,FB.ID DESC',
             'from' => FlowBonus::tableName() . ' AS FB',
             'join' => [
-                ['LEFT JOIN', \common\models\User::tableName() . ' AS U', 'FB.USER_ID=U.ID'],
+                ['INNER JOIN', User::tableName() . ' AS U', 'FB.USER_ID=U.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'U.COUNTRY_ID=C.ID'],
             ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
         ]);
         foreach ($this->listData['list'] as $key => $value) {
-            //$userInfo = Info::baseInfoZh($value['USER_ID']);
-            //$this->listData['list'][$key] = array_merge($userInfo, $value);
             $this->listData['list'][$key]['DEAL_TYPE_NAME'] = DealType::getAllTypesForShow()[$value['DEAL_TYPE_ID']]['TYPE_NAME'] ?? '';
             $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'] ?? '';
@@ -101,6 +102,9 @@ class FlowBonusList extends \common\libs\dataList\DataList implements DataListIn
                         'tag' => ['type' => 'success', 'size' => 'small', 'class' => 'no-border']
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'LAST_DEC_LV_NAME' => [
                     'header' => Yii::t('ctx', 'memberLevel'), // 会员级别
                     'headerOther' => [

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

@@ -4,6 +4,7 @@ namespace backendApi\modules\v1\models\lists\bonus;
 use common\helpers\Cache;
 use common\helpers\user\Info;
 use common\models\CalcBonusBSDefault;
+use common\models\Countries;
 use common\models\PerfMonth;
 use common\models\User as modelUser;
 use common\libs\dataList\column\Price;
@@ -29,12 +30,13 @@ class PerfMonthList extends \common\libs\dataList\DataList implements DataListIn
     public function dataHandle()
     {
         $data = PerfMonth::lists($this->condition, $this->params, [
-            'select'=>'PM.*, U.USER_NAME, U.REAL_NAME,RU.USER_NAME REC_USER_NAME,RU.REAL_NAME REC_REAL_NAME',
+            'select'=>'PM.*, U.USER_NAME, U.REAL_NAME,RU.USER_NAME REC_USER_NAME,RU.REAL_NAME REC_REAL_NAME, C.NAME AS COUNTRY',
             'from' => PerfMonth::tableName().' AS PM',
             'join' => [
-                ['LEFT JOIN', modelUser::tableName() . ' AS U', 'PM.USER_ID=U.ID'],
+                ['INNER JOIN', modelUser::tableName() . ' AS U', 'PM.USER_ID=U.ID'],
                 ['LEFT JOIN', UserInfo::tableName() . ' AS UI', 'PM.USER_ID=UI.USER_ID'],
                 ['LEFT JOIN', modelUser::tableName() . ' AS RU', 'UI.REC_UID=RU.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'U.COUNTRY_ID=C.ID'],
             ],
             'orderBy' => 'PM.CREATED_AT DESC, PM.ID DESC',
             'page' => $this->page,
@@ -74,6 +76,9 @@ class PerfMonthList extends \common\libs\dataList\DataList implements DataListIn
                         'width' => '150',
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'REC_USER_NAME' => [
                     'header' => Yii::t('ctx', 'recommenderNo'), // 推荐人编号
                     'headerOther' => [

+ 10 - 5
backendApi/modules/v1/models/lists/bonus/PerfOrderList.php

@@ -3,6 +3,7 @@ namespace backendApi\modules\v1\models\lists\bonus;
 
 use backendApi\modules\v1\models\Admin;
 use backendApi\modules\v1\models\User;
+use common\models\Countries;
 use common\models\User as modelUser;
 use common\helpers\Cache;
 use common\helpers\user\Info;
@@ -36,10 +37,11 @@ class PerfOrderList extends \common\libs\dataList\DataList implements DataListIn
     public function dataHandle()
     {
         $data = PerfOrder::lists($this->condition, $this->params, [
-            'select'=>'PO.*, U.USER_NAME, U.REAL_NAME',
+            'select'=>'PO.*, U.USER_NAME, U.REAL_NAME, C.NAME AS COUNTRY',
             'from' => PerfOrder::tableName().' AS PO',
             'join' => [
-                ['LEFT JOIN', modelUser::tableName() . ' AS U', 'PO.USER_ID=U.ID'],
+                ['INNER JOIN', modelUser::tableName() . ' AS U', 'PO.USER_ID=U.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'U.COUNTRY_ID=C.ID'],
             ],
             'orderBy' => 'PO.CREATED_AT DESC, PO.ID DESC',
             'page' => $this->page,
@@ -63,7 +65,7 @@ class PerfOrderList extends \common\libs\dataList\DataList implements DataListIn
                 'PERIOD_NUM' => [
                     'header' => Yii::t('ctx', 'payCycle'), // 结算期数
                     'headerOther' => [
-                        'width' => '140',
+                        'width' => '120',
                     ],
                 ],
                 'SN' => [
@@ -72,13 +74,13 @@ class PerfOrderList extends \common\libs\dataList\DataList implements DataListIn
                         return "\t".$row['SN'];
                     },
                     'headerOther' => [
-                        'width' => '250',
+                        'width' => '220',
                     ],
                 ],
                 'DEC_TYPE' => [
                     'header' =>  Yii::t('ctx', 'saleType'), // 业绩单类型
                     'headerOther' => [
-                        'width' => '130',
+                        'width' => '160',
                     ],
                     'value' => function($row){
                         $decTypes = [
@@ -109,6 +111,9 @@ class PerfOrderList extends \common\libs\dataList\DataList implements DataListIn
                         'width' => '150',
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'LAST_REC_USER_NAME' => [
                     'header' => Yii::t('ctx', 'sponsorNoAtSettlement'), // 结算时开拓者编号
                     'headerOther' => [

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

@@ -6,10 +6,12 @@ use common\helpers\Tool;
 use common\helpers\user\Info;
 use common\libs\dataList\DataListInterface;
 use common\models\CalcBonus;
+use common\models\Countries;
 use common\models\DeclarationLevel;
 use common\models\EliteLevel;
 use common\models\EmployLevel;
 use common\models\Period;
+use common\models\User;
 use common\models\UserInfo;
 use Yii;
 
@@ -31,11 +33,13 @@ class PeriodBonusList extends \common\libs\dataList\DataList implements DataList
     {
         $yearMonth = $this->others['yearMonth'];
         $this->listData = CalcBonus::lists($this->condition, $this->params, [
-            'select'=>'CB.*,UI.CON_UID,UI.REC_UID,PO.CALC_YEAR,PO.CALC_MONTH',
+            'select'=>'CB.*,UI.CON_UID,UI.REC_UID,PO.CALC_YEAR,PO.CALC_MONTH, C.NAME AS COUNTRY',
             'from' => CalcBonus::tableName().' AS CB',
             'join' => [
                 ['INNER JOIN', UserInfo::tableName() . ' AS UI', 'CB.USER_ID=UI.USER_ID'],
                 ['INNER JOIN', Period::tableName() . ' AS PO', 'PO.PERIOD_NUM=CB.PERIOD_NUM'],
+                ['INNER JOIN', User::tableName() . ' AS CU', 'UI.USER_ID=CU.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'CU.COUNTRY_ID=C.ID'],
             ],
             'yearMonth' => $yearMonth,
             'orderBy' => 'CB.CREATED_AT DESC, CB.ID DESC',
@@ -97,6 +101,9 @@ class PeriodBonusList extends \common\libs\dataList\DataList implements DataList
                         'tag'=>['type'=>'success', 'size' => 'small', 'class'=>'no-border']
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'LAST_DEC_LV_NAME' => [
                     'header' => \Yii::t('ctx', 'PCMemberLevel'), // 结算时会员级别
                     'headerOther' => [

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

@@ -3,6 +3,7 @@ namespace backendApi\modules\v1\models\lists\bonus;
 
 use common\helpers\Cache;
 use common\helpers\user\Info;
+use common\models\Countries;
 use common\models\PerfMonth;
 use common\models\User as modelUser;
 use common\libs\dataList\column\Price;
@@ -29,10 +30,11 @@ class UserPerfList extends \common\libs\dataList\DataList implements DataListInt
     public function dataHandle()
     {
         $data = UserPerf::lists($this->condition, $this->params, [
-            'select'=>'UP.*, U.USER_NAME, U.REAL_NAME',
+            'select'=>'UP.*, U.USER_NAME, U.REAL_NAME, C.NAME AS COUNTRY',
             'from' => UserPerf::tableName().' AS UP',
             'join' => [
-                ['LEFT JOIN', modelUser::tableName() . ' AS U', 'UP.USER_ID=U.ID'],
+                ['INNER JOIN', modelUser::tableName() . ' AS U', 'UP.USER_ID=U.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'U.COUNTRY_ID=C.ID'],
             ],
             'orderBy' => 'UP.ID DESC',
             'page' => $this->page,
@@ -60,6 +62,9 @@ class UserPerfList extends \common\libs\dataList\DataList implements DataListInt
                         'width' => '200',
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'PV_PCS' => [
                     'header' => Yii::t('ctx', 'personalPerformance'), // 个人业绩
                     'headerOther' => [

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

@@ -9,6 +9,7 @@ use common\libs\dataList\column\DateTime;
 use common\libs\dataList\column\YesNo;
 use common\libs\dataList\DataListInterface;
 use common\models\BalanceAudit;
+use common\models\Countries;
 use common\models\DealType;
 use common\models\User;
 use Yii;
@@ -28,13 +29,14 @@ class BalanceAuditList extends \common\libs\dataList\DataList implements DataLis
      */
     public function dataHandle() {
         $this->listData = BalanceAudit::lists($this->condition, $this->params, [
-            'select' => 'BA.*,U.USER_NAME,U.REAL_NAME,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME AUDIT_ADMIN_NAME',
+            'select' => 'BA.*,U.USER_NAME,U.REAL_NAME,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME AUDIT_ADMIN_NAME, C.NAME AS COUNTRY',
             'orderBy' => 'BA.CREATED_AT DESC, BA.ID DESC',
             'from' => BalanceAudit::tableName() . ' AS BA',
             'join' => [
-                ['LEFT JOIN', User::tableName() . ' AS U', 'BA.USER_ID=U.ID'],
+                ['INNER JOIN', User::tableName() . ' AS U', 'BA.USER_ID=U.ID'],
                 ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'BA.UPDATE_ADMIN_ID=ADMC.ID'],
                 ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'BA.AUDIT_ADMIN_ID=ADMU.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'U.COUNTRY_ID=C.ID'],
             ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
@@ -71,6 +73,9 @@ class BalanceAuditList extends \common\libs\dataList\DataList implements DataLis
                         'width' => '120',
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'LAST_DEC_LV_NAME' => [
                     'header' => Yii::t('ctx', 'modelListFinanceBalanceAuditListMemberLevel'), // 会员级别
                     'headerOther' => [

+ 1 - 1
backendApi/modules/v1/models/lists/finance/RechargeList.php

@@ -32,7 +32,7 @@ class RechargeList extends \common\libs\dataList\DataList implements DataListInt
             'from' => Recharge::tableName() . ' AS R',
             'join' => [
                 ['LEFT JOIN', UserInfo::tableName() . ' AS UI', 'UI.USER_ID=R.USER_ID'],
-                ['LEFT JOIN', USER::tableName() . ' AS U', 'U.ID=R.USER_ID'],
+                ['INNER JOIN', USER::tableName() . ' AS U', 'U.ID=R.USER_ID'],
                 ['LEFT JOIN', OpenBank::tableName() . ' AS OB', 'OB.BANK_CODE=R.OPEN_BANK'],
                 ['LEFT JOIN', Admin::tableName() . ' AS ADMA', 'ADMA.ID=R.AUDIT_ADMIN'],
                 ['LEFT JOIN', Countries::tableName() . ' AS CN', 'U.COUNTRY_ID=CN.ID'],

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

@@ -12,6 +12,7 @@ use common\libs\dataList\column\DateTime;
 use common\libs\dataList\column\YesNo;
 use common\libs\dataList\DataListInterface;
 use common\models\BalanceAudit;
+use common\models\Countries;
 use common\models\DealType;
 use common\models\forms\ReconsumeForm;
 use common\models\PerfAudit;
@@ -19,6 +20,7 @@ use common\models\ReconsumeAudit;
 use common\models\ReconsumePool;
 use common\models\DecRole;
 use common\models\Transfer;
+use common\models\User;
 use common\models\UserInfo;
 use common\models\UserSystem;
 use common\models\YearHighestEmpLv;
@@ -39,8 +41,13 @@ class TransferList extends \common\libs\dataList\DataList implements DataListInt
      */
     public function dataHandle() {
         $this->listData = Transfer::lists($this->condition, $this->params, [
-            'orderBy' => 'CREATED_AT DESC, ID DESC',
-            'from' => Transfer::tableName(),
+            'select' => 'BA.*, C.NAME AS COUNTRY',
+            'orderBy' => 'BA.CREATED_AT DESC, BA.ID DESC',
+            'from' => Transfer::tableName() . ' AS BA',
+            'join' => [
+                ['INNER JOIN', User::tableName() . ' AS U', 'BA.OUT_UID=U.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'U.COUNTRY_ID=C.ID'],
+            ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
         ]);
@@ -79,6 +86,9 @@ class TransferList extends \common\libs\dataList\DataList implements DataListInt
                         'width' => '120',
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'LAST_OUT_DEC_LV_NAME' => [
                     'header' => Yii::t('ctx', 'modelListFinanceTranserListLastOutDecLvName'), // 转出主体会员级别
                     'headerOther' => [

+ 9 - 63
backendApi/modules/v1/models/lists/shop/GoodsList.php

@@ -46,22 +46,6 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                     'header' => \Yii::t('ctx', 'shopListProductsCode'), // 商品编号
                     'headerOther' => ['width' => '200'],
                 ],
-                'SELL_DISCOUNT' => [
-                    'header' => \Yii::t('ctx', 'shopListDiscountRate'), // 商品折扣
-                    'value' => function($row) {
-                        $discount = 0;
-                        if ($row['TYPE'] == 1) {
-                            $discount = '0.5';
-                        } else if($row['TYPE'] == 2) {
-                            $discount = '0.6';
-                        } else {
-                            $discount = $row['SELL_DISCOUNT'];
-                        }
-
-                        return $discount;
-                    },
-                    'headerOther' => ['width' => '150'],
-                ],
                 'GIFT_TYPE' => [
                     'header' => \Yii::t('ctx', 'shopListProductsType'), // 商品类型
                     'value' => function($row){
@@ -76,27 +60,6 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                     },
                     'headerOther' => ['width' => '150'],
                 ],
-//                'CATEGORY_TYPE' => [
-//                    'header' => \Yii::t('ctx', 'shopListProductCategory'), // 商品分类
-//                    'value' => function($row) {
-//                        $categoryType =  array_column($this->getCategoryType(), NULL, 'id'); //array_column(ShopGoods::CATEGORY_TYPE, NULL, 'id');
-//                        return $categoryType[$row['CATEGORY_TYPE']]['name'] ?? '';
-//                    },
-//                    'headerOther' => ['width' => '150'],
-//                ],
-//                'SELL_TYPE' => [
-//                    'header' => \Yii::t('ctx', 'shopListPaymentMode'), // 购买方式
-//                    'value' => function($row){
-//                        $sellType =  $this->getSaleType(); //ShopGoods::SALE_TYPE;
-//                        $sel = explode(',',$row['SELL_TYPE']);
-//                        $value = '';
-//                        foreach ($sel as $v){
-//                            $value.= $sellType[$v]['name'].',';
-//                        }
-//                        return $value;
-//                    },
-//                    'headerOther' => ['width' => '150'],
-//                ],
                 'SELL_PRICE_STANDARD' => [
                     'header' => \Yii::t('ctx', 'shopListPriceStandard'), // 标准价格($)
                     'headerOther' => [
@@ -105,11 +68,6 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                     'value' => function ($row) {
                         return Tool::formatPrice($row['SELL_PRICE_STANDARD']);
                     },
-                    'valueOther' => function ($row) {
-                        return [
-                            'tag' => ['type' => 'danger', 'size' => 'small', 'class' => 'no-border']
-                        ];
-                    },
                 ],
                 'PRICE_PV' => [
                     'header' => \Yii::t('ctx', 'shopListProductsBv'), // 产品BV
@@ -119,11 +77,6 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                     'value' => function ($row) {
                         return Tool::formatPrice($row['PRICE_PV']);
                     },
-                    'valueOther' => function ($row) {
-                        return [
-                            'tag' => ['type' => 'danger', 'size' => 'small', 'class' => 'no-border']
-                        ];
-                    },
                 ],
                 'STORE_NUMS' => [
                     'header' => \Yii::t('ctx', 'shopListInventory'), // 库存
@@ -132,22 +85,19 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                     ],
                 ],
                 'STATUS' => [
-                    'header' => \Yii::t('ctx', 'shopListStatus'), // 状态
-                    'value' => function($row) {
-                        return $row['STATUS'] == 1 ? \Yii::t('ctx', 'shopListOnSale') : \Yii::t('ctx', 'shopListSoldOut'); //已上架:已下架
-                    },
+                    'header' => \Yii::t('ctx', 'shopListStatus'), // 产品BV
                     'headerOther' => [
-                        'width' => '110',
+                        'width' => '120',
                     ],
-                ],
-                'UPDATED_AT' => [
-                    'header' => \Yii::t('ctx', 'shopListUpdatedAt'), // 更新时间
                     'value' => function ($row) {
-                        return (new DateTime([
-                            'value' => $row['UPDATED_AT'],
-                        ]))->result();
+                        return $row['STATUS'] == 1 ? \Yii::t('ctx', 'shopListOnSale') : \Yii::t('ctx', 'shopListSoldOut');
+                    },
+                    'valueOther' => function ($row) {
+                        $tag = ($row['STATUS'] == 1) ? 'success' : 'danger';
+                        return [
+                            'tag' => ['type' => $tag, 'size' => 'small', 'class' => 'no-border']
+                        ];
                     },
-                    'headerOther' => ['width' => '190'],
                 ],
             ];
         }
@@ -169,8 +119,6 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                     'selectData' => [
                         ['id' => 1, 'name' => \Yii::t('ctx', 'shopList1stPurchase')], 
                         ['id' => 2, 'name' => \Yii::t('ctx', 'shopListRepeatPurchase')], 
-//                        ['id' => 3, 'name' => \Yii::t('ctx', 'shopListEntryArea')],
-//                        ['id' => 4, 'name' => \Yii::t('ctx', 'shopListResellingArea')]
                     ]
                 ],
                 'STATUS'=> [
@@ -186,8 +134,6 @@ class GoodsList extends \common\libs\dataList\DataList implements DataListInterf
                 'CATEGORY_TYPE' => [
                     'name' => \Yii::t('ctx', 'shopListProductCategory'), 
                     'other'=> 'select', 
-                    // 翻译无法使用const,改成其他方式
-                    // 'selectData'=> ShopGoods::CATEGORY_TYPE
                     'selectData'=> $this->getCategoryType()
                 ], // 商品分类
             ];

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

@@ -377,12 +377,12 @@ class OrderList extends \common\libs\dataList\DataList implements DataListInterf
                        return $this->getDeliveryStatus()[$row['DELIVERY_STATUS']]['label'] ?? '';
                     },
                 ],
-                'IS_AUTO' => [
-                    'header' => \Yii::t('ctx', 'shopOrderListIsAuto'), // 是否自动
-                    'value' => function ($row) {
-                        return $row['IS_AUTO'] == 1 ? \Yii::t('ctx', 'shopOrderListIsAutoYes') : \Yii::t('ctx', 'shopOrderListIsAutoNo');
-                    },
-                ],
+//                'IS_AUTO' => [
+//                    'header' => \Yii::t('ctx', 'shopOrderListIsAuto'), // 是否自动
+//                    'value' => function ($row) {
+//                        return $row['IS_AUTO'] == 1 ? \Yii::t('ctx', 'shopOrderListIsAutoYes') : \Yii::t('ctx', 'shopOrderListIsAutoNo');
+//                    },
+//                ],
             ];
         }
         return $this->columns;

+ 6 - 1
backendApi/modules/v1/models/lists/shop/OrderPeriodAdjustList.php

@@ -2,6 +2,7 @@
 namespace backendApi\modules\v1\models\lists\shop;
 
 use common\libs\dataList\DataListInterface;
+use common\models\Countries;
 use common\models\Order;
 use common\models\OrderPeriodAdjust;
 use common\libs\dataList\column\DateTime;
@@ -23,11 +24,12 @@ class OrderPeriodAdjustList extends \common\libs\dataList\DataList implements Da
     public function dataHandle()
     {
         $this->listData = OrderPeriodAdjust::lists($this->condition, $this->params, [
-            'select' => 'P.*,O.ORDER_TYPE',
+            'select' => 'P.*,O.ORDER_TYPE,O.COUNTRY_ID,C.NAME AS COUNTRY_NAME',
             'orderBy' => 'P.CREATED_AT DESC, P.ID DESC',
             'from' => OrderPeriodAdjust::tableName() . ' AS P',
             'join' => [
                 ['LEFT JOIN', Order::tableName() . ' AS O', 'P.ORDER_SN=O.SN'],
+                ['LEFT JOIN', Countries::tableName() . ' AS C', 'O.COUNTRY_ID=C.ID'],
             ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
@@ -51,6 +53,9 @@ class OrderPeriodAdjustList extends \common\libs\dataList\DataList implements Da
                         return $row['ORDER_TYPE'] == 'ZC' ? Yii::t('ctx', 'shopOrderListOrderTypeZc') : Yii::t('ctx', 'shopOrderListOrderTypeFx');
                     },
                 ],
+                'COUNTRY_NAME' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'ORIGIN_PERIOD' => [
                     'header' => Yii::t('ctx', 'beforeAdjustmentPcNo'),
                 ],

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

@@ -4,6 +4,7 @@ namespace backendApi\modules\v1\models\lists\user;
 use backendApi\modules\v1\models\Admin;
 use common\helpers\Cache;
 use common\libs\dataList\DataListInterface;
+use common\models\Countries;
 use common\models\HighestEmpLevelLog;
 use common\models\User;
 use common\libs\dataList\column\DateTime;
@@ -25,12 +26,13 @@ class ChangeHighestEmpLevelList extends \common\libs\dataList\DataList implement
     public function dataHandle()
     {
         $this->listData = HighestEmpLevelLog::lists($this->condition, $this->params, [
-            'select' => 'LL.*, CU.USER_NAME, ADM.ADMIN_NAME',
+            'select' => 'LL.*, CU.USER_NAME, ADM.ADMIN_NAME, C.NAME AS COUNTRY',
             'orderBy' => 'LL.CREATED_AT DESC, LL.ID DESC',
             'from' => HighestEmpLevelLog::tableName() . ' AS LL',
             'join' => [
                 ['LEFT JOIN', Admin::tableName() . ' AS ADM', 'LL.ADMIN_ID=ADM.ID'],
-                ['LEFT JOIN', User::tableName() . ' AS CU', 'LL.USER_ID=CU.ID'],
+                ['INNER JOIN', User::tableName() . ' AS CU', 'LL.USER_ID=CU.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'CU.COUNTRY_ID=C.ID'],
             ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
@@ -50,6 +52,9 @@ class ChangeHighestEmpLevelList extends \common\libs\dataList\DataList implement
                 'USER_NAME' => [
                     'header' => Yii::t('ctx', 'memberCode'),
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'FROM_HIGHEST_EMP_LV_NAME' => [
                     'header' => Yii::t('ctx', 'levelBeforeModification'),
                     'value' => function($row) use($empLevelConfig) {

+ 7 - 3
backendApi/modules/v1/models/lists/user/DecLevelList.php

@@ -4,6 +4,7 @@ namespace backendApi\modules\v1\models\lists\user;
 use backendApi\modules\v1\models\Admin;
 use common\helpers\Cache;
 use common\libs\dataList\DataListInterface;
+use common\models\Countries;
 use common\models\DecLevelLog;
 use common\models\User;
 use common\models\UserInfo;
@@ -27,13 +28,13 @@ class DecLevelList extends \common\libs\dataList\DataList implements DataListInt
     public function dataHandle()
     {
         $this->listData = DecLevelLog::lists($this->condition, $this->params, [
-            'select' => 'LL.*,
-                CU.USER_NAME,ADM.ADMIN_NAME',
+            'select' => 'LL.*, CU.USER_NAME, ADM.ADMIN_NAME, C.NAME AS COUNTRY',
             'orderBy' => 'LL.CREATED_AT DESC, LL.ID DESC',
             'from' => DecLevelLog::tableName() . ' AS LL',
             'join' => [
                 ['LEFT JOIN', Admin::tableName() . ' AS ADM', 'LL.ADMIN_ID=ADM.ID'],
-                ['LEFT JOIN', User::tableName() . ' AS CU', 'LL.USER_ID=CU.ID'],
+                ['INNER JOIN', User::tableName() . ' AS CU', 'LL.USER_ID=CU.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'CU.COUNTRY_ID=C.ID'],
             ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
@@ -54,6 +55,9 @@ class DecLevelList extends \common\libs\dataList\DataList implements DataListInt
                     'header' => Yii::t('ctx', 'memberCode'),
                     'headerOther' => ['minWidth' => '120'],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'FROM_DEC_LV_NAME' => [
                     'header' => Yii::t('ctx', 'levelBeforeModification'),
                     'headerOther' => ['minWidth' => '110'],

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

@@ -6,6 +6,7 @@ use common\helpers\Cache;
 use common\helpers\http\BackendToFrontendApi;
 use common\helpers\user\Info;
 use common\libs\dataList\DataListInterface;
+use common\models\Countries;
 use common\models\DecRole;
 use common\models\OpenBank;
 use common\models\Region;
@@ -36,15 +37,16 @@ class MoveList extends \common\libs\dataList\DataList implements DataListInterfa
         $this->listData = User::lists($this->condition, $this->params, [
             'select' => 'UM.*,
                 CU.USER_NAME MOVE_USER_NAME,CU.REAL_NAME MOVE_REAL_NAME,FUI.USER_NAME FROM_USER_NAME,TUI.USER_NAME TO_USER_NAME,ADMC.ADMIN_NAME MOVE_ADMIN_NAME,ADMU.ADMIN_NAME AUDIT_ADMIN_NAME
-                ',
+                , C.NAME AS COUNTRY',
             'orderBy' => 'UM.CREATED_AT DESC, UM.ID DESC',
             'from' => UserMove::tableName() . ' AS UM',
             'join' => [
-                ['LEFT JOIN', User::tableName() . ' AS CU', 'UM.USER_ID=CU.ID'],
+                ['INNER JOIN', User::tableName() . ' AS CU', 'UM.USER_ID=CU.ID'],
                 ['LEFT JOIN', UserInfo::tableName() . ' AS FUI', 'UM.FROM_UID=FUI.USER_ID'],
                 ['LEFT JOIN', UserInfo::tableName() . ' AS TUI', 'UM.TO_UID=TUI.USER_ID'],
                 ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'UM.MOVE_ADMIN_ID=ADMC.ID'],
                 ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'UM.AUDIT_ADMIN_ID=ADMU.ID'],
+                ['INNER JOIN', Countries::tableName() . ' AS C', 'CU.COUNTRY_ID=C.ID'],
             ],
             'page' => $this->page,
             'pageSize' => $this->pageSize,
@@ -71,6 +73,9 @@ class MoveList extends \common\libs\dataList\DataList implements DataListInterfa
                         'tag'=>['type'=>'success', 'size' => 'small', 'class'=>'no-border']
                     ],
                 ],
+                'COUNTRY' => [
+                    'header' => Yii::t('ctx', 'country'),
+                ],
                 'FROM_USER_NAME' => [
                     'header' => Yii::t('ctx', 'uperCodeBeforeMoving'),
                     'headerOther' => ['width' => '120'],

BIN
backendEle/static/src/img/ngds-logo.jpg


+ 2 - 10
common/config/main.php

@@ -55,10 +55,8 @@ return [
         'mailer' => [
             'class' => 'yii\swiftmailer\Mailer',
             'viewPath' => '@common/mail',
-            // send all mails to a file by default. You have to set
-            // 'useFileTransport' to false and configure a transport
-            // for the mailer to send real emails.
-            'useFileTransport' => true, // true(缓存到文件中) false(发送邮件)
+            'useFileTransport' => false,
+            'enableSwiftMailerLogging' => true,
             'transport' => [
                 'class' => 'Swift_SmtpTransport',
                 'host' => 'mail.authsmtp.com',
@@ -66,12 +64,6 @@ return [
                 'username' => 'ac71555',
                 'password' => 'I1j-MKi-fJ8-nHb',
                 'encryption' => 'TLS',
-
-//                'host' => 'smtp.163.com',
-//                'port' => 465,
-//                'username' => '18511880790@163.com',
-//                'password' => 'YOUSSWQHISDSWPVB',
-//                'encryption' => 'SSL',
             ],
         ],
         'swooleAsyncTimer' => [

+ 3 - 4
common/libs/export/BaseExport.php

@@ -308,7 +308,7 @@ class BaseExport extends Component {
         $orderQuery = Order::find()
             ->alias('O')
             ->where($this->params['condition'], $this->params['params'])
-            ->select('O.*,U.REAL_NAME,U.DEC_ID,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.STANDARD_PRICE')
+            ->select('O.*,U.REAL_NAME,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.STANDARD_PRICE')
             ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
             ->join('LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
             ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
@@ -320,7 +320,7 @@ class BaseExport extends Component {
         $orderStandardQuery = ApproachOrder::find()
             ->alias('O')
             ->where($this->params['condition'] . ' AND (O.STATUS = :NOT_PAID OR O.STATUS = :FAIL_PAID)', $this->params['params'])
-            ->select('O.*,U.REAL_NAME,U.DEC_ID,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.STANDARD_PRICE')
+            ->select('O.*,U.REAL_NAME,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,OG.STANDARD_PRICE')
             ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
             ->join('LEFT JOIN', ApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
             ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
@@ -335,11 +335,10 @@ class BaseExport extends Component {
             foreach($lists as $columnData) {
                 $CREATE_USER_ID = Info::getUserIdByUserName($columnData['CREATE_USER']);
                 $createUserName = Info::getUserRealNameByUserId($CREATE_USER_ID);
-                $decUserName = Info::getUserNameByUserId($columnData['DEC_ID']);
 
                 $columnAccept = [
                     'USER_NAME' => $columnData['USER_NAME'],
-                    'DEC_USER_NAME' => $decUserName,
+                    'DEC_USER_NAME' => $columnData['DEC_USER_ID'],
                     'CREATE_USER' => $columnData['CREATE_USER'],
                     'CREATE_USER_NAME' => $createUserName,
                     'SN' => $columnData['SN'],

+ 1 - 1
common/messages/en-US/app.php

@@ -228,7 +228,7 @@ return [
     'decRegistrationEmailContent' => "
         <p>Welcome to Elken Global!</p>
         <p>Congratulations on successfully joining the Elken family! We are committed to empowering you to grow and succeed.</p>  
-        <p>Access your back office here: <a href='https://ngds.elken.com'>https://ngds.elken.com</a></p>
+        <p>Access your back office here: <a href='https://meads.elken.com'>https://ngds.elken.com</a></p>
         <p>Username: [{userName}]</p>
         <p>Password: {passWord} (Please change it for security reasons.)</p>
         <p>To kickstart your success journey, explore essential resources, videos, and guides here: <a href='https://bit.ly/ElkenWelcomeKit'>https://bit.ly/ElkenWelcomeKit</a></p>

+ 1 - 1
common/messages/zh-CN/app.php

@@ -234,7 +234,7 @@ return [
     'decRegistrationEmailContent' => "
         <p>欢迎来到Elken Global!</p>
         <p>祝贺您成功加入Elken大家庭!我们致力于赋予您成长和成功的能力。</p>  
-        <p>访问您的后台: <a href='https://ngds.elken.com'>https://ngds.elken.com</a></p>
+        <p>访问您的后台: <a href='https://meads.elken.com'>https://ngds.elken.com</a></p>
         <p>用户名: [{userName}]</p>
         <p>密码: {passWord} (出于安全原因,请更改密码。)</p>
         <p>要启动您的成功之旅,请在此处浏览必要的资源、视频和指南: <a href='https://bit.ly/ElkenWelcomeKit'>https://bit.ly/ElkenWelcomeKit</a></p>

+ 20 - 0
common/models/Countries.php

@@ -103,6 +103,26 @@ class Countries extends \common\components\ActiveRecord
         return self::findOneAsArray('ID=:ID', [':ID' => $id]);
     }
 
+    /**
+     * 通过ID获取
+     * @param string $id
+     * @return string
+     */
+    public static function getNameById(string $id): string
+    {
+        return self::findOneAsArray('ID=:ID', [':ID' => $id])['NAME'];
+    }
+
+    /**
+     * 通过ID获取
+     * @param string $id
+     * @return string
+     */
+    public static function getCodeById(string $id): string
+    {
+        return self::findOneAsArray('ID=:ID', [':ID' => $id])['CODE'];
+    }
+
     /**
      * 通过ID查询币种.
      * @param string $id

+ 0 - 1
common/models/Currency.php

@@ -59,7 +59,6 @@ class Currency extends \common\components\ActiveRecord
     public static function getFromCache()
     {
         $data = Yii::$app->cache->get(Cache::CURRENCIES_KEY);
-        Yii::$app->cache->delete(Cache::CURRENCIES_KEY);
         if (!$data) {
             // 获取信息
             $data = self::getAllData();

+ 6 - 3
common/models/Region.php

@@ -92,7 +92,7 @@ class Region extends \common\components\ActiveRecord
      */
     public static function getFromCache(){
         $data = Yii::$app->cache->get(Cache::REGION_CONFIG_KEY);
-        Yii::$app->cache->delete(Cache::REGION_CONFIG_KEY);
+        $data = null;
         if(!$data){
             // 获取信息
             $data = self::getAllData();
@@ -133,10 +133,13 @@ class Region extends \common\components\ActiveRecord
     public static function getWarehouseByCode($regionCode){
         //'540000','710000','810000','820000'
         $ZoningArr = [
-            '01'=>['10100','10200','10300','10400','10500','10600','10700','10800','10900',
+            '01' => ['10100','10200','10300','10400','10500','10600','10700','10800','10900',
                 '11000','11100','11200','11300','11400','11500','11600','11700','11800',
                 '11900','12000','12100','12200','12300','12400','12500','12600','12700',
-                '12800','12900','13000','13100','13200','13300','13400','13500','13600','19900']
+                '12800','12900','13000','13100','13200','13300','13400','13500','13600','19900',
+
+                '10000', '10001', '10002', '10003', '10004', '10005', '10006',
+                ]
         ];
         $zoning = '';
         foreach ($ZoningArr as $key=>$val){

+ 1 - 1
common/models/User.php

@@ -121,7 +121,7 @@ class User extends \common\components\ActiveRecord
             [['PASSWORD_HASH', 'PAY_PASSWORD', 'ID_IMAGE', 'BANK_ADDRESS', 'AVATAR'], 'string', 'max' => 255],
             [['REAL_NAME', 'APP_CLIENT_ID', 'BONUS_APP_CLIENT_ID'], 'string', 'max' => 128],
 //            [['ID_CARD', 'SPOUSE_IDCARD'], 'string','min' => 18, 'max' => 18],
-            [['MOBILE'], 'string','min' => 11, 'max' => 11],
+//            [['MOBILE'], 'string','min' => 11, 'max' => 11],
             [['ADDRESS', 'DEC_ADDRESS'], 'string', 'max' => 2000],
             [['DEC_ACCOUNT_OLD', 'GUARANTOR_NAME'], 'string', 'max' => 64],
             [['PART_FUNC_CLOSED_REMARK'], 'string', 'max' => 4000],

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

@@ -275,15 +275,11 @@ class ShopGoodsForm extends Model
                 throw new Exception(Form::formatErrorsForApi($model->getErrors()));
             }
 
-            // 移除属性表中商品属性
             ShopGoodsNature::deleteAll(['GOODS_ID' => $model->ID]);
 
             // 商品属性
             foreach ($this->nature as $item) {
-                // 国家
                 $country = Countries::getById($item['ID']);
-                // 转换美元汇率
-                $productRate = CurrencyConversions::getToUSDRate($country['LOCAL_CURRENCY_ID']);
 
                 $shopGoodsNature = new ShopGoodsNature();
                 $shopGoodsNature->GOODS_ID = $model->ID;

+ 32 - 4
common/models/forms/WithdrawForm.php

@@ -2,10 +2,14 @@
 
 namespace common\models\forms;
 
+use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use common\components\Model;
 use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\Form;
+use common\helpers\LoggerTool;
 use common\helpers\Tool;
 use common\helpers\user\Balance;
 use common\helpers\user\Info;
@@ -735,11 +739,36 @@ class WithdrawForm extends Model {
      *
      * @throws \yii\db\Exception
      */
-    public function batchWithdraw($limit, $start){
+    public function batchWithdraw($limit, $start, $params){
         $config = Cache::getSystemConfig();
         $minAmount = $config['manualWithdrawMinAmount']['VALUE'];
+
+        $condition = '';
+        $adminRoleId = Admin::getRoleIdById($params['handleUserId']);
+        $isSuper = AdminRole::isSuperAdmin($adminRoleId);
+        if (!$isSuper) {
+            $adminCountry = AdminCountry::getCountry($params['handleUserId']);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $condition = " AND U.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ")";
+        }
+
         // 查找有奖金的用户
-        $allData = UserBonus::find()->select('USER_ID, USER_NAME, ID_CARD, BONUS')->from(UserBonus::tableName().' AS UB')->join('LEFT JOIN', User::tableName().' AS U','UB.USER_ID = U.ID')->where("BONUS>$minAmount")->offset(0)->limit($limit)->orderBy('U.ID')->asArray()->all();
+        $allData = UserBonus::find()
+            ->select('USER_ID, USER_NAME, ID_CARD, BONUS')
+            ->from(UserBonus::tableName().' AS UB')
+            ->join('INNER JOIN', User::tableName() . ' AS U','UB.USER_ID = U.ID ' . $condition)
+            ->where("BONUS>$minAmount")
+            ->offset(0)
+            ->limit($limit)
+            ->orderBy('U.ID')
+            ->asArray()
+            ->all();
+
+        LoggerTool::debug($allData);
+
         if($allData){
             foreach ($allData as $data){
                 $db = \Yii::$app->db;
@@ -776,7 +805,6 @@ class WithdrawForm extends Model {
                     if (!$withdrawModel->save()) {
                         throw new Exception(Form::formatErrorsForApi($withdrawModel->getErrors()));
                     }
-//                    print_r($data['BONUS'].',,'.$i.PHP_EOL);
                     $transaction->commit();
                     unset($withdrawModel);
                 } catch (Exception $e) {
@@ -788,7 +816,7 @@ class WithdrawForm extends Model {
             unset($allData);
             $start = $start + $limit;
 
-            return self::batchWithdraw($limit, $start);
+            return self::batchWithdraw($limit, $start, $params);
         }
         return true;
     }

+ 8 - 1
console/controllers/BonusController.php

@@ -7,6 +7,9 @@
  */
 namespace console\controllers;
 
+use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\AdminCountry;
+use backendApi\modules\v1\models\AdminRole;
 use backendApi\modules\v1\models\lists\bonus\BalanceList;
 use backendApi\modules\v1\models\lists\bonus\CfLxAuditList;
 use backendApi\modules\v1\models\lists\bonus\FlowBalanceList;
@@ -51,6 +54,7 @@ use common\helpers\Excel;
 use common\helpers\Form;
 use common\helpers\http\RemoteUploadApi;
 use common\helpers\Log;
+use common\helpers\LoggerTool;
 use common\libs\export\module\BonusExport;
 use common\models\forms\PeriodForm;
 use common\models\forms\UserPerformanceForm;
@@ -58,6 +62,7 @@ use common\models\forms\WithdrawForm;
 use common\models\LogAsync;
 use common\models\Withdraw;
 use common\models\UserBonus;
+use Yii;
 use yii\db\Exception;
 
 class BonusController extends BaseController
@@ -529,9 +534,11 @@ class BonusController extends BaseController
      *
      */
     public function actionAutoWithdraw($taskKey){
+        $params = Cache::getAsyncParams($taskKey);
+
         Cache::setWithdrawLock(1);
         $formModel = new WithdrawForm();
-        $formModel->batchWithdraw(1000,0);
+        $formModel->batchWithdraw(5,0, $params);
         Cache::setWithdrawLock(0);
     }
 

+ 1 - 1
frontendApi/config/params.php

@@ -20,7 +20,7 @@ return [
         'v1/finance/prove-add',
         'v1/site/get-instance',
         'v1/site/languages',
-        'v1/site/countries',
+//        'v1/site/countries',
         'v1/bonus/period',
         ],
     'noCheckPermissionActions' => [],

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

@@ -143,17 +143,31 @@ class ShopController extends BaseController {
                 $allAddress[$key]['COUNTY_NAME'] = Region::getCnName($row['COUNTY']);
             }
         }
+
+        // 账户币种
+        $country = Countries::getById($user['COUNTRY_ID']);
+        $coin = Currency::getById($country['LOCAL_CURRENCY_ID']);
+
+        $decCountryId = User::getEnCodeInfo(\Yii::$app->user->id)['COUNTRY_ID'];
+        $decCountry = Countries::getById($decCountryId);
+        $decUserCurrencyRate = CurrencyConversions::getToUSDRate($decCountry['LOCAL_CURRENCY_ID']);
+        $currencyRate = CurrencyConversions::getToUSDRate($country['LOCAL_CURRENCY_ID']);
+
         $userBalance = [
             'cash' => 0,
             'prp' => 0,
+            'localCash' => 0,
+            'localRrp' => 0,
         ];
 
         if ($userCashResult = UserWallet::findOneAsArray(['USER_ID' => $user['ID']])) {
             $userBalance['cash'] = $userCashResult['CASH'];
+            $userBalance['localCash'] = Tool::convertAmount($userCashResult['CASH'], $decUserCurrencyRate, $currencyRate);
         }
 
         if ($userPerformance = UserPerformance::getAmounts($user['ID'])) {
             $userBalance['prp'] = $userPerformance;
+            $userBalance['localCash'] = Tool::convertAmount($userPerformance, $decUserCurrencyRate, $currencyRate);
         }
 
         // 运费模板
@@ -165,10 +179,6 @@ class ShopController extends BaseController {
 
         $isDec = User::getEnCodeInfo(\Yii::$app->user->id)['IS_DEC'];
 
-        // 账户币种
-        $country = Countries::getById($user['COUNTRY_ID']);
-        $coin = Currency::getById($country['LOCAL_CURRENCY_ID']);
-
         return static::notice(
             [
                 'payList'=>$payList,

+ 3 - 4
frontendApi/modules/v1/controllers/SiteController.php

@@ -415,15 +415,14 @@ class SiteController extends BaseController
 
     public function actionCountries()
     {
-        // 国家列表
-        $data = Cache::getCountries();
+        $countryId = User::getEnCodeInfo(\Yii::$app->user->id)['COUNTRY_ID'];
+        $countries = array_filter(Cache::getCountries(), fn($country) => $country['ID'] === $countryId);
 
-        return static::notice(['data' => $data]);
+        return static::notice(['data' => array_values($countries)]);
     }
 
     public function actionLanguages()
     {
-        // 语言列表
         $data = Cache::getLanguages();
 
         return static::notice(['data' => $data]);

+ 12 - 0
frontendApi/modules/v1/controllers/UserController.php

@@ -245,6 +245,12 @@ class UserController extends BaseController {
         if ($baseInfo['STATUS'] != 1) {
             return static::notice(Yii::t('app', 'inactiveUser'), 400);
         }
+
+        $loginUserInfo = User::getEnCodeInfo(\Yii::$app->user->id);
+        if ($baseInfo['COUNTRY_ID'] !== $loginUserInfo['COUNTRY_ID']) {
+            return static::notice(Yii::t('app', 'memberNumberDoesNotExist'), 400);
+        }
+
         // 1. 如果是最高级别,则只显示用户基本信息
         // 2. 如果不是最高级别,如果用户累计报单数据是0, 或者用户累计报单业绩不符合级别信息,则提示 请联系客服核对业绩
         $userId = $baseInfo['ID'];
@@ -770,6 +776,12 @@ SQL;
         $userId = Info::getUserIdByUserName($userName);
         $userInfo['REAL_NAME'] = '';
         $user = User::findOneAsArray('ID=:ID', [':ID' => $userId]);
+
+        $loginUserInfo = User::getEnCodeInfo(\Yii::$app->user->id);
+        if ($user['COUNTRY_ID'] !== $loginUserInfo['COUNTRY_ID']) {
+            return static::notice(Yii::t('app', 'memberNumberDoesNotExist'), 400);
+        }
+
         if($user){
             $userInfo['REAL_NAME'] = $user['REAL_NAME'];
             $allChildUser = UserNetwork::getFirstFloorChildren($userId);

BIN
frontendEle/static/src/img/ngds-logo.jpg