FengR 9 luni în urmă
comite
c456c10024
100 a modificat fișierele cu 20881 adăugiri și 0 ștergeri
  1. 23 0
      .gitignore
  2. 8 0
      .idea/.gitignore
  3. 6 0
      .idea/misc.xml
  4. 8 0
      .idea/modules.xml
  5. 174 0
      .idea/news_producer.iml
  6. 170 0
      .idea/php.xml
  7. 6 0
      .idea/vcs.xml
  8. 54 0
      Dockerfile
  9. 21 0
      LICENSE
  10. 36 0
      README.en.md
  11. 63 0
      README.md
  12. 20 0
      app/Amqp/Producer/MqProducer.php
  13. 24 0
      app/Constants/ErrorCode.php
  14. 30 0
      app/Controller/AbstractController.php
  15. 29 0
      app/Controller/IndexController.php
  16. 38 0
      app/Exception/Handler/AppExceptionHandler.php
  17. 43 0
      app/Exception/Handler/JsonRpcExceptionHandler.php
  18. 1320 0
      app/JsonRpc/ClientService.php
  19. 22 0
      app/JsonRpc/ClientServiceInterface.php
  20. 3776 0
      app/JsonRpc/WebService.php
  21. 209 0
      app/JsonRpc/WebServiceInterface.php
  22. 66 0
      app/Listener/DbQueryExecutedListener.php
  23. 35 0
      app/Listener/ResumeExitCoordinatorListener.php
  24. 27 0
      app/Model/AdPlace.php
  25. 27 0
      app/Model/Article.php
  26. 27 0
      app/Model/ArticleData.php
  27. 27 0
      app/Model/ArticleIgnore.php
  28. 27 0
      app/Model/ArticleSurvey copy.php
  29. 27 0
      app/Model/ArticleSurvey.php
  30. 27 0
      app/Model/Book.php
  31. 27 0
      app/Model/Category.php
  32. 22 0
      app/Model/Character.php
  33. 27 0
      app/Model/ChatGroups.php
  34. 27 0
      app/Model/ChatGroupsMember.php
  35. 27 0
      app/Model/ChatRecords.php
  36. 27 0
      app/Model/Company.php
  37. 22 0
      app/Model/Couplet.php
  38. 62 0
      app/Model/Department.php
  39. 27 0
      app/Model/District.php
  40. 22 0
      app/Model/Festival.php
  41. 27 0
      app/Model/FooterCategory.php
  42. 27 0
      app/Model/FooterContent.php
  43. 29 0
      app/Model/Good.php
  44. 28 0
      app/Model/GroupImp.php
  45. 28 0
      app/Model/GroupMemberImp.php
  46. 28 0
      app/Model/GroupTalkImp.php
  47. 28 0
      app/Model/GroupTalkMessagerImp.php
  48. 22 0
      app/Model/HistoryToday.php
  49. 22 0
      app/Model/Idiom.php
  50. 27 0
      app/Model/JobApply.php
  51. 27 0
      app/Model/JobCompany.php
  52. 27 0
      app/Model/JobEnum.php
  53. 27 0
      app/Model/JobHunting.php
  54. 27 0
      app/Model/JobIndustry.php
  55. 27 0
      app/Model/JobNature.php
  56. 27 0
      app/Model/JobPosition.php
  57. 27 0
      app/Model/JobRecruiting.php
  58. 27 0
      app/Model/JobRemuse.php
  59. 27 0
      app/Model/JobResume.php
  60. 27 0
      app/Model/Link.php
  61. 19 0
      app/Model/Model copy.php
  62. 19 0
      app/Model/Model.php
  63. 27 0
      app/Model/Notice.php
  64. 27 0
      app/Model/Project.php
  65. 22 0
      app/Model/Riddle.php
  66. 29 0
      app/Model/User.php
  67. 27 0
      app/Model/UserInfo.php
  68. 27 0
      app/Model/Web.php
  69. 27 0
      app/Model/Website.php
  70. 32 0
      app/Model/WebsiteCategory.php
  71. 27 0
      app/Model/WebsiteColumn.php
  72. 27 0
      app/Model/WebsiteGroup.php
  73. 27 0
      app/Model/WebsiteRole.php
  74. 27 0
      app/Model/WebsiteRoleUser.php
  75. 27 0
      app/Model/WebsiteTemplate.php
  76. 27 0
      app/Model/WebsiteTemplateInfo.php
  77. 27 0
      app/Model/WhiteRouter.php
  78. 31 0
      app/Model/complaint.php
  79. 54 0
      app/Tools/PublicData.php
  80. 48 0
      app/Tools/Result.php
  81. 96 0
      composer.json
  82. 12513 0
      composer.lock
  83. 42 0
      config/autoload/amqp.php
  84. 21 0
      config/autoload/annotations.php
  85. 13 0
      config/autoload/aspects.php
  86. 19 0
      config/autoload/cache.php
  87. 13 0
      config/autoload/commands.php
  88. 28 0
      config/autoload/config_center.php
  89. 75 0
      config/autoload/databases.php
  90. 13 0
      config/autoload/dependencies.php
  91. 44 0
      config/autoload/devtool.php
  92. 22 0
      config/autoload/exceptions.php
  93. 15 0
      config/autoload/listeners.php
  94. 35 0
      config/autoload/logger.php
  95. 15 0
      config/autoload/middlewares.php
  96. 13 0
      config/autoload/processes.php
  97. 29 0
      config/autoload/redis.php
  98. 47 0
      config/autoload/server.php
  99. 33 0
      config/config.php
  100. 21 0
      config/container.php

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+# Build and Release Folders
+bin-debug/
+bin-release/
+[Oo]bj/
+[Bb]in/
+
+# Other files and folders
+.settings/
+public
+vendor
+.env
+
+
+# Executables
+*.swf
+*.air
+*.ipa
+*.apk
+runtime
+runtime/*
+# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
+# should NOT be excluded as they contain compiler settings and other important
+# information for Eclipse / Flash Builder.

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 6 - 0
.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/news_producer.iml" filepath="$PROJECT_DIR$/.idea/news_producer.iml" />
+    </modules>
+  </component>
+</project>

+ 174 - 0
.idea/news_producer.iml

@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/./test" isTestSource="true" packagePrefix="HyperfTest\" />
+      <sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="App\" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/brick/math" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/carbonphp/carbon-doctrine-types" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/clue/ndjson-react" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/annotations" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/evenement/evenement" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/fidry/cpu-core-counter" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/fig/http-message-util" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/friendsofphp/php-cs-fixer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/fukuball/jieba-php" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/graham-campbell/result-type" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hamcrest/hamcrest-php" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/code-parser" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/codec" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/collection" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/command" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/conditionable" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/config" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/config-center" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/config-nacos" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/constants" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/consul" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/context" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/contract" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/coordinator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/coroutine" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/database" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/db-connection" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/devtool" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/di" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/dispatcher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/engine" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/engine-contract" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/event" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/exception-handler" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/framework" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/guzzle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/http-message" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/http-server" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/json-rpc" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/load-balancer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/logger" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/macroable" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/memory" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/model-listener" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/nacos" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/paginator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/pipeline" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/pool" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/process" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/redis" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/rpc" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/rpc-server" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/serializer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/server" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/service-governance" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/service-governance-consul" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/service-governance-nacos" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/snowflake" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/stdlib" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/stringable" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/support" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/tappable" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/testing" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/utils" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/hyperf/watcher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/illuminate/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/illuminate/collections" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/illuminate/conditionable" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/illuminate/contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/illuminate/macroable" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/illuminate/support" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/jetbrains/phpstorm-attributes" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/laminas/laminas-mime" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/laminas/laminas-stdlib" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/markrogoyski/math-php" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/mockery/mockery" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/nesbot/carbon" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/nikic/fast-route" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/version" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/php-di/phpdoc-reader" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpoption/phpoption" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpstan/phpstan" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-invoker" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/clock" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/event-dispatcher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-server-handler" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-server-middleware" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/simple-cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/ramsey/collection" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/ramsey/uuid" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/child-process" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/dns" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/event-loop" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/promise" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/socket" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/react/stream" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/cli-parser" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/complexity" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/lines-of-code" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-reflector" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/type" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/swoole/ide-helper" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/swow/psr7-plus" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/options-resolver" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-grapheme" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-normalizer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php80" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php81" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/stopwatch" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/string" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/vlucas/phpdotenv" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/voku/portable-ascii" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 170 - 0
.idea/php.xml

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PhpIncludePathManager">
+    <include_path>
+      <path value="$PROJECT_DIR$/vendor/swow/psr7-plus" />
+      <path value="$PROJECT_DIR$/vendor/symfony/console" />
+      <path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
+      <path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/filesystem" />
+      <path value="$PROJECT_DIR$/vendor/symfony/finder" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
+      <path value="$PROJECT_DIR$/vendor/symfony/options-resolver" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-grapheme" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php81" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php83" />
+      <path value="$PROJECT_DIR$/vendor/symfony/process" />
+      <path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/stopwatch" />
+      <path value="$PROJECT_DIR$/vendor/symfony/string" />
+      <path value="$PROJECT_DIR$/vendor/symfony/translation" />
+      <path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
+      <path value="$PROJECT_DIR$/vendor/vlucas/phpdotenv" />
+      <path value="$PROJECT_DIR$/vendor/illuminate/cache" />
+      <path value="$PROJECT_DIR$/vendor/voku/portable-ascii" />
+      <path value="$PROJECT_DIR$/vendor/illuminate/contracts" />
+      <path value="$PROJECT_DIR$/vendor/illuminate/support" />
+      <path value="$PROJECT_DIR$/vendor/illuminate/collections" />
+      <path value="$PROJECT_DIR$/vendor/illuminate/macroable" />
+      <path value="$PROJECT_DIR$/vendor/fukuball/jieba-php" />
+      <path value="$PROJECT_DIR$/vendor/brick/math" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/snowflake" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/paginator" />
+      <path value="$PROJECT_DIR$/vendor/ramsey/uuid" />
+      <path value="$PROJECT_DIR$/vendor/carbonphp/carbon-doctrine-types" />
+      <path value="$PROJECT_DIR$/vendor/ramsey/collection" />
+      <path value="$PROJECT_DIR$/vendor/clue/ndjson-react" />
+      <path value="$PROJECT_DIR$/vendor/composer" />
+      <path value="$PROJECT_DIR$/vendor/illuminate/conditionable" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/annotations" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/inflector" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
+      <path value="$PROJECT_DIR$/vendor/evenement/evenement" />
+      <path value="$PROJECT_DIR$/vendor/fidry/cpu-core-counter" />
+      <path value="$PROJECT_DIR$/vendor/fig/http-message-util" />
+      <path value="$PROJECT_DIR$/vendor/friendsofphp/php-cs-fixer" />
+      <path value="$PROJECT_DIR$/vendor/graham-campbell/result-type" />
+      <path value="$PROJECT_DIR$/vendor/guzzlehttp/guzzle" />
+      <path value="$PROJECT_DIR$/vendor/guzzlehttp/promises" />
+      <path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
+      <path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/cache" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/code-parser" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/codec" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/collection" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/command" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/conditionable" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/config" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/config-center" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/config-nacos" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/constants" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/consul" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/context" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/contract" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/coordinator" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/coroutine" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/database" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/db-connection" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/devtool" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/di" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/dispatcher" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/engine" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/engine-contract" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/event" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/exception-handler" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/framework" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/guzzle" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/http-message" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/http-server" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/json-rpc" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/load-balancer" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/logger" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/macroable" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/memory" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/model-listener" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/nacos" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/pipeline" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/pool" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/process" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/redis" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/rpc" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/rpc-server" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/serializer" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/server" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/service-governance" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/service-governance-consul" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/service-governance-nacos" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/stdlib" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/stringable" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/support" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/tappable" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/testing" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/utils" />
+      <path value="$PROJECT_DIR$/vendor/hyperf/watcher" />
+      <path value="$PROJECT_DIR$/vendor/jetbrains/phpstorm-attributes" />
+      <path value="$PROJECT_DIR$/vendor/laminas/laminas-mime" />
+      <path value="$PROJECT_DIR$/vendor/laminas/laminas-stdlib" />
+      <path value="$PROJECT_DIR$/vendor/markrogoyski/math-php" />
+      <path value="$PROJECT_DIR$/vendor/mockery/mockery" />
+      <path value="$PROJECT_DIR$/vendor/monolog/monolog" />
+      <path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
+      <path value="$PROJECT_DIR$/vendor/nesbot/carbon" />
+      <path value="$PROJECT_DIR$/vendor/nikic/fast-route" />
+      <path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
+      <path value="$PROJECT_DIR$/vendor/phar-io/manifest" />
+      <path value="$PROJECT_DIR$/vendor/phar-io/version" />
+      <path value="$PROJECT_DIR$/vendor/php-di/phpdoc-reader" />
+      <path value="$PROJECT_DIR$/vendor/phpoption/phpoption" />
+      <path value="$PROJECT_DIR$/vendor/phpstan/phpstan" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-invoker" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
+      <path value="$PROJECT_DIR$/vendor/psr/cache" />
+      <path value="$PROJECT_DIR$/vendor/psr/clock" />
+      <path value="$PROJECT_DIR$/vendor/psr/container" />
+      <path value="$PROJECT_DIR$/vendor/psr/event-dispatcher" />
+      <path value="$PROJECT_DIR$/vendor/psr/http-client" />
+      <path value="$PROJECT_DIR$/vendor/psr/http-factory" />
+      <path value="$PROJECT_DIR$/vendor/psr/http-message" />
+      <path value="$PROJECT_DIR$/vendor/psr/http-server-handler" />
+      <path value="$PROJECT_DIR$/vendor/psr/http-server-middleware" />
+      <path value="$PROJECT_DIR$/vendor/psr/log" />
+      <path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
+      <path value="$PROJECT_DIR$/vendor/ralouphie/getallheaders" />
+      <path value="$PROJECT_DIR$/vendor/react/cache" />
+      <path value="$PROJECT_DIR$/vendor/react/child-process" />
+      <path value="$PROJECT_DIR$/vendor/react/dns" />
+      <path value="$PROJECT_DIR$/vendor/react/event-loop" />
+      <path value="$PROJECT_DIR$/vendor/react/promise" />
+      <path value="$PROJECT_DIR$/vendor/react/socket" />
+      <path value="$PROJECT_DIR$/vendor/react/stream" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/cli-parser" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/code-unit" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/complexity" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/diff" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/environment" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/lines-of-code" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/type" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/version" />
+      <path value="$PROJECT_DIR$/vendor/swoole/ide-helper" />
+    </include_path>
+  </component>
+  <component name="PhpProjectSharedConfiguration" php_language_level="8.1" />
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 54 - 0
Dockerfile

@@ -0,0 +1,54 @@
+# Default Dockerfile
+#
+# @link     https://www.hyperf.io
+# @document https://hyperf.wiki
+# @contact  group@hyperf.io
+# @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+
+FROM hyperf/hyperf:8.3-alpine-v3.19-swoole
+LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" app.name="Hyperf"
+
+##
+# ---------- env settings ----------
+##
+# --build-arg timezone=Asia/Shanghai
+ARG timezone
+
+ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
+    APP_ENV=prod \
+    SCAN_CACHEABLE=(true)
+
+# update
+RUN set -ex \
+    # show php version and extensions
+    && php -v \
+    && php -m \
+    && php --ri swoole \
+    #  ---------- some config ----------
+    && cd /etc/php* \
+    # - config PHP
+    && { \
+        echo "upload_max_filesize=128M"; \
+        echo "post_max_size=128M"; \
+        echo "memory_limit=1G"; \
+        echo "date.timezone=${TIMEZONE}"; \
+    } | tee conf.d/99_overrides.ini \
+    # - config timezone
+    && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
+    && echo "${TIMEZONE}" > /etc/timezone \
+    # ---------- clear works ----------
+    && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \
+    && echo -e "\033[42;37m Build Completed :).\033[0m\n"
+
+WORKDIR /opt/www
+
+# Composer Cache
+# COPY ./composer.* /opt/www/
+# RUN composer install --no-dev --no-scripts
+
+COPY . /opt/www
+RUN composer install --no-dev -o && php bin/hyperf.php
+
+EXPOSE 9501
+
+ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Hyperf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 36 - 0
README.en.md

@@ -0,0 +1,36 @@
+# news_producer
+
+#### Description
+新闻资讯
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Instructions
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Contribution
+
+1.  Fork the repository
+2.  Create Feat_xxx branch
+3.  Commit your code
+4.  Create Pull Request
+
+
+#### Gitee Feature
+
+1.  You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2.  Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3.  Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4.  The most valuable open source project [GVP](https://gitee.com/gvp)
+5.  The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6.  The most popular members  [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 63 - 0
README.md

@@ -0,0 +1,63 @@
+# Introduction
+
+This is a skeleton application using the Hyperf framework. This application is meant to be used as a starting place for those looking to get their feet wet with Hyperf Framework.
+
+# Requirements
+
+Hyperf has some requirements for the system environment, it can only run under Linux and Mac environment, but due to the development of Docker virtualization technology, Docker for Windows can also be used as the running environment under Windows.
+
+The various versions of Dockerfile have been prepared for you in the [hyperf/hyperf-docker](https://github.com/hyperf/hyperf-docker) project, or directly based on the already built [hyperf/hyperf](https://hub.docker.com/r/hyperf/hyperf) Image to run.
+
+When you don't want to use Docker as the basis for your running environment, you need to make sure that your operating environment meets the following requirements:  
+
+ - PHP >= 8.1
+ - Any of the following network engines
+   - Swoole PHP extension >= 5.0,with `swoole.use_shortname` set to `Off` in your `php.ini`
+   - Swow PHP extension >= 1.3
+ - JSON PHP extension
+ - Pcntl PHP extension
+ - OpenSSL PHP extension (If you need to use the HTTPS)
+ - PDO PHP extension (If you need to use the MySQL Client)
+ - Redis PHP extension (If you need to use the Redis Client)
+ - Protobuf PHP extension (If you need to use the gRPC Server or Client)
+
+# Installation using Composer
+
+The easiest way to create a new Hyperf project is to use [Composer](https://getcomposer.org/). If you don't have it already installed, then please install as per [the documentation](https://getcomposer.org/download/).
+
+To create your new Hyperf project:
+
+```bash
+composer create-project hyperf/hyperf-skeleton path/to/install
+```
+
+If your development environment is based on Docker you can use the official Composer image to create a new Hyperf project:
+
+```bash
+docker run --rm -it -v $(pwd):/app composer create-project --ignore-platform-reqs hyperf/hyperf-skeleton path/to/install
+```
+
+# Getting started
+
+Once installed, you can run the server immediately using the command below.
+
+```bash
+cd path/to/install
+php bin/hyperf.php start
+```
+
+Or if in a Docker based environment you can use the `docker-compose.yml` provided by the template:
+
+```bash
+cd path/to/install
+docker-compose up
+```
+
+This will start the cli-server on port `9501`, and bind it to all network interfaces. You can then visit the site at `http://localhost:9501/` which will bring up Hyperf default home page.
+
+## Hints
+
+- A nice tip is to rename `hyperf-skeleton` of files like `composer.json` and `docker-compose.yml` to your actual project name.
+- Take a look at `config/routes.php` and `app/Controller/IndexController.php` to see an example of a HTTP entrypoint.
+
+**Remember:** you can always replace the contents of this README.md file to something that fits your project description.

+ 20 - 0
app/Amqp/Producer/MqProducer.php

@@ -0,0 +1,20 @@
+<?php
+
+declare (strict_types = 1);
+
+namespace App\Amqp\Producer;
+
+use Hyperf\Amqp\Annotation\Producer;
+use Hyperf\Amqp\Message\ProducerMessage;
+
+#[Producer(exchange: 'chatprod', routingKey: 'chatprod')]
+class MqProducer extends ProducerMessage
+{
+    public function __construct($data)
+    {
+//        $this->poolName = 'default';
+        var_dump($data, '生产者数据');
+
+        $this->payload = $data;
+    }
+}

+ 24 - 0
app/Constants/ErrorCode.php

@@ -0,0 +1,24 @@
+<?php
+declare(strict_types=1);
+namespace App\Constants;
+use Hyperf\Constants\AbstractConstants;
+use Hyperf\Constants\Annotation\Constants;
+/**
+ * @Constants
+ */
+#[Constants]
+class ErrorCode extends AbstractConstants
+{
+    /**
+     * @Message("Server Error!")
+     */
+    const SERVER_ERROR = 500;
+    /**
+     * @Message("success")
+     */
+    public const SUCCESS = 200;
+    /**
+     * @Message("error")
+     */
+    public const ERROR = 0;
+}

+ 30 - 0
app/Controller/AbstractController.php

@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+namespace App\Controller;
+
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\HttpServer\Contract\RequestInterface;
+use Hyperf\HttpServer\Contract\ResponseInterface;
+use Psr\Container\ContainerInterface;
+
+abstract class AbstractController
+{
+    #[Inject]
+    protected ContainerInterface $container;
+
+    #[Inject]
+    protected RequestInterface $request;
+
+    #[Inject]
+    protected ResponseInterface $response;
+}

+ 29 - 0
app/Controller/IndexController.php

@@ -0,0 +1,29 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+
+namespace App\Controller;
+
+class IndexController extends AbstractController
+{
+    public function index()
+    {
+        $user = $this->request->input('user', 'Hyperf');
+        $method = $this->request->getMethod();
+
+        return [
+            'method' => $method,
+            'message' => "Hello {$user}.",
+        ];
+        // master
+    }
+}

+ 38 - 0
app/Exception/Handler/AppExceptionHandler.php

@@ -0,0 +1,38 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+namespace App\Exception\Handler;
+
+use Hyperf\Contract\StdoutLoggerInterface;
+use Hyperf\ExceptionHandler\ExceptionHandler;
+use Hyperf\HttpMessage\Stream\SwooleStream;
+use Psr\Http\Message\ResponseInterface;
+use Throwable;
+
+class AppExceptionHandler extends ExceptionHandler
+{
+    public function __construct(protected StdoutLoggerInterface $logger)
+    {
+    }
+
+    public function handle(Throwable $throwable, ResponseInterface $response)
+    {
+        $this->logger->error(sprintf('%s[%s] in %s', $throwable->getMessage(), $throwable->getLine(), $throwable->getFile()));
+        $this->logger->error($throwable->getTraceAsString());
+        return $response->withHeader('Server', 'Hyperf')->withStatus(500)->withBody(new SwooleStream('Internal Server Error.'));
+    }
+
+    public function isValid(Throwable $throwable): bool
+    {
+        return true;
+    }
+}

+ 43 - 0
app/Exception/Handler/JsonRpcExceptionHandler.php

@@ -0,0 +1,43 @@
+<?php
+declare(strict_types=1);
+namespace App\Exception\Handler;
+use http\Env;
+use Hyperf\Config\Annotation\Value;
+use Hyperf\Contract\ConfigInterface;
+use Hyperf\ExceptionHandler\ExceptionHandler;
+use Hyperf\HttpMessage\Stream\SwooleStream;
+use Hyperf\Context\ApplicationContext;
+use Psr\Http\Message\ResponseInterface;
+use Throwable;
+use function Hyperf\Support\env;
+class JsonRpcExceptionHandler extends ExceptionHandler
+{
+    /**
+     * @Value("app_name")
+     * @var $appName
+     */
+    public function handle(Throwable $throwable, ResponseInterface $response)
+    {
+        $responseContents = $response->getBody()->getContents();
+        $responseContents = json_decode($responseContents, true);
+        if (!empty($responseContents['error'])) {
+            $port = null;
+            $config = ApplicationContext::getContainer()->get(ConfigInterface::class);
+            $servers = $config->get('server.servers');
+            foreach ($servers as $k => $server) {
+                if ($server['name'] == 'jsonrpc-http') {
+                    $port = $server['port'];
+                    break;
+                }
+            }
+            $app_name = env("APP_NAME");
+            $responseContents['error']['message'] .= " - {$app_name}:{$port}";
+        }
+        $data = json_encode($responseContents, JSON_UNESCAPED_UNICODE);
+        return $response->withStatus(200)->withBody(new SwooleStream($data));
+    }
+    public function isValid(Throwable $throwable): bool
+    {
+        return true;
+    }
+}

+ 1320 - 0
app/JsonRpc/ClientService.php

@@ -0,0 +1,1320 @@
+<?php
+
+namespace App\JsonRpc;
+
+use Hyperf\RpcServer\Annotation\RpcService;
+use App\Tools\Result;
+use Hyperf\DbConnection\Db;
+//mocle
+use App\Model\Complaint;
+use App\Model\JobEnum;
+use App\Model\User;
+use App\Model\webisitecategory;
+use App\Model\WebsiteTemplate;
+use Hyperf\Coroutine\Coroutine;
+use Hyperf\Redis\Redis;
+use Hyperf\Di\Annotation\Inject;
+use function Hyperf\Support\env;
+use Symfony\Component\Filesystem\Filesystem;
+use Hyperf\Paginator\Paginator;
+
+#[RpcService(name: "ClientService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
+
+class ClientService implements ClientServiceInterface
+{
+
+    #[Inject]
+    protected Redis $redis;
+    /**
+     * @param array $data
+     *  @return array
+     */
+    public function test(array $data): array
+    {
+
+        var_dump($data, '-------1--------');
+        $time = date('Y-m-d H:i:s', time());
+        $data = [
+            'code' => 200,
+            'msg' => 'success',
+            'data' => [
+                'time' => $time,
+                'data' => $data,
+            ]
+        ];
+        //mysql直接查询连接数
+        $activeConnections = Db::select("SHOW STATUS LIKE 'Threads_connected'");
+        // $activeConnectionsCount = $activeConnections[0]->Value ?? 0;
+        // $users = Db::select('SELECT * FROM article;');
+        return ['code' => 200, 'msg' => 'success', 'data' => $activeConnections];
+    }
+
+    public function indexData(array $data): array
+    {
+        $time1 = microtime(true);
+        // 调整获取方式
+        // 根据网站id获取,从website_template中获取 website_template
+        $website_id =  $data['website_id'] ?? 2;
+        $getpage = $data['getpage'] ?? 'index';
+        $template = Db::table('website_template')->where('website_id', $website_id)->first();
+        var_dump("模板:", $template);
+        $template = $template->template_data;
+        $data = json_decode($template, true);
+
+        // $data = json_decode($data['template'], true);
+        // $website_id = $data['base']['website_id'] ?? 2;
+
+        //设置缓存
+        $websiteInfoCacheKey = "awebsite:category:{$website_id}";
+        $websiteInfo =  $this->redis->get($websiteInfoCacheKey);  //false; 
+        if ($websiteInfo === false) {
+            // Redis 中没有缓存,从数据库中查询
+            $websiteInfo = Db::table('website_category')->where('website_id', $website_id)->get()->toArray();
+            // 将查询结果存入 Redis,设置缓存时间为 3600 秒(1 小时)
+            $this->redis->setex($websiteInfoCacheKey, 3600,  json_encode($websiteInfo));
+        } else {
+            // 从 Redis 中获取的数据需要反序列化
+            $websiteInfo = json_decode($websiteInfo, true);
+        }
+        $websiteInfo = Db::table('website_category')->where('website_id', $website_id)->get()->toArray();
+        //取出website
+        var_dump($websiteInfo, 'websiteInfo');
+        //取出category_id 对应的数据
+        $websiteInfoIndexed = array_column($websiteInfo, null, 'category_id');
+        // 取出category_id 对应的aLIas_pinyin 
+        $categoryIds = array_column($websiteInfo, 'category_id');
+        $aliasPinyins = array_column($websiteInfo, 'aLIas_pinyin');
+        $cat_arr = array_combine($categoryIds, $aliasPinyins);
+        // var_dump($cat_arr, 'cat_arr');
+        //根据 category_arr_id 组合出 aLIas_pinyin
+        $catiall = [];
+        //一级所有子级的记录
+        $cat_1st_arr = [];
+        foreach ($websiteInfo as $key => $value) {
+            //算出路由拼音
+            $category_arr_id = json_decode($value->category_arr_id);
+            $pinyin_str = '';
+            foreach ($category_arr_id as $k => $v) {
+                $pinyin_str .= isset($cat_arr[$v]) ? $cat_arr[$v] . '/' : '';
+            }
+            $pinyin_str = rtrim($pinyin_str, '/');
+            $catiall[$value->category_id][] = $pinyin_str;
+            // $cat_id = $value->category_id;
+            $websiteInfoIndexed[$value->category_id]->pinyin = $pinyin_str;
+            // 算出一级  并且算出子级
+            if ($value->pid == 0) {
+                if (empty($cat_1st_arr[$value->category_id]))
+                    $cat_1st_arr[$value->category_id] = [];
+            } else {
+                if ($value->pid == 11) {
+                    var_dump($value->category_id, 'value->category_id');
+                }
+                $cat_1st_arr[$value->pid][] = $value->category_id;
+                if (empty($cat_1st_arr[$value->category_id])) {
+                    $cat_1st_arr[$value->category_id] = [];
+                }
+            }
+        }
+        var_dump($cat_1st_arr, 'cat_1st_arr');
+        $time2 = microtime(true);
+        $time_ = ($time2 - $time1);
+        var_dump($time2, $time1, $time_, '返回路由需要多少时间');
+
+        //获取
+        // $getpage = $data['base']['getpage'] ?? 'index';
+
+
+        var_dump($getpage, 'leixing ');
+        // index = 首页
+        // class = 频道页
+        // list = 列表页
+        // article = 详情页
+        // search = 搜索页
+        // aboutList = 底部导航列表页
+        // aboutArticle = 底部导航详情页
+        // return $cat_1st_arr;
+        // return $cat_1st_arr;
+        // var_dump($cat_1st_arr[11], 'cat_1st_arr'); //一级所有子级的记录
+        // var_dump($catiall, 'catiall');//拼音
+        $templateData = [];
+        switch ($getpage) {
+            case 'index':
+                $ceng =  $data['template']['index'];
+                var_dump($ceng, 'ceng================');
+                foreach ($ceng as $k_ceng => $v_ceng) {
+                    $componetList = $v_ceng['componentList'];
+                    //计算一级的所有子级;组成一个数据,key是一级的category_id,value是所有的子级数据,加上个二级的pinyin属性,放的是catiall的数据
+                    foreach ($componetList as $key => $value) {
+                        //取出componentData
+                        $componentData = $value['componentData'];
+                        if (!$componentData) {
+                            continue;
+                        };
+                        var_dump($componentData, '----------------componentData-------------');
+                        if (is_array($componentData) && count($componentData) > 1 && !isset($componentData['level'])) {
+                            foreach ($componentData as $k1 => $v1) {
+                                // $v1['category_id'] = $v1['category_id'];
+                                $category_id = $v1['category_id'] ?? 0;
+                                //此处应该有值
+                                $imgSize = $v1['imgSize'];
+                                $textSize = $v1['textSize'];
+                                $level = $v1['level'];
+                                // 暂不处理选项卡中带子级栏目数据
+                                // $child = $v1['child'];
+                                //获取子级
+                                // if ($child) {
+                                //     $child_id = $child['id'] ?? 0;
+                                //     $child_imgSize = $child['imgSize'] ?? 0;
+                                //     $child_textSize = $child['textSize'] ?? 0;
+                                // }
+
+                                // 拼音就是路由----
+                                // unset($listType['pinyin']);
+                                //查询查询数据,返回到data字段里,根据这几个
+                                if ($category_id > 0) {
+                                    // var_dump($category_id, '------------------category_id');
+                                    // var_dump($cat_1st_arr, '-----------1-------2');
+                                    // 第一次查询:imgurl 不为空的数据
+                                    if ($imgSize > 0) {
+                                        $imgArticles = Db::table('article')
+                                            ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                                $join->on('article.id', '=', 'article_ignore.article_id')
+                                                    ->where('article_ignore.website_id', '=', $website_id);
+                                            })
+                                            // ->whereNull('article_ignore.article_id')
+                                            ->where(function ($query) {
+                                                $query->whereNull('article_ignore.article_id')
+                                                    ->orWhere(function ($subQuery) {
+                                                        $subQuery->whereNotNull('article_ignore.article_id')
+                                                            ->where('article_ignore.is_ignore', 0)
+                                                            ->where(function ($subSubQuery) {
+                                                                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                    ->orWhereNull('article_ignore.c_show_time');
+                                                            });
+                                                    });
+                                            })
+                                            ->whereIn('catid', $temp_arr = array_merge([$category_id], $cat_1st_arr[$category_id]))->where('status', 1)
+
+
+                                            ->whereNotNull('imgurl')->where('imgurl', '!=', '')->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                        //拼接上拼音
+                                        foreach ($imgArticles as $k => $v) {
+                                            $imgArticles[$k]->pinyin = $catiall[$v->catid][0];
+                                        }
+                                    }
+
+                                    // 第二次查询:imgurl 为空的数据
+                                    if ($textSize > 0) {
+                                        $textArticles = Db::table('article')
+                                            ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                                $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                            })
+                                            // ->whereNull('article_ignore.article_id')
+                                            ->where(function ($query) {
+                                                $query->whereNull('article_ignore.article_id')
+                                                    ->orWhere(function ($subQuery) {
+                                                        $subQuery->whereNotNull('article_ignore.article_id')
+                                                            ->where('article_ignore.is_ignore', 0)
+                                                            ->where(function ($subSubQuery) {
+                                                                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                    ->orWhereNull('article_ignore.c_show_time');
+                                                            });
+                                                    });
+                                            })
+                                            ->whereIn('catid', $temp_arr = array_merge([$category_id], $cat_1st_arr[$category_id]))
+                                            ->where('status', 1)
+                                            ->where('status', 1)->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                        //拼接上拼音
+                                        foreach ($textArticles as $k => $v) {
+                                            $textArticles[$k]->pinyin = $catiall[$v->catid][0];
+                                        }
+                                    }
+                                }
+                                // var_dump($level, 'level');
+                                if ($level > 0) {
+                                    // 取出一级的所有子级
+                                    //取出所有的子级的imgurl 不为空的数据
+                                    if ($imgSize > 0) {
+
+                                        $imgArticles = Db::table('article')
+                                            ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                                $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                            })
+                                            // ->whereNull('article_ignore.article_id')
+                                            ->where(function ($query) {
+                                                $query->whereNull('article_ignore.article_id')
+                                                    ->orWhere(function ($subQuery) {
+                                                        $subQuery->whereNotNull('article_ignore.article_id')
+                                                            ->where('article_ignore.is_ignore', 0)
+                                                            ->where(function ($subSubQuery) {
+                                                                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                    ->orWhereNull('article_ignore.c_show_time');
+                                                            });
+                                                    });
+                                            })
+                                            ->whereRaw('MATCH(level_text) AGAINST(? IN NATURAL LANGUAGE MODE)', [$level])->where('status', 1)->whereIn('catid', $categoryIds)->whereNotNull('imgurl')->where('imgurl', '!=', '')->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                        //拼接上拼音
+                                        foreach ($imgArticles as $k => $v) {
+                                            $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                        }
+                                    }
+                                    //取出所有的子级的imgurl 为空的数据  ->whereNull('imgurl')
+                                    if ($textSize > 0) {
+                                        $textArticles = Db::table('article')->where('status', 1)
+                                            ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                                $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                            })
+                                            // ->whereNull('article_ignore.article_id')
+                                            ->where(function ($query) {
+                                                $query->whereNull('article_ignore.article_id')
+                                                    ->orWhere(function ($subQuery) {
+                                                        $subQuery->whereNotNull('article_ignore.article_id')
+                                                            ->where('article_ignore.is_ignore', 0)
+                                                            ->where(function ($subSubQuery) {
+                                                                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                    ->orWhereNull('article_ignore.c_show_time');
+                                                            });
+                                                    });
+                                            })
+                                            ->whereRaw('MATCH(level_text) AGAINST(? IN NATURAL LANGUAGE MODE)', [$level])->whereIn('catid', $categoryIds)->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                        //拼接上拼音
+                                        foreach ($textArticles as $k => $v) {
+                                            $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                        }
+                                    }
+                                }
+                                $componetList[$key]['componentData']['data'][$k1]['alias'] = $websiteInfoIndexed[$category_id]->alias ?? 'aliasnull' . $category_id;
+                                $componetList[$key]['componentData']['data'][$k1]['pinyin'] = $websiteInfoIndexed[$category_id]->pinyin ?? 'aliasnull' . $category_id;
+                                $componetList[$key]['componentData']['data'][$k1]['category_id'] = $category_id;
+                                $componetList[$key]['componentData']['data'][$k1]['textnum'] = $textArticles ?? [];
+                                $componetList[$key]['componentData']['data'][$k1]['imgnum'] = $imgArticles ?? [];
+                            }
+                        } else {
+                            $category_id = $componentData['category_id'] ?? 0;
+                            //此处应该有值
+                            $imgSize = $componentData['imgSize'];
+                            $textSize = $componentData['textSize'];
+                            $level = $componentData['level'];
+                            $child = $componentData['child'];
+                            //获取子级
+                            if ($child) {
+                                $child_id = $child['id'] ?? 0;
+                                $child_imgSize = $child['imgSize'] ?? 0;
+                                $child_textSize = $child['textSize'] ?? 0;
+                            }
+
+                            // 拼音就是路由----
+                            // unset($listType['pinyin']);
+                            //查询查询数据,返回到data字段里,根据这几个
+                            if ($category_id > 0) {
+                                // var_dump($category_id, '------------------category_id');
+                                // var_dump($cat_1st_arr, '-----------1-------2');
+                                // 第一次查询:imgurl 不为空的数据
+                                if ($imgSize > 0) {
+                                    $imgArticles = Db::table('article')
+                                        ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                            $join->on('article.id', '=', 'article_ignore.article_id')
+                                                ->where('article_ignore.website_id', '=', $website_id);
+                                        })
+                                        // ->whereNull('article_ignore.article_id')
+                                        ->where(function ($query) {
+                                            $query->whereNull('article_ignore.article_id')
+                                                ->orWhere(function ($subQuery) {
+                                                    $subQuery->whereNotNull('article_ignore.article_id')
+                                                        ->where('article_ignore.is_ignore', 0)
+                                                        ->where(function ($subSubQuery) {
+                                                            $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                ->orWhereNull('article_ignore.c_show_time');
+                                                        });
+                                                });
+                                        })
+                                        ->whereIn('catid', $temp_arr = array_merge([$category_id], $cat_1st_arr[$category_id]))->where('status', 1)
+
+
+                                        ->whereNotNull('imgurl')->where('imgurl', '!=', '')->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                    //拼接上拼音
+                                    foreach ($imgArticles as $k => $v) {
+                                        $imgArticles[$k]->pinyin = $catiall[$v->catid][0];
+                                    }
+                                }
+
+                                // 第二次查询:imgurl 为空的数据
+                                if ($textSize > 0) {
+                                    $textArticles = Db::table('article')
+                                        ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                            $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                        })
+                                        // ->whereNull('article_ignore.article_id')
+                                        ->where(function ($query) {
+                                            $query->whereNull('article_ignore.article_id')
+                                                ->orWhere(function ($subQuery) {
+                                                    $subQuery->whereNotNull('article_ignore.article_id')
+                                                        ->where('article_ignore.is_ignore', 0)
+                                                        ->where(function ($subSubQuery) {
+                                                            $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                ->orWhereNull('article_ignore.c_show_time');
+                                                        });
+                                                });
+                                        })
+                                        ->whereIn('catid', $temp_arr = array_merge([$category_id], $cat_1st_arr[$category_id]))
+                                        ->where('status', 1)
+                                        ->where('status', 1)->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                    //拼接上拼音
+                                    foreach ($textArticles as $k => $v) {
+                                        $textArticles[$k]->pinyin = $catiall[$v->catid][0];
+                                    }
+                                }
+                                
+                            }
+                            // var_dump($level, 'level');
+                            if ($level > 0) {
+                                // 取出一级的所有子级
+                                //取出所有的子级的imgurl 不为空的数据
+                                if ($imgSize > 0) {
+
+                                    $imgArticles = Db::table('article')
+                                        ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                            $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                        })
+                                        // ->whereNull('article_ignore.article_id')
+                                        ->where(function ($query) {
+                                            $query->whereNull('article_ignore.article_id')
+                                                ->orWhere(function ($subQuery) {
+                                                    $subQuery->whereNotNull('article_ignore.article_id')
+                                                        ->where('article_ignore.is_ignore', 0)
+                                                        ->where(function ($subSubQuery) {
+                                                            $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                ->orWhereNull('article_ignore.c_show_time');
+                                                        });
+                                                });
+                                        })
+                                        ->whereRaw('MATCH(level_text) AGAINST(? IN NATURAL LANGUAGE MODE)', [$level])->where('status', 1)->whereIn('catid', $categoryIds)->whereNotNull('imgurl')->where('imgurl', '!=', '')->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                    //拼接上拼音
+                                    foreach ($imgArticles as $k => $v) {
+                                        $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                    }
+                                }
+                                //取出所有的子级的imgurl 为空的数据  ->whereNull('imgurl')
+                                if ($textSize > 0) {
+                                    $textArticles = Db::table('article')->where('status', 1)
+                                        ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                            $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                        })
+                                        // ->whereNull('article_ignore.article_id')
+                                        ->where(function ($query) {
+                                            $query->whereNull('article_ignore.article_id')
+                                                ->orWhere(function ($subQuery) {
+                                                    $subQuery->whereNotNull('article_ignore.article_id')
+                                                        ->where('article_ignore.is_ignore', 0)
+                                                        ->where(function ($subSubQuery) {
+                                                            $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                                ->orWhereNull('article_ignore.c_show_time');
+                                                        });
+                                                });
+                                        })
+                                        ->whereRaw('MATCH(level_text) AGAINST(? IN NATURAL LANGUAGE MODE)', [$level])->whereIn('catid', $categoryIds)->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                    //拼接上拼音
+                                    foreach ($textArticles as $k => $v) {
+                                        $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                    }
+                                }
+                            }
+                            
+                            $componetList[$key]['componentData']['data']['alias'] = $websiteInfoIndexed[$category_id]->alias ?? 'aliasnull' . $category_id;
+                            $componetList[$key]['componentData']['data']['pinyin'] = $websiteInfoIndexed[$category_id]->pinyin ?? 'aliasnull' . $category_id;
+                            $componetList[$key]['componentData']['data']['category_id'] = $category_id;
+                            $componetList[$key]['componentData']['data']['textnum'] = $textArticles ?? [];
+                            $componetList[$key]['componentData']['data']['imgnum'] = $imgArticles ?? [];
+                        }
+
+
+                        // $page = $componentData['page'];
+                        // $pageSize = $componentData['pageSize'];
+                        // $listType = $componentData['listType'];
+
+                        //将查询到的数据放到componentData里
+
+                        //判断child
+                        var_dump($child_id, '--------child_id---');
+                        if ($child_id > 0) {
+                            //取出子级的imgurl 不为空的数据
+                            if ($child_imgSize > 0) {
+                                $child_imgArticles = Db::table('article')->where('catid', $child_id)
+                                    ->where('status', 1)
+                                    ->whereNotNull('imgurl')->limit($child_imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                            } else {
+                                $child_imgArticles =  [];
+                            }
+                            //取出子级的imgurl 为空的数据
+                            if ($child_textSize > 0) {
+                                $child_textArticles = Db::table('article')
+                                    ->where('status', 1)
+                                    ->where('catid', $child_id)->whereNull('imgurl')->limit($child_textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                            } else {
+                                $child_textArticles = [];
+                            }
+                            //将查询到的数据放到componentData里
+                            $componetList[$key]['componentData']['data']['child']['alias'] = $websiteInfoIndexed[$child_id]->alias;
+                            $componetList[$key]['componentData']['data']['child']['pinyin'] = $websiteInfoIndexed[$child_id]->pinyin;
+                            $componetList[$key]['componentData']['data']['child']['category_id'] = $child_id;
+                            $componetList[$key]['componentData']['data']['child']['textnum'] = $child_textArticles;
+                            $componetList[$key]['componentData']['data']['child']['imgnum'] = $child_imgArticles;
+                            $componetList[$key]['componentData']['data']['child']['is_url'] = $websiteInfoIndexed[$child_id]->is_url ?? 0;
+
+                            //取出自己
+                            $all_childcat = $cat_1st_arr[$category_id];
+
+                            $componetList[$key]['componentData']['data']['child']['children_count'] = count($all_childcat);
+
+                            $processedChildCat = array_map(function ($v) use ($websiteInfoIndexed, $cat_1st_arr) {
+                                // 从 $websiteInfoIndexed 中获取对应的数据
+                                $info = $websiteInfoIndexed[$v];
+                                var_dump($info, $v, '-------child循环--------');
+                                // 返回一个包含所需信息的数组
+                                return [
+                                    'pinyin' => $info->pinyin,
+                                    'alias' => $info->alias,
+                                    'category_id' => $info->category_id,
+                                    'aLIas_pinyin' => $info->aLIas_pinyin,
+                                    'pid' => $info->pid,
+                                    'cat_arr_id' => $info->category_arr_id ?? ['出错'],
+                                    'is_url' => $info->is_url ?? 0,
+                                    'children_count' => isset($cat_1st_arr[$v]) ? count($cat_1st_arr[$v]) : 0
+
+                                ];
+                            }, $all_childcat);
+                            $componetList[$key]['componentData']['data']['child']['all_childcat'] = $processedChildCat ?? [];
+                        }
+                    }
+                    $data['template']['index'][$k_ceng]['componentList'] = $componetList;
+                }
+                //将修改后的数据放到template里
+                break;
+            case 'class':
+                if (!isset($data['template']['class']['data'][0]['componentList'])) {
+                    break;
+                }
+                $componetList = $data['template']['class']['data'][0]['componentList'];
+                $class_count = count($componetList);
+                $parent_id = $data['template']['class']['parent_id'] ?? 0;
+
+                //获取子级;
+                $child = $cat_1st_arr[$parent_id]; //获取子级
+                // var_dump($child, 'child');
+                //如果$child的数量小于$class_count,就填充一样多的数据给child,如果大于就截取一样的数量给child
+                if (count($child) < $class_count) {
+                    $child = array_pad($child, $class_count, end($child) ?? 0);
+                } elseif (count($child) > $class_count) {
+                    $child = array_slice($child, 0, $class_count);
+                }
+                foreach ($componetList as $key => $value) {
+                    $componentData = $value['componentData'];
+                    //取出imgSize和textSize,获取相应的文章,
+                    $category_id = $child[$key] ?? 0;
+                    $imgSize = $componentData['imgSize'] ?? 0;
+                    $textSize = $componentData['textSize'] ?? 0;
+                    $listType = $componentData['listType'] ?? [];
+                    var_dump($listType, 'before unset listType');
+                    // 定义要移除的元素数组
+                    $valuesToRemove = ['category_name', 'pinyin'];
+                    // 循环移除每个元素
+                    foreach ($valuesToRemove as $value) {
+                        while (($key = array_search($value, $listType)) !== false) {
+                            // 移除该元素
+                            unset($listType[$key]);
+                        }
+                    }
+                    var_dump($listType, 'listType');
+                    //child
+                    $child = $componentData['child'] ?? [];
+
+                    $data_class = [];
+                    //查询imgurl不为空的数据
+                    $imgArticles = Db::table('article')
+                        ->where('catid', $category_id)
+                        ->whereNotNull('imgurl')
+                        ->limit($imgSize)
+                        ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                            $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                        })
+                        ->where(function ($query) {
+                            $query->whereNull('article_ignore.article_id')
+                                ->orWhere(function ($subQuery) {
+                                    $subQuery->whereNotNull('article_ignore.article_id')
+                                        ->where('article_ignore.is_ignore', 0)
+                                        ->where(function ($subSubQuery) {
+                                            $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                ->orWhereNull('article_ignore.c_show_time');
+                                        });
+                                });
+                        })
+                        // ->select($listType)
+                        ->orderBy('updated_at', 'desc')
+                        ->get()
+                        ->toArray();
+                    //拼接上拼音
+                    foreach ($imgArticles as $k => $v) {
+                        $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                    }
+                    //查询imgurl为空的数据
+                    $textArticles = Db::table('article')
+                        ->where('catid', $category_id)
+                        ->whereNull('imgurl')
+                        ->limit($textSize)
+                        ->leftJoin('article_ignore', function ($join) use ($website_id) {
+                            $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                        })
+                        ->where(function ($query) {
+                            $query->whereNull('article_ignore.article_id')
+                                ->orWhere(function ($subQuery) {
+                                    $subQuery->whereNotNull('article_ignore.article_id')
+                                        ->where('article_ignore.is_ignore', 0)
+                                        ->where(function ($subSubQuery) {
+                                            $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                ->orWhereNull('article_ignore.c_show_time');
+                                        });
+                                });
+                        })
+                        ->orderBy('updated_at', 'desc')
+                        ->get()
+                        ->toArray();
+                    //拼接上拼音
+                    foreach ($textArticles as $k => $v) {
+                        $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                    }
+
+                    $data_class['alias'] = $websiteInfoIndexed[$category_id]->alias ?? 'aliasnull' . $category_id;
+                    $data_class['pinyin'] = $websiteInfoIndexed[$category_id]->pinyin ?? 'aliasnull' . $category_id;
+                    $data_class['category_id'] = $category_id;
+                    $data_class['textnum'] = $textArticles ?? [];
+                    $data_class['imgnum'] = $imgArticles ?? [];
+                    $data['data'] = $data_class;
+                }
+                break;
+            case 'list':
+                if (!isset($data['template']['list']['data'][0]['componentList'])) {
+                    break;
+                }
+                $componetListdata = $data['template']['list']['data'];
+                $category_id = $data['template']['list']['category_id'] ?? 0;
+
+                foreach ($componetListdata as $k => $v) {
+                    if (!isset($v['componentList']) || !is_array($v['componentList'])) {
+                        continue; // 如果 componentList 不存在或不是数组,跳过当前循环
+                    }
+                    $componentList = &$data['template']['list']['data'][$k]['componentList'];
+                    var_dump(count($componentList), 'componentList111');
+                    foreach ($componentList as $key => $value) {
+                        $componentData = $value['componentData'];
+                        if (isset($value['componentData']['category_id'])) {
+                            $value['componentData']['category_id'] = $category_id;
+                            $page = $componentData['papageTypege']['page'] ?? 1;
+                            $pageSize = $componentData['papageTypege']['pageSize'] ?? 10;
+                            $listType = $componentData['listType'];
+                            $articals = Db::table('article')
+                                ->where('catid', $category_id)
+                                ->where('status', 1)->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                    $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                })
+                                ->where(function ($query) {
+                                    $query->whereNull('article_ignore.article_id')
+                                        ->orWhere(function ($subQuery) {
+                                            $subQuery->whereNotNull('article_ignore.article_id')
+                                                ->where('article_ignore.is_ignore', 0)
+                                                ->where(function ($subSubQuery) {
+                                                    $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                        ->orWhereNull('article_ignore.c_show_time');
+                                                });
+                                        });
+                                })
+                                ->orderBy('updated_at', 'desc')
+                                ->get();
+                            // ->paginate($pageSize, ['*'], 'page', $page);
+                            //拼接上拼音
+                            foreach ($articals as $k => $v) {
+                                $articals[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                            }
+                            $value['componentData']['data'] = $articals;
+                        }
+                        var_dump(isset($value['componentData']['level']), $key, '---------------------------------------');
+                        if (isset($value['componentData']['level'])) {
+                            //取出imgSize和textSize,获取相应的文章,
+                            $imgSize = $componentData['imgnum'] ?? 0;
+                            $textSize = $componentData['textnum'] ?? 0;
+                            $listType = $componentData['listType'] ?? [];
+                            // 定义要移除的元素数组
+                            $valuesToRemove = ['category_name', 'pinyin'];
+                            // 循环移除每个元素
+                            foreach ($valuesToRemove as $value) {
+                                while (($key = array_search($value, $listType)) !== false) {
+                                    // 移除该元素
+                                    unset($listType[$key]);
+                                }
+                            }
+                            //查询imgurl不为空的数据
+                            if ($imgSize > 0) {
+                                $imgArticles = Db::table('article')
+                                    ->where('catid', $category_id)
+                                    ->whereNotNull('imgurl')
+                                    ->where('status', 1)->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                        $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                    })
+                                    ->where(function ($query) {
+                                        $query->whereNull('article_ignore.article_id')
+                                            ->orWhere(function ($subQuery) {
+                                                $subQuery->whereNotNull('article_ignore.article_id')
+                                                    ->where('article_ignore.is_ignore', 0)
+                                                    ->where(function ($subSubQuery) {
+                                                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                            ->orWhereNull('article_ignore.c_show_time');
+                                                    });
+                                            });
+                                    })
+                                    ->limit($imgSize)
+                                    ->orderBy('updated_at', 'desc')
+                                    ->get()
+                                    ->toArray();
+                                //拼接上拼音
+                                foreach ($imgArticles as $k => $v) {
+                                    $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                }
+                            }
+                            //查询imgurl为空的数据
+                            if ($textSize > 0) {
+                                $textArticles = Db::table('article')
+                                    ->where('catid', $category_id)
+                                    ->whereNull('imgurl')
+                                    ->where('status', 1)->leftJoin('article_ignore', function ($join) use ($website_id) {
+                                        $join->on('article.id', '=', 'article_ignore.article_id')->where('article_ignore.website_id', '=', $website_id);
+                                    })
+                                    ->where(function ($query) {
+                                        $query->whereNull('article_ignore.article_id')
+                                            ->orWhere(function ($subQuery) {
+                                                $subQuery->whereNotNull('article_ignore.article_id')
+                                                    ->where('article_ignore.is_ignore', 0)
+                                                    ->where(function ($subSubQuery) {
+                                                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                                                            ->orWhereNull('article_ignore.c_show_time');
+                                                    });
+                                            });
+                                    })
+                                    ->limit($textSize)
+                                    ->orderBy('updated_at', 'desc')
+                                    ->get()
+                                    ->toArray();
+                                //拼接上拼音
+                                foreach ($textArticles as $k => $v) {
+                                    $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                }
+                            }
+                            //将查询到的数据放到componentData里
+                            $componetList[$key]['componentData']['data']['alias'] = $websiteInfoIndexed[$category_id]->alias ?? 'aliasnull' . $category_id;
+                            $componetList[$key]['componentData']['data']['pinyin'] = $websiteInfoIndexed[$category_id]->pinyin ?? 'aliasnull' . $category_id;
+                            $componetList[$key]['componentData']['data']['category_id'] = $category_id;
+                            $componetList[$key]['componentData']['data']['textnum'] = $textArticles ?? [];
+                            $componetList[$key]['componentData']['data']['imgnum'] = $imgArticles ?? [];
+                            //将修改后的数据放到template里
+                            // $data['template']['list']['data'][0]['componentList'] = $componetList;
+                        }
+                    }
+                }
+
+                break;
+            case 'article':
+                if (!isset($data['template']['article']['data'])) {
+                    break;
+                }
+                $article_id = 51434; //假设这是文章ID
+                $componetListdata = &$data['template']['article']['data'];
+                var_dump($categoryIds, '----------------');
+                // $category_id = $data['template']['article']['category_id'] ?? 0;
+                foreach ($componetListdata as $k => $v) {
+                    foreach ($v['componentList'] as $key => $value) {
+                        $componentData = $value['componentData'];
+                        if (isset($value['componentData']['article_id'])) {
+                            $value['componentData']['article_id'] = $article_id;
+                            // $page = $componentData['papageTypege']['page'] ?? 1;
+                            // $pageSize = $componentData['papageTypege']['pageSize'] ?? 10;
+                            $listType = $componentData['listType'];
+                            //查询数据
+                            $articals = Db::table('article')
+                                ->where('id', $article_id)
+                                ->where('status', 1)
+                                ->leftJoin('article_data', 'article.id', '=', 'article_data.article_id')
+                                ->select('article.*', 'article_data.content')
+                                ->orderBy('updated_at', 'desc')
+                                ->get();
+                            //拼接上拼音
+                            $value['componentData']['data'] = $articals;
+                        }
+                        if (isset($value['componentData']['level'])) {
+
+                            //:1:头条 2:轮播图 3:推荐图 4:最新新闻;5:推荐新闻;6:热点资讯   7:自动关联
+                            //4 update   5 30天之内    6  库中
+                            $level = $componentData['level'] ?? 0;
+                            $imgSize = $componentData['imgnum'] ?? 0;
+                            $textSize = $componentData['textnum'] ?? 0;
+                            if (in_array($level, [1, 2, 3, 6])) {
+                                //查询imgurl不为空的数据
+                                $imgArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNotNull('imgurl')
+                                    ->where('status', 1)
+                                    ->whereRaw('MATCH(level_text) AGAINST(? IN NATURAL LANGUAGE MODE)', [$level])
+                                    ->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                //拼接上拼音
+                                foreach ($imgArticles as $k => $v) {
+                                    $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                }
+                                //查询imgurl为空的数据
+                                $textArticles = Db::table('article')->where('catid', $categoryIds)->whereNull('imgurl')
+                                    ->where('status', 1)
+                                    ->whereRaw('MATCH(level_text) AGAINST(? IN NATURAL LANGUAGE MODE)', [$level])
+                                    ->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                //拼接上拼音
+                                foreach ($textArticles as $k => $v) {
+                                    $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                }
+                            } else if ($level == 4) {
+
+                                //查询imgurl不为空的数据
+                                $imgArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNotNull('imgurl')
+                                    ->where('status', 1)
+                                    ->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+
+
+                                //拼接上拼音
+                                if (!empty($imgArticles)) {
+                                    foreach ($imgArticles as $k => $v) {
+                                        $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                    }
+                                }
+
+                                //查询imgurl为空的数据
+                                $textArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNull('imgurl')
+                                    ->where('status', 1)
+                                    ->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                //拼接上拼音
+                                var_dump('---4------');
+                                if (!empty($textArticles)) {
+                                    foreach ($textArticles as $k => $v) {
+                                        $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                    }
+                                }
+                            } else if ($level == 5) {
+
+                                var_dump($value['componentData']['level'], 'level');
+                                //查询imgurl不为空的数据
+                                $imgArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNotNull('imgurl')
+                                    ->where('status', 1)
+                                    //最近三十天
+                                    ->where('updated_at', '>=', date('Y-m-d H:i:s', strtotime('-30 days')))
+                                    ->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                //拼接上拼音
+                                if (!empty($imgArticles)) {
+                                    foreach ($imgArticles as $k => $v) {
+                                        $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                    }
+                                }
+
+                                //查询imgurl为空的数据
+                                $textArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNull('imgurl')
+                                    ->where('status', 1)
+                                    ->where('updated_at', '>=', date('Y-m-d H:i:s', strtotime('-30 days')))
+                                    ->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                //拼接上拼音
+                                var_dump('---5------');
+                                if (!empty($textArticles)) {
+                                    foreach ($textArticles as $k => $v) {
+                                        $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                    }
+                                }
+                            } else if ($level == 7) {
+                                //获取artical的keyword
+                                $keword = DB::table('artical')->where('id', $article_id)->select('keyword')->get();
+                                $kewordl = $keword[0]->keyword;
+                                $kewordl = explode(',', $kewordl);
+                                //筛选出符合条件的article来
+                                $imgArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNotNull('imgurl')
+                                    ->where('status', 1)
+                                    // ->whereJsonContains('keyword', $kewordl)
+                                    ->whereRaw('MATCH(keyword) AGAINST(? IN NATURAL LANGUAGE MODE)', [$kewordl])
+                                    ->limit($imgSize)->orderBy('updated_at', 'desc')->get()->toArray();
+                                //拼接上拼音
+                                foreach ($imgArticles as $k => $v) {
+                                    $imgArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                }
+
+                                $textArticles = Db::table('article')->whereIn('catid', $categoryIds)->whereNull('imgurl')
+                                    ->where('status', 1)
+                                    // ->whereJsonContains('keyword', $kewordl)
+                                    ->whereRaw('MATCH(keyword) AGAINST(? IN NATURAL LANGUAGE MODE)', [$kewordl])
+                                    ->limit($textSize)->orderBy('updated_at', 'desc')->get()->toArray();
+
+                                //拼接上拼音
+                                foreach ($textArticles as $k => $v) {
+                                    $textArticles[$k]->pinyin = $catiall[$v->catid][0] ?? '=====';
+                                }
+                            }
+                        }
+                        $value['componentData']['data']['imgnum'] = $imgArticles ?? [];
+                        $value['componentData']['data']['textnum'] = $textArticles ?? [];
+                    }
+                }
+                break;
+            case 'search':
+                break;
+            case 'aboutList':
+                $fact_id = 7;
+                $componetList = &$data['template']['aboutList']['componentData'];
+                $componetList['fact_id'] = $fact_id;
+                $content =  Db::table('footer_content')
+                    ->where('fcat_id', $fact_id)
+                    ->orderBy('updated_at', 'desc')
+                    ->get()
+                    ->toArray();
+                $componetList['data'] = $content;
+                break;
+            case 'aboutArticle':
+                $fact_id = 7;
+                $componetList = &$data['template']['aboutList']['componentData'];
+                $componetList['fact_id'] = $fact_id;
+                $content =  Db::table('footer_content')
+                    ->where('id', $fact_id)
+                    ->orderBy('updated_at', 'desc')
+                    ->get()
+                    ->toArray();
+                $componetList['data'] = $content;
+                break;
+            default:
+                $componetList = [];
+                break;
+        }
+        return $data;
+    }
+
+
+    public function addWeb($data)
+    {
+        $result = WebsiteTemplate::insertGetId($data);
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('添加失败');
+        }
+    }
+    public function deleteWeb($data)
+    {
+        $result = WebsiteTemplate::where('id', $data['id'])->delete();
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('删除失败');
+        }
+    }
+    public function updateWeb($data)
+    {
+        $result = WebsiteTemplate::where('id', $data['id'])->update($data);
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('更新失败');
+        }
+    }
+    public function getWebInfo($data)
+    {
+        $result = WebsiteTemplate::where('website_template.id', $data['id'])
+            ->leftJoin('website', 'website.id', '=', 'website_template.website_id')
+            ->select('website_template.*', 'website.website_name as website_name', 'website.website_url as website_url')
+            ->first();
+        return Result::success($result);
+    }
+    public function getWebList($data)
+    {
+        var_dump($data, 'data');
+        $where = [];
+        if (isset($data['website_name'])) {
+            $where[] = ['website.website_name', 'like', '%' . $data['website_name'] . '%'];
+        }
+        if (isset($data['status'])) {
+            $where[] = ['website_template.status', '=', $data['status']];
+        }
+        $result = WebsiteTemplate::where([])
+            ->where($where)
+            ->leftJoin('website', 'website.id', '=', 'website_template.website_id')
+            ->select('website_template.*', 'website.website_name as website_name', 'website.website_url as website_url')
+            ->paginate($data['pageSize'], ['*'], 'page', $data['page']);
+
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('获取列表失败');
+        }
+    }
+    public function updateWebConfig($data)
+    {
+        var_dump($data, 'data1');
+        // return Result::success($data);
+        $where = [];
+        if (isset($data['website_id'])) {
+            $where['website_template.website_id'] = $data['website_id'];
+        }
+        $result = WebsiteTemplate::where([])
+            ->where($where)
+            ->leftJoin('website', 'website.id', '=', 'website_template.website_id')
+            ->select('website_template.id', 'website_template.port', 'website.website_name as website_name', 'website.website_url as website_url', 'website_template.siteId')
+
+            ->first()->toArray();
+        var_dump($result, 'result');
+
+        $domain = json_decode($result['website_url'], true);
+        $domainlist = $domain;
+        var_dump(empty($result['port']), 'port');
+        $domain = $domain[3];
+        if ($domain == null || empty($domain) || !isset($domain)) {
+            return Result::error('域名不存在');
+        }
+        $port = $result['port'];
+        if ($port == null || empty($port) || !isset($port)) {
+            var_dump($port, 'youp0------port');
+            return Result::error('端口不存在');
+        }
+        $postData = [
+            'domain' => $domain,
+            'port' => $port
+        ];
+        var_dump(empty($result['siteId']), 'siteId---');
+
+        if (empty($result['siteId'])) {
+            //实例化对象
+            $api = new bt_api();
+            //获取面板日志
+            $r_data = $api->GetLogs();
+            //输出JSON数据到浏览器
+            echo json_encode($r_data);
+            $webname = [
+                'domain' => $domain,
+                'domainlist' => $domainlist,
+                'count' => count($domainlist) - 1
+            ];
+            $siteData = [
+                'path' => '/www2/www/wwwroot/' . $domain,
+                'ftp' => 'false',
+                'type' => 'PHP',
+                'type_id' => 0,
+                'ps' => $domain,
+                'port' => 80,
+                'version' => '00',
+                'need_index' => 0,
+                'need_404' => 0,
+                'sql' => 'false',
+                'codeing' => 'utf8mb4',
+                'webname' => json_encode($webname),
+                'add_dns_record' => 'false'
+            ];
+
+            $r_data = $api->addSite($siteData);
+            /*
+            {
+            "siteStatus": true,
+            "siteId": 20,
+            "ftpStatus": false,
+            "databaseStatus": false,
+            "gitStatus": false
+             }
+            */
+            var_dump($r_data, '----------1--r_data--------');
+            if (isset($r_data['status']) && $r_data['status'] == false) {
+
+                return Result::error('宝塔添加失败' . $r_data['msg']);
+            }
+            if (isset($r_data['siteStatus']) && $r_data['siteStatus'] == true) {
+
+                //记录siteId
+                $siteId = $r_data['siteId'];
+                //更新网站模板的siteId     WebsiteTemplate  
+                WebsiteTemplate::where('website_id', $data['website_id'])
+                    ->update([
+                        'siteId' => $siteId,
+                        'dir' => '/www2/www/wwwroot/' . $domain,
+                        'status' => 2
+                    ]);
+            }
+            // return Result::success($r_data);
+        }
+        // 使用Guzzle HTTP客户端发送POST请求
+        try {
+            $client = new \GuzzleHttp\Client();
+            $response = $client->post(env('CREATE_WEB', 'http://adminpre.bjzxtw.org.cn/create.php'), [
+                'json' => $postData,
+                'timeout' => 30,
+                'headers' => [
+                    'Content-Type' => 'application/json',
+                ]
+            ]);
+
+            // 获取响应内容
+            $responseBody = $response->getBody()->getContents();
+            $responseData = json_decode($responseBody, true);
+            var_dump($responseData, '脚本返回数据------------------------');
+
+            // 检查响应是否为有效的JSON
+            if (json_last_error() === JSON_ERROR_NONE) {
+                // 如果远程服务器返回成功结果
+                if (isset($responseData['code']) && $responseData['code'] === 1) {
+                    return Result::success([
+                        'message' => '远程服务器处理成功' . $responseData['message'],
+                        'output' => $responseData['output'],
+                        'file' => $responseData['file'],
+                        'code' => $responseData['code'],
+                        'exec' => $responseData['exec'],
+                        'domain' => $domain,
+                        'port' => $port,
+                        'remote_response' => $responseData
+                    ]);
+                } else {
+                    // 远程服务器返回错误
+                    return Result::error(500, '远程服务器处理失败', [
+                        'remote_response' => $responseData
+                    ]);
+                }
+            } else {
+                // 响应不是有效的JSON
+                return Result::success([
+                    'message' => '收到远程服务器响应(非JSON格式)',
+                    'domain' => $domain,
+                    'port' => $port,
+                    'raw_response' => $responseBody
+                ]);
+            }
+        } catch (\GuzzleHttp\Exception\RequestException $e) {
+            // HTTP请求异常
+            $errorMessage = 'HTTP请求失败';
+            if ($e->hasResponse()) {
+                $response = $e->getResponse();
+                $errorMessage .= ': ' . $response->getStatusCode() . ' ' . $response->getReasonPhrase();
+            } else {
+                $errorMessage .= ': ' . $e->getMessage();
+            }
+
+            return Result::error(500, $errorMessage, [
+                'exception' => $e->getMessage()
+            ]);
+        } catch (\Exception $e) {
+            // 其他异常
+            return Result::error(500, '请求处理异常: ' . $e->getMessage(), [
+                'exception' => $e->getMessage()
+            ]);
+        }
+
+
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('获取列表失败');
+        }
+    }
+    private function bt($data) {}
+
+    public function updateWebOutput($data)
+    {
+
+        // return Result::error('更新输出失败');
+        //根据源程序, 复制出来,更改配置文件,打包, 
+        // $result = 1;
+        $projectRoot = dirname(dirname(__DIR__)); // 从当前文件向上两级目录
+        $projectDir = $projectRoot . '/../zizhujianzhan_web';
+        $command = "cd " . escapeshellarg($projectDir) . " && npm run build";
+
+        // 执行命令并获取输出
+        exec($command, $output, $returnCode);
+
+        // 输出结果
+        echo "Return Code: " . $returnCode . "\n";
+        echo "Output:\n";
+        foreach ($output as $line) {
+            echo $line . "\n";
+        }
+        $result = $returnCode;
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('更新输出失败');
+        }
+    }
+    public function updateWebMove($data)
+    {
+
+        //更改到dir目录,
+        $result = WebsiteTemplate::where('id', $data['id'])->update($data);
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('更新移动失败');
+        }
+    }
+    public function runWeb($data)
+    {
+        //运行网站, 先检查是否有配置文件, pm2启动
+        $result = WebsiteTemplate::where('id', $data['id'])->update($data);
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('运行失败');
+        }
+    }
+    public function stopWeb($data)
+    {
+        $result = WebsiteTemplate::where('id', $data['id'])->update($data);
+        if ($result) {
+            return Result::success($result);
+        } else {
+            return Result::error('停止失败');
+        }
+    }
+}
+class bt_api
+{
+    private $BT_KEY;   // 只声明,不初始化
+    private $BT_PANEL; // 只声明,不初始化
+    //如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入
+    public function __construct($bt_panel = null, $bt_key = null)
+    {
+        // 在构造函数中使用 env() 初始化
+        $this->BT_KEY = $bt_key ?? env('BT_KEY', 'RN0wTXLHpKKBXXxyDJoovHMpBhyLVFWZ');
+        $this->BT_PANEL = $bt_panel ?? env('BT_PANEL', 'http://192.168.1.234:18888');
+    }
+
+    //示例取面板日志	
+    public function GetLogs()
+    {
+        //拼接URL地址
+        $url = $this->BT_PANEL . '/data?action=getData';
+
+        //准备POST数据
+        $p_data = $this->GetKeyData();        //取签名
+        $p_data['table'] = 'logs';
+        $p_data['limit'] = 10;
+        $p_data['tojs'] = 'test';
+
+        //请求面板接口
+        $result = $this->HttpPostCookie($url, $p_data);
+
+        //解析JSON数据
+        $data = json_decode($result, true);
+        return $data;
+    }
+    public function addSite(array $siteData): array
+    {
+        //拼接URL地址
+        $url = $this->BT_PANEL . '/site?action=AddSite';
+
+        //准备POST数据
+        $p_data = $this->GetKeyData(); //取签名
+
+        // Merge site data with key data
+        $p_data = array_merge($p_data, $siteData);
+
+        //请求面板接口
+        $result = $this->HttpPostCookie($url, $p_data);
+
+        //解析JSON数据
+        $data = json_decode($result, true);
+        return $data;
+    }
+    /**
+     * 检查删除数据
+     * ids [21]
+     */
+
+
+    public function checkDelSite(array $siteData): array
+
+    {
+        //拼接URL地址
+        $url = $this->BT_PANEL . '/site?action=check_del_data';
+
+        //准备POST数据
+        $p_data = $this->GetKeyData(); //取签名
+
+        // Merge site data with key data
+        $p_data = array_merge($p_data, $siteData);
+
+        //请求面板接口
+        $result = $this->HttpPostCookie($url, $p_data);
+
+        //解析JSON数据
+        $data = json_decode($result, true);
+        return $data;
+    }
+    /**
+     * 删除网站
+     * id 21
+     * webname t2.lj
+     * path 1
+     */
+    public function delSite(array $siteData): array
+
+
+    {
+        //拼接URL地址
+        $url = $this->BT_PANEL . '/site?action=DeleteSite';
+
+        //准备POST数据
+        $p_data = $this->GetKeyData(); //取签名
+
+        // Merge site data with key data
+        $p_data = array_merge($p_data, $siteData);
+
+        //请求面板接口
+        $result = $this->HttpPostCookie($url, $p_data);
+
+        //解析JSON数据
+        $data = json_decode($result, true);
+        return $data;
+    }
+
+
+    /**
+     * 构造带有签名的关联数组
+     */
+    private function GetKeyData()
+    {
+        $now_time = time();
+        $p_data = array(
+            'request_token'    =>    md5($now_time . '' . md5($this->BT_KEY)),
+            'request_time'    =>    $now_time
+        );
+        return $p_data;
+    }
+
+
+    /**
+     * 发起POST请求
+     * @param String $url 目标网填,带http://
+     * @param Array|String $data 欲提交的数据
+     * @return string
+     */
+    private function HttpPostCookie($url, $data, $timeout = 60)
+    {
+        //定义cookie保存位置
+        $cookie_file = './' . md5($this->BT_PANEL) . '.cookie';
+        if (!file_exists($cookie_file)) {
+            $fp = fopen($cookie_file, 'w+');
+            fclose($fp);
+        }
+
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+        curl_setopt($ch, CURLOPT_POST, 1);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
+        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($ch, CURLOPT_HEADER, 0);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+        $output = curl_exec($ch);
+        curl_close($ch);
+        return $output;
+    }
+}

+ 22 - 0
app/JsonRpc/ClientServiceInterface.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace App\JsonRpc;
+
+interface ClientServiceInterface
+{
+    /**
+     * @param array $data
+     */
+    public function test(array $data);
+    public function indexData(array $data);
+    public function addWeb(array $data);
+    public function getWebInfo(array $data);
+    public function deleteWeb(array $data);
+    public function updateWeb(array $data);
+    public function getWebList(array $data);
+    public function updateWebConfig(array $data);
+    public function updateWebOutput(array $data);
+    public function updateWebMove(array $data);
+    public function runWeb(array $data);
+    public function stopWeb(array $data);
+}

+ 3776 - 0
app/JsonRpc/WebService.php

@@ -0,0 +1,3776 @@
+<?php
+
+namespace App\JsonRpc;
+
+use App\Model\Article;
+
+use App\Model\Ad;
+use App\Model\Category;
+
+use App\Model\AdPlace;
+use App\Model\Department;
+use App\Model\District;
+use App\Model\FooterCategory;
+use App\Model\FooterContent;
+use App\Model\WebsiteTemplateInfo;
+use App\Model\Link;
+use App\Model\LetterOfComplaint;
+use App\Model\User;
+use App\Model\UserInfo;
+use App\Model\WebsiteRole;
+use App\Model\WebsiteRoleUser;
+use App\Model\Website;
+use App\Model\WebsiteColumn;
+use App\Model\Good;
+use App\Model\Book;
+use App\Model\ChatRecords;
+use App\Model\ChatTopic;
+use App\Model\JobRecruiting;
+use App\Model\JobHunting;
+use App\Model\Notice;
+use App\Model\Complaint;
+use App\Model\Order;
+use App\Model\WebsiteImg;
+use App\Model\Company;
+use App\Model\Project;
+use App\Model\ChatTopicsReply;
+use App\Model\ArticleSurvey;
+use App\Model\JobIndustry;
+use App\Model\JobPosition;
+use App\Model\JobEnum;
+use App\Model\JobRemuse;
+use App\Model\JobCompany;
+use App\Model\JobNature;
+use App\Model\JobApply;
+
+use Hyperf\HttpServer\Contract\RequestInterface;
+
+use Hyperf\DbConnection\Db;
+use Hyperf\RpcServer\Annotation\RpcService;
+use App\Tools\Result;
+use Carbon\Carbon;
+use App\Model\WebsiteCategory;
+use App\Model\WebsiteGroup;
+use App\Model\WebsiteTemplate;
+use App\Model\Sector;
+use PhpParser\Node\Stmt\Return_;
+use SimpleKafkaClient\Metadata\Topic;
+use function PHPUnit\Framework\isNull;
+use Overtrue\Pinyin\Pinyin;
+use App\Tools\buildTree;
+use App\Model\WhiteRouter;
+use App\Model\Size;
+use App\Tools\PinyinHelper;
+use Hyperf\HttpServer\Annotation\AutoController;
+use Hyperf\Utils\Parallel;
+use Hyperf\Coroutine\Concurrent;
+use function Hyperf\Coroutine\batch;
+use Swoole\Coroutine;
+
+#[RpcService(name: "WebService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
+class WebService implements WebServiceInterface
+{
+    /**
+     * 获取栏目
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteModelCategory(array $data): array
+    {
+        // return Result::success($data);
+        $website_id = [
+            'website_id' => $data['website_id'],
+        ];
+        $website_column_arr = Website::where('id', $data['website_id'])->value('website_column_arr_id');
+        if (empty($website_column_arr)) {
+            return Result::error("未查询到此网站所属网系!", 0);
+        }
+        $website_column_arr = json_decode($website_column_arr, true);
+        // return Result::success(!in_array(3,$website_column_arr) && $data['pid'] == 0);
+        // 初始化 $pid 数组
+        // $pid = [];
+        // 以下注释掉的代码是之前的逻辑,用于获取非顶级分类的 pid
+        $pidQuery = WebsiteCategory::where($website_id)
+            ->where('pid', '!=', 0)
+            ->orderBy('sort')
+            ->select('pid', 'category_id', 'alias', 'aLIas_pinyin');
+        $pid = $pidQuery->pluck('pid');
+        $pid = array_values(array_unique($pid->toArray()));
+        // 构建查询语句
+        $query = WebsiteCategory::where($website_id)
+            ->when(!in_array(3, $website_column_arr) && $data['pid'] == 0, function ($query) use ($website_column_arr) {
+                $query->where('is_show', 1);
+            })
+            ->when(in_array(3, $website_column_arr) ||  $data['pid'] != 0, function ($query) use ($data) {
+                $query->where('pid', $data['pid']);
+            })
+            ->offset($data['placeid'])
+            ->limit($data['num'])
+            ->orderBy('sort')
+            ->orderBy('updated_at', 'desc');
+        // 如果 $pid 数组不为空,添加 CASE WHEN 条件
+        if (!empty($pid)) {
+            $placeholders = implode(',', array_fill(0, count($pid), '?'));
+            $query->selectRaw("website_category.*, CASE WHEN website_category.category_id IN ($placeholders) THEN 1 ELSE 0 END AS children_count", $pid);
+        } else {
+            // 如果 $pid 数组为空,不添加 CASE WHEN 条件,添加字段 children_count 并赋值为 0
+            $query->select('website_category.*', DB::raw('0 as children_count'));
+        }
+
+        // 执行查询
+        $placeid = $data['placeid'] - 1;
+        $result = $query->offset($placeid)->limit($data['num'])->get();
+
+        if (!empty($result)) {
+            $pidResults = $pidQuery->get();
+            if (isset($data['type']) && $data['type'] == 1) {
+                $result = $result->map(function ($item) use ($pidResults) {
+                    $children = $pidResults->where('pid', $item->category_id)->map(function ($child) {
+                        if (!empty($child)) {
+                            return $child;
+                        }
+                    });
+                    // 重置索引,使 key 值从 0 开始
+                    $item->children = $children->values();
+                    return $item;
+                });
+            } else {
+                $pidMap = $pidResults->keyBy('pid');
+                $result->each(function ($record) use ($pidMap, $data) {
+                    if ($data['pid'] == 0) {
+                        $record->aLIas_pinyin = $record->path;
+                    }
+                    // $record->aLIas_pinyin = $record->path;
+                    if ($pidMap->has($record->category_id)) {
+                        $pidResult = $pidMap->get($record->category_id);
+                        $record->chilid_id = $pidResult->category_id;
+                        $record->chilid_alias = $pidResult->alias;
+                        // $record->aLIas_pinyin = $pidResult->aLIas_pinyin;
+                    }
+                });
+            }
+
+            return Result::success($result);
+        } else {
+            return Result::error("本网站暂无栏目", 0);
+        }
+    }
+    /**
+     * 获取网站栏目seo
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteCategoryHead(array $data): array
+    {
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+            if (empty($website)) {
+                return Result::error("找不到网站", 0);
+            }
+        } else {
+            return Result::error("参数错误", 0);
+        }
+        if (isset($data['catid']) && !empty($data['catid'])) {
+            $result = WebsiteCategory::where('website_id', $data['website_id'])->where('category_id', $data['catid'])->first();
+        }
+        if (empty($result)) {
+            return Result::error("暂无导航", 0);
+        }
+        $result['aLIas_pinyin'] = $result['path'] ?? '';
+        $result['website_name'] = $website['website_name'] ?? '';
+        $result['suffix'] = $website['suffix'] ?? '';
+        return Result::success($result);
+    }
+    /*
+     * 获取某个栏目
+     * @param array $data
+     * @return array
+     * */
+    public function getOneWebsiteCategory(array $data): array
+    {
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+            if (empty($website)) {
+
+                return Result::error("暂无该网站", 0);
+            }
+            $category = WebsiteCategory::where('website_id', $data['website_id'])->where('category_id', $data['category_id'])->first();
+            if (empty($category)) {
+                return Result::error("暂无此导航", 0);
+            }
+            $category['children_count'] = WebsiteCategory::where('website_id', $data['website_id'])->where('pid', $data['category_id'])->count();
+            $parent = WebsiteCategory::where('website_id', $data['website_id'])->where('category_id', $category['pid'])->select('category_id as parent_id', 'alias as parent_name', 'aLIas_pinyin')->first();
+            // return Result::success($parent);
+            // $category['aLIas_pinyin'] = $category['path'] ?? '';
+            $category['parent_id'] = $parent['parent_id'] ?? '';
+            $category['parent_pinyin'] = $parent['aLIas_pinyin'] ?? '';
+            $category['parent_name'] = $parent['parent_name'] ?? '';
+            return Result::success($category);
+        } else {
+            return Result::error("参数错误", 0);
+        }
+    }
+    /**
+     * 路由匹配
+     * @param array $data
+     */
+    public function getWebsiteRoute(array $data): array
+    {
+        $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+        if (empty($website)) {
+            return Result::error("暂无该网站", 0);
+        }
+        if (isset($data['pinyin']) &&!empty($data['pinyin'])) {
+            $result = WebsiteCategory::where('website_id',$data['website_id'])
+            ->where('path',$data['pinyin'])
+            // $result = WebsiteCategory::where('category_id', $category_id)
+                // ->where('website_category.path', $data['pinyin'])
+                // ->leftJoin('website_category as pc', function ($join) use ($data) {
+                //     $join->on('pc.pid', '=', 'website_category.category_id')
+                //         ->where('pc.website_id', '=', $data['website_id']);
+                // })
+                ->select('website_category.category_id', 'website_category.type', 'website_category.alias',)
+                ->first();
+        }
+        if (isset($data['foot_pinyin']) && !empty($data['foot_pinyin'])) {
+            $result = FooterCategory::where('website_id', $data['website_id'])->where('name_pinyin', $data['foot_pinyin'])->first(['id']);
+        }
+        if (!isset($result) || empty($result)) {
+            return Result::error("暂无该导航", 0);
+        }
+        return Result::success($result);
+    }
+    /**
+   * c端  -  验证路由
+   * @param array $data
+   * @return array
+   */
+  public function checkWebsiteRoute(array $data): array
+  {
+    // 测试001111111222
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name', 'status']);
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    } elseif ($web['status'] != 1) {
+      return Result::error("网站已经关闭", 0);
+    }
+    if (isset($data['other_route']) && !empty($data['other_route'])) {
+      $whiteRouterInfo = WhiteRouter::whereJsonContains("website_id", $data['website_id'])->where('router_url', $data['other_route'])->first();
+      // 验证路由是否存在
+      if (empty($whiteRouterInfo)) {
+        $whiteRouterInfo = WhiteRouter::where("router_type", 1)->where('router_url', $data['other_route'])->first();
+      }
+      if (!empty($whiteRouterInfo)) {
+        return Result::success($whiteRouterInfo->toArray());
+      }
+    }
+    // 验证栏目路由
+    $last_category = WebsiteCategory::where('website_id', $data['website_id'])
+      ->where('path', $data['all_route'])
+      ->get()->all();
+    if (count($last_category) == 0) {
+      return Result::error("该栏目不存在", 0);
+    }
+    if (count($last_category) > 1) {
+      return Result::error("该栏目路由存在多个,路由验证失败!", 0);
+    }
+    if (count($last_category) == 1) {
+      $last_category = $last_category[0];
+    }
+
+    // return Result::success($last_category);
+    if (isset($data['id']) && !empty($data['id'])) {
+      //   `type` int unsigned DEFAULT '1' COMMENT '类型:1资讯(默认)2商品3书刊音像4招聘5求职类型:1资讯(默认)2商品3书刊音像4招聘5求职6招工招聘'
+      switch ($last_category['type']) {
+        case 1:
+          // 文章
+          //   `status` int DEFAULT '1' COMMENT '状态: 2:已拒绝  ;1:已发布,0待发布 草稿箱 404删除(移除)
+          $article = Article::where('status', 1)
+            ->where('id', $data['id'])
+            ->where(function ($query) use ($data) {
+              $query->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($data['website_id']) . "') = 0")
+                ->orWhereNull("ignore_ids");
+            })
+            ->first(['catid']);
+          if (empty($article)) {
+            return Result::error("该文章不存在", 0);
+          }
+          //   return Result::success($article);
+          break;
+        case 2:
+          // 商品
+          // `status` int DEFAULT '1' COMMENT '审核状态,1待审核2已审核3已拒绝',
+          $article = Good::where('website_id', $data['website_id'])
+            ->where('status', 2)
+            ->where('id', $data['id'])
+            ->first(['cat_arr_id']);
+          if (empty($article)) {
+            return Result::error("该商品不存在", 0);
+          }
+          break;
+        case 3:
+          // 书刊信息
+          // `status` int DEFAULT '1' COMMENT '审核状态,1待审核2已审核3已拒绝',
+          $article = Book::where('website_id', $data['website_id'])
+            ->where('status', 2)
+            ->where('id', $data['id'])
+            ->first(['id', 'cat_arr_id']);
+          if (empty($article)) {
+            return Result::error("该书刊不存在", 0);
+          }
+          break;
+        case 4:
+          // 招聘
+          //   `status` int DEFAULT '0' COMMENT '状态   0:待审核;1:已审核通过;(只有企业会员需要审核)',
+          $article = JobRecruiting::where('website_id', $data['website_id'])
+            ->where('status', 1)
+            ->where('id', $data['id'])
+            ->first(['cat_arr_id']);
+          if (empty($article)) {
+            return Result::error("该招聘不存在", 0);
+          }
+          break;
+        case 5:
+          // 求职
+          //   `status` int DEFAULT '1' COMMENT '审核状态,1待审核2已审核3已拒绝',
+          $article = JobHunting::where('website_id', $data['website_id'])
+            ->where('status', 2)
+            ->where('id', $data['id'])
+            ->first(['cat_arr_id']);
+          if (empty($article)) {
+            return Result::error("该求职不存在", 0);
+          }
+          break;
+        case 6:
+          // 企业
+          // `status` int DEFAULT '1' COMMENT '审核状态状态:0:未审核;1:已审核;2:已拒绝;',
+          $article = Company::
+            //   where('website_id', $data['website_id'])
+            // ->
+            where('status', 1)
+            ->where('id', $data['id'])
+            ->first(['cat_arr_id']);
+          if (empty($article)) {
+            return Result::error("该企业不存在", 0);
+          }
+          break;
+        case 7:
+          // 项目
+          // `status` int DEFAULT '1' COMMENT '审核状态状态:0:未审核;1:已审核;2:已拒绝;',
+          $article = Project::where('website_id', $data['website_id'])
+            ->where('status', 1)
+            ->where('id', $data['id'])
+            ->first(['cat_arr_id']);
+          if (empty($article)) {
+            return Result::error("该项目不存在", 0);
+          }
+          break;
+        default:
+          return Result::error("该数据不存在", 0);
+          break;
+      }
+      //   return Result::success($article);
+      //   $catid =0 ;
+
+      if (!isset($article['cat_arr_id'])) {
+        $catid = isset($article['catid']) ? $article['catid'] : (isset($article['category_id']) ? $article['category_id'] : null);
+      } else {
+        $catidArray = json_decode($article['cat_arr_id'], true);
+        $catid = !empty($catidArray) ? end($catidArray) : null;
+      }
+      // return Result::success($catid);
+      // //    return Result::success($article['cat_arr_id']);
+      if (empty($catid)) {
+        return Result::error("该栏目路径不存在", 0);
+      }
+
+      $path = WebsiteCategory::where('website_id', $data['website_id'])
+        ->where('category_id', $catid)
+        ->first('path');
+    }
+
+    // else{
+    //     // if ($last_category['pid'] != 0) {
+    //         $cat_arr = json_decode($last_category['category_arr_id'], true);
+    //         $catid = !empty($cat_arr) && is_array($cat_arr) ? end($cat_arr) : null;
+    //         $pinyin = WebsiteCategory::where('website_id', $data['website_id'])
+    //             ->where('category_id',$catid)
+    //             ->where('path',$data['all_route'])
+    //             ->first('path');
+    //     // } else {
+    //     //     $pinyin[0] = $last_category['aLIas_pinyin'];
+    //     // }
+    // }
+    // return Result::success($path);
+    if (!empty($path) && $path['path'] != $data['all_route']) {
+      return Result::error('非法路径!');
+    } else {
+      return Result::success($last_category['path']);
+    }
+  }
+  /**
+   * 前端-搜索新闻列表
+   * @param array $data
+   * @return array
+   */
+  public function selectWebsiteArticle(array $data): array
+  {
+    $website = Website::where('id', $data['website_id'])->first();
+    if (empty($website)) {
+      return Result::error("网站不存在", 0);
+    }
+    // $website_column = $website['column'];
+    if (!empty($website['website_column_arr_id']) && $website['website_column_arr_id'] != '[]') {
+      $website_column = json_decode($website['website_column_arr_id'], true);
+    }
+    $website_id = $data['website_id'];
+    $categorys = $this->processArticlePro($website_id);
+    $diff_pid_categoryIds = array_values($categorys['diff_pid_categoryIds']);
+
+    // return Result::success($diff_pid_categoryIds);
+    if (in_array(3, $website_column) && !empty($diff_pid_categoryIds)) {
+      return Result::error("此为核心站,有父级导航" . implode(',', $diff_pid_categoryIds) . "未选择而选择了此子级!", 0);
+    }
+    // return Result::success(reset($diff_pid_categoryIds) == 0);
+    // $cat_1st_arr = $categorys['cat_1st_arr'];
+    $catiall = $categorys['catiall'];
+    $categoryIds = $categorys['categoryIds'];
+    // return Result::success($categoryIds);
+    $query = Article::where('status', 1)
+      ->whereIn('catid', $categoryIds)
+      ->leftJoinSub(function ($query) use ($website_id) {
+        $query->from('article_ignore')
+          ->where('website_id', $website_id);
+      }, 'article_ignore', function ($join) {
+        $join->on('article_ignore.article_id', '=', 'article.id');
+      })
+      ->where(function ($query) {
+        $query->whereNull('article_ignore.article_id')
+          ->orWhere(function ($subQuery) {
+            $subQuery->whereNotNull('article_ignore.article_id')
+              ->where('article_ignore.is_ignore', 0)
+              ->where(function ($subSubQuery) {
+                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                  ->orWhereNull('article_ignore.c_show_time');
+              });
+          });
+      });
+    // ->get()->all();
+    // return Result::success($query);
+    if (isset($data['cityid']) && !empty($data['cityid'])) {
+      $query->whereRaw("JSON_CONTAINS(article.city_arr_id, '" . intval($data['cityid']) . "')");
+    }
+    if (isset($data['department_id']) && !empty($data['department_id'])) {
+      $query->whereRaw("JSON_CONTAINS(article.department_arr_id, '" . intval($data['department_id']) . "')");
+    }
+    if (isset($data['keyword']) && !empty($data['keyword'])) {
+      $query->where('article.title', 'like', '%' . $data['keyword'] . '%');
+    }
+    // 计算总数
+    $count = $query->count();
+    // return Result::success($count);
+    // 分页查询
+    $articles = $query
+      ->select(
+        'article.id',
+        'article.title',
+        'article.imgurl',
+        'article.author',
+        'article.updated_at',
+        'article.introduce',
+        'article.islink',
+        'article.linkurl',
+        'article.copyfrom',
+        'article.cat_arr_id',
+        'article.catid',
+        'article.department_arr_id',
+        'article.city_arr_id',
+        // 'article_ignore.c_show_time',
+        // 'article_ignore.is_ignore'
+      )
+      ->orderBy("updated_at", "desc")
+      ->offset(($data['page'] - 1) * $data['pageSize'])
+      ->limit($data['pageSize'])
+      ->get();
+    //    return Result::success($articles);
+    foreach ($articles as $k => $v) {
+      $articles[$k]->category_name = $catiall[$v->catid]['alias'];
+      $articles[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+    }
+    if (empty($articles)) {
+      return Result::error("没有符合条件的资讯数据");
+    }
+    $result = [
+      'rows' => $articles,
+      'count' => $count,
+    ];
+    return Result::success($result);
+  }
+  /**
+   *  获取头条新闻
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteArticlett(array $data): array
+  {
+    $website_id = $data['website_id'];
+    $website = Website::where('id', $data['website_id'])->first();
+    if (empty($website)) {
+      return Result::error("网站不存在", 0);
+    }
+    $categorys = $this->processArticlePro($website_id);
+    $catiall = $categorys['catiall'];
+    $categoryIds = $categorys['categoryIds'];
+    $where = [
+      'status' => 1
+    ];
+    // $website_column = $website['column'];
+    if (!empty($website['website_column_arr_id']) && $website['website_column_arr_id'] != '[]') {
+      $website_column = json_decode($website['website_column_arr_id'], true);
+    }
+    $diff_pid_categoryIds = array_values($categorys['diff_pid_categoryIds']);
+    // return Result::success($diff_pid_categoryIds);
+    if (in_array(3, $website_column) && !empty($diff_pid_categoryIds)) {
+      return Result::error("此为核心站,有父级导航" . implode(',', $diff_pid_categoryIds) . "未选择而选择了此子级!", 0);
+    }
+
+    // $website_id = $data['website_id'];
+    $month = date("Y-m-d H:i:s", strtotime("-30 day"));
+    //如果是4:最新资讯(数据库已不存在) 5:资讯推荐(数据库已不存在);
+    // 1:头条资讯;2:轮播图;6:热点资讯;(数据库)
+    switch ($data['level']) {
+      case 1:
+      case 2:
+      case 3:
+      case 6:             //1.头条资讯;2.轮播图;3.推荐图;6.今日热点
+        $query = Article::where($where)
+          ->where('level', 'like', '%' . $data['level'] . '%')
+          ->orderBy('updated_at', 'desc');
+        break;
+      case 4:             //最新资讯
+        $query = Article::where($where)->orderBy('updated_at', 'desc');
+        break;
+      case 5:             //资讯推荐
+        $query = Article::where($where)
+          ->where('updated_at', '>', $month);
+        break;
+      case 7:             //资讯分类
+
+        if (isset($data['id']) && !empty($data['id'])) {
+          $keyword = Article::where('id', $data['id'])->value('keyword');
+          $keywordArray = explode(',', $keyword);
+          $whereL7 = [];
+          foreach ($keywordArray as $k => $v) {
+            $whereL7[] = ['keyword', 'like', '%' . $v . '%'];
+          }
+          $query = Article::where($where)->where($whereL7)->orderBy('updated_at', 'desc');;
+          break;
+        } else {
+          return Result::error("请输入资讯ID", 0);
+          break;
+        }
+      default:
+        break;
+    }
+    // $whereL7 = [];
+    // if(isset($data['id']) && !empty($data['id'])){
+    //     $keyword = Article::where('id', $data['id'])->value('keyword');
+    //     $keywordArray = explode(',', $keyword);
+
+    //     foreach ($keywordArray as $k => $v) {
+    //         $whereL7[] = ['keyword', 'like', '%' . $v . '%'];
+    //     }
+    // }
+
+    // $query = Article::where($where)
+    //         ->when(isset($data['level']) && !empty($data['level']), function ($query) use ($data,$whereL7) {
+    //             if($data['level'] == 1 || $data['level'] == 2 || $data['level'] == 3 || $data['level'] == 6){
+    //                 $query = $query->where('article.level','like','%'.$data['level'].'%')->orderBy('updated_at','desc');
+    //             }
+    //             if($data['level'] == 7){
+    //                 $query = $query->where($whereL7)->orderBy('updated_at','desc');
+    //             }
+    //             if($data['level'] == 4){
+    //                 $query = $query->inRandomOrder()
+    //                 ->where('updated_at', '>', date("Y-m-d H:i:s", strtotime("-30 day")));
+    //             }
+    //             if($data['level'] == 5){
+    //                 $query = $query->orderBy('updated_at','desc');
+    //             }
+    //         });
+    if ($data['textnum'] > 0) {
+      $query = clone $query;
+      $result['text'] = $query
+        ->whereIn('catid', $categoryIds)
+        ->leftJoinSub(function ($query) use ($website_id) {
+          $query->from('article_ignore')
+            ->where('website_id', $website_id);
+        }, 'article_ignore', function ($join) {
+          $join->on('article_ignore.article_id', '=', 'article.id');
+        })
+        ->where(function ($query) {
+          $query->whereNull('article_ignore.article_id')
+            ->orWhere(function ($subQuery) {
+              $subQuery->whereNotNull('article_ignore.article_id')
+                ->where('article_ignore.is_ignore', 0)
+                ->where(function ($subSubQuery) {
+                  $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                    ->orWhereNull('article_ignore.c_show_time');
+                });
+            });
+        })
+        // ->where(function ($query) use ($website_id) {
+        //   $query->whereNull('article_ignore.article_id')
+        //     ->orWhere('article_ignore.website_id', '!=', $website_id);
+        // })
+        ->select(
+          'article.id',
+          'article.title',
+          'article.author',
+          'article.updated_at',
+          'article.introduce',
+          'article.islink',
+          'article.linkurl',
+          'article.copyfrom',
+          'article.cat_arr_id',
+          'article.catid',
+          'article.level',
+          // 'article_ignore.is_ignore',
+          // 'article_ignore.c_show_time',
+        )
+        ->offset($data['placeid'])
+        ->limit($data['textnum'])
+        ->get()->all();
+      foreach ($result['text'] as $k => $v) {
+        $result['text'][$k]->pinyin = $catiall[$v->catid]['pinyin'];
+        $result['text'][$k]->alias = $catiall[$v->catid]['alias'];
+      }
+    }
+    if ($data['imgnum'] > 0) {
+      $query = clone $query;
+      if ($data['textnum'] == 0) {
+        $query = $query->leftJoinSub(function ($query) use ($website_id) {
+          $query->from('article_ignore')
+            ->where('website_id', $website_id);
+        }, 'article_ignore', function ($join) {
+          $join->on('article_ignore.article_id', '=', 'article.id');
+        })
+          ->where(function ($query) {
+            $query->whereNull('article_ignore.article_id')
+              ->orWhere(function ($subQuery) {
+                $subQuery->whereNotNull('article_ignore.article_id')
+                  ->where('article_ignore.is_ignore', 0)
+                  ->where(function ($subSubQuery) {
+                    $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                      ->orWhereNull('article_ignore.c_show_time');
+                  });
+              });
+          });
+      }
+      $result['img'] = $query
+        ->whereIn('catid', $categoryIds)
+        ->where('article.imgurl', '!=', '')
+        ->select(
+          'article.id',
+          'article.title',
+          'article.imgurl',
+          'article.author',
+          'article.updated_at',
+          'article.introduce',
+          'article.islink',
+          'article.linkurl',
+          'article.copyfrom',
+          'article.cat_arr_id',
+          'article.catid',
+          'article.level',
+          // 'article_ignore.is_ignore',
+          // 'article_ignore.c_show_time',
+        )
+        ->offset($data['placeid'])
+        ->limit($data['imgnum'])
+        ->get()->all();
+      foreach ($result['img'] as $k => $v) {
+        $result['img'][$k]->pinyin = $catiall[$v->catid]['pinyin'];
+        $result['img'][$k]->alias = $catiall[$v->catid]['alias'];
+      }
+    }
+
+    if (empty($result)) {
+      return Result::error("暂无相关资讯", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * 模块新闻加强plus版 
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteAllArticle(array $data): array
+  {
+    // return Result::success($data);
+    $time1 = microtime(true);
+    $wetbsite_id = $data['website_id'] ?? 2;
+    $data = json_decode($data['id'], true);
+
+    $website = Website::where('id', $wetbsite_id)->first();
+    if (empty($website)) {
+      return Result::error("网站不存在", 0);
+    }
+    // return Result::success($website);
+    $website_column = $website['website_column_arr_id'] ?? '[]';
+
+    $website_column = json_decode($website_column, true);
+
+    $categorys = $this->processArticlePro($wetbsite_id);
+    $cat_1st_arr = $categorys['cat_1st_arr'];
+    $catiall = $categorys['catiall'];
+
+    // return Result::success($catiall);
+    $diff_pid_categoryIds = $categorys['diff_pid_categoryIds'];
+    if (in_array(3, $website_column) && !empty($diff_pid_categoryIds)) {
+      return Result::error("此为核心站,有父级导航" . implode(',', $diff_pid_categoryIds) . "未选择而选择了此子级!", 0);
+    }
+    $websiteInfoIndexed = $categorys['websiteInfoIndexed'];
+    // return Result::success($categorys);
+    $parent_category = array_column($data, 'parent');
+    $parent_cat = [];
+    $child_category = array_column($data, 'child');
+    if (!empty($parent_category)) {
+      foreach ($parent_category as $key => $value) {
+        $arr = array_map('intval', explode(',', $value));
+        $parent_cat[$key] = $arr[0] ?? 0;
+        $parent_category = $arr[0] ?? 0;
+        $article_imgnum = $arr[1] ?? 0;
+        $article_textnum = $arr[2] ?? 0;
+        if ($parent_category != 0) {
+          $category_arr = array_merge([$parent_category], $cat_1st_arr[$parent_category] ?? [0]);
+          // return Result::success($category_arr);
+          if ($article_imgnum != 0) {
+            $img_article = Article::whereIn('catid', $category_arr)
+              ->where('status', 1)
+              ->where('imgurl', '!=', '')
+              ->leftJoinSub(function ($query) use ($wetbsite_id) {
+                $query->from('article_ignore')
+                  ->where('website_id', $wetbsite_id);
+              }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+              })
+              ->where(function ($query) {
+                $query->whereNull('article_ignore.article_id')
+                  ->orWhere(function ($subQuery) {
+                    $subQuery->whereNotNull('article_ignore.article_id')
+                      ->where('article_ignore.is_ignore', 0)
+                      ->where(function ($subSubQuery) {
+                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                          ->orWhereNull('article_ignore.c_show_time');
+                      });
+                  });
+              })
+              ->select('article.id', 'article.title', 'article.imgurl', 'article.author', 'article.updated_at', 'article.introduce', 'article.islink', 'article.linkurl', 'article.copyfrom', 'article.cat_arr_id', 'article.catid')
+              ->orderBy('updated_at', 'desc')
+              ->limit($article_imgnum)
+              ->get()->all();
+            foreach ($img_article as $k => $v) {
+              $img_article[$k]->category_name = $catiall[$v->catid]['alias'];
+              $img_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+            }
+          } else {
+            $img_article = [];
+          }
+          if ($article_textnum != 0) {
+            $text_article = Article::whereIn('catid', $category_arr)
+              ->where('status', 1)
+              ->leftJoinSub(function ($query) use ($wetbsite_id) {
+                $query->from('article_ignore')
+                  ->where('website_id', $wetbsite_id);
+              }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+              })
+              ->where(function ($query) {
+                $query->whereNull('article_ignore.article_id')
+                  ->orWhere(function ($subQuery) {
+                    $subQuery->whereNotNull('article_ignore.article_id')
+                      ->where('article_ignore.is_ignore', 0)
+                      ->where(function ($subSubQuery) {
+                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                          ->orWhereNull('article_ignore.c_show_time');
+                      });
+                  });
+              })
+              ->select('id', 'title', 'author', 'updated_at', 'introduce', 'islink', 'linkurl', 'copyfrom', 'cat_arr_id', 'catid')
+              ->orderBy('updated_at', 'desc')
+              ->limit($article_textnum)
+              ->get()->all();
+            foreach ($text_article as $k => $v) {
+              $text_article[$k]->category_name = $catiall[$v->catid]['alias'];
+              $text_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+              // $text_article[$k]->alias = $catiall[$v->catid]['alias'];
+            }
+          } else {
+            $text_article = [];
+          }
+          $catiall[$parent_category]['imgnum'] = $img_article;
+          $catiall[$parent_category]['textnum'] = $text_article;
+          $parent[$key] = $catiall[$parent_category];
+        } else {
+          $parent[$key] = '';
+        }
+      }
+    }
+    if (!empty($child_category)) {
+      foreach ($child_category as $key => $value) {
+        $arr = array_map('intval', explode(',', $value));
+        $parent_category = $parent_cat[$key];
+        $child_category = $arr[0] ?? 0;
+        $article_imgnum = $arr[1] ?? 0;
+        $article_textnum = $arr[2] ?? 0;
+
+        if ($child_category != 0) {
+          $all_childcat = $cat_1st_arr[$parent_category];
+          $processedChildCat = array_map(function ($v) use ($websiteInfoIndexed) {
+            // 从 $websiteInfoIndexed 中获取对应的数据
+            $info = $websiteInfoIndexed[$v];
+            // 返回一个包含所需信息的数组
+            return [
+              'alias' => $info->alias,
+              'category_id' => $info->category_id,
+              'aLIas_pinyin' => $info->aLIas_pinyin,
+              'pid' => $info->pid,
+              'type' => $info->type,
+              'cat_arr_id' => $info->category_arr_id ?? ['出错'],
+              'pinyin' => $info->pinyin,
+            ];
+          }, $all_childcat);
+          if ($article_imgnum != 0) {
+            $img_article = Article::where('catid', $child_category)
+              ->where('status', 1)
+              ->where('imgurl', '!=', '')
+              ->leftJoinSub(function ($query) use ($wetbsite_id) {
+                $query->from('article_ignore')
+                  ->where('website_id', $wetbsite_id);
+              }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+              })
+              ->where(function ($query) {
+                $query->whereNull('article_ignore.article_id')
+                  ->orWhere(function ($subQuery) {
+                    $subQuery->whereNotNull('article_ignore.article_id')
+                      ->where('article_ignore.is_ignore', 0)
+                      ->where(function ($subSubQuery) {
+                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                          ->orWhereNull('article_ignore.c_show_time');
+                      });
+                  });
+              })
+              ->select('id', 'title', 'imgurl', 'author', 'updated_at', 'introduce', 'islink', 'linkurl', 'copyfrom', 'cat_arr_id', 'catid')
+              ->orderBy('updated_at', 'desc')
+              ->limit($article_imgnum)
+              ->get()->all();
+            foreach ($img_article as $k => $v) {
+              // var_dump($v);
+              // var_dump($k);
+              $img_article[$k]->category_name = $catiall[$v->catid]['alias'];
+              $img_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+            }
+          } else {
+            $img_article = [];
+          }
+          if ($article_textnum != 0) {
+            $text_article = Article::where('catid', $child_category)
+              ->where('status', 1)
+              ->leftJoinSub(function ($query) use ($wetbsite_id) {
+                $query->from('article_ignore')
+                  ->where('website_id', $wetbsite_id);
+              }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+              })
+              ->where(function ($query) {
+                $query->whereNull('article_ignore.article_id')
+                  ->orWhere(function ($subQuery) {
+                    $subQuery->whereNotNull('article_ignore.article_id')
+                      ->where('article_ignore.is_ignore', 0)
+                      ->where(function ($subSubQuery) {
+                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                          ->orWhereNull('article_ignore.c_show_time');
+                      });
+                  });
+              })
+              ->select('id', 'title', 'author', 'updated_at', 'introduce', 'islink', 'linkurl', 'copyfrom', 'cat_arr_id', 'catid')
+              ->orderBy('updated_at', 'desc')
+              ->limit($article_textnum)
+              ->get()->all();
+            foreach ($text_article as $k => $v) {
+              // var_dump($v);
+              // var_dump($k);
+              $text_article[$k]->category_name = $catiall[$v->catid]['alias'];
+              // $text_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+              $text_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+            }
+          } else {
+            $text_article = [];
+          }
+          $catiall[$child_category]['all_childcat'] = $processedChildCat;
+          $catiall[$child_category]['imgnum'] = $img_article;
+          $catiall[$child_category]['textnum'] = $text_article;
+          $child[$key] = $catiall[$child_category];
+          // var_dump($pids);
+        } else {
+          $child[$key] = '';
+        }
+      }
+    }
+    foreach ($parent as $key => $value) {
+      $result[$key] = $value;
+      if (!empty($child[$key])) {
+        // var_dump($child[$key]);
+
+        $result[$key]['child'] = $child[$key];
+        // $value[$key]['child'] = $child[$key];
+      } else {
+        $result[$key]['child'] = [
+          "alias" => null,
+          "category_id" => null,
+          "type" => null,
+          "pinyin" => null,
+          "all_childcat" => [],
+          "imgnum" => [],
+          "textnum" => []
+        ];
+      }
+    }
+    return Result::success($result);
+  }
+  /**
+   * 乡村网-获取特殊新闻模块
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteArticles(array $data): array
+  {
+    $website_id = $data['website_id'];
+    $website = Website::where('id', $website_id)->first();
+    if (empty($website)) {
+      return Result::error("网站不存在", 0);
+    }
+    // return Result::success($website);
+    $website_column = $website['website_column_arr_id'] ?? '[]';
+    $website_column = json_decode($website_column, true);
+    $catids = json_decode($data['id'], true);
+    $parent_category = array_column($catids, 'parent');
+
+    if (!empty($parent_category) && is_array($parent_category)) {
+      $categorys = $this->processArticlePro($website_id);
+      $diff_pid_categoryIds = $categorys['diff_pid_categoryIds'];
+      if (in_array(3, $website_column) && !empty($diff_pid_categoryIds)) {
+        return Result::error("此为核心站,有父级导航" . implode(',', $diff_pid_categoryIds) . "未选择而选择了此子级!", 0);
+      }
+      $catiall = $categorys['catiall'];
+      $cat_1st_arr = $categorys['cat_1st_arr'];
+      //  return Result::success($categorys);
+      foreach ($parent_category as $key => $value) {
+        $arr = array_map('intval', explode(',', $value));
+        $parent_category = $arr[0] ?? 0;
+        $article_imgnum = $arr[1] ?? 0;
+        $article_textnum = $arr[2] ?? 0;
+        if ($parent_category != 0) {
+          $category_arr = array_merge([$parent_category], $cat_1st_arr[$parent_category] ?? [0]);
+          // return Result::success($category_arr);
+          if ($article_imgnum != 0) {
+            $img_article = Article::whereIn('article.catid', $category_arr)
+              ->where('article.status', 1)
+              ->where('article.imgurl', '!=', '')
+              ->leftJoinSub(function ($query) use ($website_id) {
+                $query->from('article_ignore')
+                  ->where('website_id', $website_id);
+              }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+              })
+              ->where(function ($query) {
+                $query->whereNull('article_ignore.article_id')
+                  ->orWhere(function ($subQuery) {
+                    $subQuery->whereNotNull('article_ignore.article_id')
+                      ->where('article_ignore.is_ignore', 0)
+                      ->where(function ($subSubQuery) {
+                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                          ->orWhereNull('article_ignore.c_show_time');
+                      });
+                  });
+              })
+              ->select(
+                'article.id',
+                'article.title',
+                'article.imgurl',
+                'article.author',
+                'article.updated_at',
+                'article.introduce',
+                'article.islink',
+                'article.linkurl',
+                'article.copyfrom',
+                'article.cat_arr_id',
+                'article.catid as category_id'
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($article_imgnum)
+              ->get()->all();
+
+            foreach ($img_article as $k => $v) {
+              $img_article[$k]->alias = $catiall[$v->category_id]['alias'];
+              // return Result::success($v);
+
+              $img_article[$k]->aLIas_pinyin = $catiall[$v->category_id]['pinyin'];
+            }
+          } else {
+            $img_article = [];
+          }
+          if ($article_textnum != 0) {
+            $text_article = Article::whereIn('article.catid', $category_arr)
+              ->where('article.status', 1)
+              ->leftJoinSub(function ($query) use ($website_id) {
+                $query->from('article_ignore')
+                  ->where('website_id', $website_id);
+              }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+              })
+              ->where(function ($query) {
+                $query->whereNull('article_ignore.article_id')
+                  ->orWhere(function ($subQuery) {
+                    $subQuery->whereNotNull('article_ignore.article_id')
+                      ->where('article_ignore.is_ignore', 0)
+                      ->where(function ($subSubQuery) {
+                        $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                          ->orWhereNull('article_ignore.c_show_time');
+                      });
+                  });
+              })
+              ->select(
+                'article.id',
+                'article.title',
+                'article.author',
+                'article.updated_at',
+                'article.introduce',
+                'article.islink',
+                'article.linkurl',
+                'article.copyfrom',
+                'article.cat_arr_id',
+                'article.catid as category_id'
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($article_textnum)
+              ->get()->all();
+            foreach ($text_article as $k => $v) {
+              $text_article[$k]->alias = $catiall[$v->category_id]['alias'];
+              $text_article[$k]->aLIas_pinyin = $catiall[$v->category_id]['pinyin'];
+              // $text_article[$k]->alias = $catiall[$v->catid]['alias'];
+            }
+          } else {
+            $text_article = [];
+          }
+          $catiall[$parent_category]['imgnum'] = $img_article ?? [];
+          $catiall[$parent_category]['textnum'] = $text_article ?? [];
+          $parent[$key] = $catiall[$parent_category];
+        } else {
+          $parent[$key] = [];
+        }
+      }
+    }
+
+    return Result::success($parent);
+  }
+  /**
+   *获取新闻列表 
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteArticleList(array $data): array
+  {
+    // return Result::success($data);
+    $where[] = ['status', '=', 1];
+    $website_id = $data['website_id'];
+    $website = Website::where('id', $data['website_id'])->first();
+    if (empty($website)) {
+      return Result::error("网站不存在", 0);
+    }
+    // $website_column = $website['column'];
+    if (!empty($website['website_column_arr_id']) && $website['website_column_arr_id'] != '[]') {
+      $website_column = json_decode($website['website_column_arr_id'], true);
+    }
+    $categorys = $this->processArticlePro($website_id);
+    $cat_1st_arr = $categorys['cat_1st_arr'];
+    $catiall = $categorys['catiall'];
+    $diff_pid_categoryIds = array_values($categorys['diff_pid_categoryIds']);
+    // return Result::success($diff_pid_categoryIds);
+    if (in_array(3, $website_column) && !empty($diff_pid_categoryIds)) {
+      return Result::error("此为核心站,有父级导航" . implode(',', $diff_pid_categoryIds) . "未选择而选择了此子级!", 0);
+    }
+    if (isset($data['catid']) && !empty($data['catid'])) {
+      $category = WebsiteCategory::where('website_id', $data['website_id'])->where('category_id', $data['catid'])->pluck('category_id');
+      if (empty($category)) {
+        return Result::error("此网站暂无此栏目", 0);
+      }
+      array_push($where, ['catid', '=', $data['catid']]);
+    }
+    // return Result::success($where);
+    $query = Article::where($where)
+      ->leftJoinSub(function ($query) use ($website_id) {
+        $query->from('article_ignore')
+          ->where('website_id', $website_id);
+      }, 'article_ignore', function ($join) {
+        $join->on('article_ignore.article_id', '=', 'article.id');
+      })
+      ->where(function ($query) {
+        $query->whereNull('article_ignore.article_id')
+          ->orWhere(function ($subQuery) {
+            $subQuery->whereNotNull('article_ignore.article_id')
+              ->where('article_ignore.is_ignore', 0)
+              ->where(function ($subSubQuery) {
+                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                  ->orWhereNull('article_ignore.c_show_time');
+              });
+          });
+      })
+      ->select(
+        'article.id',
+        'article.title',
+        'article.imgurl',
+        'article.author',
+        'article.updated_at',
+        'article.introduce',
+        'article.islink',
+        'article.linkurl',
+        'article.copyfrom',
+        'article.cat_arr_id',
+        'article.catid'
+      );
+    $count = $query->count();
+    $rep = $query->orderBy("updated_at", "desc")
+      ->offset(($data['page'] - 1) * $data['pageSize'])
+      ->limit($data['pageSize'])
+      ->get()->all();
+    $categorys = $this->processArticlePro($website_id);
+    $cat_1st_arr = $categorys['cat_1st_arr'];
+    $catiall = $categorys['catiall'];
+    // $web['website_id'] = $data['website_id'];
+    foreach ($rep as $k => $v) {
+      $rep[$k]->category_name = $catiall[$v->catid]['alias'];
+      $rep[$k]->pinyin = $catiall[$v->catid]['pinyin'];
+    }
+    // $rep = $this->processArticles($rep,$web);
+    $data = [
+      'rows' => $rep,
+      'count' => $count,
+    ];
+
+    if (empty($rep)) {
+      return Result::error("没有信息数据");
+    }
+    return Result::success($data);
+  }
+  /**
+   * 前端-获取新闻详情
+   * @param array $data
+   * @return array
+   */
+  public function selectWebsiteArticleInfo(array $data): array
+  {
+    $where = [
+      'article.id' => $data['id'],
+      'article.status' => 1,
+    ];
+
+    $result = Article::where($where)
+      ->leftJoin("article_data", "article.id", "article_data.article_id")
+      ->leftJoin("article_extend", "article_extend.article_id", "article.id")
+      // ->where(function ($query) use ($data) {
+      //   $query->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($data['website_id']) . "') = 0")
+      //     ->orWhereNull("ignore_ids");
+      // })
+      ->leftJoinSub(function ($query) use ($data) {
+        $query->from('article_ignore')
+          ->where('website_id', $data['website_id']);
+      }, 'article_ignore', function ($join) {
+        $join->on('article_ignore.article_id', '=', 'article.id');
+      })
+      ->where(function ($query) {
+        $query->whereNull('article_ignore.article_id')
+          ->orWhere(function ($subQuery) {
+            $subQuery->whereNotNull('article_ignore.article_id')
+              ->where('article_ignore.is_ignore', 0)
+              ->where(function ($subSubQuery) {
+                $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                  ->orWhereNull('article_ignore.c_show_time');
+              });
+          });
+      })
+      ->select(
+        'article.*',
+        'article_data.content',
+        'article_data.article_id',
+        'article_extend.website_url',
+        'article_extend.email',
+        'article_extend.contacts',
+        'article_extend.contacts_mobile',
+        'article_extend.contacts_address',
+        'article_extend.zip_code',
+        'article_extend.enterprise_name'
+      )
+      ->first();
+    if (empty($result)) {
+      return Result::error("暂无此新闻!", 0);
+    }
+    if (!empty($result['publiced_at'])) {
+      $result['updated_at'] = $result['publiced_at'];
+    }
+
+    $category = WebsiteCategory::leftJoin('website', 'website.id', '=', 'website_category.website_id')
+      ->select('website_category.*', 'website.website_name', 'website.suffix')
+      ->where('website_category.website_id', $data['website_id'])
+      ->where(['website_category.category_id' => $result['catid']])
+      ->first();
+    if (empty($category)) {
+      return Result::error("查询失败", 0);
+    }
+    //手动推荐文章
+    $commend_ids = $result['commend_id'] ? json_decode($result['commend_id']) : [];
+    if (empty($commend_ids)) {
+      $commendArticle = [];
+    } else {
+      //去除不存在的文章ID
+      $commendArticle = Article::whereIn('article.id', $commend_ids)
+        ->leftjoin('website_category', 'website_category.category_id', '=', 'article.catid')
+        ->leftJoinSub(function ($query) use ($data) {
+          $query->from('article_ignore')
+            ->where('website_id', $data['website_id']);
+        }, 'article_ignore', function ($join) {
+          $join->on('article_ignore.article_id', '=', 'article.id');
+        })
+        ->where(function ($query) {
+          $query->whereNull('article_ignore.article_id')
+            ->orWhere(function ($subQuery) {
+              $subQuery->whereNotNull('article_ignore.article_id')
+                ->where('article_ignore.is_ignore', 0)
+                ->where(function ($subSubQuery) {
+                  $subSubQuery->where('article_ignore.c_show_time', '<=', date('Y-m-d H:i:s'))
+                    ->orWhereNull('article_ignore.c_show_time');
+                });
+            });
+        })
+        ->where('article.status', 1)
+        ->where('website_category.website_id', $data['website_id'])
+        ->select('article.id', 'article.cat_arr_id', 'article.title', 'article.catid', 'article.imgurl', 'article.hits', 'article.created_at', 'website_category.alias', 'website_category.alias_pinyin', 'website_category.website_id')
+        ->orderByRaw("FIELD(article.id, " . implode(',', $commend_ids) . ")")
+        // ->orderBy('article.updated_at', 'desc')
+        ->limit(5)
+        ->get();
+      //循环数组,取出cat_arr_id中的不重复值,再从website_category取出alias_pinyin,再将cat_arr_id的json转成路径/隔开
+      foreach ($commendArticle as $k => $v) {
+        $cat_arr_id = json_decode($v->cat_arr_id, true);
+        if (!empty($cat_arr_id) && is_array($cat_arr_id)) {
+          $cat_arr_id = array_unique($cat_arr_id);
+          // 从website_category取出alias_pinyin
+          $cat_arr  = WebsiteCategory::where('website_id', $data['website_id'])
+            ->whereIn('category_id', $cat_arr_id)
+            ->pluck('alias_pinyin', 'category_id')
+            ->toArray();
+
+          // 将cat_arr_id的json转成路径/隔开
+          $path_parts = [];
+          foreach ($cat_arr_id as $cat_id) {
+            if (isset($cat_arr[$cat_id])) {
+              $path_parts[] = $cat_arr[$cat_id];
+            }
+          }
+          $v->alias_pinyin = implode('/', $path_parts);
+        } else {
+          $v->alias_pinyin = '';
+        }
+      }
+    }
+
+    $result['category_id'] = $category['category_id'];
+    $result['cat_name'] = $category['alias'];
+    $result['website_name'] = $category['website_name'] ?? "";
+    $result['suffix'] = $category['suffix'] ?? "";
+    $result['commendArticle'] = $commendArticle;
+    $result['commend_ids'] = $commend_ids;
+    return Result::success($result);
+  }
+  /**
+   * plus  pro  处理文章路由问题
+   */
+  function processArticlePro($website_id)
+  {
+    // $categorys = WebsiteCategory::where('website_id', $website_id)->get()->all();
+    // // $websiteInfoIndexed = array_column($categorys, null, 'category_id');
+    // // 取出category_id 对应的aLIas_pinyin 
+    // $categoryIds = array_column($categorys, 'category_id');
+    // $categoryPIds = array_column($categorys, 'pid');
+    // $aliasPinyins = array_column($categorys, 'path');
+    // $alias = array_column($categorys, 'alias');
+    // $cat_arr = array_combine($categoryIds, $aliasPinyins);
+    // $cat_alias_arr = array_combine($categoryIds, $categoryPIds);
+    // // return Result::success($cat_arr);
+    // // $catiall = [];
+    // //一级所有子级的记录
+    // $cat_alias_arr = array_combine($categoryIds, $alias);
+    // return [
+    //     'cat_1st_arr' => $cat_alias_arr,
+    //     'catiall' => $cat_arr,
+    //     // 'websiteInfoIndexed' => $websiteInfoIndexed,
+    //     'categoryIds' => $categoryIds,
+    // ];
+    $categorys = WebsiteCategory::where('website_id', $website_id)->get()->all();
+    $websiteInfoIndexed = array_column($categorys, null, 'category_id');
+    // 取出category_id 对应的aLIas_pinyin 
+    $categoryIds = array_column($categorys, 'category_id');
+    $categoryPIds = array_values(array_unique(array_filter(array_column($categorys, 'pid'), function ($pid) {
+      return $pid != 0;
+    })));
+
+    $category_path = array_column($categorys, 'path');
+    $cat_arr = array_combine($categoryIds, $category_path);
+    // return Result::success(array_diff($categoryIds, $categoryPIds));
+    $catiall = [];
+    //一级所有子级的记录
+    $cat_1st_arr = [];
+    foreach ($categorys as $key => $value) {
+      // $category_arr_id = json_decode($value->category_arr_id);
+      // $pinyin_str = '';
+      // // 算出一级  并且算出子级
+      if ($value->pid != 0 && in_array($value->pid, $categoryIds)) {
+        $cat_1st_arr[$value->pid][] = $value->category_id;
+      }
+      // foreach ($category_arr_id as $k => $v) {
+      //     $pinyin_str .= $cat_arr[$v] . '/';
+      // }
+      // $pinyin_str = rtrim($pinyin_str, '/');
+      $catiall[$value->category_id]['alias'] = $value->alias;
+      $catiall[$value->category_id]['category_id'] = $value->category_id;
+      $catiall[$value->category_id]['type'] = $value->type;
+      $catiall[$value->category_id]['pinyin'] = $cat_arr[$value->category_id];
+      $websiteInfoIndexed[$value->category_id]->pinyin = $cat_arr[$value->category_id];
+    }
+    return [
+      'cat_1st_arr' => $cat_1st_arr,
+      'catiall' => $catiall,
+      'websiteInfoIndexed' => $websiteInfoIndexed,
+      'categoryIds' => $categoryIds,
+      'diff_pid_categoryIds' => array_diff($categoryPIds, $categoryIds),
+      'categoryPIds' => $categoryPIds,
+    ];
+  }
+  /**
+   * 获取网站顶部信息
+   * @param array $data
+   */
+  public function getWebsiteHead(array $data): array
+  {
+      $result = Website::where('id', $data['website_id'])->where('status', 1)->select('website_name', 'logo')->first();
+      if (empty($result)) {
+          return Result::error("暂无该网站", 0);
+      }
+      return Result::success($result);
+  }
+  /**
+   *各省市查询  
+  * @param array $data
+  * @return array
+  */
+  public function selectWebArea(array $data): array
+  {
+      // return Result::success($data);
+      $pid = $data['pid'] ?? 0;
+      $result = District::leftJoin('district as district2', 'district.pid', '=', 'district2.id')
+          ->where('district.pid', $pid)
+          ->where('district.status', 1)
+          ->select('district.*', 'district2.name as pid_name')
+          ->orderBy('district.code')->get();
+      if (empty($result)) {
+          return Result::error("未查询到此地区", 0);
+      } else {
+          return Result::success($result);
+      }
+  }
+  /**test1
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteDistrit(array $data): array
+  {
+      $where = [];
+      if (isset($data['keyWord'])) {
+          $where = [
+              ['name', 'like', '%' . $data['keyWord'] . '%']
+          ];
+      }
+      $result  = [];
+      if (isset($data['pageSize'])) {
+          $rep = District::where($where)->limit($data['pageSize'])->offset(($data['page'] - 1) * $data['pageSize'])->orderBy("code", "asc")->get();
+          $count = District::where($where)->count();
+          $result = [
+              'rows' => $rep,
+              'count' => $count
+
+          ];
+      } else {
+          $result = District::where($data)->orderBy("code", "asc")->get();
+      }
+      return $result ? Result::success($result) : Result::error("没有查到数据");
+  }
+  /**
+     *
+     * @param array $data
+     * @return array
+     */
+    /**网站行政职能搜索 */
+    public function selectWebsiteDepartment(array $data): array
+    {
+
+      $depart = Department::where('pid', 0)->orderBy('id', 'asc')->get();
+      if (isset($data['keyword']) && !empty($data['keyword'])) {
+          $departments = Department::where('name', 'like', '%' . $data['keyword'] . '%')->get();
+          if (empty($departments)) {
+              $result['message'] = "未查询到与此相关职能部门";
+          } else {
+              $count = Department::where('name', 'like', "%{$data['keyword']}%")->count();
+              $m = [
+                  'department' => $depart,
+                  'type' => $departments,
+                  'count' => $count,
+              ];
+          }
+
+          $result['sele'] = $m;
+          return Result::success($result['sele']);
+      }
+      $result = $depart;
+      return Result::success($result);
+    }
+    /**
+     * 获取友情链接
+     * @param array $data
+     * @return array
+     */
+
+    public function selectWebsiteLinks(array $data): array
+    {
+        $where = [
+            'website_id' => $data['website_id'],
+            'status' => 1,
+            'type' => $data['type'],
+        ];
+        $num = $data['num'];
+        $result = Link::where($where)->orderBy('sort')->limit($num)->get();
+        if (!empty($result)) {
+            return Result::success($result);
+        } else {
+            return Result::error("本网站暂无此类型友情链接", 0);
+        }
+    }
+    /**
+     * 获取网站底部导航
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteFooterCategory(array $data): array
+    {
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+            if (empty($website)) {
+                return Result::error("找不到网站", 0);
+            }
+        } else {
+            return Result::error("参数错误", 0);
+        }
+        $result = FooterCategory::where('website_id', $data['website_id'])->get();
+        if (empty($result)) {
+            return Result::error("暂无底部导航", 0);
+        }
+        return Result::success($result->toArray());
+    }
+    /**
+     * 获取网站底部导航列表
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteFooterCategoryList(array $data): array
+    {
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+            if (empty($website)) {
+                return Result::error("找不到网站", 0);
+            }
+        } else {
+            return Result::error("参数错误", 0);
+        }
+        $footercategory = FooterCategory::where('website_id', $data['website_id'])->where('id', $data['fcat_id'])->first();
+        // '底部导航类型   0:内容型;1:列表型;',
+        if (!isset($footercategory['type']) || $footercategory['type'] == 0) {
+            return Result::error("底部导航id错误", 0);
+        } else {
+            $query = FooterContent::where('fcat_id', $data['fcat_id']);
+            if ($query->count() == 0) {
+                return Result::error("暂无底部导航列表", 0);
+            } elseif ($query->count() == 1) {
+                $result = $query->first();
+            } else {
+                $result = $query->get();
+            }
+        }
+        return Result::success($result);
+    }
+    /**
+     * 获取网站底部导航
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteFooterCategoryInfo(array $data): array
+    {
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+            if (empty($website)) {
+                return Result::error("找不到网站", 0);
+            }
+        } else {
+            return Result::error("参数错误", 0);
+        }
+        if (isset($data['type']) && $data['type'] == 0) {
+            $fcatid = FooterCategory::where('website_id', $data['website_id'])->where('id', $data['fcat_id'])->first();
+            if (empty($fcatid)) {
+                return Result::error("底部导航id错误", 0);
+            }
+            $result = FooterContent::where('fcat_id', $data['fcat_id'])->first();
+        } else {
+            $result = FooterContent::where('id', $data['fcat_id'])->first();
+        }
+        if (empty($result)) {
+            return Result::error("暂无底部导航内容", 0);
+        }
+        return Result::success($result);
+    }
+    /**
+     * 获取网站底部基础信息
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteFootInfo(array $data): array
+    {
+
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website_head = Website::where('id', $data['website_id'])
+                ->where('status', 1)
+                ->select('id', 'website_name', 'logo', 'title', 'keywords', 'description', 'suffix', 'website_url')
+                ->first();
+            if (empty($website_head)) {
+                return Result::error("找不到网站", 0);
+            }
+        } else {
+            return Result::error("参数错误", 0);
+        }
+        $website_head = Website::where('id', $data['website_id'])
+            ->select('id', 'website_name', 'logo', 'title', 'keywords', 'description', 'suffix', 'website_url')->first();
+        $website_foot = WebsiteTemplateInfo::where('website_id', $data['website_id'])->first();
+        if (empty($website_foot)) {
+            return Result::error("暂无底部基础信息", 0);
+        }
+        $website_head['website_url'] = $website_head['website_url'] ? json_decode($website_head['website_url']) : [];
+        $result = [
+            'website_foot' => $website_foot,
+            'website_head' => $website_head,
+        ];
+        return Result::success($result);
+    }
+    /**
+     * 获取网站栏目信息
+     * @param array $data
+     */
+    public function getWebsiteFootAll(array $data): array
+    {
+        if(!isset($data['is_diyweb']) || empty($data['is_diyweb'])){
+            $website = Website::where('id',$data['website_id'])->where('status',1)->first();
+        }else{
+            $website = Website::where('id',$data['website_id'])->first();
+        }
+        if (empty($website)) {
+            return Result::error("暂无该网站", 0);
+        }
+        // 1:图片 2:文字 3:底部
+        $result['foot_cate'] = FooterCategory::where('website_id', $data['website_id'])->get()->all();
+        $result['link_img'] = Link::where('website_id', $data['website_id'])->where('type', 1)->where('status', 1)->limit($data['link_imgnum'])->orderBy('sort')->get()->all();
+        $result['link_text'] = Link::where('website_id', $data['website_id'])->where('type', 2)->where('status', 1)->limit($data['link_textnum'])->orderBy('sort')->get()->all();
+        $result['link_foot'] = Link::where('website_id', $data['website_id'])->where('type', 3)->where('status', 1)->limit($data['link_footnum'])->orderBy('sort')->get()->all();
+        $result['foot_info'] = WebsiteTemplateInfo::where('website_id', $data['website_id'])->first();
+        if (empty($result)) {
+            return Result::error("暂无此网站信息", 0);
+        }
+        return Result::success($result);
+    }
+    /**
+     * 获取网站栏目信息
+     * @param array $data
+     */
+    public function getWebsiteAllinfo(array $data): array
+    {
+        $website = Website::where('id', $data['website_id'])->where('status', 1)->first();
+        if (empty($website)) {
+            return Result::error("暂无该网站", 0);
+        }
+        if (isset($data['website_id']) && !empty($data['website_id'])) {
+            $website_head = Website::where('id', $data['website_id'])
+                ->where('status', 1)
+                ->select(
+                    'id',
+                    'website_name',
+                    'logo',
+                    'title',
+                    'keywords',
+                    'description',
+                    'suffix',
+                    'website_url',
+                    'ad_key',
+                    'api_url',
+                    'login_url',
+                    'weblog_url'
+                )
+                ->first();
+            if (empty($website_head)) {
+                return Result::error("找不到网站", 0);
+            }
+        } else {
+            return Result::error("参数错误", 0);
+        }
+        $website_foot['foot_info'] = WebsiteTemplateInfo::where('website_id', $data['website_id'])->first();
+        if (empty($website_foot)) {
+            return Result::error("暂无底部基础信息", 0);
+        }
+        $website_head['website_url'] = $website_head['website_url'] ? json_decode($website_head['website_url']) : [];
+        $result['website_head'] = $website_head;
+        $result['website_foot'] = $website_foot;
+
+        // return Result::success($result);
+        // 1:图片 2:文字 3:底部
+        $result['website_foot']['foot_cate'] = FooterCategory::where('website_id', $data['website_id'])->get()->all();
+        $result['website_foot']['link_img'] = Link::where('website_id', $data['website_id'])->where('type', 1)->where('status', 1)->limit($data['link_imgnum'])->orderBy('sort')->get()->all();
+        $result['website_foot']['link_text'] = Link::where('website_id', $data['website_id'])->where('type', 2)->where('status', 1)->limit($data['link_textnum'])->orderBy('sort')->get()->all();
+        $result['website_foot']['link_foot'] = Link::where('website_id', $data['website_id'])->where('type', 3)->where('status', 1)->limit($data['link_footnum'])->orderBy('sort')->get()->all();
+        if (empty($result)) {
+            return Result::error("暂无此网站信息", 0);
+        }
+        return Result::success($result);
+    }
+    /**
+     * 查询网站的广告
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteAdvertisement(array $data): array
+    {
+        $where = [
+            'ad_place.status' => 1,
+        ];
+        if (isset($data['ad_tag']) && !empty($data['ad_tag'])) {
+            $now = Carbon::now()->format('Y-m-d H:i:s'); // 获取当前时间
+            $where[] = ['ad_place.ad_tag', 'like', '%' . $data['ad_tag'] . '%'];
+            // return Result::success($where);
+            $result =  AdPlace::where($where)
+                ->leftJoin("ad", function ($join) use ($now) {
+                    $join->on("ad.pid", "=", "ad_place.id")
+                        ->where('ad.status', 1)
+                        ->where('ad.fromtime', '<=', $now)
+                        ->where('ad.totime', '>=', $now);
+                })
+                ->select(
+                    'ad_place.name as place_name',
+                    'ad_place.thumb',
+                    'ad_place.ad_tag',
+                    'ad_place.introduce',
+                    'ad.name as ad_name',
+                    'ad.image_src',
+                    'ad.image_url',
+                    'ad.image_alt',
+                    'ad_place.ad_url'
+                )
+                ->get()->all();
+        } else {
+            $now = Carbon::now()->format('Y-m-d H:i:s'); // 获取当前时间
+            // return Result::success($where);
+            $result =  AdPlace::where($where)
+                ->where('ad_place.website_id', $data['website_id'])
+                ->leftJoin("ad", function ($join) use ($now) {
+                    $join->on("ad.pid", "=", "ad_place.id")
+                        ->where('ad.status', 1)
+                        ->where('ad.fromtime', '<=', $now)
+                        ->where('ad.totime', '>=', $now);
+                })
+                ->select(
+                    'ad_place.name as place_name',
+                    'ad_place.thumb',
+                    'ad_place.ad_tag',
+                    'ad_place.introduce',
+                    'ad.name as ad_name',
+                    'ad.image_src',
+                    'ad.image_url',
+                    'ad.image_alt',
+                    'ad_place.ad_url',
+                )
+                ->get()->all();
+            // return Result::error("请选择广告位!",0);
+        }
+        if (empty($result)) {
+            return Result::error("此广告位不存在!", 0);
+        }
+        return Result::success($result);
+    }
+    /**
+   * 前端-获取网站调查问卷
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteSurvey(array $data): array
+  {
+    if (isset($data['website_id']) && !empty($data['website_id'])) {
+      $website = Website::where('id', $data['website_id'])->first();
+      if (empty($website)) {
+        return Result::error("暂无此网站", 0);
+      }
+    }
+    if (isset($data['art_id']) && !empty($data['art_id'])) {
+      $article = Article::where('id', $data['art_id'])->where('status', 1)->first();
+      if (empty($article)) {
+        return Result::error("暂无此文章", 0);
+      }
+      // return Result::error($data,0);
+      $where['art_id'] = $data['art_id'];
+      // $query = ArticleSurvey::where('art_id',$data['art_id']);
+
+    } else {
+      $survey = Article::where(function ($query) {
+        $query->whereRaw("JSON_CONTAINS(cat_arr_id, '28')")
+          ->orWhereRaw("JSON_CONTAINS(cat_arr_id, '\"28\"')");
+      })
+        ->where('status', 1)
+        ->where('is_survey', 1)
+        ->select('survey_id')
+        ->orderBy('updated_at', 'desc')
+        ->first();
+      if (empty($survey)) {
+        return Result::error("暂无调查问卷", 0);
+      }
+      $where['sur_id'] = $survey['survey_id'];
+      // $query = ArticleSurvey::where('sur_id',$survey['sur_id']);
+    }
+    // return Result::success($where);
+    $result = ArticleSurvey::where($where)
+      ->where(function ($query) {
+        $query->where('is_other', 0)
+          ->orWhere(function ($subQuery) {
+            $subQuery->where('is_other', 1)
+              ->where('other_id', 0);
+          });
+      })
+      ->leftJoin('article', 'article_survey.art_id', 'article.id')
+      ->select('article_survey.*', 'article.survey_type')
+      ->get()->all();
+    if (empty($result)) {
+      return Result::error("此文章暂无调查问卷", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * 前端-添加网站调查问卷选项
+   * @param array $data
+   * @return array
+   */
+  public function addWebsiteSurveyOption(array $data): array
+  {
+    if (isset($data['website_id']) && !empty($data['website_id'])) {
+      $website = Website::where('id', $data['website_id'])->first();
+      if (empty($website)) {
+        return Result::error("暂无此网站", 0);
+      }
+      if (isset($data['sur_id']) && !empty($data['sur_id'])) {
+        $survey = ArticleSurvey::where('sur_id', $data['sur_id'])->where('is_other', 1)->where('other_id', 0)->first();
+        if (empty($survey)) {
+          return Result::error("此调查问卷不可添加选项", 0);
+        }
+        if (isset($data['choice_name']) && !empty($data['choice_name'])) {
+          $choice = [
+            'art_id' => $survey['art_id'],
+            'website_id' => $data['website_id'],
+            'survey_name' => $survey['survey_name'],
+            'choice_name' => $data['choice_name'],
+            'sur_id' => $survey['sur_id'],
+            'is_other' => 1,
+            'other_id' => $survey['id'],
+
+          ];
+          $result = ArticleSurvey::insertGetId($choice);
+          if (empty($result)) {
+            return Result::error("添加失败", 0);
+          }
+          return Result::success($result);
+        }
+      }
+      return Result::error("添加失败", 0);
+    }
+    return Result::error("添加失败", 0);
+  }
+  /**
+   * 前端-调查问卷投票
+   * @param array $data
+   * @return array
+   */
+  public function addWebsiteSurveyVote(array $data): array
+  {
+    // return Result::success($data);
+    if (isset($data['website_id']) && !empty($data['website_id'])) {
+      $website = Website::where('id', $data['website_id'])->first();
+      if (empty($website)) {
+        return Result::error("暂无此网站", 0);
+      }
+      if (isset($data['sur_id']) && !empty($data['sur_id'])) {
+        $is_survey = ArticleSurvey::where('sur_id', $data['sur_id'])->first();
+        // return Result::success($survey);
+        if (empty($is_survey)) {
+          return Result::error("此调查问卷不存在", 0);
+        }
+        // return Result::success($survey);
+        // 调查问卷类型
+        if (isset($data['choice_id']) && !empty($data['choice_id'])) {
+          //多选 若是json型则转化成数组类型
+          if (strpos($data['choice_id'], '[') === 0) {
+            $data['choice_id'] = json_decode($data['choice_id'], true);
+          } else {
+            // 单选  也转换成数组
+            $data['choice_id'] = [$data['choice_id']];
+          }
+          $data['choice_id'] = array_map('intval', $data['choice_id']);
+          $other = ArticleSurvey::whereIn('id', $data['choice_id'])
+            // ->where('website_id',$data['website_id'])
+            ->where('is_other', 1)
+            ->where('other_id', 0)
+            ->first();
+          if (!empty($other)) {
+            return Result::error("请选择已有的选项!", 0);
+          }
+          $choice['other'] = ArticleSurvey::whereIn('id', $data['choice_id'])
+            // ->where('website_id',$data['website_id'])
+            ->where('is_other', 1)
+            ->where('other_id', '!=', 0)
+            ->first();
+          // return Result::success($choice['other']);
+          $choice_id = $data['choice_id'];
+          if (!empty($choice['other'])) {
+            // array_push($data['choice_id'],$choice['other']['other_id']);
+            if (!empty($choice_id)) {
+              $key = array_search($choice['other']['id'], $choice_id);
+              if ($key !== false) {
+                unset($choice_id[$key]);
+                $choice_id = array_values($choice_id);
+              }
+              array_push($choice_id, $choice['other']['other_id']);
+            } else {
+              $choice_id[0] = $choice['other']['other_id'];
+            }
+            array_push($data['choice_id'], $choice['other']['other_id']);
+          }
+          // return Result::success($data);
+          $choice = ArticleSurvey::whereIn('id', $data['choice_id'])
+            // ->where('website_id',$data['website_id'])
+            ->increment('results', 1);
+          if (empty($choice)) {
+            return Result::error("请选择已有的选项!", 0);
+          }
+          $survey['data'] = ArticleSurvey::where('sur_id', $data['sur_id'])
+            // ->where('website_id',$data['website_id'])
+            ->where('other_id', 0)
+            ->get();
+          $survey['choice'] = $choice_id;
+          return Result::success($survey);
+        }
+        return Result::error("参数必填!");
+      }
+      return Result::error("此调查问卷不存在", 0);
+    }
+    return Result::error("参数必填!");
+  }
+  /**
+   * 获取商城首页-根据栏目id
+   * @param array $data
+   * @return array
+   *  */
+  function getWebsiteCatidshop(array $data): array
+  {
+    $input['catid'] = $data['catid'];
+    $input['website_id'] = $data['website_id'];
+    $data = json_decode($input['catid'] ?? '', true) ?? [];
+    $result = array_map(function ($item) use ($input) {
+      if (isset($item['catid']) && $item['catid'] != 'undefined' && $item['catid'] != "") {
+        list($catid, $goodStart, $goodNum) = explode(',', $item['catid']);
+        $category = WebsiteCategory::where('category_id', $catid)->where('website_id', $input['website_id'])->first(['type']);
+        // 类型:1资讯(默认)2商品3书刊音像4招聘5求职类型:1资讯(默认)2商品3书刊音像4招聘5求职6招工招聘
+        if (empty($category) || $category->type != 2) {
+          return Result::error("暂无此栏目", 0);
+        } else {
+          $website['website_id'] = $input['website_id'];
+          $goods = Good::where('good.status', 2)
+            ->where('good.website_id', $website['website_id'])
+            ->whereRaw("JSON_CONTAINS(good.cat_arr_id, '" . intval($catid) . "') = 1")
+            ->select(
+              'good.id',
+              'good.name',
+              'good.imgurl',
+              'good.description',
+              'good.updated_at',
+              'good.catid',
+              'good.type_id',
+              'good.price',
+              'good.com',
+              'good.level',
+              'good.unit'
+            )
+            ->orderBy('updated_at', 'desc')
+            ->offset($goodStart)
+            ->limit($goodNum);
+          $all_goods = $goods->get();
+          $all_goods = $this->processGoods($all_goods, $website);
+        }
+
+        return $all_goods ?? [];
+      }
+    }, $data);
+    return Result::success($result);
+  }
+  /**
+   * 获取商品模块
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteshop(array $data): array
+  {
+    $input['id'] = $data['id'];
+    $input['website_id'] = $data['website_id'];
+    $catid = $data['catid'];
+    $data = json_decode($input['id'] ?? '', true) ?? [];
+    $result['goods'] = array_map(function ($item) use ($input) {
+      // 检查parent元素是否存在且不是undefined
+      if (isset($item['level']) && $item['level'] != 'undefined' && $item['level'] != "") {
+        list($Levelid, $goodStart, $goodNum) = explode(',', $item['level']);
+        $website = $input['website_id'];
+        $query = Good::where('good.status', 2)
+          ->where('good.website_id', $website);
+        switch ($Levelid) {
+          case 1:
+          case 2:
+          case 3:
+            $goods = $query->where(function ($q) use ($Levelid) {
+              $q->whereRaw("JSON_CONTAINS(good.level, '" . intval($Levelid) . "') = 1")
+                ->orWhereRaw("JSON_CONTAINS(good.level, '\"" . intval($Levelid) . "\"') = 1");
+            });
+            break;
+          case 4:
+            $goods = $query;
+            break;
+          case 5:
+            $goods = $query->where('type_id', 1);
+            break;
+          case 6:
+            $goods = $query->where('type_id', 2);
+            break;
+          default:
+            return [];
+        }
+        $all_goods = $goods
+          ->select(
+            'good.id',
+            'good.name',
+            'good.imgurl',
+            'good.description',
+            'good.updated_at',
+            'good.catid',
+            'good.type_id',
+            'good.price',
+            'good.level',
+            'good.website_id'
+          )
+          ->orderBy('updated_at', 'desc')
+          ->offset($goodStart)
+          ->limit($goodNum)
+          ->get();
+        $web['website_id'] = $website;
+        $all_goods = $this->processGoods($all_goods, $web);
+      }
+      return  $all_goods;
+    }, $data);
+    $website = $input['website_id'];
+    $result['article'] = Article::where(function ($query) use ($website) {
+      $query->where(function ($subQuery) use ($website) {
+        $subQuery->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($website) . "') = 0");
+      })->orWhereNull("ignore_ids");
+    })
+      ->where('catid', $catid)
+      ->where('article.status', 1)
+      ->leftJoin('article_data', 'article_data.article_id', 'article.id')
+      ->select('article.id', 'article.title', 'article.updated_at', 'introduce', 'islink', 'linkurl', 'article_data.content')
+      ->orderBy('article.updated_at', 'desc')
+      ->first();
+    return Result::success($result);
+  }
+  /**
+   * 获取商品分类
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteshopCat(array $data): array
+  {
+    $website = $data['website_id'];
+    $category = WebsiteCategory::where('website_id', $website)
+      ->whereRaw("JSON_CONTAINS(category_arr_id, '" . intval($data['id']) . "') = 1")
+      ->orWhereRaw("JSON_CONTAINS(category_arr_id, '\"" . intval($data['id']) . "\"') = 1")
+      ->select('category_id', 'alias', 'aLIas_pinyin', 'pid', 'category_arr_id', 'sort')
+      ->orderBy('sort')
+      ->get();
+    $cat =  $category->map(function ($item) use ($website) {
+      $cat_arr_id = json_decode($item->category_arr_id, true) ?? [];
+      $pid = $item->pid ?? 0;
+      if (!empty($cat_arr_id) && is_array($cat_arr_id) && $pid != 0) {
+        $pinyin = WebsiteCategory::whereIn('category_id', $cat_arr_id)
+          ->where('website_id', $website)
+          ->orderByRaw('FIELD(category_id, ' . implode(',', $cat_arr_id) . ')')
+          ->get(['aLIas_pinyin'])
+          ->pluck('aLIas_pinyin')
+          ->implode('/');
+      } else {
+        $pinyin = $item->aLIas_pinyin ?? '';
+      }
+      $item->pinyin = $pinyin;
+    });
+    if (empty($category)) {
+      return Result::error("栏目查询失败", 0);
+    }
+    $cat_tree = Result::buildMenuTree($category);
+    $web['website_id'] = $website;
+    $goods = Good::where('website_id', $website)
+      ->where('status', 2)
+      ->select('good.id as good_id', 'name', 'imgurl', 'description', 'updated_at', 'catid', 'type_id', 'website_id')
+      ->latest('updated_at')
+      ->offset(($data['page'] - 1) * $data['pageSize'])
+      ->limit($data['pageSize'])
+      ->get();
+    if (!empty($goods)) {
+      if ($goods->count() > 1 && !empty($goods)) {
+        $goods = $this->processGoods($goods, $web);
+      }
+    } else {
+      $goods = [];
+    }
+
+    $result = [
+      'category' => $cat_tree,
+      'goods' => $goods,
+    ];
+    // $resul['goods'] = $goods;
+    if (empty($result)) {
+      return Result::error("查询失败", 0);
+    }
+    return Result::success($result);
+  }
+  /*
+     * 获取商品列表
+     * @param array $data
+     * @return array
+     *  */
+  public function getWebsiteshopList(array $data): array
+  {
+    // return Result::success($data);
+    $where = [
+      'status' => 2,
+      'website_id' => $data['website_id'],
+    ];
+    // if ((empty($data['catid']) || !isset($data['catid'])) && (empty($data['keyword']) || !isset($data['keyword'])) && (empty($data['city_id']) || !isset($data['city_id']))) {
+    //   return Result::error("查询失败", 0);
+    // }
+    if ((empty($data['catid']) || !isset($data['catid'])) && (!empty($data['city_id']) || isset($data['city_id']))) {
+      $category = WebsiteCategory::where('website_id', $data['website_id'])->where('pid', $data['id'])->orderBy('sort')->first(['category_id']);
+      $data['catid'] = $category->category_id ??  0;
+    }
+    if (isset($data['keyword']) && !empty($data['keyword'])) {
+      array_push($where, ['name', 'like', '%' . $data['keyword'] . '%']);
+    }
+    if (isset($data['type_id']) && !empty($data['type_id'])) {
+      array_push($where, ['type_id', $data['type_id']]);
+    }
+    $query = Good::where($where)
+      ->when(isset($data['catid']) && !empty($data['catid']), function ($query) use ($data) {
+        $query->where(function ($q) use ($data) {
+          $q->WhereRaw("JSON_CONTAINS(good.cat_arr_id, '" . intval($data['catid']) . "') = 1")
+            ->orWhereRaw("JSON_CONTAINS(good.cat_arr_id, '\"" . intval($data['catid']) . "\"') = 1");
+        });
+      })
+      ->when(isset($data['city_id']) && !empty($data['city_id']), function ($query) use ($data) {
+        $query->where(function ($q) use ($data) {
+          $q->WhereRaw("JSON_CONTAINS(good.city_arr_id, '" . intval($data['city_id']) . "') = 1")
+            ->orWhereRaw("JSON_CONTAINS(good.city_arr_id, '\"" . intval($data['city_id']) . "\"') = 1");
+        });
+      })
+      ->select(
+        'good.id',
+        'good.name',
+        'good.imgurl',
+        'good.description',
+        'good.updated_at',
+        'good.com',
+        'good.catid',
+        'good.type_id',
+        'good.website_id',
+        'good.cat_arr_id',
+        'good.created_at',
+        'good.city_id'
+      )
+      ->latest('updated_at');
+    if (isset($data['ismix']) && $data['ismix'] == 1) {
+      $result['count'] = $query->clone()->count();
+      $result['goods'] = $this->processGoods(
+        $query->clone()
+          ->offset(($data['page'] - 1) * $data['pageSize'])
+          ->limit($data['pageSize'])
+          ->get(),
+        $data
+      );
+    } else {
+      $result['type1_count'] = $query->clone()->where('type_id', 1)->count();
+      // 获取 type_id 为 1 的数据
+      $result['type1'] = $this->processGoods(
+        $query->clone()
+          ->where('type_id', 1)
+          ->offset(($data['page'] - 1) * $data['pageSize'])
+          ->limit($data['pageSize'])
+          ->get(),
+        $data
+      );
+      $result['type2_count'] = $query->clone()->where('type_id', 2)->count();
+      // 获取 type_id 为 2 的数据
+      $result['type2'] = $this->processGoods(
+        $query->clone()
+          ->where('type_id', 2)
+          ->offset(($data['page'] - 1) * $data['pageSize'])
+          ->limit($data['pageSize'])
+          ->get(),
+        $data
+      );
+    }
+
+    if (empty($result)) {
+      return Result::error("查询失败", 0);
+    }
+
+    return Result::success($result);
+  }
+  /**
+   * 获取商品详情
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteshopInfo(array $data): array
+  {
+    $where = [
+      'good.status' => 2,
+      'good.website_id' => $data['website_id'],
+      'good.id' => $data['id'],
+    ];
+    $goods = Good::where($where)
+      ->where('good.id', $data['id'])
+      ->leftJoin('website_category', 'website_category.category_id', 'good.catid')
+      ->select('good.*', 'website_category.alias', 'website_category.category_id')
+      ->first();
+    if (empty($goods)) {
+      return Result::error("查询失败", 0);
+    }
+    $goods->imgurl = json_decode($goods->imgurl, true);
+    return Result::success($goods);
+  }
+  // 封装处理商品的路由问题
+  function processGoods($goods, $data)
+  {
+    return $goods->map(function ($good) use ($data) {
+      $catid = $good->catid ?? 0;
+      //     $pinyin = '';
+      $category = WebsiteCategory::where('category_id', $catid)->where('website_id', $data['website_id'])->first();
+      if (!empty($category->pid) && $category->pid != 0) {
+        $level = json_decode($category->category_arr_id, true);
+        $pinyin = WebsiteCategory::where('website_id', $data['website_id'])
+          ->whereIn('category_id', $level)
+          ->orderByRaw('FIELD(category_id, ' . implode(',', $level) . ')')
+          ->get(['aLIas_pinyin'])
+          ->pluck('aLIas_pinyin')
+          ->implode('/');
+      } else {
+        $pinyin = $category->aLIas_pinyin ?? '';
+      }
+      if (isset($good->city_id) && !empty($good->city_id)) {
+        $city = District::where('id', $good->city_id)->first(['name']);
+        $good->city_name = $city->name ?? '';
+      }
+      // 解析imgurl JSON并取第一条数据
+      $imgUrls = json_decode($good->imgurl, true);
+      $good->imgurl = !empty($imgUrls) ? $imgUrls[0] : null;
+      $good->pinyin = $pinyin;
+      return $good;
+    });
+  }
+  /**
+   * c端-获取招工招聘下拉选框
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteJobSelect(array $data): array
+  {
+    $web = Website::where('id', $data['website_id'])->first();
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    }
+    $hy = JobIndustry::get()->all();
+    $zw = JobPosition::where('zwpid', 0)->get()->all();
+    $jtzw = JobPosition::where('zwpid', '!=', 0)->get()->all();
+    $result = [
+      'hy' => $hy,
+      'zw' => $zw,
+      'jtzw' => $jtzw,
+    ];
+    if (empty($result)) {
+      return Result::error("查询失败", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * c端-获取招工招聘
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteJob(array $data): array
+  {
+    $web = Website::where('id', $data['website_id'])->first();
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    }
+    $job_hunting = JobHunting::where('job_hunting.status', 2)
+      ->where('job_hunting.website_id', $data['website_id'])
+      ->when(isset($data['city_id']) && !empty($data['city_id']), function ($query) use ($data) {
+        $query->where(function ($q) use ($data) {
+          $q->WhereRaw("JSON_CONTAINS(job_hunting.city_arr_id, '" . intval($data['city_id']) . "') = 1");
+        });
+      })
+      ->select(
+        'job_hunting.id',
+        'job_hunting.catid',
+        'job_hunting.cat_arr_id',
+        'job_hunting.job_name_get',
+        'job_hunting.industry',
+        'job_hunting.name',
+        'job_hunting.sexy',
+        'job_hunting.origin',
+        'job_hunting.city_arr_id',
+        'job_hunting.experience',
+        'job_hunting.updated_at',
+        'job_hunting.salary',
+        'job_hunting.skillList',
+        'job_hunting.slelf_evaluation',
+      )
+      ->orderBy('updated_at', 'desc')
+      ->limit($data['job1_num'])
+      ->get();
+    $web['website_id'] = $data['website_id'];
+    if (empty($job_hunting)) {
+      $job_huntings = "未查询到相关简历信息";
+    } else {
+      $job_huntings = $this->processJob($job_hunting, $web);
+    }
+    // 0:待审核 1:已通过 2:已拒绝 
+    $job_recruiting = JobRecruiting::where('job_recruiting.status', 1)
+      ->where('job_recruiting.website_id', $data['website_id'])
+      ->when(isset($data['city_id']) && !empty($data['city_id']), function ($query) use ($data) {
+        $query->where(function ($q) use ($data) {
+          $q->WhereRaw("JSON_CONTAINS(job_recruiting.city_arr_id, '" . intval($data['city_id']) . "') = 1");
+        });
+      })
+      ->leftJoin('job_company', 'job_recruiting.id', '=', 'job_company.job_id')
+      ->select(
+        'job_recruiting.id',
+        'job_recruiting.catid',
+        'job_recruiting.cat_arr_id',
+        'job_recruiting.title',
+        'job_recruiting.jtzw_id',
+        'job_recruiting.hy_id',
+        'job_recruiting.city_arr_id',
+        'job_recruiting.due_data',
+        'job_recruiting.updated_at',
+        'job_recruiting.experience',
+        'job_recruiting.educational',
+        'job_recruiting.salary',
+        'job_recruiting.zw_id',
+        'job_company.business_name',
+        'job_recruiting.keyword',
+        'job_recruiting.description',
+      )
+      ->orderBy('updated_at', 'desc')
+      ->limit($data['job2_num'])
+      ->get();
+    if (empty($job_recruiting->toArray())) {
+      $job_recruitings = "未查询到相关职位信息";
+    } else {
+      $job_recruitings = $this->processJob($job_recruiting, $web);
+    }
+
+    $result = [
+      'job_hunting' => $job_huntings,
+      'job_recuiting' => $job_recruitings,
+    ];
+    return Result::success($result);
+  }
+  /**
+   * c端-获取招工招聘列表
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteJobList(array $data): array
+  {
+    $recruit_where = [];
+    $hunt_where = [];
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name']);
+    if (empty($web)) {
+      return Result::error("此网站不存在", 0);
+    }
+    $website_id['website_id'] = $data['website_id'];
+
+
+    if ((isset($data['type']) && $data['type'] == 1) || !isset($data['type'])) {
+      if (isset($data['zw_id']) && !empty($data['zw_id'])) {
+        array_push($recruit_where, ['zw_id', $data['zw_id']]);
+      }
+      if (isset($data['jtzw_id']) && !empty($data['jtzw_id'])) {
+        array_push($recruit_where, ['jtzw_id', $data['jtzw_id']]);
+      }
+      if (isset($data['hy_id']) && !empty($data['hy_id'])) {
+        array_push($recruit_where, ['hy_id', $data['hy_id']]);
+      }
+      if (isset($data['keyword']) && !empty($data['keyword'])) {
+        array_push($recruit_where, ['title', 'like', '%' . $data['keyword'] . '%']);
+      }
+      $query = JobRecruiting::where('job_recruiting.status', 1)
+        ->where('job_recruiting.website_id', $data['website_id'])
+        ->where($recruit_where)
+        ->when(isset($data['city_id']) && !empty($data['city_id']), function ($query) use ($data) {
+          $query->where(function ($q) use ($data) {
+            $q->WhereRaw("JSON_CONTAINS(job_recruiting.city_arr_id, '" . intval($data['city_id']) . "') = 1");
+          });
+        })
+        ->when(isset($data['catid']) && !empty($data['catid']), function ($query) use ($data) {
+          $query->where(function ($q) use ($data) {
+            $q->WhereRaw("JSON_CONTAINS(job_recruiting.cat_arr_id, '" . intval($data['catid']) . "') = 1");
+          });
+        })
+        ->leftJoin('job_company', 'job_recruiting.id', '=', 'job_company.job_id')
+        ->select(
+          'job_recruiting.id',
+          'job_recruiting.catid',
+          'job_recruiting.hy_id',
+          'job_recruiting.title',
+          'job_recruiting.zw_id',
+          'job_recruiting.educational',
+          'job_recruiting.jtzw_id',
+          'job_recruiting.city_arr_id',
+          'job_recruiting.due_data',
+          'job_recruiting.experience',
+          'job_recruiting.cat_arr_id',
+          'job_recruiting.updated_at',
+          'job_company.business_name',
+          'job_recruiting.keyword',
+          'job_recruiting.description',
+        )
+        ->orderBy('job_recruiting.updated_at', 'desc');
+      $recruit_count = $query->count();
+      $query = clone $query;
+      $JobRecruiting = $query
+        ->offset(($data['page'] - 1) * $data['pageSize'])
+        ->limit($data['pageSize'])
+        ->get();
+      if (empty($JobRecruiting)) {
+        $JobRecruiting = "暂无相关职位信息";
+      } else {
+        $JobRecruiting = $this->processJob($JobRecruiting, $website_id);
+      }
+    }
+    if ((isset($data['type']) && $data['type'] == 2) || !isset($data['type'])) {
+      if (isset($data['zw_id']) && !empty($data['zw_id'])) {
+        array_push($hunt_where, ['job_hunting.job', $data['zw_id']]);
+      }
+      if (isset($data['jtzw_id']) && !empty($data['jtzw_id'])) {
+        array_push($hunt_where, ['job_hunting.job_name_get', $data['jtzw_id']]);
+      }
+      if (isset($data['hy_id']) && !empty($data['hy_id'])) {
+        array_push($hunt_where, ['job_hunting.industry', $data['hy_id']]);
+      }
+      if (isset($data['keyword']) && !empty($data['keyword'])) {
+        array_push($hunt_where, ['job_position.zwname', 'like', '%' . $data['keyword'] . '%']);
+      }
+      $query = JobHunting::where('job_hunting.status', 2)
+        ->where('job_hunting.website_id', $data['website_id'])
+        ->leftJoin('job_position', 'job_hunting.job_name_get', '=', 'job_position.zwid')
+        ->where($hunt_where)
+        // ->when(isset($data['keyword']) &&!empty($data['keyword']), function ($query) use ($data) { 
+        //     $query->where('job_position.zwname','like','%'.$data['keyword'].'%'); 
+        // }) 
+        ->when(isset($data['city_id']) && !empty($data['city_id']), function ($query) use ($data) {
+          $query->where(function ($q) use ($data) {
+            $q->WhereRaw("JSON_CONTAINS(job_hunting.city_arr_id, '" . intval($data['city_id']) . "') = 1");
+          });
+        })
+        ->when(isset($data['catid_id']) && !empty($data['catid_id']), function ($query) use ($data) {
+          $query->where(function ($q) use ($data) {
+            $q->WhereRaw("JSON_CONTAINS(job_hunting.cat_arr_id, '" . intval($data['catid_id']) . "') = 1");
+          });
+        })
+        ->select(
+          'job_hunting.id',
+          'job_hunting.catid',
+          'job_hunting.sexy',
+          'job_hunting.experience',
+          'job_hunting.origin',
+          'job_hunting.industry',
+          'job_hunting.name',
+          'job_hunting.job',
+          'job_hunting.job_name_get',
+          'job_hunting.city_arr_id',
+          'job_hunting.cat_arr_id',
+          'job_hunting.created_at',
+          'job_hunting.updated_at',
+          'job_position.zwname as job_name',
+          'job_hunting.skillList',
+          'job_hunting.slelf_evaluation',
+        )
+        ->orderBy('job_hunting.updated_at', 'desc');
+      $hunt_count = $query->count();
+      $query = clone $query;
+      $JobHunting = $query
+        ->offset(($data['page'] - 1) * $data['pageSize'])
+        ->limit($data['pageSize'])
+        ->get();
+      if (empty($JobHunting)) {
+        $JobRecruiting = "暂无相关简历信息";
+      } else {
+        $JobHunting = $this->processJob($JobHunting, $website_id);
+      }
+    }
+
+
+
+    $result = [
+      'JobRecruiting' => $JobRecruiting ?? [],
+      'recruit_count' => $recruit_count ?? 0,
+      'JobHunting' => $JobHunting ?? [],
+      'hunt_count' => $hunt_count ?? 0,
+    ];
+    return Result::success($result);
+  }
+  /**
+   * c端-获取招工招聘详情
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteJobInfo(array $data): array
+  {
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name']);
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    }
+    $webid = [
+      'website_id' => $data['website_id'],
+    ];
+    // 职位相关信息
+    if ($data['type'] == 1) {
+      $query = JobRecruiting::where('status', 1)
+        ->where('website_id', $data['website_id'])
+        ->select('*');
+      $job = $query->where('job_recruiting.id', $data['id'])->get();
+      $company = JobCompany::where('job_id', $data['id'])->select('id', 'business_name', 'company_hy_id', 'company_size', 'company_nature', 'address_arr_id', 'address', 'job_company.email')->get();
+      if (!empty($company)) {
+        $result['company'] = $this->processJob($company, $webid);
+      }
+
+      $other_job = JobRecruiting::where('status', 1)
+        ->where('website_id', $data['website_id'])
+        ->select('title', 'id', 'updated_at', 'cat_arr_id', 'user_id')
+        ->where('id', '!=', $data['id'])
+        ->where('user_id', '=', $job[0]['user_id'])
+        ->limit($data['pageSize'])
+        ->get();
+      if (!empty($other_job)) {
+        $result['other_job'] = $this->processJob($other_job, $webid);
+      }
+    } else {
+      // 简历相关信息
+      $job = JobHunting::where('job_hunting.status', 2)
+        ->where('job_hunting.website_id', $data['website_id'])
+        ->where('job_hunting.id', $data['id'])
+        ->leftJoin('user', 'user.id', '=', 'job_hunting.user_id')
+        ->select('job_hunting.*', 'user_name')
+        ->get();
+
+      $resume = JobRemuse::where('hunt_id', $data['id'])->get();
+      if (!empty($resume->toArray())) {
+        $result['resume'] = 1;
+      } else {
+        $result['resume'] = 0;
+      }
+    }
+    if (empty($job->toArray())) {
+      return Result::error("id参数错误", 0);
+    }
+    if (!empty($job[0]['job_experience'])) {
+      $job_experience = json_decode($job[0]['job_experience'], true) ?? [];
+      if (!empty($job_experience)) {
+        // $hy = [];
+        foreach ($job_experience as $key => $value) {
+          // $id = $value['id'];
+          $hy[$key] = $value['job_industry'];
+          $zw_id[$key] = $value['job_typename'];
+          $jtzw_id[$key] = $value['job_name'];
+        }
+        $hy_table = JobIndustry::whereIn('hyid', $hy)->select('hyid', 'hyname')->get();
+        $zw_table = JobPosition::select('zwid', 'zwname')->get();
+        // 先将关联表转换为索引数组,提高查找效率
+        $hyLookup = [];
+        foreach ($hy_table as $item) {
+          $hyLookup[$item['hyid']] = $item['hyname'];
+        }
+
+        $zwLookup = [];
+        foreach ($zw_table as $item) {
+          $zwLookup[$item['zwid']] = $item['zwname'];
+        }
+
+        foreach ($job_experience as $key => &$value) {
+          // 处理行业名称
+          if (isset($hy[$key]) && isset($hyLookup[$hy[$key]])) {
+            $value['hy_name'] = $hyLookup[$hy[$key]];
+          }
+
+          // 处理职位名称
+          if (isset($zw_id[$key]) && isset($zwLookup[$zw_id[$key]])) {
+            $value['zw_name'] = $zwLookup[$zw_id[$key]];
+          }
+
+          // 处理具体职位名称
+          if (isset($jtzw_id[$key]) && isset($zwLookup[$jtzw_id[$key]])) {
+            $value['jtzw_name'] = $zwLookup[$jtzw_id[$key]];
+          }
+        }
+        // 释放引用,防止意外修改后续代码
+        unset($value);
+      }
+      $result['job_experience'] = $job_experience ?? [];
+    }
+    if (!empty($job[0]['education_experience'])) {
+      $education_experience = json_decode($job[0]['education_experience'], true) ?? '';
+      if (!empty($education_experience)) {
+        foreach ($education_experience as $key => $value) {
+          // $id = $value['id'];
+          $education[$key] = $value['school_education'];
+        }
+        $education_table = JobEnum::where('egroup', 'education')->whereIn('evalue', $education)->select('evalue', 'ename')->get();
+        // // 先将关联表转换为索引数组,提高查找效率
+        $educationLookup = [];
+        foreach ($education_table as $item) {
+          $educationLookup[$item['evalue']] = $item['ename'];
+        }
+
+        foreach ($education_experience as $key => &$value) {
+          // 处理学历名称
+          if (isset($education[$key]) && isset($educationLookup[$education[$key]])) {
+            $value['education_name'] = $educationLookup[$education[$key]];
+          }
+        }
+      }
+      $result['education_experience'] = $job_experience ?? [];
+    }
+    $result['job'] = $this->processJob($job, $webid);
+    // // 返现对应的栏目
+    $catid = json_decode($job[0]['cat_arr_id'], true) ?? '';
+    $category = WebsiteCategory::where('website_id', $data['website_id'])
+      ->whereIn('category_id', $catid)
+      ->select('category_id', 'alias', 'aLIas_pinyin', 'pid')
+      ->orderBy('pid')->get()->all();
+    if (!empty($category)) {
+      $result['category'] = $category;
+    }
+    $result['job'] = $job;
+    $result['job_experience'] = $job_experience ?? [];
+    $result['education_experience'] = $education_experience ?? [];
+    if (empty($result)) {
+      return Result::error("参数错误", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * c端-申请职位
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteJobApply(array $data): array
+  {
+    // 首先验证网站是否存在
+    // return Result::success($data);
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name']);
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    }
+    // 验证用户是否存在且为个人会员/管理员
+    $user = User::where('id', $data['user_id'])->first(['id', 'type_id']);
+    // 1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员 20000:游客(小程序)
+    if (empty($user) || ($user['type_id'] != 1 && $user['type_id'] != 10000)) {
+      return Result::error("用户不存在", 0);
+    }
+    // 去除重复元素和空元素,并保持原始顺序
+    $data['recruit_id'] = array_values(array_filter(array_unique($data['recruit_id']), function ($value) {
+      return !empty($value);
+    }));
+    // 验证职位是否存在   1:审核通过
+    $recruiting = JobRecruiting::where('status', 1)
+      ->where('website_id', $data['website_id'])
+      ->whereIn('id', $data['recruit_id'])
+      ->get(['id as recruit_id', 'user_id as receiver_id'])->all();
+    if (empty($recruiting)) {
+      return Result::error("该职位不存在", 0);
+    }
+    // 简历是否存在
+    $hunt_id = JobHunting::where('user_id', $data['user_id'])->where('status', 2)->first(['id as hunt_id']);
+    if (empty($hunt_id)) {
+      return Result::error("该简历不存在", 0);
+    }
+    $data['hunt_id'] = $hunt_id['hunt_id'];
+    // // 验证是否已投递过该职位
+    $apply = JobApply::where('user_id', $data['user_id'])
+      ->where('hunt_id', $data['hunt_id'])
+      ->where('website_id', $data['website_id'])
+      ->whereIn('recruit_id', $data['recruit_id'])
+      ->get(['recruit_id']);
+    if (!empty($apply->toArray())) {
+      return Result::error("您已投递过该职位!");
+    }
+    $insertData = array_map(function ($recruiting) use ($data) {
+      return [
+        'user_id' => $data['user_id'],
+        'hunt_id' => $data['hunt_id'],
+        'website_id' => $data['website_id'],
+        'recruit_id' => $recruiting['recruit_id'],
+        'receiver_id' => $recruiting['receiver_id'],
+        'status' => 1,
+      ];
+    }, $recruiting);
+
+    // 批量插入数据
+    $result = JobApply::insert($insertData);
+    if (empty($result)) {
+      return Result::error("投递失败", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * 招工招聘-沟通简历
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteJobResume(array $data): array
+  {
+    // 首先验证网站是否存在
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name']);
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    }
+    // return Result::success($data);
+    // 验证用户是否存在且为企业会员/管理员
+    $user = User::where('id', $data['user_id'])->first(['id', 'type_id']);
+    // 1:个人会员 2:政务会员 3:企业会员 4:调研员 10000:管理员 20000:游客(小程序)
+    if (empty($user) || ($user['type_id'] != 3 && $user['type_id'] != 10000)) {
+      return Result::error("用户不存在", 0);
+    }
+    // 去除重复元素和空元素,并保持原始顺序
+    $data['hunt_id'] = array_values(array_filter(array_unique($data['hunt_id']), function ($value) {
+      return !empty($value);
+    }));
+    // 验证简历是否存在
+    $hunting = JobHunting::where('status', 2)
+      ->where('website_id', $data['website_id'])
+      ->whereIn('id', $data['hunt_id'])
+      ->get(['id as hunt_id', 'user_id as receiver_id'])->all();
+    if (empty($hunting)) {
+      return Result::error("该简历不存在", 0);
+    }
+    // 验证是否已沟通过该简历
+    $remuse = JobRemuse::where('user_id', $data['user_id'])
+      ->where('recruit_id', $data['recruit_id'])
+      ->where('website_id', $data['website_id'])
+      ->whereIn('hunt_id', $data['hunt_id'])
+      ->get(['hunt_id']);
+    if (!empty($remuse->toArray())) {
+      return Result::error("您已沟通过该简历!");
+    }
+    // 准备要插入的数据数组
+    $insertData = array_map(function ($hunting) use ($data) {
+      return [
+        'user_id' => $data['user_id'],
+        'recruit_id' => $data['recruit_id'],
+        'website_id' => $data['website_id'],
+        'hunt_id' => $hunting['hunt_id'],
+        'receiver_id' => $hunting['receiver_id'],
+        'status' => 1,
+      ];
+    }, $hunting);
+
+    // 批量插入数据
+    $result = JobRemuse::insert($insertData);
+    if (empty($result)) {
+      return Result::error("沟通失败", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * 招工招聘  -我的职位(企业会员)
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteJobRecruiting(array $data): array
+  {
+    $web = Website::where('id', $data['website_id'])->first('id');
+    if (empty($web)) {
+      return Result::error("该网站不存在", 0);
+    }
+    $user = User::where('id', $data['user_id'])->first(['id', 'type_id']);
+    if (empty($user) || ($user['type_id'] != 3 && $user['type_id'] != 10000)) {
+      return Result::error("用户暂无权限!", 0);
+    }
+    // '状态   0:待审核;1:已审核通过;(只有企业会员需要审核);2:已拒绝;
+    $result = JobRecruiting::where('website_id', $data['website_id'])
+      ->when(isset($user['type_id']) && $user['type_id'] == 3, function ($query) use ($user) {
+        $query->where('user_id', $user['id']);
+      })
+      ->where('status', 1)
+      ->select('id', 'title', 'website_id', 'user_id', 'updated_at', 'keyword', 'catid', 'description')
+      ->orderBy('updated_at', 'desc')
+      ->limit($data['pageSize'])
+      ->get();
+    if (empty($result)) {
+      return Result::error("暂无相关职位信息", 0);
+    }
+    return Result::success($result);
+  }
+  /*
+    * 获取职位
+    * */
+  public function getPositionList(array $data): array
+  {
+    if (isset($data['zwpid']) && $data['zwpid'] != null) {
+      $result = JobPosition::where('zwpid', $data['zwpid'])->get()->all();
+    } else {
+      $result = JobPosition::where('zwpid', 0)->get()->all();
+    }
+    if (empty($result)) {
+      return Result::error("暂无此职位", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * 招工招聘  -  获取推荐职位
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteLevelJob(array $data): array
+  {
+    // 状态   0:待审核;1:已审核通过;(只有企业会员需要审核);2:已拒绝;
+    $job = JobRecruiting::where('job_recruiting.website_id', $data['website_id'])
+      ->where('job_recruiting.status', 1)
+      ->where('job_level', $data['job_level'])
+      ->leftJoin('job_company', 'job_recruiting.id', '=', 'job_company.job_id')
+      ->select('job_recruiting.id', 'job_recruiting.title', 'job_recruiting.cat_arr_id', 'job_company.business_name', 'job_recruiting.updated_at')
+      ->orderBy('job_recruiting.updated_at', 'desc')
+      ->limit($data['pageSize'])
+      ->get();
+    $web = ['website_id' => $data['website_id']];
+    if (!empty($job)) {
+      $result = $this->processJob($job, $web);
+    }
+    if (empty($result)) {
+      return Result::error("暂无相关职位信息", 0);
+    }
+    return Result::success($result);
+  }
+  /**
+   * 招工招聘  -  根据栏目获取职位
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteCategoryJob(array $data): array
+  {
+    $categorys = json_decode($data['id'], true);
+    if (!empty($categorys)) {
+      $category_arr = $this->processArticlePro($data['website_id']);
+      $cat_1st_arr = $category_arr['cat_1st_arr'];
+      $catiall = $category_arr['catiall'];
+      foreach ($categorys as $key => $val) {
+        if (isset($val['id']) && !empty($val['id'])) {
+          $catid = explode(',', $val['id'])[0] ?? null;
+          $type = explode(',', $val['id'])[1] ?? null;
+          $textnum = explode(',', $val['id'])[2] ?? null;
+        }
+
+        // 4:招聘;5:求职;
+        if ($textnum > 0 && $type == 4 && !empty($catid)) {
+          // 状态   0:待审核;1:已审核通过;(只有企业会员需要审核);2:已拒绝;
+          $job = JobRecruiting::WhereRaw("JSON_CONTAINS(job_recruiting.cat_arr_id, '" . intval($catid) . "') = 1")
+            ->leftJoin('job_company', 'job_recruiting.id', '=', 'job_company.job_id')
+            ->where('job_recruiting.status', 1)
+            ->where('job_recruiting.website_id', $data['website_id'])
+            ->select(
+              'job_recruiting.id',
+              'job_recruiting.title',
+              'job_company.business_name',
+              'job_recruiting.updated_at',
+              'job_recruiting.cat_arr_id',
+              'job_recruiting.keyword',
+              'job_recruiting.description'
+            )
+            ->orderBy('job_recruiting.updated_at', 'desc')
+
+            ->limit($textnum)
+            ->get()->all();
+        } else if ($textnum > 0 && $type == 5 && !empty($catid)) {
+          // 状态  审核状态,1待审核2已审核3已拒绝
+          $job = JobHunting::WhereRaw("JSON_CONTAINS(job_hunting.cat_arr_id, '" . intval($catid) . "') = 1")
+            ->leftJoin('job_position', 'job_hunting.job_name_get', '=', 'job_position.zwid')
+            ->where('job_hunting.status', 2)
+            ->where('job_hunting.website_id', $data['website_id'])
+            ->select(
+              'job_hunting.id',
+              'job_hunting.name',
+              'job_hunting.cat_arr_id',
+              'job_position.zwname as job_name',
+              'job_hunting.updated_at',
+              // 'job_hunting.keyword',
+              'job_hunting.slelf_evaluation'
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($textnum)
+            ->get()->all();
+        } else {
+          $job = [];
+        }
+        //  var_dump($catid.'222uuuuuuu'.$key);
+        if (!empty($job)) {
+          foreach ($job as $k => $value) {
+            if (isset($value->cat_arr_id)) {
+              $catArr = json_decode($value->cat_arr_id, true);
+              $catId = end($catArr);
+            } else {
+              continue;
+            }
+            if (isset($catiall[$catId])) {
+              $job[$k]->pinyin = $catiall[$catId]['pinyin'];
+            }
+          }
+        }
+        // var_dump($catid.'xxxxx'.$key);
+        $result[$key] = $job ?? [];
+      }
+    }
+    if (empty($result)) {
+      return Result::error("暂无相关分类信息", 0);
+    }
+
+    return Result::success($result);
+  }
+  // 封装处理由问题
+  function processJob($job, $data)
+  {
+    return $job->map(function ($job) use ($data) {
+      $category = $job->cat_arr_id ?? '';
+      $cityid = $job->city_arr_id ?? '';
+      $city = json_decode($cityid, true);
+      $pinyin = '';
+      $level = json_decode($category, true);
+      // 路由
+      if (!empty($level) && is_array($level)) {
+        $pinyin = WebsiteCategory::whereIn('category_id', $level)
+          ->where('website_id', $data['website_id']) // 添加网站ID条件 
+          ->orderByRaw('FIELD(category_id, ' . implode(',', $level) . ')')
+          ->get(['aLIas_pinyin'])
+          ->pluck('aLIas_pinyin')
+          ->implode('/');
+        if (empty($pinyin)) {
+          $pinyin = $pinyin->aLIas_pinyin ?? '';
+        }
+        $job->pinyin = $pinyin;
+      }
+      // 取职位-城市  市??省
+      if (!empty($city) && is_array($city)) {
+        if (isset($city[1]) && !empty($city[1])) {
+          $city = District::where('id', $city[1])->first(['name']);
+          $job->city_name = $city->name ?? '';
+        } else if (isset($city[0]) && !empty($city[0])) {
+          $city = District::where('id', $city[0])->first(['name']);
+          $job->city_name = $city->name ?? '';
+        } else {
+          $job->city_name = '全国';
+        }
+      }
+      // 获取简历最后一级地区
+      if (isset($job->city_id) && !empty($job->city_id)) {
+        $city = District::where('id', $job->city_id)->first(['name']);
+        $job->hunt_cityname = $city->name ?? '';
+      }
+      // 组合详细地址
+      if (isset($job->address_arr_id) && !empty($job->address_arr_id)) {
+        $address_id = json_decode($job->address_arr_id, true) ?? [];
+        if (is_array($address_id) && !empty($address_id)) {
+          $address = District::whereIn('id', $address_id)
+            ->orderBy('level', 'asc')
+            ->get(['name'])
+            ->pluck('name')
+            ->implode('');
+          // $job->address_name = $address ?? '';
+          $job->address_name = ($address ?? '') . ($job->address ?? '');
+        }
+      }
+      // 取行业
+      if (!empty($job->hy_id) || !empty($job->industry) || !empty($job->company_hy_id || !empty($job->job_industry))) {
+        $hy_name = JobIndustry::when($job, function ($query) use ($job) {
+          if (!empty($job->industry)) {
+            $query->where('hyid', $job->industry);
+          } else if (!empty($job->hy_id)) {
+            $query->where('hyid', $job->hy_id);
+          } else if (!empty($job->company_hy_id)) {
+            $query->where('hyid', $job->company_hy_id);
+          } else {
+            $query->where('hyid', $job->job_industry);
+          }
+        })->first(['hyname']);
+        $job->hy_name = $hy_name->hyname ?? '';
+      }
+      // 取职位类别
+      if ((isset($job->zw_id) && !empty($job->zw_id)) || (isset($job->job) && !empty($job->job)) || (isset($job->job_typename) && !empty($job->job_typename))) {
+        $zwid = $job->job ?? $job->zw_id ?? $job->job_typename;
+        $zw_name = JobPosition::where('zwid', $zwid)->first(['zwname']);
+        $job->zw_name = $zw_name->zwname ?? '';
+      }
+      // 取具体职位
+      if ((isset($job->jtzw_id) && !empty($job->jtzw_id)) || (isset($job->job_name_get) && !empty($job->job_name_get)) || (isset($job->job_name) && !empty($job->job_name))) {
+        $jtzwid = $job->job_name_get ?? $job->jtzw_id ?? $job->job_name;
+        $jtzw_name = JobPosition::where('zwid', $jtzwid)->first(['zwname']);
+        $job->jtzw_name = $jtzw_name->zwname ?? '';
+      }
+      // 取工作经验
+      if (isset($job->experience) && !empty($job->experience)) {
+        $experience = JobEnum::where('egroup', 'years')->where('evalue', $job->experience)->first(['ename']);
+        $job->experience_name = $experience->ename ?? '';
+      }
+      // 取学历
+      if (isset($job->educational) && !empty($job->educational) || isset($job->school_education) && !empty($job->school_education)) {
+        $education = $job->educational ?? $job->school_education;
+        $education = JobEnum::where('egroup', 'education')->where('evalue', $education)->first(['ename']);
+        $job->education_name = $education->ename ?? '';
+      }
+      // 语言
+      if (isset($job->language) && !empty($job->language)) {
+        $language = JobEnum::where('egroup', 'language')->where('evalue', $job->language)->first(['ename']);
+        $job->language_name = $language->ename ?? '';
+      }
+      // 薪资
+      if (isset($job->salary) && !empty($job->salary)) {
+        $salary = JobEnum::where('egroup', 'income')->where('evalue', $job->salary)->first(['ename']);
+        $job->salary_name = $salary->ename ?? '';
+      }
+      // 职位性质
+      if (isset($job->nature_id) && !empty($job->nature_id)) {
+        $job_nature = JobEnum::where('egroup', 'nature')->where('evalue', $job->nature_id)->first(['ename']);
+        $job->job_nature_name = $job_nature->ename ?? '';
+      }
+      // 公司规模
+      if (isset($job->company_size) && !empty($job->company_size)) {
+        $company_size = JobEnum::where('egroup', 'cosize')->where('evalue', $job->company_size)->first(['ename']);
+        $job->company_size_name = $company_size->ename ?? '';
+      }
+      // 公司性质
+      if (isset($job->company_nature) && !empty($job->company_nature)) {
+        $company_nature = JobNature::where('id', $job->company_nature)->first(['nature_name']);
+        $job->company_nature_name = $company_nature->nature_name ?? '';
+      }
+      // $job->pinyin = $pinyin;
+      return $job;
+    });
+  }
+  /**
+   * 获取书籍模块
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteBook(array $data): array
+  {
+    $input['id'] = $data['id'];
+    $input['website_id'] = $data['website_id'];
+    // 将 JSON 字符串转换为 PHP 数组
+    $data = json_decode($input['id'], true);
+    // 使用 array_map 处理每个元素
+    $result = array_map(function ($item) use ($input) {
+      // 检查parent元素是否存在且不是undefined
+      if (isset($item['parent']) && $item['parent'] != 'undefined' && $item['parent'] != "") {
+        list($parentCatId, $parentImgNum, $parentTextNum) = explode(',', $item['parent']);
+        $website = [
+          'website_id' => $input['website_id'],
+        ];
+        // 查询栏目名称
+        $category = WebsiteCategory::where('category_id', $parentCatId)->where($website)->first(['alias', 'category_id', 'aLIas_pinyin']);
+        if (empty($category)) {
+          $parent_alias = '';
+          $parent_pinyin = null;
+          $imgBooks = [];
+          $textBooks = [];
+        } else {
+          $parent_alias = $category->alias ?? '';
+          $parent_pinyin = $category->aLIas_pinyin ? $category->aLIas_pinyin : null;
+          // 查找子分类ID数组
+          $childCategoryIds = WebsiteCategory::where('pid', $parentCatId)->where($website)->pluck('category_id')->toArray();
+          array_push($childCategoryIds, $parentCatId);
+          $childCategoryIds = json_encode(array_values(array_unique($childCategoryIds)));
+          if ($parentImgNum != 0) {
+            // 查询图片新闻
+            $imgBooks = Book::where(function ($query) use ($parentCatId) {
+              $query->whereRaw("JSON_CONTAINS(cat_arr_id, '\"$parentCatId\"')")
+                ->orWhereRaw("JSON_CONTAINS(cat_arr_id, '$parentCatId')");
+            })
+              ->where('book.status', 2)
+              ->where('book.img_url', '!=', '')
+              ->where('book.website_id', $website['website_id'])
+              ->leftJoin('website_category', function ($join) use ($website) {
+                $join->on('book.cat_id', '=', 'website_category.category_id')
+                  ->where('website_category.website_id', '=', $website['website_id']);
+              })
+              ->select(
+                'book.id',
+                'book.title',
+                'book.img_url',
+                'book.price',
+                'book.market_price',
+                'book.description',
+                'book.cat_id',
+                'book.description',
+                'book.updated_at',
+                'website_category.alias as category_name',
+                DB::raw("CASE WHEN book.cat_id = $parentCatId THEN '$parent_pinyin' 
+                                        ELSE CONCAT('$parent_pinyin', '/', website_category.aLIas_pinyin) END as pinyin")
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($parentImgNum)
+              ->get()->all();
+            // 查询文字新闻
+          }
+          if ($parentTextNum != 0) {
+            $textBooks = [];
+            $textBooks = Book::where(function ($query) use ($parentCatId) {
+              $query->whereRaw("JSON_CONTAINS(cat_arr_id, '\"$parentCatId\"')")
+                ->orWhereRaw("JSON_CONTAINS(cat_arr_id, '$parentCatId')");
+            })
+              ->where('book.status', 2)
+              ->where('book.website_id', $website['website_id'])
+              ->leftJoin('website_category', function ($join) use ($website) {
+                $join->on('book.cat_id', '=', 'website_category.category_id')
+                  ->where('website_category.website_id', '=', $website['website_id']);
+              })
+              ->select(
+                'book.id',
+                'book.title',
+                'book.img_url',
+                'book.price',
+                'book.market_price',
+                'book.description',
+                'book.cat_id',
+                'book.description',
+                'book.updated_at',
+                'website_category.alias as category_name',
+                DB::raw("CASE WHEN book.cat_id = $parentCatId THEN '$parent_pinyin' 
+                                        ELSE CONCAT('$parent_pinyin', '/', website_category.aLIas_pinyin) END as pinyin")
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($parentTextNum)
+              ->get()->all();
+          }
+        }
+      }
+      $resultItem = [
+        'alias' => $parent_alias ?? '',
+        'category_id' => $parentCatId ?? 0,
+        'pinyin' => $parent_pinyin ?? null,
+        'imgnum' => $imgBooks ?? [],
+        'textnum' => $textBooks ?? [],
+      ];
+      if (isset($item['child']) && $item['child'] != 'undefined' && $item['child'] != "") {
+        $parent_pinyin_str = is_string($parent_pinyin) ? $parent_pinyin . '/' : '';
+        $childCategory = WebsiteCategory::where('pid', $parentCatId)->where($website)
+          ->selectRaw("category_id, alias, CONCAT( ?, aLIas_pinyin) as aLIas_pinyin", [$parent_pinyin_str])
+          ->get()->all();
+        if (!empty($childCategory)) {
+          list($childCatId, $childImgNum, $childTextNum) = explode(',', $item['child']);
+          // 查询子栏目名称
+          $childCategoryInfo = WebsiteCategory::where('category_id', $childCatId)->where($website)
+            ->selectRaw("category_id, alias, CONCAT( ?, aLIas_pinyin) as aLIas_pinyin", [$parent_pinyin_str])
+            ->first();
+          if (empty($childCategoryInfo) || ($childImgNum == 0 && $childTextNum == 0)) {
+            $childImgArticles = [];
+            $childTextArticles = [];
+            $resultItem['child'] = [];
+          } else {
+            $child_pinyin = $childCategoryInfo->aLIas_pinyin ? $childCategoryInfo->aLIas_pinyin : null;
+            // 查询子栏目图片新闻
+            $childImgArticles = Book::where('cat_id', $childCatId)
+              ->where('status', 2)
+              ->where('img_url', '!=', '')
+              ->where('book.website_id', $website['website_id'])
+              ->leftJoin('website_category', function ($join) use ($website) {
+                $join->on('book.cat_id', '=', 'website_category.category_id')
+                  ->where('website_category.website_id', '=', $website['website_id']);
+              })
+              ->select(
+                'book.id',
+                'book.title',
+                'book.img_url',
+                'book.price',
+                'book.market_price',
+                'book.description',
+                'book.cat_id',
+                'book.description',
+                'book.updated_at',
+                DB::raw("'$child_pinyin' as pinyin")
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($childImgNum)
+              ->get()->all();
+            // 查询子栏目文字新闻
+            $childTextArticles = Book::where('cat_id', $childCatId)
+              ->where('status', 2)
+              ->where('book.website_id', $website['website_id'])
+              ->leftJoin('website_category', function ($join) use ($website) {
+                $join->on('book.cat_id', '=', 'website_category.category_id')
+                  ->where('website_category.website_id', '=', $website['website_id']);
+              })
+              ->select(
+                'book.id',
+                'book.title',
+                'book.img_url',
+                'book.price',
+                'book.market_price',
+                'book.description',
+                'book.cat_id',
+                'book.description',
+                'book.updated_at',
+                DB::raw("'$child_pinyin' as pinyin")
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($childTextNum)
+              ->get()->all();
+            $resultItem['child'] = [
+              'alias' => $childCategoryInfo ? $childCategoryInfo->alias : null,
+              'category_id' => $childCatId,
+              'pinyin' => $childCategoryInfo->aLIas_pinyin ?? '',
+              'all_childcat' => $childCategory,
+              'imgnum' => $childImgArticles,
+              'textnum' => $childTextArticles,
+            ];
+          }
+        }
+      } else {
+        $resultItem['child'] = [];
+      }
+      return $resultItem;
+    }, $data);
+    return Result::success($result);
+  }
+  /**
+   * 获取书刊列表
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteBookList(array $data): array
+  {
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name']);
+    if (empty($web)) {
+      return Result::error("查询失败", 0);
+    }
+    $catid = $data['id'];
+    $category = WebsiteCategory::where('website_id', $data['website_id'])->where('category_id', $catid)->orderBy('sort')->first(['pid', 'category_id', 'aLias_pinyin']);
+    $parent_categpory = WebsiteCategory::where('website_id', $data['website_id'])->where('category_id', $category['pid'])->orderBy('sort')->first(['aLias_pinyin']);
+    $parent_pinyin = $parent_categpory ? $parent_categpory->aLias_pinyin ?? '' : '';
+    $category_pinyin = $category ? $category->aLias_pinyin : '';
+    $pinyin = $category_pinyin ? $parent_pinyin . '/' . $category_pinyin ?? '' : '';
+    $categorys = WebsiteCategory::where('website_id', $data['website_id'])
+      ->where('pid', $category['pid'])
+      ->select(
+        'category_id',
+        'alias',
+        'aLIas_pinyin',
+        'pid',
+        'sort',
+        'is_url',
+        'web_url',
+        'seo_title',
+        'seo_keywords',
+        'seo_description',
+        DB::raw("CONCAT('$parent_pinyin', '/', aLIas_pinyin) as pinyin")
+      )
+      ->orderBy('sort')
+      ->get()->all();
+    if (empty($category)) {
+      return Result::error("查询失败", 0);
+    }
+    $query = Book::where('book.status', 2)
+      ->where('book.website_id', $data['website_id'])
+      ->where('book.cat_id', $catid)
+      ->select(
+        'book.id',
+        'book.title',
+        'book.img_url',
+        'book.description',
+        'book.updated_at',
+        'book.cat_id',
+        DB::raw("'$pinyin' as pinyin")
+      )
+      ->orderBy('book.updated_at', 'desc');
+    $count = $query->count();
+    $query = clone $query;
+    $Book = $query
+      ->limit($data['pageSize'])
+      ->offset(($data['page'] - 1) * $data['pageSize'])
+      ->get()->all();
+
+    $result = [
+      'category' => $categorys,
+      'books' => $Book,
+      'count' => $count,
+    ];
+    // if(empty($result)){
+    //     return Result::error("查询失败", 0);
+    // }
+    return Result::success($result);
+  }
+  /**
+   * 获取书刊详情
+   * @param array $data
+   * @return array
+   *  */
+  public function getWebsiteBookInfo(array $data): array
+  {
+    $web = Website::where('id', $data['website_id'])->first(['id', 'website_name']);
+    if (empty($web)) {
+      return Result::error("查询失败", 0);
+    }
+    $book = Book::where('status', 2)
+      ->where('website_id', $data['website_id'])
+      ->where('id', $data['id'])
+      ->select(
+        'book.*',
+      )
+      ->orderBy('updated_at', 'desc')
+      ->first();
+    if (empty($book)) {
+      return Result::error("查询失败", 0);
+    }
+    // 先查询当前分类的 pid
+    $carpid = WebsiteCategory::where('website_id', $data['website_id'])
+      ->where('category_id', $book['cat_id'])
+      ->first(['pid', 'category_id']);
+    $query = WebsiteCategory::where('website_id', $data['website_id']);
+    if (!empty($carpid)) {
+      if ($carpid->pid != 0) {
+        $pid = $carpid['pid'];
+        // $parent_pinyin = '';
+      } else {
+        $pid = $carpid['category_id'];
+        // $parent_pinyin = $currentCategory->aLias_pinyin?? '';
+      }
+    }
+    $categorys = $query->where('pid', $pid)
+      ->select(
+        'category_id',
+        'alias',
+        'aLIas_pinyin',
+        'pid',
+        'sort',
+        'is_url',
+        'web_url',
+        'category_arr_id as cat_arr_id',
+      )
+      ->orderBy('sort')
+      ->get();
+    $category = $this->processArticle($categorys, $data);
+    $result = [
+      'category' => $category,
+      'books' => $book,
+    ];
+    return Result::success($result);
+  }
+  /**
+   * 封装处理文章的路由问题
+   *  */
+  function processArticle($article, $data)
+  {
+    return $article->map(function ($article) use ($data) {
+      $catid = $article->cat_arr_id ?? '';
+      $level = json_decode($catid, true);
+      $pinyin = '';
+      // $category = WebsiteCategory::where('category_id', $catid)->where('website_id', $data['website_id'])->first();
+      if (!empty($level) && is_array($level)) {
+        $pinyin = WebsiteCategory::whereIn('category_id', $level)
+          ->where('website_id', $data['website_id'])
+          ->orderByRaw('FIELD(category_id, ' . implode(',', $level) . ')')
+          ->get(['aLIas_pinyin'])
+          ->pluck('aLIas_pinyin')
+          ->implode('/');
+      } else {
+        $pinyin = '';
+      }
+      $article->pinyin = $pinyin;
+      return $article;
+    });
+  }  
+  /**
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteCompany(array $data): array
+  {
+    $categorys = json_decode($data['id'], true);
+    $category_arr = $this->processArticlePro($data['website_id']);
+    $cat_1st_arr = $category_arr['cat_1st_arr'];
+    $catiall = $category_arr['catiall'];
+    $categoryIds = $category_arr['categoryIds'];
+    // return Result::success($category_arr);
+    foreach ($categorys as $key => $value) {
+      if (array_key_exists('level', $value)) {
+        $parts = explode(',', $value['level']);
+        $level = $parts[0] ?? null;
+        $imgnum = $parts[1] ?? null;
+        $textnum = $parts[2] ?? null;
+        if (!empty($textnum) && $textnum > 0) {
+          $text_num = Company::where('level', $level)
+            ->whereIn('category_id', $categoryIds)
+            ->where('status', 1)
+            ->select(
+              'company.id',
+              'company.title',
+              'company.description',
+              'company.updated_at',
+              'company.category_id',
+              'company.cat_arr_id'
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($textnum)
+            ->get()->all();
+        }
+        if (!empty($imgnum) && $imgnum > 0) {
+          $img_num = Company::where('level', $level)
+            ->whereIn('category_id', $categoryIds)
+            ->where('status', 1)
+            ->where('imgurl', '!=', '')
+            ->whereNotNull('imgurl')
+            ->select(
+              'company.id',
+              'company.title',
+              'company.description',
+              'company.updated_at',
+              'company.imgurl as imgs',
+              'company.category_id',
+              'company.cat_arr_id'
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($imgnum)
+            ->get()->all();
+        }
+      }
+      if (array_key_exists('id', $value)) {
+        $parts = explode(',', $value['id']);
+        $category_id = $parts[0] ?? null;
+        $imgnum = $parts[1] ?? null;
+        $textnum = $parts[2] ?? null;
+        $category_arr = array_merge([$category_id], $cat_1st_arr[$category_id] ?? [0]);
+        if (!empty($textnum) && $textnum > 0) {
+          $text_num = Company::whereIn('category_id', $category_arr)
+            // ->where('website_id', $data['website_id'])
+            ->where('status', 1)
+            ->select(
+              'company.id',
+              'company.title',
+              'company.description',
+              'company.updated_at',
+              'company.category_id',
+              'company.cat_arr_id'
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($textnum)
+            ->get()->all();
+        }
+        if (!empty($imgnum) && $imgnum > 0) {
+
+          $img_num = Company::whereIn('category_id', $category_arr)
+            // ->where('website_id', $data['website_id'])
+            ->where('status', 1)
+            ->where('imgurl', '!=', '')
+            ->whereNotNull('imgurl')
+            ->select(
+              'company.id',
+              'company.title',
+              'company.description',
+              'company.updated_at',
+              'company.imgurl as imgs',
+              'company.category_id',
+              'company.cat_arr_id'
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($imgnum)
+            ->get()->all();
+        }
+      }
+      if (!empty($text_num)) {
+        foreach ($text_num as $k => $v) {
+          $text_num[$k]->category_name = $catiall[$v->category_id]['alias'];
+          $text_num[$k]->pinyin = $catiall[$v->category_id]['pinyin'];
+        }
+      }
+      if (!empty($img_num)) {
+        foreach ($img_num as $k => $v) {
+          $img_num[$k]->category_name = $catiall[$v->category_id]['alias'];
+          $imgurl = json_decode($v['imgs'], true);
+          if (!empty($imgurl)) {
+            $img_num[$k]->imgurl = $imgurl[0];
+          }
+          $img_num[$k]->pinyin = $catiall[$v->category_id]['pinyin'];
+        }
+      }
+      $company[$key]['img_num'] = $img_num ?? [];
+      $company[$key]['text_num'] = $text_num ?? [];
+    }
+
+    if (empty($company)) {
+      return Result::error("暂无相关企业信息", 0);
+    }
+
+    return Result::success($company);
+  }
+  /**
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteCompanyList(array $data): array
+  {
+    $where['website_id'] = $data['website_id'];
+    $where['status'] = 1;
+    $categoryIds = [];
+    if (isset($data['category_id']) && !empty($data['category_id'])) {
+
+      $category_id = $data['category_id'];
+    }
+    $category_arr = $this->processArticlePro($data['website_id']);
+    $categoryIds = $category_arr['categoryIds'];
+    // return Result::success($cat_1st_arr);
+    $company = Company::when(isset($data['keyword']) && !empty($data['keyword']), function ($query) use ($data) {
+      $query->where('title', 'like', '%' . $data['keyword'] . '%');
+    })
+      ->when(!isset($category_id) || empty($category_id), function ($query) use ($categoryIds) {
+        $query->whereIn('category_id', $categoryIds);
+      })
+      ->when(isset($data['category_id']) && !empty($data['category_id']), function ($query) use ($category_id) {
+        $query->where('category_id', $category_id);
+      })
+      ->where('status',1)
+      ->select('id', 'title', 'introduce', 'description', 'content', 'category_id', 'cat_arr_id', 'updated_at')
+      ->orderBy('updated_at', 'desc')
+      ->paginate($data['pageSize'], ['*'], 'page', $data['page']);
+    if (empty($company)) {
+      return Result::error("暂无相关公司信息", 0);
+    }
+    $result = [
+      'count' => $company->total(),
+      'data' => $company->items(), // 使用 items() 方法替代不存在的 data() 方法
+    ];
+    return Result::success($result);
+  }
+  public function getWebsiteCompanyInfo(array $data): array
+  {
+    $company = Company::where('id', $data['id'])
+      ->leftJoin('job_industry', 'job_industry.hyid', 'company.hy_id')
+      ->where('status', 1)
+      // ->where('website_id', $data['website_id'])
+      ->select('company.*', 'job_industry.hyname as hy_name')
+      ->first();
+    // 企业性质:0:市场监管;1:信访纪检;2:公检法司;3:高关注机构
+    $jobnature_id = $company['jobnature_id'] ?? null;
+    if ($jobnature_id !== null) {
+        switch ($jobnature_id) {
+            case 0:
+                $company->jobnature_name = '市场监督';
+                break;
+            case 1:
+                $company->jobnature_name = '信访纪检';
+                break;
+            case 2:
+                $company->jobnature_name = '公检法司';
+                break;
+            case 3:
+                $company->jobnature_name = '高关注机构';
+                break;
+            default:
+                $company->jobnature_name = '';
+                break;
+        }
+    } else {
+        $company->jobnature_name = '';
+    }
+    $city_arr = $company->city_arr_id;
+    if (!empty($city_arr)) {
+      $city_arr = json_decode($city_arr, true);
+      $cityNames = District::whereIn('id', $city_arr)
+        ->pluck('name')
+        ->implode('-');
+      $company->city_name = $cityNames;
+    } else {
+      $company->city_name = '';
+    }
+    if (empty($company)) {
+      return Result::error("暂无相关公司信息", 0);
+    }
+    return Result::success($company);
+  }
+  /**
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteProject(array $data): array
+  {
+    $categorys = json_decode($data['id'], true);
+    if (!empty($categorys)) {
+      $category_arr = $this->processArticlePro($data['website_id']);
+      $cat_1st_arr = $category_arr['cat_1st_arr'];
+      $catiall = $category_arr['catiall'];
+      // return Result::success($catiall);
+      foreach ($categorys as $key => $val) {
+        if (isset($val['level'][0]) && !empty($val['level'][0])) {
+          $level = explode(',', $val['level'])[0];
+          $imgnum = explode(',', $val['level'])[1] ?? null;
+          $textnum = explode(',', $val['level'])[2] ?? null;
+          if ($level == 1) {
+            if (!empty($textnum) && $textnum > 0) {
+              $text_num = Project::where('level', $level)
+                ->where('website_id', $data['website_id'])
+                ->where('status', 1)
+                ->select(
+                  'project.id',
+                  'project.title',
+                  'project.description',
+                  'project.updated_at',
+                  'project.category_id',
+                  'project.cat_arr_id'
+                )
+                ->orderBy('updated_at', 'desc')
+                ->limit($textnum)
+                ->get()->all();
+            }
+            if (!empty($imgnum) && $imgnum > 0) {
+              $img_num = Project::where('level', $level)
+                ->where('website_id', $data['website_id'])
+                ->where('status', 1)
+                ->where('imgurl', '!=', '')
+                ->whereNotNull('imgurl')
+                ->select(
+                  'project.id',
+                  'project.title',
+                  'project.description',
+                  'project.updated_at',
+                  'project.imgurl as imgs',
+                  'project.category_id',
+                  'project.cat_arr_id'
+                )
+                ->orderBy('updated_at', 'desc')
+                ->limit($imgnum)
+                ->get()->all();
+            }
+          } else {
+            if (!empty($textnum) && $textnum > 0) {
+              $text_num = Project::where('website_id', $data['website_id'])
+                ->where('status', 1)
+                ->select(
+                  'project.id',
+                  'project.title',
+                  'project.description',
+                  'project.updated_at',
+                  'project.category_id',
+                  'project.cat_arr_id',
+                  'project.website_id',
+                  'project.updated_at',
+                  'project.created_at'
+                )
+                ->orderBy('updated_at', 'desc')
+                ->limit($textnum)
+                ->get()->all();
+            }
+            if (!empty($imgnum) && $imgnum > 0) {
+              $img_num = Project::where('website_id', $data['website_id'])
+                ->where('status', 1)
+                ->where('imgurl', '!=', '')
+                ->whereNotNull('imgurl')
+                ->select(
+                  'project.id',
+                  'project.title',
+                  'project.description',
+                  'project.updated_at',
+                  'project.imgurl as imgs',
+                  'project.category_id',
+                  'project.cat_arr_id'
+                )
+                ->orderBy('updated_at', 'desc')
+                ->limit($imgnum)
+                ->get()->all();
+            }
+          }
+        }
+        if (isset($val['id'][0]) && !empty($val['id'][0])) {
+          $category_ids = explode(',', $val['id'])[0];
+          $cat_imgnum = explode(',', $val['id'])[1] ?? null;
+          $cat_textnum = explode(',', $val['id'])[2] ?? null;
+          $category_arr = array_merge([$category_ids], $cat_1st_arr[$category_ids] ?? [0]);
+          if (!empty($cat_textnum) && $cat_textnum > 0) {
+            $text_num = Project::whereIn('category_id', $category_arr)
+              ->where('website_id', $data['website_id'])
+              ->where('status', 1)
+              ->select(
+                'project.id',
+                'project.title',
+                'project.description',
+                'project.updated_at',
+                'project.category_id',
+                'project.cat_arr_id'
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($cat_textnum)
+              ->get()->all();
+          }
+          if (!empty($cat_imgnum) && $cat_imgnum > 0) {
+            $img_num = Project::whereIn('category_id', $category_arr)
+              ->where('website_id', $data['website_id'])
+              ->where('status', 1)
+              ->where('imgurl', '!=', '')
+              ->whereNotNull('imgurl')
+              ->select(
+                'project.id',
+                'project.title',
+                'project.description',
+                'project.updated_at',
+                'project.imgurl as imgs',
+                'project.category_id',
+                'project.cat_arr_id'
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($cat_imgnum)
+              ->get()->all();
+          }
+        }
+        if (!empty($img_num)) {
+          foreach ($img_num as $k => $v) {
+            $img_num[$k]->category_name = $catiall[$v->category_id]['alias'];
+            $imgurl = json_decode($v['imgs'], true);
+            if (!empty($imgurl)) {
+              $img_num[$k]->imgurl = $imgurl[0];
+            }
+            $img_num[$k]->pinyin = $catiall[$v->category_id]['pinyin'];
+          }
+        }
+        if (!empty($text_num)) {
+          foreach ($text_num as $k => $v) {
+            $text_num[$k]->category_name = $catiall[$v->category_id]['alias'];
+            $text_num[$k]->pinyin = $catiall[$v->category_id]['pinyin'];
+          }
+        }
+        $project[$key]['img_num'] = $img_num ?? [];
+        $project[$key]['text_num'] = $text_num ?? [];
+      }
+    }
+    if (empty($project)) {
+      return Result::error("暂无相关项目信息", 0);
+    }
+    return Result::success($project);
+  }
+  /**
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteProjectInfo(array $data): array
+  {
+    $project = Project::where('id', $data['id'])
+      ->where('status', 1)
+      ->where('website_id', $data['website_id'])
+      ->select('project.*')
+      ->first();
+    if (empty($project)) {
+      return Result::error("暂无相关项目信息", 0);
+    }
+    return Result::success($project);
+  }
+  /**
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteProjectList(array $data): array
+  {
+    $where = [];
+    if (isset($data['category_id']) && !empty($data['category_id'])) {
+      $where['category_id'] = $data['category_id'];
+    }
+    if (isset($data['keyword']) && !empty($data['keyword'])) {
+      $where[] = ['title', 'like', '%' . $data['keyword'] . '%'];
+    }
+    $query = Project::where($where)
+      ->where('status', 1)
+      ->where('website_id', $data['website_id'])
+      ->select(
+        'project.id',
+        'project.title',
+        'project.description',
+        'project.imgurl as imgs',
+        'project.category_id',
+        'project.cat_arr_id'
+      )
+      ->orderBy('updated_at', 'desc');
+    $count = $query->count();
+    $project = $query->clone()
+      ->offset(($data['page'] - 1) * $data['pageSize'])
+      ->limit($data['pageSize'])
+      ->get()->all();
+    if (empty($project)) {
+      return Result::error("暂无相关项目信息", 0);
+    }
+    $categorys = $this->processArticlePro($data['website_id']);
+    $catiall = $categorys['catiall'];
+    foreach ($project as $key => $val) {
+      $project[$key]->category_name = $catiall[$val->category_id]['alias'];
+      if (!empty($val['imgs'])) {
+        $imgurl = json_decode($val['imgs'], true);
+        if (!empty($imgurl)) {
+          $project[$key]->imgurl = $imgurl[0];
+        }
+      } else {
+        $project[$key]->imgurl = '';
+      }
+
+      $project[$key]->pinyin = $catiall[$val->category_id]['pinyin'];
+    }
+    $result = [
+      'rows' => $project,
+      'count' => $count,
+    ];
+    return Result::success($result);
+  }
+}

+ 209 - 0
app/JsonRpc/WebServiceInterface.php

@@ -0,0 +1,209 @@
+<?php
+
+namespace App\JsonRpc;
+
+interface WebServiceInterface
+{
+    /**
+     * 查询网站下面的导航
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteModelCategory(array $data): array;
+     /**
+     * 查询网站下面的分类的seo信息
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteCategoryHead(array $data): array;
+    public function getOneWebsiteCategory(array $data): array;
+    public function getWebsiteRoute(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function checkWebsiteRoute(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticle(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteArticlett(array $data): array;
+        /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteAllArticle(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteArticles(array $data): array;
+    
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteArticleList(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticleInfo(array $data): array;
+    public function getWebsiteHead(array $data): array;
+     /**
+     * 查询网站下面的地区
+     * @param array $data
+     * @return array
+     */
+    public function selectWebArea(array $data): array; 
+    /**
+     * 查询网站下面的模型分类
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteDistrit(array $data): array;
+    // /**
+    //  * 查询网站下面的省份
+    //  * @param array $data
+    //  * @return array
+    //  */
+    // public function getWebsiteDistrit(array $data): array;
+   
+    /**
+     * 查询网站下面的职能部门
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteDepartment(array $data): array;
+    /**
+     * 查询网站下面的链接
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteLinks(array $data): array;
+    public function getWebsiteFooterCategory(array $data): array;
+    public function getWebsiteFooterCategoryList(array $data): array;
+    public function getWebsiteFooterCategoryInfo(array $data): array;
+    public function getWebsiteFootInfo(array $data): array;
+    public function getWebsiteFootAll(array $data): array;
+    public function getWebsiteAllinfo(array $data): array;
+     /**
+     * 查询广告位
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteAdvertisement(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteSurvey(array $data): array;
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function addWebsiteSurveyOption(array $data): array;
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function addWebsiteSurveyVote(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJobSelect(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJob(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJobList(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJobInfo(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJobApply(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJobResume(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteJobRecruiting(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getPositionList(array $data): array;
+    public function getWebsiteLevelJob(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteCategoryJob(array $data): array;
+     /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteBook(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteBookList(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteBookInfo(array $data): array;
+     /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteCompany(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteCompanyInfo(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteCompanyList(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteProject(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteProjectInfo(array $data): array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteProjectList(array $data): array;
+}

+ 66 - 0
app/Listener/DbQueryExecutedListener.php

@@ -0,0 +1,66 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+namespace App\Listener;
+
+use Hyperf\Collection\Arr;
+use Hyperf\Database\Events\QueryExecuted;
+use Hyperf\Event\Annotation\Listener;
+use Hyperf\Event\Contract\ListenerInterface;
+use Hyperf\Logger\LoggerFactory;
+use Psr\Container\ContainerInterface;
+use Psr\Log\LoggerInterface;
+
+#[Listener]
+class DbQueryExecutedListener implements ListenerInterface
+{
+    /**
+     * @var LoggerInterface
+     */
+    private $logger;
+
+    public function __construct(ContainerInterface $container)
+    {
+        $this->logger = $container->get(LoggerFactory::class)->get('sql');
+    }
+
+    public function listen(): array
+    {
+        return [
+            QueryExecuted::class,
+        ];
+    }
+
+    /**
+     * @param QueryExecuted $event
+     */
+    public function process(object $event): void
+    {
+        if ($event instanceof QueryExecuted) {
+            $sql = $event->sql;
+            if (! Arr::isAssoc($event->bindings)) {
+                $position = 0;
+                foreach ($event->bindings as $value) {
+                    $position = strpos($sql, '?', $position);
+                    if ($position === false) {
+                        break;
+                    }
+                    $value = "'{$value}'";
+                    $sql = substr_replace($sql, $value, $position, 1);
+                    $position += strlen($value);
+                }
+            }
+
+            $this->logger->info(sprintf('[%s] %s', $event->time, $sql));
+        }
+    }
+}

+ 35 - 0
app/Listener/ResumeExitCoordinatorListener.php

@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+namespace App\Listener;
+
+use Hyperf\Command\Event\AfterExecute;
+use Hyperf\Coordinator\Constants;
+use Hyperf\Coordinator\CoordinatorManager;
+use Hyperf\Event\Annotation\Listener;
+use Hyperf\Event\Contract\ListenerInterface;
+
+#[Listener]
+class ResumeExitCoordinatorListener implements ListenerInterface
+{
+    public function listen(): array
+    {
+        return [
+            AfterExecute::class,
+        ];
+    }
+
+    public function process(object $event): void
+    {
+        CoordinatorManager::until(Constants::WORKER_EXIT)->resume();
+    }
+}

+ 27 - 0
app/Model/AdPlace.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class AdPlace extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'ad_place';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = ['ad_tag'];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Article.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Article extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'article';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ArticleData.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ArticleData extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'article_data';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ArticleIgnore.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ArticleIgnore extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'article_ignore';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ArticleSurvey copy.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ArticleSurvey extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'article_survey';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ArticleSurvey.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ArticleSurvey extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'article_survey';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Book.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Book extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'book';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $guarded = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Category.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Category extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'category';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 22 - 0
app/Model/Character.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Character extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'character';
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ChatGroups.php

@@ -0,0 +1,27 @@
+<?php
+
+declare (strict_types = 1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ChatGroups extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'chat_groups';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ChatGroupsMember.php

@@ -0,0 +1,27 @@
+<?php
+
+declare (strict_types = 1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ChatGroupsMember extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'chat_groups_members';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/ChatRecords.php

@@ -0,0 +1,27 @@
+<?php
+
+declare (strict_types = 1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ChatRecords extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'chat_records';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Company.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Company extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'company';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $guarded = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 22 - 0
app/Model/Couplet.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Couplet extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'couplet';
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 62 - 0
app/Model/Department.php

@@ -0,0 +1,62 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ * @property int $id 
+ * @property int $pid 
+ * @property string $name 
+ * @property string $dir_name 
+ * @property int $fid 
+ * @property int $fup 
+ * @property int $mid 
+ * @property int $class 
+ * @property int $sons 
+ * @property int $type 
+ * @property string $admin 
+ * @property int $list 
+ * @property int $listorder 
+ * @property string $passwd 
+ * @property string $logo 
+ * @property string $descrip 
+ * @property string $style 
+ * @property string $template 
+ * @property string $jumpurl 
+ * @property int $maxperpage 
+ * @property string $metakeywords 
+ * @property string $metadescription 
+ * @property int $allowcomment 
+ * @property string $allowpost 
+ * @property string $allowviewtitle 
+ * @property string $allowviewcontent 
+ * @property string $allowdownload 
+ * @property int $forbidshow 
+ * @property string $config 
+ * @property int $index_show 
+ * @property int $contents 
+ * @property string $tableid 
+ * @property int $sort 
+
+ */
+class Department extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'department';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = ['id' => 'integer', 'pid' => 'integer', 'fid' => 'integer', 'fup' => 'integer', 'mid' => 'integer', 'class' => 'integer', 'sons' => 'integer', 'type' => 'integer', 'list' => 'integer', 'listorder' => 'integer', 'maxperpage' => 'integer', 'allowcomment' => 'integer', 'forbidshow' => 'integer', 'index_show' => 'integer', 'contents' => 'integer', 'sort' => 'integer'];
+
+}

+ 27 - 0
app/Model/District.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class District extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'district';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 22 - 0
app/Model/Festival.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Festival extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'festival';
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/FooterCategory.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class FooterCategory extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'footer_category';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/FooterContent.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class FooterContent extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'footer_content';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 29 - 0
app/Model/Good.php

@@ -0,0 +1,29 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Good extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'good';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    // protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+
+    protected array $guarded = [];
+}

+ 28 - 0
app/Model/GroupImp.php

@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class GroupImp extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $connection = 'imp';
+    protected ?string $table = 'group';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 28 - 0
app/Model/GroupMemberImp.php

@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class GroupMemberImp extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $connection = 'imp';
+    protected ?string $table = 'group_member';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 28 - 0
app/Model/GroupTalkImp.php

@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class GroupTalkImp extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $connection = 'imp';
+    protected ?string $table = 'talk_session';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 28 - 0
app/Model/GroupTalkMessagerImp.php

@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class GroupTalkMessagerImp extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $connection = 'imp';
+    protected ?string $table = 'talk_group_message';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 22 - 0
app/Model/HistoryToday.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class HistoryToday extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'history_today';
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 22 - 0
app/Model/Idiom.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Idiom extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'idiom';
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobApply.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobApply extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_apply';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobCompany.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobCompany extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_company';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobEnum.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobEnum extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_enum';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobHunting.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobHunting extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_hunting';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $guarded = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobIndustry.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobIndustry extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_industry';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobNature.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobNature extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_nature';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobPosition.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobPosition extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_position';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobRecruiting.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobRecruiting extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_recruiting';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobRemuse.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobRemuse extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_resume';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/JobResume.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class JobResume extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'job_resume';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Link.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Link extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'link';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 19 - 0
app/Model/Model copy.php

@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model as BaseModel;
+
+abstract class Model extends BaseModel
+{
+}

+ 19 - 0
app/Model/Model.php

@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model as BaseModel;
+
+abstract class Model extends BaseModel
+{
+}

+ 27 - 0
app/Model/Notice.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Notice extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'notice';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $guarded = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Project.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Project extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'project';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 22 - 0
app/Model/Riddle.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Riddle extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'riddle';
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 29 - 0
app/Model/User.php

@@ -0,0 +1,29 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class User extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'user';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    // protected array $fillable = ["user_name","avatar","status","email","rong_token"];
+    // protected array $hidden = [];
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/UserInfo.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class UserInfo extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'user_info';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Web.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Web extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'web';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/Website.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Website extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 32 - 0
app/Model/WebsiteCategory.php

@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteCategory extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_category';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+    public function children()
+    {
+        return $this->hasMany(WebsiteCategory::class, 'pid', 'category_id');
+    }
+
+}

+ 27 - 0
app/Model/WebsiteColumn.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteColumn extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_column';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/WebsiteGroup.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteGroup extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_group';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/WebsiteRole.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteRole extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_role';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/WebsiteRoleUser.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteRoleUser extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_role_user';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/WebsiteTemplate.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteTemplate extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_template';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/WebsiteTemplateInfo.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WebsiteTemplateInfo extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'website_template_info';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 27 - 0
app/Model/WhiteRouter.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class WhiteRouter extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'white_router';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 31 - 0
app/Model/complaint.php

@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class Complaint extends Model
+{
+
+
+
+
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table =   'complaint';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $guarded = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}

+ 54 - 0
app/Tools/PublicData.php

@@ -0,0 +1,54 @@
+<?php
+namespace App\Tools;
+use App\Constants\ErrorCode;
+use Hyperf\Snowflake\IdGeneratorInterface;
+use Hyperf\Context\ApplicationContext;
+class PublicData
+{
+    /**
+     * 递归查询
+     * @param $menuItems
+     * @param $parentId
+     * @return array
+     */
+    public static  function buildMenuTree($menuItems, $parentId = 0) {
+        $tree = [];
+        foreach ($menuItems as $item) {
+            if ($item['pid'] == $parentId) {
+                // 找到子菜单
+                $children = self::buildMenuTree($menuItems, $item['id']);
+                // 如果子菜单存在,则添加到当前菜单的children中
+                if ($children) {
+                    $item['children'] = $children;
+                }
+                // 将当前菜单添加到树中
+                $tree[] = $item;
+            }
+        }
+        return $tree;
+    }
+
+    /**
+     * 计算两个时间差的天数
+     * @param $sTime
+     * @param $eTime
+     * @return float
+     */
+    public static function residueDay($sTime,$eTime)
+    {
+        $startTime = strtotime($sTime);
+        $endTime = strtotime($eTime);
+        $diffDays = floor(($endTime - $startTime) / (60 * 60 * 24));
+        return $diffDays;
+    }
+
+    public static function uuid()
+    {
+        var_dump("uuid==========");
+        $container = ApplicationContext::getContainer();
+        $generator = $container->get(IdGeneratorInterface::class);
+        var_dump("uuid==+++++++++++",$generator->generate());
+        return $generator->generate();
+    }
+
+}

+ 48 - 0
app/Tools/Result.php

@@ -0,0 +1,48 @@
+<?php
+namespace App\Tools;
+use App\Constants\ErrorCode;
+class Result
+{
+    public static function success($data = [])
+    {
+        return static::result(ErrorCode::SUCCESS, ErrorCode::getMessage(ErrorCode::SUCCESS), $data);
+    }
+    public static function error($message = '', $code = ErrorCode::ERROR, $data = [])
+    {
+        if (empty($message)) {
+            return static::result($code, ErrorCode::getMessage($code), $data);
+        } else {
+            return static::result($code, $message, $data);
+        }
+    }
+    protected static function result($code, $message, $data)
+    {
+        return [
+            'code' => $code,
+            'message' => $message,
+            'data' => $data,
+        ];
+    }
+    /**
+     * 递归查询
+     * @param $menuItems
+     * @param $parentId
+     * @return array
+     */
+    public static  function buildMenuTree($menuItems, $parentId = 0) {
+        $tree = [];
+        foreach ($menuItems as $item) {
+            if ($item['pid'] == $parentId) {
+                // 找到子菜单
+                $children = self::buildMenuTree($menuItems, $item['category_id']);
+                // 如果子菜单存在,则添加到当前菜单的children中
+                if ($children) {
+                    $item['children'] = $children;
+                }
+                // 将当前菜单添加到树中
+                $tree[] = $item;
+            }
+        }
+        return $tree;
+    }
+}

+ 96 - 0
composer.json

@@ -0,0 +1,96 @@
+{
+    "name": "hyperf/hyperf-skeleton",
+    "type": "project",
+    "keywords": [
+        "php",
+        "swoole",
+        "framework",
+        "hyperf",
+        "microservice",
+        "middleware"
+    ],
+    "description": "A coroutine framework that focuses on hyperspeed and flexible, specifically use for build microservices and middlewares.",
+    "license": "Apache-2.0",
+    "require": {
+        "php": ">=8.1",
+        "doctrine/annotations": "^2.0",
+        "fukuball/jieba-php": "^0.34.0",
+        "hyperf/amqp": "^3.1",
+        "hyperf/cache": "~3.1.0",
+        "hyperf/command": "~3.1.0",
+        "hyperf/config": "~3.1.0",
+        "hyperf/config-nacos": "^3.1",
+        "hyperf/constants": "^3.1",
+        "hyperf/database": "~3.1.0",
+        "hyperf/db-connection": "~3.1.0",
+        "hyperf/di": "^3.1",
+        "hyperf/engine": "^2.10",
+        "hyperf/framework": "~3.1.0",
+        "hyperf/guzzle": "~3.1.0",
+        "hyperf/http-server": "~3.1.0",
+        "hyperf/json-rpc": "*",
+        "hyperf/logger": "~3.1.0",
+        "hyperf/memory": "~3.1.0",
+        "hyperf/nacos": "^3.1",
+        "hyperf/paginator": "^3.1",
+        "hyperf/process": "~3.1.0",
+        "hyperf/redis": "~3.1.0",
+        "hyperf/rpc-server": "*",
+        "hyperf/service-governance": "^3.1",
+        "hyperf/service-governance-consul": "^3.1",
+        "hyperf/service-governance-nacos": "^3.1",
+        "hyperf/snowflake": "^3.1",
+        "hyperf/utils": "^3.1",
+        "illuminate/cache": "^10.48",
+        "ramsey/uuid": "^4.7"
+    },
+    "require-dev": {
+        "friendsofphp/php-cs-fixer": "^3.0",
+        "hyperf/devtool": "~3.1.0",
+        "hyperf/testing": "~3.1.0",
+        "hyperf/watcher": "^3.1",
+        "mockery/mockery": "^1.0",
+        "phpstan/phpstan": "^1.0",
+        "swoole/ide-helper": "^5.0"
+    },
+    "suggest": {
+        "ext-openssl": "Required to use HTTPS.",
+        "ext-json": "Required to use JSON.",
+        "ext-pdo": "Required to use MySQL Client.",
+        "ext-pdo_mysql": "Required to use MySQL Client.",
+        "ext-redis": "Required to use Redis Client."
+    },
+    "autoload": {
+        "psr-4": {
+            "App\\": "app/"
+        },
+        "files": []
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "HyperfTest\\": "./test/"
+        }
+    },
+    "minimum-stability": "dev",
+    "prefer-stable": true,
+    "config": {
+        "optimize-autoloader": true,
+        "sort-packages": true
+    },
+    "extra": [],
+    "scripts": {
+        "post-root-package-install": [
+            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+        ],
+        "post-autoload-dump": [
+            "rm -rf runtime/container"
+        ],
+        "test": "co-phpunit --prepend test/bootstrap.php --colors=always",
+        "cs-fix": "php-cs-fixer fix $1",
+        "analyse": "phpstan analyse --memory-limit 300M",
+        "start": [
+            "Composer\\Config::disableProcessTimeout",
+            "php ./bin/hyperf.php start"
+        ]
+    }
+}

+ 12513 - 0
composer.lock

@@ -0,0 +1,12513 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "0202fb40b9469c4533981cf7fdd0ce92",
+    "packages": [
+        {
+            "name": "brick/math",
+            "version": "0.12.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/brick/math.git",
+                "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
+                "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^10.1",
+                "vimeo/psalm": "6.8.8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Brick\\Math\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Arbitrary-precision arithmetic library",
+            "keywords": [
+                "Arbitrary-precision",
+                "BigInteger",
+                "BigRational",
+                "arithmetic",
+                "bigdecimal",
+                "bignum",
+                "bignumber",
+                "brick",
+                "decimal",
+                "integer",
+                "math",
+                "mathematics",
+                "rational"
+            ],
+            "support": {
+                "issues": "https://github.com/brick/math/issues",
+                "source": "https://github.com/brick/math/tree/0.12.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/BenMorel",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-02-28T13:11:00+00:00"
+        },
+        {
+            "name": "carbonphp/carbon-doctrine-types",
+            "version": "3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+                "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
+                "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "conflict": {
+                "doctrine/dbal": "<4.0.0 || >=5.0.0"
+            },
+            "require-dev": {
+                "doctrine/dbal": "^4.0.0",
+                "nesbot/carbon": "^2.71.0 || ^3.0.0",
+                "phpunit/phpunit": "^10.3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "KyleKatarn",
+                    "email": "kylekatarnls@gmail.com"
+                }
+            ],
+            "description": "Types to use Carbon in Doctrine",
+            "keywords": [
+                "carbon",
+                "date",
+                "datetime",
+                "doctrine",
+                "time"
+            ],
+            "support": {
+                "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+                "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/kylekatarnls",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/Carbon",
+                    "type": "open_collective"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-02-09T16:56:22+00:00"
+        },
+        {
+            "name": "doctrine/annotations",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/annotations.git",
+                "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f",
+                "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "doctrine/lexer": "^2 || ^3",
+                "ext-tokenizer": "*",
+                "php": "^7.2 || ^8.0",
+                "psr/cache": "^1 || ^2 || ^3"
+            },
+            "require-dev": {
+                "doctrine/cache": "^2.0",
+                "doctrine/coding-standard": "^10",
+                "phpstan/phpstan": "^1.8.0",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "symfony/cache": "^5.4 || ^6",
+                "vimeo/psalm": "^4.10"
+            },
+            "suggest": {
+                "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "Docblock Annotations Parser",
+            "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "parser"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/annotations/issues",
+                "source": "https://github.com/doctrine/annotations/tree/2.0.1"
+            },
+            "time": "2023-02-02T22:02:53+00:00"
+        },
+        {
+            "name": "doctrine/inflector",
+            "version": "2.0.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/inflector.git",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^11.0",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpstan/phpstan-strict-rules": "^1.3",
+                "phpunit/phpunit": "^8.5 || ^9.5",
+                "vimeo/psalm": "^4.25 || ^5.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+            "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+            "keywords": [
+                "inflection",
+                "inflector",
+                "lowercase",
+                "manipulation",
+                "php",
+                "plural",
+                "singular",
+                "strings",
+                "uppercase",
+                "words"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/inflector/issues",
+                "source": "https://github.com/doctrine/inflector/tree/2.0.10"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-02-18T20:23:39+00:00"
+        },
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+                "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^9 || ^11",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.16 || ^1",
+                "phpstan/phpstan": "^1.4",
+                "phpstan/phpstan-phpunit": "^1",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "vimeo/psalm": "^4.30 || ^5.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "https://ocramius.github.io/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2022-12-30T00:15:36+00:00"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "3.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^12",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^10.5",
+                "psalm/plugin-phpunit": "^0.18.3",
+                "vimeo/psalm": "^5.21"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Lexer\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/lexer/issues",
+                "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-02-05T11:56:58+00:00"
+        },
+        {
+            "name": "fig/http-message-util",
+            "version": "1.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message-util.git",
+                "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765",
+                "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^5.3 || ^7.0 || ^8.0"
+            },
+            "suggest": {
+                "psr/http-message": "The package containing the PSR-7 interfaces"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Fig\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Utility classes and constants for use with PSR-7 (psr/http-message)",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/http-message-util/issues",
+                "source": "https://github.com/php-fig/http-message-util/tree/1.1.5"
+            },
+            "time": "2020-11-24T22:02:12+00:00"
+        },
+        {
+            "name": "fukuball/jieba-php",
+            "version": "0.34",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/fukuball/jieba-php.git",
+                "reference": "44d62bda8b80fe07ff59e8fc654f477685109a66"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/fukuball/jieba-php/zipball/44d62bda8b80fe07ff59e8fc654f477685109a66",
+                "reference": "44d62bda8b80fe07ff59e8fc654f477685109a66",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">= 5.3"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "dev-master",
+                "phpunit/phpunit": "~9.0",
+                "squizlabs/php_codesniffer": "4.0.x-dev"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/vendor/multi-array/MultiArray.php",
+                    "src/vendor/multi-array/Factory/MultiArrayFactory.php"
+                ],
+                "psr-4": {
+                    "Fukuball\\Jieba\\": "src/class/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "fukuball",
+                    "email": "fukuball@gmail.com"
+                }
+            ],
+            "description": "結巴中文分詞(PHP 版本):做最好的 PHP 中文分詞、中文斷詞組件",
+            "keywords": [
+                "Jieba",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/fukuball/jieba-php/issues",
+                "source": "https://github.com/fukuball/jieba-php/tree/0.34"
+            },
+            "time": "2022-08-15T06:26:03+00:00"
+        },
+        {
+            "name": "graham-campbell/result-type",
+            "version": "1.1.x-dev",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/GrahamCampbell/Result-Type.git",
+                "reference": "9d6c1d7ce69a3329936e603617e59ba205ab0a66"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/9d6c1d7ce69a3329936e603617e59ba205ab0a66",
+                "reference": "9d6c1d7ce69a3329936e603617e59ba205ab0a66",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2.5 || ^8.0",
+                "phpoption/phpoption": "^1.9.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
+            },
+            "default-branch": true,
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "GrahamCampbell\\ResultType\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                }
+            ],
+            "description": "An Implementation Of The Result Type",
+            "keywords": [
+                "Graham Campbell",
+                "GrahamCampbell",
+                "Result Type",
+                "Result-Type",
+                "result"
+            ],
+            "support": {
+                "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+                "source": "https://github.com/GrahamCampbell/Result-Type/tree/1.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-02-09T22:43:44+00:00"
+        },
+        {
+            "name": "guzzlehttp/guzzle",
+            "version": "7.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
+                "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-json": "*",
+                "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+                "guzzlehttp/psr7": "^2.7.0",
+                "php": "^7.2.5 || ^8.0",
+                "psr/http-client": "^1.0",
+                "symfony/deprecation-contracts": "^2.2 || ^3.0"
+            },
+            "provide": {
+                "psr/http-client-implementation": "1.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "ext-curl": "*",
+                "guzzle/client-integration-tests": "3.0.2",
+                "php-http/message-factory": "^1.1",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+                "psr/log": "^1.1 || ^2.0 || ^3.0"
+            },
+            "suggest": {
+                "ext-curl": "Required for CURL handler support",
+                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+                "psr/log": "Required for using the Log middleware"
+            },
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions_include.php"
+                ],
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Jeremy Lindblom",
+                    "email": "jeremeamia@gmail.com",
+                    "homepage": "https://github.com/jeremeamia"
+                },
+                {
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://github.com/sagikazarmark"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "psr-18",
+                "psr-7",
+                "rest",
+                "web service"
+            ],
+            "support": {
+                "issues": "https://github.com/guzzle/guzzle/issues",
+                "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-24T11:22:20+00:00"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
+                "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2.5 || ^8.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+            },
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "support": {
+                "issues": "https://github.com/guzzle/promises/issues",
+                "source": "https://github.com/guzzle/promises/tree/2.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-03-27T13:27:01+00:00"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "2.7.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+                "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2.5 || ^8.0",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.1 || ^2.0",
+                "ralouphie/getallheaders": "^3.0"
+            },
+            "provide": {
+                "psr/http-factory-implementation": "1.0",
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "http-interop/http-factory-tests": "0.9.0",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+            },
+            "suggest": {
+                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+            },
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://github.com/sagikazarmark"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://sagikazarmark.hu"
+                }
+            ],
+            "description": "PSR-7 message implementation that also provides common utility methods",
+            "keywords": [
+                "http",
+                "message",
+                "psr-7",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
+            ],
+            "support": {
+                "issues": "https://github.com/guzzle/psr7/issues",
+                "source": "https://github.com/guzzle/psr7/tree/2.7.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-03-27T12:30:47+00:00"
+        },
+        {
+            "name": "hyperf/amqp",
+            "version": "v3.1.58",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/amqp.git",
+                "reference": "15ed5c2e39d35e1b28be9afad635c3fd9f93841b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/amqp/zipball/15ed5c2e39d35e1b28be9afad635c3fd9f93841b",
+                "reference": "15ed5c2e39d35e1b28be9afad635c3fd9f93841b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "doctrine/instantiator": "^1.2.0",
+                "hyperf/codec": "~3.1.0",
+                "hyperf/collection": "~3.1.0",
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coordinator": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/engine": "^2.0",
+                "hyperf/pool": "~3.1.0",
+                "hyperf/process": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1",
+                "php-amqplib/php-amqplib": "^3.5",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/event-dispatcher": "^1.0",
+                "psr/log": "^1.0 || ^2.0 || ^3.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotations.",
+                "hyperf/event": "Declare queue and start consumers automatically."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Amqp\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Amqp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A amqplib for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "AMQP",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-06-23T03:55:31+00:00"
+        },
+        {
+            "name": "hyperf/cache",
+            "version": "v3.1.56",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/cache.git",
+                "reference": "4848c733560941490d9bf3aa8605deb4cce8fbf1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/cache/zipball/4848c733560941490d9bf3aa8605deb4cce8fbf1",
+                "reference": "4848c733560941490d9bf3aa8605deb4cce8fbf1",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/collection": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
+            },
+            "suggest": {
+                "hyperf/di": "Use cache annotations.",
+                "hyperf/event": "Use listener to delete annotation cache."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Cache\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A cache component for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "cache",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-06-05T06:13:29+00:00"
+        },
+        {
+            "name": "hyperf/code-parser",
+            "version": "v3.1.52",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/code-parser.git",
+                "reference": "340fb9902465bfc6d26d8b5a6d8d369590ea6e57"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/code-parser/zipball/340fb9902465bfc6d26d8b5a6d8d369590ea6e57",
+                "reference": "340fb9902465bfc6d26d8b5a6d8d369590ea6e57",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/collection": "~3.1.0",
+                "hyperf/stringable": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "jean85/pretty-package-versions": "Required to use PrettyVersions. (^1.2|^2.0)",
+                "nikic/php-parser": "Required to use PhpParser. (^4.0)"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\CodeParser\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A code parser component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "code-parser",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-02-27T07:40:13+00:00"
+        },
+        {
+            "name": "hyperf/codec",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/codec.git",
+                "reference": "effc71c25e2d53c00fcf41da8bca083ac8a0db0e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/codec/zipball/effc71c25e2d53c00fcf41da8bca083ac8a0db0e",
+                "reference": "effc71c25e2d53c00fcf41da8bca083ac8a0db0e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-xml": "*",
+                "hyperf/contract": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "ext-igbinary": "Required to use IgbinarySerializerPacker."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Codec\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A codec component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "codec",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/collection",
+            "version": "v3.1.52",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/collection.git",
+                "reference": "a56bfce5002c7d69838f7e82184a2e135e98e80a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/collection/zipball/a56bfce5002c7d69838f7e82184a2e135e98e80a",
+                "reference": "a56bfce5002c7d69838f7e82184a2e135e98e80a",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/conditionable": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/macroable": "~3.1.0",
+                "hyperf/stringable": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Collection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Collection package which come from illuminate/collections",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "collection",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-02-17T03:58:59+00:00"
+        },
+        {
+            "name": "hyperf/command",
+            "version": "v3.1.56",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/command.git",
+                "reference": "79188b44faff62e305fdb34cf2929ff517430e34"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/command/zipball/79188b44faff62e305fdb34cf2929ff517430e34",
+                "reference": "79188b44faff62e305fdb34cf2929ff517430e34",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/collection": "~3.1.0",
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/di": "~3.1.0",
+                "hyperf/stringable": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/tappable": "~3.1.0",
+                "php": ">=8.1",
+                "psr/event-dispatcher": "^1.0",
+                "symfony/console": "^5.0 || ^6.0 || ^7.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotations.",
+                "hyperf/event": "Required to use listeners."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Command\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Command\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Command for hyperf",
+            "keywords": [
+                "command",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/command/issues",
+                "source": "https://github.com/hyperf/command/tree/v3.1.56"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-06-03T08:26:34+00:00"
+        },
+        {
+            "name": "hyperf/conditionable",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/conditionable.git",
+                "reference": "dec9dec9dbde14e20f3d7ba000c3302381019de1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/conditionable/zipball/dec9dec9dbde14e20f3d7ba000c3302381019de1",
+                "reference": "dec9dec9dbde14e20f3d7ba000c3302381019de1",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Conditionable\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Macroable package which come from illuminate/conditionable",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "conditionable",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/config",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/config.git",
+                "reference": "1df5e310aab752d6195f89f5cc98daf3cdc4bb6e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/config/zipball/1df5e310aab752d6195f89f5cc98daf3cdc4bb6e",
+                "reference": "1df5e310aab752d6195f89f5cc98daf3cdc4bb6e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/collection": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/finder": "^5.0 || ^6.0 || ^7.0"
+            },
+            "suggest": {
+                "hyperf/context": "Required to use config()",
+                "hyperf/di": "Allows using @Value annotation",
+                "hyperf/event": "Allows using @Value annotation",
+                "hyperf/framework": "Allows using @Value annotation",
+                "vlucas/phpdotenv": "Allows using enviroment value to override the config"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Config\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "./src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Config\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "An independent component that provides configuration container.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "config",
+                "configuration",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/config-center",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/config-center.git",
+                "reference": "c96837394c842a0b1ece13b29ff972241021d4f3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/config-center/zipball/c96837394c842a0b1ece13b29ff972241021d4f3",
+                "reference": "c96837394c842a0b1ece13b29ff972241021d4f3",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/process": "^2.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ConfigCenter\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ConfigCenter\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "The abstraction component of config center",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "config-center",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/config-nacos",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/config-nacos.git",
+                "reference": "f980296a1e8cdd1916433a99dcb98e6a1c49eb98"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/config-nacos/zipball/f980296a1e8cdd1916433a99dcb98e6a1c49eb98",
+                "reference": "f980296a1e8cdd1916433a99dcb98e6a1c49eb98",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/config-center": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/guzzle": "~3.1.0",
+                "hyperf/nacos": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "jetbrains/phpstorm-attributes": "^1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "ext-yaml": "*",
+                "hyperf/event": "Required to use listeners. (~2.2.0)",
+                "hyperf/framework": "Required to use listeners. (~2.2.0)",
+                "hyperf/process": "Required to use processes. (~2.2.0)"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ConfigNacos\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ConfigNacos\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A nacos adapter for config center component.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "nacos",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/constants",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/constants.git",
+                "reference": "e1e1184779cd163f9603ce234e1ecccb6fe382ae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/constants/zipball/e1e1184779cd163f9603ce234e1ecccb6fe382ae",
+                "reference": "e1e1184779cd163f9603ce234e1ecccb6fe382ae",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/di": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/translation": "Required to use translation."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Constants\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Constants\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A constants component for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "constants",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/consul",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/consul.git",
+                "reference": "12888dddd5bd4acebb6e4ca9729b3401dafa64ef"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/consul/zipball/12888dddd5bd4acebb6e4ca9729b3401dafa64ef",
+                "reference": "12888dddd5bd4acebb6e4ca9729b3401dafa64ef",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^6.3 || ^7.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Consul\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Consul\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A Consul Client for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "consul",
+                "consul-client",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/context",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/context.git",
+                "reference": "ac666862d644db7d813342c880826a1fda599bdf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/context/zipball/ac666862d644db7d813342c880826a1fda599bdf",
+                "reference": "ac666862d644db7d813342c880826a1fda599bdf",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/engine": "^2.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "swow/psr7-plus": "Required to use RequestContext and ResponseContext"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Context\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A coroutine/application context library.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "Context",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/contract",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/contract.git",
+                "reference": "6ef2c7f98917c52ccda3a37ae65b190848dde6c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/contract/zipball/6ef2c7f98917c52ccda3a37ae65b190848dde6c4",
+                "reference": "6ef2c7f98917c52ccda3a37ae65b190848dde6c4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Contract\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "The contracts of Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/coordinator",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/coordinator.git",
+                "reference": "a0497d2a260f166ab53fed2eca6bb4e48b49ef56"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/coordinator/zipball/a0497d2a260f166ab53fed2eca6bb4e48b49ef56",
+                "reference": "a0497d2a260f166ab53fed2eca6bb4e48b49ef56",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/engine": "^2.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Coordinator\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Coordinator",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "Coordinator",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/coroutine",
+            "version": "v3.1.54",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/coroutine.git",
+                "reference": "5b474c4bb46be015f1340939d92931b96a0b0cad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/coroutine/zipball/5b474c4bb46be015f1340939d92931b96a0b0cad",
+                "reference": "5b474c4bb46be015f1340939d92931b96a0b0cad",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/engine": "^2.14.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Coroutine\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Coroutine",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "coroutine",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-14T01:38:29+00:00"
+        },
+        {
+            "name": "hyperf/database",
+            "version": "v3.1.56",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/database.git",
+                "reference": "a4e5f11df6a74337836f1690c05506adf6e82f0f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/database/zipball/a4e5f11df6a74337836f1690c05506adf6e82f0f",
+                "reference": "a4e5f11df6a74337836f1690c05506adf6e82f0f",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/code-parser": "~3.1.0",
+                "hyperf/collection": "~3.1.23",
+                "hyperf/conditionable": "~3.1.0",
+                "hyperf/macroable": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/tappable": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "nesbot/carbon": "^2.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/event-dispatcher": "^1.0"
+            },
+            "suggest": {
+                "doctrine/dbal": "Required to rename columns (^3.0).",
+                "hyperf/paginator": "Required to paginate the result set (~3.1.0).",
+                "nikic/php-parser": "Required to use ModelCommand. (^4.0)",
+                "php-di/phpdoc-reader": "Required to use ModelCommand. (^2.2)"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Database\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A flexible database library.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "database",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-05-30T09:09:02+00:00"
+        },
+        {
+            "name": "hyperf/db-connection",
+            "version": "v3.1.44",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/db-connection.git",
+                "reference": "95dbb713fda5556106b803d0201e1631645985b5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/db-connection/zipball/95dbb713fda5556106b803d0201e1631645985b5",
+                "reference": "95dbb713fda5556106b803d0201e1631645985b5",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/database": "~3.1.0",
+                "hyperf/di": "~3.1.0",
+                "hyperf/framework": "~3.1.0",
+                "hyperf/model-listener": "~3.1.0",
+                "hyperf/pool": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\DbConnection\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\DbConnection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A hyperf db connection handler for hyperf/database.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "Connection",
+                "database",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-10-11T08:58:16+00:00"
+        },
+        {
+            "name": "hyperf/di",
+            "version": "v3.1.53",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/di.git",
+                "reference": "13a89409da739102c7fc308ef53bdd2694cb220b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/di/zipball/13a89409da739102c7fc308ef53bdd2694cb220b",
+                "reference": "13a89409da739102c7fc308ef53bdd2694cb220b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0",
+                "hyperf/code-parser": "~3.1.0",
+                "hyperf/pipeline": "~3.1.0",
+                "hyperf/stdlib": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "nikic/php-parser": "^4.1",
+                "php": ">=8.1",
+                "php-di/phpdoc-reader": "^2.2",
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/finder": "^5.0 || ^6.0 || ^7.0",
+                "vlucas/phpdotenv": "^5.0"
+            },
+            "suggest": {
+                "ext-pcntl": "Required to scan annotations.",
+                "hyperf/config": "Require this component for annotation scan progress to retrieve the scan path."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Di\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Di\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A DI for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "annotation",
+                "di",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-03T08:36:04+00:00"
+        },
+        {
+            "name": "hyperf/dispatcher",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/dispatcher.git",
+                "reference": "5cbdfd586bb8c3bbbabed5a23cec7faf52b744b0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/dispatcher/zipball/5cbdfd586bb8c3bbbabed5a23cec7faf52b744b0",
+                "reference": "5cbdfd586bb8c3bbbabed5a23cec7faf52b744b0",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/http-message": "^1.0 || ^2.0",
+                "psr/http-server-middleware": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Dispatcher\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Dispatcher\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A HTTP Server for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "dispatcher",
+                "filter",
+                "hyperf",
+                "middleware",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/engine",
+            "version": "v2.14.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/engine.git",
+                "reference": "74ec5130fa0838e285a24292a232ce455edccff8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/engine/zipball/74ec5130fa0838e285a24292a232ce455edccff8",
+                "reference": "74ec5130fa0838e285a24292a232ce455edccff8",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/engine-contract": "~1.13.0",
+                "php": ">=8.0"
+            },
+            "conflict": {
+                "ext-swoole": "<5.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "hyperf/guzzle": "^3.0",
+                "hyperf/http-message": "^3.0",
+                "mockery/mockery": "^1.5",
+                "phpstan/phpstan": "^1.0",
+                "phpunit/phpunit": "^9.4",
+                "swoole/ide-helper": "5.*"
+            },
+            "suggest": {
+                "ext-sockets": "*",
+                "ext-swoole": ">=5.0",
+                "hyperf/http-message": "Required to use ResponseEmitter.",
+                "psr/http-message": "Required to use WebSocket Frame."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Engine\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "2.14-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Engine\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Coroutine engine provided by swoole.",
+            "keywords": [
+                "engine",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/engine/issues",
+                "source": "https://github.com/hyperf/engine/tree/v2.14.0"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-13T15:11:22+00:00"
+        },
+        {
+            "name": "hyperf/engine-contract",
+            "version": "v1.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/engine-contract.git",
+                "reference": "26a18ec0375147546bf9702b0fd737fdd2cec1d6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/engine-contract/zipball/26a18ec0375147546bf9702b0fd737fdd2cec1d6",
+                "reference": "26a18ec0375147546bf9702b0fd737fdd2cec1d6",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "mockery/mockery": "^1.0",
+                "phpstan/phpstan": "^1.0",
+                "phpunit/phpunit": ">=7.0",
+                "psr/http-message": "^1.0",
+                "swoole/ide-helper": "^4.5"
+            },
+            "suggest": {
+                "psr/http-message": "Required to use WebSocket Frame."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.11-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Engine\\Contract\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Contract for Coroutine Engine",
+            "keywords": [
+                "contract",
+                "coroutine",
+                "engine",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/engine-contract/issues",
+                "source": "https://github.com/hyperf/engine-contract/tree/v1.13.0"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-13T14:48:14+00:00"
+        },
+        {
+            "name": "hyperf/event",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/event.git",
+                "reference": "2b5fbbc94674a1a5e1622896eb3f7ecc80aa38c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/event/zipball/2b5fbbc94674a1a5e1622896eb3f7ecc80aa38c4",
+                "reference": "2b5fbbc94674a1a5e1622896eb3f7ecc80aa38c4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/stdlib": "~3.1.0",
+                "php": ">=8.1",
+                "psr/event-dispatcher": "^1.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotatioins."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Event\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Event\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "an event manager that implements PSR-14.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "event",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/exception-handler",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/exception-handler.git",
+                "reference": "df2135fb0ffe0bb61032911038aea6488077cdef"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/exception-handler/zipball/df2135fb0ffe0bb61032911038aea6488077cdef",
+                "reference": "df2135fb0ffe0bb61032911038aea6488077cdef",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/dispatcher": "~3.1.0",
+                "hyperf/http-message": "~3.1.0",
+                "hyperf/stdlib": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/http-message": "^1.0 || ^2.0",
+                "swow/psr7-plus": "^1.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use #[ExceptionHandler]",
+                "hyperf/event": "Required to use listeners",
+                "hyperf/framework": "Required to use listeners",
+                "hyperf/stringable": "Required to use WhoopsExceptionHandler"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ExceptionHandler\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ExceptionHandler\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Exception handler for hyperf",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "exception-handler",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/framework",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/framework.git",
+                "reference": "7b317d3891698a1eb0308e7306730d2ada1d6ff4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/framework/zipball/7b317d3891698a1eb0308e7306730d2ada1d6ff4",
+                "reference": "7b317d3891698a1eb0308e7306730d2ada1d6ff4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "fig/http-message-util": "^1.1.2",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coordinator": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/event-dispatcher": "^1.0",
+                "psr/log": "^1.0 || ^2.0 || ^3.0"
+            },
+            "suggest": {
+                "ext-swoole": "Required to use swoole engine.",
+                "hyperf/command": "Required to use Command annotation.",
+                "hyperf/di": "Required to use Command annotation.",
+                "hyperf/dispatcher": "Required to use BootApplication event.",
+                "symfony/event-dispatcher": "Required to use symfony event dispatcher (^5.0|^6.0)."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Framework\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Framework\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A coroutine framework that focuses on hyperspeed and flexible, specifically use for build microservices and middlewares.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "Microservice",
+                "framework",
+                "hyperf",
+                "middleware",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/guzzle",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/guzzle.git",
+                "reference": "fe838557530bf7b2d39dc604563c3a3ff8d5618f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/guzzle/zipball/fe838557530bf7b2d39dc604563c3a3ff8d5618f",
+                "reference": "fe838557530bf7b2d39dc604563c3a3ff8d5618f",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^6.3 || ^7.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/http-message": "^1.0 || ^2.0"
+            },
+            "suggest": {
+                "ext-curl": "Required for CURL handler support",
+                "hyperf/pool": "Required to use pool handler."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Guzzle\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Guzzle\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Swoole coroutine handler for guzzle",
+            "keywords": [
+                "Guzzle",
+                "handler",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/guzzle/issues",
+                "source": "https://github.com/hyperf/guzzle/tree/v3.1.42"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/http-message",
+            "version": "v3.1.48",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/http-message.git",
+                "reference": "534ce81af0feaa0c4a9e132af1c6a9c5527a8d85"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/http-message/zipball/534ce81af0feaa0c4a9e132af1c6a9c5527a8d85",
+                "reference": "534ce81af0feaa0c4a9e132af1c6a9c5527a8d85",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/engine": "^2.11",
+                "hyperf/support": "~3.1.0",
+                "laminas/laminas-mime": "^2.7",
+                "php": ">=8.1",
+                "psr/http-message": "^1.0 || ^2.0",
+                "swow/psr7-plus": "^1.0"
+            },
+            "suggest": {
+                "psr/container": "Required to replace RequestParserInterface."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\HttpMessage\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\HttpMessage\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "microservice framework base on swoole",
+            "keywords": [
+                "http-message",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/http-message/issues",
+                "source": "https://github.com/hyperf/http-message/tree/v3.1.48"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-12-05T02:41:08+00:00"
+        },
+        {
+            "name": "hyperf/http-server",
+            "version": "v3.1.55",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/http-server.git",
+                "reference": "96a1d80cd9482942899d7068af0e6ecb78d382ce"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/http-server/zipball/96a1d80cd9482942899d7068af0e6ecb78d382ce",
+                "reference": "96a1d80cd9482942899d7068af0e6ecb78d382ce",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/collection": "~3.1.0",
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/dispatcher": "~3.1.0",
+                "hyperf/event": "~3.1.0",
+                "hyperf/exception-handler": "~3.1.0",
+                "hyperf/http-message": "~3.1.0",
+                "hyperf/macroable": "~3.1.0",
+                "hyperf/serializer": "~3.1.0",
+                "hyperf/server": "~3.1.0",
+                "hyperf/stdlib": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "nikic/fast-route": "^1.3",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "swow/psr7-plus": "^1.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotations."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\HttpServer\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\HttpServer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A HTTP Server for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "http",
+                "http-server",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-05-14T07:44:25+00:00"
+        },
+        {
+            "name": "hyperf/json-rpc",
+            "version": "v3.1.47",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/json-rpc.git",
+                "reference": "daa987e9e58fcbbf676ae266de2d428301a74d1b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/json-rpc/zipball/daa987e9e58fcbbf676ae266de2d428301a74d1b",
+                "reference": "daa987e9e58fcbbf676ae266de2d428301a74d1b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/engine": "^2.0",
+                "hyperf/http-message": "~3.1.0",
+                "hyperf/load-balancer": "~3.1.0",
+                "hyperf/rpc": "~3.1.0",
+                "hyperf/serializer": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "swow/psr7-plus": "^1.0"
+            },
+            "suggest": {
+                "hyperf/event": "Register the objects to ProtocolManager automatically.",
+                "hyperf/framework": "Register the objects to ProtocolManager automatically.",
+                "hyperf/guzzle": "Required to use JSON RPC with HTTP protocol.",
+                "hyperf/rpc-client": "Reqiured to use JSON RPC in hyperf rpc client.",
+                "hyperf/rpc-server": "Reqiured to use JSON RPC in hyperf rpc server."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\JsonRpc\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\JsonRpc\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A JSON RPC component for Hyperf RPC Server or Client.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "json-rpc",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-11-28T01:51:55+00:00"
+        },
+        {
+            "name": "hyperf/load-balancer",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/load-balancer.git",
+                "reference": "13d23eae71f917df4df54f7439076360dc5f9cc0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/load-balancer/zipball/13d23eae71f917df4df54f7439076360dc5f9cc0",
+                "reference": "13d23eae71f917df4df54f7439076360dc5f9cc0",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/coordinator": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "markrogoyski/math-php": "^2.0",
+                "php": ">=8.1",
+                "psr/log": "^1.0 || ^2.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\LoadBalancer\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\LoadBalancer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A load balancer library for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "load-balancer",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/logger",
+            "version": "v3.1.55",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/logger.git",
+                "reference": "8a80e2fab1521a08e2b8061a5dd65f5105f88ed6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/logger/zipball/8a80e2fab1521a08e2b8061a5dd65f5105f88ed6",
+                "reference": "8a80e2fab1521a08e2b8061a5dd65f5105f88ed6",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "monolog/monolog": "^2.7 || ^3.1",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/log": "^1.0 || ^2.0 || ^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Logger\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Logger\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A logger component for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "logger",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-05-14T08:25:19+00:00"
+        },
+        {
+            "name": "hyperf/macroable",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/macroable.git",
+                "reference": "0be650165b9e8ea073e199fac788ece70f16b6a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/macroable/zipball/0be650165b9e8ea073e199fac788ece70f16b6a4",
+                "reference": "0be650165b9e8ea073e199fac788ece70f16b6a4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Macroable\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Macroable package which come from illuminate/macroable",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "macroable",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/memory",
+            "version": "v3.1.53",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/memory.git",
+                "reference": "74a3093ee766e18f912269f6846a63ae21a4360b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/memory/zipball/74a3093ee766e18f912269f6846a63ae21a4360b",
+                "reference": "74a3093ee766e18f912269f6846a63ae21a4360b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Memory\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Memory\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "An independent component that use to operate and manage memory.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "memory",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-03T09:12:55+00:00"
+        },
+        {
+            "name": "hyperf/model-listener",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/model-listener.git",
+                "reference": "0181882fb6034cf2eac81b84b5c65c187af9f3a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/model-listener/zipball/0181882fb6034cf2eac81b84b5c65c187af9f3a4",
+                "reference": "0181882fb6034cf2eac81b84b5c65c187af9f3a4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/database": "~3.1.0",
+                "hyperf/di": "~3.1.0",
+                "hyperf/event": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ModelListener\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ModelListener\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A model listener for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "model-listener",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/nacos",
+            "version": "v3.1.52",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/nacos.git",
+                "reference": "6d4bd0551ce4d4581ebe126c3e47962ce72baa01"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/nacos/zipball/6d4bd0551ce4d4581ebe126c3e47962ce72baa01",
+                "reference": "6d4bd0551ce4d4581ebe126c3e47962ce72baa01",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^6.5 || ^7.0",
+                "hyperf/codec": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "jetbrains/phpstorm-attributes": "^1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Nacos\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Nacos\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Nacos SDK",
+            "keywords": [
+                "hyperf",
+                "nacos",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/nacos/issues",
+                "source": "https://github.com/hyperf/nacos/tree/v3.1.52"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-02-27T06:49:30+00:00"
+        },
+        {
+            "name": "hyperf/paginator",
+            "version": "v3.1.49",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/paginator.git",
+                "reference": "dd9d59f5601fbdaa69f488348c7debd1931feb7b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/paginator/zipball/dd9d59f5601fbdaa69f488348c7debd1931feb7b",
+                "reference": "dd9d59f5601fbdaa69f488348c7debd1931feb7b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/event": "Reqiured to use PageResolverListener.",
+                "hyperf/framework": "Reqiured to use PageResolverListener.",
+                "hyperf/http-server": "Reqiured to use PageResolverListener."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Paginator\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Paginator\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A paginator component for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "paginator",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-12-17T09:42:13+00:00"
+        },
+        {
+            "name": "hyperf/pipeline",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/pipeline.git",
+                "reference": "096d9a9f87ddea33209f134d30ae8d8867a195c7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/pipeline/zipball/096d9a9f87ddea33209f134d30ae8d8867a195c7",
+                "reference": "096d9a9f87ddea33209f134d30ae8d8867a195c7",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Pipeline\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Macroable package which come from illuminate/pipeline",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "pipeline",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/pool",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/pool.git",
+                "reference": "004dd811bf760ea0032913a31284102742abb737"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/pool/zipball/004dd811bf760ea0032913a31284102742abb737",
+                "reference": "004dd811bf760ea0032913a31284102742abb737",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "Required to use events."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Pool\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Pool\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "An independent universal connection pool component.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "connection-pool",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/process",
+            "version": "v3.1.48",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/process.git",
+                "reference": "8d68398bdb4f2623af1bec846399b6ce29bd7d2c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/process/zipball/8d68398bdb4f2623af1bec846399b6ce29bd7d2c",
+                "reference": "8d68398bdb4f2623af1bec846399b6ce29bd7d2c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/event-dispatcher": "^1.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotations.",
+                "hyperf/event": "Required to dump the message before and after process.",
+                "hyperf/framework": "Required to use BootProcessListener."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Process\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Process\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A process component for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "process"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-12-02T10:54:30+00:00"
+        },
+        {
+            "name": "hyperf/redis",
+            "version": "v3.1.53",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/redis.git",
+                "reference": "d481e97926d8e12b41bfeb1ebf5d88e66482da64"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/redis/zipball/d481e97926d8e12b41bfeb1ebf5d88e66482da64",
+                "reference": "d481e97926d8e12b41bfeb1ebf5d88e66482da64",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-redis": "^5.0 || ^6.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/pool": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/tappable": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0"
+            },
+            "suggest": {
+                "ext-redis": "Required to use sentinel mode (>=5.2).",
+                "hyperf/di": "Create the RedisPool via dependency injection."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Redis\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Redis\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A redis component for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "pool",
+                "redis"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-03T07:31:20+00:00"
+        },
+        {
+            "name": "hyperf/rpc",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/rpc.git",
+                "reference": "90e97635c0e3c5080e422abdfc1399fd57ee204f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/rpc/zipball/90e97635c0e3c5080e422abdfc1399fd57ee204f",
+                "reference": "90e97635c0e3c5080e422abdfc1399fd57ee204f",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "jetbrains/phpstorm-attributes": "^1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": [],
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Rpc\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A rpc basic library for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "rpc",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/rpc-server",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/rpc-server.git",
+                "reference": "5647c5fd54342fe96aa2198e7fdeb8ee50cfc30c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/rpc-server/zipball/5647c5fd54342fe96aa2198e7fdeb8ee50cfc30c",
+                "reference": "5647c5fd54342fe96aa2198e7fdeb8ee50cfc30c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/http-server": "~3.1.0",
+                "hyperf/rpc": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotations."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\RpcServer\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\RpcServer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "An abstract rpc server component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "rpc",
+                "rpc-server",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/serializer",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/serializer.git",
+                "reference": "03c8a4840e0a7be83670c2fb0f850a2204fad076"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/serializer/zipball/03c8a4840e0a7be83670c2fb0f850a2204fad076",
+                "reference": "03c8a4840e0a7be83670c2fb0f850a2204fad076",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use ExceptionNormalizer",
+                "symfony/property-access": "Required to use SymfonyNormalizer (^5.0|^6.0)",
+                "symfony/serializer": "Required to use SymfonyNormalizer (^5.0|^6.0)"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Serializer\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Serializer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A serializer component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "swoole",
+                "tappable"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/server",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/server.git",
+                "reference": "e10c5ce6d9b72d3ca9ad16d36977e2e64d975460"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/server/zipball/e10c5ce6d9b72d3ca9ad16d36977e2e64d975460",
+                "reference": "e10c5ce6d9b72d3ca9ad16d36977e2e64d975460",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coordinator": "~3.1.0",
+                "hyperf/engine": "^2.8",
+                "hyperf/support": "~3.1.0",
+                "hyperf/tappable": "~3.1.0",
+                "php": ">=8.1",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/event-dispatcher": "^1.0",
+                "psr/log": "^1.0 || ^2.0 || ^3.0",
+                "symfony/console": "^5.0 || ^6.0 || ^7.0"
+            },
+            "suggest": {
+                "hyperf/event": "Dump the info after server start.",
+                "hyperf/framework": "Dump the info after server start."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Server\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Server\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A base server library for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "server",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/service-governance",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/service-governance.git",
+                "reference": "e4e606f86d40fd3630e688d23870944d1b7b7db1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/service-governance/zipball/e4e606f86d40fd3630e688d23870944d1b7b7db1",
+                "reference": "e4e606f86d40fd3630e688d23870944d1b7b7db1",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "jetbrains/phpstorm-attributes": "^1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/event": "Required to use RegisterServiceListener.",
+                "hyperf/framework": "Required to use RegisterServiceListener.",
+                "hyperf/service-governance-consul": "Required to use consul adapter.",
+                "hyperf/service-governance-nacos": "Required to use nacos adapter."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ServiceGovernance\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ServiceGovernance\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A service governance component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "service-governance",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/service-governance-consul",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/service-governance-consul.git",
+                "reference": "0c153a006eff3778a208ca5233a33ecb2685407e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/service-governance-consul/zipball/0c153a006eff3778a208ca5233a33ecb2685407e",
+                "reference": "0c153a006eff3778a208ca5233a33ecb2685407e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/consul": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/service-governance": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ServiceGovernanceConsul\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ServiceGovernanceConsul\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A consul adapter for service governance.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "consul-adapter",
+                "hyperf",
+                "php",
+                "service-governance",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/service-governance-nacos",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/service-governance-nacos.git",
+                "reference": "9f85b659c0c6608e902364cfe0d897844447df25"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/service-governance-nacos/zipball/9f85b659c0c6608e902364cfe0d897844447df25",
+                "reference": "9f85b659c0c6608e902364cfe0d897844447df25",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/nacos": "~3.1.0",
+                "hyperf/service-governance": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\ServiceGovernanceNacos\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\ServiceGovernanceNacos\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A nacos adapter for service governance.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "nacos-adapter",
+                "php",
+                "service-governance",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/snowflake",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/snowflake.git",
+                "reference": "0271dfd9f0030e4f4cdd90f91428d1dbb35ecd56"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/snowflake/zipball/0271dfd9f0030e4f4cdd90f91428d1dbb35ecd56",
+                "reference": "0271dfd9f0030e4f4cdd90f91428d1dbb35ecd56",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/contract": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "hyperf/config": "Required to read snowflake config.",
+                "hyperf/redis": "Required to use RedisMilliSecondMetaGenerator or RedisSecondMetaGenerator.",
+                "psr/container": "Required to use MetaGeneratorFactory."
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Snowflake\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Snowflake\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A snowflake library",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "php",
+                "snowflake"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/stdlib",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/stdlib.git",
+                "reference": "13393734a4cc6c9878390b1f6b0fc7e5202c6b59"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/stdlib/zipball/13393734a4cc6c9878390b1f6b0fc7e5202c6b59",
+                "reference": "13393734a4cc6c9878390b1f6b0fc7e5202c6b59",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Stdlib\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A stdlib component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "stdlib",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/stringable",
+            "version": "v3.1.55",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/stringable.git",
+                "reference": "1ce51e8c73609898da6b0b9ab80a14508fa671d7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/stringable/zipball/1ce51e8c73609898da6b0b9ab80a14508fa671d7",
+                "reference": "1ce51e8c73609898da6b0b9ab80a14508fa671d7",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "hyperf/collection": "~3.1.0",
+                "hyperf/conditionable": "~3.1.0",
+                "hyperf/macroable": "~3.1.0",
+                "hyperf/tappable": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "doctrine/inflector": "Required to use plural and singular methods.(^2.0|^3.0)",
+                "ramsey/uuid": "Required to use uuid and orderedUuid methods.(^4.7|^5.0)",
+                "symfony/uid": "Required to use ulid method.(^5.0|^6.0)"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Stringable\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Stringable package which come from illuminate/support",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "stringable",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-05-02T14:13:24+00:00"
+        },
+        {
+            "name": "hyperf/support",
+            "version": "v3.1.51",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/support.git",
+                "reference": "8d630b496945f3ac791a570fe6c1bf481c3f28ed"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/support/zipball/8d630b496945f3ac791a570fe6c1bf481c3f28ed",
+                "reference": "8d630b496945f3ac791a570fe6c1bf481c3f28ed",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/collection": "~3.1.0",
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/macroable": "~3.1.0",
+                "hyperf/stringable": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "suggest": {
+                "nesbot/carbon": "Use Carbon as DateTime object.(^2.0)"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Support\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A support component for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "support",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-02-06T07:02:37+00:00"
+        },
+        {
+            "name": "hyperf/tappable",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/tappable.git",
+                "reference": "f5c5d343c95238dcb3fe500876ceadc175e221f8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/tappable/zipball/f5c5d343c95238dcb3fe500876ceadc175e221f8",
+                "reference": "f5c5d343c95238dcb3fe500876ceadc175e221f8",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Tappable\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hyperf Macroable package which come from illuminate/tappable",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "swoole",
+                "tappable"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "hyperf/utils",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/utils.git",
+                "reference": "4b13a567a61d08a3c4d058499e28a5b26fc18f1c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/utils/zipball/4b13a567a61d08a3c4d058499e28a5b26fc18f1c",
+                "reference": "4b13a567a61d08a3c4d058499e28a5b26fc18f1c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "doctrine/inflector": "^2.0",
+                "hyperf/code-parser": "~3.1.0",
+                "hyperf/codec": "~3.1.0",
+                "hyperf/collection": "~3.1.0",
+                "hyperf/context": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coordinator": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/engine": "^2.0",
+                "hyperf/macroable": "~3.1.0",
+                "hyperf/serializer": "~3.1.0",
+                "hyperf/stringable": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A tools package that could help developer solved the problem quickly.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "hyperf",
+                "php",
+                "swoole",
+                "utils"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
+        {
+            "name": "illuminate/cache",
+            "version": "v10.48.28",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/cache.git",
+                "reference": "20f36c3209107ee5c8c646f88a0562a2c1b05a6c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/cache/zipball/20f36c3209107ee5c8c646f88a0562a2c1b05a6c",
+                "reference": "20f36c3209107ee5c8c646f88a0562a2c1b05a6c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "illuminate/collections": "^10.0",
+                "illuminate/contracts": "^10.0",
+                "illuminate/macroable": "^10.0",
+                "illuminate/support": "^10.0",
+                "php": "^8.1"
+            },
+            "provide": {
+                "psr/simple-cache-implementation": "1.0|2.0|3.0"
+            },
+            "suggest": {
+                "ext-apcu": "Required to use the APC cache driver.",
+                "ext-filter": "Required to use the DynamoDb cache driver.",
+                "ext-memcached": "Required to use the memcache cache driver.",
+                "illuminate/database": "Required to use the database cache driver (^10.0).",
+                "illuminate/filesystem": "Required to use the file cache driver (^10.0).",
+                "illuminate/redis": "Required to use the redis cache driver (^10.0).",
+                "symfony/cache": "Required to use PSR-6 cache bridge (^6.2)."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Cache\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Cache package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "time": "2024-11-21T14:02:44+00:00"
+        },
+        {
+            "name": "illuminate/collections",
+            "version": "v10.48.28",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/collections.git",
+                "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/collections/zipball/48de3d6bc6aa779112ddcb608a3a96fc975d89d8",
+                "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "illuminate/conditionable": "^10.0",
+                "illuminate/contracts": "^10.0",
+                "illuminate/macroable": "^10.0",
+                "php": "^8.1"
+            },
+            "suggest": {
+                "symfony/var-dumper": "Required to use the dump method (^6.2)."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "helpers.php"
+                ],
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Collections package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "time": "2024-11-21T14:02:44+00:00"
+        },
+        {
+            "name": "illuminate/conditionable",
+            "version": "v10.48.28",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/conditionable.git",
+                "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/conditionable/zipball/3ee34ac306fafc2a6f19cd7cd68c9af389e432a5",
+                "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.0.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Conditionable package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "time": "2024-11-21T14:02:44+00:00"
+        },
+        {
+            "name": "illuminate/contracts",
+            "version": "v10.48.28",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/contracts.git",
+                "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/contracts/zipball/f90663a69f926105a70b78060a31f3c64e2d1c74",
+                "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.1",
+                "psr/container": "^1.1.1|^2.0.1",
+                "psr/simple-cache": "^1.0|^2.0|^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Contracts\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Contracts package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "time": "2024-11-21T14:02:44+00:00"
+        },
+        {
+            "name": "illuminate/macroable",
+            "version": "v10.48.28",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/macroable.git",
+                "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27",
+                "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Macroable package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "time": "2023-06-05T12:46:42+00:00"
+        },
+        {
+            "name": "illuminate/support",
+            "version": "v10.48.28",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/support.git",
+                "reference": "6d09b480d34846245d9288f4dcefb17a73ce6e6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/support/zipball/6d09b480d34846245d9288f4dcefb17a73ce6e6a",
+                "reference": "6d09b480d34846245d9288f4dcefb17a73ce6e6a",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "doctrine/inflector": "^2.0",
+                "ext-ctype": "*",
+                "ext-filter": "*",
+                "ext-mbstring": "*",
+                "illuminate/collections": "^10.0",
+                "illuminate/conditionable": "^10.0",
+                "illuminate/contracts": "^10.0",
+                "illuminate/macroable": "^10.0",
+                "nesbot/carbon": "^2.67",
+                "php": "^8.1",
+                "voku/portable-ascii": "^2.0"
+            },
+            "conflict": {
+                "tightenco/collect": "<5.5.33"
+            },
+            "suggest": {
+                "illuminate/filesystem": "Required to use the composer class (^10.0).",
+                "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.6).",
+                "ramsey/uuid": "Required to use Str::uuid() (^4.7).",
+                "symfony/process": "Required to use the composer class (^6.2).",
+                "symfony/uid": "Required to use Str::ulid() (^6.2).",
+                "symfony/var-dumper": "Required to use the dd function (^6.2).",
+                "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "helpers.php"
+                ],
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Support package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "time": "2024-12-10T14:47:55+00:00"
+        },
+        {
+            "name": "jetbrains/phpstorm-attributes",
+            "version": "1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/JetBrains/phpstorm-attributes.git",
+                "reference": "64de815a4509c29e00d5e3474087fd24c171afc2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/JetBrains/phpstorm-attributes/zipball/64de815a4509c29e00d5e3474087fd24c171afc2",
+                "reference": "64de815a4509c29e00d5e3474087fd24c171afc2",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "JetBrains\\PhpStorm\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "JetBrains",
+                    "homepage": "https://www.jetbrains.com"
+                }
+            ],
+            "description": "PhpStorm specific attributes",
+            "keywords": [
+                "attributes",
+                "jetbrains",
+                "phpstorm"
+            ],
+            "support": {
+                "issues": "https://youtrack.jetbrains.com/newIssue?project=WI",
+                "source": "https://github.com/JetBrains/phpstorm-attributes/tree/1.2"
+            },
+            "time": "2024-10-11T10:46:19+00:00"
+        },
+        {
+            "name": "laminas/laminas-mime",
+            "version": "2.12.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-mime.git",
+                "reference": "08cc544778829b7d68d27a097885bd6e7130135e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-mime/zipball/08cc544778829b7d68d27a097885bd6e7130135e",
+                "reference": "08cc544778829b7d68d27a097885bd6e7130135e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "laminas/laminas-stdlib": "^2.7 || ^3.0",
+                "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+            },
+            "conflict": {
+                "zendframework/zend-mime": "*"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "~2.4.0",
+                "laminas/laminas-mail": "^2.19.0",
+                "phpunit/phpunit": "~9.5.25"
+            },
+            "suggest": {
+                "laminas/laminas-mail": "Laminas\\Mail component"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Mime\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "Create and parse MIME messages and parts",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "mime"
+            ],
+            "support": {
+                "chat": "https://laminas.dev/chat",
+                "docs": "https://docs.laminas.dev/laminas-mime/",
+                "forum": "https://discourse.laminas.dev",
+                "issues": "https://github.com/laminas/laminas-mime/issues",
+                "rss": "https://github.com/laminas/laminas-mime/releases.atom",
+                "source": "https://github.com/laminas/laminas-mime"
+            },
+            "funding": [
+                {
+                    "url": "https://funding.communitybridge.org/projects/laminas-project",
+                    "type": "community_bridge"
+                }
+            ],
+            "time": "2023-11-02T16:47:19+00:00"
+        },
+        {
+            "name": "laminas/laminas-stdlib",
+            "version": "3.20.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laminas/laminas-stdlib.git",
+                "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/8974a1213be42c3e2f70b2c27b17f910291ab2f4",
+                "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+            },
+            "conflict": {
+                "zendframework/zend-stdlib": "*"
+            },
+            "require-dev": {
+                "laminas/laminas-coding-standard": "^3.0",
+                "phpbench/phpbench": "^1.3.1",
+                "phpunit/phpunit": "^10.5.38",
+                "psalm/plugin-phpunit": "^0.19.0",
+                "vimeo/psalm": "^5.26.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Laminas\\Stdlib\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "SPL extensions, array utilities, error handlers, and more",
+            "homepage": "https://laminas.dev",
+            "keywords": [
+                "laminas",
+                "stdlib"
+            ],
+            "support": {
+                "chat": "https://laminas.dev/chat",
+                "docs": "https://docs.laminas.dev/laminas-stdlib/",
+                "forum": "https://discourse.laminas.dev",
+                "issues": "https://github.com/laminas/laminas-stdlib/issues",
+                "rss": "https://github.com/laminas/laminas-stdlib/releases.atom",
+                "source": "https://github.com/laminas/laminas-stdlib"
+            },
+            "funding": [
+                {
+                    "url": "https://funding.communitybridge.org/projects/laminas-project",
+                    "type": "community_bridge"
+                }
+            ],
+            "time": "2024-10-29T13:46:07+00:00"
+        },
+        {
+            "name": "markrogoyski/math-php",
+            "version": "v2.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/markrogoyski/math-php.git",
+                "reference": "ae499f31513821a62f3d2fb8c6f0d3a333e8b591"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/markrogoyski/math-php/zipball/ae499f31513821a62f3d2fb8c6f0d3a333e8b591",
+                "reference": "ae499f31513821a62f3d2fb8c6f0d3a333e8b591",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-json": "*",
+                "php": ">=7.2.0"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.0",
+                "php-parallel-lint/php-parallel-lint": "^1.2",
+                "phploc/phploc": "*",
+                "phpmd/phpmd": "^2.6",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^8.5",
+                "squizlabs/php_codesniffer": "3.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MathPHP\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Rogoyski",
+                    "email": "mark@rogoyski.com",
+                    "homepage": "https://github.com/markrogoyski",
+                    "role": "Lead developer"
+                },
+                {
+                    "name": "Kevin Nowaczyk",
+                    "homepage": "https://github.com/Beakerboy",
+                    "role": "Developer"
+                },
+                {
+                    "name": "MathPHP Community of Contributors",
+                    "homepage": "https://github.com/markrogoyski/math-php/graphs/contributors"
+                }
+            ],
+            "description": "Math Library for PHP. Features descriptive statistics and regressions; Continuous and discrete probability distributions; Linear algebra with matrices and vectors, Numerical analysis; special mathematical functions; Algebra",
+            "homepage": "https://github.com/markrogoyski/math-php/",
+            "keywords": [
+                "algebra",
+                "combinatorics",
+                "distributions",
+                "linear algebra",
+                "math",
+                "mathematics",
+                "matrix",
+                "numerical analysis",
+                "probability",
+                "regressions",
+                "statistics"
+            ],
+            "support": {
+                "issues": "https://github.com/markrogoyski/math-php/issues",
+                "source": "https://github.com/markrogoyski/math-php/tree/v2.11.0"
+            },
+            "time": "2025-01-26T20:16:06+00:00"
+        },
+        {
+            "name": "monolog/monolog",
+            "version": "3.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
+                "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/log": "^2.0 || ^3.0"
+            },
+            "provide": {
+                "psr/log-implementation": "3.0.0"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "^3.0",
+                "doctrine/couchdb": "~1.0@dev",
+                "elasticsearch/elasticsearch": "^7 || ^8",
+                "ext-json": "*",
+                "graylog2/gelf-php": "^1.4.2 || ^2.0",
+                "guzzlehttp/guzzle": "^7.4.5",
+                "guzzlehttp/psr7": "^2.2",
+                "mongodb/mongodb": "^1.8",
+                "php-amqplib/php-amqplib": "~2.4 || ^3",
+                "php-console/php-console": "^3.1.8",
+                "phpstan/phpstan": "^2",
+                "phpstan/phpstan-deprecation-rules": "^2",
+                "phpstan/phpstan-strict-rules": "^2",
+                "phpunit/phpunit": "^10.5.17 || ^11.0.7",
+                "predis/predis": "^1.1 || ^2",
+                "rollbar/rollbar": "^4.0",
+                "ruflin/elastica": "^7 || ^8",
+                "symfony/mailer": "^5.4 || ^6",
+                "symfony/mime": "^5.4 || ^6"
+            },
+            "suggest": {
+                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+                "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+                "ext-mbstring": "Allow to work properly with unicode symbols",
+                "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+                "ext-openssl": "Required to send log messages using SSL",
+                "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+                "rollbar/rollbar": "Allow sending log messages to Rollbar",
+                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Monolog\\": "src/Monolog"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "https://seld.be"
+                }
+            ],
+            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+            "homepage": "https://github.com/Seldaek/monolog",
+            "keywords": [
+                "log",
+                "logging",
+                "psr-3"
+            ],
+            "support": {
+                "issues": "https://github.com/Seldaek/monolog/issues",
+                "source": "https://github.com/Seldaek/monolog/tree/3.9.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/Seldaek",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-03-24T10:02:05+00:00"
+        },
+        {
+            "name": "nesbot/carbon",
+            "version": "2.73.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/CarbonPHP/carbon.git",
+                "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075",
+                "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "carbonphp/carbon-doctrine-types": "*",
+                "ext-json": "*",
+                "php": "^7.1.8 || ^8.0",
+                "psr/clock": "^1.0",
+                "symfony/polyfill-mbstring": "^1.0",
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
+            },
+            "provide": {
+                "psr/clock-implementation": "1.0"
+            },
+            "require-dev": {
+                "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0",
+                "doctrine/orm": "^2.7 || ^3.0",
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "kylekatarnls/multi-tester": "^2.0",
+                "ondrejmirtes/better-reflection": "<6",
+                "phpmd/phpmd": "^2.9",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12.99 || ^1.7.14",
+                "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "bin": [
+                "bin/carbon"
+            ],
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Carbon\\Laravel\\ServiceProvider"
+                    ]
+                },
+                "phpstan": {
+                    "includes": [
+                        "extension.neon"
+                    ]
+                },
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev",
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Carbon\\": "src/Carbon/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Brian Nesbitt",
+                    "email": "brian@nesbot.com",
+                    "homepage": "https://markido.com"
+                },
+                {
+                    "name": "kylekatarnls",
+                    "homepage": "https://github.com/kylekatarnls"
+                }
+            ],
+            "description": "An API extension for DateTime that supports 281 different languages.",
+            "homepage": "https://carbon.nesbot.com",
+            "keywords": [
+                "date",
+                "datetime",
+                "time"
+            ],
+            "support": {
+                "docs": "https://carbon.nesbot.com/docs",
+                "issues": "https://github.com/briannesbitt/Carbon/issues",
+                "source": "https://github.com/briannesbitt/Carbon"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sponsors/kylekatarnls",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/Carbon#sponsor",
+                    "type": "opencollective"
+                },
+                {
+                    "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-01-08T20:10:23+00:00"
+        },
+        {
+            "name": "nikic/fast-route",
+            "version": "v1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/FastRoute.git",
+                "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
+                "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35|~5.7"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "FastRoute\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov",
+                    "email": "nikic@php.net"
+                }
+            ],
+            "description": "Fast request router for PHP",
+            "keywords": [
+                "router",
+                "routing"
+            ],
+            "support": {
+                "issues": "https://github.com/nikic/FastRoute/issues",
+                "source": "https://github.com/nikic/FastRoute/tree/master"
+            },
+            "time": "2018-02-13T20:26:39+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v4.19.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+                "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=7.1"
+            },
+            "require-dev": {
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/nikic/PHP-Parser/issues",
+                "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4"
+            },
+            "time": "2024-09-29T15:01:53+00:00"
+        },
+        {
+            "name": "paragonie/constant_time_encoding",
+            "version": "v3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paragonie/constant_time_encoding.git",
+                "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
+                "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9",
+                "vimeo/psalm": "^4|^5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ParagonIE\\ConstantTime\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Steve 'Sc00bz' Thomas",
+                    "email": "steve@tobtu.com",
+                    "homepage": "https://www.tobtu.com",
+                    "role": "Original Developer"
+                }
+            ],
+            "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+            "keywords": [
+                "base16",
+                "base32",
+                "base32_decode",
+                "base32_encode",
+                "base64",
+                "base64_decode",
+                "base64_encode",
+                "bin2hex",
+                "encoding",
+                "hex",
+                "hex2bin",
+                "rfc4648"
+            ],
+            "support": {
+                "email": "info@paragonie.com",
+                "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+                "source": "https://github.com/paragonie/constant_time_encoding"
+            },
+            "time": "2024-05-08T12:36:18+00:00"
+        },
+        {
+            "name": "paragonie/random_compat",
+            "version": "v9.99.100",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paragonie/random_compat.git",
+                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
+                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">= 7"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*|5.*",
+                "vimeo/psalm": "^1"
+            },
+            "suggest": {
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+            },
+            "type": "library",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+            "keywords": [
+                "csprng",
+                "polyfill",
+                "pseudorandom",
+                "random"
+            ],
+            "support": {
+                "email": "info@paragonie.com",
+                "issues": "https://github.com/paragonie/random_compat/issues",
+                "source": "https://github.com/paragonie/random_compat"
+            },
+            "time": "2020-10-15T08:29:30+00:00"
+        },
+        {
+            "name": "php-amqplib/php-amqplib",
+            "version": "v3.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-amqplib/php-amqplib.git",
+                "reference": "76eee289e98b0b309a761787e65cbe1acbaf8c72"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/76eee289e98b0b309a761787e65cbe1acbaf8c72",
+                "reference": "76eee289e98b0b309a761787e65cbe1acbaf8c72",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "ext-sockets": "*",
+                "php": "^7.2||^8.0",
+                "phpseclib/phpseclib": "^2.0|^3.0"
+            },
+            "conflict": {
+                "php": "7.4.0 - 7.4.1"
+            },
+            "replace": {
+                "videlalvaro/php-amqplib": "self.version"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "nategood/httpful": "^0.2.20",
+                "phpunit/phpunit": "^7.5|^9.5",
+                "squizlabs/php_codesniffer": "^3.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpAmqpLib\\": "PhpAmqpLib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Alvaro Videla",
+                    "role": "Original Maintainer"
+                },
+                {
+                    "name": "Raúl Araya",
+                    "email": "nubeiro@gmail.com",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Luke Bakken",
+                    "email": "luke@bakken.io",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Ramūnas Dronga",
+                    "email": "github@ramuno.lt",
+                    "role": "Maintainer"
+                }
+            ],
+            "description": "Formerly videlalvaro/php-amqplib.  This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
+            "homepage": "https://github.com/php-amqplib/php-amqplib/",
+            "keywords": [
+                "message",
+                "queue",
+                "rabbitmq"
+            ],
+            "support": {
+                "issues": "https://github.com/php-amqplib/php-amqplib/issues",
+                "source": "https://github.com/php-amqplib/php-amqplib/tree/v3.6.1"
+            },
+            "time": "2024-02-07T17:21:26+00:00"
+        },
+        {
+            "name": "php-di/phpdoc-reader",
+            "version": "2.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHP-DI/PhpDocReader.git",
+                "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c",
+                "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2.0"
+            },
+            "require-dev": {
+                "mnapoli/hard-mode": "~0.3.0",
+                "phpunit/phpunit": "^8.5|^9.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PhpDocReader\\": "src/PhpDocReader"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)",
+            "keywords": [
+                "phpdoc",
+                "reflection"
+            ],
+            "support": {
+                "issues": "https://github.com/PHP-DI/PhpDocReader/issues",
+                "source": "https://github.com/PHP-DI/PhpDocReader/tree/2.2.1"
+            },
+            "time": "2020-10-12T12:39:22+00:00"
+        },
+        {
+            "name": "phpoption/phpoption",
+            "version": "1.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/php-option.git",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2.5 || ^8.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+            },
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                },
+                "branch-alias": {
+                    "dev-master": "1.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpOption\\": "src/PhpOption/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "https://github.com/schmittjoh"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                }
+            ],
+            "description": "Option Type for PHP",
+            "keywords": [
+                "language",
+                "option",
+                "php",
+                "type"
+            ],
+            "support": {
+                "issues": "https://github.com/schmittjoh/php-option/issues",
+                "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-20T21:41:07+00:00"
+        },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "3.0.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "709ec107af3cb2f385b9617be72af8cf62441d02"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02",
+                "reference": "709ec107af3cb2f385b9617be72af8cf62441d02",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "paragonie/constant_time_encoding": "^1|^2|^3",
+                "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
+                "php": ">=5.6.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "ext-dom": "Install the DOM extension to load XML formatted public keys.",
+                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
+                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
+                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "phpseclib/bootstrap.php"
+                ],
+                "psr-4": {
+                    "phpseclib3\\": "phpseclib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jim Wigginton",
+                    "email": "terrafrost@php.net",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Patrick Monnerat",
+                    "email": "pm@datasphere.ch",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Andreas Fischer",
+                    "email": "bantu@phpbb.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Hans-Jürgen Petrich",
+                    "email": "petrich@tronic-media.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+            "homepage": "http://phpseclib.sourceforge.net",
+            "keywords": [
+                "BigInteger",
+                "aes",
+                "asn.1",
+                "asn1",
+                "blowfish",
+                "crypto",
+                "cryptography",
+                "encryption",
+                "rsa",
+                "security",
+                "sftp",
+                "signature",
+                "signing",
+                "ssh",
+                "twofish",
+                "x.509",
+                "x509"
+            ],
+            "support": {
+                "issues": "https://github.com/phpseclib/phpseclib/issues",
+                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.43"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/terrafrost",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/phpseclib",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-12-14T21:12:59+00:00"
+        },
+        {
+            "name": "psr/cache",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/cache.git",
+                "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+                "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for caching libraries",
+            "keywords": [
+                "cache",
+                "psr",
+                "psr-6"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/cache/tree/3.0.0"
+            },
+            "time": "2021-02-03T23:26:27+00:00"
+        },
+        {
+            "name": "psr/clock",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/clock.git",
+                "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+                "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.0 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Clock\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for reading the clock.",
+            "homepage": "https://github.com/php-fig/clock",
+            "keywords": [
+                "clock",
+                "now",
+                "psr",
+                "psr-20",
+                "time"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/clock/issues",
+                "source": "https://github.com/php-fig/clock/tree/1.0.0"
+            },
+            "time": "2022-11-25T14:36:26+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/container/issues",
+                "source": "https://github.com/php-fig/container/tree/2.0.2"
+            },
+            "time": "2021-11-05T16:47:00+00:00"
+        },
+        {
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/event-dispatcher.git",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\EventDispatcher\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Standard interfaces for event handling.",
+            "keywords": [
+                "events",
+                "psr",
+                "psr-14"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/event-dispatcher/issues",
+                "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+            },
+            "time": "2019-01-08T18:20:26+00:00"
+        },
+        {
+            "name": "psr/http-client",
+            "version": "1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-client.git",
+                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.0 || ^8.0",
+                "psr/http-message": "^1.0 || ^2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Client\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP clients",
+            "homepage": "https://github.com/php-fig/http-client",
+            "keywords": [
+                "http",
+                "http-client",
+                "psr",
+                "psr-18"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-client"
+            },
+            "time": "2023-09-23T14:17:50+00:00"
+        },
+        {
+            "name": "psr/http-factory",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "e616d01114759c4c489f93b099585439f795fe35"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
+                "reference": "e616d01114759c4c489f93b099585439f795fe35",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.0.0",
+                "psr/http-message": "^1.0 || ^2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
+            },
+            "time": "2023-04-10T20:10:41+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-message/tree/2.0"
+            },
+            "time": "2023-04-04T09:54:51+00:00"
+        },
+        {
+            "name": "psr/http-server-handler",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-server-handler.git",
+                "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
+                "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.0",
+                "psr/http-message": "^1.0 || ^2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Server\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP server-side request handler",
+            "keywords": [
+                "handler",
+                "http",
+                "http-interop",
+                "psr",
+                "psr-15",
+                "psr-7",
+                "request",
+                "response",
+                "server"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2"
+            },
+            "time": "2023-04-10T20:06:20+00:00"
+        },
+        {
+            "name": "psr/http-server-middleware",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-server-middleware.git",
+                "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+                "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.0",
+                "psr/http-message": "^1.0 || ^2.0",
+                "psr/http-server-handler": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Server\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP server-side middleware",
+            "keywords": [
+                "http",
+                "http-interop",
+                "middleware",
+                "psr",
+                "psr-15",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/http-server-middleware/issues",
+                "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2"
+            },
+            "time": "2023-04-11T06:14:47+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "3.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "79dff0b268932c640297f5208d6298f71855c03e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
+                "reference": "79dff0b268932c640297f5208d6298f71855c03e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/log/tree/3.0.1"
+            },
+            "time": "2024-08-21T13:31:24+00:00"
+        },
+        {
+            "name": "psr/simple-cache",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/simple-cache.git",
+                "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+                "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\SimpleCache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for simple caching",
+            "keywords": [
+                "cache",
+                "caching",
+                "psr",
+                "psr-16",
+                "simple-cache"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
+            },
+            "time": "2021-10-29T13:26:27+00:00"
+        },
+        {
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ralouphie/getallheaders.git",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/getallheaders.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ralph Khattar",
+                    "email": "ralph.khattar@gmail.com"
+                }
+            ],
+            "description": "A polyfill for getallheaders.",
+            "support": {
+                "issues": "https://github.com/ralouphie/getallheaders/issues",
+                "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+            },
+            "time": "2019-03-08T08:55:37+00:00"
+        },
+        {
+            "name": "ramsey/collection",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ramsey/collection.git",
+                "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+                "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "captainhook/plugin-composer": "^5.3",
+                "ergebnis/composer-normalize": "^2.28.3",
+                "fakerphp/faker": "^1.21",
+                "hamcrest/hamcrest-php": "^2.0",
+                "jangregor/phpstan-prophecy": "^1.0",
+                "mockery/mockery": "^1.5",
+                "php-parallel-lint/php-console-highlighter": "^1.0",
+                "php-parallel-lint/php-parallel-lint": "^1.3",
+                "phpcsstandards/phpcsutils": "^1.0.0-rc1",
+                "phpspec/prophecy-phpunit": "^2.0",
+                "phpstan/extension-installer": "^1.2",
+                "phpstan/phpstan": "^1.9",
+                "phpstan/phpstan-mockery": "^1.1",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "phpunit/phpunit": "^9.5",
+                "psalm/plugin-mockery": "^1.1",
+                "psalm/plugin-phpunit": "^0.18.4",
+                "ramsey/coding-standard": "^2.0.3",
+                "ramsey/conventional-commits": "^1.3",
+                "vimeo/psalm": "^5.4"
+            },
+            "type": "library",
+            "extra": {
+                "captainhook": {
+                    "force-install": true
+                },
+                "ramsey/conventional-commits": {
+                    "configFile": "conventional-commits.json"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Ramsey\\Collection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ben Ramsey",
+                    "email": "ben@benramsey.com",
+                    "homepage": "https://benramsey.com"
+                }
+            ],
+            "description": "A PHP library for representing and manipulating collections.",
+            "keywords": [
+                "array",
+                "collection",
+                "hash",
+                "map",
+                "queue",
+                "set"
+            ],
+            "support": {
+                "issues": "https://github.com/ramsey/collection/issues",
+                "source": "https://github.com/ramsey/collection/tree/2.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ramsey",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2022-12-31T21:50:55+00:00"
+        },
+        {
+            "name": "ramsey/uuid",
+            "version": "4.7.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ramsey/uuid.git",
+                "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
+                "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
+                "ext-json": "*",
+                "php": "^8.0",
+                "ramsey/collection": "^1.2 || ^2.0"
+            },
+            "replace": {
+                "rhumsaa/uuid": "self.version"
+            },
+            "require-dev": {
+                "captainhook/captainhook": "^5.10",
+                "captainhook/plugin-composer": "^5.3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "doctrine/annotations": "^1.8",
+                "ergebnis/composer-normalize": "^2.15",
+                "mockery/mockery": "^1.3",
+                "paragonie/random-lib": "^2",
+                "php-mock/php-mock": "^2.2",
+                "php-mock/php-mock-mockery": "^1.3",
+                "php-parallel-lint/php-parallel-lint": "^1.1",
+                "phpbench/phpbench": "^1.0",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-mockery": "^1.1",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "ramsey/composer-repl": "^1.4",
+                "slevomat/coding-standard": "^8.4",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^4.9"
+            },
+            "suggest": {
+                "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+                "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+                "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+                "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+                "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+            },
+            "type": "library",
+            "extra": {
+                "captainhook": {
+                    "force-install": true
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Ramsey\\Uuid\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+            "keywords": [
+                "guid",
+                "identifier",
+                "uuid"
+            ],
+            "support": {
+                "issues": "https://github.com/ramsey/uuid/issues",
+                "source": "https://github.com/ramsey/uuid/tree/4.7.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ramsey",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-04-27T21:32:50+00:00"
+        },
+        {
+            "name": "swow/psr7-plus",
+            "version": "v1.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/swow/psr7-plus.git",
+                "reference": "7acc4924be907d2ff64edee5a2bd116620e56364"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/swow/psr7-plus/zipball/7acc4924be907d2ff64edee5a2bd116620e56364",
+                "reference": "7acc4924be907d2ff64edee5a2bd116620e56364",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.0",
+                "psr/http-client": "^1.0",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.1|^2.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Swow\\Psr7\\Message\\": "src/Message/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "twose",
+                    "email": "twosee@php.net"
+                }
+            ],
+            "description": "Modern strong-typed interfaces for Psr7, not only HTTP but also WebSocket",
+            "keywords": [
+                "http",
+                "psr17",
+                "psr7",
+                "swow",
+                "websocket"
+            ],
+            "support": {
+                "issues": "https://github.com/swow/swow",
+                "source": "https://github.com/swow/psr7-plus/tree/v1.1.2"
+            },
+            "time": "2023-06-15T09:18:11+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v6.4.21",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "a3011c7b7adb58d89f6c0d822abb641d7a5f9719"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/a3011c7b7adb58d89f6c0d822abb641d7a5f9719",
+                "reference": "a3011c7b7adb58d89f6c0d822abb641d7a5f9719",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/string": "^5.4|^6.0|^7.0"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<5.4",
+                "symfony/dotenv": "<5.4",
+                "symfony/event-dispatcher": "<5.4",
+                "symfony/lock": "<5.4",
+                "symfony/process": "<5.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0|2.0|3.0"
+            },
+            "require-dev": {
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/lock": "^5.4|^6.0|^7.0",
+                "symfony/messenger": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0",
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Eases the creation of beautiful and testable command line interfaces",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "cli",
+                "command-line",
+                "console",
+                "terminal"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/console/tree/v6.4.21"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-04-07T15:42:41+00:00"
+        },
+        {
+            "name": "symfony/deprecation-contracts",
+            "version": "v3.5.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/deprecation-contracts.git",
+                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "function.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "A generic function and convention to trigger deprecation notices",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-25T14:20:29+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v6.4.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+                "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "symfony/filesystem": "^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Finds files and directories via an intuitive fluent interface",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/finder/tree/v6.4.17"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-12-29T13:51:37+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "provide": {
+                "ext-ctype": "*"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-grapheme",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's grapheme_* functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "grapheme",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-normalizer",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+                "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+                "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's Normalizer class and related functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "intl",
+                "normalizer",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+                "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "provide": {
+                "ext-mbstring": "*"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v3.5.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+                "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/container": "^1.1|^2.0",
+                "symfony/deprecation-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "ext-psr": "<1.1|>=2"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-25T14:20:29+00:00"
+        },
+        {
+            "name": "symfony/string",
+            "version": "v6.4.21",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/string.git",
+                "reference": "73e2c6966a5aef1d4892873ed5322245295370c6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/73e2c6966a5aef1d4892873ed5322245295370c6",
+                "reference": "73e2c6966a5aef1d4892873ed5322245295370c6",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-intl-grapheme": "~1.0",
+                "symfony/polyfill-intl-normalizer": "~1.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "conflict": {
+                "symfony/translation-contracts": "<2.5"
+            },
+            "require-dev": {
+                "symfony/error-handler": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^6.2|^7.0",
+                "symfony/translation-contracts": "^2.5|^3.0",
+                "symfony/var-exporter": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\String\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "grapheme",
+                "i18n",
+                "string",
+                "unicode",
+                "utf-8",
+                "utf8"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/string/tree/v6.4.21"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-04-18T15:23:29+00:00"
+        },
+        {
+            "name": "symfony/translation",
+            "version": "v6.4.21",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/translation.git",
+                "reference": "bb92ea5588396b319ba43283a5a3087a034cb29c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/bb92ea5588396b319ba43283a5a3087a034cb29c",
+                "reference": "bb92ea5588396b319ba43283a5a3087a034cb29c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/translation-contracts": "^2.5|^3.0"
+            },
+            "conflict": {
+                "symfony/config": "<5.4",
+                "symfony/console": "<5.4",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/http-kernel": "<5.4",
+                "symfony/service-contracts": "<2.5",
+                "symfony/twig-bundle": "<5.4",
+                "symfony/yaml": "<5.4"
+            },
+            "provide": {
+                "symfony/translation-implementation": "2.3|3.0"
+            },
+            "require-dev": {
+                "nikic/php-parser": "^4.18|^5.0",
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client-contracts": "^2.5|^3.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^5.4|^6.0|^7.0",
+                "symfony/polyfill-intl-icu": "^1.21",
+                "symfony/routing": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\Translation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools to internationalize your application",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/translation/tree/v6.4.21"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-04-07T19:02:30+00:00"
+        },
+        {
+            "name": "symfony/translation-contracts",
+            "version": "v3.5.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/translation-contracts.git",
+                "reference": "4667ff3bd513750603a09c8dedbea942487fb07c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c",
+                "reference": "4667ff3bd513750603a09c8dedbea942487fb07c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Translation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to translation",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-25T14:20:29+00:00"
+        },
+        {
+            "name": "vlucas/phpdotenv",
+            "version": "v5.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/vlucas/phpdotenv.git",
+                "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+                "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-pcre": "*",
+                "graham-campbell/result-type": "^1.1.3",
+                "php": "^7.2.5 || ^8.0",
+                "phpoption/phpoption": "^1.9.3",
+                "symfony/polyfill-ctype": "^1.24",
+                "symfony/polyfill-mbstring": "^1.24",
+                "symfony/polyfill-php80": "^1.24"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "ext-filter": "*",
+                "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+            },
+            "suggest": {
+                "ext-filter": "Required to use the boolean validator."
+            },
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                },
+                "branch-alias": {
+                    "dev-master": "5.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Dotenv\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Vance Lucas",
+                    "email": "vance@vancelucas.com",
+                    "homepage": "https://github.com/vlucas"
+                }
+            ],
+            "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+            "keywords": [
+                "dotenv",
+                "env",
+                "environment"
+            ],
+            "support": {
+                "issues": "https://github.com/vlucas/phpdotenv/issues",
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-20T21:52:34+00:00"
+        },
+        {
+            "name": "voku/portable-ascii",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/voku/portable-ascii.git",
+                "reference": "16c17671a804bb92602822113dd91fbc8a35d2af"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/16c17671a804bb92602822113dd91fbc8a35d2af",
+                "reference": "16c17671a804bb92602822113dd91fbc8a35d2af",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.0.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+            },
+            "suggest": {
+                "ext-intl": "Use Intl for transliterator_transliterate() support"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "voku\\": "src/voku/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Lars Moelleken",
+                    "homepage": "https://www.moelleken.org/"
+                }
+            ],
+            "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+            "homepage": "https://github.com/voku/portable-ascii",
+            "keywords": [
+                "ascii",
+                "clean",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/voku/portable-ascii/issues",
+                "source": "https://github.com/voku/portable-ascii/tree/2.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/moelleken",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/voku",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/portable-ascii",
+                    "type": "open_collective"
+                },
+                {
+                    "url": "https://www.patreon.com/voku",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-11-21T00:49:12+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "clue/ndjson-react",
+            "version": "v1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/clue/reactphp-ndjson.git",
+                "reference": "392dc165fce93b5bb5c637b67e59619223c931b0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0",
+                "reference": "392dc165fce93b5bb5c637b67e59619223c931b0",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.3",
+                "react/stream": "^1.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
+                "react/event-loop": "^1.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Clue\\React\\NDJson\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering"
+                }
+            ],
+            "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
+            "homepage": "https://github.com/clue/reactphp-ndjson",
+            "keywords": [
+                "NDJSON",
+                "json",
+                "jsonlines",
+                "newline",
+                "reactphp",
+                "streaming"
+            ],
+            "support": {
+                "issues": "https://github.com/clue/reactphp-ndjson/issues",
+                "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://clue.engineering/support",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/clue",
+                    "type": "github"
+                }
+            ],
+            "time": "2022-12-23T10:58:28+00:00"
+        },
+        {
+            "name": "composer/pcre",
+            "version": "3.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/pcre.git",
+                "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+                "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.4 || ^8.0"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<1.11.10"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1.12 || ^2",
+                "phpstan/phpstan-strict-rules": "^1 || ^2",
+                "phpunit/phpunit": "^8 || ^9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                },
+                "phpstan": {
+                    "includes": [
+                        "extension.neon"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Pcre\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+            "keywords": [
+                "PCRE",
+                "preg",
+                "regex",
+                "regular expression"
+            ],
+            "support": {
+                "issues": "https://github.com/composer/pcre/issues",
+                "source": "https://github.com/composer/pcre/tree/3.3.2"
+            },
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-11-12T16:29:46+00:00"
+        },
+        {
+            "name": "composer/semver",
+            "version": "3.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/semver.git",
+                "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+                "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1.4",
+                "symfony/phpunit-bridge": "^4.2 || ^5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\Semver\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nils Adermann",
+                    "email": "naderman@naderman.de",
+                    "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
+                }
+            ],
+            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "keywords": [
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
+            ],
+            "support": {
+                "irc": "ircs://irc.libera.chat:6697/composer",
+                "issues": "https://github.com/composer/semver/issues",
+                "source": "https://github.com/composer/semver/tree/3.4.2"
+            },
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-12T11:35:52+00:00"
+        },
+        {
+            "name": "composer/xdebug-handler",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/xdebug-handler.git",
+                "reference": "ced299686f41dce890debac69273b47ffe98a40c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
+                "reference": "ced299686f41dce890debac69273b47ffe98a40c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "composer/pcre": "^1 || ^2 || ^3",
+                "php": "^7.2.5 || ^8.0",
+                "psr/log": "^1 || ^2 || ^3"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1.0",
+                "phpstan/phpstan-strict-rules": "^1.1",
+                "symfony/phpunit-bridge": "^6.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Composer\\XdebugHandler\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "John Stevenson",
+                    "email": "john-stevenson@blueyonder.co.uk"
+                }
+            ],
+            "description": "Restarts a process without Xdebug.",
+            "keywords": [
+                "Xdebug",
+                "performance"
+            ],
+            "support": {
+                "irc": "irc://irc.freenode.org/composer",
+                "issues": "https://github.com/composer/xdebug-handler/issues",
+                "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2022-02-25T21:32:43+00:00"
+        },
+        {
+            "name": "evenement/evenement",
+            "version": "v3.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/igorw/evenement.git",
+                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
+                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9 || ^6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Evenement\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                }
+            ],
+            "description": "Événement is a very simple event dispatching library for PHP",
+            "keywords": [
+                "event-dispatcher",
+                "event-emitter"
+            ],
+            "support": {
+                "issues": "https://github.com/igorw/evenement/issues",
+                "source": "https://github.com/igorw/evenement/tree/v3.0.2"
+            },
+            "time": "2023-08-08T05:53:35+00:00"
+        },
+        {
+            "name": "fidry/cpu-core-counter",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/theofidry/cpu-core-counter.git",
+                "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42",
+                "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "fidry/makefile": "^0.2.0",
+                "fidry/php-cs-fixer-config": "^1.1.2",
+                "phpstan/extension-installer": "^1.2.0",
+                "phpstan/phpstan": "^1.9.2",
+                "phpstan/phpstan-deprecation-rules": "^1.0.0",
+                "phpstan/phpstan-phpunit": "^1.2.2",
+                "phpstan/phpstan-strict-rules": "^1.4.4",
+                "phpunit/phpunit": "^8.5.31 || ^9.5.26",
+                "webmozarts/strict-phpunit": "^7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Fidry\\CpuCoreCounter\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Théo FIDRY",
+                    "email": "theo.fidry@gmail.com"
+                }
+            ],
+            "description": "Tiny utility to get the number of CPU cores.",
+            "keywords": [
+                "CPU",
+                "core"
+            ],
+            "support": {
+                "issues": "https://github.com/theofidry/cpu-core-counter/issues",
+                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theofidry",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-02-07T09:43:46+00:00"
+        },
+        {
+            "name": "friendsofphp/php-cs-fixer",
+            "version": "v3.64.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
+                "reference": "58dd9c931c785a79739310aef5178928305ffa67"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/58dd9c931c785a79739310aef5178928305ffa67",
+                "reference": "58dd9c931c785a79739310aef5178928305ffa67",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "clue/ndjson-react": "^1.0",
+                "composer/semver": "^3.4",
+                "composer/xdebug-handler": "^3.0.3",
+                "ext-filter": "*",
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "fidry/cpu-core-counter": "^1.0",
+                "php": "^7.4 || ^8.0",
+                "react/child-process": "^0.6.5",
+                "react/event-loop": "^1.0",
+                "react/promise": "^2.0 || ^3.0",
+                "react/socket": "^1.0",
+                "react/stream": "^1.0",
+                "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
+                "symfony/console": "^5.4 || ^6.0 || ^7.0",
+                "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
+                "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
+                "symfony/finder": "^5.4 || ^6.0 || ^7.0",
+                "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0",
+                "symfony/polyfill-mbstring": "^1.28",
+                "symfony/polyfill-php80": "^1.28",
+                "symfony/polyfill-php81": "^1.28",
+                "symfony/process": "^5.4 || ^6.0 || ^7.0",
+                "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
+            },
+            "require-dev": {
+                "facile-it/paraunit": "^1.3 || ^2.3",
+                "infection/infection": "^0.29.5",
+                "justinrainbow/json-schema": "^5.2",
+                "keradus/cli-executor": "^2.1",
+                "mikey179/vfsstream": "^1.6.11",
+                "php-coveralls/php-coveralls": "^2.7",
+                "php-cs-fixer/accessible-object": "^1.1",
+                "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
+                "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
+                "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2",
+                "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
+                "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
+            },
+            "suggest": {
+                "ext-dom": "For handling output formats in XML",
+                "ext-mbstring": "For handling non-UTF8 characters."
+            },
+            "bin": [
+                "php-cs-fixer"
+            ],
+            "type": "application",
+            "autoload": {
+                "psr-4": {
+                    "PhpCsFixer\\": "src/"
+                },
+                "exclude-from-classmap": [
+                    "src/Fixer/Internal/*"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Dariusz Rumiński",
+                    "email": "dariusz.ruminski@gmail.com"
+                }
+            ],
+            "description": "A tool to automatically fix PHP code style",
+            "keywords": [
+                "Static code analysis",
+                "fixer",
+                "standards",
+                "static analysis"
+            ],
+            "support": {
+                "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
+                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.64.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/keradus",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-08-30T23:09:38+00:00"
+        },
+        {
+            "name": "hamcrest/hamcrest-php",
+            "version": "v2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hamcrest/hamcrest-php.git",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^5.3|^7.0|^8.0"
+            },
+            "replace": {
+                "cordoval/hamcrest-php": "*",
+                "davedevelopment/hamcrest-php": "*",
+                "kodova/hamcrest-php": "*"
+            },
+            "require-dev": {
+                "phpunit/php-file-iterator": "^1.4 || ^2.0",
+                "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "hamcrest"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "This is the PHP port of Hamcrest Matchers",
+            "keywords": [
+                "test"
+            ],
+            "support": {
+                "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+                "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+            },
+            "time": "2020-07-09T08:09:16+00:00"
+        },
+        {
+            "name": "hyperf/devtool",
+            "version": "v3.1.51",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/devtool.git",
+                "reference": "b032916fa51293f894046754f596f7d6d71352df"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/devtool/zipball/b032916fa51293f894046754f596f7d6d71352df",
+                "reference": "b032916fa51293f894046754f596f7d6d71352df",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/code-parser": "~3.1.0",
+                "hyperf/command": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/di": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Devtool\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Devtool\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A Devtool for Hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "dev",
+                "devtool",
+                "hyperf",
+                "php",
+                "swoole"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-02-06T06:42:00+00:00"
+        },
+        {
+            "name": "hyperf/testing",
+            "version": "v3.1.55",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/testing.git",
+                "reference": "f7daebdcc7aa4520acf61689f7e2e4049e9247db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/testing/zipball/f7daebdcc7aa4520acf61689f7e2e4049e9247db",
+                "reference": "f7daebdcc7aa4520acf61689f7e2e4049e9247db",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hyperf/codec": "~3.1.0",
+                "hyperf/collection": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/http-message": "~3.1.0",
+                "hyperf/http-server": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "phpunit/phpunit": "^10.0",
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/http-foundation": "^5.4 || ^6.0"
+            },
+            "suggest": {
+                "fakerphp/faker": "Required to use Faker feature.(^1.23)"
+            },
+            "bin": [
+                "co-phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Testing\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Testing for hyperf",
+            "keywords": [
+                "dev",
+                "php",
+                "swoole",
+                "testing"
+            ],
+            "support": {
+                "source": "https://github.com/hyperf/testing/tree/v3.1.55"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-05-02T14:13:24+00:00"
+        },
+        {
+            "name": "hyperf/watcher",
+            "version": "v3.1.54",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/watcher.git",
+                "reference": "c92dc6bd94c6e2369a3de262a700550427041b70"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/watcher/zipball/c92dc6bd94c6e2369a3de262a700550427041b70",
+                "reference": "c92dc6bd94c6e2369a3de262a700550427041b70",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-posix": "*",
+                "hyperf/codec": "~3.1.0",
+                "hyperf/command": "~3.1.0",
+                "hyperf/di": "~3.1.0",
+                "hyperf/framework": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "hyperf": {
+                    "config": "Hyperf\\Watcher\\ConfigProvider"
+                },
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
+                "psr-4": {
+                    "Hyperf\\Watcher\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hot reload watcher for Hyperf",
+            "keywords": [
+                "dev",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/hyperf/watcher/issues",
+                "source": "https://github.com/hyperf/watcher/tree/v3.1.54"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-04-26T13:02:01+00:00"
+        },
+        {
+            "name": "mockery/mockery",
+            "version": "1.6.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/mockery/mockery.git",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "hamcrest/hamcrest-php": "^2.0.1",
+                "lib-pcre": ">=7.0",
+                "php": ">=7.3"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5 || ^9.6.17",
+                "symplify/easy-coding-standard": "^12.1.14"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "library/helpers.php",
+                    "library/Mockery.php"
+                ],
+                "psr-4": {
+                    "Mockery\\": "library/Mockery"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Pádraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "https://github.com/padraic",
+                    "role": "Author"
+                },
+                {
+                    "name": "Dave Marshall",
+                    "email": "dave.marshall@atstsolutions.co.uk",
+                    "homepage": "https://davedevelopment.co.uk",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Nathanael Esayeas",
+                    "email": "nathanael.esayeas@protonmail.com",
+                    "homepage": "https://github.com/ghostwriter",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Mockery is a simple yet flexible PHP mock object framework",
+            "homepage": "https://github.com/mockery/mockery",
+            "keywords": [
+                "BDD",
+                "TDD",
+                "library",
+                "mock",
+                "mock objects",
+                "mockery",
+                "stub",
+                "test",
+                "test double",
+                "testing"
+            ],
+            "support": {
+                "docs": "https://docs.mockery.io/",
+                "issues": "https://github.com/mockery/mockery/issues",
+                "rss": "https://github.com/mockery/mockery/releases.atom",
+                "security": "https://github.com/mockery/mockery/security/advisories",
+                "source": "https://github.com/mockery/mockery"
+            },
+            "time": "2024-05-16T03:13:13+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "024473a478be9df5fdaca2c793f2232fe788e414"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
+                "reference": "024473a478be9df5fdaca2c793f2232fe788e414",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "conflict": {
+                "doctrine/collections": "<1.6.8",
+                "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.6.8",
+                "doctrine/common": "^2.13.3 || ^3.2.2",
+                "phpspec/prophecy": "^1.10",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ],
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "support": {
+                "issues": "https://github.com/myclabs/DeepCopy/issues",
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
+            },
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-02-12T12:17:51+00:00"
+        },
+        {
+            "name": "phar-io/manifest",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/manifest.git",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-phar": "*",
+                "ext-xmlwriter": "*",
+                "phar-io/version": "^3.0.1",
+                "php": "^7.2 || ^8.0"
+            },
+            "default-branch": true,
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+            "support": {
+                "issues": "https://github.com/phar-io/manifest/issues",
+                "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-03T12:33:53+00:00"
+        },
+        {
+            "name": "phar-io/version",
+            "version": "3.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/version.git",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Library for handling version information and constraints",
+            "support": {
+                "issues": "https://github.com/phar-io/version/issues",
+                "source": "https://github.com/phar-io/version/tree/3.2.1"
+            },
+            "time": "2022-02-21T01:04:05+00:00"
+        },
+        {
+            "name": "phpstan/phpstan",
+            "version": "1.12.24",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpstan/phpstan.git",
+                "reference": "338b92068f58d9f8035b76aed6cf2b9e5624c025"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/338b92068f58d9f8035b76aed6cf2b9e5624c025",
+                "reference": "338b92068f58d9f8035b76aed6cf2b9e5624c025",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^7.2|^8.0"
+            },
+            "conflict": {
+                "phpstan/phpstan-shim": "*"
+            },
+            "bin": [
+                "phpstan",
+                "phpstan.phar"
+            ],
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHPStan - PHP Static Analysis Tool",
+            "keywords": [
+                "dev",
+                "static analysis"
+            ],
+            "support": {
+                "docs": "https://phpstan.org/user-guide/getting-started",
+                "forum": "https://github.com/phpstan/phpstan/discussions",
+                "issues": "https://github.com/phpstan/phpstan/issues",
+                "security": "https://github.com/phpstan/phpstan/security/policy",
+                "source": "https://github.com/phpstan/phpstan-src"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/ondrejmirtes",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/phpstan",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-04-16T13:01:53+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "10.1.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-xmlwriter": "*",
+                "nikic/php-parser": "^4.19.1 || ^5.1.0",
+                "php": ">=8.1",
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "sebastian/code-unit-reverse-lookup": "^3.0.0",
+                "sebastian/complexity": "^3.2.0",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/lines-of-code": "^2.0.2",
+                "sebastian/version": "^4.0.1",
+                "theseer/tokenizer": "^1.2.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.1"
+            },
+            "suggest": {
+                "ext-pcov": "PHP extension that provides line coverage",
+                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "10.1.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+                "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-08-22T04:31:57+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "4.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
+                "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+                "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-08-31T06:24:48+00:00"
+        },
+        {
+            "name": "phpunit/php-invoker",
+            "version": "4.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-invoker.git",
+                "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+                "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "ext-pcntl": "*",
+                "phpunit/phpunit": "^10.0"
+            },
+            "suggest": {
+                "ext-pcntl": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Invoke callables with a timeout",
+            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+            "keywords": [
+                "process"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+                "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T06:56:09+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "3.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+                "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+                "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-08-31T14:07:24+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "6.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+                "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "6.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+                "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T06:57:52+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "10.5.45",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "bd68a781d8e30348bc297449f5234b3458267ae8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8",
+                "reference": "bd68a781d8e30348bc297449f5234b3458267ae8",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "ext-xmlwriter": "*",
+                "myclabs/deep-copy": "^1.12.1",
+                "phar-io/manifest": "^2.0.4",
+                "phar-io/version": "^3.2.1",
+                "php": ">=8.1",
+                "phpunit/php-code-coverage": "^10.1.16",
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-invoker": "^4.0.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "phpunit/php-timer": "^6.0.0",
+                "sebastian/cli-parser": "^2.0.1",
+                "sebastian/code-unit": "^2.0.0",
+                "sebastian/comparator": "^5.0.3",
+                "sebastian/diff": "^5.1.1",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/exporter": "^5.1.2",
+                "sebastian/global-state": "^6.0.2",
+                "sebastian/object-enumerator": "^5.0.0",
+                "sebastian/recursion-context": "^5.0.0",
+                "sebastian/type": "^4.0.0",
+                "sebastian/version": "^4.0.1"
+            },
+            "suggest": {
+                "ext-soap": "To be able to generate mocks based on WSDL files"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "10.5-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Framework/Assert/Functions.php"
+                ],
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+                "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45"
+            },
+            "funding": [
+                {
+                    "url": "https://phpunit.de/sponsors.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-02-06T16:08:12+00:00"
+        },
+        {
+            "name": "react/cache",
+            "version": "v1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/cache.git",
+                "reference": "d47c472b64aa5608225f47965a484b75c7817d5b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b",
+                "reference": "d47c472b64aa5608225f47965a484b75c7817d5b",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "react/promise": "^3.0 || ^2.0 || ^1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "Async, Promise-based cache interface for ReactPHP",
+            "keywords": [
+                "cache",
+                "caching",
+                "promise",
+                "reactphp"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/cache/issues",
+                "source": "https://github.com/reactphp/cache/tree/v1.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2022-11-30T15:59:55+00:00"
+        },
+        {
+            "name": "react/child-process",
+            "version": "v0.6.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/child-process.git",
+                "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159",
+                "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+                "php": ">=5.3.0",
+                "react/event-loop": "^1.2",
+                "react/stream": "^1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+                "react/socket": "^1.16",
+                "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\ChildProcess\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "Event-driven library for executing child processes with ReactPHP.",
+            "keywords": [
+                "event-driven",
+                "process",
+                "reactphp"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/child-process/issues",
+                "source": "https://github.com/reactphp/child-process/tree/v0.6.6"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2025-01-01T16:37:48+00:00"
+        },
+        {
+            "name": "react/dns",
+            "version": "v1.12.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/dns.git",
+                "reference": "c134600642fa615b46b41237ef243daa65bb64ec"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/dns/zipball/c134600642fa615b46b41237ef243daa65bb64ec",
+                "reference": "c134600642fa615b46b41237ef243daa65bb64ec",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "react/cache": "^1.0 || ^0.6 || ^0.5",
+                "react/event-loop": "^1.2",
+                "react/promise": "^3.0 || ^2.7 || ^1.2.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+                "react/async": "^4 || ^3 || ^2",
+                "react/promise-timer": "^1.9"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Dns\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "Async DNS resolver for ReactPHP",
+            "keywords": [
+                "async",
+                "dns",
+                "dns-resolver",
+                "reactphp"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/dns/issues",
+                "source": "https://github.com/reactphp/dns/tree/v1.12.0"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2023-11-29T12:41:06+00:00"
+        },
+        {
+            "name": "react/event-loop",
+            "version": "v1.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/event-loop.git",
+                "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
+                "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+            },
+            "suggest": {
+                "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\EventLoop\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
+            "keywords": [
+                "asynchronous",
+                "event-loop"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/event-loop/issues",
+                "source": "https://github.com/reactphp/event-loop/tree/v1.5.0"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2023-11-13T13:48:05+00:00"
+        },
+        {
+            "name": "react/promise",
+            "version": "v3.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/promise.git",
+                "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c",
+                "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.1.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "1.10.39 || 1.4.10",
+                "phpunit/phpunit": "^9.6 || ^7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/functions_include.php"
+                ],
+                "psr-4": {
+                    "React\\Promise\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "keywords": [
+                "promise",
+                "promises"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/promise/issues",
+                "source": "https://github.com/reactphp/promise/tree/v3.1.0"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2023-11-16T16:21:57+00:00"
+        },
+        {
+            "name": "react/socket",
+            "version": "v1.15.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/socket.git",
+                "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038",
+                "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+                "php": ">=5.3.0",
+                "react/dns": "^1.11",
+                "react/event-loop": "^1.2",
+                "react/promise": "^3 || ^2.6 || ^1.2.1",
+                "react/stream": "^1.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+                "react/async": "^4 || ^3 || ^2",
+                "react/promise-stream": "^1.4",
+                "react/promise-timer": "^1.10"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Socket\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
+            "keywords": [
+                "Connection",
+                "Socket",
+                "async",
+                "reactphp",
+                "stream"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/socket/issues",
+                "source": "https://github.com/reactphp/socket/tree/v1.15.0"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2023-12-15T11:02:10+00:00"
+        },
+        {
+            "name": "react/stream",
+            "version": "1.x-dev",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/stream.git",
+                "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+                "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+                "php": ">=5.3.8",
+                "react/event-loop": "^1.2"
+            },
+            "require-dev": {
+                "clue/stream-filter": "~1.2",
+                "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Stream\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Lück",
+                    "email": "christian@clue.engineering",
+                    "homepage": "https://clue.engineering/"
+                },
+                {
+                    "name": "Cees-Jan Kiewiet",
+                    "email": "reactphp@ceesjankiewiet.nl",
+                    "homepage": "https://wyrihaximus.net/"
+                },
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com",
+                    "homepage": "https://sorgalla.com/"
+                },
+                {
+                    "name": "Chris Boden",
+                    "email": "cboden@gmail.com",
+                    "homepage": "https://cboden.dev/"
+                }
+            ],
+            "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+            "keywords": [
+                "event-driven",
+                "io",
+                "non-blocking",
+                "pipe",
+                "reactphp",
+                "readable",
+                "stream",
+                "writable"
+            ],
+            "support": {
+                "issues": "https://github.com/reactphp/stream/issues",
+                "source": "https://github.com/reactphp/stream/tree/v1.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://opencollective.com/reactphp",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-06-11T12:45:25+00:00"
+        },
+        {
+            "name": "sebastian/cli-parser",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/cli-parser.git",
+                "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+                "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for parsing CLI options",
+            "homepage": "https://github.com/sebastianbergmann/cli-parser",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+                "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+                "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T07:12:49+00:00"
+        },
+        {
+            "name": "sebastian/code-unit",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit.git",
+                "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
+                "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Collection of value objects that represent the PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/code-unit",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T06:58:43+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+                "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T06:59:15+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "5.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+                "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-mbstring": "*",
+                "php": ">=8.1",
+                "sebastian/diff": "^5.0",
+                "sebastian/exporter": "^5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "https://github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/comparator/issues",
+                "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-10-18T14:56:07+00:00"
+        },
+        {
+            "name": "sebastian/complexity",
+            "version": "3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/complexity.git",
+                "reference": "68ff824baeae169ec9f2137158ee529584553799"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+                "reference": "68ff824baeae169ec9f2137158ee529584553799",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "nikic/php-parser": "^4.18 || ^5.0",
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for calculating the complexity of PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/complexity",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/complexity/issues",
+                "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+                "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-12-21T08:37:17+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "5.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+                "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0",
+                "symfony/process": "^6.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff",
+                "udiff",
+                "unidiff",
+                "unified diff"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/diff/issues",
+                "security": "https://github.com/sebastianbergmann/diff/security/policy",
+                "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T07:15:17+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "6.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
+                "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "suggest": {
+                "ext-posix": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "6.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "https://github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/environment/issues",
+                "security": "https://github.com/sebastianbergmann/environment/security/policy",
+                "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-23T08:47:14+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "5.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+                "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "php": ">=8.1",
+                "sebastian/recursion-context": "^5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "https://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/exporter/issues",
+                "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+                "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T07:17:12+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "6.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+                "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "sebastian/object-reflector": "^3.0",
+                "sebastian/recursion-context": "^5.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "6.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "https://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/global-state/issues",
+                "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+                "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T07:19:19+00:00"
+        },
+        {
+            "name": "sebastian/lines-of-code",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+                "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+                "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "nikic/php-parser": "^4.18 || ^5.0",
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for counting the lines of code in PHP source code",
+            "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+                "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-12-21T08:38:20+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "5.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
+                "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "sebastian/object-reflector": "^3.0",
+                "sebastian/recursion-context": "^5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T07:08:32+00:00"
+        },
+        {
+            "name": "sebastian/object-reflector",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-reflector.git",
+                "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
+                "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Allows reflection of object attributes, including inherited and non-public ones",
+            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+                "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T07:06:18+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "5.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
+                "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "https://github.com/sebastianbergmann/recursion-context",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T07:05:40+00:00"
+        },
+        {
+            "name": "sebastian/type",
+            "version": "4.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/type.git",
+                "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
+                "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Collection of value objects that represent the types of the PHP type system",
+            "homepage": "https://github.com/sebastianbergmann/type",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/type/issues",
+                "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T07:10:45+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "4.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+                "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/version/issues",
+                "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-07T11:34:05+00:00"
+        },
+        {
+            "name": "swoole/ide-helper",
+            "version": "5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/swoole/ide-helper.git",
+                "reference": "c6f9cd0aa1a1e3691ed736253f0cdce381d96cae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/swoole/ide-helper/zipball/c6f9cd0aa1a1e3691ed736253f0cdce381d96cae",
+                "reference": "c6f9cd0aa1a1e3691ed736253f0cdce381d96cae",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "type": "library",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Team Swoole",
+                    "email": "team@swoole.com"
+                }
+            ],
+            "description": "IDE help files for Swoole.",
+            "support": {
+                "issues": "https://github.com/swoole/ide-helper/issues",
+                "source": "https://github.com/swoole/ide-helper/tree/5.1.7"
+            },
+            "time": "2025-03-22T23:53:02+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v6.4.13",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
+                "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/event-dispatcher-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<5.4",
+                "symfony/service-contracts": "<2.5"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "2.0|3.0"
+            },
+            "require-dev": {
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/error-handler": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-25T14:18:03+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v3.5.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
+                "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/event-dispatcher": "^1"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-25T14:20:29+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v6.4.13",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3",
+                "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.8"
+            },
+            "require-dev": {
+                "symfony/process": "^5.4|^6.4|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides basic utilities for the filesystem",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/filesystem/tree/v6.4.13"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-10-25T15:07:50+00:00"
+        },
+        {
+            "name": "symfony/http-foundation",
+            "version": "v6.4.21",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/http-foundation.git",
+                "reference": "3f0c7ea41db479383b81d436b836d37168fd5b99"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f0c7ea41db479383b81d436b836d37168fd5b99",
+                "reference": "3f0c7ea41db479383b81d436b836d37168fd5b99",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-mbstring": "~1.1",
+                "symfony/polyfill-php83": "^1.27"
+            },
+            "conflict": {
+                "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
+            },
+            "require-dev": {
+                "doctrine/dbal": "^2.13.1|^3|^4",
+                "predis/predis": "^1.1|^2.0",
+                "symfony/cache": "^6.4.12|^7.1.5",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
+                "symfony/mime": "^5.4|^6.0|^7.0",
+                "symfony/rate-limiter": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\HttpFoundation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Defines an object-oriented layer for the HTTP specification",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/http-foundation/tree/v6.4.21"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-04-27T13:27:38+00:00"
+        },
+        {
+            "name": "symfony/options-resolver",
+            "version": "v6.4.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/options-resolver.git",
+                "reference": "368128ad168f20e22c32159b9f761e456cec0c78"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78",
+                "reference": "368128ad168f20e22c32159b9f761e456cec0c78",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\OptionsResolver\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides an improved replacement for the array_replace PHP function",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "config",
+                "configuration",
+                "options"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/options-resolver/tree/v6.4.16"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-11-20T10:57:02+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php81",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php81.git",
+                "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
+                "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php81\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php83",
+            "version": "v1.31.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php83.git",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php83\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-09T11:45:10+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v6.4.20",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20",
+                "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Executes commands in sub-processes",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/process/tree/v6.4.20"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-03-10T17:11:00+00:00"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v6.4.19",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c",
+                "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/service-contracts": "^2.5|^3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides a way to profile code",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/stopwatch/tree/v6.4.19"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-02-21T10:06:30+00:00"
+        },
+        {
+            "name": "theseer/tokenizer",
+            "version": "1.2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/theseer/tokenizer.git",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+            "support": {
+                "issues": "https://github.com/theseer/tokenizer/issues",
+                "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-03T12:36:25+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "dev",
+    "stability-flags": {},
+    "prefer-stable": true,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=8.1"
+    },
+    "platform-dev": {},
+    "plugin-api-version": "2.6.0"
+}

+ 42 - 0
config/autoload/amqp.php

@@ -0,0 +1,42 @@
+<?php
+
+declare (strict_types = 1);
+use function Hyperf\Support\env;
+return [
+    'enable' => true,
+    'default' => [
+        'host' => env('AMQP_HOST', '192.168.1.127'),
+        'port' => (int) env('AMQP_PORT', 5672),
+        'user' => env('AMQP_USER', 'guest'),
+        'password' => env('AMQP_PASSWORD', 'guest'),
+        'vhost' => '/',
+        'concurrent' => [
+            'limit' => 1,
+        ],
+        'pool' => [
+            'min_connections' => 1,
+            'max_connections' => 1, // 限制最大连接数为1
+            'connect_timeout' => 1000.0,
+            'wait_timeout' => 3.0,
+            'heartbeat' => -1,
+            
+        ],
+        'params' => [
+            'insist' => false,
+            'login_method' => 'AMQPLAIN',
+            'login_response' => null,
+            'locale' => 'en_US',
+            'connection_timeout' => 3.0,
+            // 尽量保持是 heartbeat 数值的两倍
+            'read_write_timeout' => 6.0,
+            'context' => null,
+            'keepalive' => false,
+            // 尽量保证每个消息的消费时间小于心跳时间
+            'heartbeat' => 3,
+            'close_on_destruct' => false,
+        ],
+    ],
+    'pool2' => [
+
+    ],
+];

+ 21 - 0
config/autoload/annotations.php

@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    'scan' => [
+        'paths' => [
+            BASE_PATH . '/app',
+        ],
+        'ignore_annotations' => [
+            'mixin',
+        ],
+    ],
+];

+ 13 - 0
config/autoload/aspects.php

@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+];

+ 19 - 0
config/autoload/cache.php

@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    'default' => [
+        'driver' => \Hyperf\Cache\Driver\FileSystemDriver::class,
+        'packer' => Hyperf\Codec\Packer\PhpSerializerPacker::class,
+        'prefix' => 'c:',
+        'skip_cache_results' => [],
+    ],
+];

+ 13 - 0
config/autoload/commands.php

@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+];

+ 28 - 0
config/autoload/config_center.php

@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+use Hyperf\ConfigCenter\Mode;
+
+use function Hyperf\Support\env;
+
+return [
+//    'enable' => (bool) env('CONFIG_CENTER_ENABLE', true),
+//    'driver' => env('CONFIG_CENTER_DRIVER', 'nacos'),
+//    'mode' => env('CONFIG_CENTER_MODE', Mode::PROCESS),
+//    'drivers' => [
+//
+//    ],
+    'server' => [
+        'settings' => [
+            'timezone' => 'Asia/Shanghai',
+        ],
+    ],
+];

+ 75 - 0
config/autoload/databases.php

@@ -0,0 +1,75 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+
+use function Hyperf\Support\env;
+
+return [
+    'default' => [
+        'driver' => env('DB_DRIVER', 'mysql'),
+        'host' => env('DB_HOST', 'localhost'),
+        'database' => env('DB_DATABASE', 'hyperf'),
+        'port' => env('DB_PORT', 3306),
+        'username' => env('DB_USERNAME', 'root'),
+        'password' => env('DB_PASSWORD', ''),
+        'charset' => env('DB_CHARSET', 'utf8'),
+        'collation' => env('DB_COLLATION', 'utf8_unicode_ci'),
+        'prefix' => env('DB_PREFIX', ''),
+        'pool' => [
+            'min_connections' => 1,
+            'max_connections' => 10,
+            'connect_timeout' => 10.0,
+            'wait_timeout' => 3.0,
+            'heartbeat' => -1,
+            'max_idle_time' => (float) env('DB_MAX_IDLE_TIME', 60),
+        ],
+        'variables' => [
+            'time_zone' => '+08:00', // 设置MySQL连接的时区
+        ],
+        'commands' => [
+            'gen:model' => [
+                'path' => 'app/Model',
+                'force_casts' => true,
+                'inheritance' => 'Model',
+            ],
+        ],
+    ],
+    'imp' => [
+        'driver' => env('DB_DRIVER', 'mysql'),
+        'host' => env('DB_HOST', 'localhost'),
+        'database' => 'imp',
+        'port' => env('DB_PORT', 3306),
+        'username' => env('DB_USERNAME', 'root'),
+        'password' => env('DB_PASSWORD', ''),
+        'charset' => env('DB_CHARSET', 'utf8'),
+        'collation' => env('DB_COLLATION', 'utf8_unicode_ci'),
+        'prefix' => env('DB_PREFIX', ''),
+        'pool' => [
+            'min_connections' => 1,
+            'max_connections' => 10,
+            'connect_timeout' => 10.0,
+            'wait_timeout' => 3.0,
+            'heartbeat' => -1,
+            'max_idle_time' => (float) env('DB_MAX_IDLE_TIME', 60),
+        ],
+        'variables' => [
+            'time_zone' => '+08:00', // 设置MySQL连接的时区
+        ],
+        'commands' => [
+            'gen:model' => [
+                'path' => 'app/Model',
+                'force_casts' => true,
+                'inheritance' => 'Model',
+            ],
+        ],
+    ],
+
+];

+ 13 - 0
config/autoload/dependencies.php

@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+];

+ 44 - 0
config/autoload/devtool.php

@@ -0,0 +1,44 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    'generator' => [
+        'amqp' => [
+            'consumer' => [
+                'namespace' => 'App\\Amqp\\Consumer',
+            ],
+            'producer' => [
+                'namespace' => 'App\\Amqp\\Producer',
+            ],
+        ],
+        'aspect' => [
+            'namespace' => 'App\\Aspect',
+        ],
+        'command' => [
+            'namespace' => 'App\\Command',
+        ],
+        'controller' => [
+            'namespace' => 'App\\Controller',
+        ],
+        'job' => [
+            'namespace' => 'App\\Job',
+        ],
+        'listener' => [
+            'namespace' => 'App\\Listener',
+        ],
+        'middleware' => [
+            'namespace' => 'App\\Middleware',
+        ],
+        'Process' => [
+            'namespace' => 'App\\Processes',
+        ],
+    ],
+];

+ 22 - 0
config/autoload/exceptions.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    'handler' => [
+        'http' => [
+            Hyperf\HttpServer\Exception\Handler\HttpExceptionHandler::class,
+            App\Exception\Handler\AppExceptionHandler::class,
+        ],
+        'jsonrpc-http' => [
+            App\Exception\Handler\JsonRpcExceptionHandler::class,
+        ],
+    ],
+];

+ 15 - 0
config/autoload/listeners.php

@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler::class,
+    Hyperf\Command\Listener\FailToHandleListener::class,
+];

+ 35 - 0
config/autoload/logger.php

@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    'default' => [
+        'handler' => [
+            'class' => Monolog\Handler\RotatingFileHandler::class,
+            'constructor' => [
+                'filename' => BASE_PATH . '/runtime/logs/hyperf.log',
+                'maxFiles' => 30, // 保留最近30天的日志文件
+                'level' => Monolog\Logger::DEBUG,
+                'bubble' => true,
+                'filePermission' => null,
+                'useLocking' => false,
+                'dateFormat' => 'Y-m-d', // 按天分割日志文件
+            ],
+        ],
+        'formatter' => [
+            'class' => Monolog\Formatter\LineFormatter::class,
+            'constructor' => [
+                'format' => null,
+                'dateFormat' => 'Y-m-d H:i:s',
+                'allowInlineLineBreaks' => true,
+            ],
+        ],
+    ],
+];

+ 15 - 0
config/autoload/middlewares.php

@@ -0,0 +1,15 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+    'http' => [
+    ],
+];

+ 13 - 0
config/autoload/processes.php

@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+return [
+];

+ 29 - 0
config/autoload/redis.php

@@ -0,0 +1,29 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+use function Hyperf\Support\env;
+
+return [
+    'default' => [
+        'host' => env('REDIS_HOST', 'localhost'),
+        'auth' => env('REDIS_AUTH', null),
+        'port' => (int) env('REDIS_PORT', 6379),
+        'db' => (int) env('REDIS_DB', 0),
+        'pool' => [
+            'min_connections' => 1,
+            'max_connections' => 10,
+            'connect_timeout' => 10.0,
+            'wait_timeout' => 3.0,
+            'heartbeat' => -1,
+            'max_idle_time' => (float) env('REDIS_MAX_IDLE_TIME', 60),
+        ],
+    ],
+];

+ 47 - 0
config/autoload/server.php

@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+use Hyperf\Server\Event;
+use Hyperf\Server\Server;
+use Swoole\Constant;
+
+return [
+    'mode' => SWOOLE_PROCESS,
+    'servers' => [
+        [
+            'name' => 'jsonrpc-http',
+            'type' => Server::SERVER_HTTP,
+            'host' => '0.0.0.0',
+            'port' => 9103, 
+            'sock_type' => SWOOLE_SOCK_TCP,
+            'callbacks' => [
+                Event::ON_REQUEST => [Hyperf\JsonRpc\HttpServer::class, 'onRequest'],
+            ],
+        ],
+
+    ],
+    'settings' => [
+        Constant::OPTION_ENABLE_COROUTINE => true,
+        Constant::OPTION_WORKER_NUM => swoole_cpu_num(),
+        Constant::OPTION_PID_FILE => BASE_PATH . '/runtime/hyperf.pid',
+        Constant::OPTION_OPEN_TCP_NODELAY => true,
+        Constant::OPTION_MAX_COROUTINE => 100000,
+        Constant::OPTION_OPEN_HTTP2_PROTOCOL => true,
+        Constant::OPTION_MAX_REQUEST => 100000,
+        Constant::OPTION_SOCKET_BUFFER_SIZE => 2 * 1024 * 1024,
+        Constant::OPTION_BUFFER_OUTPUT_SIZE => 2 * 1024 * 1024,
+    ],
+    'callbacks' => [
+        Event::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'],
+        Event::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'],
+        Event::ON_WORKER_EXIT => [Hyperf\Framework\Bootstrap\WorkerExitCallback::class, 'onWorkerExit'],
+    ],
+];

+ 33 - 0
config/config.php

@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+use Hyperf\Contract\StdoutLoggerInterface;
+use Psr\Log\LogLevel;
+
+use function Hyperf\Support\env;
+
+return [
+    'app_name' => env('APP_NAME', 'skeleton'),
+    'app_env' => env('APP_ENV', 'dev'),
+    'scan_cacheable' => env('SCAN_CACHEABLE', false),
+    StdoutLoggerInterface::class => [
+        'log_level' => [
+            LogLevel::ALERT,
+            LogLevel::CRITICAL,
+            LogLevel::DEBUG,
+            LogLevel::EMERGENCY,
+            LogLevel::ERROR,
+            LogLevel::INFO,
+            LogLevel::NOTICE,
+            LogLevel::WARNING,
+        ],
+    ],
+];

+ 21 - 0
config/container.php

@@ -0,0 +1,21 @@
+<?php
+/**
+ * Initialize a dependency injection container that implemented PSR-11 and return the container.
+ */
+
+declare(strict_types=1);
+/**
+ * This file is part of Hyperf.
+ *
+ * @link     https://www.hyperf.io
+ * @document https://hyperf.wiki
+ * @contact  group@hyperf.io
+ * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
+ */
+use Hyperf\Context\ApplicationContext;
+use Hyperf\Di\Container;
+use Hyperf\Di\Definition\DefinitionSourceFactory;
+
+$container = new Container((new DefinitionSourceFactory())());
+
+return ApplicationContext::setContainer($container);

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff