Ver código fonte

第一期工程提交master

rkljw 5 meses atrás
pai
commit
2a8faf53db
44 arquivos alterados com 4383 adições e 235 exclusões
  1. 32 0
      .env
  2. 64 58
      app/Controller/AuthorityController.php
  3. 5 6
      app/Controller/ChatController.php
  4. 11 7
      app/Controller/LoginController.php
  5. 87 49
      app/Controller/NewsController.php
  6. 1 1
      app/Controller/PublicController.php
  7. 163 33
      app/Controller/UserController.php
  8. 424 40
      app/Controller/WebsiteController.php
  9. 9 0
      app/JsonRpc/AuthorityService.php
  10. 6 0
      app/JsonRpc/AuthorityServiceInterface.php
  11. 10 0
      app/JsonRpc/NewsService.php
  12. 6 0
      app/JsonRpc/NewsServiceInterface.php
  13. 9 0
      app/JsonRpc/UserService.php
  14. 4 0
      app/JsonRpc/UserServiceInterface.php
  15. 111 2
      app/JsonRpc/WebsiteService.php
  16. 74 1
      app/JsonRpc/WebsiteServiceInterface.php
  17. 11 3
      app/Middleware/Auth/FooMiddleware.php
  18. 10 2
      app/Middleware/Auth/WebMiddleware.php
  19. 0 11
      app/Tools/CommonService.php
  20. 19 0
      app/Tools/PublicData.php
  21. 9 0
      config/api/authority.php
  22. 11 0
      config/api/chat.php
  23. 8 1
      config/api/news.php
  24. 16 5
      config/api/public.php
  25. 12 0
      config/api/user.php
  26. 48 14
      config/api/website.php
  27. 4 2
      config/autoload/jwt.php
  28. 0 0
      runtime/container/classes.cache
  29. 169 0
      runtime/container/proxy/App_Controller_AdController.proxy.php
  30. 139 0
      runtime/container/proxy/App_Controller_AuthorityController.proxy.php
  31. 222 0
      runtime/container/proxy/App_Controller_ChatController.proxy.php
  32. 58 0
      runtime/container/proxy/App_Controller_IndexController.proxy.php
  33. 93 0
      runtime/container/proxy/App_Controller_LinkController.proxy.php
  34. 197 0
      runtime/container/proxy/App_Controller_LoginController.proxy.php
  35. 248 0
      runtime/container/proxy/App_Controller_NewsController.proxy.php
  36. 312 0
      runtime/container/proxy/App_Controller_PublicController.proxy.php
  37. 336 0
      runtime/container/proxy/App_Controller_UserController.proxy.php
  38. 701 0
      runtime/container/proxy/App_Controller_WebsiteController.proxy.php
  39. 69 0
      runtime/container/proxy/App_JsonRpc_AuthorityServiceInterface.rpc-client.proxy.php
  40. 93 0
      runtime/container/proxy/App_JsonRpc_NewsServiceInterface.rpc-client.proxy.php
  41. 145 0
      runtime/container/proxy/App_JsonRpc_UserServiceInterface.rpc-client.proxy.php
  42. 345 0
      runtime/container/proxy/App_JsonRpc_WebsiteServiceInterface.rpc-client.proxy.php
  43. 92 0
      runtime/container/proxy/App_Tools_CommonService.proxy.php
  44. 0 0
      runtime/container/scan.cache

+ 32 - 0
.env

@@ -0,0 +1,32 @@
+APP_NAME=user_producer
+APP_ENV=dev
+HOST = http://192.168.1.201:9501/
+DB_DRIVER=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=hyperf
+DB_USERNAME=root
+DB_PASSWORD=root123
+DB_CHARSET=utf8mb4
+DB_COLLATION=utf8mb4_unicode_ci
+DB_PREFIX=
+
+REDIS_HOST=101.254.114.211
+REDIS_AUTH=YPWWnFnNebc7427B
+REDIS_PORT=26739
+REDIS_DB=0
+
+AMQP_HOST=103.105.201.2
+AMQP_PORT=5673
+AMQP_USER=rabbitmq
+AMQP_PASSWORD=H8eDTAk6LY7EjJ8y
+
+
+#小程序获取openid
+WECHAT = https://api.weixin.qq.com/
+
+#小程序appID
+APPID = wx830ada852dd1707f
+#小程序SECRET
+APP_SECRET = 09d1ac9287cb6f3c5e81aa27a6b7138e
+#12

+ 64 - 58
app/Controller/AuthorityController.php

@@ -33,21 +33,9 @@ class AuthorityController extends AbstractController
      */
     public function getMenuList()
     {
-        $id =  (int)$this->request->input("id",0);
-        $page =  (int)$this->request->input("page",1);
-        $pageSize =  (int)$this->request->input("pageSize",10);
-        $data = [
-            'id'=>$id,
-            'page'=>$page,
-            'pageSize'=>$pageSize
-        ];
-        $result = $this->authorityServiceClient->getMenuList($data);
-        if($result['data']){
-            foreach ($result['data']['rows'] as $k=>$v) {
-                $result['data']['rows'][$k]['pid_arr'] = $v['pid_arr']?json_decode($v['pid_arr']):[0];
-            }
-        }
-        return $result?Result::success($result['data']):Result::error($result['message']);
+        $result = $this->authorityServiceClient->getMenuList([]);
+        $result =  PublicData:: buildMenuTree($result['data']);
+        return $result?Result::success($result):Result::error('查询失败');
     }
 
     /**
@@ -56,16 +44,29 @@ class AuthorityController extends AbstractController
      */
     public function delMenu()
     {
-        $id =  (int)$this->request->input("id",0);
-        $data = [
-            'id'=>$id,
-            'page'=>1,
-            'pageSize'=>2
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'id' => 'required',
+            ],
+            [
+                'id.required' => '菜单id不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $getData = [
+            'id'=>$requireData['id']
         ];
-        $result = $this->authorityServiceClient->getMenuList($data);
-        if(count($result['data']['rows'])>0){
+        $result = $this->authorityServiceClient->getMenuList($getData);
+//        var_dump("菜单返回数据:",$result);
+        if(count($result['data'])>0){
             return Result::error("有子菜单不能删除");
         }
+        $data = ['id'=>$requireData['id']];
         return $this->authorityServiceClient->delMenu($data);
 
     }
@@ -90,17 +91,37 @@ class AuthorityController extends AbstractController
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        if(isset($requireData['pid']) && is_array($requireData['pid'])){
-            $requireData['pid_arr'] = json_encode($requireData['pid']);
-            $requireData['pid'] = end($requireData['pid']);
-        }else{
-            $id = [0];
-            $requireData['pid_arr'] = json_encode($id);
-            $requireData['pid'] = end($id);
-        }
+        $requireData['pid'] = isset($requireData['pid_arr'])?end($requireData['pid_arr']):'';
+        $requireData['pid_arr'] = isset($requireData['pid_arr'])?json_encode($requireData['pid_arr']):'';
+
         $result = $this->authorityServiceClient->addMenu($requireData);
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
+
+    /**
+     * 查看菜单信息
+     * @return array
+     */
+    public function getMenuInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'id' => 'required',
+            ],
+            [
+                'id.required' => 'id不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->authorityServiceClient->getMenuInfo($requireData);
+        $result['data']['pid_arr'] = isset($result['data']['pid_arr']) && $result['data']['pid_arr']?json_decode($result['data']['pid_arr']):[];
+        return $result?Result::success($result['data']):Result::error($result['message']);
+    }
     /**
      * 修改菜单
      * @return array|void
@@ -112,38 +133,19 @@ class AuthorityController extends AbstractController
             $requireData,
             [
                 'id' => 'required',
-//                'pid' => 'required',
                 'label' => 'required',
-//                'url' => 'required',
-
             ],
             [
                 'id.required' => 'id不能为空',
-//                'pid.required' => '父级id不能为空',
                 'label.required' => '菜单名称不能为空',
-//                'url.required' => '路由地址不能为空',
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        unset($requireData['pid_arr']);
-        var_dump("提交数据前:",$requireData);
-        if(isset($requireData['pid']) && is_array($requireData['pid'])){
-            $requireData['pid_arr'] = json_encode($requireData['pid']);
-            $requireData['pid'] = end($requireData['pid']);
-        }else if(isset($requireData['pid']) && $requireData['pid']>0){
-//            array_push($requireData['pid'],$requireData['pid']);
-            $requireData['pid'] = [$requireData['pid']];
-            $requireData['pid_arr'] = json_encode($requireData['pid']);
-            $requireData['pid'] = end($requireData['pid']);
-        }else{
-            $id = [0];
-            $requireData['pid_arr'] = json_encode($id);
-            $requireData['pid'] = end($id);
-        }
-        var_dump("提交数据后",$requireData);
+        $requireData['pid'] = isset($requireData['pid_arr'])?end($requireData['pid_arr']):'';
+        $requireData['pid_arr'] = isset($requireData['pid_arr'])?json_encode($requireData['pid_arr']):'';
         $result = $this->authorityServiceClient->updateMenu($requireData);
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
@@ -154,19 +156,23 @@ class AuthorityController extends AbstractController
      */
     public  function  getRecursionMenu()
     {
-        $header = $this->request->getHeaders();
-        if(!isset($header['origin'])){
-            return Result::error("header请配置origin");
-        }
-        $origin =  $header['origin'][0];
-        $logindevice = explode("//", $origin);
         $reqData = [
             'user_id' =>Context::get("UserId"),
-            'logindevice' => $logindevice[1]
         ];
         $result =  $this->authorityServiceClient->getRecursionMenu($reqData);
         $rep = PublicData::buildMenuTree($result['data']);
         return $rep?Result::success($rep):Result::error("查询失败");
     }
 
+    /**
+     * 查询所有的菜单
+     * @return array
+     */
+    public function getAllMenuList()
+    {
+        $result =  $this->authorityServiceClient->getAllMenuList([]);
+        $rep = PublicData::buildMenuTree($result['data']);
+        return $rep?Result::success($rep):Result::error("查询失败");
+    }
+
 }

+ 5 - 6
app/Controller/ChatController.php

@@ -22,7 +22,7 @@ use Hyperf\Context\Context;
  * Class ChatController
  * @package App\Controller
  */
-#[AutoController]
+//#[AutoController]
 class ChatController extends AbstractController
 {
     #[Inject]
@@ -53,7 +53,8 @@ class ChatController extends AbstractController
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        $requireData['user_id'] =Context::get("UserId");
+        $requireData['user_id'] = Context::get("UserId");
+        var_dump("用户id:",$requireData);
         $result = $this->chatServiceClient->addContactApply($requireData);
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
@@ -181,10 +182,8 @@ class ChatController extends AbstractController
               $errorMessage = $validator->errors()->first();
               return Result::error($errorMessage);
           }
-          $requireData['user_id'] =Context::get("UserId");
-          $userIdArr = array(json_decode($requireData['user_id_arr']));
-          $requireData['user_id_arr'] = $userIdArr[0];
-          $requireData['user_id_arr'][] =Context::get("UserId");
+          $requireData['user_id'] = Context::get("UserId");
+          $requireData['user_id_arr'] = $requireData['user_id_arr'];
           var_dump($requireData);
           $result = $this->chatServiceClient->addTalkGroup($requireData);
           return $result['code']==200?Result::success($result['data']):Result::error($result['message']);

+ 11 - 7
app/Controller/LoginController.php

@@ -27,8 +27,6 @@ class LoginController extends AbstractController
     private $userServiceClient;
     public function login(Jwt $jwt)
     {
-//        $this->logger->info("验证之前");
-
         $reqData =  $this->request->all();
         $validator = $this->validationFactory->make(
             $reqData,
@@ -59,7 +57,6 @@ class LoginController extends AbstractController
         if(strtolower($code)!=$reqData['captcha']){
             return Result::error("验证码错误");
         }
-            //$reqData
         $where = [];
         if($reqData['type'] ==1){//密码登录
             $where = [
@@ -71,6 +68,7 @@ class LoginController extends AbstractController
         if($userInfos['code']==0){
             return Result::error("用户名或密码错误");
         }
+        var_dump("用户信息:",$userInfos);
 //        $this->logger->info("验证用户返回值:", $userInfos);
         if(md5(md5($reqData['password']).$userInfos['data']['salt']) != $userInfos['data']['password']){
             return Result::error("用户名或密码错误");
@@ -78,11 +76,11 @@ class LoginController extends AbstractController
         $userData = [
             'uid' => $userInfos['data']['id'], // 如果使用单点登录,必须存在配置文件中的sso_key的值,一般设置为用户的id
             'user_name' => $userInfos['data']['user_name'],
-            'role_id' => $userInfos['data']['role_id'],
             'mobile' => $userInfos['data']['mobile'],
             'email' => $userInfos['data']['email'],
-            'rong_token' => $userInfos['data']['rong_token'],
-            'level_id' => $userInfos['data']['level_id']
+//            'rong_token' => $userInfos['data']['rong_token'],
+            'level_id' => $userInfos['data']['level_id'],
+            'type_id' => $userInfos['data']['type_id'],
         ];
         var_dump($userData);
         // 使用默认场景登录
@@ -195,7 +193,8 @@ class LoginController extends AbstractController
             $createUserData = [
                 'user_name'=>$response['phone_info']['purePhoneNumber'],
                 'salt' => $salt,
-                'password'=>$openInfoData['openid']
+                'password'=>$openInfoData['openid'],
+                'type_id'=>20000
             ];
             $checkUserInfo =  $this->userServiceClient->createUser($createUserData);
         }
@@ -220,6 +219,11 @@ class LoginController extends AbstractController
         $userData = [
             'uid' => $checkUserInfo['data']['id'], // 如果使用单点登录,必须存在配置文件中的sso_key的值,一般设置为用户的id
             'user_name' => $response['phone_info']['phoneNumber'],
+            'mobile' => $checkUserInfo['data']['mobile']??'',
+            'email' => $checkUserInfo['data']['email'],
+//            'rong_token' => $userInfos['data']['rong_token'],
+            'level_id' => $checkUserInfo['data']['level_id'],
+            'type_id' => $checkUserInfo['data']['type_id'],
         ];
         // 使用默认场景登录
         $token = $jwt->getToken('default', $userData);

+ 87 - 49
app/Controller/NewsController.php

@@ -58,14 +58,27 @@ class NewsController extends AbstractController
         return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
     }
     /**
-     * 分类列表
+     * 站点下的导航池
      * @return void
      */
     public function categoryList()
     {
-        $requireData['website_id'] = $this->websiteId;
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'pid'=> 'required'
+            ],
+            [
+                'pid.required' => '父级ID不能为空'
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+//        $requireData['website_id'] = Context::get("SiteId");
         $result = $this->newsServiceClient->categoryList($requireData);
-        var_dump($result);
         $rep = PublicData::buildMenuTree($result['data']);
         return $result ? Result::success($rep) : Result::error($result['message']);
     }
@@ -183,26 +196,26 @@ class NewsController extends AbstractController
     public function getArticleList()
     {
         $requireData = $this->request->all();
-        $requireData['website_id'] = $this->websiteId;
-        var_dump("资讯:",$requireData);
-        $result = $this->newsServiceClient->getArticleList($requireData);
-        //1通过,2待审核,3待发 4,拒绝 5删除
-        $statusList = [
-            '1'=>'通过',
-            '2'=>'待审核',
-            '3'=>'待发',
-            '4'=>'拒绝',
-            '5'=>'删除',
-        ];
-        if($result['data']){
-            foreach ($result['data']['rows'] as $k=>$v) {
-                $result['data']['rows'][$k]['cat_arr_id'] = $v['cat_arr_id']?json_decode($v['cat_arr_id']):[0];
-                $result['data']['rows'][$k]['tag'] = $v['tag']?json_decode($v['tag']):[];
-                $result['data']['rows'][$k]['status_name'] = $statusList[$v['status']];
-                $result['data']['rows'][$k]['level'] = (string)$v['level'];
-                $result['data']['rows'][$k]['islink'] = isset($v['islink']) && $v['islink']>0?true:false;
-            }
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'page'=> 'required',
+                'pageSize'=> 'required',
+
+            ],
+            [
+                'page.required' => 'id不能为空',
+                'pageSize.required' => 'id不能为空',
+
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
         }
+
+        $result = $this->newsServiceClient->getArticleList($requireData);
+
         return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
     }
 
@@ -243,13 +256,13 @@ class NewsController extends AbstractController
             $requireData,
             [
                 'title'=> 'required',
-                'catid'=> 'required',
+                'cat_arr_id'=> 'required',
                 'author'=> 'required',
 
             ],
             [
                 'title.required' => '标题不能为空',
-                'catid.required' => '分类不能为空',
+                'cat_arr_id.required' => '导航池ID不能为空',
                 'author.required' => '作者不能为空',
             ]
         );
@@ -257,24 +270,27 @@ class NewsController extends AbstractController
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        if(isset($requireData['catid']) && is_array($requireData['catid'])){
-            $requireData['cat_arr_id'] = json_encode($requireData['catid']);
-            $requireData['catid'] = end($requireData['catid']);
-        }else{
-            $id = [0];
-            $requireData['cat_arr_id'] = json_encode($id);
-            $requireData['catid'] = end($id);
-        }
+        $requireData['catid'] = isset($requireData['cat_arr_id'])?end($requireData['cat_arr_id']):'';
+        $requireData['cat_arr_id'] = isset($requireData['cat_arr_id'])?json_encode($requireData['cat_arr_id']):'';
+
         $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
         $requireData['ip'] = $loginIp;
-        $requireData['website_id'] = $this->websiteId;
         $requireData['admin_user_id'] =Context::get("UserId");
+        
+        $requireData['level'] = isset($requireData['level']) &&  $requireData['level']?$requireData['level']:0;
+        $requireData['hits'] = isset($requireData['hits']) &&  $requireData['hits']?$requireData['hits']:0;
+        $requireData['is_original'] = isset($requireData['is_original']) &&  $requireData['is_original']?$requireData['is_original']:0;
+        $requireData['status'] = isset($requireData['status']) &&  $requireData['status']?$requireData['status']:0;
+//        var_dump("入参:",$requireData);
         $result = $this->newsServiceClient->addArticle($requireData);
 
-        return $result ? Result::success($result['data']) : Result::error($result['message']);
+        return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
 
-
+    /**
+     * 更新资讯
+     * @return array
+     */
     public function updateArticle()
     {
         $requireData = $this->request->all();
@@ -282,10 +298,14 @@ class NewsController extends AbstractController
             $requireData,
             [
                 'id'=>'required',
-                'name'=> 'required',
+                'title'=> 'required',
+                'cat_arr_id'=> 'required',
+                'author'=> 'required',
             ],
             [
-                'name.required' => '分类名称不能为空',
+                'title.required' => '标题不能为空',
+                'cat_arr_id.required' => '导航池ID不能为空',
+                'author.required' => '作者不能为空',
                 'id.required' =>'ID不能为空'
             ]
         );
@@ -293,18 +313,38 @@ class NewsController extends AbstractController
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        if(isset($requireData['pid']) && is_array($requireData['pid'])){
-            $requireData['pid_arr'] = json_encode($requireData['pid']);
-            $requireData['pid'] = end($requireData['pid']);
-        }else{
-            $id = [0];
-            $requireData['pid_arr'] = json_encode($id);
-            $requireData['pid'] = end($id);
-        }
-        $requireData['website_id'] = $this->websiteId;
+        $requireData['catid'] = isset($requireData['cat_arr_id'])?end($requireData['cat_arr_id']):'';
+        $requireData['cat_arr_id'] = isset($requireData['cat_arr_id'])?json_encode($requireData['cat_arr_id']):'';
+
         $result = $this->newsServiceClient->updateArticle($requireData);
         return $result['code']==200? Result::success($result['data']) : Result::error($result['message']);
     }
+
+    /**
+     * 更新资讯状态
+     * @return array
+     */
+    public function upArticleStatus()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'id'=>'required',
+                'status'=> 'required',
+            ],
+            [
+                'id.required' => 'id不能为空',
+                'status.required' => '状态不能为空',
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->upArticleStatus($requireData);
+        return $result['code']==200? Result::success($result['data']) : Result::error($result['message']);
+    }
     /**
      * 删除分类
      * @return array
@@ -325,8 +365,6 @@ class NewsController extends AbstractController
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-
-        $requireData['website_id'] = $this->websiteId;
         $result = $this->newsServiceClient->delArticle($requireData);
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
@@ -353,7 +391,7 @@ class NewsController extends AbstractController
         }
 
         $result = $this->newsServiceClient->getArticleInfo($requireData);
-        var_dump($result);
+        $result['data']['cat_arr_id'] =  $result['data']['cat_arr_id']?json_decode($result['data']['cat_arr_id']):[];
         return $result['code']==200 ? Result::success($result['data']) : Result::error($result['message']);
     }
 

+ 1 - 1
app/Controller/PublicController.php

@@ -188,7 +188,7 @@ class PublicController extends AbstractController
                 'name.required' => '姓名不能为空',
                 'mobile.required' => '手机号码不能为空',
                 'describe.required' => '详细说明不能为空',
-                'type_level.required' => '详细说明不能为空',
+                'type_level.required' => '类型进度不能为空',
             ]
         );
         if ($validator->fails()) {

+ 163 - 33
app/Controller/UserController.php

@@ -32,19 +32,22 @@ class UserController extends AbstractController
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'user_name' => 'required',
-                'password' => 'required|min:6',
+                'user_name' => 'required',//登陆账号
+                'type_id'=> 'required',//用户类型
+                'password' => 'required|min:6',//密码
                 'confirm_password' => 'required',
-                'email' => 'email',
+                'real_name' => 'required',
                 'mobile' =>'required'
             ],
             [
-                'usernuser_name.required' => '用户名不能为空',
+                'user_name.required' => '用户名不能为空',
                 'password.required' => '密码不能为空',
-                'email.email' => '请填写一个有效的邮箱',
+//                'email.email' => '请填写一个有效的邮箱',
                 'mobile.required' => '手机号码必填',
 //                'mobile.telephone_number' => '请填写一个有效的手机号',
                 'confirm_password.required' =>"确认密码不能为空",
+                'type_id.required' =>"用户类型不能为空",
+                'real_name.required' =>"姓名不能为空",
                 'password.min' =>"密码长度不能低于6位数",
             ]
         );
@@ -59,10 +62,22 @@ class UserController extends AbstractController
         $requireData['salt'] = $salt;
         $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
         $requireData['last_login_ip'] = $loginIp;
+        $requireData['admin_id'] = Context::get("UserId");
 
-//        $this->logger->info("创建用户入参:", $requireData);
+        $requireData['administrative_unit_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id'])>0 ?end($requireData['administrative_unit_arr_id']):0;
+        $requireData['administrative_unit_arr_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id'])>0?json_encode($requireData['administrative_unit_arr_id']):'';
+
+        $requireData['address_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id'])>0?end($requireData['address_arr_id']):0;
+        $requireData['address_arr_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id'])>0 ?json_encode($requireData['address_arr_id']):'';
+
+        $requireData['native_place_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id'])>0?end($requireData['native_place_arr_id']):0;
+        $requireData['native_place_arr_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id'])>0?json_encode($requireData['native_place_arr_id']):'';
+
+        $requireData['city_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id'])>0?end($requireData['city_arr_id']):0;
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id'])>0?json_encode($requireData['city_arr_id']):'';
+
+        $requireData['other'] = isset($requireData['other'])?json_encode($requireData['other']):'';
         $result =  $this->userServiceClient->createUser($requireData);
-//        $this->logger->info("创建用户返回值:", $result);
         return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
     }
 
@@ -76,36 +91,72 @@ class UserController extends AbstractController
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'user_name' => 'required',
-                'email' => 'email',
-                'mobile' =>'required'
+                'user_name' => 'required',//登陆账号
+                'type_id'=> 'required',//用户类型
+                'real_name' => 'required',
+                'mobile' =>'required',
+                'id'=>'required'
             ],
             [
-                'usernuser_name.required' => '用户名不能为空',
-                'email.email' => '请填写一个有效的邮箱',
+                'user_name.required' => '用户名不能为空',
                 'mobile.required' => '手机号码必填',
+                'type_id.required' =>"用户类型不能为空",
+                'real_name.required' =>"姓名不能为空",
+                'id.required' =>"id不能为空",
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        if($requireData['password'] && $requireData['confirm_password']){
-            if($requireData['password'] != $requireData['confirm_password']){
-                return Result::error("两次密码不一致");
-            }
-        }
-
-        $salt = rand(1, 999999);
-        $requireData['salt'] = $salt;
         $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
         $requireData['last_login_ip'] = $loginIp;
 
+        $requireData['administrative_unit_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id'])>0 ?end($requireData['administrative_unit_arr_id']):0;
+        $requireData['administrative_unit_arr_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id'])>0?json_encode($requireData['administrative_unit_arr_id']):'';
+
+        $requireData['address_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id'])>0?end($requireData['address_arr_id']):0;
+        $requireData['address_arr_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id'])>0 ?json_encode($requireData['address_arr_id']):'';
+
+        $requireData['native_place_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id'])>0?end($requireData['native_place_arr_id']):0;
+        $requireData['native_place_arr_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id'])>0?json_encode($requireData['native_place_arr_id']):'';
+
+        $requireData['city_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id'])>0?end($requireData['city_arr_id']):0;
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id'])>0?json_encode($requireData['city_arr_id']):'';
+
+        $requireData['other'] = isset($requireData['other'])?json_encode($requireData['other']):'';
+        $requireData['admin_id'] = Context::get("UserId");
+
         $result =  $this->userServiceClient->updateUser($requireData);
-//        $this->logger->info("修改用户返回值:", $result);
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
 
+    /**
+     * 获取用户信息内容
+     * @return void
+     */
+    public function getUser()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'id'=>'required'
+            ],
+            [
+                'id.required' =>"id不能为空",
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result =  $this->userServiceClient->getUserInfo((int)$requireData['id']);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'],0,[]);
+        }
+        return Result::success($result['data']);
+    }
     /**
      * 获取用户信息
      * @return array|void
@@ -126,7 +177,22 @@ class UserController extends AbstractController
      */
     public function getUserList(){
         $requireData = $this->request->all();
-        $requireData['keyword'] = $requireData['keyword']??'';
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'page' => 'required',
+                'pageSize' => 'required',
+            ],
+            [
+                'page.required' => '页码不能为空',
+                'pageSize.required' => '每页显示条数不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+
         $result =  $this->userServiceClient->getUserList($requireData);
 
         if ($result['code'] != ErrorCode::SUCCESS) {
@@ -138,7 +204,35 @@ class UserController extends AbstractController
      * 删除用户
      * @return array
      */
-    public function delUser()
+//    public function delUser()
+//    {
+//        $requireData = $this->request->all();
+//        $validator = $this->validationFactory->make(
+//            $requireData,
+//            [
+//                'id' => 'required'
+//            ],
+//            [
+//                'id.required' => '用户ID不能为空'
+//            ]
+//        );
+//        if ($validator->fails()){
+//            $errorMessage = $validator->errors()->first();
+//            return Result::error($errorMessage);
+//        }
+//
+//        $result =  $this->userServiceClient->delUser($requireData['id']);
+//        if ($result['code'] != ErrorCode::SUCCESS) {
+//            return Result::error($result['message'],0,[]);
+//        }
+//        return Result::success($result['data']);
+//    }
+
+    /**
+     * 查看角色信息
+     * @return array
+     */
+    public function roleInfo()
     {
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
@@ -147,21 +241,20 @@ class UserController extends AbstractController
                 'id' => 'required'
             ],
             [
-                'id.required' => '用户ID不能为空'
+                'id.required' => '角色ID不能为空'
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-
-        $result =  $this->userServiceClient->delUser($requireData['id']);
+        $result =  $this->userServiceClient->roleInfo($requireData);
         if ($result['code'] != ErrorCode::SUCCESS) {
             return Result::error($result['message'],0,[]);
         }
+        $result['data']['rule'] = isset($result['data']['rule'])?json_decode($result['data']['rule']):[];
         return Result::success($result['data']);
     }
-
     /**
      * 验证用户是否存在
      * @return void
@@ -204,17 +297,22 @@ class UserController extends AbstractController
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'role_name' => 'required'
+                'role_name' => 'required',
+                'rule' => 'required',
+                'remark' => 'required',
             ],
             [
-                'role_name.required' => '角色名称不能为空'
+                'role_name.required' => '角色名称不能为空',
+                'rule.required' => '权限不能为空',
+                'remark.required' => '职能描述不能为空',
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        $requireData['user_id'] =Context::get("UserId");
+        $requireData['user_id'] = Context::get("UserId");
+        $requireData['rule'] = isset($requireData['rule']) && $requireData['rule']?json_encode($requireData['rule']):[];
         $result =  $this->userServiceClient->addRole($requireData);
         if ($result['code'] != ErrorCode::SUCCESS) {
             return Result::error($result['message'],0,[]);
@@ -261,19 +359,23 @@ class UserController extends AbstractController
             $requireData,
             [
                 'role_name' => 'required',
+                'rule' => 'required',
+                'remark' => 'required',
                 'id' => 'required'
             ],
             [
                 'id.required' => '角色ID不能为空',
-                'role_name.required' => '角色名称不能为空'
+                'role_name.required' => '角色名称不能为空',
+                'rule.required' => '权限不能为空',
+                'remark.required' => '职能描述不能为空',
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        $requireData['user_id'] =Context::get("UserId");
-        $requireData['rule'] = $requireData['rule']?json_encode($requireData['rule']):[];
+        $requireData['user_id'] = Context::get("UserId");
+        $requireData['rule'] = isset($requireData['rule']) && $requireData['rule']?json_encode($requireData['rule']):[];
         $result =  $this->userServiceClient->updateRole($requireData);
         if ($result['code'] != ErrorCode::SUCCESS) {
             return Result::error($result['message'],0,[]);
@@ -281,6 +383,7 @@ class UserController extends AbstractController
         return Result::success($result['data']);
     }
 
+
      /**
      * 修改密码
      * @return array
@@ -314,5 +417,32 @@ class UserController extends AbstractController
         return Result::success($result['data']);
     }
 
+     public function upUserStatus()
+     {
+         $requireData = $this->request->all();
+         $validator = $this->validationFactory->make(
+             $requireData,
+             [
+                 'status' => 'required',
+                 'id' => 'required'
+             ],
+             [
+                 'id.required' => 'ID不能为空',
+                 'status.required' => '状态不能为空',
+             ]
+         );
+         if ($validator->fails()){
+             $errorMessage = $validator->errors()->first();
+             return Result::error($errorMessage);
+         }
+         $result =  $this->userServiceClient->upUserStatus($requireData);
+         if ($result['code'] != ErrorCode::SUCCESS) {
+             return Result::error($result['message'],0,[]);
+         }
+         return Result::success($result['data']);
+     }
+
+
+
 
 }

+ 424 - 40
app/Controller/WebsiteController.php

@@ -9,6 +9,8 @@ use Hyperf\HttpServer\Annotation\AutoController;
 use App\Tools\Result;
 use Hyperf\Validation\Contract\ValidatorFactoryInterface;
 use Hyperf\Context\Context;
+use Phper666\JWTAuth\JWT;
+use DateTime;
 /**
  * Class WebsiteController
  * @package App\Controller
@@ -25,6 +27,11 @@ class WebsiteController extends AbstractController
     #[Inject]
     private $websiteServiceClient;
 
+    protected JWT $JWT;
+    public function __construct(Jwt $JWT)
+    {
+        $this->JWT = $JWT;
+    }
     /**
      * 创建站点
      * @return array
@@ -86,6 +93,7 @@ class WebsiteController extends AbstractController
         if($result['data']){
             foreach ($result['data']['rows'] as $k=>$v) {
                 $result['data']['rows'][$k]['city_arr_id'] = $v['city_arr_id']?json_decode($v['city_arr_id']):'';
+                $result['data']['rows'][$k]['website_url'] = $v['website_url']?json_decode($v['website_url']):[];
             }
         }
 
@@ -185,25 +193,40 @@ class WebsiteController extends AbstractController
 
     }
 
+    /**
+     * 添加的时候 选择上级网系
+     * @return array
+     */
     public function getWebsiteColumn()
     {
-        $pid =  (int)$this->request->input("pid",0);
         $result = $this->websiteServiceClient->getWebsiteColumn([]);
         $rep = PublicData::buildMenuTree($result['data']);
         return $rep?Result::success($rep):Result::error("查询失败");
     }
 
     /**
-     * 获取站点列表
+     * 获取网系列表
      * @return void
      */
     public function getWebsiteColumnList()
     {
-        $keyword = $this->request->input("keyWord",'');
-        $page = (int)$this->request->input("page",1);
-        $pageSize = (int)$this->request->input("pageSize",10);
-
-        $result = $this->websiteServiceClient->getWebsiteColumnList($keyword,$page,$pageSize);
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'page' => 'required',
+                'pageSize' => 'required',
+            ],
+            [
+                'page.required' => '页码不能为空',
+                'pageSize.required' => '每页显示条数不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteColumnList($requireData);
         if($result['data']){
             foreach ($result['data']['rows'] as $k=>$v) {
                 $result['data']['rows'][$k]['column_arr_id'] = $v['column_arr_id']?json_decode($v['column_arr_id']):[0];
@@ -212,7 +235,7 @@ class WebsiteController extends AbstractController
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
     /**
-     * 创建栏目
+     * 创建网系
      * @return array
      */
     public function addWebsiteColumn()
@@ -222,32 +245,24 @@ class WebsiteController extends AbstractController
             $requireData,
             [
                 'column_name' => 'required',
-                'column_arr_id' => 'required'
             ],
             [
-                'column_name.required' => '栏目名称不能为空',
-                'column_arr_id.required' => '栏目ID不能为空'
+                'column_name.required' => '网系名称不能为空',
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        if(isset($requireData['column_arr_id']) && is_array($requireData['column_arr_id'])){
-            $requireData['pid'] = end($requireData['column_arr_id']);
-            $requireData['column_arr_id'] = json_encode($requireData['column_arr_id']);
 
-        }else{
-            $column_arr_id= [0];
-            $requireData['column_arr_id'] = json_encode($column_arr_id);
-            $requireData['pid'] = end($column_arr_id);
-        }
+        $requireData['pid'] = isset($requireData['column_arr_id'])?end($requireData['column_arr_id']):'';
+        $requireData['column_arr_id'] = isset($requireData['column_arr_id'])?json_encode($requireData['column_arr_id']):'';
         $result = $this->websiteServiceClient->createWebsiteColumn($requireData);
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
 
     /**
-     * 创建栏目
+     * 更新网系
      * @return array
      */
     public function updateWebsiteColumn()
@@ -257,38 +272,42 @@ class WebsiteController extends AbstractController
             $requireData,
             [
                 'column_name' => 'required',
-                'column_arr_id' => 'required'
             ],
             [
                 'column_name.required' => '栏目名称不能为空',
-                'column_arr_id.required' => '栏目ID不能为空'
             ]
         );
         if ($validator->fails()){
             $errorMessage = $validator->errors()->first();
             return Result::error($errorMessage);
         }
-        if(isset($requireData['column_arr_id']) && is_array($requireData['column_arr_id'])){
-            $requireData['pid'] = end($requireData['column_arr_id']);
-            $requireData['column_arr_id'] = json_encode($requireData['column_arr_id']);
-
-        }else{
-            $column_arr_id= [0];
-            $requireData['column_arr_id'] = json_encode($column_arr_id);
-            $requireData['pid'] = end($column_arr_id);
-        }
+        $requireData['pid'] = isset($requireData['column_arr_id'])?end($requireData['column_arr_id']):'';
+        $requireData['column_arr_id'] = isset($requireData['column_arr_id'])?json_encode($requireData['column_arr_id']):'';
         $result = $this->websiteServiceClient->updateWebsiteColumn($requireData['id'],$requireData);
         return $result?Result::success($result['data']):Result::error($result['message']);
     }
 
     /**
-     * 删除栏目
+     * 删除网系
      * @return array
      */
     public function delWebsiteColumn()
     {
-        $id = (int)$this->request->input("id",'');
-        $result = $this->websiteServiceClient->delWebsiteColumn($id);
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'id' => 'required'
+            ],
+            [
+                'id.required' => '网系ID不能为空'
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->delWebsiteColumn(intval($requireData['id']));
         return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
     }
 
@@ -397,7 +416,6 @@ class WebsiteController extends AbstractController
     public function createWebsiteRoleUser()
     {
         $requireData = $this->request->all();
-
         $validator = $this->validationFactory->make(
             $requireData,
             [
@@ -442,16 +460,316 @@ class WebsiteController extends AbstractController
      */
     public function addWebsiteCategory()
     {
-        return [];
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required',
+                'category_arr_id' => 'required',
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+                'category_arr_id.required' => '网站导航ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->addWebsiteCategory($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
     }
 
+    /**
+     * 删除网站导航
+     * @return void
+     */
+    public function delWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required',
+                'category_id' => 'required',
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+                'category_id.required' => '网站导航ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->delWebsiteCategory($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 获取网站导航
+     * @return void
+     */
+    public function getAdminWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required',
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getAdminWebsiteCategory($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 更新网站导航
+     * @return void
+     */
+    public function upWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required',
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->upWebsiteCategory($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 获取网站与导航
+     * @return array
+     */
+    public function getWebsiteCategoryList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'page' => 'required',
+                'pageSize' => 'required',
+            ],
+            [
+                'page.required' => '当前页码数不能为空',
+                'pageSize.required' => '每页显示条数不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteCategoryList($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 删除网站下面的所有导航
+     * @return void
+     */
+    public function delWebsiteAllCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required'
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->delWebsiteAllCategory($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 查看指定的导航
+     * @return array
+     */
+    public function getWebsiteCategoryOnes()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required',
+                'category_id' => 'required',
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+                'category_id.required' => '网站导航ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteCategoryOnes($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 更新指定的某一个导航
+     * @return array
+     */
+    public function upWebsiteCategoryones()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required',
+                'category_id'=> 'required',
+                'alias'=> 'required',
+                'seo_title'=> 'required',
+                'seo_keywords'=> 'required',
+                'seo_description'=> 'required',
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+                'category_id.required' => '导航ID不能为空',
+                'alias.required' => '名称不能为空',
+                'seo_title.required' => 'seo标题不能为空',
+                'seo_keywords.required' => '关键词不能为空',
+                'seo_description.required' => '网站描述不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->upWebsiteCategoryones($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 站下的所有导航包含子导航
+     * @return array
+     */
+    public function getWebsiteAllCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_id' => 'required'
+            ],
+            [
+                'website_id.required' => '网站ID不能为空',
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteAllCategory($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
     /**
      * 管理后台首页统计
      * @return array
      */
     public function getAdminIndex()
     {
-        return [];
+//        $token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwaHBlcjY2Ni9qd3QiLCJ1aWQiOjMyLCJ1c2VyX25hbWUiOiIxIiwibW9iaWxlIjoiMTU4MDEyNDU3NTUiLCJlbWFpbCI6IjVAcXEuY29tIiwicm9uZ190b2tlbiI6IiIsImxldmVsX2lkIjoxLCJ0eXBlX2lkIjoxLCJqd3Rfc2NlbmUiOiJkZWZhdWx0IiwianRpIjoiZGVmYXVsdF82NzFiNDc3MDcwODI2OC4wOTk4ODA3NyIsImlhdCI6MTcyOTg0MTAwOCwibmJmIjoxNzI5ODQxMDA4LCJleHAiOjE3Mjk4NDQwMDh9.4X-Q-vwPxddX75q6CKtOXqWgtnFAikRwX308T0iDxYE";
+//        $time =  $this->JWT->getTokenDynamicCacheTime($token);
+//        var_dump("有效时间:",$time);
+
+        $typeId = intval(Context::get("TypeId"));
+        var_dump("用户类型:",$typeId);
+        switch ($typeId){
+            case 4:
+                $dates = [];
+                $startDate = (new DateTime())->modify('-29 day'); // 从 29 天前开始(因为我们要 30 天,包括今天的前一天)
+                for ($i = 0; $i < 30; $i++) {
+                    $dates[] = $startDate->format('Y-m-d');
+                    $startDate->modify('+1 day'); // 每天递增一天
+                }
+                $result = $this->websiteServiceClient->getAdminIndex(['type_id'=>$typeId]);
+                $list = [];
+                if($result['data']){
+
+                    $list = PublicData::arrayColumnAsKey($result['data'],'date');
+                    var_dump($list);
+                }
+                $newResult = [];
+                if($dates){
+                    foreach ($dates as $key=>$val){
+                        $newResult[$key]['date'] = $val;
+                        $newResult[$key]['total_count'] = $list[$val]['total_count']??0;
+                    }
+                }
+                //投诉举报列表
+                $res['letterOfComplaintList'] = $newResult;
+                return $result['code']==200?Result::success($res):Result::error($result['message']);
+                break;
+            case 10000:
+
+                $result = $this->websiteServiceClient->getAdminIndex(['type_id'=>$typeId]);
+                if($result){
+                    $dates = [];
+                    $startDate = (new DateTime())->modify('-29 day'); // 从 29 天前开始(因为我们要 30 天,包括今天的前一天)
+                    for ($i = 0; $i < 30; $i++) {
+                        $dates[] = $startDate->format('Y-m-d');
+                        $startDate->modify('+1 day'); // 每天递增一天
+                    }
+                    $list = [];
+                    if($result['data']['monthArticle']){
+                        $list = PublicData::arrayColumnAsKey($result['data']['monthArticle'],'date');
+                    }
+                    $newResult = [];
+                    if($dates){
+                        foreach ($dates as $key=>$val){
+                            $newResult[$key]['date'] = $val;
+                            $newResult[$key]['total_count'] = $list[$val]['total_count']??0;
+                        }
+                    }
+                    //1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员
+                    $userType=[
+                        '1'=>'个人会员',
+                        '2'=>'政务会员',
+                        '3'=>'企业会员',
+                        '4'=>'调研员',
+                        '10000'=>'管理员',
+                        '20000'=>'游客',
+                    ];
+                    if($result['data']['userType']){
+                        foreach ($result['data']['userType'] as $k=>$v){
+                            $result['data']['userType'][$k]['typeName'] = $userType[$v['type_id']];
+                        }
+                    }
+                    $result['data']['monthArticle'] = $newResult;
+                    return Result::success($result['data']);
+
+                }else{
+                    return Result::error($result['message']);
+                }
+
+                return Result::success($result);
+                break;
+        }
     }
 
     /**
@@ -460,7 +778,8 @@ class WebsiteController extends AbstractController
      */
     public function getTemplateClass()
     {
-        $result = $this->websiteServiceClient->getTemplateClass([]);
+        $requireData = $this->request->all();
+        $result = $this->websiteServiceClient->getTemplateClass($requireData);
         return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
     }
 
@@ -560,13 +879,13 @@ class WebsiteController extends AbstractController
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'template_class_id' => 'required',
+//                'template_class_id' => 'required',
                 'page' => 'required',
                 'pageSize' => 'required',
 
             ],
             [
-                'template_class_id.required' => '类型template_class_id不能为空',
+//                'template_class_id.required' => '类型template_class_id不能为空',
                 'page.required' => 'page不能为空',
                 'pageSize.required' => '每页显示条数不能为空',
             ]
@@ -581,6 +900,12 @@ class WebsiteController extends AbstractController
             'pageSize' =>  $requireData['pageSize'],
         ];
         $result = $this->websiteServiceClient->getTemplate($data);
+        var_dump("模板列表:",$result['data']['rows']);
+        if($result['data']['rows']){
+            foreach ($result['data']['rows'] as $key=>$val){
+                $result['data']['rows'][$key]['template_img'] = json_decode($val['template_img'],true);
+            }
+        }
         return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
     }
 
@@ -684,6 +1009,65 @@ class WebsiteController extends AbstractController
         return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
     }
 
+    /**
+     * 搜索网站
+     * @return array
+     */
+    public function websiteList()
+    {
+        $requireData = $this->request->all();
+        $result = $this->websiteServiceClient->websiteList($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
 
+    /**
+     * 检测网站名称是否存在
+     * @return array
+     */
+    public function checkWebsiteName()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_name' => 'required'
+            ],
+            [
+                'website_name.required' => '网站名称不能为空'
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+
+        $result = $this->websiteServiceClient->checkWebsiteName($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
+
+    /**
+     * 检测网站网址是否存在
+     * @return array
+     */
+    public function checkWebsiteUrl()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'website_url' => 'required'
+            ],
+            [
+                'website_url.required' => '网站网址不能为空'
+            ]
+        );
+        if ($validator->fails()){
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+
+        $result = $this->websiteServiceClient->checkWebsiteUrl($requireData);
+        return $result['code']==200?Result::success($result['data']):Result::error($result['message']);
+    }
 
 }

+ 9 - 0
app/JsonRpc/AuthorityService.php

@@ -72,4 +72,13 @@ class AuthorityService extends AbstractServiceClient implements AuthorityService
     {
         return $this->__request(__FUNCTION__, $data);
     }
+
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function getAllMenuList(array $data )
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
 }

+ 6 - 0
app/JsonRpc/AuthorityServiceInterface.php

@@ -44,4 +44,10 @@ interface AuthorityServiceInterface
      * @return array
      */
     public function getRecursionMenu(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getAllMenuList(array $data);
 }

+ 10 - 0
app/JsonRpc/NewsService.php

@@ -116,4 +116,14 @@ class NewsService extends AbstractServiceClient implements NewsServiceInterface
     {
         return $this->__request(__FUNCTION__, $data);
     }
+
+    /**
+     * 更新资讯状态
+     * @param array $data
+     * @return mixed
+     */
+    public function upArticleStatus(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
 }

+ 6 - 0
app/JsonRpc/NewsServiceInterface.php

@@ -59,4 +59,10 @@ interface NewsServiceInterface
      */
     public function getCategoryInfo(array $data);
 
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upArticleStatus(array $data);
+
 }

+ 9 - 0
app/JsonRpc/UserService.php

@@ -141,6 +141,7 @@ class UserService extends AbstractServiceClient implements UserServiceInterface
         return $this->__request(__FUNCTION__, $data);
     }
 
+
      /**
      * @param array $data
      * @return array|mixed
@@ -148,4 +149,12 @@ class UserService extends AbstractServiceClient implements UserServiceInterface
     public function changePassword(array $data){
         return $this->__request(__FUNCTION__, $data);
     }
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function upUserStatus(array $data){
+
+        return $this->__request(__FUNCTION__, $data);
+    }
 }

+ 4 - 0
app/JsonRpc/UserServiceInterface.php

@@ -103,5 +103,9 @@ interface UserServiceInterface
      * @param array $data
      * @return mixed
      */
+
     public function changePassword(array $data);
+
+    public function upUserStatus(array $data);
+
 }

+ 111 - 2
app/JsonRpc/WebsiteService.php

@@ -82,9 +82,10 @@ class WebsiteService extends AbstractServiceClient implements WebsiteServiceInte
      * @param int $pageSize
      * @return mixed
      */
-    public function getWebsiteColumnList(string $keyword, int $page, int $pageSize)
+    public function getWebsiteColumnList(array $data)
     {
-        return $this->__request(__FUNCTION__, compact('keyword','page','pageSize'));
+//        return $this->__request(__FUNCTION__, compact('keyword','page','pageSize'));
+        return $this->__request(__FUNCTION__, $data);
     }
 
     /**
@@ -289,4 +290,112 @@ class WebsiteService extends AbstractServiceClient implements WebsiteServiceInte
     {
         return $this->__request(__FUNCTION__, $data);
     }
+
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function websiteList(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addWebsiteCategory(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delWebsiteCategory(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delWebsiteAllCategory(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteCategoryOnes(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upWebsiteCategoryones(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteAllCategory(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getAdminWebsiteCategory(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upWebsiteCategory(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteCategoryList(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkWebsiteName(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkWebsiteUrl(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
 }

+ 74 - 1
app/JsonRpc/WebsiteServiceInterface.php

@@ -46,7 +46,7 @@ interface WebsiteServiceInterface
      * @param int $page
      * @param int $pageSize
      */
-    public function getWebsiteColumnList(string $keyword,int $page,int $pageSize);
+    public function getWebsiteColumnList(array $data);
 
     /**
      * @param array $data
@@ -184,4 +184,77 @@ interface WebsiteServiceInterface
      * @return mixed
      */
     public function delTemplate(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function websiteList(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addWebsiteCategory(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delWebsiteCategory(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getAdminWebsiteCategory(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upWebsiteCategory(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteCategoryList(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delWebsiteAllCategory(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteCategoryOnes(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upWebsiteCategoryones(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteAllCategory(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkWebsiteName(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkWebsiteUrl(array $data);
+
 }

+ 11 - 3
app/Middleware/Auth/FooMiddleware.php

@@ -36,14 +36,22 @@ class FooMiddleware implements MiddlewareInterface
     {
 
         $header = $request->getHeaders();
-//        if($this->request->getUri()->getPath()=="/api/login" || $this->request->getUri()->getPath()=="/verifyCode" || $this->request->getUri()->getPath()=="/index"){
-//            return $handler->handle($request);
-//        }
         try {
             if($header &&  isset($header['token']) && $header['token'][0]!='null' && isset($header['token'][0])){
                 $ver = $this->JWT->getClaimsByToken($header['token'][0]);
+                $tokenTime =  $this->JWT->getTokenDynamicCacheTime($header['token'][0]);
+                if($tokenTime==0){
+                   return $this->response->json(
+                       [
+                           'code' => -1,
+                           'data' => [],
+                           'message' => 'token无效,请重新登录',
+                       ]
+                   );
+                }
 //                var_dump("中间件:",$ver);
                 Context::set("UserId",$ver['uid']);
+                Context::set("TypeId",$ver['type_id']);
                 if ($ver) {
                     return $handler->handle($request);
                 }

+ 10 - 2
app/Middleware/Auth/WebMiddleware.php

@@ -43,13 +43,21 @@ class WebMiddleware implements MiddlewareInterface
         $header = $request->getHeaders();
         try {
             if($header &&  isset($header['origin']) && $header['origin'][0]!='null' && isset($header['origin'][0])){
-
                 $origin = $header['origin'][0];
                 $logindevice = explode("//", $origin);
                 $data = [
                     'website_url'=>$logindevice[1]
                 ];
                 $result = $this->websiteServiceClient->getWebsiteId($data);
+                if(!isset($result['data']['id']) || !$result['data']['id']){
+                    return $this->response->json(
+                        [
+                            'code' => -1,
+                            'data' => [],
+                            'message' => '网站不存在',
+                        ]
+                    );
+                }
                 var_dump("获取站点id:",$result);
                 Context::set("SiteId",$result['data']['id']);
                 if ($result) {
@@ -71,7 +79,7 @@ class WebMiddleware implements MiddlewareInterface
                 [
                     'code' => $e->getCode(),
                     'data' => [],
-                    'message' => $e->getMessage(),
+                    'message' => '网址必填:'.$e->getMessage(),
                 ]
             );
         }

+ 0 - 11
app/Tools/CommonService.php

@@ -16,17 +16,6 @@ class CommonService
     public static function uploadFile(UploadedFile $uploadedFile, array $acceptExt, string $fileType = 'image')
     {
         $ext = $uploadedFile->getExtension();
-//        var_dump($uploadedFile->getFilename());
-//        var_dump($uploadedFile->getPath());
-//        var_dump($uploadedFile->getFilename());
-//        var_dump($uploadedFile->getExtension());
-//        var_dump($uploadedFile->getBasename());
-//        var_dump($uploadedFile->getPathname());
-//        var_dump($uploadedFile->getPerms());
-//        var_dump($uploadedFile->getRealPath());
-//        var_dump($uploadedFile->getFileInfo());
-//        var_dump($uploadedFile->getPathInfo());
-//        var_dump($uploadedFile->getClientOriginalName());
         if (!in_array($ext, $acceptExt)) {
             return Result::error('文件名后缀不允许');
         }

+ 19 - 0
app/Tools/PublicData.php

@@ -28,6 +28,25 @@ class PublicData
         return $tree;
     }
 
+    /**
+     * 把数组里面的某一个字段作为key
+     * @param $array
+     * @param $column
+     * @return array
+     */
+    public static  function arrayColumnAsKey($array, $column) {
+        $result = [];
+        foreach ($array as $item) {
+            if (isset($item[$column])) {
+                $result[$item[$column]] = $item;
+            } else {
+                // 如果字段不存在,你可以选择跳过、使用默认值或抛出异常
+                // 这里我们选择跳过
+                continue;
+            }
+        }
+        return $result;
+    }
     /**
      * 计算两个时间差的天数
      * @param $sTime

+ 9 - 0
config/api/authority.php

@@ -7,11 +7,20 @@ use Hyperf\HttpServer\Router\Router;
 use App\Middleware\Auth\FooMiddleware;
 Router::addGroup(
     '/authority', function () {
+        //获取菜单列表
         Router::get('/getMenuList', [AuthorityController::class, 'getMenuList']);
+        //删除菜单
         Router::post('/delMenu', [AuthorityController::class, 'delMenu']);
+        //添加菜单
         Router::post('/addMenu', [AuthorityController::class, 'addMenu']);
+        //获取菜单信息
+        Router::get('/getMenuInfo', [AuthorityController::class, 'getMenuInfo']);
+        //更新菜单
         Router::post('/updateMenu', [AuthorityController::class, 'updateMenu']);
+        //用户拥有的菜单
         Router::get('/getRecursionMenu', [AuthorityController::class, 'getRecursionMenu']);
+        //获取所有菜单列表
+        Router::get('/getAllMenuList', [AuthorityController::class, 'getAllMenuList']);
     },
     ['middleware' => [FooMiddleware::class]]
 );

+ 11 - 0
config/api/chat.php

@@ -1,5 +1,16 @@
 <?php
 
 declare(strict_types=1);
+use App\Controller\ChatController;
 use Hyperf\HttpServer\Router\Router;
+use App\Middleware\Auth\FooMiddleware;
+Router::addGroup(
+    '/chat', function () {
+            Router::get('/addContactApply', [ChatController::class, 'addContactApply']);
+            Router::post('/updateContactApply', [ChatController::class, 'updateContactApply']);
+            Router::get('/getTalkSessionList', [ChatController::class, 'getTalkSessionList']);
+            Router::post('/addTalkGroup', [ChatController::class, 'addTalkGroup']);
+        },
+       ['middleware' => [FooMiddleware::class]]
+);
 

+ 8 - 1
config/api/news.php

@@ -9,6 +9,7 @@ Router::addGroup(
     '/news', function () {
         //获取导航池列表
         Router::get('/getCategoryList', [NewsController::class, 'getCategoryList']);
+        //导航池 筛选 搜索
         Router::get('/categoryList', [NewsController::class, 'categoryList']);
         //添加导航池
         Router::post('/addCategory', [NewsController::class, 'addCategory']);
@@ -16,11 +17,17 @@ Router::addGroup(
         Router::post('/updateCategory', [NewsController::class, 'updateCategory']);
         //删除导航池
         Router::post('/delCategory', [NewsController::class, 'delCategory']);
-
+        //获取资讯列表
         Router::get('/getArticleList', [NewsController::class, 'getArticleList']);
+        //添加资讯
         Router::post('/addArticle', [NewsController::class, 'addArticle']);
+        //修改资讯
         Router::post('/updateArticle', [NewsController::class, 'updateArticle']);
+        //删除资讯
         Router::post('/delArticle', [NewsController::class, 'delArticle']);
+        //更新资讯状态
+        Router::post('/upArticleStatus', [NewsController::class, 'upArticleStatus']);
+        //查看资讯
         Router::get('/getArticleInfo', [NewsController::class, 'getArticleInfo']);
         //获取导航池信息
         Router::get('/getCategoryInfo', [NewsController::class, 'getCategoryInfo']);

+ 16 - 5
config/api/public.php

@@ -16,14 +16,25 @@ Router::addGroup(
         Router::post('/delUserLevel', [PublicController::class, 'delUserLevel']);
         Router::post('/updateUserLevel', [PublicController::class, 'updateUserLevel']);
         Router::get('/getCityList', [PublicController::class, 'getCityList']);
+        //添加投诉举报
         Router::post('/addComplaint', [PublicController::class, 'addComplaint']);
-        Router::post('/upComplaint', [PublicController::class, 'upComplaint']);
-        Router::addRoute(['GET', 'POST'], '/getComplaint', [PublicController::class, 'getComplaint']);
-        Router::addRoute(['GET', 'POST'], '/getLetterOfComplaintInfo', [PublicController::class, 'getLetterOfComplaintInfo']);
+
+
+        //修改投诉举报
+        Router::addRoute(['GET', 'POST'],'/upComplaint', [PublicController::class, 'upComplaint']);
+        //投诉举报列表
+        Router::addRoute(['GET', 'POST'],'/getComplaint', [PublicController::class, 'getComplaint']);
+        //查看投诉举报信息
+        Router::addRoute(['GET', 'POST'],'/getLetterOfComplaintInfo', [PublicController::class, 'getLetterOfComplaintInfo']);
+        //删除投诉举报信息
+
         Router::post('/delLetterOfComplaint', [PublicController::class, 'delLetterOfComplaint']);
+        //获取类型
         Router::get('/getLetterType', [PublicController::class, 'getLetterType']);
-        Router::post('/downloadFile', [PublicController::class, 'downloadFile']);
-        Router::post('/checkMeasure', [PublicController::class, 'checkMeasure']);
+        //下载文件
+        Router::addRoute(['GET', 'POST'],'/downloadFile', [PublicController::class, 'downloadFile']);
+        //检测是否已经被审核
+        Router::addRoute(['GET', 'POST'],'/checkMeasure', [PublicController::class, 'checkMeasure']);
         //获取职能部门
         Router::get('/getDepartment', [PublicController::class, 'getDepartment']);
 

+ 12 - 0
config/api/user.php

@@ -9,15 +9,27 @@ Router::addGroup(
     '/user', function () {
         Router::post('/createUser', [UserController::class, 'createUser']);
         Router::post('/updateUser', [UserController::class, 'updateUser']);
+        //通过token获取用户信息
         Router::get('/getUserInfo', [UserController::class, 'getUserInfo']);
+        //获取用户信息
+        Router::get('/getUser', [UserController::class, 'getUser']);
         Router::get('/getUserList', [UserController::class, 'getUserList']);
         Router::post('/delUser', [UserController::class, 'delUser']);
         Router::post('/verifyUserInfo', [UserController::class, 'verifyUserInfo']);
+        //角色列表
         Router::get('/roleList', [UserController::class, 'roleList']);
+        //查看角色
+        Router::get('/roleInfo', [UserController::class, 'roleInfo']);
+        //添加角色
         Router::post('/addRole', [UserController::class, 'addRole']);
+        //删除角色
         Router::post('/delRole', [UserController::class, 'delRole']);
+        //更新角色
         Router::post('/updateRole', [UserController::class, 'updateRole']);
         Router::post('/changePassword', [UserController::class, 'changePassword']);
+        //修改用户状态
+        Router::post('/upUserStatus', [UserController::class, 'upUserStatus']);
+
     },
     ['middleware' => [FooMiddleware::class]]
 );

+ 48 - 14
config/api/website.php

@@ -17,15 +17,15 @@ Router::addGroup(
         Router::post('/delWebsite', [WebsiteController::class, 'delWebsite']);
         //获取网站信息
         Router::get('/getWebsiteInfo', [WebsiteController::class, 'getWebsiteInfo']);
-        //获取网站导航
+        //获取网站 网系
         Router::get('/getWebsiteColumn', [WebsiteController::class, 'getWebsiteColumn']);
-        //获取网站导航列表
+        //获取网站 网系
         Router::get('/getWebsiteColumnList', [WebsiteController::class, 'getWebsiteColumnList']);
-        //创建网站导航
+        //创建网站网系
         Router::post('/addWebsiteColumn', [WebsiteController::class, 'addWebsiteColumn']);
-        //更新网站导航
+        //更新网站网系
         Router::post('/updateWebsiteColumn', [WebsiteController::class, 'updateWebsiteColumn']);
-        //删除网站导航
+        //删除网站网系
         Router::post('/delWebsiteColumn', [WebsiteController::class, 'delWebsiteColumn']);
 
         Router::get('/getWebsiteRoleList', [WebsiteController::class, 'getWebsiteRoleList']);
@@ -34,17 +34,51 @@ Router::addGroup(
         Router::get('/getWebsiteRoleUserList', [WebsiteController::class, 'getWebsiteRoleUserList']);
         Router::post('/createWebsiteRoleUser', [WebsiteController::class, 'createWebsiteRoleUser']);
         Router::post('/delWebsiteRoleUser', [WebsiteController::class, 'delWebsiteRoleUser']);
-
-        Router::get('/getTemplateClass', [WebsiteController::class, 'getTemplateClass']); //获取模板分类
-        Router::post('/addTemplateClass', [WebsiteController::class, 'addTemplateClass']); //添加模板分类
-        Router::post('/upTemplateClass', [WebsiteController::class, 'upTemplateClass']); //更新模板分类
-        Router::post('/delTemplateClass', [WebsiteController::class, 'delTemplateClass']); //删除模板分类
-        Router::get('/getTemplate', [WebsiteController::class, 'getTemplate']); //获取分类下模板列表
-        Router::post('/addTemplate', [WebsiteController::class, 'addTemplate']); //获取分类下模板列表
-        Router::post('/upTemplate', [WebsiteController::class, 'upTemplate']); //更新分类下模板列表
-        Router::post('/delTemplate', [WebsiteController::class, 'delTemplate']); //删除分类下模板列表
+        //获取模板分类
+        Router::get('/getTemplateClass', [WebsiteController::class, 'getTemplateClass']);
+        //添加模板分类
+        Router::post('/addTemplateClass', [WebsiteController::class, 'addTemplateClass']);
+        //更新模板分类
+        Router::post('/upTemplateClass', [WebsiteController::class, 'upTemplateClass']);
+        //删除模板分类
+        Router::post('/delTemplateClass', [WebsiteController::class, 'delTemplateClass']);
+        //获取分类下模板列表
+        Router::get('/getTemplate', [WebsiteController::class, 'getTemplate']);
+        //获取分类下模板列表
+        Router::post('/addTemplate', [WebsiteController::class, 'addTemplate']);
+        //更新分类下模板列表
+        Router::post('/upTemplate', [WebsiteController::class, 'upTemplate']);
+        //删除分类下模板列表
+        Router::post('/delTemplate', [WebsiteController::class, 'delTemplate']);
         //添加网站导航
         Router::post('/addWebsiteCategory', [WebsiteController::class, 'addWebsiteCategory']);
+        //删除网站导航
+        Router::post('/delWebsiteCategory', [WebsiteController::class, 'delWebsiteCategory']);
+        //获取网站导航
+        Router::get('/getAdminWebsiteCategory', [WebsiteController::class, 'getAdminWebsiteCategory']);
+        //更新网站导航
+        Router::post('/upWebsiteCategory', [WebsiteController::class, 'upWebsiteCategory']);
+        //网站导航
+        Router::get('/getWebsiteCategoryList', [WebsiteController::class, 'getWebsiteCategoryList']);
+        //删除网站所有的导航
+        Router::post('/delWebsiteAllCategory', [WebsiteController::class, 'delWebsiteAllCategory']);
+        //查看指定的导航
+        Router::get('/getWebsiteCategoryOnes', [WebsiteController::class, 'getWebsiteCategoryOnes']);
+        //更新指定的某一个导航
+        Router::post('/upWebsiteCategoryones', [WebsiteController::class, 'upWebsiteCategoryones']);
+        //网站下的所有导航包含子导航
+        Router::get('/getWebsiteAllCategory', [WebsiteController::class, 'getWebsiteAllCategory']);
+        //管理后台数据统计
+        Router::get('/getAdminIndex', [WebsiteController::class, 'getAdminIndex']);
+
+
+
+        //搜索网站列表
+        Router::get('/websiteList', [WebsiteController::class, 'websiteList']);
+        //检测网站名称是否存在
+        Router::post('/checkWebsiteName', [WebsiteController::class, 'checkWebsiteName']);
+        //检测域名是否被重复解析
+        Router::post('/checkWebsiteUrl', [WebsiteController::class, 'checkWebsiteUrl']);
 
 
     },

+ 4 - 2
config/autoload/jwt.php

@@ -47,7 +47,7 @@ return [
 //        'passphrase' => env('JWT_PASSPHRASE'),
     ],
 
-    'ttl' => env('JWT_TTL', 86400*30), // token过期时间,单位为秒
+    'ttl' => env('JWT_TTL', 300), // token过期时间,单位为秒
 
     /**
      * 支持的对称算法:HS256、HS384、HS512
@@ -84,7 +84,9 @@ return [
      * 什么叫根数据,这个配置的一维数组,除了scene都叫根配置
      */
     'scene' => [
-        'default' => [],
+        'default' => [
+            'ttl' => 86400,
+        ],
         'application' => [
             'secret' => 'application', // 非对称加密使用字符串,请使用自己加密的字符串
             'login_type' => 'sso', //  登录方式,sso为单点登录,mpop为多点登录

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
runtime/container/classes.cache


+ 169 - 0
runtime/container/proxy/App_Controller_AdController.proxy.php

@@ -0,0 +1,169 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\AdServiceInterface;
+use App\Tools\PublicData;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use App\Constants\ErrorCode;
+use Hyperf\Logger;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use Hyperf\Context\Context;
+/**
+ * Class AdController
+ * @package App\Controller
+ */
+//#[AutoController]
+class AdController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var AdServiceInterface
+     */
+    #[Inject]
+    private $adServiceClient;
+    public function createAd()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required', 'website_id' => 'required', 'price' => 'required'], ['name.required' => '名称不能为空', 'website_id.required' => '站点不能为空', 'price.required' => '价格不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->adServiceClient->createAd($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * @return array|void
+     */
+    public function getAdInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $id = (int) $requireData['id'];
+        $result = $this->adServiceClient->getAdInfo($id);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0);
+        }
+        return Result::success($result['data']);
+    }
+    public function getAdList()
+    {
+        $requireData = $this->request->all();
+        $nowTime = date("Y-m-d H:i:s");
+        $result = $this->adServiceClient->getAdList($requireData);
+        if ($result['data']) {
+            $typeList = ['1' => '文字', '2' => '图文'];
+            $statusName = ['1' => '通过', '2' => '待审'];
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['type_name'] = $typeList[$v['typeid']];
+                $result['data']['rows'][$k]['status_name'] = $statusName[$v['status']];
+                $result['data']['rows'][$k]['day'] = PublicData::residueDay(date("Y-m-d H:i:s"), $v['totime']);
+                if ($nowTime < $v['fromtime']) {
+                    $result['data']['rows'][$k]['runing_name'] = '未开始';
+                } else {
+                    if ($nowTime > $v['totime']) {
+                        $result['data']['rows'][$k]['runing_name'] = '已过期';
+                    } else {
+                        $result['data']['rows'][$k]['runing_name'] = '投放中';
+                    }
+                }
+            }
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    public function updateAd()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required', 'status' => 'required'], ['name.required' => '名称不能为空', 'status.required' => '状态不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData = $this->request->all();
+        $result = $this->adServiceClient->updateAd($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    public function delAd()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->adServiceClient->delAd($requireData);
+        var_dump($result);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取广告位列表
+     * @return array
+     */
+    public function getAdPlaceList()
+    {
+        $requireData = $this->request->all();
+        var_dump($requireData);
+        $result = $this->adServiceClient->getAdPlaceList($requireData);
+        if ($result['data']) {
+            $typeList = ['1' => '文字', '2' => '图文'];
+            $statusName = ['1' => '通过', '2' => '待审'];
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['type_name'] = $typeList[$v['typeid']];
+                $result['data']['rows'][$k]['status_name'] = $statusName[$v['status']];
+            }
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    public function createAdPlace()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required', 'website_id' => 'required', 'price' => 'required'], ['name.required' => '名称不能为空', 'website_id.required' => '站点不能为空', 'price.required' => '价格不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->adServiceClient->createAdPlace($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    public function updateAdPlace()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'name' => 'required', 'website_id' => 'required', 'price' => 'required'], ['id.required' => 'id不能为空', 'name.required' => '名称不能为空', 'website_id.required' => '站点不能为空', 'price.required' => '价格不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->adServiceClient->updateAdPlace($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    public function delAdPlace()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->adServiceClient->delAdPlace($requireData);
+        var_dump($result);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+}

+ 139 - 0
runtime/container/proxy/App_Controller_AuthorityController.proxy.php

@@ -0,0 +1,139 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\AuthorityServiceInterface;
+use App\Tools\PublicData;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use App\Constants\ErrorCode;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use Hyperf\Context\Context;
+/**
+ * Class AuthorityController
+ * @package App\Controller
+ */
+//#[AutoController]
+class AuthorityController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var AuthorityServiceInterface
+     */
+    #[Inject]
+    private $authorityServiceClient;
+    /**
+     * 获取菜单列表
+     * @return array
+     */
+    public function getMenuList()
+    {
+        $result = $this->authorityServiceClient->getMenuList([]);
+        $result = PublicData::buildMenuTree($result['data']);
+        return $result ? Result::success($result) : Result::error('查询失败');
+    }
+    /**
+     * 删除菜单
+     * @return array
+     */
+    public function delMenu()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => '菜单id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $getData = ['id' => $requireData['id']];
+        $result = $this->authorityServiceClient->getMenuList($getData);
+        //        var_dump("菜单返回数据:",$result);
+        if (count($result['data']) > 0) {
+            return Result::error("有子菜单不能删除");
+        }
+        $data = ['id' => $requireData['id']];
+        return $this->authorityServiceClient->delMenu($data);
+    }
+    /**
+     * 添加菜单
+     * @return array|void
+     */
+    public function addMenu()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['label' => 'required'], ['label.required' => '菜单名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['pid'] = isset($requireData['pid_arr']) ? end($requireData['pid_arr']) : '';
+        $requireData['pid_arr'] = isset($requireData['pid_arr']) ? json_encode($requireData['pid_arr']) : '';
+        $result = $this->authorityServiceClient->addMenu($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 查看菜单信息
+     * @return array
+     */
+    public function getMenuInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->authorityServiceClient->getMenuInfo($requireData);
+        $result['data']['pid_arr'] = isset($result['data']['pid_arr']) && $result['data']['pid_arr'] ? json_decode($result['data']['pid_arr']) : [];
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 修改菜单
+     * @return array|void
+     */
+    public function updateMenu()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'label' => 'required'], ['id.required' => 'id不能为空', 'label.required' => '菜单名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['pid'] = isset($requireData['pid_arr']) ? end($requireData['pid_arr']) : '';
+        $requireData['pid_arr'] = isset($requireData['pid_arr']) ? json_encode($requireData['pid_arr']) : '';
+        $result = $this->authorityServiceClient->updateMenu($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 菜单递归查询处理
+     * @return void
+     */
+    public function getRecursionMenu()
+    {
+        $reqData = ['user_id' => Context::get("UserId")];
+        $result = $this->authorityServiceClient->getRecursionMenu($reqData);
+        $rep = PublicData::buildMenuTree($result['data']);
+        return $rep ? Result::success($rep) : Result::error("查询失败");
+    }
+    /**
+     * 查询所有的菜单
+     * @return array
+     */
+    public function getAllMenuList()
+    {
+        $result = $this->authorityServiceClient->getAllMenuList([]);
+        $rep = PublicData::buildMenuTree($result['data']);
+        return $rep ? Result::success($rep) : Result::error("查询失败");
+    }
+}

+ 222 - 0
runtime/container/proxy/App_Controller_ChatController.proxy.php

@@ -0,0 +1,222 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\ChatServiceInterface;
+use App\Tools\PublicData;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use App\Amqp\Producer\DemoProducer;
+use Hyperf\Context\ApplicationContext;
+use App\Amqp\Producer;
+use Hyperf\Snowflake\IdGeneratorInterface;
+use PHPStan\Type\Accessory\OversizedArrayType;
+use function Hyperf\Support\env;
+use Hyperf\Context\Context;
+/**
+ *
+ * Class ChatController
+ * @package App\Controller
+ */
+//#[AutoController]
+class ChatController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var ChatServiceInterface
+     */
+    #[Inject]
+    private $chatServiceClient;
+    /**
+     * 申请添加好友
+     * @return array
+     */
+    public function addContactApply()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required'], ['friend_id.required' => '好友ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        var_dump("用户id:", $requireData);
+        $result = $this->chatServiceClient->addContactApply($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取我的好友申请列表
+     * @return array
+     */
+    public function getContactApplyList()
+    {
+        $requireData = [];
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->getContactApplyList($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 好有审核通过或拒绝
+     * @return void
+     */
+    public function updateContactApply()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required', 'type' => 'required'], ['friend_id.required' => '好友ID不能为空', 'type.required' => '操作状态不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        //type==1 同意 type==2 拒绝
+        $result = $this->chatServiceClient->updateContactApply($requireData);
+        if ($requireData['type'] == 1) {
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除好友
+     * @return array
+     */
+    public function delContact()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required'], ['friend_id.required' => '好友ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->delContact($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取好友列表
+     * @return array
+     */
+    public function getContactList()
+    {
+        $requireData = $this->request->all();
+        $requireData['user_id'] = Context::get("UserId");
+        $requireData['keyWord'] = $this->request->input('keyWord', '');
+        $result = $this->chatServiceClient->getContactList($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取会话列表
+     * @return array
+     */
+    public function getTalkSessionList()
+    {
+        $requireData = $this->request->all();
+        $requireData['user_id'] = Context::get("UserId");
+        var_dump("会话列表:", $requireData);
+        $result = $this->chatServiceClient->getTalkSessionList($requireData);
+        var_dump($result);
+        if ($result['data']['row']) {
+            foreach ($result['data']['row'] as $k => $v) {
+                $result['data']['row'][$k]['messages'] = [];
+            }
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 创建用户群
+     * @return array
+     */
+    public function addTalkGroup()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['group_name' => 'required', 'user_id_arr' => 'required'], ['group_name.required' => '群名称不能为空', 'user_id_arr.required' => '好友ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $requireData['user_id_arr'] = $requireData['user_id_arr'];
+        var_dump($requireData);
+        $result = $this->chatServiceClient->addTalkGroup($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 会话详情
+     * @return void
+     */
+    public function getTalkRecordsList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['session_id' => 'required', 'talk_type' => 'required'], ['session_id.required' => '会话ID不能为空', 'talk_type.required' => '会话类型不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['page'] = $requireData['page'] ?? 1;
+        $requireData['pageSize'] = $requireData['pageSize'] ?? 30;
+        $result = $this->chatServiceClient->getTalkRecordsList($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 添加聊天
+     * @return void
+     */
+    public function addTalkRecords()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['type' => 'required', 'content' => 'required', 'receiver' => 'required'], ['type.required' => '消息类型不能为空', 'content.required' => '内容不能为空', 'receiver.required' => '会话信息不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->addTalkRecords($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取openId
+     * @return array|void
+     */
+    public function wechatOpenInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['code' => 'required'], ['code.required' => 'code不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $url = env("WECHAT") . "sns/jscode2session?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&js_code=" . $requireData['code'] . "&grant_type=authorization_code";
+        $result = PublicData::http_get($url);
+        $resultData = json_decode($result, true);
+        if (isset($resultData['errcode'])) {
+            return Result::error($resultData['errmsg']);
+        }
+        return Result::success($resultData);
+    }
+    /**
+     * 获取 access_token
+     * @return array
+     */
+    public function getAccessToken()
+    {
+        $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
+        $result = PublicData::http_get($url);
+        $resultData = json_decode($result, true);
+        var_dump($url, $resultData);
+        if (isset($resultData['errcode'])) {
+            return Result::error($resultData['errmsg']);
+        }
+        return Result::success($resultData);
+    }
+}

+ 58 - 0
runtime/container/proxy/App_Controller_IndexController.proxy.php

@@ -0,0 +1,58 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\Tools\CommonService;
+use App\Tools\PublicData;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Contract\RequestInterface;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use App\Request\FooRequest;
+use App\Request\SceneRequest;
+use App\Tools\Result;
+use ZipArchive;
+class IndexController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    public function index(RequestInterface $request)
+    {
+        $validator = $this->validationFactory->make($request->all(), ['foo' => 'required', 'bar' => 'required'], ['foo.required' => 'foo必填', 'bar.required' => 'bar必填']);
+        if ($validator->fails()) {
+            // Handle exception
+            $errorMessage = $validator->errors()->first();
+            var_dump($errorMessage);
+        }
+    }
+    public function verifyCode()
+    {
+        $comm = new CommonService();
+        $ip = $comm->userIp();
+        $redis = $this->container->get(\Hyperf\Redis\Redis::class);
+        $config = new \EasySwoole\VerifyCode\Config();
+        $code = new \EasySwoole\VerifyCode\VerifyCode($config);
+        $img_code = '';
+        $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+        $charLength = strlen($characters);
+        for ($i = 0; $i < 4; $i++) {
+            $img_code .= $characters[rand(0, $charLength - 1)];
+        }
+        //重写验证码
+        $result = $code->DrawCode((string) $img_code);
+        $img_code = $result->getImageCode();
+        //写入缓存 用于其他方法验证 并且设置过期时间
+        $redis->set('code' . $ip, $img_code, 60000);
+        return $result ? Result::success($result->getImageBase64()) : Result::error('失败');
+        //        return $result->getImageBase64();
+    }
+}

+ 93 - 0
runtime/container/proxy/App_Controller_LinkController.proxy.php

@@ -0,0 +1,93 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\LinkServiceInterface;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use Hyperf\Context\Context;
+use Hyperf\Logger;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+/**
+ * Class LinkController
+ * @package App\Controller
+ */
+//#[AutoController]
+class LinkController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var LinkServiceInterface
+     */
+    #[Inject]
+    private $linkServiceClient;
+    /**
+     * 友情链接列表
+     * @return array
+     */
+    public function getLinkList()
+    {
+        $requireData = $this->request->all();
+        $result = $this->linkServiceClient->getLinkList($requireData);
+        if ($result['data']) {
+            $statusList = ['1' => "通过", '2' => "待审"];
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['status_name'] = $statusList[$v['status']];
+            }
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 创建友情链接
+     * @return array
+     */
+    public function createLink()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['title' => 'required'], ['title.required' => '名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->linkServiceClient->createLink($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新友情链接
+     * @return array
+     */
+    public function updateLink()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'title' => 'required', 'url' => 'required'], ['id.required' => 'id不能为空', 'title.required' => '名称不能为空', 'url.required' => 'url不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData = $this->request->all();
+        $result = $this->linkServiceClient->updateLink($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除友情链接
+     * @return array
+     */
+    public function delLink()
+    {
+        $requireData = $this->request->all();
+        $result = $this->linkServiceClient->delLink($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+}

+ 197 - 0
runtime/container/proxy/App_Controller_LoginController.proxy.php

@@ -0,0 +1,197 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use Phper666\JWTAuth\JWT;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use App\Tools\Result;
+use App\JsonRpc\UserServiceInterface;
+use App\Tools\CommonService;
+use function Hyperf\Support\env;
+use App\Tools\PublicData;
+use Hyperf\Context\Context;
+/**
+ * @AutoController()
+ */
+class LoginController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var UserServiceInterface
+     */
+    #[Inject]
+    private $userServiceClient;
+    public function login(Jwt $jwt)
+    {
+        $reqData = $this->request->all();
+        $validator = $this->validationFactory->make($reqData, ['username' => 'required', 'password' => 'required', 'type' => 'required'], ['username.required' => '用户名不能为空', 'password.required' => '密码不能为空', 'type.required' => '登录方式必填']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $comm = new CommonService();
+        $ip = $comm->userIp();
+        $redis = $this->container->get(\Hyperf\Redis\Redis::class);
+        $code = $redis->get('code' . $ip);
+        if (empty($code)) {
+            return Result::error("验证码已过期");
+        }
+        var_dump("验证码:", $code);
+        if (strtolower($code) != $reqData['captcha']) {
+            return Result::error("验证码错误");
+        }
+        $where = [];
+        if ($reqData['type'] == 1) {
+            //密码登录
+            $where = ['user_name' => $reqData['username']];
+        }
+        //        $this->logger->info("验证之前");
+        $userInfos = $this->userServiceClient->verifyUserInfo($where);
+        if ($userInfos['code'] == 0) {
+            return Result::error("用户名或密码错误");
+        }
+        var_dump("用户信息:", $userInfos);
+        //        $this->logger->info("验证用户返回值:", $userInfos);
+        if (md5(md5($reqData['password']) . $userInfos['data']['salt']) != $userInfos['data']['password']) {
+            return Result::error("用户名或密码错误");
+        }
+        $userData = [
+            'uid' => $userInfos['data']['id'],
+            // 如果使用单点登录,必须存在配置文件中的sso_key的值,一般设置为用户的id
+            'user_name' => $userInfos['data']['user_name'],
+            'mobile' => $userInfos['data']['mobile'],
+            'email' => $userInfos['data']['email'],
+            //            'rong_token' => $userInfos['data']['rong_token'],
+            'level_id' => $userInfos['data']['level_id'],
+            'type_id' => $userInfos['data']['type_id'],
+        ];
+        var_dump($userData);
+        // 使用默认场景登录
+        $token = $jwt->getToken('default', $userData);
+        $data = ['token' => $token->toString(), 'exp' => $jwt->getTTL($token->toString())];
+        return Result::success($data);
+    }
+    /**
+     * @return void
+     */
+    public function checkVerifyCode(Jwt $jwt)
+    {
+        //其它信息暂时不管 先以openid
+        $reqData = $this->request->all();
+        $validator = $this->validationFactory->make($reqData, ['token' => 'required'], ['token.required' => 'token不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $userInfo = $jwt->getClaimsByToken($reqData['token']);
+        if ($userInfo) {
+            return Result::success(['token' => $reqData['token']]);
+        } else {
+            return Result::error("token无效");
+        }
+    }
+    /**
+     * 注册或登陆
+     * @return void
+     */
+    public function registerOrLogin(Jwt $jwt)
+    {
+        //获取access_token
+        $reqData = $this->request->all();
+        $validator = $this->validationFactory->make($reqData, ['code' => 'required'], ['code.required' => 'code不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
+        $result = PublicData::http_get($url);
+        $accessTokenData = json_decode($result, true);
+        //获取openid
+        $url = env("WECHAT") . "sns/jscode2session?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&js_code=" . $reqData['loginCode'] . "&grant_type=authorization_code";
+        $result = PublicData::http_get($url);
+        $openInfoData = json_decode($result, true);
+        if (isset($openInfoData['errcode']) && in_array($openInfoData['errcode'], [40163, 40029])) {
+            return Result::error($openInfoData['errmsg']);
+        }
+        $data = ['code' => $reqData['code'], 'openid' => $openInfoData['openid']];
+        // 将数组转换为JSON字符串
+        $jsonData = json_encode($data);
+        // 初始化cURL会话
+        $ch = curl_init(env("WECHAT") . "wxa/business/getuserphonenumber?access_token=" . $accessTokenData['access_token']);
+        // 设置cURL选项 Todo 这里有一万个wc 封装成post方法就报错,后期再研究
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_POST, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Content-Length: ' . strlen($jsonData)]);
+        // 执行cURL会话
+        $response = curl_exec($ch);
+        // 检查是否有错误发生
+        if (curl_errno($ch)) {
+            return Result::error("获取手机号失败");
+        }
+        // 关闭cURL会话
+        curl_close($ch);
+        $response = json_decode($response, true);
+        if ($response['errcode'] == '40029') {
+            return Result::error($openInfoData['errmsg']);
+        }
+        // 打印响应内容
+        var_dump($openInfoData, $response);
+        //根据openid 获取token
+        $checkUserInfo = $this->userServiceClient->verifyUserInfo(['user_name' => $response['phone_info']['purePhoneNumber']]);
+        if ($checkUserInfo['code'] == 0) {
+            $salt = rand(1, 999999);
+            $createUserData = ['user_name' => $response['phone_info']['purePhoneNumber'], 'salt' => $salt, 'password' => $openInfoData['openid'], 'type_id' => 20000];
+            $checkUserInfo = $this->userServiceClient->createUser($createUserData);
+        }
+        //根据openid和手机号判断是否注册,未注册直接注册
+        $wechatReqData = ['openid' => $openInfoData['openid'], 'purePhoneNumber' => $response['phone_info']['purePhoneNumber']];
+        $wechatInfo = $this->userServiceClient->getWechatInfo($wechatReqData);
+        if ($wechatInfo['code'] == 0) {
+            $wechatData = ['openid' => $openInfoData['openid'], 'phoneNumber' => $response['phone_info']['phoneNumber'], 'purePhoneNumber' => $response['phone_info']['purePhoneNumber'], 'countryCode' => $response['phone_info']['countryCode'], 'watermark' => json_encode($response['phone_info']['watermark']), 'user_id' => $checkUserInfo['data']['id']];
+            $this->userServiceClient->addWechatInfo($wechatData);
+        }
+        var_dump($checkUserInfo);
+        $userData = [
+            'uid' => $checkUserInfo['data']['id'],
+            // 如果使用单点登录,必须存在配置文件中的sso_key的值,一般设置为用户的id
+            'user_name' => $response['phone_info']['phoneNumber'],
+            'mobile' => $checkUserInfo['data']['mobile'] ?? '',
+            'email' => $checkUserInfo['data']['email'],
+            //            'rong_token' => $userInfos['data']['rong_token'],
+            'level_id' => $checkUserInfo['data']['level_id'],
+            'type_id' => $checkUserInfo['data']['type_id'],
+        ];
+        // 使用默认场景登录
+        $token = $jwt->getToken('default', $userData);
+        $data = ['token' => $token->toString(), 'exp' => $jwt->getTTL($token->toString())];
+        return Result::success($data);
+    }
+    public function httpPost()
+    {
+    }
+    # http头部必须携带token才能访问的路由
+    public function getData(Jwt $jwt)
+    {
+        //        var_dump($this->UserId);
+        $h = $this->request->getHeaders();
+        //        var_dump($this->request->getHeaders());
+        //        $a= 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwaHBlcjY2Ni9qd3QiLCJ1aWQiOjMyLCJ1c2VyX25hbWUiOiIxIiwicm9sZV9pZCI6MSwibW9iaWxlIjoiMTU4MDEyNDU3NTUiLCJlbWFpbCI6IjVAcXEuY29tIiwicm9uZ190b2tlbiI6IiIsImxldmVsX2lkIjo4LCJqd3Rfc2NlbmUiOiJkZWZhdWx0IiwianRpIjoiZGVmYXVsdF82Njc1MjJkZDQ3YWYxMi41MTE5MjI5MiIsImlhdCI6MTcxODk1MjY2OSwibmJmIjoxNzE4OTUyNjY5LCJleHAiOjE3MjE1NDQ2Njl9.e0JW8fgNrwBdFgmQ8GNtES2ME1SbcbIih5MsQWzT6sk';
+        $arr = $jwt->getClaimsByToken($h['token'][0]);
+        var_dump($h['token'][0], "+++++++++++", $arr, "===####");
+        return $this->response->json(['code' => 0, 'msg' => 'success', 'data' => ['a' => 1]]);
+    }
+}

+ 248 - 0
runtime/container/proxy/App_Controller_NewsController.proxy.php

@@ -0,0 +1,248 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\NewsServiceInterface;
+use App\Tools\PublicData;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use Hyperf\Context\Context;
+/**
+ * Class NewsController
+ * @package App\Controller
+ */
+//#[AutoController]
+class NewsController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var NewsServiceInterface
+     */
+    #[Inject]
+    private $newsServiceClient;
+    /**
+     * 导航池列表
+     * @return void
+     */
+    public function getCategoryList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['page' => 'required', 'pageSize' => 'required'], ['page.required' => '第几页不能为空', 'pageSize.required' => '每页显示条数不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->getCategoryList($requireData);
+        if ($result['data']) {
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['pid_arr'] = $v['pid_arr'] ? json_decode($v['pid_arr']) : [0];
+            }
+        }
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 站点下的导航池
+     * @return void
+     */
+    public function categoryList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['pid' => 'required'], ['pid.required' => '父级ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        //        $requireData['website_id'] = Context::get("SiteId");
+        $result = $this->newsServiceClient->categoryList($requireData);
+        $rep = PublicData::buildMenuTree($result['data']);
+        return $result ? Result::success($rep) : Result::error($result['message']);
+    }
+    /**
+     * 添加导航
+     * @return array|void
+     */
+    public function addCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required', 'seo_title' => 'required', 'seo_keywords' => 'required', 'seo_description' => 'required'], ['name.required' => '导航池名称不能为空', 'seo_title.required' => 'seo标题名称不能为空', 'seo_keywords.required' => 'seo关键词不能为空', 'seo_description.required' => 'seo描述不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['pid'] = isset($requireData['pid_arr']) ? end($requireData['pid_arr']) : '';
+        $requireData['pid_arr'] = isset($requireData['pid_arr']) ? json_encode($requireData['pid_arr']) : '';
+        $requireData['city_id'] = isset($requireData['city_arr_id']) ? end($requireData['city_arr_id']) : '';
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) ? json_encode($requireData['city_arr_id']) : '';
+        $requireData['department_id'] = isset($requireData['department_arr_id']) ? end($requireData['department_arr_id']) : '';
+        $requireData['department_arr_id'] = isset($requireData['department_arr_id']) ? json_encode($requireData['department_arr_id']) : '';
+        $result = $this->newsServiceClient->addCategory($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新导航池
+     * @return array
+     */
+    public function updateCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'name' => 'required', 'seo_title' => 'required', 'seo_keywords' => 'required', 'seo_description' => 'required'], ['id.required' => 'ID不能为空', 'name.required' => '栏目池名称不能为空', 'seo_title.required' => 'seo标题名称不能为空', 'seo_keywords.required' => 'seo关键词不能为空', 'seo_description.required' => 'seo描述不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['pid'] = isset($requireData['pid_arr']) ? end($requireData['pid_arr']) : '';
+        $requireData['pid_arr'] = isset($requireData['pid_arr']) ? json_encode($requireData['pid_arr']) : '';
+        $requireData['city_id'] = isset($requireData['city_arr_id']) ? end($requireData['city_arr_id']) : '';
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) ? json_encode($requireData['city_arr_id']) : '';
+        $requireData['department_id'] = isset($requireData['department_arr_id']) ? end($requireData['department_arr_id']) : '';
+        $requireData['department_arr_id'] = isset($requireData['department_arr_id']) ? json_encode($requireData['department_arr_id']) : '';
+        $result = $this->newsServiceClient->updateCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除分类
+     * @return array
+     */
+    public function delCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->delCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 资讯列表
+     * @return void
+     */
+    public function getArticleList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['page' => 'required', 'pageSize' => 'required'], ['page.required' => 'id不能为空', 'pageSize.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->getArticleList($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取导航池信息
+     * @return void
+     */
+    public function getCategoryInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->getCategoryInfo($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 添加分类
+     * @return array|void
+     */
+    public function addArticle()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['title' => 'required', 'cat_arr_id' => 'required', 'author' => 'required'], ['title.required' => '标题不能为空', 'cat_arr_id.required' => '导航池ID不能为空', 'author.required' => '作者不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['catid'] = isset($requireData['cat_arr_id']) ? end($requireData['cat_arr_id']) : '';
+        $requireData['cat_arr_id'] = isset($requireData['cat_arr_id']) ? json_encode($requireData['cat_arr_id']) : '';
+        $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
+        $requireData['ip'] = $loginIp;
+        $requireData['admin_user_id'] = Context::get("UserId");
+        $requireData['level'] = isset($requireData['level']) && $requireData['level'] ? $requireData['level'] : 0;
+        $requireData['hits'] = isset($requireData['hits']) && $requireData['hits'] ? $requireData['hits'] : 0;
+        $requireData['is_original'] = isset($requireData['is_original']) && $requireData['is_original'] ? $requireData['is_original'] : 0;
+        $requireData['status'] = isset($requireData['status']) && $requireData['status'] ? $requireData['status'] : 0;
+        //        var_dump("入参:",$requireData);
+        $result = $this->newsServiceClient->addArticle($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新资讯
+     * @return array
+     */
+    public function updateArticle()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'title' => 'required', 'cat_arr_id' => 'required', 'author' => 'required'], ['title.required' => '标题不能为空', 'cat_arr_id.required' => '导航池ID不能为空', 'author.required' => '作者不能为空', 'id.required' => 'ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['catid'] = isset($requireData['cat_arr_id']) ? end($requireData['cat_arr_id']) : '';
+        $requireData['cat_arr_id'] = isset($requireData['cat_arr_id']) ? json_encode($requireData['cat_arr_id']) : '';
+        $result = $this->newsServiceClient->updateArticle($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新资讯状态
+     * @return array
+     */
+    public function upArticleStatus()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'status' => 'required'], ['id.required' => 'id不能为空', 'status.required' => '状态不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->upArticleStatus($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除分类
+     * @return array
+     */
+    public function delArticle()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->delArticle($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取资讯信息
+     * @return array
+     */
+    public function getArticleInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->newsServiceClient->getArticleInfo($requireData);
+        $result['data']['cat_arr_id'] = $result['data']['cat_arr_id'] ? json_decode($result['data']['cat_arr_id']) : [];
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+}

+ 312 - 0
runtime/container/proxy/App_Controller_PublicController.proxy.php

@@ -0,0 +1,312 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\PublicRpcServiceInterface;
+use Hyperf\Di\Annotation\Inject;
+use App\Tools\Result;
+use App\Tools\CommonService;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use App\Tools\PublicData;
+use Hyperf\HttpServer\Contract\RequestInterface;
+use Hyperf\HttpServer\Contract\ResponseInterface;
+use ZipArchive;
+use function Hyperf\Support\env;
+use Hyperf\Context\Context;
+/**
+ * Class PublicController
+ * @package App\Controller
+ */
+//#[AutoController]
+class PublicController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var PublicRpcServiceInterface
+     */
+    #[Inject]
+    private $publicServiceClient;
+    /**
+     * 地区
+     * @return array
+     */
+    public function getDistrictList()
+    {
+        $pid = $this->request->input("pid", 0);
+        $data = ['pid' => $pid];
+        $result = $this->publicServiceClient->getDistrictList($data);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取用户等级
+     * @return array
+     */
+    public function getUserLevelList()
+    {
+        $requireData = $this->request->all();
+        $result = $this->publicServiceClient->getUserLevelList($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 上传图片
+     * @return array
+     */
+    public function uploadFile()
+    {
+        $urlN = new CommonService();
+        $file = $this->request->file('file');
+        $fileName = $this->request->input("fileName", '');
+        try {
+            if ($file == null) {
+                return Result::error("未找到上传文件");
+            }
+            $data = CommonService::uploadFile($file, ['png', 'jpg', 'png', 'jpeg', 'gif', 'xls', 'xlsx', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'zip', 'pptx', 'mp4', 'flv'], 'image');
+            $data['imgUrl'] = $urlN->imgUrl($data['src']);
+            $data['oldFileName'] = $fileName;
+            return Result::success($data, '上传成功');
+        } catch (\Exception $e) {
+            return Result::error($e->getMessage());
+        }
+    }
+    /**
+     * 添加用户等级
+     * @return array
+     */
+    public function addUserLevel()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required'], ['name.required' => '等级名不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->publicServiceClient->addUserLevel($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除用户等级
+     * @return array
+     */
+    public function delUserLevel()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->publicServiceClient->delUserLevel($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新用户等级
+     * @return array
+     */
+    public function updateUserLevel()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required', 'id' => 'required'], ['id.required' => 'ID不能为空', 'name.required' => '名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->publicServiceClient->updateUserLevel($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 城市列表
+     * @return array
+     */
+    public function getCityList()
+    {
+        $requireData = $this->request->all();
+        var_dump($requireData);
+        $result = $this->publicServiceClient->getDistrictList($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 投诉举报
+     * @return void
+     */
+    public function addComplaint()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['title' => 'required', 'nature' => 'required', 'nature_level' => 'required', 'type' => 'required', 'name' => 'required', 'mobile' => 'required', 'describe' => 'required', 'type_level' => 'required'], ['title.required' => '标题不能为空', 'nature.required' => '性质不能为空', 'nature_level.required' => '进度不能为空', 'type.required' => '类型不能为空', 'name.required' => '姓名不能为空', 'mobile.required' => '手机号码不能为空', 'describe.required' => '详细说明不能为空', 'type_level.required' => '类型进度不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData = $this->request->all();
+        $requireData['user_id'] = Context::get("UserId");
+        if ($requireData['id']) {
+            $result = $this->publicServiceClient->userUpLetterOfComplaint($requireData);
+        } else {
+            $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新投诉举报信息
+     * @return array
+     */
+    public function upComplaint()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        var_dump($requireData);
+        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
+            $requireData['admin_id'] = Context::get("UserId");
+        }
+        $result = $this->publicServiceClient->upLetterOfComplaint($requireData);
+        return $result ? Result::success([]) : Result::error($result['message']);
+    }
+    /**
+     * 获取投诉列表
+     * @return array
+     */
+    public function getComplaint()
+    {
+        $requireData = $this->request->all();
+        $requireData['user_id'] = Context::get("UserId");
+        var_dump("用户id:", Context::get("UserId"));
+        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
+            unset($requireData['user_id']);
+        }
+        $result = $this->publicServiceClient->getLetterOfComplaint($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取投诉举报信息
+     * @return array
+     */
+    public function getLetterOfComplaintInfo()
+    {
+        $requireData = $this->request->all();
+        $requireData['user_id'] = Context::get("UserId");
+        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
+            unset($requireData['user_id']);
+        }
+        $result = $this->publicServiceClient->getLetterOfComplaintInfo($requireData);
+        if ($result) {
+            $result['data']['judgment'] = $result['data']['judgment'] ? json_decode($result['data']['judgment']) : '';
+            $result['data']['audio_and_video'] = $result['data']['audio_and_video'] ? json_decode($result['data']['audio_and_video']) : '';
+            $result['data']['contract'] = $result['data']['contract'] ? json_decode($result['data']['contract']) : '';
+            $result['data']['qualifications'] = $result['data']['qualifications'] ? json_decode($result['data']['qualifications']) : '';
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除投诉举报信息
+     * @return array
+     */
+    public function delLetterOfComplaint()
+    {
+        $requireData = $this->request->all();
+        $requireData['user_id'] = Context::get("UserId");
+        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
+            unset($requireData['user_id']);
+        }
+        $result = $this->publicServiceClient->delLetterOfComplaint($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取投诉分类信息
+     * @return array
+     */
+    public function getLetterType()
+    {
+        $requireData = $this->request->all();
+        $result = $this->publicServiceClient->getLetterType($requireData);
+        $rep = PublicData::buildMenuTree($result['data']);
+        return $rep ? Result::success($rep) : Result::error("查询失败");
+    }
+    public function downloadFile(RequestInterface $request, ResponseInterface $response)
+    {
+        //验证是否有传参数
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['files' => 'required'], ['files.required' => '文件不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['fileName'] = $requireData['fileName'] ?? '政讯通';
+        //打包文件
+        $zip = new ZipArchive();
+        $fileType = 'zip';
+        $date = date('Ymd');
+        $filePath = $fileType . DIRECTORY_SEPARATOR . $date;
+        $allDir = 'public' . DIRECTORY_SEPARATOR . $filePath;
+        if (!is_dir($allDir)) {
+            if (!mkdir($allDir, 0755, true)) {
+                return Result::error('创建文件夹失败');
+            }
+        }
+        $fileName = $requireData['fileName'] . time() . mt_rand(1, 1000000) . '.zip';
+        $zipFileName = $allDir . DIRECTORY_SEPARATOR . $requireData['fileName'] . time() . mt_rand(1, 1000000) . '.zip';
+        //        $zipFileName = 'public/zip/files.zip';
+        if ($zip->open($zipFileName, ZipArchive::CREATE) === TRUE) {
+            // 将要下载的文件逐个添加到zip文件中
+            //            $string = trim($requireData['files'], "[]'"); // 去掉最外层的方括号和单引号(注意:这里假设了单引号,如果是双引号则替换为 ")
+            //            $string = str_replace("'", '', $string); // 去掉所有剩余的单引号(如果原字符串中使用的是双引号,则替换为双引号)
+            //            $filePaths = explode(',', $string);
+            foreach ($requireData['files'] as $filePathu) {
+                $attachmentItem = 'public/' . $filePathu;
+                $zip->addFile($attachmentItem, pathinfo($attachmentItem, PATHINFO_BASENAME));
+            }
+            // 关闭zip文件
+            $zip->close();
+            // 将zip文件提供给用户进行下载
+            //            readfile($zipFileName);
+            $fileUrlName = explode("public", $zipFileName);
+            return Result::success(['fileUrl' => env('HOST') . $fileUrlName[1]]);
+        } else {
+            return Result::error('无法创建zip文件');
+        }
+    }
+    /**
+     * 检测是否被处理
+     * @return array
+     */
+    public function checkMeasure()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->publicServiceClient->checkMeasure($requireData);
+        return $result['code'] == 200 ? Result::success() : Result::error("已经处理了");
+    }
+    /**
+     * 获取职能部门
+     * @return void
+     */
+    public function getDepartment()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['pid' => 'required'], ['pid.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->publicServiceClient->getDepartment($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
+    }
+}

+ 336 - 0
runtime/container/proxy/App_Controller_UserController.proxy.php

@@ -0,0 +1,336 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\UserServiceInterface;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use App\Constants\ErrorCode;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use Hyperf\Context\Context;
+/**
+ * Class UserController
+ * @package App\Controller
+ */
+//#[AutoController]
+class UserController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        if (method_exists(parent::class, '__construct')) {
+            parent::__construct(...func_get_args());
+        }
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var UserServiceInterface
+     */
+    #[Inject]
+    private $userServiceClient;
+    public function createUser()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, [
+            'user_name' => 'required',
+            //登陆账号
+            'type_id' => 'required',
+            //用户类型
+            'password' => 'required|min:6',
+            //密码
+            'confirm_password' => 'required',
+            'real_name' => 'required',
+            'mobile' => 'required',
+        ], [
+            'user_name.required' => '用户名不能为空',
+            'password.required' => '密码不能为空',
+            //                'email.email' => '请填写一个有效的邮箱',
+            'mobile.required' => '手机号码必填',
+            //                'mobile.telephone_number' => '请填写一个有效的手机号',
+            'confirm_password.required' => "确认密码不能为空",
+            'type_id.required' => "用户类型不能为空",
+            'real_name.required' => "姓名不能为空",
+            'password.min' => "密码长度不能低于6位数",
+        ]);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        if ($requireData['password'] != $requireData['confirm_password']) {
+            return Result::error("两次密码不一致");
+        }
+        $salt = rand(1, 999999);
+        $requireData['salt'] = $salt;
+        $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
+        $requireData['last_login_ip'] = $loginIp;
+        $requireData['admin_id'] = Context::get("UserId");
+        $requireData['administrative_unit_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id']) > 0 ? end($requireData['administrative_unit_arr_id']) : 0;
+        $requireData['administrative_unit_arr_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id']) > 0 ? json_encode($requireData['administrative_unit_arr_id']) : '';
+        $requireData['address_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id']) > 0 ? end($requireData['address_arr_id']) : 0;
+        $requireData['address_arr_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id']) > 0 ? json_encode($requireData['address_arr_id']) : '';
+        $requireData['native_place_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id']) > 0 ? end($requireData['native_place_arr_id']) : 0;
+        $requireData['native_place_arr_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id']) > 0 ? json_encode($requireData['native_place_arr_id']) : '';
+        $requireData['city_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id']) > 0 ? end($requireData['city_arr_id']) : 0;
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id']) > 0 ? json_encode($requireData['city_arr_id']) : '';
+        $requireData['other'] = isset($requireData['other']) ? json_encode($requireData['other']) : '';
+        $result = $this->userServiceClient->createUser($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新用户
+     * @return array
+     */
+    public function updateUser()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, [
+            'user_name' => 'required',
+            //登陆账号
+            'type_id' => 'required',
+            //用户类型
+            'real_name' => 'required',
+            'mobile' => 'required',
+            'id' => 'required',
+        ], ['user_name.required' => '用户名不能为空', 'mobile.required' => '手机号码必填', 'type_id.required' => "用户类型不能为空", 'real_name.required' => "姓名不能为空", 'id.required' => "id不能为空"]);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $loginIp = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
+        $requireData['last_login_ip'] = $loginIp;
+        $requireData['administrative_unit_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id']) > 0 ? end($requireData['administrative_unit_arr_id']) : 0;
+        $requireData['administrative_unit_arr_id'] = isset($requireData['administrative_unit_arr_id']) && count($requireData['administrative_unit_arr_id']) > 0 ? json_encode($requireData['administrative_unit_arr_id']) : '';
+        $requireData['address_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id']) > 0 ? end($requireData['address_arr_id']) : 0;
+        $requireData['address_arr_id'] = isset($requireData['address_arr_id']) && count($requireData['address_arr_id']) > 0 ? json_encode($requireData['address_arr_id']) : '';
+        $requireData['native_place_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id']) > 0 ? end($requireData['native_place_arr_id']) : 0;
+        $requireData['native_place_arr_id'] = isset($requireData['native_place_arr_id']) && count($requireData['native_place_arr_id']) > 0 ? json_encode($requireData['native_place_arr_id']) : '';
+        $requireData['city_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id']) > 0 ? end($requireData['city_arr_id']) : 0;
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) && count($requireData['city_arr_id']) > 0 ? json_encode($requireData['city_arr_id']) : '';
+        $requireData['other'] = isset($requireData['other']) ? json_encode($requireData['other']) : '';
+        $requireData['admin_id'] = Context::get("UserId");
+        $result = $this->userServiceClient->updateUser($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取用户信息内容
+     * @return void
+     */
+    public function getUser()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => "id不能为空"]);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->userServiceClient->getUserInfo((int) $requireData['id']);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 获取用户信息
+     * @return array|void
+     */
+    public function getUserInfo()
+    {
+        $result = $this->userServiceClient->getUserInfo((int) Context::get("UserId"));
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 获取用户列表
+     * @return array
+     */
+    public function getUserList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['page' => 'required', 'pageSize' => 'required'], ['page.required' => '页码不能为空', 'pageSize.required' => '每页显示条数不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->userServiceClient->getUserList($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 删除用户
+     * @return array
+     */
+    //    public function delUser()
+    //    {
+    //        $requireData = $this->request->all();
+    //        $validator = $this->validationFactory->make(
+    //            $requireData,
+    //            [
+    //                'id' => 'required'
+    //            ],
+    //            [
+    //                'id.required' => '用户ID不能为空'
+    //            ]
+    //        );
+    //        if ($validator->fails()){
+    //            $errorMessage = $validator->errors()->first();
+    //            return Result::error($errorMessage);
+    //        }
+    //
+    //        $result =  $this->userServiceClient->delUser($requireData['id']);
+    //        if ($result['code'] != ErrorCode::SUCCESS) {
+    //            return Result::error($result['message'],0,[]);
+    //        }
+    //        return Result::success($result['data']);
+    //    }
+    /**
+     * 查看角色信息
+     * @return array
+     */
+    public function roleInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => '角色ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->userServiceClient->roleInfo($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        $result['data']['rule'] = isset($result['data']['rule']) ? json_decode($result['data']['rule']) : [];
+        return Result::success($result['data']);
+    }
+    /**
+     * 验证用户是否存在
+     * @return void
+     */
+    public function verifyUserInfo()
+    {
+        $requireData = $this->request->all();
+        $result = $this->userServiceClient->verifyUserInfo($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 角色列表
+     * @return array|void
+     */
+    public function roleList()
+    {
+        $requireData = $this->request->all();
+        $result = $this->userServiceClient->roleList($requireData);
+        if ($result['data']) {
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['rule'] = $v['rule'] ? json_decode($v['rule']) : [];
+            }
+        }
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 添加角色
+     * @return array
+     */
+    public function addRole()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['role_name' => 'required', 'rule' => 'required', 'remark' => 'required'], ['role_name.required' => '角色名称不能为空', 'rule.required' => '权限不能为空', 'remark.required' => '职能描述不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $requireData['rule'] = isset($requireData['rule']) && $requireData['rule'] ? json_encode($requireData['rule']) : [];
+        $result = $this->userServiceClient->addRole($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 删除角色
+     * @return array
+     */
+    public function delRole()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => '角色ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->userServiceClient->delRole($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 更新角色
+     * @return array
+     */
+    public function updateRole()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['role_name' => 'required', 'rule' => 'required', 'remark' => 'required', 'id' => 'required'], ['id.required' => '角色ID不能为空', 'role_name.required' => '角色名称不能为空', 'rule.required' => '权限不能为空', 'remark.required' => '职能描述不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $requireData['rule'] = isset($requireData['rule']) && $requireData['rule'] ? json_encode($requireData['rule']) : [];
+        $result = $this->userServiceClient->updateRole($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    /**
+     * 修改密码
+     * @return array
+     */
+    public function changePassword()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['password' => 'required', 'new_password' => 'required|min:6', 'new_password1' => 'required|same:new_password'], ['password.required' => '密码不能为空', 'new_password1.required' => '确认密码不能为空', 'new_password1.same' => '新密码和确认密码不一致', 'new_password.min' => "密码长度不能低于6位数"]);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->userServiceClient->changePassword($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+    public function upUserStatus()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['status' => 'required', 'id' => 'required'], ['id.required' => 'ID不能为空', 'status.required' => '状态不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->userServiceClient->upUserStatus($requireData);
+        if ($result['code'] != ErrorCode::SUCCESS) {
+            return Result::error($result['message'], 0, []);
+        }
+        return Result::success($result['data']);
+    }
+}

+ 701 - 0
runtime/container/proxy/App_Controller_WebsiteController.proxy.php

@@ -0,0 +1,701 @@
+<?php
+
+declare (strict_types=1);
+namespace App\Controller;
+
+use App\JsonRpc\WebsiteServiceInterface;
+use App\Tools\PublicData;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Annotation\AutoController;
+use App\Tools\Result;
+use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+use Hyperf\Context\Context;
+use Phper666\JWTAuth\JWT;
+use DateTime;
+/**
+ * Class WebsiteController
+ * @package App\Controller
+ */
+//#[AutoController]
+class WebsiteController extends AbstractController
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    #[Inject]
+    protected ValidatorFactoryInterface $validationFactory;
+    /**
+     * @var WebsiteServiceInterface
+     */
+    #[Inject]
+    private $websiteServiceClient;
+    protected JWT $JWT;
+    public function __construct(Jwt $JWT)
+    {
+        $this->__handlePropertyHandler(__CLASS__);
+        $this->JWT = $JWT;
+    }
+    /**
+     * 创建站点
+     * @return array
+     */
+    public function addWebsite()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_column_arr_id' => 'required', 'website_name' => 'required', 'website_url' => 'required'], ['website_column_id.required' => '上级网系id不能为空', 'website_name.required' => '站点名称不能为空', 'website_url.required' => '网站地址不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['website_url'] = json_encode($requireData['website_url']);
+        $requireData['city_id'] = isset($requireData['city_arr_id']) ? end($requireData['city_arr_id']) : '';
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) ? json_encode($requireData['city_arr_id']) : '';
+        $requireData['website_column_id'] = isset($requireData['website_column_arr_id']) ? end($requireData['website_column_arr_id']) : '';
+        $requireData['website_column_arr_id'] = isset($requireData['website_column_arr_id']) ? json_encode($requireData['website_column_arr_id']) : '';
+        var_dump($requireData);
+        $result = $this->websiteServiceClient->createWebsite($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取站点列表
+     * @return void
+     */
+    public function getWebsiteList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['page' => 'required', 'pageSize' => 'required'], ['page.required' => '页码不能为空', 'pageSize.required' => '每页显示条数不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsitetList($requireData);
+        if ($result['data']) {
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['city_arr_id'] = $v['city_arr_id'] ? json_decode($v['city_arr_id']) : '';
+                $result['data']['rows'][$k]['website_url'] = $v['website_url'] ? json_decode($v['website_url']) : [];
+            }
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新站点
+     * @return array
+     */
+    public function updateWebsite()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required', 'website_column_arr_id' => 'required', 'website_name' => 'required', 'website_url' => 'required'], ['id.required' => 'id不能为空', 'website_column_id.required' => '网系id不能为空', 'website_name.required' => '站点名称不能为空', 'website_url.required' => '网站地址不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['website_url'] = json_encode($requireData['website_url']);
+        $requireData['city_id'] = isset($requireData['city_arr_id']) ? end($requireData['city_arr_id']) : '';
+        $requireData['city_arr_id'] = isset($requireData['city_arr_id']) ? json_encode($requireData['city_arr_id']) : '';
+        $requireData['website_column_id'] = isset($requireData['website_column_arr_id']) ? end($requireData['website_column_arr_id']) : '';
+        $requireData['website_column_arr_id'] = isset($requireData['website_column_arr_id']) ? json_encode($requireData['website_column_arr_id']) : '';
+        $result = $this->websiteServiceClient->updateWebsite((int) $requireData['id'], $requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除站点
+     * @return array
+     */
+    public function delWebsite()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $id = (int) $requireData['id'];
+        $result = $this->websiteServiceClient->delWebsite($id);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取站点信息
+     * @return array
+     */
+    public function getWebsiteInfo()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => 'id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $id = (int) $requireData['id'];
+        $result = $this->websiteServiceClient->getWebsiteInfo($id);
+        if ($result['code'] == 200) {
+            $result['data']['website_url'] = isset($result['data']['website_url']) && $result['data']['website_url'] ? json_decode($result['data']['website_url']) : '';
+            $result['data']['website_column_arr_id'] = isset($result['data']['website_column_arr_id']) && $result['data']['website_column_arr_id'] ? json_decode($result['data']['website_column_arr_id']) : '';
+            $result['data']['city_arr_id'] = isset($result['data']['city_arr_id']) && $result['data']['city_arr_id'] ? json_decode($result['data']['city_arr_id']) : '';
+            return Result::success($result['data']);
+        } else {
+            return Result::error($result['message']);
+        }
+    }
+    /**
+     * 添加的时候 选择上级网系
+     * @return array
+     */
+    public function getWebsiteColumn()
+    {
+        $result = $this->websiteServiceClient->getWebsiteColumn([]);
+        $rep = PublicData::buildMenuTree($result['data']);
+        return $rep ? Result::success($rep) : Result::error("查询失败");
+    }
+    /**
+     * 获取网系列表
+     * @return void
+     */
+    public function getWebsiteColumnList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['page' => 'required', 'pageSize' => 'required'], ['page.required' => '页码不能为空', 'pageSize.required' => '每页显示条数不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteColumnList($requireData);
+        if ($result['data']) {
+            foreach ($result['data']['rows'] as $k => $v) {
+                $result['data']['rows'][$k]['column_arr_id'] = $v['column_arr_id'] ? json_decode($v['column_arr_id']) : [0];
+            }
+        }
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 创建网系
+     * @return array
+     */
+    public function addWebsiteColumn()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['column_name' => 'required'], ['column_name.required' => '网系名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['pid'] = isset($requireData['column_arr_id']) ? end($requireData['column_arr_id']) : '';
+        $requireData['column_arr_id'] = isset($requireData['column_arr_id']) ? json_encode($requireData['column_arr_id']) : '';
+        $result = $this->websiteServiceClient->createWebsiteColumn($requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新网系
+     * @return array
+     */
+    public function updateWebsiteColumn()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['column_name' => 'required'], ['column_name.required' => '栏目名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['pid'] = isset($requireData['column_arr_id']) ? end($requireData['column_arr_id']) : '';
+        $requireData['column_arr_id'] = isset($requireData['column_arr_id']) ? json_encode($requireData['column_arr_id']) : '';
+        $result = $this->websiteServiceClient->updateWebsiteColumn($requireData['id'], $requireData);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除网系
+     * @return array
+     */
+    public function delWebsiteColumn()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => '网系ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->delWebsiteColumn(intval($requireData['id']));
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取站点角色列表
+     * @return void
+     */
+    public function getWebsiteRoleList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['id.required' => '站点ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $keyword = $this->request->input("keyword", '');
+        $page = (int) $this->request->input("page", 1);
+        $pageSize = (int) $this->request->input("pageSize", 10);
+        $websiteId = (int) $this->request->input("id", '');
+        $result = $this->websiteServiceClient->getWebsiteRoleList($keyword, $page, $pageSize, $websiteId);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 创建站点角色
+     * @return array
+     */
+    public function createWebsiteRole()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['type' => 'required', 'role_id' => 'required', 'website_id' => 'required'], ['type.required' => '类型不能为空', 'type_id.required' => 'ID不能为空', 'website_id.required' => '站点ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['admin_user_id'] = Context::get("UserId");
+        $result = $this->websiteServiceClient->createWebsiteRole($requireData);
+        return $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除站点角色
+     * @return array
+     */
+    public function delWebsiteRole()
+    {
+        $id = (int) $this->request->input("id", '');
+        $result = $this->websiteServiceClient->delWebsiteRole($id);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取站点角色用户列表
+     * @return void
+     */
+    public function getWebsiteRoleUserList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required', 'role_id' => 'required'], ['website_id.required' => '站点ID不能为空', 'role_id.required' => '角色ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $keyword = $this->request->input("keyword", '');
+        $page = (int) $this->request->input("page", 1);
+        $pageSize = (int) $this->request->input("pageSize", 10);
+        $roleId = (int) $this->request->input("role_id", '');
+        $websiteId = (int) $this->request->input("website_id", '');
+        $result = $this->websiteServiceClient->getWebsiteRoleUserList($keyword, $page, $pageSize, $websiteId, $roleId);
+        return $result ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 创建站点角色用户
+     * @return array
+     */
+    public function createWebsiteRoleUser()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['type' => 'required', 'role_id' => 'required', 'website_id' => 'required', 'user_id' => 'required'], ['type.required' => '类型不能为空', 'website_id.required' => '站点ID不能为空', 'role_id.required' => '角色ID不能为空', 'user_id.required' => '用户ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $requireData['admin_user_id'] = Context::get("UserId");
+        $requireData['role_id'] = (int) $requireData['role_id'];
+        $requireData['type'] = (int) $requireData['type'];
+        $requireData['website_id'] = (int) $requireData['website_id'];
+        $requireData['user_id'] = (int) $requireData['user_id'];
+        $result = $this->websiteServiceClient->createWebsiteRoleUser($requireData);
+        return $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除站点角色用户
+     * @return array
+     */
+    public function delWebsiteRoleUser()
+    {
+        $id = (int) $this->request->input("id", '');
+        $result = $this->websiteServiceClient->delWebsiteRoleUser($id);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 网站栏目映射
+     * @return void
+     */
+    public function addWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required', 'category_arr_id' => 'required'], ['website_id.required' => '网站ID不能为空', 'category_arr_id.required' => '网站导航ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->addWebsiteCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除网站导航
+     * @return void
+     */
+    public function delWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required', 'category_id' => 'required'], ['website_id.required' => '网站ID不能为空', 'category_id.required' => '网站导航ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->delWebsiteCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取网站导航
+     * @return void
+     */
+    public function getAdminWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required'], ['website_id.required' => '网站ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getAdminWebsiteCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新网站导航
+     * @return void
+     */
+    public function upWebsiteCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required'], ['website_id.required' => '网站ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->upWebsiteCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取网站与导航
+     * @return array
+     */
+    public function getWebsiteCategoryList()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['page' => 'required', 'pageSize' => 'required'], ['page.required' => '当前页码数不能为空', 'pageSize.required' => '每页显示条数不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteCategoryList($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除网站下面的所有导航
+     * @return void
+     */
+    public function delWebsiteAllCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required'], ['website_id.required' => '网站ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->delWebsiteAllCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 查看指定的导航
+     * @return array
+     */
+    public function getWebsiteCategoryOnes()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required', 'category_id' => 'required'], ['website_id.required' => '网站ID不能为空', 'category_id.required' => '网站导航ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteCategoryOnes($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新指定的某一个导航
+     * @return array
+     */
+    public function upWebsiteCategoryones()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required', 'category_id' => 'required', 'alias' => 'required', 'seo_title' => 'required', 'seo_keywords' => 'required', 'seo_description' => 'required'], ['website_id.required' => '网站ID不能为空', 'category_id.required' => '导航ID不能为空', 'alias.required' => '名称不能为空', 'seo_title.required' => 'seo标题不能为空', 'seo_keywords.required' => '关键词不能为空', 'seo_description.required' => '网站描述不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->upWebsiteCategoryones($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 站下的所有导航包含子导航
+     * @return array
+     */
+    public function getWebsiteAllCategory()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_id' => 'required'], ['website_id.required' => '网站ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->getWebsiteAllCategory($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 管理后台首页统计
+     * @return array
+     */
+    public function getAdminIndex()
+    {
+        //        $token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwaHBlcjY2Ni9qd3QiLCJ1aWQiOjMyLCJ1c2VyX25hbWUiOiIxIiwibW9iaWxlIjoiMTU4MDEyNDU3NTUiLCJlbWFpbCI6IjVAcXEuY29tIiwicm9uZ190b2tlbiI6IiIsImxldmVsX2lkIjoxLCJ0eXBlX2lkIjoxLCJqd3Rfc2NlbmUiOiJkZWZhdWx0IiwianRpIjoiZGVmYXVsdF82NzFiNDc3MDcwODI2OC4wOTk4ODA3NyIsImlhdCI6MTcyOTg0MTAwOCwibmJmIjoxNzI5ODQxMDA4LCJleHAiOjE3Mjk4NDQwMDh9.4X-Q-vwPxddX75q6CKtOXqWgtnFAikRwX308T0iDxYE";
+        //        $time =  $this->JWT->getTokenDynamicCacheTime($token);
+        //        var_dump("有效时间:",$time);
+        $typeId = intval(Context::get("TypeId"));
+        var_dump("用户类型:", $typeId);
+        switch ($typeId) {
+            case 4:
+                $dates = [];
+                $startDate = (new DateTime())->modify('-29 day');
+                // 从 29 天前开始(因为我们要 30 天,包括今天的前一天)
+                for ($i = 0; $i < 30; $i++) {
+                    $dates[] = $startDate->format('Y-m-d');
+                    $startDate->modify('+1 day');
+                    // 每天递增一天
+                }
+                $result = $this->websiteServiceClient->getAdminIndex(['type_id' => $typeId]);
+                $list = [];
+                if ($result['data']) {
+                    $list = PublicData::arrayColumnAsKey($result['data'], 'date');
+                    var_dump($list);
+                }
+                $newResult = [];
+                if ($dates) {
+                    foreach ($dates as $key => $val) {
+                        $newResult[$key]['date'] = $val;
+                        $newResult[$key]['total_count'] = $list[$val]['total_count'] ?? 0;
+                    }
+                }
+                //投诉举报列表
+                $res['letterOfComplaintList'] = $newResult;
+                return $result['code'] == 200 ? Result::success($res) : Result::error($result['message']);
+                break;
+            case 10000:
+                $result = $this->websiteServiceClient->getAdminIndex(['type_id' => $typeId]);
+                if ($result) {
+                    $dates = [];
+                    $startDate = (new DateTime())->modify('-29 day');
+                    // 从 29 天前开始(因为我们要 30 天,包括今天的前一天)
+                    for ($i = 0; $i < 30; $i++) {
+                        $dates[] = $startDate->format('Y-m-d');
+                        $startDate->modify('+1 day');
+                        // 每天递增一天
+                    }
+                    $list = [];
+                    if ($result['data']['monthArticle']) {
+                        $list = PublicData::arrayColumnAsKey($result['data']['monthArticle'], 'date');
+                    }
+                    $newResult = [];
+                    if ($dates) {
+                        foreach ($dates as $key => $val) {
+                            $newResult[$key]['date'] = $val;
+                            $newResult[$key]['total_count'] = $list[$val]['total_count'] ?? 0;
+                        }
+                    }
+                    //1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员
+                    $userType = ['1' => '个人会员', '2' => '政务会员', '3' => '企业会员', '4' => '调研员', '10000' => '管理员', '20000' => '游客'];
+                    if ($result['data']['userType']) {
+                        foreach ($result['data']['userType'] as $k => $v) {
+                            $result['data']['userType'][$k]['typeName'] = $userType[$v['type_id']];
+                        }
+                    }
+                    $result['data']['monthArticle'] = $newResult;
+                    return Result::success($result['data']);
+                } else {
+                    return Result::error($result['message']);
+                }
+                return Result::success($result);
+                break;
+        }
+    }
+    /**
+     * 获取模板皮肤分类
+     * @return void
+     */
+    public function getTemplateClass()
+    {
+        $requireData = $this->request->all();
+        $result = $this->websiteServiceClient->getTemplateClass($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 添加模板分类
+     * @return void
+     */
+    public function addTemplateClass()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required'], ['name.required' => '模板类型不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $data = ['name' => $requireData['name'], 'sort' => $requireData['sort'] ?? 0];
+        $result = $this->websiteServiceClient->addTemplateClass($data);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新模板分类
+     * @return array
+     */
+    public function upTemplateClass()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['name' => 'required', 'id' => 'required'], ['name.required' => '模板类型不能为空', 'name.id' => '模板类型ID不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $data = ['id' => $requireData['id'], 'name' => $requireData['name'], 'sort' => $requireData['sort'] ?? 0];
+        $result = $this->websiteServiceClient->upTemplateClass($data);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除模板分类
+     * @return array
+     */
+    public function delTemplateClass()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['name.required' => '类型id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $data = ['id' => $requireData['id']];
+        $result = $this->websiteServiceClient->delTemplateClass($data);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 获取分类下的模板
+     * @return array
+     */
+    public function getTemplate()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, [
+            //                'template_class_id' => 'required',
+            'page' => 'required',
+            'pageSize' => 'required',
+        ], [
+            //                'template_class_id.required' => '类型template_class_id不能为空',
+            'page.required' => 'page不能为空',
+            'pageSize.required' => '每页显示条数不能为空',
+        ]);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $data = ['template_class_id' => $requireData['template_class_id'], 'page' => $requireData['page'], 'pageSize' => $requireData['pageSize']];
+        $result = $this->websiteServiceClient->getTemplate($data);
+        var_dump("模板列表:", $result['data']['rows']);
+        if ($result['data']['rows']) {
+            foreach ($result['data']['rows'] as $key => $val) {
+                $result['data']['rows'][$key]['template_img'] = json_decode($val['template_img'], true);
+            }
+        }
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 创建皮肤模板
+     * @return array
+     */
+    public function addTemplate()
+    {
+        $requireData = $this->request->all();
+        //        var_dump("FCK:",$requireData);
+        $validator = $this->validationFactory->make($requireData, ['template_name' => 'required', 'template_class_id' => 'required', 'template_img' => 'required'], ['template_name.required' => '模板名称不能为空', 'template_class_id.required' => '模板类型id不能为空', 'template_img.required' => '模板图片不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        //        var_dump($requireData);
+        $data = ['template_name' => $requireData['template_name'], 'template_class_id' => $requireData['template_class_id'], 'template_img' => $requireData['template_img']];
+        $result = $this->websiteServiceClient->addTemplate($data);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 更新模板
+     * @return array
+     */
+    public function upTemplate()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['template_name' => 'required', 'template_class_id' => 'required', 'template_img' => 'required', 'id' => 'required'], ['template_name.required' => '模板名称不能为空', 'template_class_id.required' => '模板类型id不能为空', 'template_img.required' => '模板图片不能为空', 'id.required' => '模板id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $data = ['id' => $requireData['id'], 'template_name' => $requireData['template_name'], 'template_img' => $requireData['template_img'], 'template_class_id' => $requireData['template_class_id']];
+        $result = $this->websiteServiceClient->upTemplate($data);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除模板
+     * @return array
+     */
+    public function delTemplate()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['id' => 'required'], ['name.required' => '模板id不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $data = ['id' => $requireData['id']];
+        $result = $this->websiteServiceClient->delTemplate($data);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 搜索网站
+     * @return array
+     */
+    public function websiteList()
+    {
+        $requireData = $this->request->all();
+        $result = $this->websiteServiceClient->websiteList($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 检测网站名称是否存在
+     * @return array
+     */
+    public function checkWebsiteName()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_name' => 'required'], ['website_name.required' => '网站名称不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->checkWebsiteName($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 检测网站网址是否存在
+     * @return array
+     */
+    public function checkWebsiteUrl()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make($requireData, ['website_url' => 'required'], ['website_url.required' => '网站网址不能为空']);
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+            return Result::error($errorMessage);
+        }
+        $result = $this->websiteServiceClient->checkWebsiteUrl($requireData);
+        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+}

+ 69 - 0
runtime/container/proxy/App_JsonRpc_AuthorityServiceInterface.rpc-client.proxy.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace App\JsonRpc;
+
+class AuthorityServiceInterface_938f151b2d38b882e7131c7b756b34e5 extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements AuthorityServiceInterface
+{
+    /**
+     * 菜单列表
+     * @param array $data
+     * @return array
+     */
+    public function getMenuList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 获取菜单信息
+     * @param array $data
+     * @return array
+     */
+    public function getMenuInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 更新菜单
+     * @param array $data
+     * @return array
+     */
+    public function updateMenu(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 删除惨淡
+     * @param array $data
+     * @return array
+     */
+    public function delMenu(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 创建菜单
+     * @param array $data
+     * @return array
+     */
+    public function addMenu(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 查询菜单
+     * @param array $data
+     * @return array
+     */
+    public function getRecursionMenu(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getAllMenuList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+}

+ 93 - 0
runtime/container/proxy/App_JsonRpc_NewsServiceInterface.rpc-client.proxy.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace App\JsonRpc;
+
+class NewsServiceInterface_1dc952f30391d3623e254f507249f1da extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements NewsServiceInterface
+{
+    /**
+     * @param array $data
+     */
+    public function getCategoryList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function categoryList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function addCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function delCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function updateCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function getArticleList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function addArticle(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function delArticle(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function updateArticle(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function getArticleInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getCategoryInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upArticleStatus(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+}

+ 145 - 0
runtime/container/proxy/App_JsonRpc_UserServiceInterface.rpc-client.proxy.php

@@ -0,0 +1,145 @@
+<?php
+
+namespace App\JsonRpc;
+
+class UserServiceInterface_827489eb255e9718d6c8addba453dcd3 extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements UserServiceInterface
+{
+    /**
+     * @param array $data
+     */
+    public function createUser(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     */
+    public function getUserInfo(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     */
+    public function getUserList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function verifyUserInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @remark 创建登录日志信息
+     * @param array $data
+     * @return array
+     */
+    public function createUserLogin(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 更新用户信息
+     * @param array $data
+     * @return array
+     */
+    public function updateUser(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 更新用户
+     * @param array $data
+     * @return array
+     */
+    public function updateUserInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 删除用户
+     * @param int $id
+     * @return array
+     */
+    public function delUser(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 添加角色
+     * @param array $data
+     * @return array
+     */
+    public function addRole(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 删除角色
+     * @param array $data
+     * @return array
+     */
+    public function delRole(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 更新角色
+     * @param array $data
+     * @return array
+     */
+    public function updateRole(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 角色列表
+     * @param array $data
+     * @return array
+     */
+    public function roleList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 角色信息
+     * @param array $data
+     * @return array
+     */
+    public function roleInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWechatInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addWechatInfo(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function changePassword(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    public function upUserStatus(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+}

+ 345 - 0
runtime/container/proxy/App_JsonRpc_WebsiteServiceInterface.rpc-client.proxy.php

@@ -0,0 +1,345 @@
+<?php
+
+namespace App\JsonRpc;
+
+class WebsiteServiceInterface_62dc58b55414b1e3772feedb1ff0f561 extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements WebsiteServiceInterface
+{
+    /**
+     * @param string $keyword
+     * @param int $page
+     * @param int $pageSize
+     */
+    public function getWebsitetList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function createWebsite(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @param array $data
+     * @return array
+     */
+    public function updateWebsite(int $id, array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @return array
+     */
+    public function delWebsite(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * 查询网站信息
+     * @param int $id
+     * @return array
+     */
+    public function getWebsiteInfo(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteColumn(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param string $keyword
+     * @param int $page
+     * @param int $pageSize
+     */
+    public function getWebsiteColumnList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function createWebsiteColumn(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @param array $data
+     * @return array
+     */
+    public function updateWebsiteColumn(int $id, array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @return array
+     */
+    public function delWebsiteColumn(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param string $keyword
+     * @param int $page
+     * @param int $pageSize
+     */
+    public function getWebsiteRoleList(string $keyword, int $page, int $pageSize, int $websiteId)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function createWebsiteRole(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @param array $data
+     * @return array
+     */
+    public function updateWebsiteRole(int $id, array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @return array
+     */
+    public function delWebsiteRole(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param string $keyword
+     * @param int $page
+     * @param int $pageSize
+     */
+    public function getWebsiteRoleUserList(string $keyword, int $page, int $pageSize, int $websiteId, int $roleId)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function createWebsiteRoleUser(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @param array $data
+     * @return array
+     */
+    public function updateWebsiteRoleUser(int $id, array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param int $id
+     * @return array
+     */
+    public function delWebsiteRoleUser(int $id)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteId(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     *
+     */
+    public function getWebsiteCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getAdminIndex(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getTemplateClass(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addTemplateClass(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upTemplateClass(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delTemplateClass(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getTemplate(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addTemplate(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upTemplate(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delTemplate(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function websiteList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addWebsiteCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delWebsiteCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getAdminWebsiteCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upWebsiteCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteCategoryList(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function delWebsiteAllCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteCategoryOnes(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function upWebsiteCategoryones(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWebsiteAllCategory(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkWebsiteName(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkWebsiteUrl(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
+}

+ 92 - 0
runtime/container/proxy/App_Tools_CommonService.proxy.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace App\Tools;
+
+use App\Constants\ErrorCode;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpMessage\Upload\UploadedFile;
+use App\Tools\Result;
+use ZX\Tools\File\MimeTypes;
+use function Hyperf\Support\env;
+use Hyperf\HttpServer\Contract\RequestInterface;
+class CommonService
+{
+    use \Hyperf\Di\Aop\ProxyTrait;
+    use \Hyperf\Di\Aop\PropertyHandlerTrait;
+    function __construct()
+    {
+        $this->__handlePropertyHandler(__CLASS__);
+    }
+    #[Inject]
+    protected RequestInterface $request;
+    public static function uploadFile(UploadedFile $uploadedFile, array $acceptExt, string $fileType = 'image')
+    {
+        $ext = $uploadedFile->getExtension();
+        if (!in_array($ext, $acceptExt)) {
+            return Result::error('文件名后缀不允许');
+        }
+        //图片检测安全
+        if ($fileType == 'image') {
+            $res = self::checkMimeType($uploadedFile, $ext);
+            if ($res == false) {
+                return Result::error('文件安全检测未通过');
+            }
+        }
+        $date = date('Ymd');
+        $filePath = $fileType . DIRECTORY_SEPARATOR . $date;
+        $allDir = 'public' . DIRECTORY_SEPARATOR . $filePath;
+        if (!is_dir($allDir)) {
+            if (!mkdir($allDir, 0755, true)) {
+                return Result::error('创建文件夹失败');
+            }
+        }
+        $fileName = time() . mt_rand(1, 1000000) . '.' . $ext;
+        $finalPath = BASE_PATH . DIRECTORY_SEPARATOR . $allDir . DIRECTORY_SEPARATOR . $fileName;
+        $showPath = $filePath . DIRECTORY_SEPARATOR . $fileName;
+        $uploadedFile->moveTo($finalPath);
+        return ['id' => uniqid(), 'src' => $showPath, 'fileName' => $fileName, 'fileType' => $ext];
+    }
+    //检测文件是否合法
+    public static function checkMimeType(UploadedFile $uploadedFile, string $ext = '')
+    {
+        try {
+            $filePath = $uploadedFile->getRealPath();
+            $fileMimeType = mime_content_type($filePath);
+            $mimeTypes = MimeTypes::getImage();
+            $isExist = array_key_exists($fileMimeType, $mimeTypes);
+            if (!$isExist) {
+                return Result::error('非允许mime types类型');
+            }
+            list($width, $height, $type, $attr) = getimagesize($filePath, $ext);
+            if ($width <= 0 || $height <= 0) {
+                return false;
+            } else {
+                return true;
+            }
+        } catch (\Exception $e) {
+            return false;
+        }
+    }
+    public function imgUrl(string $str)
+    {
+        $scheme = $this->request->getUri()->getScheme() ?? 'http';
+        $host = $this->request->getUri()->getHost() ?? '127.0.0.1';
+        $port = $this->request->getUri()->getPort() ?? '';
+        $url = '';
+        if ($port == 80 || $port == 443 || empty($port)) {
+            $url = "{$scheme}://{$host}/{$str}";
+        } else {
+            $url = "{$scheme}://{$host}:{$port}/{$str}";
+        }
+        return $url;
+    }
+    /**
+     * 获取用户IP
+     * @return mixed|string
+     */
+    public function userIp()
+    {
+        $Ip = $this->request->getHeader('x-forwarded-for')[0] ?? $this->request->getHeader('x-real-ip')[0] ?? $this->request->getServerParams()['remote_addr'] ?? '0.0.0.0';
+        return $Ip;
+    }
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
runtime/container/scan.cache


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff