浏览代码

投诉举报

rkljw 7 月之前
父节点
当前提交
98531cfe06

+ 11 - 2
.env

@@ -11,7 +11,16 @@ DB_CHARSET=utf8mb4
 DB_COLLATION=utf8mb4_unicode_ci
 DB_PREFIX=
 
-REDIS_HOST=192.168.1.102
+REDIS_HOST=192.168.1.201
 REDIS_AUTH=123456
 REDIS_PORT=6379
-REDIS_DB=0
+REDIS_DB=0
+
+
+#小程序获取openid
+WECHAT = https://api.weixin.qq.com/
+
+#小程序appID
+APPID = wx830ada852dd1707f
+#小程序SECRET
+APP_SECRET = 09d1ac9287cb6f3c5e81aa27a6b7138e

+ 3 - 2
app/Controller/AbstractController.php

@@ -46,9 +46,10 @@ abstract class AbstractController
         // 第一个参数对应日志的 name, 第二个参数对应 config/autoload/logger.php 内的 key
         $this->logger = $loggerFactory->get('admin_consumer:', 'default');
         $headers = $this->request->getHeaders();
-        if($headers &&  isset($headers['token']) && $headers['token'][0]!='null' && isset($headers['token'][0])){
+//        var_dump("ceshi:",$headers);
+        if($headers &&  isset($headers['token']) && $headers['token'][0]!='null' && isset($headers['token'][0]) && $headers['token'][0]!=''){
             $userInfo = $this->jwt->getClaimsByToken($headers['token'][0]);
-//            var_dump("用户信息:",$userInfo,$headers);
+            var_dump("用户信息:",$userInfo);
             $this->UserId = $userInfo['uid'];
             $this->websiteId = $userInfo['website_id']??0;
         }

+ 48 - 0
app/Controller/ChatController.php

@@ -13,6 +13,9 @@ 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;
+
 /**
  *
  * Class ChatController
@@ -245,4 +248,49 @@ class ChatController extends AbstractController
           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);
+      }
+
 }

+ 136 - 1
app/Controller/LoginController.php

@@ -8,6 +8,8 @@ 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;
 /**
  * @AutoController()
  */
@@ -88,11 +90,144 @@ class LoginController extends AbstractController
         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()
+    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']
+            ];
+            $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'],
+        ];
+        // 使用默认场景登录
+        $token = $jwt->getToken('default', $userData);
+        $data = [
+            'token' => $token->toString(),
+            'exp' => $jwt->getTTL($token->toString()),
+        ];
+        return Result::success($data);
+
+    }
+
+    public function httpPost()
     {
 
     }

+ 48 - 19
app/Controller/PublicController.php

@@ -62,12 +62,14 @@ class PublicController extends AbstractController
     {
         $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());
@@ -193,7 +195,12 @@ class PublicController extends AbstractController
         }
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
+        if($requireData['id']){
+            $result = $this->publicServiceClient->userUpLetterOfComplaint($requireData);
+        }else{
+            $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
+        }
+
         return $result ? Result::success($result['data']) : Result::error($result['message']);
     }
 
@@ -232,7 +239,8 @@ class PublicController extends AbstractController
     {
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        if(isset($data['is_admin']) && !empty($data['is_admin'])){
+        var_dump("用户id:",$this->UserId);
+        if(isset($requireData['is_admin']) && !empty($requireData['is_admin'])){
             unset( $requireData['user_id']);
         }
         $result = $this->publicServiceClient->getLetterOfComplaint($requireData);
@@ -247,10 +255,16 @@ class PublicController extends AbstractController
     {
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        if(isset($data['is_admin']) && !empty($data['is_admin'])){
+        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']);
     }
 
@@ -262,7 +276,7 @@ class PublicController extends AbstractController
     {
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        if(isset($data['is_admin']) && !empty($data['is_admin'])){
+        if(isset($requireData['is_admin']) && !empty($requireData['is_admin'])){
             unset( $requireData['user_id']);
         }
         $result = $this->publicServiceClient->delLetterOfComplaint($requireData);
@@ -317,11 +331,11 @@ class PublicController extends AbstractController
 
         if ($zip->open($zipFileName, ZipArchive::CREATE) === TRUE) {
             // 将要下载的文件逐个添加到zip文件中
-            $string = trim($requireData['files'], "[]'"); // 去掉最外层的方括号和单引号(注意:这里假设了单引号,如果是双引号则替换为 ")
-            $string = str_replace("'", '', $string); // 去掉所有剩余的单引号(如果原字符串中使用的是双引号,则替换为双引号)
-            $filePaths = explode(',', $string);
-            foreach ($filePaths as $filePathu) {
-                $attachmentItem = 'public'.$filePathu;
+//            $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文件
@@ -333,20 +347,35 @@ class PublicController extends AbstractController
         } else {
             return Result::error('无法创建zip文件');
         }
+    }
 
-
-        // 假设我们从请求中获取一个名为'filename'的查询参数
-//        $filenameParam = $request->input('filename', 'files.zip'); // 如果没有提供'filename',则使用'default_filename.csv'
-//
-//        // 构造完整的文件路径(这里假设文件都存放在public目录下)
-//        $filePath = BASE_PATH . '/public/zip/files.zip'; // 注意:这里应该是你实际文件的路径
-//
-//        // 注意:download方法的第二个参数是可选的,用于指定下载时的文件名
-//        // 如果不需要动态设置下载文件名,可以省略第二个参数或传递null
-//        return $response->download($filePath, $filenameParam);
+    /**
+     * 检测是否被处理
+     * @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'] = $this->UserId;
+        $result = $this->publicServiceClient->checkMeasure($requireData);
+        return $result['code']==200 ? Result::success() : Result::error("已经处理了");
     }
 
 
 
 
+
 }

+ 14 - 0
app/JsonRpc/PublicRpcService.php

@@ -85,6 +85,13 @@ class PublicRpcService extends AbstractServiceClient implements PublicRpcService
         return $this->__request(__FUNCTION__, $data);
     }
 
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function userUpLetterOfComplaint(array $data){
+        return $this->__request(__FUNCTION__, $data);
+    }
     /**
      * @param array $data
      * @return array|mixed
@@ -133,4 +140,11 @@ class PublicRpcService extends AbstractServiceClient implements PublicRpcService
         return $this->__request(__FUNCTION__, $data);
     }
 
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function checkMeasure(array $data){
+        return $this->__request(__FUNCTION__, $data);
+    }
 }

+ 13 - 0
app/JsonRpc/PublicRpcServiceInterface.php

@@ -44,6 +44,13 @@ interface PublicRpcServiceInterface
      */
     public function upLetterOfComplaint(array $data);
 
+    /**
+     * 用户端更新投诉举报信息
+     * @param array $data
+     * @return mixed
+     */
+    public function userUpLetterOfComplaint(array $data);
+
     /**
      * @param array $data
      * @return mixed
@@ -79,4 +86,10 @@ interface PublicRpcServiceInterface
      */
     public function delLetterType(array $data);
 
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkMeasure(array $data);
+
 }

+ 16 - 0
app/JsonRpc/UserService.php

@@ -124,4 +124,20 @@ class UserService extends AbstractServiceClient implements UserServiceInterface
     public function roleInfo(array $data){
         return $this->__request(__FUNCTION__, $data);
     }
+
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function getWechatInfo(array $data){
+        return $this->__request(__FUNCTION__, $data);
+    }
+
+    /**
+     * @param array $data
+     * @return array|mixed
+     */
+    public function addWechatInfo(array $data){
+        return $this->__request(__FUNCTION__, $data);
+    }
 }

+ 12 - 0
app/JsonRpc/UserServiceInterface.php

@@ -86,4 +86,16 @@ interface UserServiceInterface
      * @return array
      */
     public function roleInfo(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function getWechatInfo(array $data);
+
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function addWechatInfo(array $data);
 }

+ 12 - 2
app/Tools/CommonService.php

@@ -16,7 +16,17 @@ 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('文件名后缀不允许');
         }
@@ -40,7 +50,7 @@ class CommonService
         $showPath = $filePath . DIRECTORY_SEPARATOR . $fileName;
         $uploadedFile->moveTo($finalPath);
 
-        return ['id' => uniqid(), 'src' => $showPath, 'fileName' => $fileName];
+        return ['id' => uniqid(), 'src' => $showPath, 'fileName' => $fileName,'fileType'=>$ext];
     }
 
 

+ 58 - 0
app/Tools/PublicData.php

@@ -50,4 +50,62 @@ class PublicData
         return $generator->generate();
     }
 
+    public static function http_get($url)
+    {
+        $oCurl = curl_init();
+        if (stripos($url, "https://") !== false) {
+            curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
+            curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
+        }
+        curl_setopt($oCurl, CURLOPT_URL, $url);
+        curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
+        $sContent = curl_exec($oCurl);
+        $aStatus = curl_getinfo($oCurl);
+        curl_close($oCurl);
+        if (intval($aStatus["http_code"]) == 200) {
+            return $sContent;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * POST 请求
+     * @param string $url
+     * @param array $param
+     * @param boolean $post_file 是否文件上传
+     * @return string content
+     */
+    public static function http_post($url, $param, $post_file = false)
+    {
+        $oCurl = curl_init();
+        if (stripos($url, "https://") !== false) {
+            curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
+            curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
+        }
+        if (is_string($param) || $post_file) {
+            $strPOST = $param;
+        } else {
+            $aPOST = [];
+            foreach ($param as $key => $val) {
+                $aPOST[] = $key . "=" . urlencode($val);
+            }
+            $strPOST = join("&", $aPOST);
+        }
+        curl_setopt($oCurl, CURLOPT_URL, $url);
+        curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($oCurl, CURLOPT_POST, true);
+        curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
+        $sContent = curl_exec($oCurl);
+        $aStatus = curl_getinfo($oCurl);
+        curl_close($oCurl);
+        if (intval($aStatus["http_code"]) == 200) {
+            return $sContent;
+        } else {
+            return false;
+        }
+    }
+
 }

+ 3 - 1
config/api/public.php

@@ -2,5 +2,7 @@
 
 declare(strict_types=1);
 use Hyperf\HttpServer\Router\Router;
-Router::addRoute(['GET', 'POST', 'HEAD'], '/verifyCode', 'App\Controller\IndexController@verifyCode');
+Router::addRoute(['GET', 'POST'], '/verifyCode', 'App\Controller\IndexController@verifyCode');
+
+//Router::addRoute(['GET','POST'], '/public/checkMeasure', 'App\Controller\PublicController@checkMeasure');
 

+ 3 - 0
config/api/user.php

@@ -3,4 +3,7 @@
 declare(strict_types=1);
 use Hyperf\HttpServer\Router\Router;
 Router::post('/api/login', 'App\Controller\LoginController@login');
+Router::post('/api/checkVerifyCode', 'App\Controller\LoginController@checkVerifyCode');
+
+Router::post('/api/registerOrLogin', 'App\Controller\LoginController@registerOrLogin');
 

+ 1 - 1
config/autoload/amqp.php

@@ -3,7 +3,7 @@
 return [
     'enable' => true,
     'default' => [
-        'host' => '192.168.1.102',
+        'host' => '192.168.1.201',
         'port' => 5672,
         'user' => 'admin',
         'password' => '123456',

+ 3 - 2
runtime/container/proxy/App_Controller_AbstractController.proxy.php

@@ -40,9 +40,10 @@ abstract class AbstractController
         // 第一个参数对应日志的 name, 第二个参数对应 config/autoload/logger.php 内的 key
         $this->logger = $loggerFactory->get('admin_consumer:', 'default');
         $headers = $this->request->getHeaders();
-        if ($headers && isset($headers['token']) && $headers['token'][0] != 'null' && isset($headers['token'][0])) {
+        //        var_dump("ceshi:",$headers);
+        if ($headers && isset($headers['token']) && $headers['token'][0] != 'null' && isset($headers['token'][0]) && $headers['token'][0] != '') {
             $userInfo = $this->jwt->getClaimsByToken($headers['token'][0]);
-            //            var_dump("用户信息:",$userInfo,$headers);
+            var_dump("用户信息:", $userInfo);
             $this->UserId = $userInfo['uid'];
             $this->websiteId = $userInfo['website_id'] ?? 0;
         }

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

@@ -13,6 +13,8 @@ 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;
 /**
  *
  * Class ChatController
@@ -182,4 +184,39 @@ class ChatController extends AbstractController
         $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);
+    }
 }

+ 90 - 1
runtime/container/proxy/App_Controller_LoginController.proxy.php

@@ -10,6 +10,8 @@ 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;
 /**
  * @AutoController()
  */
@@ -79,11 +81,98 @@ class LoginController extends AbstractController
         $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()
+    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']];
+            $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'],
+        ];
+        // 使用默认场景登录
+        $token = $jwt->getToken('default', $userData);
+        $data = ['token' => $token->toString(), 'exp' => $jwt->getTTL($token->toString())];
+        return Result::success($data);
+    }
+    public function httpPost()
     {
     }
     # http头部必须携带token才能访问的路由

+ 38 - 20
runtime/container/proxy/App_Controller_PublicController.proxy.php

@@ -67,12 +67,14 @@ class PublicController extends AbstractController
     {
         $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());
@@ -148,7 +150,11 @@ class PublicController extends AbstractController
         }
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
+        if ($requireData['id']) {
+            $result = $this->publicServiceClient->userUpLetterOfComplaint($requireData);
+        } else {
+            $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
+        }
         return $result ? Result::success($result['data']) : Result::error($result['message']);
     }
     /**
@@ -178,7 +184,8 @@ class PublicController extends AbstractController
     {
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        if (isset($data['is_admin']) && !empty($data['is_admin'])) {
+        var_dump("用户id:", $this->UserId);
+        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
             unset($requireData['user_id']);
         }
         $result = $this->publicServiceClient->getLetterOfComplaint($requireData);
@@ -192,10 +199,16 @@ class PublicController extends AbstractController
     {
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        if (isset($data['is_admin']) && !empty($data['is_admin'])) {
+        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']);
     }
     /**
@@ -206,7 +219,7 @@ class PublicController extends AbstractController
     {
         $requireData = $this->request->all();
         $requireData['user_id'] = $this->UserId;
-        if (isset($data['is_admin']) && !empty($data['is_admin'])) {
+        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
             unset($requireData['user_id']);
         }
         $result = $this->publicServiceClient->delLetterOfComplaint($requireData);
@@ -249,13 +262,11 @@ class PublicController extends AbstractController
         //        $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 ($filePaths as $filePathu) {
-                $attachmentItem = 'public' . $filePathu;
+            //            $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文件
@@ -267,14 +278,21 @@ class PublicController extends AbstractController
         } else {
             return Result::error('无法创建zip文件');
         }
-        // 假设我们从请求中获取一个名为'filename'的查询参数
-        //        $filenameParam = $request->input('filename', 'files.zip'); // 如果没有提供'filename',则使用'default_filename.csv'
-        //
-        //        // 构造完整的文件路径(这里假设文件都存放在public目录下)
-        //        $filePath = BASE_PATH . '/public/zip/files.zip'; // 注意:这里应该是你实际文件的路径
-        //
-        //        // 注意:download方法的第二个参数是可选的,用于指定下载时的文件名
-        //        // 如果不需要动态设置下载文件名,可以省略第二个参数或传递null
-        //        return $response->download($filePath, $filenameParam);
+    }
+    /**
+     * 检测是否被处理
+     * @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'] = $this->UserId;
+        $result = $this->publicServiceClient->checkMeasure($requireData);
+        return $result['code'] == 200 ? Result::success() : Result::error("已经处理了");
     }
 }

+ 18 - 1
runtime/container/proxy/App_JsonRpc_PublicRpcServiceInterface.rpc-client.proxy.php

@@ -2,7 +2,7 @@
 
 namespace App\JsonRpc;
 
-class PublicRpcServiceInterface_a00970922e7faac88522fc2e8e85818d extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements PublicRpcServiceInterface
+class PublicRpcServiceInterface_b23b259d2bf153dc659dd410db44ac2a extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements PublicRpcServiceInterface
 {
     /**
      * @param array $data
@@ -63,6 +63,15 @@ class PublicRpcServiceInterface_a00970922e7faac88522fc2e8e85818d extends \Hyperf
     {
         return $this->client->__call(__FUNCTION__, func_get_args());
     }
+    /**
+     * 用户端更新投诉举报信息
+     * @param array $data
+     * @return mixed
+     */
+    public function userUpLetterOfComplaint(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
     /**
      * @param array $data
      * @return mixed
@@ -111,4 +120,12 @@ class PublicRpcServiceInterface_a00970922e7faac88522fc2e8e85818d extends \Hyperf
     {
         return $this->client->__call(__FUNCTION__, func_get_args());
     }
+    /**
+     * @param array $data
+     * @return mixed
+     */
+    public function checkMeasure(array $data)
+    {
+        return $this->client->__call(__FUNCTION__, func_get_args());
+    }
 }

+ 17 - 1
runtime/container/proxy/App_JsonRpc_UserServiceInterface.rpc-client.proxy.php

@@ -2,7 +2,7 @@
 
 namespace App\JsonRpc;
 
-class UserServiceInterface_823832dbf21fc456154e86f33810c1a9 extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements UserServiceInterface
+class UserServiceInterface_c87d81348545884dd699f8f3dd42aaf4 extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements UserServiceInterface
 {
     /**
      * @param array $data
@@ -114,4 +114,20 @@ class UserServiceInterface_823832dbf21fc456154e86f33810c1a9 extends \Hyperf\RpcC
     {
         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());
+    }
 }

+ 12 - 1
runtime/container/proxy/App_Tools_CommonService.proxy.php

@@ -22,6 +22,17 @@ 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('文件名后缀不允许');
         }
@@ -44,7 +55,7 @@ class CommonService
         $finalPath = BASE_PATH . DIRECTORY_SEPARATOR . $allDir . DIRECTORY_SEPARATOR . $fileName;
         $showPath = $filePath . DIRECTORY_SEPARATOR . $fileName;
         $uploadedFile->moveTo($finalPath);
-        return ['id' => uniqid(), 'src' => $showPath, 'fileName' => $fileName];
+        return ['id' => uniqid(), 'src' => $showPath, 'fileName' => $fileName, 'fileType' => $ext];
     }
     //检测文件是否合法
     public static function checkMimeType(UploadedFile $uploadedFile, string $ext = '')

文件差异内容过多而无法显示
+ 0 - 0
runtime/container/scan.cache


+ 1 - 1
runtime/hyperf.pid

@@ -1 +1 @@
-22613
+28085

部分文件因为文件数量过多而无法显示